示例#1
0
文件: main.py 项目: avivorly/dark
class AfelApp(QMainWindow):
    def __init__(self, parent=None):
        super(AfelApp, self).__init__(parent)
        self.setGeometry(10, 10, 1000, 1200)
        # self.setStyleSheet("""
        #
        #              font-size: 200;
        #
        #         """)
        # Flags
        self.modes = {
            'outer_window': True,
            'live_mode': False
        }

        self.result_box_group = None
        self.result_box = None

        self.module_btns = []

        mainWindow = QWidget(self)
        self.setCentralWidget(mainWindow)
        mainlay = QHBoxLayout()

        mainWindow.setLayout(mainlay)

        #  load area
        btns_group = QGroupBox()
        btns_lay = QVBoxLayout()
        btns_group.setLayout(btns_lay)
        btns_lay.addStretch(1)
        self.btns_lay = btns_lay

        self.load_modules_btns()

        startbtn = QPushButton('start process')
        startbtn.clicked.connect(self.start_process)
        btns_lay.addWidget(startbtn)



        #  sandbox area
        self.sandbox = SandBox()
        self.sandboxlay = QVBoxLayout()
        # self.sandboxlay.addStretch(209)
        self.sandbox.setLayout(self.sandboxlay)

        mainlay.addWidget(btns_group,1)
        mainlay.addWidget(self.sandbox,10)

        # toolbar
        # toolbar.setIconSize(QSize(16, 16))
        self.toolbar = ToolBar(self)
        self.addToolBar(self.toolbar)

    def load_modules_btns(self):
        self.clear_modules_btns()
        all_modules, errors = Module.get_all_modules()
        for btn in [ModuleBtn(m) for m in all_modules]:
            self.btns_lay.insertWidget(0, btn)
            self.module_btns.append(btn)
        self.pop_errors(errors)

    def pop_errors(self, errors):
        for e in errors:
            w = QMainWindow(self)
            w.setCentralWidget(AMsgBox(self,e))
            w.show()

    def clear_modules_btns(self):
        [b.deleteLater() for b in self.module_btns]
        self.module_btns = []

    def reload(self):  # reload all - sandbox and modules btn
        temp_path = 'm/temp/temporaryModules'  # sandbox cash

        self.sandbox.dump_sandbox(temp_path)
        self.clear_modules_btns()
        self.load_modules_btns()
        self.sandbox.clear_sandbox(force=True)
        self.sandbox.load_file_modules(temp_path)

    def start_process(self):
        if self.result_box_group:  # Qgroup to include the results window when not poped
            self.result_box_group.deleteLater()  # improve memory
            self.result_box_group = None
        self.old_box = self.result_box
        starter = self.sandbox.starter
        if starter:
            try:
                extras = starter.module.run()
                self.result_box = ResultView(self, extras)
                if self.modes['outer_window']:
                    w = QMainWindow(self)
                    w.setCentralWidget(self.result_box)
                    w.show()
                else:
                    g = QGroupBox()
                    gl = QHBoxLayout()
                    g.setLayout(gl)
                    gl.addWidget(self.result_box)
                    self.result_box_group = g
                    self.layout().addWidget(g, 5)
            except:
                self.pop_errors([format_exc()])


        else:
            self.statusBar().showMessage('please define starter', 2000)
            self.sandbox.force_stater()
            self.start_process()

    def keyPressEvent(self, event):
        self.toolbar.shortcut(event.key())