class CtxSubPanel: def __init__(self, parent): self.receivers = {} self.parent = parent self.mw = self.parent.mainwindow self.doc = self.parent.mainwindow.document self.panel = TFrame(parent.panel, style='FlatFrame', borderwidth=0) self.separator = TLabel(self.panel, image="toolbar_sep") self.mw.Subscribe(DOCUMENT, self.doc_changed) self.setNormal() def ReSubscribe(self): pass def doc_changed(self, doc): self.doc = doc self.ReSubscribe() def setLast(self): self.separator.forget() def setNormal(self): self.separator.pack(side=RIGHT, padx=2)
class CtxSubPanel: def __init__(self, parent): self.receivers={} self.parent=parent self.mw=self.parent.mainwindow self.doc=self.parent.mainwindow.document self.panel=TFrame(parent.panel, style='FlatFrame', borderwidth=0) self.separator = TLabel(self.panel, image = "toolbar_sep") self.mw.Subscribe(DOCUMENT, self.doc_changed) self.setNormal() def ReSubscribe(self): pass def doc_changed(self, doc): self.doc=doc self.ReSubscribe() def setLast(self): self.separator.forget() def setNormal(self): self.separator.pack(side = RIGHT, padx=2)
class TabsPanel(TFrame, Publisher): content = [] stub = 1 docmanager = None def __init__(self, parent, mainwindow): self.parent = parent self.mainwindow = mainwindow TFrame.__init__(self, self.parent, name='tabsPanel', style='FlatFrame', borderwidth=0) self.left_label = TLabel(self, style=LEFT_CORNER, image='space_3') self.right_label = TLabel(self, style=RIGHT_CORNER, image='space_3') self.stub_label = TLabel(self, style='DrawingAreaTop', image='space_5') self.stub_label.pack(side=TOP, fill=X) def ReSubscribe(self): self.docmanager.activedoc.Subscribe(UNDO, self.check_save_status) self.check_save_status() def check_save_status(self): for item in self.content: if item.is_Active: if self.docmanager.activedoc.WasEdited(): item.setNotSaved() else: item.setNotSaved(1) self.updateTabNames() def refresh(self): self.stub_label.foget() for item in self.content: item.forget() if len(self.content) < 2: self.stub_label.pack(side=TOP, fill=X) else: for item in self.content: item.pack(side=LEFT) def check_state(self): if len(self.content) > 1 and self.stub: self.stub_label.forget() self.left_label.pack(side=LEFT, fill=Y) for item in self.content: item.pack(side=LEFT) self.right_label.pack(side=BOTTOM, fill=X) self.stub = 0 return 0 if len(self.content) < 2 and self.stub == 0: self.left_label.forget() for item in self.content: item.forget() self.right_label.forget() self.stub_label.pack(side=TOP, fill=X) self.stub = 1 return 0 return 1 def stub(self): pass def setActive(self, tab): if not tab.is_Active: for item in self.content: item.setNonActive() tab.setActive() self.docmanager.SetActiveDocument(tab.document) self.ReSubscribe() if self.content[0].is_Active: self.left_label["style"] = LEFT_CORNER_ACTIVE else: self.left_label["style"] = LEFT_CORNER def addNewTab(self, doc): if doc.meta.fullpathname: name = doc.meta.filename else: name = os.path.splitext(doc.meta.filename)[0] tab = DocTab(self, name, document=doc) self.content.append(tab) if self.check_state() and self.stub == 0: self.right_label.forget() tab.pack(side=LEFT, fill=Y) self.right_label.pack(side=BOTTOM, fill=X) self.setActive(tab) return tab def closeTab(self, tab, exit_state=False): result = self.docmanager.save_doc_if_edited(tab.document) index = self.content.index(tab) if not result == msgdialog.Cancel: self.content.remove(tab) if not len(self.content): if not exit_state: self.docmanager.NewDocument() else: if tab.is_Active: if index == len(self.content): self.setActive(self.content[index - 1]) else: self.setActive(self.content[index]) if not exit_state: self.docmanager.CloseDocument(tab.document) tab.forget() self.check_state() return result def saveAll(self): for item in self.content: item.saveTab() def closeActiveTab(self): for item in self.content: if item.is_Active: self.closeTab(item) def updateTabNames(self): for item in self.content: item.updateTabName() def closeAllButThis(self, tab): self.setActive(tab) for item in [] + self.content: if not item.is_Active: if self.closeTab(item) == msgdialog.Cancel: return self.check_state() def closeAll(self, exit_state=False): for item in [] + self.content: self.setActive(item) if self.closeTab(item, exit_state) == msgdialog.Cancel: self.check_state() return msgdialog.Cancel return msgdialog.Yes