class MdiMainWindow(QMainWindow): def __init__(self, qApp, freecadGraph): QMainWindow.__init__(self) self._firstwidget = None self._workspace = QWorkspace() self.setCentralWidget(self._workspace) self.setAcceptDrops(True) self.setWindowTitle("Pivy Quarter MDI example") child = self.createMdiChild() child.show() child.setSceneGraph(freecadGraph) windowmapper = QtCore.QSignalMapper(self) self.connect(QtCore.QSignalMapper(self), QtCore.SIGNAL("mapped(QWidget *)"), self._workspace.setActiveWindow) def closeEvent(self, event): self._workspace.closeAllWindows() def createMdiChild(self): widget = MdiQuarterWidget(None, self._firstwidget) self._workspace.addWindow(widget) if not self._firstwidget: self._firstwidget = widget return widget
class MdiMainWindow(QMainWindow): def __init__(self, qApp): QMainWindow.__init__(self) self._firstwidget = None self._workspace = QWorkspace() self.setCentralWidget(self._workspace) self.setAcceptDrops(True) self.setWindowTitle("Pivy Quarter MDI example") filemenu = self.menuBar().addMenu("&File") windowmenu = self.menuBar().addMenu("&Windows") fileopenaction = QAction("&Create Box", self) fileexitaction = QAction("E&xit", self) tileaction = QAction("Tile", self) cascadeaction = QAction("Cascade", self) filemenu.addAction(fileopenaction) filemenu.addAction(fileexitaction) windowmenu.addAction(tileaction) windowmenu.addAction(cascadeaction) self.connect(fileopenaction, QtCore.SIGNAL("triggered()"), self.createBoxInFreeCAD) self.connect(fileexitaction, QtCore.SIGNAL("triggered()"), QtGui.qApp.closeAllWindows) self.connect(tileaction, QtCore.SIGNAL("triggered()"), self._workspace.tile) self.connect(cascadeaction, QtCore.SIGNAL("triggered()"), self._workspace.cascade) windowmapper = QtCore.QSignalMapper(self) self.connect(windowmapper, QtCore.SIGNAL("mapped(QWidget *)"), self._workspace.setActiveWindow) self.dirname = os.curdir def closeEvent(self, event): self._workspace.closeAllWindows() def createBoxInFreeCAD(self): d = FreeCAD.newDocument() o = d.addObject("Part::Box") d.recompute() s = FreeCADGui.subgraphFromObject(o) child = self.createMdiChild() child.show() child.setSceneGraph(s) def createMdiChild(self): widget = MdiQuarterWidget(None, self._firstwidget) self._workspace.addWindow(widget) if not self._firstwidget: self._firstwidget = widget return widget
class MdiMainWindow(QMainWindow): def __init__(self, qApp): QMainWindow.__init__(self) self._firstwidget = None self._workspace = QWorkspace() self.setCentralWidget(self._workspace) self.setAcceptDrops(True) self.setWindowTitle("Pivy Quarter MDI example") filemenu = self.menuBar().addMenu("&File") windowmenu = self.menuBar().addMenu("&Windows") fileopenaction = QAction("&Open", self) fileexitaction = QAction("E&xit", self) tileaction = QAction("Tile", self) cascadeaction = QAction("Cascade", self) filemenu.addAction(fileopenaction) filemenu.addAction(fileexitaction) windowmenu.addAction(tileaction) windowmenu.addAction(cascadeaction) self.connect(fileopenaction, QtCore.SIGNAL("triggered()"), self.open) self.connect(fileexitaction, QtCore.SIGNAL("triggered()"), QtGui.qApp.closeAllWindows) self.connect(tileaction, QtCore.SIGNAL("triggered()"), self._workspace.tile) self.connect(cascadeaction, QtCore.SIGNAL("triggered()"), self._workspace.cascade) windowmapper = QtCore.QSignalMapper(self) self.connect(windowmapper, QtCore.SIGNAL("mapped(QWidget *)"), self._workspace.setActiveWindow) self.dirname = os.curdir def dragEnterEvent(self, event): # just accept anything... event.acceptProposedAction() def dropEvent(self, event): mimedata = event.mimeData() if mimedata.hasUrls(): path = mimedata.urls().takeFirst().path() self.open_path(path) def closeEvent(self, event): self._workspace.closeAllWindows() def open(self): self.open_path(QFileDialog.getOpenFileName(self, "", self.dirname)) def open_path(self, filename): self.dirname = os.path.dirname(str(filename.toLatin1())) if not filename.isEmpty(): existing = self.findMdiChild(filename) if existing: self._workspace.setActiveWindow(existing) return child = self.createMdiChild() if (child.loadFile(filename)): self.statusBar().showMessage("File loaded", 2000) child.show() else: child.close() def findMdiChild(self, filename): canonicalpath = QtCore.QFileInfo(filename).canonicalFilePath() for window in self._workspace.windowList(): mdiwidget = window if mdiwidget.currentFile() == canonicalpath: return mdiwidget return 0; def createMdiChild(self): widget = MdiQuarterWidget(None, self._firstwidget) self._workspace.addWindow(widget) if not self._firstwidget: self._firstwidget = widget return widget
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA """ import sys from PyQt4.QtGui import QApplication, QTextEdit, QWorkspace if __name__ == "__main__": app = QApplication(sys.argv) workspace = QWorkspace() workspace.setWindowTitle("Simple Workspace Example") for i in range(5): textEdit = QTextEdit() textEdit.setPlainText("PyQt4 " * 100) textEdit.setWindowTitle("Document %i" % i) workspace.addWindow(textEdit) workspace.resize(480, 360) workspace.cascade() workspace.show() sys.exit(app.exec_())