class GUI(QMainWindow): def __init__(self, debug=False): QMainWindow.__init__(self) # initialise filename self.filename = None # make the data store from xmlstore import Store self.store = Store(debug=debug) # view the current table self.tableView = TableView(self) #self.tableView.setDragEnabled(True); #self.tableView.setDragDropMode(QAbstractItemView.InternalMove) #self.tableView.setAcceptDrops(True); #self.tableView.setDropIndicatorShown(True); self.tableView.verticalHeader().sectionMoved.connect(self.sectionMoved) self.tableView.verticalHeader().setMovable(True) self.setCentralWidget(self.tableView) # add a custom delegate to it self.delegate = ComboBoxDelegate() self.tableView.setItemDelegate(self.delegate) # dock the table selection on the left self.dock1 = QDockWidget(self) self.listView = ListView(self) self.listView.setDragEnabled(True) self.listView.setDragDropMode(QAbstractItemView.InternalMove) self.listView.setDropIndicatorShown(True) self.dock1.setWidget(self.listView) self.dock1.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock1) # connect it to the populate method self.connect(self.listView, SIGNAL('activated ( const QModelIndex & )'), self.populate) self.connect(self.listView, SIGNAL('clicked ( const QModelIndex & )'), self.populate) # dock the undoView on the left self.dock2 = QDockWidget(self) self.undoView = QUndoView(self.store.stack) self.dock2.setWidget(self.undoView) self.dock2.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.dock2.setWindowTitle('Undo Stack') self.addDockWidget(Qt.LeftDockWidgetArea, self.dock2) # create a menubar self.menu = self.menuBar() # create file menu headings self.menuFile = self.menu.addMenu('File') self.menuFile.addAction('New', self.New).setShortcut('CTRL+N') self.menuFile.addAction('Open...', self.Open).setShortcut('CTRL+O') self.menuFile.addAction('Reload', self.Reload) self.menuFile.addAction('Save', self.Save).setShortcut('CTRL+S') self.menuFile.addAction('Save As...', self.SaveAs) self.menuFile.addSeparator() self.menuFile.addAction('Set Architecture...', self.setArch) self.menuFile.addSeparator() self.menuFile.addAction('Quit', self.closeEvent).setShortcuts( ['CTRL+Q', 'ALT+F4']) # create edit menu headings self.menuEdit = self.menu.addMenu('Edit') self.menuEdit.addAction('Insert Row', self.tableView.insertRow).setShortcut('CTRL+I') self.menuEdit.addAction( 'Insert Row Under', self.tableView.insertRowUnder).setShortcut('CTRL+U') self.menuEdit.addAction('Remove Row', self.tableView.removeRow) self.menuEdit.addSeparator() self.menuEdit.addAction('Cut', self.tableView.cut).setShortcut('CTRL+X') self.menuEdit.addAction('Copy', self.tableView.copy).setShortcuts( ['CTRL+C', 'CTRL+INS']) self.menuEdit.addAction('Paste', self.tableView.paste).setShortcuts( ['CTRL+V', 'SHIFT+INS']) self.menuEdit.addAction('Clear', self.tableView.menuClear).setShortcut('CTRL+D') self.menuEdit.addSeparator() self.menuEdit.addAction('Fill Cells', self.tableView.fillCells).setShortcut('CTRL+L') self.menuEdit.addAction( 'Fill Cells and Increment', self.tableView.fillCellsInc).setShortcut('CTRL+R') self.menuEdit.addAction( 'Python Code...', self.tableView.pythonCode).setShortcut('CTRL+P') self.tableView.codeBox = pythonCode() self.menuEdit.addSeparator() self.menuEdit.addAction('Undo', self.store.stack, SLOT('undo()')).setShortcut('CTRL+Z') self.menuEdit.addAction('Redo', self.store.stack, SLOT('redo()')).setShortcut('CTRL+SHIFT+Z') # create component menu self.menuComponents = self.menu.addMenu('Components') self.resize(QSize(1000, 500)) def Save(self): # save menu command self.SaveAs(self.filename) def setArch(self): arch = self.store.getArch() arch, ok = QInputDialog.getText(self, 'Architecture Dialog', 'Enter Architecture', QLineEdit.Normal, arch) arch = str(arch) if ok: self.store.setArch(arch) def SaveAs(self, filename=''): # save as menu command if filename == '': filename = str(QFileDialog.getSaveFileName()) if filename != '': self.filename = filename self.store.Save(filename) self._setClean() def Reload(self): if self.filename is not None: self.Open(self.filename, name=self.tablename) def Open(self, filename='', name=None): # make sure the user is sure if there are unsaved changes if self.__prompt_unsaved() == QMessageBox.Cancel: return # ask for a filename if filename == '': filename = str( QFileDialog.getOpenFileName( filter="Xml Files (*.xml);;All files (*.*)")) if filename == '': return # store the filename self.filename = filename # tell the store to open a new set of tables try: problems, warnings = self.store.Open(filename) if problems: errorstr = 'Can\'t load all object types: ' + ', '.join( problems) QMessageBox.warning(self, 'Open Error', errorstr) if warnings: errorstr = \ 'The following warnings were generated:\n' + \ '\n'.join(warnings) QMessageBox.warning(self, 'Open Warnings', errorstr) except Exception, e: x = formLog( 'An error ocurred. Make sure all the modules listed ' 'in RELEASE files are built. Check the text below for ' 'details:\n\n' + traceback.format_exc(), self) x.show() return # populate self.setWindowTitle('XEB - %s[*]' % filename) self.listView.clear() for t in self.store.getTableNames(): self.__insertListViewItem(t) self.__populateMenu() self.populate(name=name) self._setClean()
class GUI(QMainWindow): def __init__(self, debug=False): QMainWindow.__init__(self) # initialise filename self.filename = None # make the data store from xmlstore import Store self.store = Store(debug = debug) # view the current table self.tableView = TableView(self) self.tableView.setDragEnabled(True); self.tableView.setAcceptDrops(True); self.tableView.setDropIndicatorShown(True); self.setCentralWidget(self.tableView) # add a custom delegate to it self.delegate = ComboBoxDelegate() self.tableView.setItemDelegate(self.delegate) # dock the table selection on the left self.dock1 = QDockWidget(self) self.listView = ListView(self) self.listView.setDragEnabled(True); self.listView.setDragDropMode(QAbstractItemView.InternalMove) self.listView.setDropIndicatorShown(True); self.dock1.setWidget(self.listView) self.dock1.setFeatures( QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock1) # connect it to the populate method self.connect(self.listView, SIGNAL('activated ( const QModelIndex & )'), self.populate) self.connect(self.listView, SIGNAL('clicked ( const QModelIndex & )'), self.populate) # dock the undoView on the left self.dock2 = QDockWidget(self) self.undoView = QUndoView(self.store.stack) self.dock2.setWidget(self.undoView) self.dock2.setFeatures( QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.dock2.setWindowTitle('Undo Stack') self.addDockWidget(Qt.LeftDockWidgetArea, self.dock2) # create a menubar self.menu = self.menuBar() # create file menu headings self.menuFile = self.menu.addMenu('File') self.menuFile.addAction('New', self.New).setShortcut('CTRL+N') self.menuFile.addAction('Open...', self.Open).setShortcut('CTRL+O') self.menuFile.addAction('Reload', self.Reload) self.menuFile.addAction('Save', self.Save).setShortcut('CTRL+S') self.menuFile.addAction('Save As...', self.SaveAs) self.menuFile.addSeparator() self.menuFile.addAction('Set Architecture...', self.setArch) self.menuFile.addSeparator() self.menuFile.addAction('Quit', self.closeEvent).setShortcuts(['CTRL+Q', 'ALT+F4']) # create edit menu headings self.menuEdit = self.menu.addMenu('Edit') self.menuEdit.addAction('Insert Row', self.tableView.insertRow).setShortcut('CTRL+I') self.menuEdit.addAction('Insert Row Under', self.tableView.insertRowUnder).setShortcut('CTRL+U') self.menuEdit.addAction('Remove Row', self.tableView.removeRow) self.menuEdit.addSeparator() self.menuEdit.addAction('Cut', self.tableView.cut).setShortcut('CTRL+X') self.menuEdit.addAction('Copy', self.tableView.copy).setShortcuts(['CTRL+C', 'CTRL+INS']) self.menuEdit.addAction('Paste', self.tableView.paste).setShortcuts(['CTRL+V', 'SHIFT+INS']) self.menuEdit.addAction('Clear', self.tableView.menuClear).setShortcut('CTRL+D') self.menuEdit.addSeparator() self.menuEdit.addAction('Fill Cells', self.tableView.fillCells).setShortcut('CTRL+L') self.menuEdit.addAction('Fill Cells and Increment', self.tableView.fillCellsInc).setShortcut('CTRL+R') self.menuEdit.addAction('Python Code...', self.tableView.pythonCode).setShortcut('CTRL+P') self.tableView.codeBox = pythonCode() self.menuEdit.addSeparator() self.menuEdit.addAction('Undo', self.store.stack, SLOT('undo()')).setShortcut('CTRL+Z') self.menuEdit.addAction('Redo', self.store.stack, SLOT('redo()')).setShortcut('CTRL+SHIFT+Z') # create component menu self.menuComponents = self.menu.addMenu('Components') self.resize(QSize(1000,500)) def Save(self): # save menu command self.SaveAs(self.filename) def setArch(self): arch = self.store.getArch() arch, ok = QInputDialog.getText(self, 'Architecture Dialog', 'Enter Architecture', QLineEdit.Normal, arch) arch = str(arch) if ok: self.store.setArch(arch) def SaveAs(self, filename = ''): # save as menu command if filename == '': filename = str(QFileDialog.getSaveFileName()) if filename != '': self.filename = filename self.store.Save(filename) self._setClean() def Reload(self): if self.filename is not None: self.Open(self.filename, name = self.tablename) def Open(self, filename = '', name = None): # make sure the user is sure if there are unsaved changes if self.__prompt_unsaved() != QMessageBox.Yes: return # ask for a filename if filename == '': filename = str(QFileDialog.getOpenFileName()) if filename == '': return # store the filename self.filename = filename # tell the store to open a new set of tables try: problems, warnings = self.store.Open(filename) if problems: errorstr = 'Can\'t load all object types: '+', '.join(problems) QMessageBox.warning(self,'Open Error',errorstr) if warnings: errorstr = \ 'The following warnings were generated:\n' + \ '\n'.join(warnings) QMessageBox.warning(self,'Open Warnings',errorstr) except Exception, e: x = formLog('An error ocurred. Make sure all the modules listed ' 'in RELEASE files are built. Check the text below for ' 'details:\n\n' + traceback.format_exc(), self) x.show() return # populate self.setWindowTitle('XEB - %s[*]'%filename) self.listView.clear() for t in self.store.getTableNames(): self.__insertListViewItem(t) self.__populateMenu() self.populate(name = name) self._setClean()