Beispiel #1
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.organizador = Organizador()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.scene = QGraphicsScene()
        self.ui.graficos.setScene(self.scene)

        self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
        self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
        self.ui.mostrar_button.clicked.connect(self.mostrar)
        self.ui.buscar_button.clicked.connect(self.buscar)
        self.ui.mostrar_tabla_button.clicked.connect(self.mostrar_tabla)
        self.ui.dibujar_button.clicked.connect(self.dibujar)
        self.ui.limpiar_button.clicked.connect(self.limpiar)
        self.ui.generar_button.clicked.connect(self.generar)

        self.ui.actionAbrir.triggered.connect(self.abrir_archivo)
        self.ui.actionGuardar.triggered.connect(self.guardar_archivo)
        self.ui.actionGrafo.triggered.connect(self.generar_grafo)
        self.ui.actionRecorrido.triggered.connect(self.recorrido)

        self.ui.id_checkbox.stateChanged.connect(self.ordenar_id)
        self.ui.velocidad_checkbox.stateChanged.connect(self.ordenar_vel)
        self.ui.distancia_checkbox.stateChanged.connect(self.ordenar_dis)
Beispiel #2
0
    def __init__(self):
        # Initialize attributes of QtWidgets.QMainWindow
        if 3 > sys.version_info[0]:
            # Python 2
            super(MainWindow, self).__init__()

        else:
            # Python 3
            super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Map labelCanvas pointer to the real instance
        self.labelCanvas = self.ui.labelCanvas

        self.imgList = Images(self.ui.listWidgetImgList)

        # Actions
        self.ui.actionImport.triggered.connect(self.actionImportClickEvt)
        self.ui.actionEdit.triggered.connect(self.actionEditClickEvt)
        self.ui.actionExit.triggered.connect(self.actionExitClickEvt)
        self.ui.listWidgetImgList.currentItemChanged.connect(
            self.actionCurrentItemChangedEvt)
        self.show()
Beispiel #3
0
    def __init__(self):
        super(MainWindow, self).__init__()

        # Set up the user interface from Designer.
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Make some local modifications.
        # self.ui.colorDepthCombo.addItem("2 colors (1 bit per pixel)")

        # Initial stuff
        self.ui.rootX0.setEnabled(False)
        self.ui.rootX1.setEnabled(False)

        # Connect up the buttons.
        self.ui.rootComboBox.activated.connect(self.changeRootMethod)
        self.ui.rootSolveBtn.clicked.connect(self.rootSolve)
        self.ui.interpolationSolveBtn.clicked.connect(self.interpolationSolve)
        self.ui.sysAddBtn.clicked.connect(self.sysAdd)
        self.ui.sysRemoveBtn.clicked.connect(self.sysRemove)
        self.ui.sysSolveBtn.clicked.connect(self.sysSolve)
        self.ui.rootLoadBtn.clicked.connect(self.rootLoadFile)
        self.ui.interpolationLoadBtn.clicked.connect(self.interpolationLoadFile)
        self.ui.sysLoadBtn.clicked.connect(self.sysLoadFile)
        self.meme_count = 0
        self.ui.memeBtn.clicked.connect(self.meme)
        self.ui.memeLabel.setVisible(False)
        self.ui.memeLabel.setPixmap(QPixmap("doge.jpg"))
        self.ui.memeText.setVisible(False)
Beispiel #4
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.actionExit.triggered.connect(QApplication.instance().exit)
        self.ui.actionAbout.triggered.connect(self._on_action_about_triggered)

        self.ui.tableWidget.setColumnCount(5)
        self.ui.tableWidget.setHorizontalHeaderLabels(
            ['Header', 'Author', 'Url', 'Count comments', 'Count likes'])
        self.init_table_widget()
        self.ui.tableWidget.resizeColumnsToContents()

    def _on_action_about_triggered(self):
        QMessageBox.about(self, 'About', 'Chuvaev Pavel\n8-Т3О-302Б-16')

    def init_table_widget(self):
        posts = html_parser.load_habr_news_posts()
        i = 0
        self.ui.tableWidget.setRowCount(len(posts))
        for post in posts:
            self.ui.tableWidget.setItem(i, 0, QTableWidgetItem(post['title']))
            self.ui.tableWidget.setItem(i, 1, QTableWidgetItem(post['author']))
            self.ui.tableWidget.setItem(i, 2, QTableWidgetItem(post['href']))
            self.ui.tableWidget.setItem(i, 3, QTableWidgetItem(post['comms']))
            self.ui.tableWidget.setItem(i, 4, QTableWidgetItem(post['votes']))
            i += 1
Beispiel #5
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.organizador = Organizador()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
     self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
     self.ui.mostrar_button.clicked.connect(self.mostrar)
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # MAIN WINDOW LABEL
        QtCore.QTimer.singleShot(1500, lambda: self.ui.label.setText("<strong>THANKS</strong> FOR WATCHING"))
        QtCore.QTimer.singleShot(1500, lambda: self.setStyleSheet("background-color: #222; color: #FFF"))
Beispiel #7
0
class MainWindow(WindowWrapper):
    ### Constructor
    def __init__(self):
        # Initialize attributes of QtWidgets.QMainWindow
        if 3 > sys.version_info[0]:
            # Python 2
            super(MainWindow, self).__init__()

        else:
            # Python 3
            super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Map labelCanvas pointer to the real instance
        self.labelCanvas = self.ui.labelCanvas

        self.imgList = Images(self.ui.listWidgetImgList)

        # Actions
        self.ui.actionImport.triggered.connect(self.actionImportClickEvt)
        self.ui.actionEdit.triggered.connect(self.actionEditClickEvt)
        self.ui.actionExit.triggered.connect(self.actionExitClickEvt)
        self.ui.listWidgetImgList.currentItemChanged.connect(
            self.actionCurrentItemChangedEvt)
        self.show()

    ### Destructor
    def __del__(self):
        LOG(self, 'Finalizing ' + self.windowTitle() + ' Window')

    ### Event Handlers
    # Display Current Item when it changed
    def actionCurrentItemChangedEvt(self):
        # Get selected row index
        currentRow = self.ui.listWidgetImgList.currentRow()

        # Display selected image
        self.display(self.imgList.images[currentRow])

        # Enable Edit Action
        self.ui.actionEdit.setEnabled(True)

    # Import images
    def actionImportClickEvt(self):
        self.imgList.importImages()

    # Edit selected image
    def actionEditClickEvt(self):
        selectedIndex = self.ui.listWidgetImgList.currentRow()
        selectedImg = self.imgList.images[selectedIndex]
        editor = EditorWindow(self, selectedImg)
        self.subWidgets.append(editor)

    # Exit
    def actionExitClickEvt(self):
        self.close()
Beispiel #8
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.organizador = Organizador()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
     self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
     self.ui.mostrar_button.clicked.connect(self.mostrar)
     self.ui.actionAbrir.triggered.connect(self.abrir_archivo)
     self.ui.actionGuardar.triggered.connect(self.guardar_archivo)
Beispiel #9
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self._thread = QThread()
        self._input_filename = None
        self._p_threaded = None

        self.get_input_filename()
        self.start_thread()
Beispiel #10
0
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.actionExit.triggered.connect(QApplication.instance().exit)
        self.ui.actionAbout.triggered.connect(self._on_action_about_triggered)

        self.ui.tableWidget.setColumnCount(5)
        self.ui.tableWidget.setHorizontalHeaderLabels(
            ['Header', 'Author', 'Url', 'Count comments', 'Count likes'])
        self.init_table_widget()
        self.ui.tableWidget.resizeColumnsToContents()
Beispiel #11
0
    def __init__(self, sysbus, parent=None):
        QtGui.QWidget.__init__(self, parent)

        # Init ourself from the Designer UI
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # light up the admin interface
        self.admin = AdminInterface(SERVICE, '/org/ganesha/nfsd/admin', sysbus,
                                    self.show_status)
        self.exportmgr = ExportMgr(SERVICE, '/org/ganesha/nfsd/ExportMgr',
                                   sysbus, self.show_status)
        self.clientmgr = ClientMgr(SERVICE, '/org/ganesha/nfsd/ClientMgr',
                                   sysbus, self.show_status)
        self.logmanager = LogManager(SERVICE, sysbus, self.show_status)
        self.logdialog = LogSetDialog(self.logmanager)
        self.show_status.connect(self.status_message)

        # Connect up the ui menubar
        #File
        self.ui.actionDBus_connect.triggered.connect(self.connect_gsh)
        self.ui.actionQuit.triggered.connect(self.quit)
        #Manage
        #Manage->Clients
        self.ui.actionAdd_Client.triggered.connect(self.add_client)
        self.ui.actionRemove_Client.triggered.connect(self.remove_client)
        #Manage->Exports
        self.ui.actionExports.triggered.connect(self.export_mgr)
        #Manage->Log Levels
        self.ui.actionLog_Settings.triggered.connect(self.logsettings)
        #Manage->Admin
        self.ui.actionReset_Grace.triggered.connect(self.reset_grace)
        self.ui.actionShutdown.triggered.connect(self.shutdown)
        self.ui.actionReload.triggered.connect(self.reload)
        #View
        self.ui.actionStatistics.triggered.connect(self.stats)
        self.ui.actionViewExports.triggered.connect(self.view_exports)
        self.ui.actionViewClients.triggered.connect(self.view_clients)
        #Help
        self.ui.actionAbout.triggered.connect(self.help)

        # Dbus data models
        self.exports_show_model = ExportTableModel(self.exportmgr)
        self.clients_show_model = ClientTableModel(self.clientmgr)

        # Tabs, tables, and views
        self.ui.exports.setModel(self.exports_show_model)
        self.ui.exports.resizeColumnsToContents()
        self.ui.exports.verticalHeader().setVisible(False)
        self.ui.clients.setModel(self.clients_show_model)
        self.ui.clients.resizeColumnsToContents()
        self.ui.clients.verticalHeader().setVisible(False)
Beispiel #12
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.resize(400, 600)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.layout = QtWidgets.QHBoxLayout(self.ui.main_page)
     self.splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
     self.left_side = LeftSide()
     self.splitter.addWidget(self.left_side)
     self.central_side = CentralSide()
     self.splitter.addWidget(self.central_side)
     self.right_side = RightSide()
     self.splitter.addWidget(self.right_side)
     self.layout.addWidget(self.splitter)
Beispiel #13
0
    def __init__(self, sysbus, parent=None):
        QtGui.QWidget.__init__(self, parent)

        # Init ourself from the Designer UI
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # light up the admin interface
        self.admin = AdminInterface(SERVICE,
                                    '/org/ganesha/nfsd/admin',
                                    sysbus,
                                    self.show_status)
        self.exportmgr = ExportMgr(SERVICE,
                                   '/org/ganesha/nfsd/ExportMgr',
                                   sysbus,
                                   self.show_status)
        self.clientmgr = ClientMgr(SERVICE,
                                   '/org/ganesha/nfsd/ClientMgr',
                                   sysbus,
                                   self.show_status)
        self.logmanager = LogManager(SERVICE,
                                     sysbus,
                                     self.show_status)
        self.logdialog = LogSetDialog(self.logmanager)
        self.show_status.connect(self.status_message)

        # Connect up the ui menubar
        #File
        self.ui.actionDBus_connect.triggered.connect(self.connect_gsh)
        self.ui.actionQuit.triggered.connect(self.quit)
        #Manage
        #Manage->Clients
        self.ui.actionAdd_Client.triggered.connect(self.add_client)
        self.ui.actionRemove_Client.triggered.connect(self.remove_client)
        #Manage->Exports
        self.ui.actionExports.triggered.connect(self.export_mgr)
        #Manage->Log Levels
        self.ui.actionLog_Settings.triggered.connect(self.logsettings)
        #Manage->Admin
        self.ui.actionReset_Grace.triggered.connect(self.reset_grace)
        self.ui.actionShutdown.triggered.connect(self.shutdown)
        self.ui.actionReload.triggered.connect(self.reload)
        #View
        self.ui.actionStatistics.triggered.connect(self.stats)
        self.ui.actionViewExports.triggered.connect(self.view_exports)
        self.ui.actionViewClients.triggered.connect(self.view_clients)
        #Help
        self.ui.actionAbout.triggered.connect(self.help)

        # Dbus data models
        self.exports_show_model = ExportTableModel(self.exportmgr)
        self.clients_show_model = ClientTableModel(self.clientmgr)
        
        # Tabs, tables, and views
        self.ui.exports.setModel(self.exports_show_model)
        self.ui.exports.resizeColumnsToContents()
        self.ui.exports.verticalHeader().setVisible(False)
        self.ui.clients.setModel(self.clients_show_model)
        self.ui.clients.resizeColumnsToContents()
        self.ui.clients.verticalHeader().setVisible(False)
Beispiel #14
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.next_button.setEnabled(False)
        # self.ui.next_button.clicked.connect(self.goToNext)
        self.ui.next_button.clicked.connect(self.goToNext)
        self.ui.prev_button.setEnabled(False)
        self.ui.prev_button.clicked.connect(self.goToPrev)

        self.page_index = {
            "page_connect": self.ui.stackedWidget.indexOf(self.ui.page_connect),
            "page_system_check": self.ui.stackedWidget.indexOf(self.ui.page_system_check),
            "page_select_subassembly": self.ui.stackedWidget.indexOf(self.ui.page_select_subassembly),
            "page_subassembly_overview": self.ui.stackedWidget.indexOf(self.ui.page_subassembly_overview),
            "page_machine": self.ui.stackedWidget.indexOf(self.ui.page_machine)
        }
        print(self.page_index)

        self.ui.stackedWidget.currentChanged.connect(self.handlePageChange)

        # set connect as first page
        self.ui.stackedWidget.setCurrentIndex(self.page_index['page_connect'])

        # todo: only start after camera connect!
        self.th = CameraThread(self)
        self.th.changePixmap.connect(self.setImage)

        self.setupConnect()

        self.connected_devices = 0

        # system check setup
        self.setup_system_check()


        self.machineThread = MachineThread()
        self.setupMachine()

        # page select subassembly
        self.ui.treeWidget.expandAll()
        self.ui.treeWidget.itemClicked.connect(self.handleTreeSelect)
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status.setText(x))
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status_2.setText(x))
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status_3.setText(x))
Beispiel #15
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.moodbox.addItems(self.moods)
     self.update_title(False)
     self.ui.all_buttons.setEnabled(False)
     # Dropdown events
     self.ui.actionLoad_episode.triggered.connect(self.load_episode)
     self.ui.actionSave_changes.triggered.connect(self.save_changes)
     self.ui.actionAdd_audio_path.triggered.connect(self.add_audio_path)
     self.ui.actionGenerate_Audacity_labels.triggered.connect(
         lambda: self.export_to_labels(None))
     self.ui.actionExport_dataset.triggered.connect(self.export_dataset)
     self.ui.actionGenerate_Audacity_labels_all_episodes.triggered.connect(
         lambda: self.export_all_labels(None))
     # Previous/next events
     self.ui.button_next.clicked.connect(lambda: self.next_label(False))
     self.ui.button_previous.clicked.connect(lambda: self.next_label(True))
     # Listen/choose events
     self.ui.button_listenorig.clicked.connect(
         lambda: self.listen_to_source(0))
     self.ui.button_listenizo.clicked.connect(
         lambda: self.listen_to_source(1))
     self.ui.button_listenunmix.clicked.connect(
         lambda: self.listen_to_source(2))
     self.ui.button_chooseorig.clicked.connect(
         lambda: self.choose_source(0))
     self.ui.button_chooseizo.clicked.connect(lambda: self.choose_source(1))
     self.ui.button_chooseunmix.clicked.connect(
         lambda: self.choose_source(2))
     # Other events
     self.ui.startbox.valueChanged.connect(lambda: self.update_title(True))
     self.ui.endbox.valueChanged.connect(lambda: self.update_title(True))
     self.ui.characterbox.textChanged.connect(
         lambda: self.update_title(True))
     self.ui.moodbox.currentIndexChanged.connect(
         lambda: self.update_title(True))
     self.ui.transcriptbox.textChanged.connect(
         lambda: self.update_title(True))
     self.ui.radio_clean.clicked.connect(lambda: self.update_title(True))
     self.ui.radio_noisy.clicked.connect(lambda: self.update_title(True))
     self.ui.radio_verynoisy.clicked.connect(
         lambda: self.update_title(True))
     # End of events
     self.scan_for_files()
Beispiel #16
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.game.hide()
     self.ui.aquarium.pause()
     self.connect_buttons()
     self.ui.aquarium.score_changed.connect(self.change_score)
     self.change_score()
Beispiel #17
0
def main():
    #Setup QtApp
    app = QtGui.QApplication(sys.argv[0])
    ui_mainwindow = Ui_MainWindow()

    main_window = MainWindow(app, ui_mainwindow, viz_config)
    main_window.show()

    sys.exit(app.exec_())
Beispiel #18
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.organizador = Organizador()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
        self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
        self.ui.mostrar_button.clicked.connect(self.mostrar)

    @Slot()
    def agregar_ini(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_inicio(part)

    @Slot()
    def agregar_fin(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_final(part)

    def mostrar(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText(str(self.organizador))
Beispiel #19
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self._thread = QThread()
        self._input_filename = None
        self._main_video_file = None
        self._p_threaded = None

        self.get_input_filename()
        self.start_thread()

    def get_input_filename(self):
        self._input_filename = 'MVI_9429_small_tracked-14842-21722-2.csv'
        # main video file
        # self._main_video_file = self._input_filename[:14] + '.mp4'
        self._main_video_file = self._input_filename[:8] + '.MOV'

    def start_thread(self):
        self._p_threaded = VideoProcTracked(cv2.VideoCapture(
            self._main_video_file),
                                            in_file_name=self._input_filename,
                                            preview_window_manager=None,
                                            should_mirror_preview=True)
        self._thread.started.connect(self._p_threaded.start_video)
        # pthread.finished.connect(self.deleteLater())
        self._p_threaded.in_display.connect(self.ui.in_video.setPixmap)
        self._p_threaded.out_display.connect(self.ui.out_video.setPixmap)
        self._p_threaded.moveToThread(self._thread)

        self._thread.start()

    def closeEvent(self, event):
        print("closing out thread before closing window")
        self._p_threaded.stop_video()
        self._thread.quit()
        self._thread.wait()
        print("done waiting for thread to close")
        event.accept()
Beispiel #20
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.game.hide()
        self.ui.aquarium.pause()
        self.connect_buttons()
        self.ui.aquarium.score_changed.connect(self.change_score)
        self.change_score()

    def connect_buttons(self):
        self.ui.buy_fish.clicked.connect(self.ui.aquarium.spawn_fish)
        self.ui.upgrade_weapon.clicked.connect(self.ui.aquarium.upgrade_weapon)
        self.ui.upgrade_food.clicked.connect(self.ui.aquarium.upgrade_food)
        self.ui.upgrade_food.clicked.connect(self.ui.aquarium.upgrade_food)
        self.ui.menu.clicked.connect(self.open_menu)
        self.ui.start_game.clicked.connect(self.close_menu)
        self.ui.exit.clicked.connect(self.close)

    @QtCore.pyqtSlot()
    def close_menu(self):
        self.ui.game.show()
        self.ui.main_menu.hide()
        self.ui.aquarium.unpause()

    @QtCore.pyqtSlot()
    def open_menu(self):
        self.ui.aquarium.pause()
        self.ui.game.hide()
        self.ui.main_menu.show()

    @QtCore.pyqtSlot()
    def change_score(self):
        self.ui.score.setText(str(self.ui.aquarium.score))

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()
Beispiel #21
0
	def __init__(self, parent = None):
		QMainWindow.__init__(self, parent)

		self.data = None
		self.image = None

		self.printer = Printer(self)

		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)

		self.setActions()

		self.loadSettings()

		self.setState(STATE_INIT)
Beispiel #22
0
class MainWindow(QtGui.QMainWindow):

    show_status = QtCore.pyqtSignal(bool, str)

    def __init__(self, sysbus, parent=None):
        QtGui.QWidget.__init__(self, parent)

        # Init ourself from the Designer UI
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # light up the admin interface
        self.admin = AdminInterface(SERVICE, '/org/ganesha/nfsd/admin', sysbus,
                                    self.show_status)
        self.exportmgr = ExportMgr(SERVICE, '/org/ganesha/nfsd/ExportMgr',
                                   sysbus, self.show_status)
        self.clientmgr = ClientMgr(SERVICE, '/org/ganesha/nfsd/ClientMgr',
                                   sysbus, self.show_status)
        self.logmanager = LogManager(SERVICE, sysbus, self.show_status)
        self.logdialog = LogSetDialog(self.logmanager)
        self.show_status.connect(self.status_message)

        # Connect up the ui menubar
        #File
        self.ui.actionDBus_connect.triggered.connect(self.connect_gsh)
        self.ui.actionQuit.triggered.connect(self.quit)
        #Manage
        #Manage->Clients
        self.ui.actionAdd_Client.triggered.connect(self.add_client)
        self.ui.actionRemove_Client.triggered.connect(self.remove_client)
        #Manage->Exports
        self.ui.actionExports.triggered.connect(self.export_mgr)
        #Manage->Log Levels
        self.ui.actionLog_Settings.triggered.connect(self.logsettings)
        #Manage->Admin
        self.ui.actionReset_Grace.triggered.connect(self.reset_grace)
        self.ui.actionShutdown.triggered.connect(self.shutdown)
        self.ui.actionReload.triggered.connect(self.reload)
        #View
        self.ui.actionStatistics.triggered.connect(self.stats)
        self.ui.actionViewExports.triggered.connect(self.view_exports)
        self.ui.actionViewClients.triggered.connect(self.view_clients)
        #Help
        self.ui.actionAbout.triggered.connect(self.help)

        # Dbus data models
        self.exports_show_model = ExportTableModel(self.exportmgr)
        self.clients_show_model = ClientTableModel(self.clientmgr)

        # Tabs, tables, and views
        self.ui.exports.setModel(self.exports_show_model)
        self.ui.exports.resizeColumnsToContents()
        self.ui.exports.verticalHeader().setVisible(False)
        self.ui.clients.setModel(self.clients_show_model)
        self.ui.clients.resizeColumnsToContents()
        self.ui.clients.verticalHeader().setVisible(False)

    # actions to real work...
    def quit(self):
        self.statusBar().showMessage("Bye bye kiddies, quitting")
        quit()

    def connect_gsh(self):
        self.statusBar().showMessage("Connecting to nfs-ganesha...")

    def add_client(self):
        ipaddr, ok = QtGui.QInputDialog.getText(
            self, 'Add a Client', 'IP Address (N.N.N.N) of client: ')
        if ok:
            self.clientmgr.AddClient(ipaddr)

    def remove_client(self):
        ipaddr, ok = QtGui.QInputDialog.getText(
            self, 'Remove a Client', 'IP Address (N.N.N.N) of client: ')
        if ok:
            self.clientmgr.RemoveClient(ipaddr)

    def export_mgr(self):
        self.statusBar().showMessage("Export manager")

    def logsettings(self):
        self.logdialog.show_logsetting_dialog()

    def reset_grace(self):
        ipaddr, ok = QtGui.QInputDialog.getText(
            self, 'Grace Period', 'IP Address (N.N.N.N) of client: ')
        if ok:
            self.admin.grace(ipaddr)

    def shutdown(self):
        reply = QtGui.QMessageBox.question(
            self, 'Warning!!!', "Do you really want to shut down the server?",
            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            self.admin.shutdown()

    def reload(self):
        reply = QtGui.QMessageBox.question(
            self, 'Warning!!!', "Do you really want to reload exports?",
            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            self.admin.reload()

    def stats(self):
        self.statusBar().showMessage("stats go here")

    def view_exports(self):
        self.exports_show_model.FetchExports()

    def view_clients(self):
        self.clients_show_model.FetchClients()

    def help(self):
        self.statusBar().showMessage("Help! Help!!")

    def status_message(self, status, errormsg):
        if status:
            str = "Success: "
        else:
            str = "Failed: "
        self.statusBar().showMessage(str + errormsg)
Beispiel #23
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        # Set up the user interface from Designer.
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # Make some local modifications.
        # self.ui.colorDepthCombo.addItem("2 colors (1 bit per pixel)")

        # Initial stuff
        self.ui.rootX0.setEnabled(False)
        self.ui.rootX1.setEnabled(False)

        # Connect up the buttons.
        self.ui.rootComboBox.activated.connect(self.changeRootMethod)
        self.ui.rootSolveBtn.clicked.connect(self.rootSolve)
        self.ui.interpolationSolveBtn.clicked.connect(self.interpolationSolve)
        self.ui.sysAddBtn.clicked.connect(self.sysAdd)
        self.ui.sysRemoveBtn.clicked.connect(self.sysRemove)
        self.ui.sysSolveBtn.clicked.connect(self.sysSolve)
        self.ui.rootLoadBtn.clicked.connect(self.rootLoadFile)
        self.ui.interpolationLoadBtn.clicked.connect(self.interpolationLoadFile)
        self.ui.sysLoadBtn.clicked.connect(self.sysLoadFile)
        self.meme_count = 0
        self.ui.memeBtn.clicked.connect(self.meme)
        self.ui.memeLabel.setVisible(False)
        self.ui.memeLabel.setPixmap(QPixmap("doge.jpg"))
        self.ui.memeText.setVisible(False)

    def changeRootMethod(self):
        index = self.ui.rootComboBox.currentIndex()

        if index == 0:
            self.ui.rootX0.setEnabled(False)
            self.ui.rootX1.setEnabled(False)
        elif index in [1, 2, 5, 7]:
            self.ui.rootX0.setEnabled(True)
            self.ui.rootX1.setEnabled(True)
        else:
            self.ui.rootX0.setEnabled(True)
            self.ui.rootX1.setEnabled(False)

        if index == 5:
            self.ui.rootX1Label.setText("  Multiplicity")
        else:
            self.ui.rootX1Label.setText("  X1")

    def rootSolve(self):
        try:
            expression = self.ui.rootFx.text()
            method_name = self.ui.rootComboBox.currentText()

            inital_points = []
            if self.ui.rootX0.isEnabled():
                inital_points.append(self.ui.rootX0.value())
            if self.ui.rootX1.isEnabled():
                inital_points.append(self.ui.rootX1.value())

            max_iterations = self.ui.rootMaxIterations.value()
            percision = self.ui.rootPercision.value()

            f = sympy.lambdify('x', expression)
            factory = RootFinderFactory()

            if method_name == "General Algorithm":
                results, PlotWindow, Datatable = factory.solve(method_name, expression, max_iterations, percision)
                rw = ResultWindow(self, PlotWindow, Datatable, {"general_results": results})
            else:
                results, PlotWindow, Datatable = factory.solve(method_name, expression, *inital_points, max_iterations, percision)
                rw = ResultWindow(self, PlotWindow, Datatable, {"results": results})

            rw.show()
        except Exception as e:
            self.errorDialog(e.args[0])

    def interpolationSolve(self):
        try:
            try:
                sample_points = literal_eval(self.ui.interpolationSampleLineEdit.text())
            except Exception as e:
                raise Exception("Invalid sample points, Enter sample points in the form of comma seperated order pairs.\n"
                                "Example: (0, 1), (2.25, 3), (4, 6.5)")

            max_x = max(sample_points)[0]
            min_x = min(sample_points)[0]

            queries = self.ui.interpolationQueryLineEdit.text().split(',')
            if len(queries) == 0:
                raise Exception("Invalid query points. Enter query points in the form of comma separated values.\n"
                                "Example: 1, 2, 2.5, 3")

            for q in queries:
                try:
                    x = float(q)
                except Exception as a:
                    raise Exception("Invalid query points. Enter query points in the form of comma separated values.\n"
                                    "Example: 1, 2, 2.5, 3")
                if x < min_x or x > max_x:
                    raise Exception("Invalid query point {:f}, point is out of the range of sample points.".format(x))
            
            interpolation = interpolate(sample_points)
            method_index = self.ui.interpolationComboBox.currentIndex()

            if method_index == 0:
                sym_function = interpolation.newoten_method()
            else:
                sym_function = interpolation.lagrange()
            f = sympy.lambdify('x', sym_function)

            rw = ResultWindow(self, interpolation_controller.PlotWindow, interpolation_controller.DataTable,
                              {"f": f, "queries": queries,'expr': sym_function})
            rw.show()
        except Exception as e:
            self.errorDialog(e.args[0])

    def sysSolve(self):
        try:
            equations = []
            for i in range(1, self.ui.sysEqnsForm.rowCount()*2, 2):
                equations.append(self.ui.sysEqnsForm.itemAt(i).widget().text())

            solver = GaussJordan()
            results = solver.solve(equations)
            print(results)


            rw = ResultWindow(self, None, gauss_jordan_controller.DataTable, {"results": results})
            rw.show()
        except Exception as e:
            self.errorDialog(e.args[0])

    def sysAdd(self):

        if self.ui.sysEqnsForm.rowCount() < 10:
            eqn_number = str(self.ui.sysEqnsForm.rowCount() + 1)
            label = QtWidgets.QLabel("  Equation " + eqn_number)
            label.setObjectName("sysEqn" + eqn_number + "Label")
            lineEdit = QtWidgets.QLineEdit()
            lineEdit.setObjectName("sysEqn" + eqn_number + "LineEdit")
            lineEdit.setPlaceholderText("Example: 2a + 5b - 3c = 5")
            self.ui.sysEqnsForm.addRow(label, lineEdit)

    def sysRemove(self):
        if self.ui.sysEqnsForm.rowCount() > 2:
            self.ui.sysEqnsForm.removeRow(self.ui.sysEqnsForm.rowCount() - 1)

    def open_file(self):
        options = QtWidgets.QFileDialog.Options()
        options |= QtWidgets.QFileDialog.DontUseNativeDialog
        file_name, _ = QtWidgets.QFileDialog.getOpenFileName()
        if file_name:
            return file_name

    def rootLoadFile(self):
        file = self.open_file()
        if file:
            try:
                params = parse_root_finder_file(file)
                method_number = params['method']
                self.ui.rootFx.setText(params['equation'])
                self.ui.rootX0.setValue(params['parameters'][0])
                if len(params['parameters']) > 1:
                    self.ui.rootX1.setValue(params['parameters'][1])
                self.ui.rootMaxIterations.setValue(params['iterations'])
                self.ui.rootPercision.setValue(params['tolerance'])

                if method_number == 7:
                    method_number = 0
                elif method_number > 4:
                    method_number += 2

                self.ui.rootComboBox.setCurrentIndex(method_number)
                self.changeRootMethod()
            except Exception as e:
                self.errorDialog(e.args[0])


    def interpolationLoadFile(self):
        file = self.open_file()
        if file:
            try:
                params = parse_interpolation_file(file)
                method = params['method']
                order = params['order']
                points = params['points']
                queries = params['query_points']
                self.ui.interpolationOrderLineEdit.setValue(order)
                self.ui.interpolationComboBox.setCurrentIndex(method-1)
                self.ui.interpolationQueryLineEdit.setText(str(queries)[1:-1])
                self.ui.interpolationSampleLineEdit.setText(str(points)[1:-1])
                print(params)
            except Exception as e:
                self.errorDialog(e.args[0])

    def sysLoadFile(self):
        file = self.open_file()
        if file:
            try:
                equations = parse_equations_file(file)
                for i in range(len(equations)):
                    if(i < 2):
                        self.ui.sysEqnsForm.itemAt(2*i + 1).widget().setText(str(equations[i]))
                    else:
                        self.sysAdd();
                        self.ui.sysEqnsForm.itemAt(2*i + 1).widget().setText(str(equations[i]))
            except Exception as e:
                self.errorDialog(e.args[0])

    def errorDialog(self, text="Oh no! Something went wrong."):
        msg = QtWidgets.QMessageBox(self)
        msg.setIcon(QtWidgets.QMessageBox.Critical)
        msg.setText("Error")
        msg.setInformativeText(text)
        msg.setWindowTitle("Error")
        msg.resize(500, msg.height())
        msg.show()

    def meme(self):
        self.meme_count += 1
        if self.meme_count >= 10:
            self.ui.memeText.setVisible(True)
            self.ui.memeLabel.setVisible(True)
Beispiel #24
0
class MainWindow(QMainWindow):
    SelectSubassembly = Signal(str)

    @Slot(QImage)
    def setImage(self, image):
        # self.ui.label_img_camera.setPixmap(QPixmap.fromImage(image))
        self.ui.label_img_camera.setPixmap(QPixmap.fromImage(image).scaled(self.ui.label_img_camera.size(),aspectMode=Qt.KeepAspectRatio))

    @Slot(np.ndarray)
    def setBoltFrame(self, frame): # np array
        self.ui.label_img_bolt.setPixmap(QPixmap.fromImage(frame).scaled(self.ui.label_img_bolt.size(),aspectMode=Qt.KeepAspectRatio))

        # self.ui.label_img_bolt.setPixmap(QPixmap.fromImage(frame))
        print('received at slot')

    @Slot(list)
    def updateBoltCounts(self, counts):
        print('update_bolt_counts: ',counts)
        table = self.ui.tableWidget_2
        for i in range(0,table.rowCount()):
            item_bolt_type = table.item(i,0)
            bolt_type = str(item_bolt_type.text()).lower()
            if bolt_type in counts:
                print('textinitem:',str(counts[bolt_type]))
                item = QTableWidgetItem(str(counts[bolt_type]))
                item = table.setItem(i,1,item)

    @Slot(list)
    def updateProgress(self, counts):
        progress = (self.sum_column_table(1)/self.bolts_total)*100
        # progress=0.2
        print(progress)
        self.ui.progressBar.setValue(progress)

    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.next_button.setEnabled(False)
        # self.ui.next_button.clicked.connect(self.goToNext)
        self.ui.next_button.clicked.connect(self.goToNext)
        self.ui.prev_button.setEnabled(False)
        self.ui.prev_button.clicked.connect(self.goToPrev)

        self.page_index = {
            "page_connect": self.ui.stackedWidget.indexOf(self.ui.page_connect),
            "page_system_check": self.ui.stackedWidget.indexOf(self.ui.page_system_check),
            "page_select_subassembly": self.ui.stackedWidget.indexOf(self.ui.page_select_subassembly),
            "page_subassembly_overview": self.ui.stackedWidget.indexOf(self.ui.page_subassembly_overview),
            "page_machine": self.ui.stackedWidget.indexOf(self.ui.page_machine)
        }
        print(self.page_index)

        self.ui.stackedWidget.currentChanged.connect(self.handlePageChange)

        # set connect as first page
        self.ui.stackedWidget.setCurrentIndex(self.page_index['page_connect'])

        # todo: only start after camera connect!
        self.th = CameraThread(self)
        self.th.changePixmap.connect(self.setImage)

        self.setupConnect()

        self.connected_devices = 0

        # system check setup
        self.setup_system_check()


        self.machineThread = MachineThread()
        self.setupMachine()

        # page select subassembly
        self.ui.treeWidget.expandAll()
        self.ui.treeWidget.itemClicked.connect(self.handleTreeSelect)
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status.setText(x))
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status_2.setText(x))
        self.SelectSubassembly.connect(lambda x: self.ui.selected_status_3.setText(x))

    @Slot(QTreeWidgetItem, int)
    def handleTreeSelect(self, item:QTreeWidgetItem, column:int):
        a = item.flags()
        if bool(Qt.ItemIsSelectable & a):
            self.SelectSubassembly.emit(item.parent().text(0) +'/'+ item.text(0))
            self.ui.next_button.setEnabled(True)


    # def exitSystemCheck(self):
    def handlePageChange(self, index):
        if index == self.page_index['page_connect']:
            print('pg_con')
        elif index == self.page_index['page_system_check']:
            self.enter_system_check()
        elif index == self.page_index['page_select_subassembly']:
            self.enter_select_subassembly()
        elif index == self.page_index['page_subassembly_overview']:
            self.enter_subassembly_overview()
        elif index == self.page_index['page_machine']:
            self.enter_machine()

    def setup_system_check(self):
        self.ui.checkBox.clicked.connect(self.check_confirm_release)
        self.ui.checkBox_2.clicked.connect(self.check_confirm_release)
        self.ui.confirm_button.clicked.connect(lambda:self.ui.next_button.setEnabled(True))
        self.ui.confirm_button.clicked.connect(lambda:self.ui.confirm_button.setDisabled(True))
        self.ui.confirm_button.clicked.connect(lambda:self.ui.checkBox.setDisabled(True))
        self.ui.confirm_button.clicked.connect(lambda:self.ui.checkBox_2.setDisabled(True))

    def check_confirm_release(self):
        if bool(self.ui.checkBox.checkState()) and bool(self.ui.checkBox_2.checkState()):
            self.ui.confirm_button.setEnabled(True)
        else:
            self.ui.confirm_button.setEnabled(False)

    def enter_system_check(self):
        self.ui.next_button.setDisabled(True)
        self.ui.prev_button.setDisabled(True)
        self.ui.confirm_button.setDisabled(True)

        self.ui.next_button.setText("Next >>")
        self.ui.confirm_button.setText("confirm")

        self.ui.checkBox.setCheckState(Qt.Unchecked)
        self.ui.checkBox_2.setCheckState(Qt.Unchecked)

        self.ui.checkBox.setEnabled(True)
        self.ui.checkBox_2.setEnabled(True)

    def enter_select_subassembly(self):
        self.ui.prev_button.setDisabled(True)
        self.ui.next_button.setDisabled(True)

    def enter_subassembly_overview(self):
        self.ui.prev_button.setEnabled(True)
        self.ui.next_button.setEnabled(True)

    def enter_machine(self):
        self.ui.next_button.setDisabled(True)
        self.ui.start_machine_button.setEnabled(True)
        self.ui.stop_machine_button.setDisabled(True)
        self.ui.progressBar.setValue(0)

    def setupMachine(self):
        self.bolts_total = self.sum_column_table(2)
        print(self.bolts_total)

        # add thread to run button
        self.ui.start_machine_button.clicked.connect(self.machineThread.start)
        self.ui.start_machine_button.clicked.connect(lambda: self.ui.stop_machine_button.setEnabled(True))
        self.machineThread.started.connect(lambda: self.ui.start_machine_button.setDisabled(True))
        self.machineThread.started.connect(lambda: self.ui.start_machine_button.setText("running..."))
        self.machineThread.started.connect(lambda: self.ui.prev_button.setDisabled(True))
        # self.machineThread.finished.connect(lambda: self.ui.start_machine_button.setEnabled(True))
        self.machineThread.finished.connect(self.machineThread.start) # repeat thread

        self.ui.stop_machine_button.clicked.connect(self.machineThread.stop_machine)
        self.ui.stop_machine_button.clicked.connect(lambda: self.machineThread.disconnect(self.machineThread))
        self.ui.stop_machine_button.clicked.connect(lambda: self.ui.stop_machine_button.setText("stopping ..."))
        self.ui.stop_machine_button.clicked.connect(lambda: self.machineThread.finished.connect(self.machineDone))


        self.machineThread.BoltFrame.connect(self.setBoltFrame)
        self.machineThread.BoltType.connect(lambda x: self.ui.detected_bolt_type.setText(x))
        self.machineThread.BoltCounts.connect(self.updateBoltCounts)
        self.machineThread.BoltCounts.connect(self.updateProgress)

    def machineDone(self):
        self.ui.stop_machine_button.setDisabled(True)
        self.ui.stop_machine_button.setText("stopped")
        self.ui.start_machine_button.setText("sorted subassembly")
        self.ui.next_button.setText("Empty System Check >>")
        self.ui.next_button.setEnabled(True)
        self.ui.prev_button.setDisabled(True)


    def sum_column_table(self, column_no):
        # count sum of total on x bus
        table = self.ui.tableWidget_2
        sum = 0
        for i in range(0,table.rowCount()):
            item:QTableWidgetItem= table.item(i,column_no)
            sum+=int(item.text())
        return sum


    def setupConnect(self):
        self.connectRobotThread = ConnectRobotThread()
        self.connectRobotThread.resultReady.connect(lambda x: self.ui.status_robot.setText(x))
        self.connectRobotThread.finished.connect(self.connect_finished)

        self.connectArduinoThread = ConnectArduinoThread()
        self.connectArduinoThread.resultReady.connect(lambda x: self.ui.status_arduino.setText(x))
        self.connectArduinoThread.finished.connect(self.connect_finished)


        self.connectCameraThread = ConnectCameraThread()
        self.connectCameraThread.resultReady.connect(lambda x: self.ui.status_camera.setText(x))
        self.connectCameraThread.finished.connect(self.connect_finished)
        self.connectCameraThread.deviceConnected.connect(self.th.start)

        self.ui.button_connect.clicked.connect(self.connectRobotThread.start)
        self.ui.button_connect.clicked.connect(self.connectArduinoThread.start)
        self.ui.button_connect.clicked.connect(self.connectCameraThread.start)
        self.ui.button_connect.clicked.connect(lambda: self.ui.button_connect.setDisabled(True))


    def connect_finished(self):
        print("finished")
        if self.connectRobotThread.isFinished()\
                and self.connectArduinoThread.isFinished()\
                and self.connectCameraThread.isFinished(): # all are finished
            print('finished')
            self.ui.button_connect.setEnabled(True)
            if self.connectRobotThread.is_connected\
                    and self.connectArduinoThread.is_connected\
                    and self.connectCameraThread.is_connected: # check here if all devices are connected
                # delete threads
                self.connectRobotThread.deleteLater()
                self.connectArduinoThread.deleteLater()
                self.connectCameraThread.deleteLater()

                self.ui.button_connect.setDisabled(True)
                self.ui.button_connect.setText("All devices connected")
                self.ui.next_button.setEnabled(True)


    def goToNext(self):
        index = self.ui.stackedWidget.currentIndex()
        new_index = index + 1
        if(index == self.page_index['page_machine']):
            new_index = self.page_index['page_system_check']
        self.ui.stackedWidget.setCurrentIndex(new_index)

    def goToPrev(self):
        index = self.ui.stackedWidget.currentIndex()
        self.ui.stackedWidget.setCurrentIndex(index - 1)
Beispiel #25
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.organizador = Organizador()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
        self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
        self.ui.mostrar_button.clicked.connect(self.mostrar)
        self.ui.actionAbrir.triggered.connect(self.abrir_archivo)
        self.ui.actionGuardar.triggered.connect(self.guardar_archivo)

    @Slot()
    def abrir_archivo(self):
        ubicacion = QFileDialog.getOpenFileName(
            self,
            "Abrir",
            ".",
            "JSON (*.json)",
        )[0]
        if self.organizador.abrir(ubicacion):
            QMessageBox.information(
                self, "Operación Exitosa",
                "El archivo se abrió con éxito desde la direccion: \n" +
                ubicacion)
        else:
            QMessageBox.critical(self, "Error!",
                                 "El archivo no se logró abrir")

    @Slot()
    def guardar_archivo(self):
        ubicacion = QFileDialog.getSaveFileName(self, 'Guadar', '.',
                                                'JSON (*.json)')[0]
        if self.organizador.guardar(ubicacion):
            QMessageBox.information(
                self, "Operación Exitosa",
                "El archivo se guardó con éxito en la direccion: \n" +
                ubicacion)
        else:
            QMessageBox.critical(self, "Error!",
                                 "El archivo no se logró guardar")

    @Slot()
    def agregar_ini(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_inicio(part)

    @Slot()
    def agregar_fin(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_final(part)

    def mostrar(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText(str(self.organizador))
Beispiel #26
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.organizador = Organizador()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
        self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
        self.ui.mostrar_button.clicked.connect(self.mostrar)
        self.ui.actionAbrir.triggered.connect(self.abrir_archivo)
        self.ui.actionGuardar.triggered.connect(self.guardar_archivo)
        self.ui.buscar_button.clicked.connect(self.buscar)
        self.ui.mostrar_tabla_button.clicked.connect(self.mostrar_tabla)
    
    @Slot()
    def buscar(self):
        key = int(self.ui.buscar_line_edit.text())
        find = False
        for particula in self.organizador:
            if key == particula.id:
                self.ui.tabla.setColumnCount(10)
                labels = ['ID','Origen en X','Origen en Y','Destino en X','Destino en Y','Velocidad','Distancia','Red','Green','Blue']
                self.ui.tabla.setHorizontalHeaderLabels(labels)
                self.ui.tabla.setRowCount(1)
                self.ui.tabla.setItem(0, 0, QTableWidgetItem(str(particula.id)))
                self.ui.tabla.setItem(0, 1, QTableWidgetItem(str(particula.or_x)))
                self.ui.tabla.setItem(0, 2, QTableWidgetItem(str(particula.or_y)))
                self.ui.tabla.setItem(0, 3, QTableWidgetItem(str(particula.de_x)))
                self.ui.tabla.setItem(0, 4, QTableWidgetItem(str(particula.de_y)))
                self.ui.tabla.setItem(0, 5, QTableWidgetItem(str(particula.vel)))
                self.ui.tabla.setItem(0, 6, QTableWidgetItem(str(particula.dis)))
                self.ui.tabla.setItem(0, 7, QTableWidgetItem(str(particula.red)))
                self.ui.tabla.setItem(0, 8, QTableWidgetItem(str(particula.green)))
                self.ui.tabla.setItem(0, 9, QTableWidgetItem(str(particula.blue)))
                find = True
                return
        if find == False:
            QMessageBox.warning(
                self,
                "Atención",
                f"La partícula '{key}' no fue encontrada"
            )

    @Slot()
    def mostrar_tabla(self):
        self.ui.tabla.setColumnCount(10)
        labels = ['ID','Origen en X','Origen en Y','Destino en X','Destino en Y','Velocidad','Distancia','Red','Green','Blue']
        self.ui.tabla.setHorizontalHeaderLabels(labels)
        self.ui.tabla.setRowCount(len(self.organizador))
        
        fila=0
        for particula in self.organizador:
            self.ui.tabla.setItem(fila, 0, QTableWidgetItem(str(particula.id)))
            self.ui.tabla.setItem(fila, 1, QTableWidgetItem(str(particula.or_x)))
            self.ui.tabla.setItem(fila, 2, QTableWidgetItem(str(particula.or_y)))
            self.ui.tabla.setItem(fila, 3, QTableWidgetItem(str(particula.de_x)))
            self.ui.tabla.setItem(fila, 4, QTableWidgetItem(str(particula.de_y)))
            self.ui.tabla.setItem(fila, 5, QTableWidgetItem(str(particula.vel)))
            self.ui.tabla.setItem(fila, 6, QTableWidgetItem(str(particula.dis)))
            self.ui.tabla.setItem(fila, 7, QTableWidgetItem(str(particula.red)))
            self.ui.tabla.setItem(fila, 8, QTableWidgetItem(str(particula.green)))
            self.ui.tabla.setItem(fila, 9, QTableWidgetItem(str(particula.blue)))
            fila += 1

    @Slot()
    def abrir_archivo(self):
        ubicacion = QFileDialog.getOpenFileName(
            self,
            "Abrir",
            ".",
            "JSON (*.json)",
            )[0]
        if self.organizador.abrir(ubicacion):
            QMessageBox.information(
                self,
                "Operación Exitosa",
                "El archivo se abrió con éxito desde la direccion: \n" + ubicacion
            )
        else:
            QMessageBox.critical(
                self,
                "Error!",
                "El archivo no se logró abrir"
            ) 

    @Slot()
    def guardar_archivo(self):
        ubicacion = QFileDialog.getSaveFileName(self,
        'Guadar',
        '.',
        'JSON (*.json)')[0]
        if self.organizador.guardar(ubicacion):
            QMessageBox.information(
                self,
                "Operación Exitosa",
                "El archivo se guardó con éxito en la direccion: \n" + ubicacion
            )
        else:
            QMessageBox.critical(
                self,
                "Error!",
                "El archivo no se logró guardar"
            )
    
    @Slot()
    def agregar_ini(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id,or_x,or_y,ds_x,ds_y,vel,red,grn,blu)
        self.organizador.agregar_inicio(part)
    @Slot()
    def agregar_fin(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id,or_x,or_y,ds_x,ds_y,vel,red,grn,blu)
        self.organizador.agregar_final(part)

    def mostrar(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText(str(self.organizador))
Beispiel #27
0
class MainWindow(QMainWindow):
    episode_data = {"labels": []}
    current_index = 0
    highest_index = 0
    listened = [False, False, False]
    moods = import_export.schema["properties"]["labels"]["items"][
        "properties"]["mood"]["items"]["enum"]
    isUpdatingWidgets = False
    unsavedChanges = False

    # Sets up the main window
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.moodbox.addItems(self.moods)
        self.update_title(False)
        self.ui.all_buttons.setEnabled(False)
        # Dropdown events
        self.ui.actionLoad_episode.triggered.connect(self.load_episode)
        self.ui.actionSave_changes.triggered.connect(self.save_changes)
        self.ui.actionAdd_audio_path.triggered.connect(self.add_audio_path)
        self.ui.actionGenerate_Audacity_labels.triggered.connect(
            lambda: self.export_to_labels(None))
        self.ui.actionExport_dataset.triggered.connect(self.export_dataset)
        self.ui.actionGenerate_Audacity_labels_all_episodes.triggered.connect(
            lambda: self.export_all_labels(None))
        # Previous/next events
        self.ui.button_next.clicked.connect(lambda: self.next_label(False))
        self.ui.button_previous.clicked.connect(lambda: self.next_label(True))
        # Listen/choose events
        self.ui.button_listenorig.clicked.connect(
            lambda: self.listen_to_source(0))
        self.ui.button_listenizo.clicked.connect(
            lambda: self.listen_to_source(1))
        self.ui.button_listenunmix.clicked.connect(
            lambda: self.listen_to_source(2))
        self.ui.button_chooseorig.clicked.connect(
            lambda: self.choose_source(0))
        self.ui.button_chooseizo.clicked.connect(lambda: self.choose_source(1))
        self.ui.button_chooseunmix.clicked.connect(
            lambda: self.choose_source(2))
        # Other events
        self.ui.startbox.valueChanged.connect(lambda: self.update_title(True))
        self.ui.endbox.valueChanged.connect(lambda: self.update_title(True))
        self.ui.characterbox.textChanged.connect(
            lambda: self.update_title(True))
        self.ui.moodbox.currentIndexChanged.connect(
            lambda: self.update_title(True))
        self.ui.transcriptbox.textChanged.connect(
            lambda: self.update_title(True))
        self.ui.radio_clean.clicked.connect(lambda: self.update_title(True))
        self.ui.radio_noisy.clicked.connect(lambda: self.update_title(True))
        self.ui.radio_verynoisy.clicked.connect(
            lambda: self.update_title(True))
        # End of events
        self.scan_for_files()

    # Updates the large text box at the bottom of the window
    def console(self, message):
        self.ui.consolebox.setText(self.ui.consolebox.toPlainText() + message +
                                   "\n")
        self.ui.consolebox.moveCursor(QTextCursor.End)

    # Updates the window title to show unsaved changes
    def update_title(self, isChanged=True):
        if isChanged:
            if not self.isUpdatingWidgets:
                self.setWindowTitle("Pony Sorter *")
                self.unsavedChanges = True
        else:
            self.setWindowTitle("Pony Sorter")
            self.unsavedChanges = False

    # Updates the widget contents with the info stored in episode_data
    def update_widgets(self, index):
        # Label data
        self.isUpdatingWidgets = True
        l = self.episode_data["labels"][index]
        self.ui.startbox.setValue(l["start"])
        self.ui.endbox.setValue(l["end"])
        self.ui.characterbox.setText(l["character"])
        self.ui.transcriptbox.setText(l["transcript"])
        self.ui.moodbox.setCurrentIndex(self.moods.index(l["mood"][0]))
        if len(l["mood"]) > 1:
            self.ui.secondarymoodlabel.setText(l["mood"][1] + " (secondary)")
        else:
            self.ui.secondarymoodlabel.setText("none (secondary)")
        if l["noise_level"] == "clean":
            self.ui.radio_clean.setChecked(True)
        elif l["noise_level"] == "noisy":
            self.ui.radio_noisy.setChecked(True)
        elif l["noise_level"] == "verynoisy":
            self.ui.radio_verynoisy.setChecked(True)
        self.isUpdatingWidgets = False

        # Navigation
        self.ui.all_buttons.setEnabled(True)
        self.listened = [l["reviewed"], l["reviewed"], l["reviewed"]]
        self.toggle_choices()
        if index >= len(self.episode_data["labels"]) - 1:
            self.ui.button_next.setEnabled(False)
        else:
            self.ui.button_next.setEnabled(l["reviewed"])
        if index <= 0:
            self.ui.button_previous.setEnabled(False)
        else:
            self.ui.button_previous.setEnabled(True)

    # Play audio from selected source
    def listen_to_source(self, index):
        self.update_dictionary()

        def play_audio(source, start, end):
            source.set(AL_SEC_OFFSET, start)
            source.play()
            time.sleep(end - start)
            source.stop()

        l = self.episode_data["labels"][self.current_index]
        if index == 0:
            play_audio(self.source1, l["start"], l["end"])
        elif index == 1:
            play_audio(self.source2, l["start"], l["end"])
        elif index == 2:
            play_audio(self.source3, l["start"], l["end"])
        self.listened[index] = True
        self.toggle_choices()

    def choose_source(self, index):
        l = self.episode_data["labels"][self.current_index]
        if index == 0:
            l["ideal_source"] = "original"
        elif index == 1:
            l["ideal_source"] = "izo"
        elif index == 2:
            l["ideal_source"] = "unmix"
        l["reviewed"] = True
        self.update_title(True)
        self.next_label(False)

    # Enables/disables the choice buttons
    def toggle_choices(self):
        if self.listened[0] == True and self.listened[1] == True:
            self.ui.button_chooseorig.setEnabled(True)
            self.ui.button_chooseizo.setEnabled(True)
            # self.ui.button_chooseunmix.setEnabled(True)
        else:
            self.ui.button_chooseorig.setEnabled(False)
            self.ui.button_chooseizo.setEnabled(False)
            # self.ui.button_chooseunmix.setEnabled(False)

    # Writes the modified widget contents back to episode_data
    def update_dictionary(self):
        l = self.episode_data["labels"][self.current_index]
        l["start"] = self.ui.startbox.value()
        l["end"] = self.ui.endbox.value()
        l["character"] = self.ui.characterbox.text()
        l["transcript"] = self.ui.transcriptbox.text()
        if l["mood"][0] in self.moods:
            l["mood"][0] = self.moods[self.ui.moodbox.currentIndex()]
        if self.ui.radio_clean.isChecked():
            l["noise_level"] = "clean"
        elif self.ui.radio_noisy.isChecked():
            l["noise_level"] = "noisy"
        elif self.ui.radio_verynoisy.isChecked():
            l["noise_level"] = "verynoisy"

    # Goes to the next/previous label
    def next_label(self, isBackwards=False):
        if isBackwards:
            new_index = self.current_index - 1
        else:
            new_index = self.current_index + 1
        if new_index < 0:
            return False
        if new_index > len(self.episode_data["labels"]) - 1:
            message = "All done! Please save your changes and load a new episode."
            endOfFile = QMessageBox()
            endOfFile.setText(message)
            endOfFile.exec_()
            self.console(message)
            return False
        self.update_dictionary()
        self.current_index = new_index
        self.update_widgets(new_index)
        return True

    # Load a new episode
    def load_episode(self):
        if self.unsavedChanges:
            changesAsk = QMessageBox.question(
                self,
                "Save changes?",
                "Save changes before loading new episode?",
                QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel,
            )
            if changesAsk == QMessageBox.Cancel:
                return
            if changesAsk == QMessageBox.Yes:
                self.save_changes()
        self.dialog = LoadDialog()
        self.dialog.exec_()
        if not self.dialog.okay:
            return
        self.episode_data = self.dialog.episode_data
        self.update_title(False)
        first_unreviewed = 0
        for i, l in enumerate(self.episode_data["labels"]):
            if l["reviewed"] == False:
                first_unreviewed = i
                break
        self.current_index = first_unreviewed
        self.highest_index = first_unreviewed
        self.update_widgets(first_unreviewed)
        self.load_audio()
        self.ui.actionSave_changes.setEnabled(True)

    # Load audio files. Converts to Ogg Vorbis first; OpenAL plays some FLAC files as loud static
    # Crashes occasionally with "double free or corruption (out)" or "corrupted size vs. prev_size"
    def load_audio(self):
        def convert_to_ogg(inpath, outname):
            outpath = (os.path.dirname(os.path.realpath(__file__)) + "/" +
                       outname + ".ogg")
            ffmpeg.input(inpath).output(outpath).overwrite_output().run()
            return outpath

        self.ui.all_buttons.setEnabled(False)
        original_path, izo_path, unmix_path = import_export.find_audio_path(
            self.episode_data["label_name"])
        if original_path == "":
            self.console("Error: Original audio not found")
            self.source1 = None
        else:
            self.console("Loading original audio from " + original_path +
                         "...")
            QApplication.processEvents()
            self.source1 = oalOpen(convert_to_ogg(original_path, ".temp1"))
        if izo_path == "":
            self.console("Error: iZo audio not found")
            self.source2 = None
        else:
            self.console("Loading iZo audio from " + izo_path + "...")
            QApplication.processEvents()
            self.source2 = oalOpen(convert_to_ogg(izo_path, ".temp2"))
        """if unmix_path == "":
            self.console("Error: iZo+Unmix audio not found")
            self.source3 = None
        else:
            self.console("Loading iZo+Unmix audio from " + unmix_path + "...")
            QApplication.processEvents()
            self.source3 = oalOpen(convert_to_ogg(unmix_path, ".temp3"))"""
        self.console("\nLoading complete!")
        self.ui.all_buttons.setEnabled(True)

    # Save episode_data to JSON file
    def save_changes(self):
        self.update_dictionary()
        self.episode_data["last_modified"] = datetime.datetime.utcnow(
        ).isoformat()
        self.update_title(False)
        path = import_export.export_to_json(self.episode_data)
        self.console("Saved changes to " + path)

    # Save episode_data to Audacity labels
    def export_to_labels(self, character=None):
        self.update_dictionary()
        self.episode_data["last_modified"] = datetime.datetime.utcnow(
        ).isoformat()
        import_export.export_to_labels(self.episode_data, character,
                                       "original")
        import_export.export_to_labels(self.episode_data, character, "izo")
        import_export.export_to_labels(self.episode_data, character, "unmix")
        path = import_export.export_to_labels(self.episode_data, character,
                                              None)
        self.console("Exported labels to " + path)

    # Export all saved episodes to Audacity labels
    def export_all_labels(self, character=None):
        for k, _ in hashes.friendly_names.items():
            path1 = (os.path.dirname(os.path.realpath(__file__)) +
                     "/saved_changes/" + k + ".json")
            path2 = (os.path.dirname(os.path.realpath(__file__)) + "/labels/" +
                     k + ".txt")
            if os.path.exists(path1):
                export_data = import_export.import_from_json(path1)
            elif os.path.exists(path2):
                export_data = import_export.import_from_labels(path2)
            else:
                continue
            import_export.export_to_labels(export_data, character, "original")
            import_export.export_to_labels(export_data, character, "izo")
            import_export.export_to_labels(export_data, character, "unmix")
            import_export.export_to_labels(export_data, character, None)
        self.console("Exported all labels to " +
                     os.path.dirname(os.path.realpath(__file__)) +
                     "/exported_labels/")

    # (UNUSED) Splits audio samples and generates LJ Speech metadata
    def split_by_pony(self, character=None):
        metadata = []
        for k, _ in hashes.friendly_names.items():
            path1 = (os.path.dirname(os.path.realpath(__file__)) +
                     "/saved_changes/" + k + ".json")
            path2 = (os.path.dirname(os.path.realpath(__file__)) + "/labels/" +
                     k + ".txt")
            if os.path.exists(path1):
                export_data = import_export.import_from_json(path1)
            elif os.path.exists(path2):
                export_data = import_export.import_from_labels(path2)
            else:
                continue
            self.console("Exporting from " + export_data["label_name"] + "...")
            QApplication.processEvents()
            metadata.extend(
                import_export.split_by_pony(export_data, character,
                                            self.moods))
        with open(
                os.path.dirname(os.path.realpath(__file__)) +
                "/exported_clips/transcripts.csv",
                "w",
        ) as f:
            for m in metadata:
                f.write(m + "\n")
        self.console("Done! Exported all " + character + " splits to " +
                     os.path.dirname(os.path.realpath(__file__)) +
                     "/exported_clips/")

    # Opens export dialog
    def export_dataset(self):
        if self.unsavedChanges:
            changesAsk = QMessageBox.question(
                self,
                "Save changes?",
                "Save changes before exporting dataset?",
                QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel,
            )
            if changesAsk == QMessageBox.Cancel:
                return
            if changesAsk == QMessageBox.Yes:
                self.save_changes()
        self.dialog = ExportDialog()
        self.dialog.exec_()
        if not self.dialog.okay:
            return
        self.console("Export dummy message")
        return

    # Update the paths where the audio files are stored
    def add_audio_path(self):
        new_paths, okay = QInputDialog.getMultiLineText(
            self,
            "Add audio path(s)",
            "Enter the directories where the audio files are stored, separated by line breaks. Sub-directories will be scanned automatically.",
            "\n".join(import_export.config["audio_paths"]),
        )
        if okay:
            import_export.config["audio_paths"] = new_paths.splitlines()
            path = import_export.write_config()
            self.console("Saved settings to " + path)
            self.scan_for_files()

    # Find and hash audio files; takes about 5 minutes the first time
    def scan_for_files(self):
        self.ui.actionLoad_episode.setEnabled(False)
        self.ui.actionAdd_audio_path.setEnabled(False)
        self.timer = QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.hash_update)
        self.queue = queue.Queue()
        hash_thread = threading.Thread(target=import_export.hash_audio_files,
                                       args=(self.queue, ))
        hash_thread.daemon = True
        hash_thread.start()
        self.timer.start()

    # Check if hashes have finished computing
    def hash_update(self):
        while not self.queue.empty():
            data = self.queue.get()
            if data == "msgdone":
                self.timer.stop()
                self.ui.actionLoad_episode.setEnabled(True)
                self.ui.actionAdd_audio_path.setEnabled(True)
            else:
                self.console(data)
class main_window(QtWidgets.QMainWindow):

    @QtCore.pyqtSlot("QString")
    def receive_error(self,error):
        self.show_error(error)

    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.compile_btn.clicked.connect(self.compile_btn_clicked)
        self.ui.test_btn.clicked.connect(self.test_btn_clicked)

    def compile_btn_clicked(self):
        self.regex2nfa_obj=regex2nfa(self.ui.regex_line_edit.text())
        self.regex2nfa_obj.send_error.connect(self.receive_error)
        self.regex2nfa_obj.convert_to_nfa()
        nfa=self.regex2nfa_obj.nfa
        automata.display_nx_automata(nfa, "nfa", "NFA")

        nfa2dfa_obj = nfa2dfa('nfa2dfa')
        nfa2dfa_obj.set_nfa(nfa)
        nfa2dfa_obj.set_charset(nfa.char_set)
        nfa2dfa_obj.build_dfa()
        aut_dfa = nfa2dfa_obj.dfa
        nfa2dfa_obj.display_automata()
        automata.display_nx_automata(aut_dfa, "dfa", "DFA")


        dfa2mindfa_obj = dfa2mindfa(aut_dfa)
        dfa2mindfa_obj.minimiseIt()

        self.min_dfa = automata("min_dfa")
        self.min_dfa = dfa2mindfa_obj.create_new_dfa()
        self.min_dfa.display_automata()
        automata.display_nx_automata(self.min_dfa, "min_dfa", "MINIMAL DFA")

        self.show_graph()

    
    def test_btn_clicked(self):
        result=self.min_dfa.accepting_string(self.ui.test_line_edit.text())
        if result:
            self.ui.test_result_line_edit.setText("Accepted")
        else:
            self.ui.test_result_line_edit.setText("Rejected")


    def show_error(self,error):
        QtWidgets.QMessageBox.critical(self,"Error",error)

    def show_graph(self):
        self.nfa_scene=QtWidgets.QGraphicsScene(self)
        self.dfa_scene=QtWidgets.QGraphicsScene(self)
        self.min_dfa_scene=QtWidgets.QGraphicsScene(self)
        
        nfa_pic = QtGui.QPixmap.fromImage(QtGui.QImage("pics/nfa.png"))
        self.nfa_scene.addPixmap(nfa_pic)
        self.ui.nfa_graphic_view.setScene(self.nfa_scene)

        dfa_pic = QtGui.QPixmap.fromImage(QtGui.QImage("pics/dfa.png"))
        self.dfa_scene.addPixmap(dfa_pic)
        self.ui.dfa_graphic_view.setScene(self.dfa_scene)

        min_dfa_pic = QtGui.QPixmap.fromImage(QtGui.QImage("pics/min_dfa.png"))
        self.min_dfa_scene.addPixmap(min_dfa_pic)
        self.ui.min_dfa_graphic_view.setScene(self.min_dfa_scene)
Beispiel #29
0
    def __init__(self, app):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)

        self.setupUi(self)
        self.setWindowTitle("BlobBackup")
        self.setWindowIcon(QIcon(get_resource_path("images/logo.ico")))

        self.app = app
        self.threads = {}
        self.thread = None

        self.log_text_edit.setMaximumBlockCount(500)
        self.log_text_edit.setLineWrapMode(QPlainTextEdit.LineWrapMode.NoWrap)
        self.log_file_thread = LogFileThread()
        self.log_file_thread.start()
        self.log_file_thread.updated.connect(self.add_log)
        self.full_log_button.pressed.connect(self.open_log_file)
        self.show_everything_radio_button.toggled.connect(
            self.log_text_edit.clear)
        self.only_errors_radio_button.toggled.connect(
            lambda: self.update_logs(force=True))
        self.backups_tree_widget.itemClicked.connect(self.update_logs)

        self.tool_bar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
        self.tool_bar.setIconSize(QSize(10, 10))
        self.go_action.setIcon(QIcon(get_resource_path("images/go.png")))
        self.stop_action.setIcon(QIcon(get_resource_path("images/stop.png")))
        self.view_action.setIcon(QIcon(get_resource_path("images/view.png")))
        self.delete_action.setIcon(
            QIcon(get_resource_path("images/delete.png")))
        self.edit_action.setIcon(QIcon(get_resource_path("images/edit.png")))

        self.add_new_backup_action.triggered.connect(self.add_new_backup)
        self.connect_to_existing_backup_action.triggered.connect(
            self.connect_backup)
        self.delete_action.triggered.connect(self.delete_backup)
        self.edit_action.triggered.connect(self.edit_backup)
        self.backups_tree_widget.itemDoubleClicked.connect(self.edit_backup)
        self.go_action.triggered.connect(self.go_backup)
        self.stop_action.triggered.connect(self.stop_backup)
        self.view_action.triggered.connect(self.view_backup)
        self.exit_action.triggered.connect(self.exit)

        self.backups_tree_widget.itemClicked.connect(self.set_go_action)
        self.website_action.triggered.connect(
            lambda: webbrowser.open("https://blobbackup.com/docs.php"))

        self.run_all_action.triggered.connect(lambda: self.run_all(None))
        self.run_local_action.triggered.connect(
            lambda: self.run_all("Local Directory"))
        self.run_aws_action.triggered.connect(
            lambda: self.run_all("Amazon AWS"))
        self.run_gcp_action.triggered.connect(
            lambda: self.run_all("Google Cloud"))
        self.run_azure_action.triggered.connect(
            lambda: self.run_all("Microsoft Azure"))
        self.run_b2_action.triggered.connect(
            lambda: self.run_all("Backblaze B2"))
        self.run_s3_action.triggered.connect(
            lambda: self.run_all("S3 Storage"))
        self.run_sftp_only.triggered.connect(lambda: self.run_all("SFTP"))

        self.add_one_to_start_button.pressed.connect(
            self.add_new_backup_action.trigger)

        self.populate()
Beispiel #30
0
class MainWindow(QtGui.QMainWindow):

    show_status = QtCore.pyqtSignal(bool, str)
    
    def __init__(self, sysbus, parent=None):
        QtGui.QWidget.__init__(self, parent)

        # Init ourself from the Designer UI
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        # light up the admin interface
        self.admin = AdminInterface(SERVICE,
                                    '/org/ganesha/nfsd/admin',
                                    sysbus,
                                    self.show_status)
        self.exportmgr = ExportMgr(SERVICE,
                                   '/org/ganesha/nfsd/ExportMgr',
                                   sysbus,
                                   self.show_status)
        self.clientmgr = ClientMgr(SERVICE,
                                   '/org/ganesha/nfsd/ClientMgr',
                                   sysbus,
                                   self.show_status)
        self.logmanager = LogManager(SERVICE,
                                     sysbus,
                                     self.show_status)
        self.logdialog = LogSetDialog(self.logmanager)
        self.show_status.connect(self.status_message)

        # Connect up the ui menubar
        #File
        self.ui.actionDBus_connect.triggered.connect(self.connect_gsh)
        self.ui.actionQuit.triggered.connect(self.quit)
        #Manage
        #Manage->Clients
        self.ui.actionAdd_Client.triggered.connect(self.add_client)
        self.ui.actionRemove_Client.triggered.connect(self.remove_client)
        #Manage->Exports
        self.ui.actionExports.triggered.connect(self.export_mgr)
        #Manage->Log Levels
        self.ui.actionLog_Settings.triggered.connect(self.logsettings)
        #Manage->Admin
        self.ui.actionReset_Grace.triggered.connect(self.reset_grace)
        self.ui.actionShutdown.triggered.connect(self.shutdown)
        self.ui.actionReload.triggered.connect(self.reload)
        #View
        self.ui.actionStatistics.triggered.connect(self.stats)
        self.ui.actionViewExports.triggered.connect(self.view_exports)
        self.ui.actionViewClients.triggered.connect(self.view_clients)
        #Help
        self.ui.actionAbout.triggered.connect(self.help)

        # Dbus data models
        self.exports_show_model = ExportTableModel(self.exportmgr)
        self.clients_show_model = ClientTableModel(self.clientmgr)
        
        # Tabs, tables, and views
        self.ui.exports.setModel(self.exports_show_model)
        self.ui.exports.resizeColumnsToContents()
        self.ui.exports.verticalHeader().setVisible(False)
        self.ui.clients.setModel(self.clients_show_model)
        self.ui.clients.resizeColumnsToContents()
        self.ui.clients.verticalHeader().setVisible(False)

    # actions to real work...
    def quit(self):
        self.statusBar().showMessage("Bye bye kiddies, quitting")
        quit()

    def connect_gsh(self):
        self.statusBar().showMessage("Connecting to nfs-ganesha...")
        
    def add_client(self):
        ipaddr, ok = QtGui.QInputDialog.getText(self,
                                                'Add a Client',
                                                'IP Address (N.N.N.N) of client: ')
        if ok:
            self.clientmgr.AddClient(ipaddr)

    def remove_client(self):
        ipaddr, ok = QtGui.QInputDialog.getText(self,
                                                'Remove a Client',
                                                'IP Address (N.N.N.N) of client: ')
        if ok:
            self.clientmgr.RemoveClient(ipaddr)

    def export_mgr(self):
        self.statusBar().showMessage("Export manager")
        
    def logsettings(self):
        self.logdialog.show_logsetting_dialog()

    def reset_grace(self):
        ipaddr, ok = QtGui.QInputDialog.getText(self,
                                                'Grace Period',
                                                'IP Address (N.N.N.N) of client: ')
        if ok:
            self.admin.grace(ipaddr)

    def shutdown(self):
        reply = QtGui.QMessageBox.question(self,
                                           'Warning!!!',
                                           "Do you really want to shut down the server?",
                                           QtGui.QMessageBox.Yes |
                                           QtGui.QMessageBox.No,
                                           QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            self.admin.shutdown()
        
    def reload(self):
        reply = QtGui.QMessageBox.question(self,
                                           'Warning!!!',
                                           "Do you really want to reload exports?",
                                           QtGui.QMessageBox.Yes |
                                           QtGui.QMessageBox.No,
                                           QtGui.QMessageBox.No)
        if reply == QtGui.QMessageBox.Yes:
            self.admin.reload()

    def stats(self):
        self.statusBar().showMessage("stats go here")
        
    def view_exports(self):
        self.exports_show_model.FetchExports()
        
    def view_clients(self):
        self.clients_show_model.FetchClients()
        
    def help(self):
        self.statusBar().showMessage("Help! Help!!")

    def status_message(self, status, errormsg):
        if status:
            str = "Success: "
        else:
            str = "Failed: "
        self.statusBar().showMessage(str + errormsg)
 def __init__(self, parent=None):
     QtWidgets.QMainWindow.__init__(self, parent)
     self.ui = Ui_MainWindow()
     self.ui.setupUi(self)
     self.ui.compile_btn.clicked.connect(self.compile_btn_clicked)
     self.ui.test_btn.clicked.connect(self.test_btn_clicked)
Beispiel #32
0
class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.organizador = Organizador()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.scene = QGraphicsScene()
        self.ui.graficos.setScene(self.scene)

        self.ui.agregar_inicio_button.clicked.connect(self.agregar_ini)
        self.ui.agregar_final_button.clicked.connect(self.agregar_fin)
        self.ui.mostrar_button.clicked.connect(self.mostrar)
        self.ui.buscar_button.clicked.connect(self.buscar)
        self.ui.mostrar_tabla_button.clicked.connect(self.mostrar_tabla)
        self.ui.dibujar_button.clicked.connect(self.dibujar)
        self.ui.limpiar_button.clicked.connect(self.limpiar)
        self.ui.generar_button.clicked.connect(self.generar)

        self.ui.actionAbrir.triggered.connect(self.abrir_archivo)
        self.ui.actionGuardar.triggered.connect(self.guardar_archivo)
        self.ui.actionGrafo.triggered.connect(self.generar_grafo)
        self.ui.actionRecorrido.triggered.connect(self.recorrido)

        self.ui.id_checkbox.stateChanged.connect(self.ordenar_id)
        self.ui.velocidad_checkbox.stateChanged.connect(self.ordenar_vel)
        self.ui.distancia_checkbox.stateChanged.connect(self.ordenar_dis)

    def recorrido(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText("Recorrido en Profundidad: \n")
        self.ui.plainTextEdit.insertPlainText(
            self.organizador.profundidad(self.ui.origen_X.value(),
                                         self.ui.origen_y.value()))
        self.ui.plainTextEdit.insertPlainText("\n\nRecorrido en Amplitud: \n")
        self.ui.plainTextEdit.insertPlainText(
            self.organizador.amplitud(self.ui.origen_X.value(),
                                      self.ui.origen_y.value()))

    def generar_grafo(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText(
            "Grafo (Lista de Adyacencia): \n")
        self.ui.plainTextEdit.insertPlainText(self.organizador.grafo())

    def wheelEvent(self, event):
        if event.delta() > 0:
            self.ui.graficos.scale(1.1, 1.1)
        else:
            self.ui.graficos.scale(0.9, 0.9)

    @Slot()
    def ordenar_id(self):
        if self.ui.id_checkbox.isChecked():
            self.ui.velocidad_checkbox.setChecked(False)
            self.ui.distancia_checkbox.setChecked(False)
            self.organizador.orden(False, "id")

    @Slot()
    def ordenar_dis(self):
        if self.ui.distancia_checkbox.isChecked():
            self.ui.velocidad_checkbox.setChecked(False)
            self.ui.id_checkbox.setChecked(False)
            self.organizador.orden(True, "dis")

    @Slot()
    def ordenar_vel(self):
        if self.ui.velocidad_checkbox.isChecked():
            self.ui.distancia_checkbox.setChecked(False)
            self.ui.id_checkbox.setChecked(False)
            self.organizador.orden(False, "vel")

    @Slot()
    def dibujar(self):
        pen = QPen()
        brush = QBrush()
        pen.setWidth(3)

        for i in self.organizador:
            color = QColor(i.red, i.green, i.blue)
            brush.setStyle(Qt.SolidPattern)
            brush.setColor(color)
            pen.setColor(color)

            self.scene.addEllipse(i.or_x, i.or_y, 7, 7, pen, brush)
            self.scene.addEllipse(i.de_x, i.de_y, 7, 7, pen, brush)
            self.scene.addLine((i.or_x) + 3.5, (i.or_y) + 3.5, (i.de_x) + 3.5,
                               (i.de_y) + 3.5, pen)

        for keys in self.organizador.grafo_dic:
            text = QGraphicsTextItem(str(keys))
            text.setFlag(QGraphicsItem.ItemIsMovable)
            text.setFont(QFont("TimesNewRoman", 12, QFont.ExtraBold))
            self.scene.addItem(text)
            text.setPos(keys[0], keys[1])

    @Slot()
    def limpiar(self):
        self.scene.clear()

    @Slot()
    def generar(self):
        self.ui.id.setValue((randint(0, 9) * 10000) + (randint(0, 9) * 1000) +
                            (randint(0, 9) * 100) + (randint(0, 9) * 10) +
                            randint(0, 9))
        self.ui.origen_X.setValue(randint(0, 500))
        self.ui.origen_y.setValue(randint(0, 500))
        self.ui.destino_x.setValue(randint(0, 500))
        self.ui.destino_y.setValue(randint(0, 500))
        self.ui.vel.setValue(randint(0, 200))
        self.ui.red.setValue(randint(0, 255))
        self.ui.green.setValue(randint(0, 255))
        self.ui.blue.setValue(randint(0, 225))

    @Slot()
    def buscar(self):
        key = int(self.ui.buscar_line_edit.text())
        find = False
        for particula in self.organizador:
            if key == particula.id:
                self.ui.tabla.setColumnCount(10)
                labels = [
                    'ID', 'Origen en X', 'Origen en Y', 'Destino en X',
                    'Destino en Y', 'Velocidad', 'Distancia', 'Red', 'Green',
                    'Blue'
                ]
                self.ui.tabla.setHorizontalHeaderLabels(labels)
                self.ui.tabla.setRowCount(1)
                self.ui.tabla.setItem(0, 0,
                                      QTableWidgetItem(str(particula.id)))
                self.ui.tabla.setItem(0, 1,
                                      QTableWidgetItem(str(particula.or_x)))
                self.ui.tabla.setItem(0, 2,
                                      QTableWidgetItem(str(particula.or_y)))
                self.ui.tabla.setItem(0, 3,
                                      QTableWidgetItem(str(particula.de_x)))
                self.ui.tabla.setItem(0, 4,
                                      QTableWidgetItem(str(particula.de_y)))
                self.ui.tabla.setItem(0, 5,
                                      QTableWidgetItem(str(particula.vel)))
                self.ui.tabla.setItem(0, 6,
                                      QTableWidgetItem(str(particula.dis)))
                self.ui.tabla.setItem(0, 7,
                                      QTableWidgetItem(str(particula.red)))
                self.ui.tabla.setItem(0, 8,
                                      QTableWidgetItem(str(particula.green)))
                self.ui.tabla.setItem(0, 9,
                                      QTableWidgetItem(str(particula.blue)))
                find = True
                return
        if find == False:
            QMessageBox.warning(self, "Atención",
                                f"La partícula '{key}' no fue encontrada")

    @Slot()
    def mostrar_tabla(self):
        self.ui.tabla.setColumnCount(10)
        labels = [
            'ID', 'Origen en X', 'Origen en Y', 'Destino en X', 'Destino en Y',
            'Velocidad', 'Distancia', 'Red', 'Green', 'Blue'
        ]
        self.ui.tabla.setHorizontalHeaderLabels(labels)
        self.ui.tabla.setRowCount(len(self.organizador))

        fila = 0
        for particula in self.organizador:
            self.ui.tabla.setItem(fila, 0, QTableWidgetItem(str(particula.id)))
            self.ui.tabla.setItem(fila, 1,
                                  QTableWidgetItem(str(particula.or_x)))
            self.ui.tabla.setItem(fila, 2,
                                  QTableWidgetItem(str(particula.or_y)))
            self.ui.tabla.setItem(fila, 3,
                                  QTableWidgetItem(str(particula.de_x)))
            self.ui.tabla.setItem(fila, 4,
                                  QTableWidgetItem(str(particula.de_y)))
            self.ui.tabla.setItem(fila, 5,
                                  QTableWidgetItem(str(particula.vel)))
            self.ui.tabla.setItem(fila, 6,
                                  QTableWidgetItem(str(particula.dis)))
            self.ui.tabla.setItem(fila, 7,
                                  QTableWidgetItem(str(particula.red)))
            self.ui.tabla.setItem(fila, 8,
                                  QTableWidgetItem(str(particula.green)))
            self.ui.tabla.setItem(fila, 9,
                                  QTableWidgetItem(str(particula.blue)))
            fila += 1

    @Slot()
    def abrir_archivo(self):
        ubicacion = QFileDialog.getOpenFileName(
            self,
            "Abrir",
            ".",
            "JSON (*.json)",
        )[0]
        if self.organizador.abrir(ubicacion):
            QMessageBox.information(
                self, "Operación Exitosa",
                "El archivo se abrió con éxito desde la direccion: \n" +
                ubicacion)
            self.organizador.borrar_grafo()
        else:
            QMessageBox.critical(self, "Error!",
                                 "El archivo no se logró abrir")

    @Slot()
    def guardar_archivo(self):
        ubicacion = QFileDialog.getSaveFileName(self, 'Guadar', '.',
                                                'JSON (*.json)')[0]
        if self.organizador.guardar(ubicacion):
            QMessageBox.information(
                self, "Operación Exitosa",
                "El archivo se guardó con éxito en la direccion: \n" +
                ubicacion)
        else:
            QMessageBox.critical(self, "Error!",
                                 "El archivo no se logró guardar")

    @Slot()
    def agregar_ini(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_inicio(part)

    @Slot()
    def agregar_fin(self):
        Id = self.ui.id.value()
        or_x = self.ui.origen_X.value()
        or_y = self.ui.origen_y.value()
        ds_x = self.ui.destino_x.value()
        ds_y = self.ui.destino_y.value()
        vel = self.ui.vel.value()
        red = self.ui.red.value()
        grn = self.ui.green.value()
        blu = self.ui.blue.value()
        part = Particula(Id, or_x, or_y, ds_x, ds_y, vel, red, grn, blu)
        self.organizador.agregar_final(part)

    def mostrar(self):
        self.ui.plainTextEdit.clear()
        self.ui.plainTextEdit.insertPlainText(str(self.organizador))
Beispiel #33
0
class MainWindow(QMainWindow):
	progressSignal = pyqtSignal(int)
	def __init__(self, parent = None):
		QMainWindow.__init__(self, parent)

		self.data = None
		self.image = None

		self.printer = Printer(self)

		self.ui = Ui_MainWindow()
		self.ui.setupUi(self)

		self.setActions()

		self.loadSettings()

		self.setState(STATE_INIT)

	def setState(self, state):
		#if state == STATE_INIT:
			#self.ui.actionBuild.setEnabled(False)
		#elif state == STATE_LOADED:
			#self.ui.actionBuild.setEnabled(True)

		self.state = state


	def setActions(self):
		self.ui.actionFileOpen.triggered.connect(self.fileOpen)
		self.ui.actionBuild.triggered.connect(self.build)
		self.ui.tbConnect.toggled.connect(self.connect_a)

	def fileOpen(self):
		fileDialog = QFileDialog(self, self.tr('Open file'))
		fileDialog.setNameFilters([self.tr('Gerber (*.gbr)'),
									self.tr('Image (*.png *.bmp *.jpg)')])
		if not fileDialog.exec_():
			return

		filename = fileDialog.selectedFiles()[0]

		fileDialog = OpenFileDialog(filename, self)
		if fileDialog.exec_():
			self.image = fileDialog.image()
			self.ui.view.setPixmap(QPixmap.fromImage(self.image))
			self.setState(STATE_LOADED)

	def build(self):
		self.progress = QProgressDialog(self) #.tr('Building'), self.tr('Cancel'))
		self.progress.setRange(0, 100)
		self.progressSignal.connect(self.progress.setValue)
		self._build(thr_start = True)
		self.progress.exec_()

	@SimpleThread
	def _build(self):
		self.updateProgress(10, thr_method = 'q')
		pixChunks = getPixelChunks(self.image)
		self.updateProgress(20, thr_method = 'q')

		w = self.image.width()
		h = self.image.height()

		res = get_gcode(pixChunks, w, h)
		self.updateProgress(30, thr_method = 'q')

		t = 0
		fres = []
		for gcode, pix, t1 in res:
			#print t1, pix, gcode
			fres.append(gcode)
			t+= t1
		print h*0.05, w*0.05, t
		fres = '\n'.join(fres)
		f = open('res.gcode', 'w')
		f.write(fres)
		f.close()
		
		
		self.updateProgress(100, thr_method = 'q')

	def updateProgress(self, val):
		self.progressSignal.emit(val)

	def saveSettings(self):
		ssv('main_window_geometry', self.saveGeometry())
		ssv('main_window_state', self.saveState())

		self.saveUiValues()
		#self.saveDsbValue('Resolution')
		#self.saveDsbValue('PretensioningX')
		#self.saveDsbValue('PretensioningY')

	def loadSettings(self):

		if not self.restoreGeometry(sld('main_window_geometry').toByteArray()): #FIXME
			geometry = QRect(0, 0, 800, 600)
			geometry.moveCenter(QApplication.desktop().screenGeometry(self).center())
			self.setGeometry(geometry)

		self.restoreState(sld('main_window_state').toByteArray())

		self.loadUiValues()
		#self.loadDsbValue('Resolution', 0.1)
		#self.loadDsbValue('PretensioningX', 1)
		#self.loadDsbValue('PretensioningY', 1)

	def loadUiValues(self):
		for key, obj in self.ui.__dict__.items():
			ok = False
			val = sld(key)
			if val.isNull():
				continue

			if type(obj) == QDoubleSpinBox:
				val, ok = val.toFloat()
			elif type(obj) == QSpinBox:
				val, ok = val.toInt()
			elif type(obj) == QLineEdit:
				val = val.toString()
				obj.setText(val)
				continue

			if ok:
				obj.setValue(val)

	def saveUiValues(self):
		for key, obj in self.ui.__dict__.items():
			if type(obj) in (QDoubleSpinBox, QSpinBox):
				val = obj.value()
			elif type(obj) == QLineEdit:
				val = obj.text()
			else:
				continue

			ssv(key, val)

	def connect_a(self, con):
		if con:
			port = self.ui.lePrinterPort.text()
			baudrate = self.ui.sbPrinterBaudrate.value()
			if not port.isEmpty() and baudrate > 0:
				if not self.printer.connect_(port, baudrate):
					self.ui.tbConnect.setChecked(False)
		else:
			self.printer.disconnect_()

	def closeEvent(self, event):
		self.saveSettings()