def __init__(self, file=None): super().__init__() self.factory = OptimizerFactory() self.app = AppWidget(self.factory) statusbar = self.statusBar() newAction = QAction("&New File", self) newAction.setShortcut("Ctrl+N") newAction.triggered.connect(self.newFile) openAction = QAction("&Open File...", self) openAction.setShortcut("Ctrl+O") openAction.triggered.connect(self.openFile) saveAsAction = QAction("&Save As...", self) saveAsAction.setShortcut("Shift+Ctrl+S") saveAsAction.triggered.connect(self.saveAsFile) newNodeAction = QAction( QIcon(os.path.join(moduleDir, 'icons/new-node.png')), "Create Node", self) newNodeAction.triggered.connect(self.app.drawing.addNewNode) newRockAction = QAction( QIcon(os.path.join(moduleDir, 'icons/new-rock.png')), "Create Rock", self) newRockAction.triggered.connect(self.app.drawing.addNewRock) toggleWoodAction = QAction(QIcon(), "Wood", self) toggleStreetAction = QAction(QIcon(), "Street", self) toggleSteelAction = QAction(QIcon(), "Steel", self) toggleWoodAction.setCheckable(True) toggleStreetAction.setCheckable(True) toggleSteelAction.setCheckable(True) toggleWoodAction.triggered.connect(self.app.drawing.toggleWood) toggleSteelAction.triggered.connect(self.app.drawing.toggleSteel) toggleStreetAction.triggered.connect(self.app.drawing.toggleStreet) materialActionGroup = QActionGroup(self) materialActionGroup.addAction(toggleStreetAction) materialActionGroup.addAction(toggleWoodAction) materialActionGroup.addAction(toggleSteelAction) materialActionGroup.setExclusive(True) self.plotAction = QAction(QIcon(), "Plot", self) self.plotAction.triggered.connect(self.plotBridge) self.optimizeAction = QAction(QIcon(), "Optimize", self) self.optimizeAction.triggered.connect(self.optimizeBridge) self.progress = QProgressBar() self.progress.setFixedWidth(100) self.progress.setEnabled(False) self.iterations = QSpinBox() self.iterations.setSingleStep(1) self.iterations.setMinimum(1) self.iterations.setMaximum(10000) self.iterations.setMinimumWidth(90) self.iterations.setValue(300) toolbar = self.addToolBar("Tools") toolbar.addAction(newNodeAction) toolbar.addAction(newRockAction) toolbar.addSeparator() toolbar.addActions(materialActionGroup.actions()) toolbar.addSeparator() toolbar.addAction(self.plotAction) toolbar.addAction(self.optimizeAction) toolbar.addWidget(self.progress) toolbar.addSeparator() toolbar.addWidget(QLabel(" Iterations: ")) toolbar.addWidget(self.iterations) mainMenu = self.menuBar() fileMenu = mainMenu.addMenu("&File") fileMenu.addAction(newAction) fileMenu.addAction(openAction) fileMenu.addAction(saveAsAction) self.objectInfoLabel = QLabel() self.objectInfoLabel.setText("0 objects selected") self.objectInfoLabel.setAlignment(Qt.AlignRight) self.cursorInfoLabel = QLabel() self.cursorInfoLabel.setText("") self.cursorInfoLabel.setAlignment(Qt.AlignRight) self.gridSizeLabel = QLabel() self.gridSizeLabel.setText("Grid Size: 1") self.gridSizeLabel.setAlignment(Qt.AlignRight) statusbar.addWidget(self.objectInfoLabel) statusbar.addPermanentWidget(self.cursorInfoLabel) statusbar.addPermanentWidget(self.gridSizeLabel) self.setCentralWidget(self.app) self.app.drawing.onGridSizeChange.connect(self.setGridSize) self.app.drawing.onCursorChange.connect(self.setCursorInfo) self.app.drawing.onObjectChange.connect(self.setObjectInfo) self.app.prop.onValueChanged.connect(self.app.drawing.update) toggleSteelAction.activate(QAction.Trigger) if file: try: self.app.drawing.state = State.loadState(file) self.setWindowFilePath(file) self.update() except BaseException as e: traceback.print_exc()