예제 #1
0
    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()