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)
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)
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())
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()
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))
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)
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))
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)
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))
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()
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)
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))
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))
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))
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)
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())
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]}" )
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))
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()
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))
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()