Merge pull request #821 from resinneublem/notes-field

Adds a new notes pane for each fit
This commit is contained in:
Ryan Holmes
2016-11-20 20:48:02 -05:00
committed by GitHub
5 changed files with 67 additions and 1 deletions

View File

@@ -0,0 +1,14 @@
"""
Migration 16
- Alters fits table to introduce notes attribute
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update fits schema to include notes attribute
try:
saveddata_engine.execute("SELECT notes FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN notes VARCHAR;")

View File

@@ -45,6 +45,7 @@ fits_table = Table("fits", saveddata_meta,
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
Column("implantLocation", Integer, nullable=False, default=ImplantLocation.FIT),
Column("notes", String, nullable = True),
)
projectedFits_table = Table("projectedFits", saveddata_meta,

View File

@@ -1085,6 +1085,7 @@ class Fit(object):
copy.name = "%s copy" % self.name
copy.damagePattern = self.damagePattern
copy.targetResists = self.targetResists
copy.notes = self.notes
toCopy = (
"modules",

View File

@@ -25,6 +25,7 @@ from gui.fighterView import FighterView
from gui.cargoView import CargoView
from gui.implantView import ImplantView
from gui.projectedView import ProjectedView
from gui.notesView import NotesView
from gui.pyfatogglepanel import TogglePanel
from gui.gangView import GangView
from gui.bitmapLoader import BitmapLoader
@@ -57,6 +58,7 @@ class AdditionsPane(TogglePanel):
projectedImg = BitmapLoader.getImage("projected_small", "gui")
gangImg = BitmapLoader.getImage("fleet_fc_small", "gui")
cargoImg = BitmapLoader.getImage("cargo_small", "gui")
notesImg = BitmapLoader.getImage("skill_small", "gui")
self.drone = DroneView(self.notebook)
self.notebook.AddPage(self.drone, "Drones", tabImage = droneImg, showClose = False)
@@ -79,9 +81,12 @@ class AdditionsPane(TogglePanel):
self.gangPage = GangView(self.notebook)
self.notebook.AddPage(self.gangPage, "Fleet", tabImage = gangImg, showClose = False)
self.notes = NotesView(self.notebook)
self.notebook.AddPage(self.notes, "Notes", tabImage = notesImg, showClose = False)
self.notebook.SetSelection(0)
PANES = ["Drones", "Fighters", "Cargo", "Implants", "Boosters", "Projected", "Fleet"]
PANES = ["Drones", "Fighters", "Cargo", "Implants", "Boosters", "Projected", "Fleet", "Notes"]
def select(self, name):
self.notebook.SetSelection(self.PANES.index(name))

45
gui/notesView.py Normal file
View File

@@ -0,0 +1,45 @@
import wx
import service
import gui.globalEvents as GE
import gui.mainFrame
class NotesView(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.lastFitId = None
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
mainSizer = wx.BoxSizer(wx.VERTICAL)
self.editNotes = wx.TextCtrl(self, style=wx.TE_MULTILINE)
mainSizer.Add(self.editNotes, 1, wx.EXPAND)
self.SetSizer(mainSizer)
self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged)
self.Bind(wx.EVT_TEXT, self.onText)
self.saveTimer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.delayedSave, self.saveTimer)
def fitChanged(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(event.fitID)
self.Parent.Parent.DisablePage(self, not fit or fit.isStructure)
if event.fitID is None and self.lastFitId is not None:
self.lastFitId = None
event.Skip()
return
elif event.fitID != self.lastFitId:
self.lastFitId = event.fitID
self.editNotes.SetValue(fit.notes or "")
def onText(self, event):
# delay the save so we're not writing to sqlite on every keystroke
self.saveTimer.Stop() # cancel the existing timer
self.saveTimer.Start(1000, True)
def delayedSave(self, event):
sFit = service.Fit.getInstance()
fit = sFit.getFit(self.lastFitId)
newNotes = self.editNotes.GetValue()
fit.notes = newNotes
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=fit.ID))