From b55fcfaf04a3a040accf509b0ed74efcdc11c5a1 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Tue, 11 Jul 2017 02:06:09 -0400 Subject: [PATCH] cleanup --- eos/db/gamedata/queries.py | 1 + eos/db/migrations/upgrade25.py | 2 -- eos/db/migrations/upgrade26.py | 2 -- eos/db/saveddata/booster.py | 21 ++++++++-------- gui/builtinAdditionPanes/projectedView.py | 2 +- gui/builtinMarketBrowser/itemView.py | 12 +++++----- gui/builtinMarketBrowser/searchBox.py | 2 +- gui/builtinShipBrowser/categoryItem.py | 4 ++-- gui/builtinShipBrowser/fitItem.py | 22 ++++++++--------- gui/builtinShipBrowser/navigationPanel.py | 29 +++++++++++------------ gui/builtinShipBrowser/pfStaticText.py | 2 +- gui/builtinShipBrowser/raceSelector.py | 5 ++-- gui/builtinShipBrowser/sfBrowserItem.py | 1 - gui/builtinShipBrowser/shipItem.py | 10 ++++---- gui/builtinViews/fittingView.py | 14 +++++------ 15 files changed, 60 insertions(+), 69 deletions(-) diff --git a/eos/db/gamedata/queries.py b/eos/db/gamedata/queries.py index 39ac8b3d1..7a50d726c 100644 --- a/eos/db/gamedata/queries.py +++ b/eos/db/gamedata/queries.py @@ -319,6 +319,7 @@ def getVariations(itemids, groupIDs=None, where=None, eager=None): return vars + @cachedQuery(1, "attr") def getAttributeInfo(attr, eager=None): if isinstance(attr, basestring): diff --git a/eos/db/migrations/upgrade25.py b/eos/db/migrations/upgrade25.py index 214a5b647..409046b16 100644 --- a/eos/db/migrations/upgrade25.py +++ b/eos/db/migrations/upgrade25.py @@ -10,8 +10,6 @@ https://community.eveonline.com/news/patch-notes/patch-notes-for-july-2017-relea conversion. Best effort ftw """ -import sqlalchemy - conversion = { frozenset([30046, 29969, 30139, 30122, 30090]): (45627, 45590, 45601, 45615), frozenset([30046, 29969, 30139, 30122, 30088]): (45627, 45590, 45601, 45614), diff --git a/eos/db/migrations/upgrade26.py b/eos/db/migrations/upgrade26.py index d5b639a4c..e2aecb452 100644 --- a/eos/db/migrations/upgrade26.py +++ b/eos/db/migrations/upgrade26.py @@ -4,8 +4,6 @@ Migration 26 - Deletes invalid command fit relationships caused by a bug (see #1244) """ -import sqlalchemy - def upgrade(saveddata_engine): saveddata_engine.execute("DELETE FROM commandFits WHERE boosterID NOT IN (SELECT ID FROM fits) OR boostedID NOT IN (SELECT ID FROM fits)") diff --git a/eos/db/saveddata/booster.py b/eos/db/saveddata/booster.py index fa29c70b2..bc95d02cc 100644 --- a/eos/db/saveddata/booster.py +++ b/eos/db/saveddata/booster.py @@ -18,29 +18,28 @@ # =============================================================================== from sqlalchemy import Table, Column, ForeignKey, Integer, Boolean, DateTime -from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.orm import mapper, relation import datetime from eos.db import saveddata_meta from eos.saveddata.booster import Booster from eos.saveddata.boosterSideEffect import BoosterSideEffect -from eos.saveddata.fit import Fit boosters_table = Table("boosters", saveddata_meta, - Column("ID", Integer, primary_key=True), - Column("itemID", Integer), - Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False), - Column("active", Boolean), - Column("created", DateTime, nullable=True, default=datetime.datetime.now), - Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now), + Column("ID", Integer, primary_key=True), + Column("itemID", Integer), + Column("fitID", Integer, ForeignKey("fits.ID"), nullable=False), + Column("active", Boolean), + Column("created", DateTime, nullable=True, default=datetime.datetime.now), + Column("modified", DateTime, nullable=True, onupdate=datetime.datetime.now), ) booster_side_effect_table = Table("boosterSideEffects", saveddata_meta, - Column("boosterID", Integer, ForeignKey("boosters.ID"), primary_key=True, index=True), - Column("effectID", Integer, nullable=False, primary_key=True), - Column("active", Boolean, default=False)) + Column("boosterID", Integer, ForeignKey("boosters.ID"), primary_key=True, index=True), + Column("effectID", Integer, nullable=False, primary_key=True), + Column("active", Boolean, default=False) + ) mapper(Booster, boosters_table, diff --git a/gui/builtinAdditionPanes/projectedView.py b/gui/builtinAdditionPanes/projectedView.py index 2e657dd11..15b661234 100644 --- a/gui/builtinAdditionPanes/projectedView.py +++ b/gui/builtinAdditionPanes/projectedView.py @@ -191,7 +191,7 @@ class ProjectedView(d.Display): stuff = [] if fit is not None: - #pyfalog.debug(" Collecting list of stuff to display in ProjectedView") + # pyfalog.debug(" Collecting list of stuff to display in ProjectedView") self.modules = fit.projectedModules[:] self.drones = fit.projectedDrones[:] self.fighters = fit.projectedFighters[:] diff --git a/gui/builtinMarketBrowser/itemView.py b/gui/builtinMarketBrowser/itemView.py index 382b5fd02..3c971a699 100644 --- a/gui/builtinMarketBrowser/itemView.py +++ b/gui/builtinMarketBrowser/itemView.py @@ -9,7 +9,7 @@ from gui.utils.staticHelpers import DragDropHelper from logbook import Logger -from gui.builtinMarketBrowser.events import * +import events pyfalog = Logger(__name__) @@ -89,10 +89,10 @@ class ItemView(Display): for itemID in self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]: self.recentlyUsedModules.add(self.sMkt.getItem(itemID)) - wx.PostEvent(self.mainFrame, ItemSelected(itemID=self.active[sel].ID)) + wx.PostEvent(self.mainFrame, events.ItemSelected(itemID=self.active[sel].ID)) def storeRecentlyUsedMarketItem(self, itemID): - if len(self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]) > MAX_RECENTLY_USED_MODULES: + if len(self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"]) > events.MAX_RECENTLY_USED_MODULES: self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"].pop(0) self.sMkt.serviceMarketRecentlyUsedModules["pyfaMarketRecentlyUsedModules"].append(itemID) @@ -104,7 +104,7 @@ class ItemView(Display): if sel.IsOk(): # Get data field of the selected item (which is a marketGroup ID if anything was selected) seldata = self.marketView.GetPyData(sel) - if seldata is not None and seldata != RECENTLY_USED_MODULES: + if seldata is not None and seldata != events.RECENTLY_USED_MODULES: # If market group treeview item doesn't have children (other market groups or dummies), # then it should have items in it and we want to request them if self.marketView.ItemHasChildren(sel) is False: @@ -117,7 +117,7 @@ class ItemView(Display): items = set() else: # If method was called but selection wasn't actually made or we have a hit on recently used modules - if seldata == RECENTLY_USED_MODULES: + if seldata == events.RECENTLY_USED_MODULES: items = self.recentlyUsedModules else: items = set() @@ -126,7 +126,7 @@ class ItemView(Display): self.updateItemStore(items) # Set toggle buttons / use search mode flag if recently used modules category is selected (in order to have all modules listed and not filtered) - if seldata is not RECENTLY_USED_MODULES: + if seldata is not events.RECENTLY_USED_MODULES: self.setToggles() else: self.marketBrowser.searchMode = True diff --git a/gui/builtinMarketBrowser/searchBox.py b/gui/builtinMarketBrowser/searchBox.py index 4fd899111..4132f451b 100644 --- a/gui/builtinMarketBrowser/searchBox.py +++ b/gui/builtinMarketBrowser/searchBox.py @@ -10,4 +10,4 @@ class SearchBox(PFSearchBox): self.SetSearchBitmap(searchBitmap) self.SetCancelBitmap(cancelBitmap) self.ShowSearchButton() - self.ShowCancelButton() \ No newline at end of file + self.ShowCancelButton() diff --git a/gui/builtinShipBrowser/categoryItem.py b/gui/builtinShipBrowser/categoryItem.py index 86ce08f75..875454e43 100644 --- a/gui/builtinShipBrowser/categoryItem.py +++ b/gui/builtinShipBrowser/categoryItem.py @@ -8,7 +8,7 @@ import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils import gui.utils.fonts as fonts from gui.bitmapLoader import BitmapLoader -from .events import * +import events pyfalog = Logger(__name__) @@ -77,7 +77,7 @@ class CategoryItem(SFBrowserItem): def selectCategory(self, event): categoryID = self.categoryID - wx.PostEvent(self.shipBrowser, Stage2Selected(categoryID=categoryID, back=False)) + wx.PostEvent(self.shipBrowser, events.Stage2Selected(categoryID=categoryID, back=False)) def MouseLeftUp(self, event): self.selectCategory(event) diff --git a/gui/builtinShipBrowser/fitItem.py b/gui/builtinShipBrowser/fitItem.py index d5dde2967..dca584929 100644 --- a/gui/builtinShipBrowser/fitItem.py +++ b/gui/builtinShipBrowser/fitItem.py @@ -12,7 +12,7 @@ import gui.mainFrame import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils import gui.utils.fonts as fonts -from events import * +import events from gui.bitmapLoader import BitmapLoader from gui.builtinShipBrowser.pfBitmapFrame import PFBitmapFrame from service.fit import Fit @@ -171,7 +171,7 @@ class FitItem(SFItem.SFBrowserItem): self.fitBooster = not self.fitBooster self.boosterBtn.Show(self.fitBooster) self.Refresh() - wx.PostEvent(self.mainFrame, BoosterListUpdated()) + wx.PostEvent(self.mainFrame, events.BoosterListUpdated()) event.Skip() def OnProjectToFit(self, event): @@ -303,8 +303,8 @@ class FitItem(SFItem.SFBrowserItem): sFit = Fit.getInstance() fitID = sFit.copyFit(self.fitID) self.shipBrowser.fitIDMustEditName = fitID - wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID)) - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + wx.PostEvent(self.shipBrowser, events.Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.mainFrame, events.FitSelected(fitID=fitID)) def renameBtnCB(self): if self.tcFitName.IsShown(): @@ -327,7 +327,7 @@ class FitItem(SFItem.SFBrowserItem): if fitName: self.fitName = fitName sFit.renameFit(self.fitID, self.fitName) - wx.PostEvent(self.mainFrame, FitRenamed(fitID=self.fitID)) + wx.PostEvent(self.mainFrame, events.FitRenamed(fitID=self.fitID)) else: self.tcFitName.SetValue(self.fitName) @@ -368,15 +368,15 @@ class FitItem(SFItem.SFBrowserItem): sFit.deleteFit(self.fitID) # Notify other areas that a fit has been deleted - wx.PostEvent(self.mainFrame, FitRemoved(fitID=self.fitID)) + wx.PostEvent(self.mainFrame, events.FitRemoved(fitID=self.fitID)) # todo: would a simple RefreshList() work here instead of posting that a stage has been selected? if self.shipBrowser.GetActiveStage() == 5: - wx.PostEvent(self.shipBrowser, ImportSelected(fits=self.shipBrowser.lastdata)) + wx.PostEvent(self.shipBrowser, events.ImportSelected(fits=self.shipBrowser.lastdata)) elif self.shipBrowser.GetActiveStage() == 4: - wx.PostEvent(self.shipBrowser, SearchSelected(text=self.shipBrowser.navpanel.lastSearch, back=True)) + wx.PostEvent(self.shipBrowser, events.SearchSelected(text=self.shipBrowser.navpanel.lastSearch, back=True)) else: - wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID)) + wx.PostEvent(self.shipBrowser, events.Stage3Selected(shipID=self.shipID)) def MouseLeftUp(self, event): if self.dragging and self.dragged: @@ -432,9 +432,9 @@ class FitItem(SFItem.SFBrowserItem): def selectFit(self, event=None, newTab=False): if newTab: - wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID, startup=2)) + wx.PostEvent(self.mainFrame, events.FitSelected(fitID=self.fitID, startup=2)) else: - wx.PostEvent(self.mainFrame, FitSelected(fitID=self.fitID)) + wx.PostEvent(self.mainFrame, events.FitSelected(fitID=self.fitID)) def RestoreEditButton(self): self.tcFitName.Show(False) diff --git a/gui/builtinShipBrowser/navigationPanel.py b/gui/builtinShipBrowser/navigationPanel.py index be36fec01..ae79838cf 100644 --- a/gui/builtinShipBrowser/navigationPanel.py +++ b/gui/builtinShipBrowser/navigationPanel.py @@ -8,7 +8,7 @@ import gui.mainFrame import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils import gui.utils.fonts as fonts -from events import * +import events from gui.bitmapLoader import BitmapLoader from service.fit import Fit @@ -87,7 +87,7 @@ class NavigationPanel(SFItem.SFBrowserItem): realsearch = search.replace("*", "") if len(realsearch) >= 3: self.lastSearch = search - wx.PostEvent(self.shipBrowser, SearchSelected(text=search, back=False)) + wx.PostEvent(self.shipBrowser, events.SearchSelected(text=search, back=False)) def ToggleSearchBox(self): if self.BrowserSearchBox.IsShown(): @@ -122,7 +122,7 @@ class NavigationPanel(SFItem.SFBrowserItem): self.btnRecent.normalBmp = self.recentBmpD if emitEvent: - wx.PostEvent(self.shipBrowser, Stage1Selected()) + wx.PostEvent(self.shipBrowser, events.Stage1Selected()) else: self.shipBrowser.recentFits = True self.btnRecent.label = "Hide Recent Fits" @@ -131,7 +131,7 @@ class NavigationPanel(SFItem.SFBrowserItem): if emitEvent: sFit = Fit.getInstance() fits = sFit.getRecentFits() - wx.PostEvent(self.shipBrowser, ImportSelected(fits=fits, back=True, recent=True)) + wx.PostEvent(self.shipBrowser, events.ImportSelected(fits=fits, back=True, recent=True)) def ToggleEmptyGroupsView(self): if self.shipBrowser.filterShipsWithNoFits: @@ -146,10 +146,10 @@ class NavigationPanel(SFItem.SFBrowserItem): stage = self.shipBrowser.GetActiveStage() if stage == 1: - wx.PostEvent(self.shipBrowser, Stage1Selected()) + wx.PostEvent(self.shipBrowser, events.Stage1Selected()) elif stage == 2: categoryID = self.shipBrowser.GetStageData(stage) - wx.PostEvent(self.shipBrowser, Stage2Selected(categoryID=categoryID, back=True)) + wx.PostEvent(self.shipBrowser, events.Stage2Selected(categoryID=categoryID, back=True)) def ShowNewFitButton(self, show): self.btnNew.Show(show) @@ -167,8 +167,8 @@ class NavigationPanel(SFItem.SFBrowserItem): sFit = Fit.getInstance() fitID = sFit.newFit(shipID, "%s fit" % shipName) self.shipBrowser.fitIDMustEditName = fitID - wx.PostEvent(self.Parent, Stage3Selected(shipID=shipID)) - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + wx.PostEvent(self.Parent, events.Stage3Selected(shipID=shipID)) + wx.PostEvent(self.mainFrame, events.FitSelected(fitID=fitID)) def OnHistoryReset(self): self.ToggleRecentShips(False, False) @@ -259,16 +259,15 @@ class NavigationPanel(SFItem.SFBrowserItem): def gotoStage(self, stage, data=None): self.shipBrowser.recentFits = False if stage == 1: - wx.PostEvent(self.Parent, Stage1Selected()) + wx.PostEvent(self.Parent, events.Stage1Selected()) elif stage == 2: - wx.PostEvent(self.Parent, Stage2Selected(categoryID=data, back=True)) + wx.PostEvent(self.Parent, events.Stage2Selected(categoryID=data, back=True)) elif stage == 3: - wx.PostEvent(self.Parent, Stage3Selected(shipID=data)) + wx.PostEvent(self.Parent, events.Stage3Selected(shipID=data)) elif stage == 4: self.shipBrowser._activeStage = 4 - wx.PostEvent(self.Parent, SearchSelected(text=data, back=True)) + wx.PostEvent(self.Parent, events.SearchSelected(text=data, back=True)) elif stage == 5: - wx.PostEvent(self.Parent, ImportSelected(fits=data)) + wx.PostEvent(self.Parent, events.ImportSelected(fits=data)) else: - wx.PostEvent(self.Parent, Stage1Selected()) - + wx.PostEvent(self.Parent, events.Stage1Selected()) diff --git a/gui/builtinShipBrowser/pfStaticText.py b/gui/builtinShipBrowser/pfStaticText.py index 76640e3de..66a602239 100644 --- a/gui/builtinShipBrowser/pfStaticText.py +++ b/gui/builtinShipBrowser/pfStaticText.py @@ -20,4 +20,4 @@ class PFStaticText(wx.Panel): @staticmethod def GetType(): - return -1 \ No newline at end of file + return -1 diff --git a/gui/builtinShipBrowser/raceSelector.py b/gui/builtinShipBrowser/raceSelector.py index d045eb8d2..3807bdf66 100644 --- a/gui/builtinShipBrowser/raceSelector.py +++ b/gui/builtinShipBrowser/raceSelector.py @@ -6,7 +6,7 @@ from logbook import Logger import gui.utils.animEffects as animEffects import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils -from events import * +import events from gui.bitmapLoader import BitmapLoader pyfalog = Logger(__name__) @@ -134,7 +134,7 @@ class RaceSelector(wx.Window): if stage == 2: categoryID = self.shipBrowser.GetStageData(stage) - wx.PostEvent(self.shipBrowser, Stage2Selected(categoryID=categoryID, back=True)) + wx.PostEvent(self.shipBrowser, events.Stage2Selected(categoryID=categoryID, back=True)) event.Skip() def HitTest(self, mx, my): @@ -268,4 +268,3 @@ class RaceSelector(wx.Window): self.checkMaximize = False event.Skip() - diff --git a/gui/builtinShipBrowser/sfBrowserItem.py b/gui/builtinShipBrowser/sfBrowserItem.py index 246a1b407..4f33f101f 100644 --- a/gui/builtinShipBrowser/sfBrowserItem.py +++ b/gui/builtinShipBrowser/sfBrowserItem.py @@ -255,7 +255,6 @@ class SFBrowserItem(wx.Window): self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) - if "wxMSW" in wx.PlatformInfo: self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) diff --git a/gui/builtinShipBrowser/shipItem.py b/gui/builtinShipBrowser/shipItem.py index f6b61bf18..3ef8163df 100644 --- a/gui/builtinShipBrowser/shipItem.py +++ b/gui/builtinShipBrowser/shipItem.py @@ -8,7 +8,7 @@ import gui.mainFrame import gui.utils.colorUtils as colorUtils import gui.utils.drawUtils as drawUtils import gui.utils.fonts as fonts -from events import * +import events from gui.bitmapLoader import BitmapLoader from gui.contextMenu import ContextMenu from service.fit import Fit @@ -147,7 +147,7 @@ class ShipItem(SFItem.SFBrowserItem): else: shipName, shipTrait, fittings = self.shipFittingInfo if fittings > 0: - wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID, back=True)) + wx.PostEvent(self.shipBrowser, events.Stage3Selected(shipID=self.shipID, back=True)) else: self.newBtnCB() @@ -186,8 +186,8 @@ class ShipItem(SFItem.SFBrowserItem): sFit = Fit.getInstance() fitID = sFit.newFit(self.shipID, self.tcFitName.GetValue()) - wx.PostEvent(self.shipBrowser, Stage3Selected(shipID=self.shipID, back=False)) - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + wx.PostEvent(self.shipBrowser, events.Stage3Selected(shipID=self.shipID, back=False)) + wx.PostEvent(self.mainFrame, events.FitSelected(fitID=fitID)) def UpdateElementsPos(self, mdc): rect = self.GetRect() @@ -289,5 +289,3 @@ class ShipItem(SFItem.SFBrowserItem): else: editCtl.SetSize((self.editWidth, -1)) editCtl.SetPosition((fnEditPosX, fnEditPosY)) - - diff --git a/gui/builtinViews/fittingView.py b/gui/builtinViews/fittingView.py index d2c4feaf4..59a7fb64d 100644 --- a/gui/builtinViews/fittingView.py +++ b/gui/builtinViews/fittingView.py @@ -25,7 +25,7 @@ import gui.mainFrame from gui.builtinMarketBrowser.events import ItemSelected, ITEM_SELECTED import gui.display as d from gui.contextMenu import ContextMenu -from gui.builtinShipBrowser.events import * +import gui.builtinShipBrowser.events as sbEvents import gui.multiSwitch from eos.saveddata.mode import Mode from eos.saveddata.module import Module, Slot, Rack @@ -50,7 +50,7 @@ class FitSpawner(gui.multiSwitch.TabSpawner): def __init__(self, multiSwitch): self.multiSwitch = multiSwitch self.mainFrame = mainFrame = gui.mainFrame.MainFrame.getInstance() - mainFrame.Bind(EVT_FIT_SELECTED, self.fitSelected) + mainFrame.Bind(sbEvents.EVT_FIT_SELECTED, self.fitSelected) self.multiSwitch.tabsContainer.handleDrag = self.handleDrag def fitSelected(self, event): @@ -138,8 +138,8 @@ class FittingView(d.Display): self.Show(False) self.parent = parent self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) - self.mainFrame.Bind(EVT_FIT_RENAMED, self.fitRenamed) - self.mainFrame.Bind(EVT_FIT_REMOVED, self.fitRemoved) + self.mainFrame.Bind(sbEvents.EVT_FIT_RENAMED, self.fitRenamed) + self.mainFrame.Bind(sbEvents.EVT_FIT_REMOVED, self.fitRemoved) self.mainFrame.Bind(ITEM_SELECTED, self.appendItem) self.Bind(wx.EVT_LEFT_DCLICK, self.removeItem) @@ -210,13 +210,13 @@ class FittingView(d.Display): def handleDrag(self, type, fitID): # Those are drags coming from pyfa sources, NOT builtin wx drags if type == "fit": - wx.PostEvent(self.mainFrame, FitSelected(fitID=fitID)) + wx.PostEvent(self.mainFrame, sbEvents.FitSelected(fitID=fitID)) def Destroy(self): self.parent.Unbind(EVT_NOTEBOOK_PAGE_CHANGED, handler=self.pageChanged) self.mainFrame.Unbind(GE.FIT_CHANGED, handler=self.fitChanged) - self.mainFrame.Unbind(EVT_FIT_RENAMED, handler=self.fitRenamed) - self.mainFrame.Unbind(EVT_FIT_REMOVED, handler=self.fitRemoved) + self.mainFrame.Unbind(sbEvents.EVT_FIT_RENAMED, handler=self.fitRenamed) + self.mainFrame.Unbind(sbEvents.EVT_FIT_REMOVED, handler=self.fitRemoved) self.mainFrame.Unbind(ITEM_SELECTED, handler=self.appendItem) d.Display.Destroy(self)