Esempio n. 1
0
    def _buildUI(self):
        self.setWindowTitle("MOOI: Multi-Objective Optimization Interface")
        self.resize(840, 480)
        self.statusBar().setSizeGripEnabled(False)
        self.statusBar().showMessage("Loading initial data...")

        # Plot widget
        self.plot = PlotWidget()
        self.plot.setMinimumSize(320, 480)
        self.plot.setAlignment(Qt.AlignCenter)
        self.plot.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.setCentralWidget(self.plot)

        # Function widget
        self.functionWidget = QListWidget()
        self.functionWidget.itemSelectionChanged.connect(self.solutionSelected)
        rightDock = QDockWidget("Functions", self)
        rightDock.setObjectName("Functions")
        rightDock.setWidget(self.functionWidget)
        rightDock.setFeatures(QDockWidget.DockWidgetFloatable
                              | QDockWidget.DockWidgetMovable)
        self.addDockWidget(Qt.RightDockWidgetArea, rightDock)

        # Control widget
        self.showSolutionsRadio = QRadioButton("Functions")
        self.showSolutionsRadio.setChecked(True)
        self.showSolutionsRadio.toggled.connect(self._showSolution)
        self.showVariablesRadio = QRadioButton("Variables")

        radioWidget = QWidget()
        radioLayout = QHBoxLayout()
        radioLayout.addWidget(self.showSolutionsRadio)
        radioLayout.addWidget(self.showVariablesRadio)
        radioWidget.setLayout(radioLayout)

        self.generationLabel = QLabel("Run: 1")
        self.generationSlider = QSlider(Qt.Horizontal)
        self.generationSlider.setTickPosition(QSlider.TicksBothSides)
        self.generationSlider.setTracking(True)
        self.generationSlider.setMinimum(1)
        self.generationSlider.setMaximum(1)
        self.generationSlider.setTickInterval(1)
        self.generationSlider.valueChanged.connect(self._showSolution)

        self.solutionSelector = QWidget()
        self.solutionSelector.setLayout(QVBoxLayout())
        addSolutionButton = QPushButton("Add")
        addSolutionButton.clicked.connect(self.addImplementation)
        removeSolutionButton = QPushButton("Remove unselected")
        removeSolutionButton.clicked.connect(self.removeResult)
        solutionSelectorButtons = QWidget()
        solutionSelectorButtons.setLayout(QHBoxLayout())
        solutionSelectorButtons.layout().addWidget(addSolutionButton)
        solutionSelectorButtons.layout().addWidget(removeSolutionButton)
        self.solutionSelectorWidget = QWidget()
        self.solutionSelectorWidget.setLayout(QVBoxLayout())
        self.solutionSelectorWidget.layout().addWidget(solutionSelectorButtons)
        self.solutionSelectorWidget.layout().addWidget(self.solutionSelector)

        exportButton = QPushButton("Export image")
        exportButton.clicked.connect(self.exportImage)

        exportAllButton = QPushButton("Export all images")
        exportAllButton.clicked.connect(self.exportAllImages)

        computeMetricsButton = QPushButton("Compute metrics")
        computeMetricsButton.clicked.connect(self.computeMetricsAsync)

        refreshButton = QPushButton("Refresh")
        refreshButton.clicked.connect(self.updateUI)

        controlLayout = QVBoxLayout()
        controlLayout.addWidget(radioWidget)
        controlLayout.addWidget(self.generationLabel)
        controlLayout.addWidget(self.generationSlider)
        controlLayout.addWidget(self.solutionSelectorWidget)
        controlLayout.addStretch()
        controlLayout.addWidget(computeMetricsButton)
        controlLayout.addWidget(refreshButton)
        controlLayout.addWidget(exportButton)
        controlLayout.addWidget(exportAllButton)
        controlWidget = QWidget()
        controlWidget.setLayout(controlLayout)
        leftDock = QDockWidget("Control", self)
        leftDock.setObjectName("Control")
        leftDock.setWidget(controlWidget)
        leftDock.setFeatures(QDockWidget.DockWidgetFloatable
                             | QDockWidget.DockWidgetMovable)
        self.addDockWidget(Qt.LeftDockWidgetArea, leftDock)

        # Metric widget
        self.metrics = MetricsPanel(self.analyzer)
        bottomDock = QDockWidget("Metrics", self)
        bottomDock.setObjectName("Metrics")
        bottomDock.setWidget(self.metrics)
        bottomDock.setFeatures(QDockWidget.DockWidgetFloatable
                               | QDockWidget.DockWidgetMovable)
        self.addDockWidget(Qt.BottomDockWidgetArea, bottomDock)

        # Actions
        exitAction = QAction('&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        copyAction = QAction("&Copy", self)
        copyAction.setShortcut("Ctrl+C")
        copyAction.setStatusTip('Copy metrics')
        copyAction.triggered.connect(self.metrics.copyMetrics)

        aboutAction = QAction("&About", self)
        aboutAction.setStatusTip('About MOOI')
        aboutAction.triggered.connect(self.helpAbout)

        # Menus
        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(copyAction)
        fileMenu.addAction(aboutAction)
        fileMenu.addSeparator()
        fileMenu.addAction(exitAction)