Exemple #1
0
    def show_tray(self):
        if QSystemTrayIcon.isSystemTrayAvailable:
            # create tray menu
            traymenu = QMenu('AyoShalat', self)
            openwin_menu = traymenu.addAction('Show me!')
            openwin_menu.triggered.connect(self.show)

            playazan_menu = traymenu.addAction('Play Azan')
            playazan_menu.triggered.connect(self.playAzan)
            
            stop_azan_menu = traymenu.addAction('Stop Azan')
            stop_azan_menu.triggered.connect(self.stopAzan)

            traymenu.addSeparator()

            exit_menu = traymenu.addAction('Exit')
            exit_menu.triggered.connect(self.exit)

            # create tray icon
            qtray = QSystemTrayIcon(self)

            qtray.setIcon(QIcon(self.icopath))
            qtray.setVisible(True)
            qtray.setContextMenu(traymenu)
            qtray.show()
    def slot_shot_context_menu(self, pos: QPoint) -> None:
        menu = QMenu(self.dock)
        menu.addAction('Copy cursor address', self.copy_cursor_address)
        menu.addAction('Copy selected bytes', self.copy_selected_bytes)

        if self.symbols is not None:
            menu.addAction('Copy symbol at or before cursor address', self.slot_copy_symbol)

        if abs(self.selected_bytes) == 4:
            menu.addAction('Copy selected as pointer address',
                           self.copy_selected_pointer_address)
            menu.addSeparator()
            menu.addAction('Only mark as pointer', self.mark_as_pointer)
            if self.is_linked:
                menu.addAction(
                    'Mark as pointer in all linked editors and add constraint', self.mark_as_all_pointer)

        # General actions
        menu.addSeparator()
        menu.addAction('Add annotation at cursor',
                       self.open_new_annotation_dialog)
        menu.addAction('Add manual constraint at cursor',
                       self.open_new_constraint_dialog)
        if self.is_linked:
            menu.addAction('Mark selected bytes only in current variant',
                           self.mark_only_in_current)

        menu.addAction('Goto', self.slot_show_goto_dialog)

        # Allow plugins to add context menu entries by registering a context menu handler
        for handler in self.contextmenu_handlers:
            handler(self, menu)

        menu.exec_(pos)
Exemple #3
0
    def addTargetActions(self, menu: QMenu):
        selected_items = [
            i.text() for i in self.list_input_files.selectedItems()
        ]
        selected_items += [
            self.currentOutputList[i.row()]
            for i in self.currentOutputListView.selectedIndexes()
        ]

        menu.addSeparator()
        # cannot use default arg to force coping the type here, since the signal also provides other inputs
        func_create = lambda _t, items: lambda: self.currentOutputList.appendTarget(
            _t(items))
        for t in target_types:
            if t.validate(selected_items):
                create_action = QAction(t.description, menu)
                create_action.triggered.connect(func_create(t, selected_items))
                menu.addAction(create_action)

        menu.addSeparator()
        func_create_batch = lambda _t, items: lambda: self.currentOutputList.extendTargets(
            [_t(i) for i in items])
        for t in target_types:
            if all(t.validate([item]) for item in selected_items):
                create_action = QAction("Batch " + t.description, menu)
                create_action.triggered.connect(
                    func_create_batch(t, selected_items))
                menu.addAction(create_action)
Exemple #4
0
    def create_tray_icon(self):
        tray_icon = QSystemTrayIcon(QIcon(str(pkg_data.LOGO)))
        tray_icon.activated.connect(self.tray_icon_clicked)

        menu = QMenu(self)
        open_action = menu.addAction("Open")
        open_action.triggered.connect(self.show_window)
        menu.addSeparator()
        menu.addAction(self.action_exit)

        tray_icon.setContextMenu(menu)
        return tray_icon
 def open_menu(self):
     menu = QMenu(self)
     add_group = QAction('Add Group', self)
     add_trigger = QAction('Add Trigger', self)
     add_group.triggered.connect(self.add_group)
     add_trigger.triggered.connect(self.add_trigger)
     menu.addAction(add_group)
     menu.addAction(add_trigger)
     menu.addSeparator()
     add_edit = QAction('Edit', self)
     add_delete = QAction('Delete', self)
     add_edit.triggered.connect(self.open_item)
     add_delete.triggered.connect(self.delete_item)
     menu.addAction(add_edit)
     menu.addAction(add_delete)
     menu.exec(QCursor().pos())
Exemple #6
0
    def context_menu(self, point):

        selected = self.keyListView.selectedIndexes()
        if not selected:
            return

        index = selected[0]
        item = self.list_model.item(index.row())
        key = item.data()

        pop_menu = QMenu()

        _set_default_key_action = pop_menu.addAction(
            qta.icon('fa.check',
                     color=icon_color['color'],
                     color_active=icon_color['active']), '设为默认')
        if key_cache.is_cur_key(key) or key.timeout:
            _set_default_key_action.setEnabled(False)

        pop_menu.addSeparator()
        _encrypt_files_action = pop_menu.addAction(
            qta.icon('ei.lock',
                     color=icon_color['color'],
                     color_active=icon_color['active']), "加密文件")
        _decrypt_files_action = pop_menu.addAction(
            qta.icon('ei.unlock',
                     color=icon_color['color'],
                     color_active=icon_color['active']), "解密文件")
        pop_menu.addSeparator()

        _reload_key_action = pop_menu.addAction(
            qta.icon('fa.refresh',
                     color=icon_color['color'],
                     color_active=icon_color['active']), "重新加载")
        _reload_key_action.setEnabled(key.timeout)

        selected_action = pop_menu.exec_(QCursor.pos())
        if selected_action == _encrypt_files_action:
            self.encrypt_files_action()
        elif selected_action == _set_default_key_action:
            self.set_default_key_action()
        elif selected_action == _reload_key_action:
            self.reload_key_action()
        elif selected_action == _decrypt_files_action:
            self.decrypt_files_action()
Exemple #7
0
 def onDataViewContextMenu(self, pos):
     if not self.group_id:
         return
     index = self.DataView.indexAt(pos)
     menu_title = QWidgetAction(self.DataView)
     title_lbl = QLabel()
     title_lbl.setText(self.tr("Change type to:"))
     menu_title.setDefaultWidget(title_lbl)
     contextMenu = QMenu(self.DataView)
     contextMenu.addAction(menu_title)
     contextMenu.addSeparator()
     combo_model = self.GroupCombo.model()
     for i in range(self.GroupCombo.count()):
         type_id = combo_model.data(
             combo_model.index(
                 i, combo_model.fieldIndex(self.group_fkey_field)))
         contextMenu.addAction(self.GroupCombo.itemText(i),
                               partial(self.updateItemType, index, type_id))
     contextMenu.popup(self.DataView.viewport().mapToGlobal(pos))
Exemple #8
0
 def populate(self) -> None:
     for category_name in self._my_sorted(self.d.keys()):
         url_list = self.d[category_name]
         menu = QMenu(self.root_menu)
         menu.setToolTipsVisible(True)
         menu.setTitle(category_name)
         self.root_menu.addMenu(menu)
         for entry in self._my_sorted(url_list):
             result = self.extract_parts(entry)
             if result:
                 description, link = result
                 act = QAction(description, self.parent)
                 act.setToolTip(link)
                 act.triggered.connect(partial(self.open_new_browser_tab_fn, link))
                 menu.addAction(act)
             else:
                 if re.search(r"^-{3,}$", entry):    # "---" (with length >= 3) is a separator
                     menu.addSeparator()
                 else:
                     log.warning(f"couldn't parse the bookmark line '{entry}'")
    def create_backend_entries(self, menu: QtWidgets.QMenu):
        def _create_check(text: str,
                          on_triggered,
                          default: Optional[bool] = None):
            action = QtGui.QAction(menu)
            action.setText(text)
            action.setCheckable(True)
            if default is not None:
                action.setChecked(default)
            action.triggered.connect(on_triggered)
            return action

        self.use_dolphin_backend = _create_check("Dolphin",
                                                 self.on_use_dolphin_backend)
        self.use_nintendont_backend = _create_check(
            "", self.on_use_nintendont_backend)
        self.connect_to_game = _create_check("Connect to the game",
                                             self.on_connect_to_game, True)

        menu.addAction(self.use_dolphin_backend)
        menu.addAction(self.use_nintendont_backend)
        menu.addSeparator()
        menu.addAction(self.connect_to_game)
Exemple #10
0
    def showContextMenu(self, pos: QPoint) -> None:
        mods = self.getSelectedMods()
        if not mods:
            return
        menu = QMenu(self)
        actionOpen = menu.addAction('&Open Directory')
        actionOpen.setIcon(
            QIcon(str(getRuntimePath('resources/icons/open-folder.ico'))))
        actionOpen.triggered.connect(lambda: [
            util.openDirectory(self.modmodel.getModPath(mod))  # type: ignore
            for mod in mods
        ])
        menu.addSeparator()
        actionEnable = menu.addAction('&Enable')
        actionEnable.triggered.connect(
            lambda: [asyncio.create_task(self.enableSelectedMods(True))])
        actionEnable.setEnabled(not all(mod.enabled for mod in mods))
        actionDisable = menu.addAction('&Disable')
        actionDisable.triggered.connect(
            lambda: [asyncio.create_task(self.enableSelectedMods(False))])
        actionDisable.setEnabled(not all(not mod.enabled for mod in mods))
        menu.addSeparator()
        actionUninstall = menu.addAction('&Uninstall')
        actionUninstall.triggered.connect(
            lambda: [asyncio.create_task(self.deleteSelectedMods())])
        menu.addSeparator()
        actionOpenNexus = menu.addAction('Open &Nexus Mods page')
        actionOpenNexus.setIcon(
            QIcon(str(getRuntimePath('resources/icons/browse.ico'))))
        actionOpenNexus.triggered.connect(lambda: [
            QDesktopServices.openUrl(
                QUrl(f'https://www.nexusmods.com/witcher3/mods/{modid}'))
            for modid in {mod.modid
                          for mod in mods if mod.modid > 0}
        ])
        actionOpenNexus.setEnabled(not all(mod.modid <= 0 for mod in mods))

        menu.popup(self.viewport().mapToGlobal(pos))
Exemple #11
0
    def __init__(self, _settings: settings.Settings, parent=None):
        super(MainWindow, self).__init__(parent)

        self.formation_extrapolator_windows = []
        self.formation_list_windows = []

        self.settings = _settings

        self.stepgraph = stepgraph.Stepgraph(self)

        self.hook = hook.Hook(self)

        self.current_step_state: State = State(field_id=117,
                                               step=Step(0, 0),
                                               danger=0,
                                               step_fraction=0,
                                               formation_value=0)

        self.setWindowTitle(self.settings.WINDOW_TITLE)
        self.setWindowIcon(QIcon(self.settings.WINDOW_ICON))

        menubar = QMenuBar()

        menu_file = QMenu("File")

        menu_file_exit = QAction("Exit", self)
        menu_file_exit.triggered.connect(exit)
        menu_file.addAction(menu_file_exit)

        menu_connect = QMenu("Connect")

        menu_connect_connect_emulator = QAction("Connect to Emulator", self)
        menu_connect_connect_emulator.triggered.connect(self.connect_emulator)
        menu_connect.addAction(menu_connect_connect_emulator)

        menu_connect_connect_pc = QAction("Connect to PC", self)
        menu_connect_connect_pc.triggered.connect(self.connect_pc)
        menu_connect.addAction(menu_connect_connect_pc)

        menu_connect.addSeparator()

        menu_connect_disconnect = QAction("Disconnect", self)
        menu_connect_disconnect.triggered.connect(self.disconnect)
        menu_connect.addAction(menu_connect_disconnect)

        menu_window = QMenu("Window")

        menu_window_toggle_stepgraph = QAction("Toggle Stepgraph", self)
        menu_window_toggle_stepgraph.triggered.connect(self.stepgraph.toggle)
        menu_window.addAction(menu_window_toggle_stepgraph)

        menu_window_open_formation_window = QAction("Open Formation Window",
                                                    self)
        menu_window_open_formation_window.triggered.connect(
            self.open_formation_extrapolator)
        menu_window.addAction(menu_window_open_formation_window)

        menubar.addMenu(menu_file)
        menubar.addMenu(menu_connect)
        menubar.addMenu(menu_window)

        # self.master.config(menu=menubar)
        self.setMenuBar(menubar)

        main_frame = QFrame()
        layout = QVBoxLayout()

        rows = [
            "Step ID", "Step Fraction", "Offset", "Danger",
            "Formation Accumulator", "Field ID", "Table Index",
            "Danger Divisor Multiplier", "Lure Rate", "Preempt Rate",
            "Last Encounter Formation"
        ]

        self.memory_view = QTableWidget(len(rows), 2)
        self.memory_view.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.memory_view.setFocusPolicy(Qt.NoFocus)
        self.memory_view.setSelectionMode(QAbstractItemView.NoSelection)
        self.memory_view.setHorizontalHeaderItem(0,
                                                 QTableWidgetItem("Address"))
        self.memory_view.setHorizontalHeaderItem(
            1, QTableWidgetItem("        Value        "))
        self.memory_view.horizontalHeader().setSectionResizeMode(
            QHeaderView.Stretch)
        self.memory_view.verticalHeader().setSectionResizeMode(
            QHeaderView.ResizeToContents)
        for rowNum in range(len(rows)):
            self.memory_view.setVerticalHeaderItem(rowNum,
                                                   QTableWidgetItem(""))
            _l = QLabel(" " + rows[rowNum] + " ")
            _l.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
            self.memory_view.setCellWidget(rowNum, 0, _l)
            _l = QLabel("")
            _l.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
            self.memory_view.setCellWidget(rowNum, 1, _l)
        self.memory_view.resizeColumnsToContents()
        self.memory_view.setMinimumHeight(350)
        self.memory_view.setMinimumWidth(300)
        layout.addWidget(self.memory_view)

        self.connected_text = QLabel(self.settings.DISCONNECTED_TEXT)
        self.connected_text.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        layout.addWidget(self.connected_text)

        main_frame.setLayout(layout)

        self.setCentralWidget(main_frame)

        self.setMinimumHeight(420)
Exemple #12
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1024, 768)
        self.actionOpen_ObjectBlueprints_xml = QAction(MainWindow)
        self.actionOpen_ObjectBlueprints_xml.setObjectName(
            u"actionOpen_ObjectBlueprints_xml")
        self.actionExit = QAction(MainWindow)
        self.actionExit.setObjectName(u"actionExit")
        self.actionWiki_template = QAction(MainWindow)
        self.actionWiki_template.setObjectName(u"actionWiki_template")
        self.actionWiki_template.setCheckable(True)
        self.actionWiki_template.setChecked(True)
        self.actionAttributes = QAction(MainWindow)
        self.actionAttributes.setObjectName(u"actionAttributes")
        self.actionAttributes.setCheckable(True)
        self.actionAll_attributes = QAction(MainWindow)
        self.actionAll_attributes.setObjectName(u"actionAll_attributes")
        self.actionAll_attributes.setCheckable(True)
        self.actionScan_wiki = QAction(MainWindow)
        self.actionScan_wiki.setObjectName(u"actionScan_wiki")
        self.actionUpload_templates = QAction(MainWindow)
        self.actionUpload_templates.setObjectName(u"actionUpload_templates")
        self.actionUpload_tiles = QAction(MainWindow)
        self.actionUpload_tiles.setObjectName(u"actionUpload_tiles")
        self.actionXML_source = QAction(MainWindow)
        self.actionXML_source.setObjectName(u"actionXML_source")
        self.actionXML_source.setCheckable(True)
        self.actionShow_help = QAction(MainWindow)
        self.actionShow_help.setObjectName(u"actionShow_help")
        self.actionUpload_extra_image_s_for_selected_objects = QAction(
            MainWindow)
        self.actionUpload_extra_image_s_for_selected_objects.setObjectName(
            u"actionUpload_extra_image_s_for_selected_objects")
        self.actionDiff_template_against_wiki = QAction(MainWindow)
        self.actionDiff_template_against_wiki.setObjectName(
            u"actionDiff_template_against_wiki")
        self.actionDark_mode = QAction(MainWindow)
        self.actionDark_mode.setObjectName(u"actionDark_mode")
        self.actionSuppress_image_comparison_popups = QAction(MainWindow)
        self.actionSuppress_image_comparison_popups.setObjectName(
            u"actionSuppress_image_comparison_popups")
        self.actionSuppress_image_comparison_popups.setCheckable(True)
        self.actionSuppress_image_comparison_popups.setChecked(False)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.verticalLayout = QVBoxLayout()
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.plainTextEdit = QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setObjectName(u"plainTextEdit")
        font = QFont()
        font.setFamilies([u"Consolas"])
        font.setPointSize(10)
        self.plainTextEdit.setFont(font)
        self.plainTextEdit.setUndoRedoEnabled(False)
        self.plainTextEdit.setReadOnly(True)

        self.horizontalLayout.addWidget(self.plainTextEdit)

        self.verticalLayout_4 = QVBoxLayout()
        self.verticalLayout_4.setObjectName(u"verticalLayout_4")
        self.tile_label = QLabel(self.centralwidget)
        self.tile_label.setObjectName(u"tile_label")
        self.tile_label.setMinimumSize(QSize(160, 240))
        font1 = QFont()
        font1.setFamilies([u"Segoe UI"])
        self.tile_label.setFont(font1)
        self.tile_label.setStyleSheet(u"background-color: rgb(15, 59, 58);")

        self.verticalLayout_4.addWidget(self.tile_label)

        self.save_tile_button = QPushButton(self.centralwidget)
        self.save_tile_button.setObjectName(u"save_tile_button")
        font2 = QFont()
        font2.setFamilies([u"Segoe UI"])
        font2.setPointSize(10)
        self.save_tile_button.setFont(font2)

        self.verticalLayout_4.addWidget(self.save_tile_button)

        self.swap_tile_button = QPushButton(self.centralwidget)
        self.swap_tile_button.setObjectName(u"swap_tile_button")
        self.swap_tile_button.setEnabled(True)
        self.swap_tile_button.setFont(font2)

        self.verticalLayout_4.addWidget(self.swap_tile_button)

        self.horizontalLayout.addLayout(self.verticalLayout_4)

        self.verticalLayout.addLayout(self.horizontalLayout)

        self.verticalLayout_3 = QVBoxLayout()
        self.verticalLayout_3.setObjectName(u"verticalLayout_3")
        self.horizontalLayout_2 = QHBoxLayout()
        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
        self.search_label = QLabel(self.centralwidget)
        self.search_label.setObjectName(u"search_label")
        self.search_label.setMinimumSize(QSize(0, 0))
        self.search_label.setFont(font2)

        self.horizontalLayout_2.addWidget(self.search_label)

        self.search_line_edit = QLineEdit(self.centralwidget)
        self.search_line_edit.setObjectName(u"search_line_edit")
        self.search_line_edit.setFont(font2)

        self.horizontalLayout_2.addWidget(self.search_line_edit)

        self.expand_all_button = QPushButton(self.centralwidget)
        self.expand_all_button.setObjectName(u"expand_all_button")
        self.expand_all_button.setMinimumSize(QSize(90, 0))
        self.expand_all_button.setFont(font2)

        self.horizontalLayout_2.addWidget(self.expand_all_button)

        self.collapse_all_button = QPushButton(self.centralwidget)
        self.collapse_all_button.setObjectName(u"collapse_all_button")
        self.collapse_all_button.setMinimumSize(QSize(90, 0))
        self.collapse_all_button.setFont(font2)

        self.horizontalLayout_2.addWidget(self.collapse_all_button)

        self.restore_all_button = QPushButton(self.centralwidget)
        self.restore_all_button.setObjectName(u"restore_all_button")
        self.restore_all_button.setMinimumSize(QSize(130, 0))
        self.restore_all_button.setFont(font2)

        self.horizontalLayout_2.addWidget(self.restore_all_button)

        self.verticalLayout_3.addLayout(self.horizontalLayout_2)

        self.tree_target_widget = QWidget(self.centralwidget)
        self.tree_target_widget.setObjectName(u"tree_target_widget")
        self.tree_target_widget.setFont(font1)

        self.verticalLayout_3.addWidget(self.tree_target_widget, 0,
                                        Qt.AlignBottom)

        self.verticalLayout.addLayout(self.verticalLayout_3)

        self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1024, 21))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName(u"menuFile")
        self.menuView = QMenu(self.menubar)
        self.menuView.setObjectName(u"menuView")
        self.menuWiki = QMenu(self.menubar)
        self.menuWiki.setObjectName(u"menuWiki")
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setObjectName(u"menuHelp")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuWiki.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        self.menuFile.addAction(self.actionOpen_ObjectBlueprints_xml)
        self.menuFile.addAction(self.actionExit)
        self.menuView.addAction(self.actionWiki_template)
        self.menuView.addAction(self.actionAttributes)
        self.menuView.addAction(self.actionAll_attributes)
        self.menuView.addAction(self.actionXML_source)
        self.menuView.addSeparator()
        self.menuView.addAction(self.actionDark_mode)
        self.menuWiki.addAction(self.actionScan_wiki)
        self.menuWiki.addAction(self.actionDiff_template_against_wiki)
        self.menuWiki.addAction(self.actionUpload_templates)
        self.menuWiki.addAction(self.actionUpload_tiles)
        self.menuWiki.addAction(
            self.actionUpload_extra_image_s_for_selected_objects)
        self.menuWiki.addAction(self.actionSuppress_image_comparison_popups)
        self.menuHelp.addAction(self.actionShow_help)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", u"Qud Blueprint Explorer",
                                       None))
        self.actionOpen_ObjectBlueprints_xml.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Open ObjectBlueprints.xml...", None))
        self.actionExit.setText(
            QCoreApplication.translate("MainWindow", u"Exit", None))
        self.actionWiki_template.setText(
            QCoreApplication.translate("MainWindow", u"Wiki template", None))
        self.actionAttributes.setText(
            QCoreApplication.translate("MainWindow", u"Attributes", None))
        self.actionAll_attributes.setText(
            QCoreApplication.translate("MainWindow", u"All attributes", None))
        self.actionScan_wiki.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Scan wiki for selected objects",
                                       None))
        self.actionUpload_templates.setText(
            QCoreApplication.translate(
                "MainWindow", u"Upload templates for selected objects", None))
        self.actionUpload_tiles.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Upload tiles for selected objects",
                                       None))
        self.actionXML_source.setText(
            QCoreApplication.translate("MainWindow", u"XML source", None))
        self.actionShow_help.setText(
            QCoreApplication.translate("MainWindow", u"Show help", None))
        self.actionUpload_extra_image_s_for_selected_objects.setText(
            QCoreApplication.translate(
                "MainWindow", u"Upload extra image(s) for selected objects",
                None))
        self.actionDiff_template_against_wiki.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Diff template against wiki", None))
        self.actionDark_mode.setText(
            QCoreApplication.translate("MainWindow", u"Toggle dark mode",
                                       None))
        self.actionSuppress_image_comparison_popups.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Suppress image comparison pop-ups",
                                       None))
        self.tile_label.setText("")
        self.save_tile_button.setText(
            QCoreApplication.translate("MainWindow", u"Save tile...", None))
        self.swap_tile_button.setText(
            QCoreApplication.translate("MainWindow", u"Toggle .png/.gif",
                                       None))
        self.search_label.setText(
            QCoreApplication.translate("MainWindow", u"Search:", None))
        self.expand_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Expand all", None))
        self.collapse_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Collapse all", None))
        self.restore_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Default expansion",
                                       None))
        self.menuFile.setTitle(
            QCoreApplication.translate("MainWindow", u"File", None))
        self.menuView.setTitle(
            QCoreApplication.translate("MainWindow", u"View type", None))
        self.menuWiki.setTitle(
            QCoreApplication.translate("MainWindow", u"Wiki", None))
        self.menuHelp.setTitle(
            QCoreApplication.translate("MainWindow", u"Help", None))
Exemple #13
0
class MainWindow(QMainWindow):
    """Voice Changer main window."""
    def __init__(self, parent=None):
        super(MainWindow, self).__init__()
        self.statusBar().showMessage("Move Dial to Deform Microphone Voice !.")
        self.setWindowTitle(__doc__)
        self.setMinimumSize(240, 240)
        self.setMaximumSize(480, 480)
        self.resize(self.minimumSize())
        self.setWindowIcon(QIcon.fromTheme("audio-input-microphone"))
        self.tray = QSystemTrayIcon(self)
        self.center()
        QShortcut("Ctrl+q", self, activated=lambda: self.close())
        self.menuBar().addMenu("&File").addAction("Quit", lambda: exit())
        self.menuBar().addMenu("Sound").addAction(
            "STOP !", lambda: call('killall rec', shell=True))
        windowMenu = self.menuBar().addMenu("&Window")
        windowMenu.addAction("Hide", lambda: self.hide())
        windowMenu.addAction("Minimize", lambda: self.showMinimized())
        windowMenu.addAction("Maximize", lambda: self.showMaximized())
        windowMenu.addAction("Restore", lambda: self.showNormal())
        windowMenu.addAction("FullScreen", lambda: self.showFullScreen())
        windowMenu.addAction("Center", lambda: self.center())
        windowMenu.addAction("Top-Left", lambda: self.move(0, 0))
        windowMenu.addAction("To Mouse", lambda: self.move_to_mouse_position())
        # widgets
        group0 = QGroupBox("Voice Deformation")
        self.setCentralWidget(group0)
        self.process = QProcess(self)
        self.process.error.connect(
            lambda: self.statusBar().showMessage("Info: Process Killed", 5000))
        self.control = QDial()
        self.control.setRange(-10, 20)
        self.control.setSingleStep(5)
        self.control.setValue(0)
        self.control.setCursor(QCursor(Qt.OpenHandCursor))
        self.control.sliderPressed.connect(
            lambda: self.control.setCursor(QCursor(Qt.ClosedHandCursor)))
        self.control.sliderReleased.connect(
            lambda: self.control.setCursor(QCursor(Qt.OpenHandCursor)))
        self.control.valueChanged.connect(
            lambda: self.control.setToolTip(f"<b>{self.control.value()}"))
        self.control.valueChanged.connect(lambda: self.statusBar().showMessage(
            f"Voice deformation: {self.control.value()}", 5000))
        self.control.valueChanged.connect(self.run)
        self.control.valueChanged.connect(lambda: self.process.kill())
        # Graphic effect
        self.glow = QGraphicsDropShadowEffect(self)
        self.glow.setOffset(0)
        self.glow.setBlurRadius(99)
        self.glow.setColor(QColor(99, 255, 255))
        self.control.setGraphicsEffect(self.glow)
        self.glow.setEnabled(False)
        # Timer to start
        self.slider_timer = QTimer(self)
        self.slider_timer.setSingleShot(True)
        self.slider_timer.timeout.connect(self.on_slider_timer_timeout)
        # an icon and set focus
        QLabel(self.control).setPixmap(
            QIcon.fromTheme("audio-input-microphone").pixmap(32))
        self.control.setFocus()
        QVBoxLayout(group0).addWidget(self.control)
        self.menu = QMenu(__doc__)
        self.menu.addAction(__doc__).setDisabled(True)
        self.menu.setIcon(self.windowIcon())
        self.menu.addSeparator()
        self.menu.addAction(
            "Show / Hide", lambda: self.hide()
            if self.isVisible() else self.showNormal())
        self.menu.addAction("STOP !", lambda: call('killall rec', shell=True))
        self.menu.addSeparator()
        self.menu.addAction("Quit", lambda: exit())
        self.tray.setContextMenu(self.menu)
        self.make_trayicon()

    def run(self):
        """Run/Stop the QTimer."""
        if self.slider_timer.isActive():
            self.slider_timer.stop()
        self.glow.setEnabled(True)
        call('killall rec ; killall play', shell=True)
        self.slider_timer.start(3000)

    def on_slider_timer_timeout(self):
        """Run subprocess to deform voice."""
        self.glow.setEnabled(False)
        value = int(self.control.value()) * 100
        command = f'play -q -V0 "|rec -q -V0 -n -d -R riaa bend pitch {value} "'
        print(f"Voice Deformation Value: {value}")
        print(f"Voice Deformation Command: {command}")
        self.process.start(command)
        if self.isVisible():
            self.statusBar().showMessage("Minimizing to System TrayIcon", 3000)
            print("Minimizing Main Window to System TrayIcon now...")
            sleep(3)
            self.hide()

    def center(self):
        """Center Window on the Current Screen,with Multi-Monitor support."""
        window_geometry = self.frameGeometry()
        mousepointer_position = QApplication.desktop().cursor().pos()
        screen = QApplication.desktop().screenNumber(mousepointer_position)
        centerPoint = QApplication.desktop().screenGeometry(screen).center()
        window_geometry.moveCenter(centerPoint)
        self.move(window_geometry.topLeft())

    def move_to_mouse_position(self):
        """Center the Window on the Current Mouse position."""
        window_geometry = self.frameGeometry()
        window_geometry.moveCenter(QApplication.desktop().cursor().pos())
        self.move(window_geometry.topLeft())

    def make_trayicon(self):
        """Make a Tray Icon."""
        if self.windowIcon() and __doc__:
            self.tray.setIcon(self.windowIcon())
            self.tray.setToolTip(__doc__)
            self.tray.activated.connect(
                lambda: self.hide() if self.isVisible() else self.showNormal())
            return self.tray.show()
Exemple #14
0
class Window(QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        self.iconGroupBox = QGroupBox()
        self.iconLabel = QLabel()
        self.iconComboBox = QComboBox()
        self.showIconCheckBox = QCheckBox()

        self.messageGroupBox = QGroupBox()
        self.typeLabel = QLabel()
        self.durationLabel = QLabel()
        self.durationWarningLabel = QLabel()
        self.titleLabel = QLabel()
        self.bodyLabel = QLabel()

        self.typeComboBox = QComboBox()
        self.durationSpinBox = QSpinBox()
        self.titleEdit = QLineEdit()
        self.bodyEdit = QTextEdit()
        self.showMessageButton = QPushButton()

        self.minimizeAction = QAction()
        self.maximizeAction = QAction()
        self.restoreAction = QAction()
        self.quitAction = QAction()

        self.trayIcon = QSystemTrayIcon()
        self.trayIconMenu = QMenu()

        self.createIconGroupBox()
        self.createMessageGroupBox()

        self.iconLabel.setMinimumWidth(self.durationLabel.sizeHint().width())

        self.createActions()
        self.createTrayIcon()

        self.showMessageButton.clicked.connect(self.showMessage)
        self.showIconCheckBox.toggled.connect(self.trayIcon.setVisible)
        self.iconComboBox.currentIndexChanged.connect(self.setIcon)
        self.trayIcon.messageClicked.connect(self.messageClicked)
        self.trayIcon.activated.connect(self.iconActivated)

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.iconGroupBox)
        self.mainLayout.addWidget(self.messageGroupBox)
        self.setLayout(self.mainLayout)

        self.iconComboBox.setCurrentIndex(1)
        self.trayIcon.show()

        self.setWindowTitle("Systray")
        self.resize(400, 300)

    def setVisible(self, visible):
        self.minimizeAction.setEnabled(visible)
        self.maximizeAction.setEnabled(not self.isMaximized())
        self.restoreAction.setEnabled(self.isMaximized() or not visible)
        super().setVisible(visible)

    def closeEvent(self, event):
        if not event.spontaneous() or not self.isVisible():
            return
        if self.trayIcon.isVisible():
            QMessageBox.information(
                self, "Systray",
                "The program will keep running in the system tray. "
                "To terminate the program, choose <b>Quit</b> in the context "
                "menu of the system tray entry.")
            self.hide()
            event.ignore()

    @Slot(int)
    def setIcon(self, index):
        icon = self.iconComboBox.itemIcon(index)
        self.trayIcon.setIcon(icon)
        self.setWindowIcon(icon)
        self.trayIcon.setToolTip(self.iconComboBox.itemText(index))

    @Slot(str)
    def iconActivated(self, reason):
        if reason == QSystemTrayIcon.Trigger:
            pass
        if reason == QSystemTrayIcon.DoubleClick:
            self.iconComboBox.setCurrentIndex(
                (self.iconComboBox.currentIndex() + 1) %
                self.iconComboBox.count())
        if reason == QSystemTrayIcon.MiddleClick:
            self.showMessage()

    @Slot()
    def showMessage(self):
        self.showIconCheckBox.setChecked(True)
        selectedIcon = self.typeComboBox.itemData(
            self.typeComboBox.currentIndex())
        msgIcon = QSystemTrayIcon.MessageIcon(selectedIcon)

        if selectedIcon == -1:  # custom icon
            icon = QIcon(
                self.iconComboBox.itemIcon(self.iconComboBox.currentIndex()))
            self.trayIcon.showMessage(
                self.titleEdit.text(),
                self.bodyEdit.toPlainText(),
                icon,
                self.durationSpinBox.value() * 1000,
            )
        else:
            self.trayIcon.showMessage(
                self.titleEdit.text(),
                self.bodyEdit.toPlainText(),
                msgIcon,
                self.durationSpinBox.value() * 1000,
            )

    @Slot()
    def messageClicked(self):
        QMessageBox.information(
            None, "Systray", "Sorry, I already gave what help I could.\n"
            "Maybe you should try asking a human?")

    def createIconGroupBox(self):
        self.iconGroupBox = QGroupBox("Tray Icon")

        self.iconLabel = QLabel("Icon:")

        self.iconComboBox = QComboBox()
        self.iconComboBox.addItem(QIcon(":/images/bad.png"), "Bad")
        self.iconComboBox.addItem(QIcon(":/images/heart.png"), "Heart")
        self.iconComboBox.addItem(QIcon(":/images/trash.png"), "Trash")

        self.showIconCheckBox = QCheckBox("Show icon")
        self.showIconCheckBox.setChecked(True)

        iconLayout = QHBoxLayout()
        iconLayout.addWidget(self.iconLabel)
        iconLayout.addWidget(self.iconComboBox)
        iconLayout.addStretch()
        iconLayout.addWidget(self.showIconCheckBox)
        self.iconGroupBox.setLayout(iconLayout)

    def createMessageGroupBox(self):
        self.messageGroupBox = QGroupBox("Balloon Message")

        self.typeLabel = QLabel("Type:")

        self.typeComboBox = QComboBox()
        self.typeComboBox.addItem("None", QSystemTrayIcon.NoIcon)
        self.typeComboBox.addItem(
            self.style().standardIcon(QStyle.SP_MessageBoxInformation),
            "Information",
            QSystemTrayIcon.Information,
        )
        self.typeComboBox.addItem(
            self.style().standardIcon(QStyle.SP_MessageBoxWarning),
            "Warning",
            QSystemTrayIcon.Warning,
        )
        self.typeComboBox.addItem(
            self.style().standardIcon(QStyle.SP_MessageBoxCritical),
            "Critical",
            QSystemTrayIcon.Critical,
        )
        self.typeComboBox.addItem(QIcon(), "Custom icon", -1)
        self.typeComboBox.setCurrentIndex(1)

        self.durationLabel = QLabel("Duration:")

        self.durationSpinBox = QSpinBox()
        self.durationSpinBox.setRange(5, 60)
        self.durationSpinBox.setSuffix(" s")
        self.durationSpinBox.setValue(15)

        self.durationWarningLabel = QLabel(
            "(some systems might ignore this hint)")
        self.durationWarningLabel.setIndent(10)

        self.titleLabel = QLabel("Title:")
        self.titleEdit = QLineEdit("Cannot connect to network")
        self.bodyLabel = QLabel("Body:")

        self.bodyEdit = QTextEdit()
        self.bodyEdit.setPlainText(
            "Don't believe me. Honestly, I don't have a clue."
            "\nClick this balloon for details.")

        self.showMessageButton = QPushButton("Show Message")
        self.showMessageButton.setDefault(True)

        messageLayout = QGridLayout()
        messageLayout.addWidget(self.typeLabel, 0, 0)
        messageLayout.addWidget(self.typeComboBox, 0, 1, 1, 2)
        messageLayout.addWidget(self.durationLabel, 1, 0)
        messageLayout.addWidget(self.durationSpinBox, 1, 1)
        messageLayout.addWidget(self.durationWarningLabel, 1, 2, 1, 3)
        messageLayout.addWidget(self.titleLabel, 2, 0)
        messageLayout.addWidget(self.titleEdit, 2, 1, 1, 4)
        messageLayout.addWidget(self.bodyLabel, 3, 0)
        messageLayout.addWidget(self.bodyEdit, 3, 1, 2, 4)
        messageLayout.addWidget(self.showMessageButton, 5, 4)
        messageLayout.setColumnStretch(3, 1)
        messageLayout.setRowStretch(4, 1)
        self.messageGroupBox.setLayout(messageLayout)

    def createActions(self):
        self.minimizeAction = QAction("Minimize", self)
        self.minimizeAction.triggered.connect(self.hide)

        self.maximizeAction = QAction("Maximize", self)
        self.maximizeAction.triggered.connect(self.showMaximized)

        self.restoreAction = QAction("Restore", self)
        self.restoreAction.triggered.connect(self.showNormal)

        self.quitAction = QAction("Quit", self)
        self.quitAction.triggered.connect(qApp.quit)

    def createTrayIcon(self):
        self.trayIconMenu = QMenu(self)
        self.trayIconMenu.addAction(self.minimizeAction)
        self.trayIconMenu.addAction(self.maximizeAction)
        self.trayIconMenu.addAction(self.restoreAction)
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(self.quitAction)

        self.trayIcon = QSystemTrayIcon(self)
        self.trayIcon.setContextMenu(self.trayIconMenu)
Exemple #15
0
class Ui_JAL_MainWindow(object):
    def setupUi(self, JAL_MainWindow):
        if not JAL_MainWindow.objectName():
            JAL_MainWindow.setObjectName(u"JAL_MainWindow")
        JAL_MainWindow.resize(835, 436)
        JAL_MainWindow.setMinimumSize(QSize(0, 0))
        self.actionExit = QAction(JAL_MainWindow)
        self.actionExit.setObjectName(u"actionExit")
        self.actionExit.setMenuRole(QAction.QuitRole)
        self.action_Re_build_Ledger = QAction(JAL_MainWindow)
        self.action_Re_build_Ledger.setObjectName(u"action_Re_build_Ledger")
        self.action_LoadQuotes = QAction(JAL_MainWindow)
        self.action_LoadQuotes.setObjectName(u"action_LoadQuotes")
        self.actionImportStatement = QAction(JAL_MainWindow)
        self.actionImportStatement.setObjectName(u"actionImportStatement")
        self.actionAccountTypes = QAction(JAL_MainWindow)
        self.actionAccountTypes.setObjectName(u"actionAccountTypes")
        self.actionAccounts = QAction(JAL_MainWindow)
        self.actionAccounts.setObjectName(u"actionAccounts")
        self.actionAssets = QAction(JAL_MainWindow)
        self.actionAssets.setObjectName(u"actionAssets")
        self.actionPeers = QAction(JAL_MainWindow)
        self.actionPeers.setObjectName(u"actionPeers")
        self.actionCategories = QAction(JAL_MainWindow)
        self.actionCategories.setObjectName(u"actionCategories")
        self.actionBackup = QAction(JAL_MainWindow)
        self.actionBackup.setObjectName(u"actionBackup")
        self.actionRestore = QAction(JAL_MainWindow)
        self.actionRestore.setObjectName(u"actionRestore")
        self.PrepareTaxForms = QAction(JAL_MainWindow)
        self.PrepareTaxForms.setObjectName(u"PrepareTaxForms")
        self.MakeDealsReport = QAction(JAL_MainWindow)
        self.MakeDealsReport.setObjectName(u"MakeDealsReport")
        self.actionTags = QAction(JAL_MainWindow)
        self.actionTags.setObjectName(u"actionTags")
        self.MakePLReport = QAction(JAL_MainWindow)
        self.MakePLReport.setObjectName(u"MakePLReport")
        self.MakeCategoriesReport = QAction(JAL_MainWindow)
        self.MakeCategoriesReport.setObjectName(u"MakeCategoriesReport")
        self.actionImportSlipRU = QAction(JAL_MainWindow)
        self.actionImportSlipRU.setObjectName(u"actionImportSlipRU")
        self.actionCountries = QAction(JAL_MainWindow)
        self.actionCountries.setObjectName(u"actionCountries")
        self.actionQuotes = QAction(JAL_MainWindow)
        self.actionQuotes.setObjectName(u"actionQuotes")
        self.actionOperations = QAction(JAL_MainWindow)
        self.actionOperations.setObjectName(u"actionOperations")
        self.centralwidget = QWidget(JAL_MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.centralwidget.setMaximumSize(QSize(16777215, 16777215))
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.splitter = QSplitter(self.centralwidget)
        self.splitter.setObjectName(u"splitter")
        self.splitter.setOrientation(Qt.Vertical)
        self.mdiArea = TabbedMdiArea(self.splitter)
        self.mdiArea.setObjectName(u"mdiArea")
        self.splitter.addWidget(self.mdiArea)
        self.Logs = LogViewer(self.splitter)
        self.Logs.setObjectName(u"Logs")
        self.splitter.addWidget(self.Logs)

        self.verticalLayout.addWidget(self.splitter)

        JAL_MainWindow.setCentralWidget(self.centralwidget)
        self.MainMenu = QMenuBar(JAL_MainWindow)
        self.MainMenu.setObjectName(u"MainMenu")
        self.MainMenu.setGeometry(QRect(0, 0, 835, 23))
        self.menuMain = QMenu(self.MainMenu)
        self.menuMain.setObjectName(u"menuMain")
        self.menu_Data = QMenu(self.MainMenu)
        self.menu_Data.setObjectName(u"menu_Data")
        self.menuPredefined_data = QMenu(self.menu_Data)
        self.menuPredefined_data.setObjectName(u"menuPredefined_data")
        self.menu_Export = QMenu(self.MainMenu)
        self.menu_Export.setObjectName(u"menu_Export")
        self.menuLanguage = QMenu(self.MainMenu)
        self.menuLanguage.setObjectName(u"menuLanguage")
        self.menuImport = QMenu(self.MainMenu)
        self.menuImport.setObjectName(u"menuImport")
        self.menuStatement = QMenu(self.menuImport)
        self.menuStatement.setObjectName(u"menuStatement")
        self.menuReports = QMenu(self.MainMenu)
        self.menuReports.setObjectName(u"menuReports")
        JAL_MainWindow.setMenuBar(self.MainMenu)
        self.StatusBar = QStatusBar(JAL_MainWindow)
        self.StatusBar.setObjectName(u"StatusBar")
        JAL_MainWindow.setStatusBar(self.StatusBar)

        self.MainMenu.addAction(self.menuMain.menuAction())
        self.MainMenu.addAction(self.menu_Data.menuAction())
        self.MainMenu.addAction(self.menuReports.menuAction())
        self.MainMenu.addAction(self.menuImport.menuAction())
        self.MainMenu.addAction(self.menu_Export.menuAction())
        self.MainMenu.addAction(self.menuLanguage.menuAction())
        self.menuMain.addAction(self.actionOperations)
        self.menuMain.addAction(self.actionExit)
        self.menu_Data.addSeparator()
        self.menu_Data.addAction(self.actionAccounts)
        self.menu_Data.addAction(self.actionAssets)
        self.menu_Data.addAction(self.actionPeers)
        self.menu_Data.addAction(self.actionCategories)
        self.menu_Data.addAction(self.actionTags)
        self.menu_Data.addAction(self.actionCountries)
        self.menu_Data.addAction(self.actionQuotes)
        self.menu_Data.addAction(self.menuPredefined_data.menuAction())
        self.menu_Data.addSeparator()
        self.menu_Data.addAction(self.actionBackup)
        self.menu_Data.addAction(self.actionRestore)
        self.menu_Data.addSeparator()
        self.menu_Data.addAction(self.action_Re_build_Ledger)
        self.menuPredefined_data.addAction(self.actionAccountTypes)
        self.menu_Export.addAction(self.PrepareTaxForms)
        self.menuImport.addAction(self.action_LoadQuotes)
        self.menuImport.addAction(self.menuStatement.menuAction())
        self.menuImport.addAction(self.actionImportSlipRU)

        self.retranslateUi(JAL_MainWindow)

        QMetaObject.connectSlotsByName(JAL_MainWindow)

    # setupUi

    def retranslateUi(self, JAL_MainWindow):
        JAL_MainWindow.setWindowTitle(
            QCoreApplication.translate("JAL_MainWindow", u"jal", None))
        self.actionExit.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Exit", None))
        self.action_Re_build_Ledger.setText(
            QCoreApplication.translate("JAL_MainWindow",
                                       u"Re-build &Ledger...", None))
        self.action_LoadQuotes.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Quotes...", None))
        self.actionImportStatement.setText(
            QCoreApplication.translate("JAL_MainWindow",
                                       u"&Broker statement...", None))
        self.actionAccountTypes.setText(
            QCoreApplication.translate("JAL_MainWindow", u"Account &Types",
                                       None))
        self.actionAccounts.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Accounts", None))
        self.actionAssets.setText(
            QCoreApplication.translate("JAL_MainWindow", u"A&ssets", None))
        self.actionPeers.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Peers", None))
        self.actionCategories.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Categories", None))
        self.actionBackup.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Backup...", None))
        self.actionRestore.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Restore...", None))
        self.PrepareTaxForms.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Tax report [RU]",
                                       None))
        self.MakeDealsReport.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Deals report",
                                       None))
        self.actionTags.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Tags", None))
        self.MakePLReport.setText(
            QCoreApplication.translate("JAL_MainWindow",
                                       u"&Profit/Loss report", None))
        self.MakeCategoriesReport.setText(
            QCoreApplication.translate("JAL_MainWindow",
                                       u"&Income/Spending report", None))
        self.actionImportSlipRU.setText(
            QCoreApplication.translate("JAL_MainWindow", u"Slip [RU]...",
                                       None))
        self.actionCountries.setText(
            QCoreApplication.translate("JAL_MainWindow", u"C&ountries", None))
        self.actionQuotes.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Quotes", None))
        self.actionOperations.setText(
            QCoreApplication.translate("JAL_MainWindow", u"&Operations", None))
        self.menuMain.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Main", None))
        self.menu_Data.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Data", None))
        self.menuPredefined_data.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"Predefined data",
                                       None))
        self.menu_Export.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Export", None))
        self.menuLanguage.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"L&anguage", None))
        self.menuImport.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Import", None))
        self.menuStatement.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Statement", None))
        self.menuReports.setTitle(
            QCoreApplication.translate("JAL_MainWindow", u"&Reports", None))
Exemple #16
0
class Ui_IscApp(object):
    def setupUi(self, IscApp):
        if not IscApp.objectName():
            IscApp.setObjectName(u"IscApp")
        IscApp.resize(1440, 923)
        IscApp.setCursor(QCursor(Qt.ArrowCursor))
        IscApp.setMouseTracking(True)
        self.actionUndo = QAction(IscApp)
        self.actionUndo.setObjectName(u"actionUndo")
        self.actionRedo = QAction(IscApp)
        self.actionRedo.setObjectName(u"actionRedo")
        self.actionView_statusbar = QAction(IscApp)
        self.actionView_statusbar.setObjectName(u"actionView_statusbar")
        self.actionView_statusbar.setCheckable(True)
        self.actionView_statusbar.setChecked(True)
        self.actionView_step_preview = QAction(IscApp)
        self.actionView_step_preview.setObjectName(u"actionView_step_preview")
        self.actionView_step_preview.setCheckable(True)
        self.actionView_step_preview.setChecked(True)
        self.actionInsert = QAction(IscApp)
        self.actionInsert.setObjectName(u"actionInsert")
        self.actionShell_Image = QAction(IscApp)
        self.actionShell_Image.setObjectName(u"actionShell_Image")
        self.actionSection_steps = QAction(IscApp)
        self.actionSection_steps.setObjectName(u"actionSection_steps")
        self.actionAttach_audio = QAction(IscApp)
        self.actionAttach_audio.setObjectName(u"actionAttach_audio")
        self.actionBulk_crop = QAction(IscApp)
        self.actionBulk_crop.setObjectName(u"actionBulk_crop")
        self.actionView_demo_in_folder = QAction(IscApp)
        self.actionView_demo_in_folder.setObjectName(u"actionView_demo_in_folder")
        self.actionLoad_tool_state = QAction(IscApp)
        self.actionLoad_tool_state.setObjectName(u"actionLoad_tool_state")
        self.actionSave_tool_state = QAction(IscApp)
        self.actionSave_tool_state.setObjectName(u"actionSave_tool_state")
        self.actionOpen_DemoMate = QAction(IscApp)
        self.actionOpen_DemoMate.setObjectName(u"actionOpen_DemoMate")
        self.actionOpen_Cloudguides_Packaging = QAction(IscApp)
        self.actionOpen_Cloudguides_Packaging.setObjectName(u"actionOpen_Cloudguides_Packaging")
        self.actionAbout = QAction(IscApp)
        self.actionAbout.setObjectName(u"actionAbout")
        self.actionHelp_2 = QAction(IscApp)
        self.actionHelp_2.setObjectName(u"actionHelp_2")
        self.actionImage_Insert = QAction(IscApp)
        self.actionImage_Insert.setObjectName(u"actionImage_Insert")
        self.actionImage_Shelling = QAction(IscApp)
        self.actionImage_Shelling.setObjectName(u"actionImage_Shelling")
        self.actionHelp_3 = QAction(IscApp)
        self.actionHelp_3.setObjectName(u"actionHelp_3")
        self.actionBulk_insert_image = QAction(IscApp)
        self.actionBulk_insert_image.setObjectName(u"actionBulk_insert_image")
        self.actionBulk_shell_steps = QAction(IscApp)
        self.actionBulk_shell_steps.setObjectName(u"actionBulk_shell_steps")
        self.actionBulk_crop_step_assets = QAction(IscApp)
        self.actionBulk_crop_step_assets.setObjectName(u"actionBulk_crop_step_assets")
        self.actionAttach_audio_to_demo = QAction(IscApp)
        self.actionAttach_audio_to_demo.setObjectName(u"actionAttach_audio_to_demo")
        self.actionClose = QAction(IscApp)
        self.actionClose.setObjectName(u"actionClose")
        self.actionClose_2 = QAction(IscApp)
        self.actionClose_2.setObjectName(u"actionClose_2")
        self.actionFrom_demo_file = QAction(IscApp)
        self.actionFrom_demo_file.setObjectName(u"actionFrom_demo_file")
        self.actionFrom_exe_installer = QAction(IscApp)
        self.actionFrom_exe_installer.setObjectName(u"actionFrom_exe_installer")
        self.actionFrom_docx_file = QAction(IscApp)
        self.actionFrom_docx_file.setObjectName(u"actionFrom_docx_file")
        self.actionFrom_scripts_folder = QAction(IscApp)
        self.actionFrom_scripts_folder.setObjectName(u"actionFrom_scripts_folder")
        self.actionOverwrite = QAction(IscApp)
        self.actionOverwrite.setObjectName(u"actionOverwrite")
        self.actionMerge_demos = QAction(IscApp)
        self.actionMerge_demos.setObjectName(u"actionMerge_demos")
        self.actionLoad_audio_directory = QAction(IscApp)
        self.actionLoad_audio_directory.setObjectName(u"actionLoad_audio_directory")
        self.actionLoad_soundbite = QAction(IscApp)
        self.actionLoad_soundbite.setObjectName(u"actionLoad_soundbite")
        self.actionEdit_audio = QAction(IscApp)
        self.actionEdit_audio.setObjectName(u"actionEdit_audio")
        self.actionAttach_audio_to_demo_2 = QAction(IscApp)
        self.actionAttach_audio_to_demo_2.setObjectName(u"actionAttach_audio_to_demo_2")
        self.actionBulk_edit_demo_audio = QAction(IscApp)
        self.actionBulk_edit_demo_audio.setObjectName(u"actionBulk_edit_demo_audio")
        self.actionEdit_step_audio = QAction(IscApp)
        self.actionEdit_step_audio.setObjectName(u"actionEdit_step_audio")
        self.actionBulk_paste_image = QAction(IscApp)
        self.actionBulk_paste_image.setObjectName(u"actionBulk_paste_image")
        self.actionBulk_image_paste_wizard = QAction(IscApp)
        self.actionBulk_image_paste_wizard.setObjectName(u"actionBulk_image_paste_wizard")
        self.actionBulk_shell_demo_assets = QAction(IscApp)
        self.actionBulk_shell_demo_assets.setObjectName(u"actionBulk_shell_demo_assets")
        self.actionSection_demo = QAction(IscApp)
        self.actionSection_demo.setObjectName(u"actionSection_demo")
        self.actionBulk_resize_demo_assets = QAction(IscApp)
        self.actionBulk_resize_demo_assets.setObjectName(u"actionBulk_resize_demo_assets")
        self.actionBulk_crop_demo_assets = QAction(IscApp)
        self.actionBulk_crop_demo_assets.setObjectName(u"actionBulk_crop_demo_assets")
        self.actionPacing_wizard = QAction(IscApp)
        self.actionPacing_wizard.setObjectName(u"actionPacing_wizard")
        self.actionCompose_demos = QAction(IscApp)
        self.actionCompose_demos.setObjectName(u"actionCompose_demos")
        self.actionBulk_edit_demo_metadata = QAction(IscApp)
        self.actionBulk_edit_demo_metadata.setObjectName(u"actionBulk_edit_demo_metadata")
        self.actionLoad_script = QAction(IscApp)
        self.actionLoad_script.setObjectName(u"actionLoad_script")
        self.actionConvert_script = QAction(IscApp)
        self.actionConvert_script.setObjectName(u"actionConvert_script")
        self.actionSpelling_errors = QAction(IscApp)
        self.actionSpelling_errors.setObjectName(u"actionSpelling_errors")
        self.actionGrammar_errors = QAction(IscApp)
        self.actionGrammar_errors.setObjectName(u"actionGrammar_errors")
        self.actionProduction_notes = QAction(IscApp)
        self.actionProduction_notes.setObjectName(u"actionProduction_notes")
        self.actionTalking_points = QAction(IscApp)
        self.actionTalking_points.setObjectName(u"actionTalking_points")
        self.actionClick_instructions = QAction(IscApp)
        self.actionClick_instructions.setObjectName(u"actionClick_instructions")
        self.actionPackage_demo = QAction(IscApp)
        self.actionPackage_demo.setObjectName(u"actionPackage_demo")
        self.actionSingle_image = QAction(IscApp)
        self.actionSingle_image.setObjectName(u"actionSingle_image")
        self.actionMultiple_images = QAction(IscApp)
        self.actionMultiple_images.setObjectName(u"actionMultiple_images")
        self.actionImage_insert_wizar = QAction(IscApp)
        self.actionImage_insert_wizar.setObjectName(u"actionImage_insert_wizar")
        self.actionAdd_background_image = QAction(IscApp)
        self.actionAdd_background_image.setObjectName(u"actionAdd_background_image")
        self.actionAdd_background_and_wrapper = QAction(IscApp)
        self.actionAdd_background_and_wrapper.setObjectName(u"actionAdd_background_and_wrapper")
        self.actionShell_wizard = QAction(IscApp)
        self.actionShell_wizard.setObjectName(u"actionShell_wizard")
        self.actionCrop = QAction(IscApp)
        self.actionCrop.setObjectName(u"actionCrop")
        self.actionResize = QAction(IscApp)
        self.actionResize.setObjectName(u"actionResize")
        self.actionLoad_operation = QAction(IscApp)
        self.actionLoad_operation.setObjectName(u"actionLoad_operation")
        self.actionSave_operation = QAction(IscApp)
        self.actionSave_operation.setObjectName(u"actionSave_operation")
        self.actionClose_3 = QAction(IscApp)
        self.actionClose_3.setObjectName(u"actionClose_3")
        self.actionZoom_in = QAction(IscApp)
        self.actionZoom_in.setObjectName(u"actionZoom_in")
        self.actionAdd_scroll_section = QAction(IscApp)
        self.actionAdd_scroll_section.setObjectName(u"actionAdd_scroll_section")
        self.actionOpen_assets_folder = QAction(IscApp)
        self.actionOpen_assets_folder.setObjectName(u"actionOpen_assets_folder")
        self.actionUpload_to_CloudGuides = QAction(IscApp)
        self.actionUpload_to_CloudGuides.setObjectName(u"actionUpload_to_CloudGuides")
        self.actionSections = QAction(IscApp)
        self.actionSections.setObjectName(u"actionSections")
        self.actionsteps = QAction(IscApp)
        self.actionsteps.setObjectName(u"actionsteps")
        self.actionSection = QAction(IscApp)
        self.actionSection.setObjectName(u"actionSection")
        self.actionSteps_in_section = QAction(IscApp)
        self.actionSteps_in_section.setObjectName(u"actionSteps_in_section")
        self.actionFirst_step_in_section = QAction(IscApp)
        self.actionFirst_step_in_section.setObjectName(u"actionFirst_step_in_section")
        self.actionSet_section_as_animated = QAction(IscApp)
        self.actionSet_section_as_animated.setObjectName(u"actionSet_section_as_animated")
        self.actionSet_section_as_guided = QAction(IscApp)
        self.actionSet_section_as_guided.setObjectName(u"actionSet_section_as_guided")
        self.actionDelete = QAction(IscApp)
        self.actionDelete.setObjectName(u"actionDelete")
        self.actionDuplicate = QAction(IscApp)
        self.actionDuplicate.setObjectName(u"actionDuplicate")
        self.actionDuplicate_as_pacing = QAction(IscApp)
        self.actionDuplicate_as_pacing.setObjectName(u"actionDuplicate_as_pacing")
        self.actionMove = QAction(IscApp)
        self.actionMove.setObjectName(u"actionMove")
        self.actionMove_2 = QAction(IscApp)
        self.actionMove_2.setObjectName(u"actionMove_2")
        self.actionSet_as_animated = QAction(IscApp)
        self.actionSet_as_animated.setObjectName(u"actionSet_as_animated")
        self.actionSet_as_guided = QAction(IscApp)
        self.actionSet_as_guided.setObjectName(u"actionSet_as_guided")
        self.actionSet_as_scroll = QAction(IscApp)
        self.actionSet_as_scroll.setObjectName(u"actionSet_as_scroll")
        self.actionDecrement_step_delay = QAction(IscApp)
        self.actionDecrement_step_delay.setObjectName(u"actionDecrement_step_delay")
        self.actionIncrement_step_delay = QAction(IscApp)
        self.actionIncrement_step_delay.setObjectName(u"actionIncrement_step_delay")
        self.actionAdd_audio_2 = QAction(IscApp)
        self.actionAdd_audio_2.setObjectName(u"actionAdd_audio_2")
        self.actionDelete_audio = QAction(IscApp)
        self.actionDelete_audio.setObjectName(u"actionDelete_audio")
        self.actionEdit_audio_2 = QAction(IscApp)
        self.actionEdit_audio_2.setObjectName(u"actionEdit_audio_2")
        self.actionReplace_audio = QAction(IscApp)
        self.actionReplace_audio.setObjectName(u"actionReplace_audio")
        self.actionView_metadata = QAction(IscApp)
        self.actionView_metadata.setObjectName(u"actionView_metadata")
        self.actionAdd_audio_3 = QAction(IscApp)
        self.actionAdd_audio_3.setObjectName(u"actionAdd_audio_3")
        self.actionDelete_audio_2 = QAction(IscApp)
        self.actionDelete_audio_2.setObjectName(u"actionDelete_audio_2")
        self.actionReplace_audio_2 = QAction(IscApp)
        self.actionReplace_audio_2.setObjectName(u"actionReplace_audio_2")
        self.actionEdit_audio_3 = QAction(IscApp)
        self.actionEdit_audio_3.setObjectName(u"actionEdit_audio_3")
        self.actionIncrement_step_delay_2 = QAction(IscApp)
        self.actionIncrement_step_delay_2.setObjectName(u"actionIncrement_step_delay_2")
        self.actionDecrement_step_delay_2 = QAction(IscApp)
        self.actionDecrement_step_delay_2.setObjectName(u"actionDecrement_step_delay_2")
        self.actionPreview = QAction(IscApp)
        self.actionPreview.setObjectName(u"actionPreview")
        self.actionView_in_folder = QAction(IscApp)
        self.actionView_in_folder.setObjectName(u"actionView_in_folder")
        self.actionEdit = QAction(IscApp)
        self.actionEdit.setObjectName(u"actionEdit")
        self.actionReplace_image = QAction(IscApp)
        self.actionReplace_image.setObjectName(u"actionReplace_image")
        self.actionView_metadata_2 = QAction(IscApp)
        self.actionView_metadata_2.setObjectName(u"actionView_metadata_2")
        self.actionLoad_SoundBite = QAction(IscApp)
        self.actionLoad_SoundBite.setObjectName(u"actionLoad_SoundBite")
        self.actionFrom_recording = QAction(IscApp)
        self.actionFrom_recording.setObjectName(u"actionFrom_recording")
        self.actionAs_new_version = QAction(IscApp)
        self.actionAs_new_version.setObjectName(u"actionAs_new_version")
        self.actionAs_new_round = QAction(IscApp)
        self.actionAs_new_round.setObjectName(u"actionAs_new_round")
        self.actionExport_to_installer = QAction(IscApp)
        self.actionExport_to_installer.setObjectName(u"actionExport_to_installer")
        self.actionExport_to_Cloudguide = QAction(IscApp)
        self.actionExport_to_Cloudguide.setObjectName(u"actionExport_to_Cloudguide")
        self.actionTo_installer = QAction(IscApp)
        self.actionTo_installer.setObjectName(u"actionTo_installer")
        self.actionTo_Cloudguide = QAction(IscApp)
        self.actionTo_Cloudguide.setObjectName(u"actionTo_Cloudguide")
        self.actionOverwrite_2 = QAction(IscApp)
        self.actionOverwrite_2.setObjectName(u"actionOverwrite_2")
        self.actionAs_new_version_2 = QAction(IscApp)
        self.actionAs_new_version_2.setObjectName(u"actionAs_new_version_2")
        self.actionAs_new_round_2 = QAction(IscApp)
        self.actionAs_new_round_2.setObjectName(u"actionAs_new_round_2")
        self.actionAs_txt = QAction(IscApp)
        self.actionAs_txt.setObjectName(u"actionAs_txt")
        self.actionTo_new_directory = QAction(IscApp)
        self.actionTo_new_directory.setObjectName(u"actionTo_new_directory")
        self.actionOverwrite_3 = QAction(IscApp)
        self.actionOverwrite_3.setObjectName(u"actionOverwrite_3")
        self.actionClose_window = QAction(IscApp)
        self.actionClose_window.setObjectName(u"actionClose_window")
        self.actionReset_demo = QAction(IscApp)
        self.actionReset_demo.setObjectName(u"actionReset_demo")
        self.actionNew = QAction(IscApp)
        self.actionNew.setObjectName(u"actionNew")
        self.actionNew_operation = QAction(IscApp)
        self.actionNew_operation.setObjectName(u"actionNew_operation")
        self.actionAdd_step = QAction(IscApp)
        self.actionAdd_step.setObjectName(u"actionAdd_step")
        self.actionPreferences = QAction(IscApp)
        self.actionPreferences.setObjectName(u"actionPreferences")
        self.actionAdd_text_box = QAction(IscApp)
        self.actionAdd_text_box.setObjectName(u"actionAdd_text_box")
        self.actionAdd_highlight = QAction(IscApp)
        self.actionAdd_highlight.setObjectName(u"actionAdd_highlight")
        self.actionAdd_jump_box = QAction(IscApp)
        self.actionAdd_jump_box.setObjectName(u"actionAdd_jump_box")
        self.actionSet_animated = QAction(IscApp)
        self.actionSet_animated.setObjectName(u"actionSet_animated")
        self.actionSet_guided = QAction(IscApp)
        self.actionSet_guided.setObjectName(u"actionSet_guided")
        self.actionEdit_XML = QAction(IscApp)
        self.actionEdit_XML.setObjectName(u"actionEdit_XML")
        self.actionFrom_capture = QAction(IscApp)
        self.actionFrom_capture.setObjectName(u"actionFrom_capture")
        self.actionCapture_image_edt_macro = QAction(IscApp)
        self.actionCapture_image_edt_macro.setObjectName(u"actionCapture_image_edt_macro")
        self.actionNew_tab = QAction(IscApp)
        self.actionNew_tab.setObjectName(u"actionNew_tab")
        self.actionNew_2 = QAction(IscApp)
        self.actionNew_2.setObjectName(u"actionNew_2")
        self.actionTo_new_version = QAction(IscApp)
        self.actionTo_new_version.setObjectName(u"actionTo_new_version")
        self.actionTo_new_round = QAction(IscApp)
        self.actionTo_new_round.setObjectName(u"actionTo_new_round")
        self.actionSteps = QAction(IscApp)
        self.actionSteps.setObjectName(u"actionSteps")
        self.actionOverwrite_existing = QAction(IscApp)
        self.actionOverwrite_existing.setObjectName(u"actionOverwrite_existing")
        self.actionSave = QAction(IscApp)
        self.actionSave.setObjectName(u"actionSave")
        self.actionDemo = QAction(IscApp)
        self.actionDemo.setObjectName(u"actionDemo")
        self.actionAudio = QAction(IscApp)
        self.actionAudio.setObjectName(u"actionAudio")
        self.actionScript = QAction(IscApp)
        self.actionScript.setObjectName(u"actionScript")
        self.actionView_menubar = QAction(IscApp)
        self.actionView_menubar.setObjectName(u"actionView_menubar")
        self.actionView_menubar.setCheckable(True)
        self.actionView_in_file_explorer = QAction(IscApp)
        self.actionView_in_file_explorer.setObjectName(u"actionView_in_file_explorer")
        self.actionView_menubar_2 = QAction(IscApp)
        self.actionView_menubar_2.setObjectName(u"actionView_menubar_2")
        self.actionView_menubar_2.setCheckable(True)
        self.actionZoom_out = QAction(IscApp)
        self.actionZoom_out.setObjectName(u"actionZoom_out")
        self.actionReset_zoom = QAction(IscApp)
        self.actionReset_zoom.setObjectName(u"actionReset_zoom")
        self.actionNewStep = QAction(IscApp)
        self.actionNewStep.setObjectName(u"actionNewStep")
        self.actionOpenDemo = QAction(IscApp)
        self.actionOpenDemo.setObjectName(u"actionOpenDemo")
        self.menubar = QMenuBar(IscApp)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1440, 22))
        self.menubar.setDefaultUp(False)
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName(u"menuFile")
        self.menuExport_2 = QMenu(self.menuFile)
        self.menuExport_2.setObjectName(u"menuExport_2")
        self.menuNew = QMenu(self.menuFile)
        self.menuNew.setObjectName(u"menuNew")
        self.menuOpen = QMenu(self.menuFile)
        self.menuOpen.setObjectName(u"menuOpen")
        self.menuEdit = QMenu(self.menubar)
        self.menuEdit.setObjectName(u"menuEdit")
        self.menuSelect_all = QMenu(self.menuEdit)
        self.menuSelect_all.setObjectName(u"menuSelect_all")
        self.menuSelect_associated = QMenu(self.menuEdit)
        self.menuSelect_associated.setObjectName(u"menuSelect_associated")
        self.menuView = QMenu(self.menubar)
        self.menuView.setObjectName(u"menuView")
        self.menuView.setTearOffEnabled(False)
        self.menuView.setToolTipsVisible(True)
        self.menuZoom = QMenu(self.menuView)
        self.menuZoom.setObjectName(u"menuZoom")
        self.menuTools = QMenu(self.menubar)
        self.menuTools.setObjectName(u"menuTools")
        self.menuAudio = QMenu(self.menuTools)
        self.menuAudio.setObjectName(u"menuAudio")
        self.menuImage = QMenu(self.menuTools)
        self.menuImage.setObjectName(u"menuImage")
        self.menuInsert = QMenu(self.menuImage)
        self.menuInsert.setObjectName(u"menuInsert")
        self.menuShell = QMenu(self.menuImage)
        self.menuShell.setObjectName(u"menuShell")
        self.menuDemo = QMenu(self.menuTools)
        self.menuDemo.setObjectName(u"menuDemo")
        self.menuScript = QMenu(self.menuTools)
        self.menuScript.setObjectName(u"menuScript")
        self.menuCheck_script_for = QMenu(self.menuScript)
        self.menuCheck_script_for.setObjectName(u"menuCheck_script_for")
        self.menuClear = QMenu(self.menuScript)
        self.menuClear.setObjectName(u"menuClear")
        self.menuWeb = QMenu(self.menuTools)
        self.menuWeb.setObjectName(u"menuWeb")
        self.menuSection = QMenu(self.menuTools)
        self.menuSection.setObjectName(u"menuSection")
        self.menuPacing = QMenu(self.menuSection)
        self.menuPacing.setObjectName(u"menuPacing")
        self.menuAudio_2 = QMenu(self.menuSection)
        self.menuAudio_2.setObjectName(u"menuAudio_2")
        self.menuStep = QMenu(self.menuTools)
        self.menuStep.setObjectName(u"menuStep")
        self.menuAudio_3 = QMenu(self.menuStep)
        self.menuAudio_3.setObjectName(u"menuAudio_3")
        self.menuPacing_2 = QMenu(self.menuStep)
        self.menuPacing_2.setObjectName(u"menuPacing_2")
        self.menuImage_2 = QMenu(self.menuStep)
        self.menuImage_2.setObjectName(u"menuImage_2")
        self.menuWindow = QMenu(self.menubar)
        self.menuWindow.setObjectName(u"menuWindow")
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setObjectName(u"menuHelp")
        self.menuHow_do_I = QMenu(self.menuHelp)
        self.menuHow_do_I.setObjectName(u"menuHow_do_I")
        IscApp.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(IscApp)
        self.statusbar.setObjectName(u"statusbar")
        self.statusbar.setMinimumSize(QSize(0, 30))
        self.statusbar.setSizeGripEnabled(False)
        IscApp.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuTools.menuAction())
        self.menubar.addAction(self.menuWindow.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        self.menuFile.addSeparator()
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.menuNew.menuAction())
        self.menuFile.addAction(self.menuOpen.menuAction())
        self.menuFile.addAction(self.actionSave)
        self.menuFile.addAction(self.menuExport_2.menuAction())
        self.menuExport_2.addAction(self.actionDemo)
        self.menuExport_2.addAction(self.actionAudio)
        self.menuExport_2.addAction(self.actionScript)
        self.menuNew.addAction(self.actionNewStep)
        self.menuOpen.addAction(self.actionOpenDemo)
        self.menuEdit.addAction(self.actionUndo)
        self.menuEdit.addAction(self.actionRedo)
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.menuSelect_all.menuAction())
        self.menuEdit.addSeparator()
        self.menuEdit.addAction(self.menuSelect_associated.menuAction())
        self.menuSelect_all.addAction(self.actionSections)
        self.menuSelect_all.addAction(self.actionsteps)
        self.menuSelect_associated.addAction(self.actionSection)
        self.menuSelect_associated.addAction(self.actionSteps_in_section)
        self.menuSelect_associated.addAction(self.actionFirst_step_in_section)
        self.menuView.addAction(self.actionView_statusbar)
        self.menuView.addAction(self.actionView_step_preview)
        self.menuView.addAction(self.actionView_demo_in_folder)
        self.menuView.addSeparator()
        self.menuView.addAction(self.menuZoom.menuAction())
        self.menuView.addAction(self.actionView_menubar)
        self.menuView.addAction(self.actionView_in_file_explorer)
        self.menuView.addSeparator()
        self.menuView.addAction(self.actionView_menubar_2)
        self.menuZoom.addAction(self.actionZoom_in)
        self.menuZoom.addAction(self.actionZoom_out)
        self.menuZoom.addAction(self.actionReset_zoom)
        self.menuTools.addAction(self.menuAudio.menuAction())
        self.menuTools.addAction(self.menuImage.menuAction())
        self.menuTools.addAction(self.menuDemo.menuAction())
        self.menuTools.addAction(self.menuScript.menuAction())
        self.menuTools.addAction(self.menuWeb.menuAction())
        self.menuTools.addSeparator()
        self.menuTools.addAction(self.menuSection.menuAction())
        self.menuTools.addAction(self.menuStep.menuAction())
        self.menuTools.addSeparator()
        self.menuTools.addAction(self.actionPreferences)
        self.menuAudio.addAction(self.actionAttach_audio_to_demo_2)
        self.menuAudio.addAction(self.actionBulk_edit_demo_audio)
        self.menuAudio.addAction(self.actionEdit_step_audio)
        self.menuImage.addAction(self.actionBulk_paste_image)
        self.menuImage.addAction(self.actionBulk_image_paste_wizard)
        self.menuImage.addAction(self.actionBulk_shell_demo_assets)
        self.menuImage.addAction(self.menuInsert.menuAction())
        self.menuImage.addAction(self.menuShell.menuAction())
        self.menuImage.addAction(self.actionCrop)
        self.menuImage.addAction(self.actionResize)
        self.menuImage.addAction(self.actionCapture_image_edt_macro)
        self.menuInsert.addAction(self.actionSingle_image)
        self.menuInsert.addAction(self.actionMultiple_images)
        self.menuInsert.addAction(self.actionImage_insert_wizar)
        self.menuShell.addAction(self.actionAdd_background_image)
        self.menuShell.addAction(self.actionAdd_background_and_wrapper)
        self.menuShell.addAction(self.actionShell_wizard)
        self.menuDemo.addAction(self.actionSection_demo)
        self.menuDemo.addAction(self.actionPacing_wizard)
        self.menuDemo.addAction(self.actionCompose_demos)
        self.menuDemo.addAction(self.actionBulk_edit_demo_metadata)
        self.menuDemo.addAction(self.actionPackage_demo)
        self.menuDemo.addAction(self.actionAdd_scroll_section)
        self.menuDemo.addAction(self.actionAdd_step)
        self.menuDemo.addAction(self.actionEdit_XML)
        self.menuScript.addAction(self.actionLoad_script)
        self.menuScript.addAction(self.actionConvert_script)
        self.menuScript.addAction(self.menuCheck_script_for.menuAction())
        self.menuScript.addAction(self.menuClear.menuAction())
        self.menuCheck_script_for.addAction(self.actionSpelling_errors)
        self.menuCheck_script_for.addAction(self.actionGrammar_errors)
        self.menuCheck_script_for.addAction(self.actionProduction_notes)
        self.menuClear.addAction(self.actionTalking_points)
        self.menuClear.addAction(self.actionClick_instructions)
        self.menuWeb.addAction(self.actionUpload_to_CloudGuides)
        self.menuSection.addAction(self.actionSet_section_as_animated)
        self.menuSection.addAction(self.actionSet_section_as_guided)
        self.menuSection.addAction(self.actionMove_2)
        self.menuSection.addSeparator()
        self.menuSection.addAction(self.actionSet_as_animated)
        self.menuSection.addAction(self.actionSet_as_guided)
        self.menuSection.addAction(self.actionSet_as_scroll)
        self.menuSection.addSeparator()
        self.menuSection.addAction(self.menuAudio_2.menuAction())
        self.menuSection.addAction(self.menuPacing.menuAction())
        self.menuSection.addSeparator()
        self.menuSection.addAction(self.actionView_metadata)
        self.menuPacing.addAction(self.actionDecrement_step_delay)
        self.menuPacing.addAction(self.actionIncrement_step_delay)
        self.menuAudio_2.addAction(self.actionAdd_audio_2)
        self.menuAudio_2.addAction(self.actionDelete_audio)
        self.menuAudio_2.addAction(self.actionEdit_audio_2)
        self.menuAudio_2.addAction(self.actionReplace_audio)
        self.menuStep.addAction(self.actionDelete)
        self.menuStep.addAction(self.actionDuplicate)
        self.menuStep.addAction(self.actionDuplicate_as_pacing)
        self.menuStep.addAction(self.actionMove)
        self.menuStep.addSeparator()
        self.menuStep.addAction(self.menuAudio_3.menuAction())
        self.menuStep.addAction(self.menuPacing_2.menuAction())
        self.menuStep.addAction(self.menuImage_2.menuAction())
        self.menuStep.addSeparator()
        self.menuStep.addAction(self.actionAdd_text_box)
        self.menuStep.addAction(self.actionAdd_highlight)
        self.menuStep.addAction(self.actionAdd_jump_box)
        self.menuStep.addSeparator()
        self.menuStep.addAction(self.actionSet_animated)
        self.menuStep.addAction(self.actionSet_guided)
        self.menuStep.addAction(self.actionFrom_capture)
        self.menuAudio_3.addAction(self.actionAdd_audio_3)
        self.menuAudio_3.addAction(self.actionDelete_audio_2)
        self.menuAudio_3.addAction(self.actionReplace_audio_2)
        self.menuAudio_3.addAction(self.actionEdit_audio_3)
        self.menuPacing_2.addAction(self.actionIncrement_step_delay_2)
        self.menuPacing_2.addAction(self.actionDecrement_step_delay_2)
        self.menuImage_2.addAction(self.actionPreview)
        self.menuImage_2.addAction(self.actionView_in_folder)
        self.menuImage_2.addAction(self.actionEdit)
        self.menuImage_2.addAction(self.actionReplace_image)
        self.menuWindow.addAction(self.actionOpen_DemoMate)
        self.menuWindow.addAction(self.actionOpen_Cloudguides_Packaging)
        self.menuWindow.addAction(self.actionClose)
        self.menuWindow.addAction(self.actionOpen_assets_folder)
        self.menuHelp.addAction(self.actionAbout)
        self.menuHelp.addSeparator()
        self.menuHelp.addAction(self.menuHow_do_I.menuAction())
        self.menuHelp.addSeparator()
        self.menuHow_do_I.addAction(self.actionBulk_insert_image)
        self.menuHow_do_I.addAction(self.actionBulk_shell_steps)
        self.menuHow_do_I.addAction(self.actionBulk_crop_step_assets)
        self.menuHow_do_I.addAction(self.actionAttach_audio_to_demo)

        self.retranslateUi(IscApp)

        QMetaObject.connectSlotsByName(IscApp)
    # setupUi

    def retranslateUi(self, IscApp):
        IscApp.setWindowTitle(QCoreApplication.translate("IscApp", u"IscApp", None))
        self.actionUndo.setText(QCoreApplication.translate("IscApp", u"Undo", None))
        self.actionRedo.setText(QCoreApplication.translate("IscApp", u"Redo", None))
        self.actionView_statusbar.setText(QCoreApplication.translate("IscApp", u"View statusbar", None))
        self.actionView_step_preview.setText(QCoreApplication.translate("IscApp", u"View step preview", None))
        self.actionInsert.setText(QCoreApplication.translate("IscApp", u"Insert Image", None))
        self.actionShell_Image.setText(QCoreApplication.translate("IscApp", u"Shell Image", None))
        self.actionSection_steps.setText(QCoreApplication.translate("IscApp", u"Section steps", None))
        self.actionAttach_audio.setText(QCoreApplication.translate("IscApp", u"Attach audio", None))
        self.actionBulk_crop.setText(QCoreApplication.translate("IscApp", u"Bulk crop", None))
        self.actionView_demo_in_folder.setText(QCoreApplication.translate("IscApp", u"View demo in folder", None))
        self.actionLoad_tool_state.setText(QCoreApplication.translate("IscApp", u"Load tool state", None))
        self.actionSave_tool_state.setText(QCoreApplication.translate("IscApp", u"Save tool state", None))
        self.actionOpen_DemoMate.setText(QCoreApplication.translate("IscApp", u"Open Demo in DemoMate", None))
        self.actionOpen_Cloudguides_Packaging.setText(QCoreApplication.translate("IscApp", u"Open Cloudguides Packaging tool", None))
        self.actionAbout.setText(QCoreApplication.translate("IscApp", u"About", None))
        self.actionHelp_2.setText(QCoreApplication.translate("IscApp", u"Help", None))
        self.actionImage_Insert.setText(QCoreApplication.translate("IscApp", u"Insert image", None))
        self.actionImage_Shelling.setText(QCoreApplication.translate("IscApp", u"Shell image", None))
        self.actionHelp_3.setText(QCoreApplication.translate("IscApp", u"Help", None))
        self.actionBulk_insert_image.setText(QCoreApplication.translate("IscApp", u"Bulk insert image into step assets", None))
        self.actionBulk_shell_steps.setText(QCoreApplication.translate("IscApp", u"Bulk shell step assets", None))
        self.actionBulk_crop_step_assets.setText(QCoreApplication.translate("IscApp", u"Bulk crop step assets", None))
        self.actionAttach_audio_to_demo.setText(QCoreApplication.translate("IscApp", u"Attach audio to demo", None))
        self.actionClose.setText(QCoreApplication.translate("IscApp", u"Open folder containing demo", None))
        self.actionClose_2.setText(QCoreApplication.translate("IscApp", u"Close", None))
        self.actionFrom_demo_file.setText(QCoreApplication.translate("IscApp", u"From .demo file", None))
        self.actionFrom_exe_installer.setText(QCoreApplication.translate("IscApp", u"From .exe installer", None))
        self.actionFrom_docx_file.setText(QCoreApplication.translate("IscApp", u"From .docx file", None))
        self.actionFrom_scripts_folder.setText(QCoreApplication.translate("IscApp", u"From scripts folder", None))
        self.actionOverwrite.setText(QCoreApplication.translate("IscApp", u"Overwrite", None))
        self.actionMerge_demos.setText(QCoreApplication.translate("IscApp", u"Merge demos", None))
        self.actionLoad_audio_directory.setText(QCoreApplication.translate("IscApp", u"Load Audio", None))
        self.actionLoad_soundbite.setText(QCoreApplication.translate("IscApp", u"Load from .zip", None))
        self.actionEdit_audio.setText(QCoreApplication.translate("IscApp", u"Edit audio", None))
        self.actionAttach_audio_to_demo_2.setText(QCoreApplication.translate("IscApp", u"Attach audio to demo", None))
        self.actionBulk_edit_demo_audio.setText(QCoreApplication.translate("IscApp", u"Bulk edit demo audio", None))
        self.actionEdit_step_audio.setText(QCoreApplication.translate("IscApp", u"Edit step audio", None))
        self.actionBulk_paste_image.setText(QCoreApplication.translate("IscApp", u"Bulk paste image", None))
        self.actionBulk_image_paste_wizard.setText(QCoreApplication.translate("IscApp", u"Bulk image paste wizard", None))
        self.actionBulk_shell_demo_assets.setText(QCoreApplication.translate("IscApp", u"Bulk shell demo assets", None))
        self.actionSection_demo.setText(QCoreApplication.translate("IscApp", u"Section demo", None))
        self.actionBulk_resize_demo_assets.setText(QCoreApplication.translate("IscApp", u"Bulk resize demo assets", None))
        self.actionBulk_crop_demo_assets.setText(QCoreApplication.translate("IscApp", u"Bulk crop demo assets", None))
        self.actionPacing_wizard.setText(QCoreApplication.translate("IscApp", u"Open pacing wizard", None))
        self.actionCompose_demos.setText(QCoreApplication.translate("IscApp", u"Compose demos", None))
        self.actionBulk_edit_demo_metadata.setText(QCoreApplication.translate("IscApp", u"View/edit metadata", None))
        self.actionLoad_script.setText(QCoreApplication.translate("IscApp", u"Load Script", None))
#if QT_CONFIG(shortcut)
        self.actionLoad_script.setShortcut(QCoreApplication.translate("IscApp", u"Alt+Shift+S", None))
#endif // QT_CONFIG(shortcut)
        self.actionConvert_script.setText(QCoreApplication.translate("IscApp", u"Convert script", None))
        self.actionSpelling_errors.setText(QCoreApplication.translate("IscApp", u"Spelling errors", None))
        self.actionGrammar_errors.setText(QCoreApplication.translate("IscApp", u"Grammar errors", None))
        self.actionProduction_notes.setText(QCoreApplication.translate("IscApp", u"Production notes", None))
        self.actionTalking_points.setText(QCoreApplication.translate("IscApp", u"Talking points", None))
        self.actionClick_instructions.setText(QCoreApplication.translate("IscApp", u"Click instructions", None))
        self.actionPackage_demo.setText(QCoreApplication.translate("IscApp", u"Package demo", None))
        self.actionSingle_image.setText(QCoreApplication.translate("IscApp", u"Single image", None))
        self.actionMultiple_images.setText(QCoreApplication.translate("IscApp", u"Multiple images", None))
        self.actionImage_insert_wizar.setText(QCoreApplication.translate("IscApp", u"From asset region", None))
        self.actionAdd_background_image.setText(QCoreApplication.translate("IscApp", u"Add background image", None))
        self.actionAdd_background_and_wrapper.setText(QCoreApplication.translate("IscApp", u"Add background and wrapper", None))
        self.actionShell_wizard.setText(QCoreApplication.translate("IscApp", u"Shell wizard", None))
        self.actionCrop.setText(QCoreApplication.translate("IscApp", u"Crop", None))
        self.actionResize.setText(QCoreApplication.translate("IscApp", u"Resize", None))
        self.actionLoad_operation.setText(QCoreApplication.translate("IscApp", u"Add operation...", None))
        self.actionSave_operation.setText(QCoreApplication.translate("IscApp", u"Load operation...", None))
        self.actionClose_3.setText(QCoreApplication.translate("IscApp", u"Save operation...", None))
        self.actionZoom_in.setText(QCoreApplication.translate("IscApp", u"Zoom in", None))
        self.actionAdd_scroll_section.setText(QCoreApplication.translate("IscApp", u"Add scroll section", None))
        self.actionOpen_assets_folder.setText(QCoreApplication.translate("IscApp", u"Open assets folder", None))
        self.actionUpload_to_CloudGuides.setText(QCoreApplication.translate("IscApp", u"Upload to CloudGuides", None))
        self.actionSections.setText(QCoreApplication.translate("IscApp", u"Sections", None))
        self.actionsteps.setText(QCoreApplication.translate("IscApp", u"Steps", None))
        self.actionSection.setText(QCoreApplication.translate("IscApp", u"Section", None))
        self.actionSteps_in_section.setText(QCoreApplication.translate("IscApp", u"Steps in section", None))
        self.actionFirst_step_in_section.setText(QCoreApplication.translate("IscApp", u"First step in section", None))
        self.actionSet_section_as_animated.setText(QCoreApplication.translate("IscApp", u"Delete", None))
        self.actionSet_section_as_guided.setText(QCoreApplication.translate("IscApp", u"Duplicate", None))
        self.actionDelete.setText(QCoreApplication.translate("IscApp", u"Delete", None))
        self.actionDuplicate.setText(QCoreApplication.translate("IscApp", u"Duplicate", None))
        self.actionDuplicate_as_pacing.setText(QCoreApplication.translate("IscApp", u"Duplicate as pacing", None))
        self.actionMove.setText(QCoreApplication.translate("IscApp", u"Move", None))
        self.actionMove_2.setText(QCoreApplication.translate("IscApp", u"Move", None))
        self.actionSet_as_animated.setText(QCoreApplication.translate("IscApp", u"Set as animated", None))
        self.actionSet_as_guided.setText(QCoreApplication.translate("IscApp", u"Set as guided", None))
        self.actionSet_as_scroll.setText(QCoreApplication.translate("IscApp", u"Set as scroll", None))
        self.actionDecrement_step_delay.setText(QCoreApplication.translate("IscApp", u"Decrement step delay", None))
        self.actionIncrement_step_delay.setText(QCoreApplication.translate("IscApp", u"Increment step delay", None))
        self.actionAdd_audio_2.setText(QCoreApplication.translate("IscApp", u"Add audio", None))
        self.actionDelete_audio.setText(QCoreApplication.translate("IscApp", u"Delete audio", None))
        self.actionEdit_audio_2.setText(QCoreApplication.translate("IscApp", u"Edit audio", None))
        self.actionReplace_audio.setText(QCoreApplication.translate("IscApp", u"Replace audio", None))
        self.actionView_metadata.setText(QCoreApplication.translate("IscApp", u"View metadata", None))
        self.actionAdd_audio_3.setText(QCoreApplication.translate("IscApp", u"Add audio", None))
        self.actionDelete_audio_2.setText(QCoreApplication.translate("IscApp", u"Delete audio", None))
        self.actionReplace_audio_2.setText(QCoreApplication.translate("IscApp", u"Replace audio", None))
        self.actionEdit_audio_3.setText(QCoreApplication.translate("IscApp", u"Edit audio", None))
        self.actionIncrement_step_delay_2.setText(QCoreApplication.translate("IscApp", u"Increment step delay", None))
        self.actionDecrement_step_delay_2.setText(QCoreApplication.translate("IscApp", u"Decrement step delay", None))
        self.actionPreview.setText(QCoreApplication.translate("IscApp", u"Preview image", None))
        self.actionView_in_folder.setText(QCoreApplication.translate("IscApp", u"View in folder", None))
        self.actionEdit.setText(QCoreApplication.translate("IscApp", u"Edit image", None))
        self.actionReplace_image.setText(QCoreApplication.translate("IscApp", u"Replace image", None))
        self.actionView_metadata_2.setText(QCoreApplication.translate("IscApp", u"View metadata", None))
        self.actionLoad_SoundBite.setText(QCoreApplication.translate("IscApp", u"Load soundbite", None))
        self.actionFrom_recording.setText(QCoreApplication.translate("IscApp", u"From recording", None))
        self.actionAs_new_version.setText(QCoreApplication.translate("IscApp", u"As new version", None))
        self.actionAs_new_round.setText(QCoreApplication.translate("IscApp", u"As new round", None))
        self.actionExport_to_installer.setText(QCoreApplication.translate("IscApp", u"Export to installer", None))
        self.actionExport_to_Cloudguide.setText(QCoreApplication.translate("IscApp", u"Export to Cloudguide", None))
        self.actionTo_installer.setText(QCoreApplication.translate("IscApp", u"To installer", None))
        self.actionTo_Cloudguide.setText(QCoreApplication.translate("IscApp", u"To Cloudguide", None))
        self.actionOverwrite_2.setText(QCoreApplication.translate("IscApp", u"Overwrite", None))
        self.actionAs_new_version_2.setText(QCoreApplication.translate("IscApp", u"As new version", None))
        self.actionAs_new_round_2.setText(QCoreApplication.translate("IscApp", u"As new round", None))
        self.actionAs_txt.setText(QCoreApplication.translate("IscApp", u"As .txt", None))
        self.actionTo_new_directory.setText(QCoreApplication.translate("IscApp", u"To new directory", None))
        self.actionOverwrite_3.setText(QCoreApplication.translate("IscApp", u"Overwrite", None))
        self.actionClose_window.setText(QCoreApplication.translate("IscApp", u"Close window", None))
        self.actionReset_demo.setText(QCoreApplication.translate("IscApp", u"Reset demo", None))
        self.actionNew.setText(QCoreApplication.translate("IscApp", u"New...", None))
        self.actionNew_operation.setText(QCoreApplication.translate("IscApp", u"New operation...", None))
        self.actionAdd_step.setText(QCoreApplication.translate("IscApp", u"Add step", None))
        self.actionPreferences.setText(QCoreApplication.translate("IscApp", u"Preferences", None))
        self.actionAdd_text_box.setText(QCoreApplication.translate("IscApp", u"Add text box", None))
        self.actionAdd_highlight.setText(QCoreApplication.translate("IscApp", u"Add highlight", None))
        self.actionAdd_jump_box.setText(QCoreApplication.translate("IscApp", u"Add jump box", None))
        self.actionSet_animated.setText(QCoreApplication.translate("IscApp", u"Set animated", None))
        self.actionSet_guided.setText(QCoreApplication.translate("IscApp", u"Set guided", None))
        self.actionEdit_XML.setText(QCoreApplication.translate("IscApp", u"Edit XML", None))
        self.actionFrom_capture.setText(QCoreApplication.translate("IscApp", u"From capture", None))
        self.actionCapture_image_edt_macro.setText(QCoreApplication.translate("IscApp", u"Capture image edt macro", None))
        self.actionNew_tab.setText(QCoreApplication.translate("IscApp", u"New tab", None))
        self.actionNew_2.setText(QCoreApplication.translate("IscApp", u"New...", None))
        self.actionTo_new_version.setText(QCoreApplication.translate("IscApp", u"To new version", None))
        self.actionTo_new_round.setText(QCoreApplication.translate("IscApp", u"To new round", None))
        self.actionSteps.setText(QCoreApplication.translate("IscApp", u"Steps...", None))
        self.actionOverwrite_existing.setText(QCoreApplication.translate("IscApp", u"Overwrite existing", None))
        self.actionSave.setText(QCoreApplication.translate("IscApp", u"Save...", None))
        self.actionDemo.setText(QCoreApplication.translate("IscApp", u"Demo...", None))
        self.actionAudio.setText(QCoreApplication.translate("IscApp", u"Audio...", None))
        self.actionScript.setText(QCoreApplication.translate("IscApp", u"Script..", None))
        self.actionView_menubar.setText(QCoreApplication.translate("IscApp", u"View console", None))
        self.actionView_in_file_explorer.setText(QCoreApplication.translate("IscApp", u"View in file explorer", None))
#if QT_CONFIG(shortcut)
        self.actionView_in_file_explorer.setShortcut(QCoreApplication.translate("IscApp", u"Ctrl+Shift+F", None))
#endif // QT_CONFIG(shortcut)
        self.actionView_menubar_2.setText(QCoreApplication.translate("IscApp", u"View menubar", None))
#if QT_CONFIG(shortcut)
        self.actionView_menubar_2.setShortcut(QCoreApplication.translate("IscApp", u"Alt+M", None))
#endif // QT_CONFIG(shortcut)
        self.actionZoom_out.setText(QCoreApplication.translate("IscApp", u"Zoom out", None))
        self.actionReset_zoom.setText(QCoreApplication.translate("IscApp", u"Reset zoom", None))
        self.actionNewStep.setText(QCoreApplication.translate("IscApp", u"Step", None))
        self.actionOpenDemo.setText(QCoreApplication.translate("IscApp", u"Demo", None))
        self.menuFile.setTitle(QCoreApplication.translate("IscApp", u"File", None))
        self.menuExport_2.setTitle(QCoreApplication.translate("IscApp", u"Export...", None))
        self.menuNew.setTitle(QCoreApplication.translate("IscApp", u"New...", None))
        self.menuOpen.setTitle(QCoreApplication.translate("IscApp", u"Open...", None))
        self.menuEdit.setTitle(QCoreApplication.translate("IscApp", u"Edit", None))
        self.menuSelect_all.setTitle(QCoreApplication.translate("IscApp", u"Select all...", None))
        self.menuSelect_associated.setTitle(QCoreApplication.translate("IscApp", u"Select associated...", None))
        self.menuView.setTitle(QCoreApplication.translate("IscApp", u"View", None))
        self.menuZoom.setTitle(QCoreApplication.translate("IscApp", u"Zoom...", None))
        self.menuTools.setTitle(QCoreApplication.translate("IscApp", u"Tools", None))
        self.menuAudio.setTitle(QCoreApplication.translate("IscApp", u"Audio", None))
        self.menuImage.setTitle(QCoreApplication.translate("IscApp", u"Image", None))
        self.menuInsert.setTitle(QCoreApplication.translate("IscApp", u"Paste...", None))
        self.menuShell.setTitle(QCoreApplication.translate("IscApp", u"Shell...", None))
        self.menuDemo.setTitle(QCoreApplication.translate("IscApp", u"Demo", None))
        self.menuScript.setTitle(QCoreApplication.translate("IscApp", u"Script", None))
        self.menuCheck_script_for.setTitle(QCoreApplication.translate("IscApp", u"Check script for...", None))
        self.menuClear.setTitle(QCoreApplication.translate("IscApp", u"Clear...", None))
        self.menuWeb.setTitle(QCoreApplication.translate("IscApp", u"Web", None))
        self.menuSection.setTitle(QCoreApplication.translate("IscApp", u"Section...", None))
        self.menuPacing.setTitle(QCoreApplication.translate("IscApp", u"Pacing...", None))
        self.menuAudio_2.setTitle(QCoreApplication.translate("IscApp", u"Audio...", None))
        self.menuStep.setTitle(QCoreApplication.translate("IscApp", u"Step...", None))
        self.menuAudio_3.setTitle(QCoreApplication.translate("IscApp", u"Audio...", None))
        self.menuPacing_2.setTitle(QCoreApplication.translate("IscApp", u"Pacing...", None))
        self.menuImage_2.setTitle(QCoreApplication.translate("IscApp", u"Image...", None))
        self.menuWindow.setTitle(QCoreApplication.translate("IscApp", u"Window", None))
        self.menuHelp.setTitle(QCoreApplication.translate("IscApp", u"Help", None))
        self.menuHow_do_I.setTitle(QCoreApplication.translate("IscApp", u"How do I...", None))
Exemple #17
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1120, 700)
        self.actionOpen_Ops = QAction(MainWindow)
        self.actionOpen_Ops.setObjectName(u"actionOpen_Ops")
        self.actionOpen_Demo = QAction(MainWindow)
        self.actionOpen_Demo.setObjectName(u"actionOpen_Demo")
        self.actionOpen_Audio = QAction(MainWindow)
        self.actionOpen_Audio.setObjectName(u"actionOpen_Audio")
        self.actionImport_Script = QAction(MainWindow)
        self.actionImport_Script.setObjectName(u"actionImport_Script")
        self.actionSave_Ops = QAction(MainWindow)
        self.actionSave_Ops.setObjectName(u"actionSave_Ops")
        self.actionPreferences = QAction(MainWindow)
        self.actionPreferences.setObjectName(u"actionPreferences")
        self.actionView_metadata = QAction(MainWindow)
        self.actionView_metadata.setObjectName(u"actionView_metadata")
        self.actionRename = QAction(MainWindow)
        self.actionRename.setObjectName(u"actionRename")
        self.actionExport_to_XML = QAction(MainWindow)
        self.actionExport_to_XML.setObjectName(u"actionExport_to_XML")
        self.actionOperations = QAction(MainWindow)
        self.actionOperations.setObjectName(u"actionOperations")
        self.actionMetadata_editor = QAction(MainWindow)
        self.actionMetadata_editor.setObjectName(u"actionMetadata_editor")
        self.actionProduction_editor = QAction(MainWindow)
        self.actionProduction_editor.setObjectName(u"actionProduction_editor")
        self.actionAbout = QAction(MainWindow)
        self.actionAbout.setObjectName(u"actionAbout")
        self.actionHow_to_use = QAction(MainWindow)
        self.actionHow_to_use.setObjectName(u"actionHow_to_use")
        self.actionQuit = QAction(MainWindow)
        self.actionQuit.setObjectName(u"actionQuit")
        self.actionPreferences_2 = QAction(MainWindow)
        self.actionPreferences_2.setObjectName(u"actionPreferences_2")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setSpacing(4)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setContentsMargins(4, 4, 4, 4)
        self.centralTabs = QStackedWidget(self.centralwidget)
        self.centralTabs.setObjectName(u"centralTabs")
        self.centralTabs.setMouseTracking(True)
        self.centralTabs.setAcceptDrops(True)
        self.centralTabs.setLineWidth(0)
        self.editStackPage = QWidget()
        self.editStackPage.setObjectName(u"editStackPage")
        self.horizontalLayout_3 = QHBoxLayout(self.editStackPage)
        self.horizontalLayout_3.setSpacing(2)
        self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
        self.horizontalLayout_3.setContentsMargins(4, 4, 4, 4)
        self.dataView = QTabWidget(self.editStackPage)
        self.dataView.setObjectName(u"dataView")
        sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.dataView.sizePolicy().hasHeightForWidth())
        self.dataView.setSizePolicy(sizePolicy)
        self.dataView.setMinimumSize(QSize(300, 0))
        self.demoDataPage = DemoPage()
        self.demoDataPage.setObjectName(u"demoDataPage")
        self.verticalLayout_6 = QVBoxLayout(self.demoDataPage)
        self.verticalLayout_6.setObjectName(u"verticalLayout_6")
        self.verticalLayout_6.setContentsMargins(4, 4, 4, 4)
        self.groupBox_3 = QGroupBox(self.demoDataPage)
        self.groupBox_3.setObjectName(u"groupBox_3")

        self.verticalLayout_6.addWidget(self.groupBox_3)

        self.groupBox_4 = QGroupBox(self.demoDataPage)
        self.groupBox_4.setObjectName(u"groupBox_4")

        self.verticalLayout_6.addWidget(self.groupBox_4)

        self.dataView.addTab(self.demoDataPage, "")
        self.tab_5 = QWidget()
        self.tab_5.setObjectName(u"tab_5")
        self.dataView.addTab(self.tab_5, "")

        self.horizontalLayout_3.addWidget(self.dataView)

        self.tabWidget = QTabWidget(self.editStackPage)
        self.tabWidget.setObjectName(u"tabWidget")
        self.tabWidget.setEnabled(False)
        self.tabWidget.setAcceptDrops(True)
        self.tabWidget.setElideMode(Qt.ElideNone)
        self.tabWidget.setDocumentMode(False)
        self.tabWidget.setTabsClosable(False)
        self.tabWidget.setMovable(True)
        self.tabWidget.setTabBarAutoHide(False)

        self.horizontalLayout_3.addWidget(self.tabWidget)

        self.viewTabs = QTabWidget(self.editStackPage)
        self.viewTabs.setObjectName(u"viewTabs")
        self.viewTabs.setMinimumSize(QSize(0, 0))
        self.viewTabs.setMaximumSize(QSize(16555215, 16777215))
        self.demoViewTab = QWidget()
        self.demoViewTab.setObjectName(u"demoViewTab")
        self.verticalLayout_8 = QVBoxLayout(self.demoViewTab)
        self.verticalLayout_8.setSpacing(1)
        self.verticalLayout_8.setObjectName(u"verticalLayout_8")
        self.verticalLayout_8.setContentsMargins(4, 4, 4, 4)
        self.groupBox = QGroupBox(self.demoViewTab)
        self.groupBox.setObjectName(u"groupBox")

        self.verticalLayout_8.addWidget(self.groupBox)

        self.groupBox_2 = QGroupBox(self.demoViewTab)
        self.groupBox_2.setObjectName(u"groupBox_2")

        self.verticalLayout_8.addWidget(self.groupBox_2)

        self.viewTabs.addTab(self.demoViewTab, "")
        self.metadataViewTab = QWidget()
        self.metadataViewTab.setObjectName(u"metadataViewTab")
        self.viewTabs.addTab(self.metadataViewTab, "")

        self.horizontalLayout_3.addWidget(self.viewTabs)

        self.centralTabs.addWidget(self.editStackPage)
        self.tabWidget.raise_()
        self.dataView.raise_()
        self.viewTabs.raise_()
        self.centralTabsPage2 = QWidget()
        self.centralTabsPage2.setObjectName(u"centralTabsPage2")
        self.horizontalLayout_2 = QHBoxLayout(self.centralTabsPage2)
        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName(u"horizontalLayout")

        self.horizontalLayout_2.addLayout(self.horizontalLayout)

        self.centralTabs.addWidget(self.centralTabsPage2)

        self.verticalLayout.addWidget(self.centralTabs)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1120, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName(u"menuFile")
        self.menuEdit = QMenu(self.menubar)
        self.menuEdit.setObjectName(u"menuEdit")
        self.menuDemo = QMenu(self.menubar)
        self.menuDemo.setObjectName(u"menuDemo")
        self.menuView = QMenu(self.menubar)
        self.menuView.setObjectName(u"menuView")
        self.menuTools = QMenu(self.menubar)
        self.menuTools.setObjectName(u"menuTools")
        self.menuWindow = QMenu(self.menubar)
        self.menuWindow.setObjectName(u"menuWindow")
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setObjectName(u"menuHelp")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())
        self.menubar.addAction(self.menuDemo.menuAction())
        self.menubar.addAction(self.menuView.menuAction())
        self.menubar.addAction(self.menuTools.menuAction())
        self.menubar.addAction(self.menuWindow.menuAction())
        self.menubar.addAction(self.menuHelp.menuAction())
        self.menuFile.addAction(self.actionOpen_Ops)
        self.menuFile.addAction(self.actionSave_Ops)
        self.menuFile.addSeparator()
        self.menuFile.addAction(self.actionOpen_Demo)
        self.menuFile.addAction(self.actionOpen_Audio)
        self.menuFile.addAction(self.actionImport_Script)
        self.menuFile.addSeparator()
        self.menuEdit.addAction(self.actionPreferences)
        self.menuDemo.addAction(self.actionView_metadata)
        self.menuDemo.addAction(self.actionRename)
        self.menuDemo.addAction(self.actionExport_to_XML)
        self.menuView.addAction(self.actionOperations)
        self.menuView.addAction(self.actionMetadata_editor)
        self.menuView.addAction(self.actionProduction_editor)
        self.menuTools.addAction(self.actionPreferences_2)
        self.menuWindow.addAction(self.actionQuit)
        self.menuHelp.addAction(self.actionAbout)
        self.menuHelp.addAction(self.actionHow_to_use)

        self.retranslateUi(MainWindow)

        self.dataView.setCurrentIndex(1)
        self.viewTabs.setCurrentIndex(0)


        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.actionOpen_Ops.setText(QCoreApplication.translate("MainWindow", u"Open Ops", None))
        self.actionOpen_Demo.setText(QCoreApplication.translate("MainWindow", u"Import Demo", None))
        self.actionOpen_Audio.setText(QCoreApplication.translate("MainWindow", u"Import Audio", None))
        self.actionImport_Script.setText(QCoreApplication.translate("MainWindow", u"Import Script", None))
        self.actionSave_Ops.setText(QCoreApplication.translate("MainWindow", u"Save Ops", None))
        self.actionPreferences.setText(QCoreApplication.translate("MainWindow", u"Preferences", None))
        self.actionView_metadata.setText(QCoreApplication.translate("MainWindow", u"View metadata", None))
        self.actionRename.setText(QCoreApplication.translate("MainWindow", u"Rename ", None))
        self.actionExport_to_XML.setText(QCoreApplication.translate("MainWindow", u"Export to XML", None))
        self.actionOperations.setText(QCoreApplication.translate("MainWindow", u"Operations", None))
        self.actionMetadata_editor.setText(QCoreApplication.translate("MainWindow", u"Metadata editor", None))
        self.actionProduction_editor.setText(QCoreApplication.translate("MainWindow", u"Production editor", None))
        self.actionAbout.setText(QCoreApplication.translate("MainWindow", u"About", None))
        self.actionHow_to_use.setText(QCoreApplication.translate("MainWindow", u"How to use", None))
        self.actionQuit.setText(QCoreApplication.translate("MainWindow", u"Quit", None))
        self.actionPreferences_2.setText(QCoreApplication.translate("MainWindow", u"Preferences", None))
        self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow", u"GroupBox", None))
        self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow", u"GroupBox", None))
        self.dataView.setTabText(self.dataView.indexOf(self.demoDataPage), QCoreApplication.translate("MainWindow", u"Data", None))
        self.dataView.setTabText(self.dataView.indexOf(self.tab_5), QCoreApplication.translate("MainWindow", u"Saved", None))
        self.groupBox.setTitle(QCoreApplication.translate("MainWindow", u"Demo Overview", None))
        self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"Step Overview", None))
        self.viewTabs.setTabText(self.viewTabs.indexOf(self.demoViewTab), QCoreApplication.translate("MainWindow", u"Overview", None))
        self.viewTabs.setTabText(self.viewTabs.indexOf(self.metadataViewTab), QCoreApplication.translate("MainWindow", u"Metadata", None))
        self.menuFile.setTitle(QCoreApplication.translate("MainWindow", u"File", None))
        self.menuEdit.setTitle(QCoreApplication.translate("MainWindow", u"Edit", None))
        self.menuDemo.setTitle(QCoreApplication.translate("MainWindow", u"Demo", None))
        self.menuView.setTitle(QCoreApplication.translate("MainWindow", u"View", None))
        self.menuTools.setTitle(QCoreApplication.translate("MainWindow", u"Tools", None))
        self.menuWindow.setTitle(QCoreApplication.translate("MainWindow", u"Window", None))
        self.menuHelp.setTitle(QCoreApplication.translate("MainWindow", u"Help", None))
Exemple #18
0
class EntryWidget(TritonWidget):

    def __init__(self, base, account):
        TritonWidget.__init__(self, base)
        self.account = account
        self.type = account['type']
        self.name = account['name']
        self.icon = account['icon'].replace('\\', '/')
        self.timer = None
        self.secretWidget = None
        self.iconWidget = None

        self.closeEvent = self.widgetDeleted

        self.boxLayout = QHBoxLayout(self)
        self.boxLayout.setContentsMargins(0, 0, 0, 0)

        self.image = QLabel()
        self.image.setFixedSize(48, 48)
        self.reloadIcon()

        self.detailWidget = QWidget()
        self.detailLayout = QVBoxLayout(self.detailWidget)
        self.detailLayout.setContentsMargins(0, 0, 0, 0)

        self.nameLabel = EditableLabel(True, None)
        self.nameLabel.callback = self.renameAccount
        self.nameLabel.setText(self.name)
        self.nameLabel.setAlignment(Qt.AlignTop)
        self.nameLabel.setFont(QFont('Helvetica', 11))

        self.passLabel = EditableLabel(False, self.openPassLabel)
        self.passLabel.disableEdit()
        self.passLabel.setAlignment(Qt.AlignBottom)

        self.detailLayout.addWidget(self.nameLabel)
        self.detailLayout.addWidget(self.passLabel)

        self.showButton = PixmapButton(QPixmap('icons/RefreshIcon.png').scaled(48, 48))
        self.showButton.clicked.connect(self.buttonPressed)

        self.timerProgress = QRoundProgressBar()
        self.timerProgress.setBarStyle(QRoundProgressBar.BarStyle.PIE)
        self.timerProgress.setFixedSize(48, 48)
        self.timerProgress.setFormat('')
        self.timerProgress.mouseReleaseEvent = self.buttonPressed
        palette = QPalette()
        brush = QBrush(QColor(155, 183, 214))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Active, QPalette.Highlight, brush)

        self.timerProgress.setPalette(palette)
        self.timerProgress.hide()

        self.boxLayout.addWidget(self.image)
        self.boxLayout.addSpacing(5)
        self.boxLayout.addWidget(self.detailWidget)
        self.boxLayout.addWidget(self.showButton, 0, Qt.AlignRight)
        self.boxLayout.addWidget(self.timerProgress, 0, Qt.AlignRight)
        self.setFixedSize(360, 48)
        self.hidePassword()

        self.setContextMenuPolicy(Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.openContextMenu)
        self.menu = QMenu(self)
        self.removeAction = QAction('Remove')
        self.removeAction.triggered.connect(self.removeAccount)
        self.iconAction = QAction('Edit icon')
        self.iconAction.triggered.connect(self.editIcon)
        self.showAction = QAction('Show secret key')
        self.showAction.triggered.connect(self.showSecretKey)
        self.menu.addAction(self.removeAction)
        self.menu.addSeparator()
        self.menu.addAction(self.iconAction)
        self.menu.addAction(self.showAction)

    def getValue(self):
        return self.base.getAuthCode(self.account)

    def widgetDeleted(self, *args):
        self.stopTimer()
        self.name = None
        self.account = None

    def buttonPressed(self, *args):
        if not self.timer:
            self.showPassword()

    def openPassLabel(self, *args):
        self.buttonPressed()
        self.passLabel.mouseDoubleClickEvent()

    def openContextMenu(self, point):
        self.menu.exec_(self.mapToGlobal(point))

    def reloadIcon(self):
        pixmap = QPixmap(self.icon).scaled(48, 48)
        self.image.setPixmap(pixmap)

    def stopTimer(self):
        if self.timer:
            self.timer.stop()
            self.timer = None

    def hidePassword(self):
        font = QFont('Helvetica', 10, weight=QFont.Bold)
        font.setLetterSpacing(QFont.PercentageSpacing, 110)

        self.stopTimer()
        self.passLabel.setText('* ' * 5)
        self.passLabel.setFont(font)
        self.passLabel.disableEdit()
        self.showButton.show()
        self.timerProgress.hide()

    def showPassword(self):
        font = QFont('Helvetica', 13, weight=QFont.Bold)
        font.setLetterSpacing(QFont.PercentageSpacing, 110)

        self.passLabel.setText(self.getValue())
        self.passLabel.setFont(font)
        self.passLabel.enableEdit()
        self.showButton.hide()
        self.timerProgress.show()
        self.timerEnd = time.time() + 15

        if not self.timer:
            self.timerProgress.setValue(100)
            self.timer = QTimer()
            self.timer.timeout.connect(self.updateProgress)
            self.timer.start(100)

    def updateProgress(self):
        if self.timerProgress.isHidden() or self.timerEnd <= time.time():
            self.hidePassword()
            return

        delta = (self.timerEnd - time.time()) / 15 * 100
        self.timerProgress.setValue(delta)

    def removeAccount(self):
        reply = QMessageBox.question(self, self.name, 'ATTENTION! Deleting this account is an irreversible action!\n\nAre you absolutely sure?', QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            self.base.deleteAccount(self.account)

    def renameAccount(self, name):
        index = self.base.getAccountIndex(self.account)
        self.account['name'] = name
        self.base.setAccount(index, self.account)

    def editIcon(self):
        self.iconWidget = EditIconWidget(self.base, self.name, self.editIconCallback)

    def editIconCallback(self, icon):
        index = self.base.getAccountIndex(self.account)
        self.icon = icon.replace('\\', '/')
        self.account['icon'] = icon
        self.base.setAccount(index, self.account)
        self.reloadIcon()

    def showSecretKey(self):
        if self.type == Globals.OTPAuth:
            keys = [
                ('Key', self.account['key'])
            ]
        elif self.type == Globals.SteamAuth:
            keys = [
                ('Steam ID', self.account['steamId']),
                ('Shared Secret', self.account['sharedSecret']),
                ('Identity Secret', self.account['identitySecret'])
            ]
        else:
            keys = []

        self.secretWidget = ShowSecretWidget(self.base, keys, self.name)
Exemple #19
0
 def contextMenuEvent(self, QContextMenuEvent):
     menu = QMenu()
     menu.addAction(self.action_fullscreen)
     menu.addSeparator()
     menu.addAction(self.action_image_gallery)
     menu.addSeparator()
     menu.addAction(self.action_previous_image)
     menu.addAction(self.action_next_image)
     menu.addSeparator()
     menu.addAction(self.action_normal_size)
     menu.addAction(self.action_fit_screen)
     menu.addAction(self.action_fit_vertical)
     menu.addAction(self.action_fit_horizontal)
     menu.addSeparator()
     menu.addAction(self.action_zoom_in)
     menu.addAction(self.action_zoom_out)
     menu.addSeparator()
     menu.addAction(self.action_copy)
     menu.addAction(self.action_move)
     menu.addSeparator()
     menu.addAction(self.action_delete)
     menu.exec_(QContextMenuEvent.globalPos())
Exemple #20
0
class MainWindow(QMainWindow, Ui_JAL_MainWindow):
    def __init__(self, language):
        QMainWindow.__init__(self, None)
        self.setupUi(self)

        self.currentLanguage = language
        self.current_index = None  # this is used in onOperationContextMenu() to track item for menu

        self.ledger = Ledger()
        self.downloader = QuoteDownloader()
        self.taxes = TaxesRus()
        self.statements = StatementLoader()
        self.backup = JalBackup(self, get_dbfilename(get_app_path()))
        self.estimator = None
        self.price_chart = None

        self.actionImportSlipRU.setEnabled(
            dependency_present(['pyzbar', 'PIL']))

        self.actionAbout = QAction(text=self.tr("About"), parent=self)
        self.MainMenu.addAction(self.actionAbout)

        self.langGroup = QActionGroup(self.menuLanguage)
        self.createLanguageMenu()

        self.statementGroup = QActionGroup(self.menuStatement)
        self.createStatementsImportMenu()

        # Set icons
        self.setWindowIcon(load_icon("jal.png"))
        self.NewOperationBtn.setIcon(load_icon("new.png"))
        self.CopyOperationBtn.setIcon(load_icon("copy.png"))
        self.DeleteOperationBtn.setIcon(load_icon("delete.png"))

        # Operations view context menu
        self.contextMenu = QMenu(self.OperationsTableView)
        self.actionReconcile = QAction(load_icon("reconcile.png"),
                                       self.tr("Reconcile"), self)
        self.actionCopy = QAction(load_icon("copy.png"), self.tr("Copy"), self)
        self.actionDelete = QAction(load_icon("delete.png"), self.tr("Delete"),
                                    self)
        self.contextMenu.addAction(self.actionReconcile)
        self.contextMenu.addSeparator()
        self.contextMenu.addAction(self.actionCopy)
        self.contextMenu.addAction(self.actionDelete)

        # Customize Status bar and logs
        self.ProgressBar = QProgressBar(self)
        self.StatusBar.addWidget(self.ProgressBar)
        self.ProgressBar.setVisible(False)
        self.ledger.setProgressBar(self, self.ProgressBar)
        self.NewLogEventLbl = QLabel(self)
        self.StatusBar.addWidget(self.NewLogEventLbl)
        self.Logs.setNotificationLabel(self.NewLogEventLbl)
        self.Logs.setFormatter(
            logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
        self.logger = logging.getLogger()
        self.logger.addHandler(self.Logs)
        log_level = os.environ.get('LOGLEVEL', 'INFO').upper()
        self.logger.setLevel(log_level)

        # Setup reports tab
        self.reports = Reports(self.ReportTableView, self.ReportTreeView)

        # Customize UI configuration
        self.balances_model = BalancesModel(self.BalancesTableView)
        self.BalancesTableView.setModel(self.balances_model)
        self.balances_model.configureView()

        self.holdings_model = HoldingsModel(self.HoldingsTableView)
        self.HoldingsTableView.setModel(self.holdings_model)
        self.holdings_model.configureView()
        self.HoldingsTableView.setContextMenuPolicy(Qt.CustomContextMenu)

        self.operations_model = OperationsModel(self.OperationsTableView)
        self.OperationsTableView.setModel(self.operations_model)
        self.operations_model.configureView()
        self.OperationsTableView.setContextMenuPolicy(Qt.CustomContextMenu)

        self.connect_signals_and_slots()

        self.NewOperationMenu = QMenu()
        for i in range(self.OperationsTabs.count()):
            if hasattr(self.OperationsTabs.widget(i), "isCustom"):
                self.OperationsTabs.widget(i).dbUpdated.connect(
                    self.ledger.rebuild)
                self.OperationsTabs.widget(i).dbUpdated.connect(
                    self.operations_model.refresh)
                self.NewOperationMenu.addAction(
                    self.OperationsTabs.widget(i).name,
                    partial(self.createOperation, i))
        self.NewOperationBtn.setMenu(self.NewOperationMenu)

        # Setup balance and holdings parameters
        current_time = QDateTime.currentDateTime()
        current_time.setTimeSpec(
            Qt.UTC)  # We use UTC everywhere so need to force TZ info
        self.BalanceDate.setDateTime(current_time)
        self.BalancesCurrencyCombo.setIndex(
            JalSettings().getValue('BaseCurrency'))
        self.HoldingsDate.setDateTime(current_time)
        self.HoldingsCurrencyCombo.setIndex(
            JalSettings().getValue('BaseCurrency'))

        self.OperationsTabs.setCurrentIndex(TransactionType.NA)
        self.OperationsTableView.selectRow(0)
        self.OnOperationsRangeChange(0)

    def connect_signals_and_slots(self):
        self.actionExit.triggered.connect(QApplication.instance().quit)
        self.actionAbout.triggered.connect(self.showAboutWindow)
        self.langGroup.triggered.connect(self.onLanguageChanged)
        self.statementGroup.triggered.connect(self.statements.load)
        self.actionReconcile.triggered.connect(
            self.reconcileAtCurrentOperation)
        self.action_Load_quotes.triggered.connect(
            partial(self.downloader.showQuoteDownloadDialog, self))
        self.actionImportSlipRU.triggered.connect(self.importSlip)
        self.actionBackup.triggered.connect(self.backup.create)
        self.actionRestore.triggered.connect(self.backup.restore)
        self.action_Re_build_Ledger.triggered.connect(
            partial(self.ledger.showRebuildDialog, self))
        self.actionAccountTypes.triggered.connect(
            partial(self.onDataDialog, "account_types"))
        self.actionAccounts.triggered.connect(
            partial(self.onDataDialog, "accounts"))
        self.actionAssets.triggered.connect(
            partial(self.onDataDialog, "assets"))
        self.actionPeers.triggered.connect(partial(self.onDataDialog,
                                                   "agents"))
        self.actionCategories.triggered.connect(
            partial(self.onDataDialog, "categories"))
        self.actionTags.triggered.connect(partial(self.onDataDialog, "tags"))
        self.actionCountries.triggered.connect(
            partial(self.onDataDialog, "countries"))
        self.actionQuotes.triggered.connect(
            partial(self.onDataDialog, "quotes"))
        self.PrepareTaxForms.triggered.connect(
            partial(self.taxes.showTaxesDialog, self))
        self.BalanceDate.dateChanged.connect(
            self.BalancesTableView.model().setDate)
        self.HoldingsDate.dateChanged.connect(
            self.HoldingsTableView.model().setDate)
        self.BalancesCurrencyCombo.changed.connect(
            self.BalancesTableView.model().setCurrency)
        self.BalancesTableView.doubleClicked.connect(self.OnBalanceDoubleClick)
        self.HoldingsCurrencyCombo.changed.connect(
            self.HoldingsTableView.model().setCurrency)
        self.ReportRangeCombo.currentIndexChanged.connect(
            self.onReportRangeChange)
        self.RunReportBtn.clicked.connect(self.onRunReport)
        self.SaveReportBtn.clicked.connect(self.reports.saveReport)
        self.ShowInactiveCheckBox.stateChanged.connect(
            self.BalancesTableView.model().toggleActive)
        self.DateRangeCombo.currentIndexChanged.connect(
            self.OnOperationsRangeChange)
        self.ChooseAccountBtn.changed.connect(
            self.OperationsTableView.model().setAccount)
        self.SearchString.editingFinished.connect(self.updateOperationsFilter)
        self.HoldingsTableView.customContextMenuRequested.connect(
            self.onHoldingsContextMenu)
        self.OperationsTableView.selectionModel().selectionChanged.connect(
            self.OnOperationChange)
        self.OperationsTableView.customContextMenuRequested.connect(
            self.onOperationContextMenu)
        self.DeleteOperationBtn.clicked.connect(self.deleteOperation)
        self.actionDelete.triggered.connect(self.deleteOperation)
        self.CopyOperationBtn.clicked.connect(self.copyOperation)
        self.actionCopy.triggered.connect(self.copyOperation)
        self.downloader.download_completed.connect(self.balances_model.update)
        self.downloader.download_completed.connect(self.holdings_model.update)
        self.statements.load_completed.connect(self.onStatementImport)
        self.ledger.updated.connect(self.balances_model.update)
        self.ledger.updated.connect(self.holdings_model.update)

    @Slot()
    def closeEvent(self, event):
        self.logger.removeHandler(
            self.Logs
        )  # Removing handler (but it doesn't prevent exception at exit)
        logging.raiseExceptions = False  # Silencing logging module exceptions

    def createLanguageMenu(self):
        langPath = get_app_path() + Setup.LANG_PATH + os.sep

        langDirectory = QDir(langPath)
        for language_file in langDirectory.entryList(['*.qm']):
            language_code = language_file.split('.')[0]
            language = QLocale.languageToString(
                QLocale(language_code).language())
            language_icon = QIcon(langPath + language_code + '.png')
            action = QAction(language_icon, language, self)
            action.setCheckable(True)
            action.setData(language_code)
            self.menuLanguage.addAction(action)
            self.langGroup.addAction(action)

    @Slot()
    def onLanguageChanged(self, action):
        language_code = action.data()
        if language_code != self.currentLanguage:
            JalSettings().setValue('Language',
                                   JalDB().get_language_id(language_code))
            QMessageBox().information(
                self, self.tr("Restart required"),
                self.tr("Language was changed to ") +
                QLocale.languageToString(QLocale(language_code).language()) +
                "\n" +
                self.tr("You should restart application to apply changes\n"
                        "Application will be terminated now"), QMessageBox.Ok)
            self.close()

    # Create import menu for all known statements based on self.statements.sources values
    def createStatementsImportMenu(self):
        for i, source in enumerate(self.statements.sources):
            if 'icon' in source:
                source_icon = load_icon(source['icon'])
                action = QAction(source_icon, source['name'], self)
            else:
                action = QAction(source['name'], self)
            action.setData(i)
            self.menuStatement.addAction(action)
            self.statementGroup.addAction(action)

    @Slot()
    def showAboutWindow(self):
        about_box = QMessageBox(self)
        about_box.setAttribute(Qt.WA_DeleteOnClose)
        about_box.setWindowTitle(self.tr("About"))
        title = self.tr(
            "<h3>JAL</h3><p>Just Another Ledger, version {version}</p>".format(
                version=__version__))
        about_box.setText(title)
        about = self.tr(
            "<p>More information, manuals and problem reports are at "
            "<a href=https://github.com/titov-vv/jal>github home page</a></p>"
            "<p>Questions, comments, help or donations:</p>"
            "<p><a href=mailto:[email protected]>[email protected]</a></p>"
            "<p><a href=https://t.me/jal_support>Telegram</a></p>")
        about_box.setInformativeText(about)
        about_box.show()

    def showProgressBar(self, visible=False):
        self.ProgressBar.setVisible(visible)
        self.centralwidget.setEnabled(not visible)
        self.MainMenu.setEnabled(not visible)

    @Slot()
    def OnBalanceDoubleClick(self, index):
        self.ChooseAccountBtn.account_id = index.model().getAccountId(
            index.row())

    @Slot()
    def onReportRangeChange(self, range_index):
        report_ranges = {
            0: lambda: (0, 0),
            1: ManipulateDate.Last3Months,
            2: ManipulateDate.RangeYTD,
            3: ManipulateDate.RangeThisYear,
            4: ManipulateDate.RangePreviousYear
        }
        begin, end = report_ranges[range_index]()
        self.ReportFromDate.setDateTime(
            QDateTime.fromSecsSinceEpoch(begin, spec=Qt.UTC))
        self.ReportToDate.setDateTime(
            QDateTime.fromSecsSinceEpoch(end, spec=Qt.UTC))

    @Slot()
    def onRunReport(self):
        types = {
            0: ReportType.IncomeSpending,
            1: ReportType.ProfitLoss,
            2: ReportType.Deals,
            3: ReportType.ByCategory
        }
        report_type = types[self.ReportTypeCombo.currentIndex()]
        begin = self.ReportFromDate.dateTime().toSecsSinceEpoch()
        end = self.ReportToDate.dateTime().toSecsSinceEpoch()
        group_dates = 1 if self.ReportGroupCheck.isChecked() else 0
        if report_type == ReportType.ByCategory:
            self.reports.runReport(report_type, begin, end,
                                   self.ReportCategoryEdit.selected_id,
                                   group_dates)
        else:
            self.reports.runReport(report_type, begin, end,
                                   self.ReportAccountBtn.account_id,
                                   group_dates)

    @Slot()
    def OnOperationsRangeChange(self, range_index):
        view_ranges = {
            0: ManipulateDate.startOfPreviousWeek,
            1: ManipulateDate.startOfPreviousMonth,
            2: ManipulateDate.startOfPreviousQuarter,
            3: ManipulateDate.startOfPreviousYear,
            4: lambda: 0
        }
        self.OperationsTableView.model().setDateRange(
            view_ranges[range_index]())

    @Slot()
    def importSlip(self):
        dialog = ImportSlipDialog(self)
        dialog.finished.connect(self.onSlipImportFinished)
        dialog.open()

    @Slot()
    def onSlipImportFinished(self):
        self.ledger.rebuild()

    @Slot()
    def onHoldingsContextMenu(self, pos):
        index = self.HoldingsTableView.indexAt(pos)
        contextMenu = QMenu(self.HoldingsTableView)
        actionShowChart = QAction(text=self.tr("Show Price Chart"),
                                  parent=self.HoldingsTableView)
        actionShowChart.triggered.connect(
            partial(self.showPriceChart,
                    self.HoldingsTableView.viewport().mapToGlobal(pos), index))
        contextMenu.addAction(actionShowChart)
        actionEstimateTax = QAction(text=self.tr("Estimate Russian Tax"),
                                    parent=self.HoldingsTableView)
        actionEstimateTax.triggered.connect(
            partial(self.estimateRussianTax,
                    self.HoldingsTableView.viewport().mapToGlobal(pos), index))
        contextMenu.addAction(actionEstimateTax)
        contextMenu.popup(self.HoldingsTableView.viewport().mapToGlobal(pos))

    @Slot()
    def showPriceChart(self, position, index):
        model = index.model()
        account, asset, asset_qty = model.get_data_for_tax(index)
        self.price_chart = ChartWindow(account, asset, asset_qty, position)
        if self.price_chart.ready:
            self.price_chart.open()

    @Slot()
    def estimateRussianTax(self, position, index):
        model = index.model()
        account, asset, asset_qty = model.get_data_for_tax(index)
        self.estimator = TaxEstimator(account, asset, asset_qty, position)
        if self.estimator.ready:
            self.estimator.open()

    @Slot()
    def OnOperationChange(self, selected, _deselected):
        self.checkForUncommittedChanges()

        if len(self.OperationsTableView.selectionModel().selectedRows()) != 1:
            self.OperationsTabs.setCurrentIndex(TransactionType.NA)
        else:
            idx = selected.indexes()
            if idx:
                selected_row = idx[0].row()
                operation_type, operation_id = self.OperationsTableView.model(
                ).get_operation(selected_row)
                self.OperationsTabs.setCurrentIndex(operation_type)
                self.OperationsTabs.widget(operation_type).setId(operation_id)

    @Slot()
    def checkForUncommittedChanges(self):
        for i in range(self.OperationsTabs.count()):
            if hasattr(self.OperationsTabs.widget(i),
                       "isCustom") and self.OperationsTabs.widget(i).modified:
                reply = QMessageBox().warning(
                    None, self.tr("You have unsaved changes"),
                    self.OperationsTabs.widget(i).name + self.tr(
                        " has uncommitted changes,\ndo you want to save it?"),
                    QMessageBox.Yes, QMessageBox.No)
                if reply == QMessageBox.Yes:
                    self.OperationsTabs.widget(i).saveChanges()
                else:
                    self.OperationsTabs.widget(i).revertChanges()

    @Slot()
    def onOperationContextMenu(self, pos):
        self.current_index = self.OperationsTableView.indexAt(pos)
        if len(self.OperationsTableView.selectionModel().selectedRows()) != 1:
            self.actionReconcile.setEnabled(False)
            self.actionCopy.setEnabled(False)
        else:
            self.actionReconcile.setEnabled(True)
            self.actionCopy.setEnabled(True)
        self.contextMenu.popup(
            self.OperationsTableView.viewport().mapToGlobal(pos))

    @Slot()
    def reconcileAtCurrentOperation(self):
        idx = self.operations_model.index(
            self.current_index.row(),
            0)  # we need only row to address fields by name
        timestamp = self.operations_model.data(idx,
                                               Qt.UserRole,
                                               field="timestamp")
        account_id = self.operations_model.data(idx,
                                                Qt.UserRole,
                                                field="account_id")
        JalDB().reconcile_account(account_id, timestamp)
        self.operations_model.refresh()

    @Slot()
    def deleteOperation(self):
        if QMessageBox().warning(
                None, self.tr("Confirmation"),
                self.tr("Are you sure to delete selected transacion(s)?"),
                QMessageBox.Yes, QMessageBox.No) == QMessageBox.No:
            return
        rows = []
        for index in self.OperationsTableView.selectionModel().selectedRows():
            rows.append(index.row())
        self.operations_model.deleteRows(rows)
        self.ledger.rebuild()

    @Slot()
    def createOperation(self, operation_type):
        self.checkForUncommittedChanges()
        self.OperationsTabs.widget(operation_type).createNew(
            account_id=self.operations_model.getAccount())
        self.OperationsTabs.setCurrentIndex(operation_type)

    @Slot()
    def copyOperation(self):
        operation_type = self.OperationsTabs.currentIndex()
        if operation_type == TransactionType.NA:
            return
        self.checkForUncommittedChanges()
        self.OperationsTabs.widget(operation_type).copyNew()

    @Slot()
    def updateOperationsFilter(self):
        self.OperationsTableView.model().filterText(self.SearchString.text())

    @Slot()
    def onDataDialog(self, dlg_type):
        if dlg_type == "account_types":
            AccountTypeListDialog().exec()
        elif dlg_type == "accounts":
            AccountListDialog().exec()
        elif dlg_type == "assets":
            AssetListDialog().exec()
        elif dlg_type == "agents":
            PeerListDialog().exec()
        elif dlg_type == "categories":
            CategoryListDialog().exec()
        elif dlg_type == "tags":
            TagsListDialog().exec()
        elif dlg_type == "countries":
            CountryListDialog().exec()
        elif dlg_type == "quotes":
            QuotesListDialog().exec()
        else:
            assert False

    @Slot()
    def onStatementImport(self, timestamp, totals):
        self.ledger.rebuild()
        for account_id in totals:
            for asset_id in totals[account_id]:
                amount = JalDB().get_asset_amount(timestamp, account_id,
                                                  asset_id)
                if amount is not None:
                    if abs(totals[account_id][asset_id] -
                           amount) <= Setup.DISP_TOLERANCE:
                        JalDB().reconcile_account(account_id, timestamp)
                        self.balances_model.update(
                        )  # Update required to display reconciled
                    else:
                        account = JalDB().get_account_name(account_id)
                        asset = JalDB().get_asset_name(asset_id)
                        logging.warning(
                            self.tr(
                                "Statement ending balance doesn't match: ") +
                            f"{account} / {asset} / {amount} <> {totals[account_id][asset_id]}"
                        )
Exemple #21
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1020, 588)
        self.actionSave = QAction(MainWindow)
        self.actionSave.setObjectName(u"actionSave")
        self.actionExit = QAction(MainWindow)
        self.actionExit.setObjectName(u"actionExit")
        self.actionExit_2 = QAction(MainWindow)
        self.actionExit_2.setObjectName(u"actionExit_2")
        self.openini = QAction(MainWindow)
        self.openini.setObjectName(u"openini")
        self.openjson = QAction(MainWindow)
        self.openjson.setObjectName(u"openjson")
        self.main_widget = QWidget(MainWindow)
        self.main_widget.setObjectName(u"main_widget")
        self.ini_widget = QWidget(self.main_widget)
        self.ini_widget.setObjectName(u"ini_widget")
        self.ini_widget.setGeometry(QRect(670, 10, 341, 551))
        self.initable = QTableWidget(self.ini_widget)
        if (self.initable.columnCount() < 2):
            self.initable.setColumnCount(2)
        self.initable.setObjectName(u"initable")
        self.initable.setEnabled(True)
        self.initable.setGeometry(QRect(10, 60, 321, 451))
        font = QFont()
        self.initable.setFont(font)
        self.initable.setEditTriggers(QAbstractItemView.DoubleClicked)
        self.initable.setDragEnabled(False)
        self.initable.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.initable.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.initable.setWordWrap(False)
        self.initable.setRowCount(0)
        self.initable.setColumnCount(2)
        self.initable.horizontalHeader().setDefaultSectionSize(110)
        self.initable.horizontalHeader().setProperty("showSortIndicator",
                                                     False)
        self.initable.horizontalHeader().setStretchLastSection(True)
        self.initable.verticalHeader().setDefaultSectionSize(21)
        self.inilabel = QLabel(self.ini_widget)
        self.inilabel.setObjectName(u"inilabel")
        self.inilabel.setGeometry(QRect(10, 10, 181, 16))
        self.inipath = QTextBrowser(self.ini_widget)
        self.inipath.setObjectName(u"inipath")
        self.inipath.setEnabled(True)
        self.inipath.setGeometry(QRect(10, 30, 321, 22))
        self.inipath.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.iniapply = QPushButton(self.ini_widget)
        self.iniapply.setObjectName(u"iniapply")
        self.iniapply.setEnabled(True)
        self.iniapply.setGeometry(QRect(250, 520, 80, 21))
        self.inidel = QPushButton(self.ini_widget)
        self.inidel.setObjectName(u"inidel")
        self.inidel.setEnabled(False)
        self.inidel.setGeometry(QRect(10, 520, 80, 21))
        self.iniadd = QPushButton(self.ini_widget)
        self.iniadd.setObjectName(u"iniadd")
        self.iniadd.setEnabled(False)
        self.iniadd.setGeometry(QRect(100, 520, 80, 21))
        self.json_widget = QWidget(self.main_widget)
        self.json_widget.setObjectName(u"json_widget")
        self.json_widget.setGeometry(QRect(0, 10, 661, 551))
        self.checkBox = QCheckBox(self.json_widget)
        self.checkBox.setObjectName(u"checkBox")
        self.checkBox.setEnabled(True)
        self.checkBox.setGeometry(QRect(20, 100, 131, 20))
        self.checkBox.setChecked(True)
        self.delentry = QPushButton(self.json_widget)
        self.delentry.setObjectName(u"delentry")
        self.delentry.setEnabled(False)
        self.delentry.setGeometry(QRect(10, 520, 80, 21))
        self.remote = QLineEdit(self.json_widget)
        self.remote.setObjectName(u"remote")
        self.remote.setEnabled(True)
        self.remote.setGeometry(QRect(20, 130, 601, 22))
        self.textBrowser = QTextBrowser(self.json_widget)
        self.textBrowser.setObjectName(u"textBrowser")
        self.textBrowser.setEnabled(True)
        self.textBrowser.setGeometry(QRect(20, 30, 601, 22))
        self.textBrowser.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.addButton = QPushButton(self.json_widget)
        self.addButton.setObjectName(u"addButton")
        self.addButton.setEnabled(True)
        self.addButton.setGeometry(QRect(280, 160, 61, 22))
        self.table = QTableWidget(self.json_widget)
        if (self.table.columnCount() < 2):
            self.table.setColumnCount(2)
        self.table.setObjectName(u"table")
        self.table.setEnabled(True)
        self.table.setGeometry(QRect(10, 200, 641, 311))
        self.table.setFont(font)
        self.table.setEditTriggers(QAbstractItemView.DoubleClicked)
        self.table.setDragEnabled(False)
        self.table.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table.setWordWrap(False)
        self.table.setRowCount(0)
        self.table.setColumnCount(2)
        self.table.horizontalHeader().setDefaultSectionSize(80)
        self.table.horizontalHeader().setProperty("showSortIndicator", False)
        self.table.horizontalHeader().setStretchLastSection(True)
        self.table.verticalHeader().setDefaultSectionSize(21)
        self.path = QLineEdit(self.json_widget)
        self.path.setObjectName(u"path")
        self.path.setEnabled(True)
        self.path.setGeometry(QRect(20, 70, 531, 22))
        self.apply = QPushButton(self.json_widget)
        self.apply.setObjectName(u"apply")
        self.apply.setEnabled(True)
        self.apply.setGeometry(QRect(570, 520, 80, 21))
        self.label = QLabel(self.json_widget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(20, 10, 181, 16))
        self.browse = QPushButton(self.json_widget)
        self.browse.setObjectName(u"browse")
        self.browse.setGeometry(QRect(560, 70, 61, 22))
        MainWindow.setCentralWidget(self.main_widget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1020, 19))
        self.File = QMenu(self.menubar)
        self.File.setObjectName(u"File")
        self.menuOpen = QMenu(self.File)
        self.menuOpen.setObjectName(u"menuOpen")
        MainWindow.setMenuBar(self.menubar)

        self.menubar.addAction(self.File.menuAction())
        self.File.addAction(self.menuOpen.menuAction())
        self.File.addAction(self.actionSave)
        self.File.addSeparator()
        self.File.addAction(self.actionExit_2)
        self.menuOpen.addAction(self.openini)
        self.menuOpen.addAction(self.openjson)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", u"frii-config", None))
        self.actionSave.setText(
            QCoreApplication.translate("MainWindow", u"Save", None))
        self.actionExit.setText(
            QCoreApplication.translate("MainWindow", u"Exit", None))
        self.actionExit_2.setText(
            QCoreApplication.translate("MainWindow", u"Exit", None))
        self.openini.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Main config (frii_update.ini)", None))
        self.openjson.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Repository information (info.json)",
                                       None))
        self.inilabel.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Configuration (frii_update.ini)",
                                       None))
        self.iniapply.setText(
            QCoreApplication.translate("MainWindow", u"Save", None))
        self.inidel.setText(
            QCoreApplication.translate("MainWindow", u"Delete", None))
        self.iniadd.setText(
            QCoreApplication.translate("MainWindow", u"Insert", None))
        self.checkBox.setText(
            QCoreApplication.translate("MainWindow", u"Clone repository",
                                       None))
        self.delentry.setText(
            QCoreApplication.translate("MainWindow", u"Delete", None))
        self.remote.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Enter repository URL here", None))
        self.addButton.setText(
            QCoreApplication.translate("MainWindow", u"Next", None))
        self.path.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Enter repository path here", None))
        self.apply.setText(
            QCoreApplication.translate("MainWindow", u"Save", None))
        self.label.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Saved Information (info.json)", None))
        self.browse.setText(
            QCoreApplication.translate("MainWindow", u"Browse", None))
        self.File.setTitle(
            QCoreApplication.translate("MainWindow", u"File", None))
        self.menuOpen.setTitle(
            QCoreApplication.translate("MainWindow", u"Open", None))
Exemple #22
0
class Window(QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.createTrayIcon()
        self.createProgramsList()
        self.createCodeEditPage()
        self.logsPage = QTextBrowser()
        self.documentation = QTextBrowser()

        self.tabWidget = QTabWidget()
        self.tabWidget.setIconSize(QSize(64, 64))
        self.tabWidget.addTab(self.programsListPage, QIcon(":/images/Adventure-Map-icon.png"), "Programs")
        self.tabWidget.addTab(self.codeEditPage, QIcon(":/images/Sword-icon.png"), "Edit Program")
        self.tabWidget.addTab(self.logsPage, QIcon(":/images/Spell-Scroll-icon.png"), "Logs")
        self.tabWidget.addTab(self.documentation, QIcon(":/images/Spell-Book-icon.png"), "Documentation")

        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.tabWidget)
        self.setLayout(self.mainLayout)

        self.setWindowTitle(APP_NAME)
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.Dialog)
        self.resize(800, 600)

        self.systrayHintMsgShowed = False
        self.firstShow = True
        self.fromQuit = False

    def createProgramsList(self):
        self.programsListModel = QStandardItemModel(0, 1, self)
        self.programsList = QListView()
        self.programsList.setModel(self.programsListModel)
        self.programsListPage = QWidget()
        self.programsListLayout = QVBoxLayout()
        self.programsListButtons = QHBoxLayout()
        self.programsListButtonNew = QPushButton("New")
        self.programsListButtonDelete = QPushButton("Delete")
        self.programsListButtonEdit = QPushButton("Edit")
        self.programsListButtonSet = QPushButton("Set")
        self.programsListButtons.addWidget(self.programsListButtonNew)
        self.programsListButtons.addWidget(self.programsListButtonSet)
        self.programsListButtons.addWidget(self.programsListButtonEdit)
        self.programsListButtons.addWidget(self.programsListButtonDelete)
        self.programsListLayout.addLayout(self.programsListButtons)
        self.programsListLayout.addWidget(self.programsList)
        self.programsListPage.setLayout(self.programsListLayout)
        self.programsListButtonNew.clicked.connect(self.newProgram)
        self.programsListButtonEdit.clicked.connect(self.editProgram)
        self.programsListButtonDelete.clicked.connect(self.deleteProgram)
        self.programsListButtonSet.clicked.connect(self.setProgram)

    def createCodeEditPage(self):
        self.codeEditPage = QWidget()
        self.codeEditLayout = QVBoxLayout()
        self.codeEditNameBox = QHBoxLayout()
        self.codeEditNameBoxNameLabel = QLabel("Name:")
        self.codeEditNameBoxNameInput = QLineEdit()
        self.codeEditNameBoxSaveButton = QPushButton("Save")
        self.codeEditNameBoxCancelButton = QPushButton("Cancel")
        self.codeEditNameBox.addWidget(self.codeEditNameBoxNameLabel)
        self.codeEditNameBox.addWidget(self.codeEditNameBoxNameInput)
        self.codeEditNameBox.addWidget(self.codeEditNameBoxSaveButton)
        self.codeEditNameBox.addWidget(self.codeEditNameBoxCancelButton)
        self.codeEdit = QTextEdit()
        self.codeEditLayout.addLayout(self.codeEditNameBox)
        self.codeEditLayout.addWidget(self.codeEdit)
        self.codeEditPage.setLayout(self.codeEditLayout)
        self.codeEditLastCode = ''
        self.codeEditNameBoxSaveButton.clicked.connect(self.saveEditProgram)
        self.codeEditNameBoxCancelButton.clicked.connect(self.cancelEditProgram)

    def showEvent(self, event):
        super().showEvent(event)
        if self.firstShow:
            self.firstShow = False
            self.createWaitDialog()
            self.findKeyboard()

    def closeWaitDialog(self):
        time.sleep(1)
        self.waitDialog.close()

    @Slot()
    def newProgram(self):
        self.showNormal()
        self.tabWidget.setCurrentWidget(self.codeEditPage)
        self.codeEdit.setPlainText("")
        self.codeEditLastCode = ''
        self.codeEditNameBoxNameInput.setText("")
    
    @Slot()
    def editProgram(self):
        selected = self.programsList.selectedIndexes()
        if not selected:
            return
        selected = selected[0].data()
        loadProgram = LoadProgram(self.cmdSocket, selected)
        loadProgram.loaded.connect(self.programLoaded)
        loadProgram.start()
        self.showWaitDialog("Loading program ...")

    @Slot()
    def saveEditProgram(self):
        name = self.codeEditNameBoxNameInput.text()
        program = self.codeEdit.toPlainText()
        if not name:
            return
        editProgramWorker = EditProgram(self.cmdSocket, name, program)
        editProgramWorker.edited.connect(self.programSaved)
        editProgramWorker.start()
        self.showWaitDialog("Saving program ...")

    @Slot()
    def cancelEditProgram(self):
        self.codeEdit.setPlainText(self.codeEditLastCode)

    @Slot()
    def deleteProgram(self):
        selected = self.programsList.selectedIndexes()
        if not selected:
            return
        selected = selected[0].data()
        deleteWorker = DeleteProgram(self.cmdSocket, selected)
        deleteWorker.deleted.connect(self.programDeleted)
        deleteWorker.start()
        self.showWaitDialog("Deleting program ...")

    @Slot()
    def setProgram(self):
        selected = self.programsList.selectedIndexes()
        if not selected:
            return
        selected = selected[0].data()
        setWorker = SetProgram(self.cmdSocket, selected)
        setWorker.setDone.connect(self.programSet)
        setWorker.start()
        self.showWaitDialog("Setting program ...")

    @Slot(str, str)
    def programLoaded(self, name, program):
        self.closeWaitDialog()
        self.tabWidget.setCurrentWidget(self.codeEditPage)
        self.codeEdit.setPlainText(program)
        self.codeEditLastCode = program
        self.codeEditNameBoxNameInput.setText(name)

    @Slot(str)
    def programDeleted(self, name):
        self.updateProgramsList()

    @Slot(str)
    def programSet(self, name):
        self.updateProgramsList()

    @Slot(str)
    def programSaved(self, name):
        self.updateProgramsList()
        self.tabWidget.setCurrentWidget(self.programsListPage)

    def createWaitDialog(self):
        self.waitDialog = QDialog(self)
        self.waitDialogLayout = QHBoxLayout()
        self.waitDialogLabel = QLabel()
        self.waitDialogLayout.addWidget(self.waitDialogLabel)
        self.waitDialog.setLayout(self.waitDialogLayout)
        self.waitDialog.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint)

    def showWaitDialog(self, text='Please wait...'):
        self.waitDialogLabel.setText(text)
        self.waitDialog.exec_()

    def findKeyboard(self):
        find = ConnectKeyboard()
        find.connected.connect(self.keyboardConnected)
        find.start()
        self.showWaitDialog('Finding and connecting Fruit2Pi Keyboard ...')

    @Slot(BluetoothSocket)
    def keyboardConnected(self, socket):
        self.cmdSocket = socket
        self.updateProgramsList()
    
    def updateProgramsList(self):
        self.listProgram = ListProgram(self.cmdSocket)
        self.listProgram.listed.connect(self.programListUpdated)
        self.listProgram.start()
    
    @Slot(list, str)
    def programListUpdated(self, programs, current_program):
        print(programs)
        print(current_program)
        self.closeWaitDialog()
        self.programsListModel.clear()
        for p in programs:
            item = QStandardItem(p)
            if p == current_program:
                item.setForeground(QBrush(QColor(0, 0, 255, 127)))
            self.programsListModel.appendRow(item)

    def setVisible(self, visible):
        super().setVisible(visible)

    def closeEvent(self, event):
        if self.fromQuit:
            return
        if not event.spontaneous() or not self.isVisible():
            return
        if not self.systrayHintMsgShowed:
            self.systrayHintMsgShowed = True
            icon = QIcon(":/images/yammi-banana-icon.png")
            self.trayIcon.showMessage(APP_NAME,
                                      "Running on background"
                                      "To quit, choose <b>Quit</b> in the icon menu",
                                      icon,
                                      5000
                                      )
        self.hide()
        event.ignore()

    @Slot(str)
    def iconActivated(self, reason):
        print(reason)
        if reason == QSystemTrayIcon.Trigger:
            self.showNormal()
        if reason == QSystemTrayIcon.DoubleClick:
            self.showNormal()

    @Slot()
    def showProgramsPage(self):
        self.showNormal()
        self.tabWidget.setCurrentWidget(self.programsListPage)

    @Slot()
    def showLogsPage(self):
        self.showNormal()
        self.tabWidget.setCurrentWidget(self.logsPage)
    
    @Slot()
    def showDocumentation(self):
        self.showNormal()
        self.tabWidget.setCurrentWidget(self.documentation)

    @Slot()
    def quit(self):
        self.fromQuit = True
        qApp.quit()

    def createTrayIcon(self):
        self.showProgramsAction = QAction("Programs", self)
        self.showProgramsAction.triggered.connect(self.showProgramsPage)
        self.showNewProgramAction = QAction("New Program", self)
        self.showNewProgramAction.triggered.connect(self.newProgram)
        self.showSetProgramAction = QAction("Logs", self)
        self.showSetProgramAction.triggered.connect(self.showLogsPage)
        self.showDocumentationAction = QAction("Documentation", self)
        self.showDocumentationAction.triggered.connect(self.showDocumentation)
        self.quitAction = QAction("Quit", self)
        self.quitAction.triggered.connect(self.quit)

        self.trayIconMenu = QMenu(self)
        self.trayIconMenu.addAction(self.showProgramsAction)
        self.trayIconMenu.addAction(self.showSetProgramAction)
        self.trayIconMenu.addAction(self.showNewProgramAction)
        self.trayIconMenu.addAction(self.showDocumentationAction)
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(self.quitAction)
        self.trayIcon = QSystemTrayIcon(self)

        self.trayIcon.setContextMenu(self.trayIconMenu)
        self.trayIcon.activated.connect(self.iconActivated)
        self.trayIcon.setIcon(QIcon(":/images/yammi-banana-icon.png"))
        self.trayIcon.show()
Exemple #23
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(671, 496)
        self.help = QAction(MainWindow)
        self.help.setObjectName(u"help")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.log_text = QTextEdit(self.centralwidget)
        self.log_text.setObjectName(u"log_text")
        self.log_text.setGeometry(QRect(0, 190, 671, 291))
        self.labe = QLabel(self.centralwidget)
        self.labe.setObjectName(u"labe")
        self.labe.setGeometry(QRect(30, 20, 54, 12))
        self.ssid = QLineEdit(self.centralwidget)
        self.ssid.setObjectName(u"ssid")
        self.ssid.setGeometry(QRect(70, 20, 131, 20))
        self.time = QLineEdit(self.centralwidget)
        self.time.setObjectName(u"time")
        self.time.setGeometry(QRect(540, 20, 91, 20))
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setObjectName(u"label_2")
        self.label_2.setGeometry(QRect(470, 20, 54, 12))
        self.password = QLineEdit(self.centralwidget)
        self.password.setObjectName(u"password")
        self.password.setGeometry(QRect(310, 20, 131, 20))
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setObjectName(u"label_3")
        self.label_3.setGeometry(QRect(240, 20, 54, 12))
        self.connect = QPushButton(self.centralwidget)
        self.connect.setObjectName(u"connect")
        self.connect.setGeometry(QRect(140, 60, 75, 23))
        self.disconnect = QPushButton(self.centralwidget)
        self.disconnect.setObjectName(u"disconnect")
        self.disconnect.setGeometry(QRect(250, 60, 75, 23))
        self.labe_2 = QLabel(self.centralwidget)
        self.labe_2.setObjectName(u"labe_2")
        self.labe_2.setGeometry(QRect(30, 120, 91, 16))
        self.cur_ssid = QTextEdit(self.centralwidget)
        self.cur_ssid.setObjectName(u"cur_ssid")
        self.cur_ssid.setGeometry(QRect(140, 110, 241, 31))
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(30, 160, 101, 16))
        self.interface_name = QTextEdit(self.centralwidget)
        self.interface_name.setObjectName(u"interface_name")
        self.interface_name.setGeometry(QRect(140, 150, 241, 31))
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setObjectName(u"label_4")
        self.label_4.setGeometry(QRect(450, 70, 54, 12))
        self.frequency = QLineEdit(self.centralwidget)
        self.frequency.setObjectName(u"frequency")
        self.frequency.setGeometry(QRect(540, 70, 91, 20))
        self.test = QPushButton(self.centralwidget)
        self.test.setObjectName(u"test")
        self.test.setGeometry(QRect(550, 110, 75, 23))
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setObjectName(u"label_5")
        self.label_5.setGeometry(QRect(470, 70, 61, 16))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 671, 22))
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName(u"menuFile")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menuFile.menuAction())
        self.menuFile.addAction(self.help)
        self.menuFile.addSeparator()

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", u"WIFI-Test", None))
        self.help.setText(
            QCoreApplication.translate("MainWindow",
                                       u"\u5e2e\u52a9\u4fe1\u606f", None))
        self.labe.setText(
            QCoreApplication.translate("MainWindow", u"SSID:", None))
        self.label_2.setText(
            QCoreApplication.translate("MainWindow", u"Time(s):", None))
        self.label_3.setText(
            QCoreApplication.translate("MainWindow", u"Password:"******"MainWindow", u"Connect", None))
        self.disconnect.setText(
            QCoreApplication.translate("MainWindow", u"Disconnect", None))
        self.labe_2.setText(
            QCoreApplication.translate("MainWindow", u"Connected SSID:", None))
        self.label.setText(
            QCoreApplication.translate("MainWindow", u"Interface Name:", None))
        self.label_4.setText("")
        self.test.setText(
            QCoreApplication.translate("MainWindow", u"Test", None))
        self.label_5.setText(
            QCoreApplication.translate("MainWindow", u"Frequency:", None))
        self.menuFile.setTitle(
            QCoreApplication.translate("MainWindow", u"help", None))
Exemple #24
0
class OperationsWidget(MdiWidget, Ui_OperationsWidget):
    dbUpdated = Signal()

    def __init__(self, parent=None):
        MdiWidget.__init__(self, parent)
        self.setupUi(self)

        self.current_index = None  # this is used in onOperationContextMenu() to track item for menu

        # Set icons
        self.NewOperationBtn.setIcon(load_icon("new.png"))
        self.CopyOperationBtn.setIcon(load_icon("copy.png"))
        self.DeleteOperationBtn.setIcon(load_icon("delete.png"))

        # Operations view context menu
        self.contextMenu = QMenu(self.OperationsTableView)
        self.actionReconcile = QAction(load_icon("reconcile.png"),
                                       self.tr("Reconcile"), self)
        self.actionCopy = QAction(load_icon("copy.png"), self.tr("Copy"), self)
        self.actionDelete = QAction(load_icon("delete.png"), self.tr("Delete"),
                                    self)
        self.contextMenu.addAction(self.actionReconcile)
        self.contextMenu.addSeparator()
        self.contextMenu.addAction(self.actionCopy)
        self.contextMenu.addAction(self.actionDelete)

        # Customize UI configuration
        self.balances_model = BalancesModel(self.BalancesTableView)
        self.BalancesTableView.setModel(self.balances_model)
        self.balances_model.configureView()

        self.operations_model = OperationsModel(self.OperationsTableView)
        self.OperationsTableView.setModel(self.operations_model)
        self.operations_model.configureView()
        self.OperationsTableView.setContextMenuPolicy(Qt.CustomContextMenu)

        self.connect_signals_and_slots()

        self.NewOperationMenu = QMenu()
        for i in range(self.OperationsTabs.count()):
            if hasattr(self.OperationsTabs.widget(i), "isCustom"):
                self.OperationsTabs.widget(i).dbUpdated.connect(self.dbUpdated)
                self.OperationsTabs.widget(i).dbUpdated.connect(
                    self.operations_model.refresh)
                self.NewOperationMenu.addAction(
                    self.OperationsTabs.widget(i).name,
                    partial(self.createOperation, i))
        self.NewOperationBtn.setMenu(self.NewOperationMenu)

        # Setup balance and holdings parameters
        current_time = QDateTime.currentDateTime()
        current_time.setTimeSpec(
            Qt.UTC)  # We use UTC everywhere so need to force TZ info
        self.BalanceDate.setDateTime(current_time)
        self.BalancesCurrencyCombo.setIndex(
            JalSettings().getValue('BaseCurrency'))

        self.OperationsTabs.setCurrentIndex(LedgerTransaction.NA)
        self.OperationsTableView.selectRow(0)
        self.DateRange.setCurrentIndex(0)

    def connect_signals_and_slots(self):
        self.actionReconcile.triggered.connect(
            self.reconcileAtCurrentOperation)
        self.BalanceDate.dateChanged.connect(
            self.BalancesTableView.model().setDate)
        self.BalancesCurrencyCombo.changed.connect(
            self.BalancesTableView.model().setCurrency)
        self.BalancesTableView.doubleClicked.connect(self.OnBalanceDoubleClick)
        self.ShowInactiveCheckBox.stateChanged.connect(
            self.BalancesTableView.model().toggleActive)
        self.DateRange.changed.connect(self.operations_model.setDateRange)
        self.ChooseAccountBtn.changed.connect(
            self.OperationsTableView.model().setAccount)
        self.SearchString.editingFinished.connect(self.updateOperationsFilter)
        self.OperationsTableView.selectionModel().selectionChanged.connect(
            self.OnOperationChange)
        self.OperationsTableView.customContextMenuRequested.connect(
            self.onOperationContextMenu)
        self.DeleteOperationBtn.clicked.connect(self.deleteOperation)
        self.actionDelete.triggered.connect(self.deleteOperation)
        self.CopyOperationBtn.clicked.connect(self.copyOperation)
        self.actionCopy.triggered.connect(self.copyOperation)

    @Slot()
    def deleteOperation(self):
        if QMessageBox().warning(
                None, self.tr("Confirmation"),
                self.tr("Are you sure to delete selected transacion(s)?"),
                QMessageBox.Yes, QMessageBox.No) == QMessageBox.No:
            return
        rows = []
        for index in self.OperationsTableView.selectionModel().selectedRows():
            rows.append(index.row())
        self.operations_model.deleteRows(rows)
        self.dbUpdated.emit()

    @Slot()
    def createOperation(self, operation_type):
        self.checkForUncommittedChanges()
        self.OperationsTabs.widget(operation_type).createNew(
            account_id=self.operations_model.getAccount())
        self.OperationsTabs.setCurrentIndex(operation_type)

    @Slot()
    def copyOperation(self):
        operation_type = self.OperationsTabs.currentIndex()
        if operation_type == LedgerTransaction.NA:
            return
        self.checkForUncommittedChanges()
        self.OperationsTabs.widget(operation_type).copyNew()

    @Slot()
    def updateOperationsFilter(self):
        self.OperationsTableView.model().filterText(self.SearchString.text())

    @Slot()
    def OnBalanceDoubleClick(self, index):
        self.ChooseAccountBtn.account_id = index.model().getAccountId(
            index.row())

    @Slot()
    def OnOperationChange(self, selected, _deselected):
        self.checkForUncommittedChanges()

        if len(self.OperationsTableView.selectionModel().selectedRows()) != 1:
            self.OperationsTabs.setCurrentIndex(LedgerTransaction.NA)
        else:
            idx = selected.indexes()
            if idx:
                selected_row = idx[0].row()
                operation_type, operation_id = self.OperationsTableView.model(
                ).get_operation(selected_row)
                self.OperationsTabs.setCurrentIndex(operation_type)
                self.OperationsTabs.widget(operation_type).setId(operation_id)

    @Slot()
    def checkForUncommittedChanges(self):
        for i in range(self.OperationsTabs.count()):
            if hasattr(self.OperationsTabs.widget(i),
                       "isCustom") and self.OperationsTabs.widget(i).modified:
                reply = QMessageBox().warning(
                    None, self.tr("You have unsaved changes"),
                    self.OperationsTabs.widget(i).name + self.tr(
                        " has uncommitted changes,\ndo you want to save it?"),
                    QMessageBox.Yes, QMessageBox.No)
                if reply == QMessageBox.Yes:
                    self.OperationsTabs.widget(i).saveChanges()
                else:
                    self.OperationsTabs.widget(i).revertChanges()

    @Slot()
    def onOperationContextMenu(self, pos):
        self.current_index = self.OperationsTableView.indexAt(pos)
        if len(self.OperationsTableView.selectionModel().selectedRows()) != 1:
            self.actionReconcile.setEnabled(False)
            self.actionCopy.setEnabled(False)
        else:
            self.actionReconcile.setEnabled(True)
            self.actionCopy.setEnabled(True)
        self.contextMenu.popup(
            self.OperationsTableView.viewport().mapToGlobal(pos))

    @Slot()
    def reconcileAtCurrentOperation(self):
        idx = self.operations_model.index(
            self.current_index.row(),
            0)  # we need only row to address fields by name
        timestamp = self.operations_model.data(idx,
                                               Qt.UserRole,
                                               field="timestamp")
        account_id = self.operations_model.data(idx,
                                                Qt.UserRole,
                                                field="account_id")
        JalDB().reconcile_account(account_id, timestamp)
        self.operations_model.refresh()

    def refresh(self):
        self.balances_model.update()