GUI Programming with Python: QT Edition | ||
---|---|---|
Prev | Chapter 15. A More Complex Framework: Multiple Documents, Multiple Views | Next |
As with the simple document/view framework, the document class should know as little as possible about the actual arrangements. As you can see, little has changed compared to the simple document-view application of Chapter 12.
Example 15-3. The document class
""" mdidoc.py — document or application model. copyright: (C) 2001, Boudewijn Rempt email: boud@rempt.xs4all.nl """ from qt import * from resources import TRUE, FALSE class MDIDoc(QObject): """ The document represents the application model. The current document keeps a 'modified' state. signals: sigDocModified (boolean) sigDocTitleChanged (string) """ def __init__(self, *args): apply(QObject.__init__, (self,)+args) self.newDocument() self._fileName=None self._title="Untitled" def setPathName(self, fileName): self._fileName=fileName self.setTitle(str(QFileInfo(fileName).fileName())) def pathName(self): return self._fileName def setTitle(self, title): self._title=title self.emit(PYSIGNAL("SigDocTitleChanged"), (self._title,)) def title(self): return self._title def newDocument(self): self.slotModify(FALSE) def open(self, fileName, format=None): self.slotModify(FALSE) self.setPathName(fileName) def slotModify(self, value=None): if value==None: self._modified=not self._modified else: self._modified = value self.emit(PYSIGNAL("sigDocModified"), (self._modified,)) def modified(self): return self._modified def close(self): pass def save(self, fileName = None, format = None): if fileName is not None and fileName <> "": self.setPathName(fileName) else: if self.pathName() == None: raise "Could not save document: no filename." self.slotModify(FALSE)