Beispiel #1
0
    def outputContextMenu(self, listview: QListView, pos: QPoint):
        current_model = listview.model()
        menu = QMenu()
        edit_action = QAction(
            "Edit clicked" if len(listview.selectedIndexes()) > 1 else "Edit",
            menu)
        edit_action.triggered.connect(self.editCurrentTarget)
        menu.addAction(edit_action)

        delete_action = QAction("Remove", menu)
        delete_action.triggered.connect(lambda: current_model.__delitem__(
            [i.row() for i in listview.selectedIndexes()]))
        menu.addAction(delete_action)

        selected_istemp = current_model[
            listview.currentIndex().row()].temporary
        mark_temp_action = QAction("Mark temp", menu)
        mark_temp_action.setCheckable(True)
        mark_temp_action.setChecked(selected_istemp)
        mark_temp_action.triggered.connect(lambda: [
            current_model[i.row()].switch_temporary(not selected_istemp)
            for i in listview.selectedIndexes()
        ])
        menu.addAction(mark_temp_action)

        self.addTargetActions(menu)
        menu.exec_(listview.mapToGlobal(pos))
Beispiel #2
0
    def refreshMenusButtonsStatusBar(self, reset: bool = False) -> None:
        if not self._database:
            self.statusLabel.setText('No database opened')
        else:
            protein = f'{self._database.proteins_count} protein{"s" if self._database.proteins_count > 1 else ""}'
            sequence = f'{self._database.sequences_count} sequence{"s" if self._database.sequences_count > 1 else ""}'
            self.statusLabel.setText(', '.join(
                (str(self._database.path), protein, sequence)))

        if reset:
            self.proteinsSearchLineEdit.setText('')
            self.proteinsTableWidget.setRowCount(0)

        database_opened = bool(self._database)
        digestions_available = database_opened and bool(
            self._database.available_digestions)
        database_is_coherent = database_opened and bool(
            self._database.is_coherent_with_enzymes_collection)
        self.mainSplitter.setEnabled(database_opened)
        self.mainSplitterBottomWidget.setVisible(digestions_available)
        self.databaseMenu.setEnabled(database_opened and database_is_coherent)
        self.workingDigestionMenu.setEnabled(digestions_available)

        if digestions_available:
            if self._working_digestion_action_group.actions():
                current_digestion_settings = self._working_digestion_action_group.checkedAction(
                ).data()
            else:
                current_digestion_settings = None

            new_digestion_settings = None

            for action in self._working_digestion_action_group.actions():
                self._working_digestion_action_group.removeAction(action)
                action.deleteLater()

            for i, digestion in enumerate(self.database.available_digestions):
                action_title = (
                    f'{digestion.enzyme} - {digestion.missed_cleavages} missed cleavage'
                    f'{"s" if digestion.missed_cleavages > 1 else ""}')

                # Adding action to working digestion menu
                action = QAction(action_title,
                                 self._working_digestion_action_group)
                action.setCheckable(True)
                action.setData(digestion)
                self.workingDigestionMenu.addAction(action)

                if digestion == current_digestion_settings or not i:
                    new_digestion_settings = digestion
                    action.setChecked(True)

            # Refreshing if needed
            if current_digestion_settings != new_digestion_settings:
                self.refreshPeptidesTableWidget()
Beispiel #3
0
    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)
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        label = QLabel("Hello!")
        label.setAlignment(Qt.AlignCenter)

        self.setCentralWidget(label)

        toolbar = QToolBar("My main toolbar")
        self.addToolBar(toolbar)

        button_action = QAction("Your button", self)
        button_action.setStatusTip("This is your button")
        button_action.triggered.connect(self.onMyToolBarButtonClick)
        button_action.setCheckable(True)
        toolbar.addAction(button_action)

        self.setStatusBar(QStatusBar(self))
Beispiel #5
0
class UIBuilder(object):
    """Constructs the UI for a main application window"""
    def setup(self, main_window: QMainWindow) -> None:
        """
        Initialize the UI.

        :param main_window: An instance of the `QMainWindow` class.
        :type main_window: :class:`QMainWindow`
        """
        main_window.setObjectName("main_window")
        main_window.setWindowTitle("TeaseAI")
        main_window.resize(1137, 751)
        main_window.setSizePolicy(*EXP_EXP)
        main_window.setTabShape(QTabWidget.Rounded)

        self.menubar = QMenuBar(main_window)
        self.menubar.setObjectName("menubar")
        self.menubar.setGeometry(0, 0, 1137, 23)
        self.file_menu = QMenu("File", self.menubar)
        self.file_menu.setObjectName("file_men")
        self.server_menu = QMenu("Server", self.menubar)
        self.server_menu.setObjectName("server_men")
        self.options_menu = QMenu("Options", self.menubar)
        self.options_menu.setObjectName("options_men")
        self.media_menu = QMenu("Media", self.menubar)
        self.media_menu.setObjectName("media_men")
        main_window.setMenuBar(self.menubar)

        self.exit = QAction("Exit", main_window)
        self.exit.setObjectName("exit")
        self.start_server = QAction("Start Server", main_window)
        self.start_server.setObjectName("start_server")
        self.connect_server = QAction("Connect to Server", main_window)
        self.connect_server.setObjectName("connect_server")
        self.kill_server = QAction("Kill Server", main_window)
        self.kill_server.setObjectName("kill_server")
        self.options = QAction("Options", main_window)
        self.options.setObjectName("options")
        self.start_webcam = QAction("Start Webcam", main_window)
        self.start_webcam.setObjectName("start_webcam")
        self.start_webcam.setCheckable(False)
        self.centralwidget = QWidget(main_window)
        self.centralwidget.setObjectName("centralwidget")
        self.centralwidget.setContentsMargins(QMargins(0, 0, 0, 0))
        self.centralwidget.setSizePolicy(*EXP_EXP)
        self.grid_layout = QGridLayout(self.centralwidget)

        self.media = QFrame(self.centralwidget)
        self.media.setObjectName("media")
        self.media.setSizePolicy(*EXP_EXP)
        self.media.setMinimumSize(200, 200)
        self.media.setStyleSheet("background: #000;")
        self.grid_layout.addWidget(self.media, 0, 0, 5, 1)

        self.users_label = QLabel(" Online users:", self.centralwidget)
        self.users_label.setObjectName("users_label")
        self.users_label.setMinimumSize(300, 15)
        self.users_label.setMaximumSize(300, 15)
        self.grid_layout.addWidget(self.users_label, 0, 1, 1, 2)

        self.online = QPlainTextEdit("", self.centralwidget)
        self.online.setObjectName("online")
        self.online.setSizePolicy(*FIX_FIX)
        self.online.setMinimumSize(300, 50)
        self.online.setMaximumSize(300, 50)
        self.online.setStyleSheet("margin-left: 3px;" + SUNKEN)
        self.online.setLineWidth(2)
        self.online.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.online.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.online.setSizeAdjustPolicy(QAbstractScrollArea.AdjustIgnored)
        self.online.setReadOnly(True)
        self.grid_layout.addWidget(self.online, 1, 1, 1, 2)

        self.chat = QPlainTextEdit("", self.centralwidget)
        self.chat.setObjectName("chat")
        self.chat.setSizePolicy(*FIX_EXP)
        self.chat.setMinimumSize(300, 0)
        self.chat.setMaximumSize(300, INFINITE)
        self.chat.setStyleSheet("margin-bottom: 3px; margin-top: 8px;" +
                                SUNKEN)
        self.chat.setLineWidth(2)
        self.chat.setReadOnly(True)
        self.chat.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.grid_layout.addWidget(self.chat, 2, 1, 1, 2)

        self.input = QLineEdit(self.centralwidget)
        self.input.setObjectName("input")
        self.input.setSizePolicy(*FIX_FIX)
        self.input.setMinimumSize(224, 30)
        self.input.setMaximumSize(224, 30)
        self.input.setStyleSheet(SUNKEN)
        self.input.setEchoMode(QLineEdit.Normal)
        self.input.setClearButtonEnabled(True)
        self.grid_layout.addWidget(self.input, 3, 1, 1, 1)

        self.submit = QPushButton("Submit", self.centralwidget)
        self.submit.setObjectName("submit")
        self.submit.setSizePolicy(*FIX_FIX)
        self.submit.setMinimumSize(70, 30)
        self.submit.setMaximumSize(70, 30)
        self.grid_layout.addWidget(self.submit, 3, 2, 1, 1)

        self.tabs = QTabWidget(self.centralwidget)
        self.tabs.setObjectName("tabs")
        self.tabs.setSizePolicy(*FIX_FIX)
        self.tabs.setMinimumSize(300, 150)
        self.tabs.setMaximumSize(300, 150)
        self.tab = QWidget()
        self.tab.setObjectName("tab")
        self.tabs.addTab(self.tab, "Actions")
        self.tab2 = QWidget()
        self.tab2.setObjectName("tab2")
        self.tabs.addTab(self.tab2, "My Media")
        self.tab3 = QWidget()
        self.tab3.setObjectName("tab3")
        self.tab3.setSizePolicy(*FIX_FIX)
        self.grid_layout2 = QGridLayout(self.tab3)
        self.grid_layout2.setHorizontalSpacing(0)
        self.grid_layout2.setVerticalSpacing(3)
        self.grid_layout2.setContentsMargins(3, -1, 3, -1)
        self.server_folder = QLineEdit(self.tab3)
        self.server_folder.setObjectName("server_folder")

        self.grid_layout2.addWidget(self.server_folder, 0, 0, 1, 3)
        self.srv_browse = QPushButton("BROWSE", self.tab3)
        self.srv_browse.setObjectName("srv_browse")
        self.srv_browse.setStyleSheet("background: transparent;\n"
                                      "	color: #4d4940;\n"
                                      "    font-size: 8pt;\n"
                                      "	font-weight: 450;\n"
                                      "    padding: 6px;\n")

        self.grid_layout2.addWidget(self.srv_browse, 0, 3, 1, 1)

        self.back_button = QPushButton("", self.tab3)
        self.back_button.setObjectName("back_button")
        self.back_button.setSizePolicy(*FIX_FIX)
        self.back_button.setMaximumSize(SEVENTY_FIVE)
        self.back_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.back_button.setStyleSheet("border: 0;\n"
                                       "background: transparent;")
        icon = QIcon()
        icon.addFile(":/newPrefix/back_button.png", SIXTY_FOUR, QIcon.Normal,
                     QIcon.Off)
        self.back_button.setIcon(icon)
        self.back_button.setIconSize(SIXTY_FOUR)

        self.grid_layout2.addWidget(self.back_button, 1, 0, 1, 1)

        self.play_button = QPushButton("", self.tab3)
        self.play_button.setObjectName("play_button")
        self.play_button.setSizePolicy(*FIX_FIX)
        self.play_button.setMaximumSize(SEVENTY_FIVE)
        self.play_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.play_button.setStyleSheet("border: 0;\n"
                                       "background: transparent;")
        icon1 = QIcon()
        icon1.addFile(":/newPrefix/play_button.png", SIXTY_FOUR, QIcon.Normal,
                      QIcon.Off)
        self.play_button.setIcon(icon1)
        self.play_button.setIconSize(SIXTY_FOUR)

        self.grid_layout2.addWidget(self.play_button, 1, 1, 1, 1)

        self.stop_button = QPushButton("", self.tab3)
        self.stop_button.setObjectName("stop_button")
        self.stop_button.setSizePolicy(*FIX_FIX)
        self.stop_button.setMaximumSize(SEVENTY_FIVE)
        self.stop_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.stop_button.setStyleSheet("border: 0;\n"
                                       "background: transparent;")
        icon2 = QIcon()
        icon2.addFile(":/newPrefix/stop_button.png", SIXTY_FOUR, QIcon.Normal,
                      QIcon.Off)
        self.stop_button.setIcon(icon2)
        self.stop_button.setIconSize(SIXTY_FOUR)

        self.grid_layout2.addWidget(self.stop_button, 1, 2, 1, 1)

        self.fast_forward = QPushButton("", self.tab3)
        self.fast_forward.setObjectName("fast_forward")
        self.fast_forward.setSizePolicy(*FIX_FIX)
        self.fast_forward.setMaximumSize(SEVENTY_FIVE)
        self.fast_forward.setCursor(QCursor(Qt.PointingHandCursor))
        self.fast_forward.setStyleSheet("border: 0;\n"
                                        "background: transparent;")
        icon3 = QIcon()
        icon3.addFile(":/newPrefix/fast_forward.png", SIXTY_FOUR, QIcon.Normal,
                      QIcon.Off)
        self.fast_forward.setIcon(icon3)
        self.fast_forward.setIconSize(SIXTY_FOUR)

        self.grid_layout2.addWidget(self.fast_forward, 1, 3, 1, 1)

        self.tabs.addTab(self.tab3, "Server Media")
        self.grid_layout.addWidget(self.tabs, 4, 1, 1, 2)
        main_window.setCentralWidget(self.centralwidget)

        self.statusbar = QStatusBar(main_window)
        self.statusbar.setObjectName("statusbar")
        self.statusbar.setEnabled(True)
        self.statusbar.setStyleSheet("margin-bottom: 5px;")
        self.statusbar.setSizePolicy(*EXP_FIX)
        self.statusbar.setMinimumSize(INFINITE, 30)
        self.statusbar.setMaximumSize(INFINITE, 30)
        self.statusbar.setSizeGripEnabled(False)
        main_window.setStatusBar(self.statusbar)

        self.menubar.addAction(self.file_menu.menuAction())
        self.menubar.addAction(self.server_menu.menuAction())
        self.menubar.addAction(self.options_menu.menuAction())
        self.menubar.addAction(self.media_menu.menuAction())
        self.file_menu.addAction(self.exit)
        self.server_menu.addAction(self.start_server)
        self.server_menu.addAction(self.connect_server)
        self.server_menu.addAction(self.kill_server)
        self.options_menu.addAction(self.options)
        self.media_menu.addAction(self.start_webcam)
        self.exit.triggered.connect(main_window.close)
        self.tabs.setCurrentIndex(0)
        QMetaObject.connectSlotsByName(main_window)
        self.exit.setStatusTip("Exit the program.")
        self.start_server.setStatusTip("Initialize a local server instance.")
        self.connect_server.setStatusTip("Connect to a remote server.")
        self.kill_server.setStatusTip("Shut down a running local server.")
        self.options.setStatusTip("Open the options menu.")
        self.start_webcam.setStatusTip("Start webcam feed.")
        self.tooltip = QLabel("", self.statusbar)
        tooltip_policy = QSizePolicy(*EXP_FIX)
        tooltip_policy.setHorizontalStretch(100)
        self.tooltip.setSizePolicy(tooltip_policy)
        self.tooltip.setMinimumSize(INFINITE, 26)
        self.tooltip.setMaximumSize(INFINITE, 26)
        self.server_status = QLabel("Server status:", self.statusbar)
        self.server_status.setSizePolicy(*FIX_FIX)
        self.server_status.setMinimumSize(300, 26)
        self.server_status.setMaximumSize(300, 26)
        self.client_status = QLabel("Client status:", self.statusbar)
        self.client_status.setSizePolicy(*FIX_FIX)
        self.client_status.setMinimumSize(302, 26)
        self.client_status.setMaximumSize(302, 26)
        self.statusbar.addPermanentWidget(self.tooltip)
        self.statusbar.addPermanentWidget(self.server_status)
        self.statusbar.addPermanentWidget(self.client_status)
        self.tooltip.setStyleSheet(SUNKEN + "margin-left: 4px;\
            margin-right: 0px;")
        self.client_status.setStyleSheet(SUNKEN + "margin-right: 7px;")
        self.server_status.setStyleSheet(SUNKEN + "margin-right: 2px;\
            margin-left: 2px;")
        self.statusbar.messageChanged.connect(main_window.status_tip)
Beispiel #6
0
class MainWindow_Ui(QMainWindow):
    def __init__(self, persepolis_setting):
        super().__init__()
        # MainWindow
        self.persepolis_setting = persepolis_setting

        # add support for other languages
        locale = str(self.persepolis_setting.value('settings/locale'))
        QLocale.setDefault(QLocale(locale))
        self.translator = QTranslator()
        if self.translator.load(':/translations/locales/ui_' + locale, 'ts'):
            QCoreApplication.installTranslator(self.translator)

        # set ui direction
        ui_direction = self.persepolis_setting.value('ui_direction')

        if ui_direction == 'rtl':
            self.setLayoutDirection(Qt.RightToLeft)

        elif ui_direction in 'ltr':
            self.setLayoutDirection(Qt.LeftToRight)

        icons = ':/' + \
            str(self.persepolis_setting.value('settings/icons')) + '/'

        self.setWindowTitle(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "Persepolis Download Manager"))
        self.setWindowIcon(
            QIcon.fromTheme('persepolis', QIcon(':/persepolis.svg')))

        self.centralwidget = QWidget(self)
        self.verticalLayout = QVBoxLayout(self.centralwidget)

        # enable drag and drop
        self.setAcceptDrops(True)

        # frame
        self.frame = QFrame(self.centralwidget)

        # download_table_horizontalLayout
        download_table_horizontalLayout = QHBoxLayout()
        horizontal_splitter = QSplitter(Qt.Horizontal)

        vertical_splitter = QSplitter(Qt.Vertical)

        # category_tree
        self.category_tree_qwidget = QWidget(self)
        category_tree_verticalLayout = QVBoxLayout()
        self.category_tree = CategoryTreeView(self)
        category_tree_verticalLayout.addWidget(self.category_tree)

        self.category_tree_model = QStandardItemModel()
        self.category_tree.setModel(self.category_tree_model)
        category_table_header = [
            QCoreApplication.translate("mainwindow_ui_tr", 'Category')
        ]

        self.category_tree_model.setHorizontalHeaderLabels(
            category_table_header)
        self.category_tree.header().setStretchLastSection(True)

        self.category_tree.header().setDefaultAlignment(Qt.AlignCenter)

        # queue_panel
        self.queue_panel_widget = QWidget(self)

        queue_panel_verticalLayout_main = QVBoxLayout(self.queue_panel_widget)

        # queue_panel_show_button
        self.queue_panel_show_button = QPushButton(self)

        queue_panel_verticalLayout_main.addWidget(self.queue_panel_show_button)

        # queue_panel_widget_frame
        self.queue_panel_widget_frame = QFrame(self)
        self.queue_panel_widget_frame.setFrameShape(QFrame.StyledPanel)
        self.queue_panel_widget_frame.setFrameShadow(QFrame.Raised)

        queue_panel_verticalLayout_main.addWidget(
            self.queue_panel_widget_frame)

        queue_panel_verticalLayout = QVBoxLayout(self.queue_panel_widget_frame)
        queue_panel_verticalLayout_main.setContentsMargins(50, -1, 50, -1)

        # start_end_frame
        self.start_end_frame = QFrame(self)

        # start time
        start_verticalLayout = QVBoxLayout(self.start_end_frame)
        self.start_checkBox = QCheckBox(self)
        start_verticalLayout.addWidget(self.start_checkBox)

        self.start_frame = QFrame(self)
        self.start_frame.setFrameShape(QFrame.StyledPanel)
        self.start_frame.setFrameShadow(QFrame.Raised)

        start_frame_verticalLayout = QVBoxLayout(self.start_frame)

        self.start_time_qDataTimeEdit = MyQDateTimeEdit(self.start_frame)
        self.start_time_qDataTimeEdit.setDisplayFormat('H:mm')
        start_frame_verticalLayout.addWidget(self.start_time_qDataTimeEdit)

        start_verticalLayout.addWidget(self.start_frame)

        # end time
        self.end_checkBox = QCheckBox(self)
        start_verticalLayout.addWidget(self.end_checkBox)

        self.end_frame = QFrame(self)
        self.end_frame.setFrameShape(QFrame.StyledPanel)
        self.end_frame.setFrameShadow(QFrame.Raised)

        end_frame_verticalLayout = QVBoxLayout(self.end_frame)

        self.end_time_qDateTimeEdit = MyQDateTimeEdit(self.end_frame)
        self.end_time_qDateTimeEdit.setDisplayFormat('H:mm')
        end_frame_verticalLayout.addWidget(self.end_time_qDateTimeEdit)

        start_verticalLayout.addWidget(self.end_frame)

        self.reverse_checkBox = QCheckBox(self)
        start_verticalLayout.addWidget(self.reverse_checkBox)

        queue_panel_verticalLayout.addWidget(self.start_end_frame)

        # limit_after_frame
        self.limit_after_frame = QFrame(self)

        # limit_checkBox
        limit_verticalLayout = QVBoxLayout(self.limit_after_frame)
        self.limit_checkBox = QCheckBox(self)
        limit_verticalLayout.addWidget(self.limit_checkBox)

        # limit_frame
        self.limit_frame = QFrame(self)
        self.limit_frame.setFrameShape(QFrame.StyledPanel)
        self.limit_frame.setFrameShadow(QFrame.Raised)
        limit_verticalLayout.addWidget(self.limit_frame)

        limit_frame_verticalLayout = QVBoxLayout(self.limit_frame)

        # limit_spinBox
        limit_frame_horizontalLayout = QHBoxLayout()
        self.limit_spinBox = QDoubleSpinBox(self)
        self.limit_spinBox.setMinimum(1)
        self.limit_spinBox.setMaximum(1023)
        limit_frame_horizontalLayout.addWidget(self.limit_spinBox)

        # limit_comboBox
        self.limit_comboBox = QComboBox(self)
        self.limit_comboBox.addItem("")
        self.limit_comboBox.addItem("")
        limit_frame_horizontalLayout.addWidget(self.limit_comboBox)
        limit_frame_verticalLayout.addLayout(limit_frame_horizontalLayout)

        # limit_pushButton
        self.limit_pushButton = QPushButton(self)
        limit_frame_verticalLayout.addWidget(self.limit_pushButton)

        # after_checkBox
        self.after_checkBox = QCheckBox(self)
        limit_verticalLayout.addWidget(self.after_checkBox)

        # after_frame
        self.after_frame = QFrame(self)
        self.after_frame.setFrameShape(QFrame.StyledPanel)
        self.after_frame.setFrameShadow(QFrame.Raised)
        limit_verticalLayout.addWidget(self.after_frame)

        after_frame_verticalLayout = QVBoxLayout(self.after_frame)

        # after_comboBox
        self.after_comboBox = QComboBox(self)
        self.after_comboBox.addItem("")

        after_frame_verticalLayout.addWidget(self.after_comboBox)

        # after_pushButton
        self.after_pushButton = QPushButton(self)
        after_frame_verticalLayout.addWidget(self.after_pushButton)

        queue_panel_verticalLayout.addWidget(self.limit_after_frame)
        category_tree_verticalLayout.addWidget(self.queue_panel_widget)

        # keep_awake_checkBox
        self.keep_awake_checkBox = QCheckBox(self)
        queue_panel_verticalLayout.addWidget(self.keep_awake_checkBox)

        self.category_tree_qwidget.setLayout(category_tree_verticalLayout)
        horizontal_splitter.addWidget(self.category_tree_qwidget)

        # download table widget
        self.download_table_content_widget = QWidget(self)
        download_table_content_widget_verticalLayout = QVBoxLayout(
            self.download_table_content_widget)

        # download_table
        self.download_table = DownloadTableWidget(self)
        vertical_splitter.addWidget(self.download_table)

        horizontal_splitter.addWidget(self.download_table_content_widget)

        self.download_table.setColumnCount(13)
        self.download_table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.download_table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.download_table.verticalHeader().hide()

        # hide column of GID and column of link.
        self.download_table.setColumnHidden(8, True)
        self.download_table.setColumnHidden(9, True)

        download_table_header = [
            QCoreApplication.translate("mainwindow_ui_tr", 'File Name'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Status'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Size'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Downloaded'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Percentage'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Connections'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Transfer Rate'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Estimated Time Left'), 'Gid',
            QCoreApplication.translate("mainwindow_ui_tr", 'Link'),
            QCoreApplication.translate("mainwindow_ui_tr", 'First Try Date'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Last Try Date'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Category')
        ]

        self.download_table.setHorizontalHeaderLabels(download_table_header)

        # fixing the size of download_table when window is Maximized!
        self.download_table.horizontalHeader().setSectionResizeMode(
            QHeaderView.ResizeMode.Interactive)
        self.download_table.horizontalHeader().setStretchLastSection(True)

        horizontal_splitter.setStretchFactor(0, 3)  # category_tree width
        horizontal_splitter.setStretchFactor(1, 10)  # ratio of tables's width

        # video_finder_widget
        self.video_finder_widget = QWidget(self)
        video_finder_horizontalLayout = QHBoxLayout(self.video_finder_widget)

        self.muxing_pushButton = QPushButton(self)
        self.muxing_pushButton.setIcon(QIcon(icons + 'video_finder'))
        video_finder_horizontalLayout.addWidget(self.muxing_pushButton)
        video_finder_horizontalLayout.addSpacing(20)

        video_audio_verticalLayout = QVBoxLayout()

        self.video_label = QLabel(self)
        video_audio_verticalLayout.addWidget(self.video_label)

        self.audio_label = QLabel(self)
        video_audio_verticalLayout.addWidget(self.audio_label)
        video_finder_horizontalLayout.addLayout(video_audio_verticalLayout)

        status_muxing_verticalLayout = QVBoxLayout()

        self.video_finder_status_label = QLabel(self)
        status_muxing_verticalLayout.addWidget(self.video_finder_status_label)

        self.muxing_status_label = QLabel(self)
        status_muxing_verticalLayout.addWidget(self.muxing_status_label)
        video_finder_horizontalLayout.addLayout(status_muxing_verticalLayout)

        vertical_splitter.addWidget(self.video_finder_widget)

        download_table_content_widget_verticalLayout.addWidget(
            vertical_splitter)

        download_table_horizontalLayout.addWidget(horizontal_splitter)

        self.frame.setLayout(download_table_horizontalLayout)

        self.verticalLayout.addWidget(self.frame)

        self.setCentralWidget(self.centralwidget)

        # menubar
        self.menubar = QMenuBar(self)
        self.menubar.setGeometry(QRect(0, 0, 600, 24))
        self.setMenuBar(self.menubar)
        fileMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&File'))
        editMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&Edit'))
        viewMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&View'))
        downloadMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&Download'))
        queueMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&Queue'))
        videoFinderMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", 'V&ideo Finder'))
        helpMenu = self.menubar.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", '&Help'))

        # viewMenu submenus
        sortMenu = viewMenu.addMenu(
            QCoreApplication.translate("mainwindow_ui_tr", 'Sort by'))

        # statusbar
        self.statusbar = QStatusBar(self)
        self.setStatusBar(self.statusbar)
        self.statusbar.showMessage(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "Persepolis Download Manager"))

        # toolBar
        self.toolBar2 = QToolBar(self)
        self.addToolBar(Qt.TopToolBarArea, self.toolBar2)
        self.toolBar2.setWindowTitle(
            QCoreApplication.translate("mainwindow_ui_tr", 'Menu'))
        self.toolBar2.setFloatable(False)
        self.toolBar2.setMovable(False)

        self.toolBar = QToolBar(self)
        self.addToolBar(Qt.TopToolBarArea, self.toolBar)
        self.toolBar.setWindowTitle(
            QCoreApplication.translate("mainwindow_ui_tr", 'Toolbar'))
        self.toolBar.setFloatable(False)
        self.toolBar.setMovable(False)

        #toolBar and menubar and actions
        self.persepolis_setting.beginGroup('settings/shortcuts')

        # videoFinderAddLinkAction
        self.videoFinderAddLinkAction = QAction(
            QIcon(icons + 'video_finder'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Find Video Links...'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Download video or audio from Youtube, Vimeo, etc.'),
            triggered=self.showVideoFinderAddLinkWindow)

        self.videoFinderAddLinkAction_shortcut = QShortcut(
            self.persepolis_setting.value('video_finder_shortcut'), self,
            self.showVideoFinderAddLinkWindow)

        videoFinderMenu.addAction(self.videoFinderAddLinkAction)

        # stopAllAction
        self.stopAllAction = QAction(QIcon(icons + 'stop_all'),
                                     QCoreApplication.translate(
                                         "mainwindow_ui_tr",
                                         'Stop All Active Downloads'),
                                     self,
                                     statusTip='Stop All Active Downloads',
                                     triggered=self.stopAllDownloads)
        downloadMenu.addAction(self.stopAllAction)

        # sort_file_name_Action
        self.sort_file_name_Action = QAction(QCoreApplication.translate(
            "mainwindow_ui_tr", 'File Name'),
                                             self,
                                             triggered=self.sortByName)
        sortMenu.addAction(self.sort_file_name_Action)

        # sort_file_size_Action
        self.sort_file_size_Action = QAction(QCoreApplication.translate(
            "mainwindow_ui_tr", 'File Size'),
                                             self,
                                             triggered=self.sortBySize)
        sortMenu.addAction(self.sort_file_size_Action)

        # sort_first_try_date_Action
        self.sort_first_try_date_Action = QAction(
            QCoreApplication.translate("mainwindow_ui_tr", 'First Try Date'),
            self,
            triggered=self.sortByFirstTry)
        sortMenu.addAction(self.sort_first_try_date_Action)

        # sort_last_try_date_Action
        self.sort_last_try_date_Action = QAction(QCoreApplication.translate(
            "mainwindow_ui_tr", 'Last Try Date'),
                                                 self,
                                                 triggered=self.sortByLastTry)
        sortMenu.addAction(self.sort_last_try_date_Action)

        # sort_download_status_Action
        self.sort_download_status_Action = QAction(QCoreApplication.translate(
            "mainwindow_ui_tr", 'Download Status'),
                                                   self,
                                                   triggered=self.sortByStatus)
        sortMenu.addAction(self.sort_download_status_Action)

        # trayAction
        self.trayAction = QAction(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Show System Tray Icon'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Show/Hide system tray icon"),
            triggered=self.showTray)
        self.trayAction.setCheckable(True)
        viewMenu.addAction(self.trayAction)

        # showMenuBarAction
        self.showMenuBarAction = QAction(
            QCoreApplication.translate("mainwindow_ui_tr", 'Show Menubar'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Show Menubar'),
            triggered=self.showMenuBar)
        self.showMenuBarAction.setCheckable(True)
        viewMenu.addAction(self.showMenuBarAction)

        # showSidePanelAction
        self.showSidePanelAction = QAction(
            QCoreApplication.translate("mainwindow_ui_tr", 'Show Side Panel'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Show Side Panel'),
            triggered=self.showSidePanel)
        self.showSidePanelAction.setCheckable(True)
        viewMenu.addAction(self.showSidePanelAction)

        # minimizeAction
        self.minimizeAction = QAction(
            QIcon(icons + 'minimize'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Minimize to System Tray'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Minimize to System Tray"),
            triggered=self.minMaxTray)

        self.minimizeAction_shortcut = QShortcut(
            self.persepolis_setting.value('hide_window_shortcut'), self,
            self.minMaxTray)
        viewMenu.addAction(self.minimizeAction)

        # addlinkAction
        self.addlinkAction = QAction(
            QIcon(icons + 'add'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Add New Download Link...'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Add New Download Link"),
            triggered=self.addLinkButtonPressed)

        self.addlinkAction_shortcut = QShortcut(
            self.persepolis_setting.value('add_new_download_shortcut'), self,
            self.addLinkButtonPressed)
        fileMenu.addAction(self.addlinkAction)

        # importText
        self.addtextfileAction = QAction(
            QIcon(icons + 'file'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Import Links from Text File...'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Create a text file and put links in it, line by line!'),
            triggered=self.importText)

        self.addtextfileAction_shortcut = QShortcut(
            self.persepolis_setting.value('import_text_shortcut'), self,
            self.importText)

        fileMenu.addAction(self.addtextfileAction)

        # resumeAction
        self.resumeAction = QAction(
            QIcon(icons + 'play'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Resume Download'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Resume Download"),
            triggered=self.resumeButtonPressed)

        downloadMenu.addAction(self.resumeAction)

        # pauseAction
        self.pauseAction = QAction(
            QIcon(icons + 'pause'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Pause Download'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Pause Download"),
            triggered=self.pauseButtonPressed)

        downloadMenu.addAction(self.pauseAction)

        # stopAction
        self.stopAction = QAction(
            QIcon(icons + 'stop'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Stop Download'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Stop/Cancel Download"),
            triggered=self.stopButtonPressed)

        downloadMenu.addAction(self.stopAction)

        # propertiesAction
        self.propertiesAction = QAction(
            QIcon(icons + 'setting'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Properties'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Properties"),
            triggered=self.propertiesButtonPressed)

        downloadMenu.addAction(self.propertiesAction)

        # progressAction
        self.progressAction = QAction(
            QIcon(icons + 'window'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Progress'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 "Progress"),
            triggered=self.progressButtonPressed)

        downloadMenu.addAction(self.progressAction)

        # openFileAction
        self.openFileAction = QAction(
            QIcon(icons + 'file'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Open File...'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Open File...'),
            triggered=self.openFile)
        fileMenu.addAction(self.openFileAction)

        # openDownloadFolderAction
        self.openDownloadFolderAction = QAction(
            QIcon(icons + 'folder'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Open Download Folder'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Open Download Folder'),
            triggered=self.openDownloadFolder)

        fileMenu.addAction(self.openDownloadFolderAction)

        # openDefaultDownloadFolderAction
        self.openDefaultDownloadFolderAction = QAction(
            QIcon(icons + 'folder'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Open Default Download Folder'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr", 'Open Default Download Folder'),
            triggered=self.openDefaultDownloadFolder)

        fileMenu.addAction(self.openDefaultDownloadFolderAction)

        # exitAction
        self.exitAction = QAction(
            QIcon(icons + 'exit'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Exit'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr", "Exit"),
            triggered=self.closeAction)

        self.exitAction_shortcut = QShortcut(
            self.persepolis_setting.value('quit_shortcut'), self,
            self.closeAction)

        fileMenu.addAction(self.exitAction)

        # clearAction
        self.clearAction = QAction(QIcon(icons + 'multi_remove'),
                                   QCoreApplication.translate(
                                       "mainwindow_ui_tr",
                                       'Clear Download List'),
                                   self,
                                   statusTip=QCoreApplication.translate(
                                       "mainwindow_ui_tr",
                                       'Clear all items in download list'),
                                   triggered=self.clearDownloadList)
        editMenu.addAction(self.clearAction)

        # removeSelectedAction
        self.removeSelectedAction = QAction(
            QIcon(icons + 'remove'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Remove Selected Downloads from List'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr", 'Remove Selected Downloads from List'),
            triggered=self.removeSelected)

        self.removeSelectedAction_shortcut = QShortcut(
            self.persepolis_setting.value('remove_shortcut'), self,
            self.removeSelected)

        editMenu.addAction(self.removeSelectedAction)
        self.removeSelectedAction.setEnabled(False)

        # deleteSelectedAction
        self.deleteSelectedAction = QAction(
            QIcon(icons + 'trash'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Delete Selected Download Files'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr", 'Delete Selected Download Files'),
            triggered=self.deleteSelected)

        self.deleteSelectedAction_shortcut = QShortcut(
            self.persepolis_setting.value('delete_shortcut'), self,
            self.deleteSelected)

        editMenu.addAction(self.deleteSelectedAction)
        self.deleteSelectedAction.setEnabled(False)

        # moveSelectedDownloadsAction
        self.moveSelectedDownloadsAction = QAction(
            QIcon(icons + 'folder'),
            QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Move Selected Download Files to Another Folder...'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Move Selected Download Files to Another Folder'),
            triggered=self.moveSelectedDownloads)

        editMenu.addAction(self.moveSelectedDownloadsAction)
        self.moveSelectedDownloadsAction.setEnabled(False)

        # createQueueAction
        self.createQueueAction = QAction(
            QIcon(icons + 'add_queue'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Create New Queue...'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Create new download queue'),
            triggered=self.createQueue)
        queueMenu.addAction(self.createQueueAction)

        # removeQueueAction
        self.removeQueueAction = QAction(
            QIcon(icons + 'remove_queue'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Remove Queue'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Remove this queue'),
            triggered=self.removeQueue)
        queueMenu.addAction(self.removeQueueAction)

        # startQueueAction
        self.startQueueAction = QAction(
            QIcon(icons + 'start_queue'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Start this queue'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Start Queue'),
            triggered=self.startQueue)

        queueMenu.addAction(self.startQueueAction)

        # stopQueueAction
        self.stopQueueAction = QAction(
            QIcon(icons + 'stop_queue'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Stop this queue'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Stop Queue'),
            triggered=self.stopQueue)

        queueMenu.addAction(self.stopQueueAction)

        # moveUpSelectedAction
        self.moveUpSelectedAction = QAction(
            QIcon(icons + 'multi_up'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Move Selected Items Up'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Move currently selected items up by one row'),
            triggered=self.moveUpSelected)

        self.moveUpSelectedAction_shortcut = QShortcut(
            self.persepolis_setting.value('move_up_selection_shortcut'), self,
            self.moveUpSelected)

        queueMenu.addAction(self.moveUpSelectedAction)

        # moveDownSelectedAction
        self.moveDownSelectedAction = QAction(
            QIcon(icons + 'multi_down'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Move Selected Items Down'),
            self,
            statusTip=QCoreApplication.translate(
                "mainwindow_ui_tr",
                'Move currently selected items down by one row'),
            triggered=self.moveDownSelected)
        self.moveDownSelectedAction_shortcut = QShortcut(
            self.persepolis_setting.value('move_down_selection_shortcut'),
            self, self.moveDownSelected)

        queueMenu.addAction(self.moveDownSelectedAction)

        # preferencesAction
        self.preferencesAction = QAction(
            QIcon(icons + 'preferences'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Preferences'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Preferences'),
            triggered=self.openPreferences,
            menuRole=QAction.MenuRole.PreferencesRole)
        editMenu.addAction(self.preferencesAction)

        # aboutAction
        self.aboutAction = QAction(
            QIcon(icons + 'about'),
            QCoreApplication.translate("mainwindow_ui_tr", 'About'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'About'),
            triggered=self.openAbout,
            menuRole=QAction.MenuRole.AboutRole)
        helpMenu.addAction(self.aboutAction)

        # issueAction
        self.issueAction = QAction(
            QIcon(icons + 'about'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Report an Issue'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Report an issue'),
            triggered=self.reportIssue)
        helpMenu.addAction(self.issueAction)

        # updateAction
        self.updateAction = QAction(
            QIcon(icons + 'about'),
            QCoreApplication.translate("mainwindow_ui_tr",
                                       'Check for Newer Version'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr",
                                                 'Check for newer release'),
            triggered=self.newUpdate)
        helpMenu.addAction(self.updateAction)

        # logAction
        self.logAction = QAction(
            QIcon(icons + 'about'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Show Log File'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'),
            triggered=self.showLog)
        helpMenu.addAction(self.logAction)

        # helpAction
        self.helpAction = QAction(
            QIcon(icons + 'about'),
            QCoreApplication.translate("mainwindow_ui_tr", 'Help'),
            self,
            statusTip=QCoreApplication.translate("mainwindow_ui_tr", 'Help'),
            triggered=self.persepolisHelp)
        helpMenu.addAction(self.helpAction)

        self.persepolis_setting.endGroup()

        self.qmenu = MenuWidget(self)

        self.toolBar2.addWidget(self.qmenu)

        # labels
        self.queue_panel_show_button.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Hide Options"))
        self.start_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Start Time"))

        self.end_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "End Time"))

        self.reverse_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "Download bottom of\n the list first"))

        self.limit_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Limit Speed"))
        self.limit_comboBox.setItemText(0, "KiB/s")
        self.limit_comboBox.setItemText(1, "MiB/s")
        self.limit_pushButton.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Apply"))

        self.after_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "After download"))
        self.after_comboBox.setItemText(
            0, QCoreApplication.translate("mainwindow_ui_tr", "Shut Down"))

        self.keep_awake_checkBox.setText(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "Keep System Awake!"))
        self.keep_awake_checkBox.setToolTip(
            QCoreApplication.translate(
                "mainwindow_ui_tr",
                "<html><head/><body><p>This option will prevent the system from going to sleep.\
            It is necessary if your power manager is suspending the system automatically. </p></body></html>"
            ))

        self.after_pushButton.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Apply"))

        self.muxing_pushButton.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "Start Mixing"))

        self.video_label.setText(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "<b>Video File Status: </b>"))
        self.audio_label.setText(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "<b>Audio File Status: </b>"))

        self.video_finder_status_label.setText(
            QCoreApplication.translate("mainwindow_ui_tr", "<b>Status: </b>"))
        self.muxing_status_label.setText(
            QCoreApplication.translate("mainwindow_ui_tr",
                                       "<b>Mixing status: </b>"))
Beispiel #7
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1024, 768)
        self.actionOpen_ObjectBlueprints_xml = QAction(MainWindow)
        self.actionOpen_ObjectBlueprints_xml.setObjectName(
            u"actionOpen_ObjectBlueprints_xml")
        self.actionExit = QAction(MainWindow)
        self.actionExit.setObjectName(u"actionExit")
        self.actionWiki_template = QAction(MainWindow)
        self.actionWiki_template.setObjectName(u"actionWiki_template")
        self.actionWiki_template.setCheckable(True)
        self.actionWiki_template.setChecked(True)
        self.actionAttributes = QAction(MainWindow)
        self.actionAttributes.setObjectName(u"actionAttributes")
        self.actionAttributes.setCheckable(True)
        self.actionAll_attributes = QAction(MainWindow)
        self.actionAll_attributes.setObjectName(u"actionAll_attributes")
        self.actionAll_attributes.setCheckable(True)
        self.actionScan_wiki = QAction(MainWindow)
        self.actionScan_wiki.setObjectName(u"actionScan_wiki")
        self.actionUpload_templates = QAction(MainWindow)
        self.actionUpload_templates.setObjectName(u"actionUpload_templates")
        self.actionUpload_tiles = QAction(MainWindow)
        self.actionUpload_tiles.setObjectName(u"actionUpload_tiles")
        self.actionXML_source = QAction(MainWindow)
        self.actionXML_source.setObjectName(u"actionXML_source")
        self.actionXML_source.setCheckable(True)
        self.actionShow_help = QAction(MainWindow)
        self.actionShow_help.setObjectName(u"actionShow_help")
        self.actionUpload_extra_image_s_for_selected_objects = QAction(
            MainWindow)
        self.actionUpload_extra_image_s_for_selected_objects.setObjectName(
            u"actionUpload_extra_image_s_for_selected_objects")
        self.actionDiff_template_against_wiki = QAction(MainWindow)
        self.actionDiff_template_against_wiki.setObjectName(
            u"actionDiff_template_against_wiki")
        self.actionDark_mode = QAction(MainWindow)
        self.actionDark_mode.setObjectName(u"actionDark_mode")
        self.actionSuppress_image_comparison_popups = QAction(MainWindow)
        self.actionSuppress_image_comparison_popups.setObjectName(
            u"actionSuppress_image_comparison_popups")
        self.actionSuppress_image_comparison_popups.setCheckable(True)
        self.actionSuppress_image_comparison_popups.setChecked(False)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.verticalLayout = QVBoxLayout()
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.plainTextEdit = QPlainTextEdit(self.centralwidget)
        self.plainTextEdit.setObjectName(u"plainTextEdit")
        font = QFont()
        font.setFamilies([u"Consolas"])
        font.setPointSize(10)
        self.plainTextEdit.setFont(font)
        self.plainTextEdit.setUndoRedoEnabled(False)
        self.plainTextEdit.setReadOnly(True)

        self.horizontalLayout.addWidget(self.plainTextEdit)

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

        self.verticalLayout_4.addWidget(self.tile_label)

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

        self.verticalLayout_4.addWidget(self.save_tile_button)

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

        self.verticalLayout_4.addWidget(self.swap_tile_button)

        self.horizontalLayout.addLayout(self.verticalLayout_4)

        self.verticalLayout.addLayout(self.horizontalLayout)

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

        self.horizontalLayout_2.addWidget(self.search_label)

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

        self.horizontalLayout_2.addWidget(self.search_line_edit)

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

        self.horizontalLayout_2.addWidget(self.expand_all_button)

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

        self.horizontalLayout_2.addWidget(self.collapse_all_button)

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

        self.horizontalLayout_2.addWidget(self.restore_all_button)

        self.verticalLayout_3.addLayout(self.horizontalLayout_2)

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

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

        self.verticalLayout.addLayout(self.verticalLayout_3)

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

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

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

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", u"Qud Blueprint Explorer",
                                       None))
        self.actionOpen_ObjectBlueprints_xml.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Open ObjectBlueprints.xml...", None))
        self.actionExit.setText(
            QCoreApplication.translate("MainWindow", u"Exit", None))
        self.actionWiki_template.setText(
            QCoreApplication.translate("MainWindow", u"Wiki template", None))
        self.actionAttributes.setText(
            QCoreApplication.translate("MainWindow", u"Attributes", None))
        self.actionAll_attributes.setText(
            QCoreApplication.translate("MainWindow", u"All attributes", None))
        self.actionScan_wiki.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Scan wiki for selected objects",
                                       None))
        self.actionUpload_templates.setText(
            QCoreApplication.translate(
                "MainWindow", u"Upload templates for selected objects", None))
        self.actionUpload_tiles.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Upload tiles for selected objects",
                                       None))
        self.actionXML_source.setText(
            QCoreApplication.translate("MainWindow", u"XML source", None))
        self.actionShow_help.setText(
            QCoreApplication.translate("MainWindow", u"Show help", None))
        self.actionUpload_extra_image_s_for_selected_objects.setText(
            QCoreApplication.translate(
                "MainWindow", u"Upload extra image(s) for selected objects",
                None))
        self.actionDiff_template_against_wiki.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Diff template against wiki", None))
        self.actionDark_mode.setText(
            QCoreApplication.translate("MainWindow", u"Toggle dark mode",
                                       None))
        self.actionSuppress_image_comparison_popups.setText(
            QCoreApplication.translate("MainWindow",
                                       u"Suppress image comparison pop-ups",
                                       None))
        self.tile_label.setText("")
        self.save_tile_button.setText(
            QCoreApplication.translate("MainWindow", u"Save tile...", None))
        self.swap_tile_button.setText(
            QCoreApplication.translate("MainWindow", u"Toggle .png/.gif",
                                       None))
        self.search_label.setText(
            QCoreApplication.translate("MainWindow", u"Search:", None))
        self.expand_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Expand all", None))
        self.collapse_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Collapse all", None))
        self.restore_all_button.setText(
            QCoreApplication.translate("MainWindow", u"Default expansion",
                                       None))
        self.menuFile.setTitle(
            QCoreApplication.translate("MainWindow", u"File", None))
        self.menuView.setTitle(
            QCoreApplication.translate("MainWindow", u"View type", None))
        self.menuWiki.setTitle(
            QCoreApplication.translate("MainWindow", u"Wiki", None))
        self.menuHelp.setTitle(
            QCoreApplication.translate("MainWindow", u"Help", None))
Beispiel #8
0
class Ui_tfm(object):
    def setupUi(self, tfm):
        if not tfm.objectName():
            tfm.setObjectName(u"tfm")
        tfm.resize(800, 600)
        tfm.setContextMenuPolicy(Qt.NoContextMenu)
        tfm.setLocale(QLocale(QLocale.English, QLocale.UnitedStates))
        self.action_menu = QAction(tfm)
        self.action_menu.setObjectName(u"action_menu")
        self.action_new_dir = QAction(tfm)
        self.action_new_dir.setObjectName(u"action_new_dir")
        self.action_new_file = QAction(tfm)
        self.action_new_file.setObjectName(u"action_new_file")
        self.action_back = QAction(tfm)
        self.action_back.setObjectName(u"action_back")
        self.action_up = QAction(tfm)
        self.action_up.setObjectName(u"action_up")
        self.action_home = QAction(tfm)
        self.action_home.setObjectName(u"action_home")
        self.action_go = QAction(tfm)
        self.action_go.setObjectName(u"action_go")
        self.action_forward = QAction(tfm)
        self.action_forward.setObjectName(u"action_forward")
        self.action_copy = QAction(tfm)
        self.action_copy.setObjectName(u"action_copy")
        self.action_paste = QAction(tfm)
        self.action_paste.setObjectName(u"action_paste")
        self.action_cut = QAction(tfm)
        self.action_cut.setObjectName(u"action_cut")
        self.action_show_hidden = QAction(tfm)
        self.action_show_hidden.setObjectName(u"action_show_hidden")
        self.action_show_hidden.setCheckable(True)
        self.action_delete = QAction(tfm)
        self.action_delete.setObjectName(u"action_delete")
        self.action_rename = QAction(tfm)
        self.action_rename.setObjectName(u"action_rename")
        self.action_add_to_bookmarks = QAction(tfm)
        self.action_add_to_bookmarks.setObjectName(u"action_add_to_bookmarks")
        self.action_remove_bookmark = QAction(tfm)
        self.action_remove_bookmark.setObjectName(u"action_remove_bookmark")
        self.action_copy_path = QAction(tfm)
        self.action_copy_path.setObjectName(u"action_copy_path")
        self.action_extract_here = QAction(tfm)
        self.action_extract_here.setObjectName(u"action_extract_here")
        self.action_mount_iso = QAction(tfm)
        self.action_mount_iso.setObjectName(u"action_mount_iso")
        self.centralwidget = QWidget(tfm)
        self.centralwidget.setObjectName(u"centralwidget")
        self.horizontalLayout = QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.vsplit = QSplitter(self.centralwidget)
        self.vsplit.setObjectName(u"vsplit")
        self.vsplit.setOrientation(Qt.Horizontal)
        self.hsplit = QSplitter(self.vsplit)
        self.hsplit.setObjectName(u"hsplit")
        self.hsplit.setOrientation(Qt.Vertical)
        self.fs_tree = QTreeView(self.hsplit)
        self.fs_tree.setObjectName(u"fs_tree")
        sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(1)
        sizePolicy.setHeightForWidth(
            self.fs_tree.sizePolicy().hasHeightForWidth())
        self.fs_tree.setSizePolicy(sizePolicy)
        self.fs_tree.setTabKeyNavigation(True)
        self.fs_tree.setProperty("showDropIndicator", True)
        self.fs_tree.setDragEnabled(False)
        self.fs_tree.setDragDropMode(QAbstractItemView.DropOnly)
        self.fs_tree.setDefaultDropAction(Qt.MoveAction)
        self.fs_tree.setRootIsDecorated(False)
        self.hsplit.addWidget(self.fs_tree)
        self.fs_tree.header().setVisible(False)
        self.bookmark_view = QListView(self.hsplit)
        self.bookmark_view.setObjectName(u"bookmark_view")
        self.bookmark_view.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.bookmark_view.setEditTriggers(QAbstractItemView.DoubleClicked
                                           | QAbstractItemView.EditKeyPressed
                                           | QAbstractItemView.SelectedClicked)
        self.bookmark_view.setTabKeyNavigation(True)
        self.bookmark_view.setDragDropOverwriteMode(True)
        self.bookmark_view.setDragDropMode(QAbstractItemView.DropOnly)
        self.bookmark_view.setDefaultDropAction(Qt.CopyAction)
        self.bookmark_view.setAlternatingRowColors(True)
        self.hsplit.addWidget(self.bookmark_view)
        self.mounts_view = QListView(self.hsplit)
        self.mounts_view.setObjectName(u"mounts_view")
        self.mounts_view.setTabKeyNavigation(True)
        self.mounts_view.setAlternatingRowColors(True)
        self.hsplit.addWidget(self.mounts_view)
        self.vsplit.addWidget(self.hsplit)
        self.table_view = QTableView(self.vsplit)
        self.table_view.setObjectName(u"table_view")
        sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        sizePolicy1.setHorizontalStretch(1)
        sizePolicy1.setVerticalStretch(0)
        sizePolicy1.setHeightForWidth(
            self.table_view.sizePolicy().hasHeightForWidth())
        self.table_view.setSizePolicy(sizePolicy1)
        self.table_view.viewport().setProperty("cursor",
                                               QCursor(Qt.ArrowCursor))
        self.table_view.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.table_view.setAcceptDrops(True)
        self.table_view.setToolTipDuration(-3)
        self.table_view.setEditTriggers(QAbstractItemView.AnyKeyPressed
                                        | QAbstractItemView.EditKeyPressed
                                        | QAbstractItemView.SelectedClicked)
        self.table_view.setDragEnabled(True)
        self.table_view.setDragDropMode(QAbstractItemView.DragDrop)
        self.table_view.setDefaultDropAction(Qt.MoveAction)
        self.table_view.setAlternatingRowColors(True)
        self.table_view.setSelectionMode(QAbstractItemView.ExtendedSelection)
        self.table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.table_view.setTextElideMode(Qt.ElideMiddle)
        self.table_view.setShowGrid(False)
        self.table_view.setSortingEnabled(True)
        self.table_view.setWordWrap(False)
        self.vsplit.addWidget(self.table_view)
        self.table_view.horizontalHeader().setDefaultSectionSize(150)
        self.table_view.horizontalHeader().setHighlightSections(False)
        self.table_view.horizontalHeader().setStretchLastSection(True)
        self.table_view.verticalHeader().setVisible(False)

        self.horizontalLayout.addWidget(self.vsplit)

        tfm.setCentralWidget(self.centralwidget)
        self.statusbar = QStatusBar(tfm)
        self.statusbar.setObjectName(u"statusbar")
        self.statusbar.setContextMenuPolicy(Qt.NoContextMenu)
        self.statusbar.setSizeGripEnabled(False)
        tfm.setStatusBar(self.statusbar)
        self.toolbar = QToolBar(tfm)
        self.toolbar.setObjectName(u"toolbar")
        self.toolbar.setContextMenuPolicy(Qt.PreventContextMenu)
        self.toolbar.setMovable(False)
        tfm.addToolBar(Qt.TopToolBarArea, self.toolbar)

        self.toolbar.addAction(self.action_back)
        self.toolbar.addAction(self.action_forward)
        self.toolbar.addAction(self.action_up)
        self.toolbar.addAction(self.action_home)
        self.toolbar.addAction(self.action_go)

        self.retranslateUi(tfm)

        QMetaObject.connectSlotsByName(tfm)

    # setupUi

    def retranslateUi(self, tfm):
        tfm.setWindowTitle(QCoreApplication.translate("tfm", u"tfm", None))
        self.action_menu.setText(
            QCoreApplication.translate("tfm", u"Menu", None))
        self.action_new_dir.setText(
            QCoreApplication.translate("tfm", u"New Directory", None))
        self.action_new_file.setText(
            QCoreApplication.translate("tfm", u"New File", None))
        self.action_back.setText(
            QCoreApplication.translate("tfm", u"Back", None))
        self.action_up.setText(QCoreApplication.translate("tfm", u"Up", None))
        self.action_home.setText(
            QCoreApplication.translate("tfm", u"Home", None))
        self.action_go.setText(QCoreApplication.translate("tfm", u"Go", None))
        #if QT_CONFIG(tooltip)
        self.action_go.setToolTip(
            QCoreApplication.translate("tfm", u"Go or Reload", None))
        #endif // QT_CONFIG(tooltip)
        self.action_forward.setText(
            QCoreApplication.translate("tfm", u"Forward", None))
        self.action_copy.setText(
            QCoreApplication.translate("tfm", u"Copy", None))
        self.action_paste.setText(
            QCoreApplication.translate("tfm", u"Paste", None))
        self.action_cut.setText(QCoreApplication.translate(
            "tfm", u"Cut", None))
        self.action_show_hidden.setText(
            QCoreApplication.translate("tfm", u"Show hidden files", None))
        #if QT_CONFIG(shortcut)
        self.action_show_hidden.setShortcut(
            QCoreApplication.translate("tfm", u"Ctrl+H", None))
        #endif // QT_CONFIG(shortcut)
        self.action_delete.setText(
            QCoreApplication.translate("tfm", u"Delete", None))
        self.action_rename.setText(
            QCoreApplication.translate("tfm", u"Rename", None))
        self.action_add_to_bookmarks.setText(
            QCoreApplication.translate("tfm", u"Add to bookmarks", None))
        self.action_remove_bookmark.setText(
            QCoreApplication.translate("tfm", u"Remove bookmark", None))
        #if QT_CONFIG(tooltip)
        self.action_remove_bookmark.setToolTip(
            QCoreApplication.translate("tfm", u"Remove bookmark", None))
        #endif // QT_CONFIG(tooltip)
        self.action_copy_path.setText(
            QCoreApplication.translate("tfm", u"Copy path", None))
        self.action_extract_here.setText(
            QCoreApplication.translate("tfm", u"Extract here", None))
        #if QT_CONFIG(tooltip)
        self.action_extract_here.setToolTip(
            QCoreApplication.translate("tfm", u"Extract here", None))
        #endif // QT_CONFIG(tooltip)
        self.action_mount_iso.setText(
            QCoreApplication.translate("tfm", u"Mount ISO", None))
        #if QT_CONFIG(tooltip)
        self.action_mount_iso.setToolTip(
            QCoreApplication.translate("tfm", u"Mount ISO", None))
Beispiel #9
0
class MainWindow(QMainWindow):
    """Main application window"""
    def __init__(self) -> None:
        QMainWindow.__init__(self)
        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum))
        self.setMaximumSize(QSize(1920, 1080))
        self.setStyleSheet("padding: 0px; margin: 0px;")
        self.setIconSize(QSize(32, 32))
        self.setWindowTitle("BossyBot 2000 - Image Tagger")
        self.setWindowIcon(self.load_icon(icon))

        self.menubar = QMenuBar(self)
        self.menubar.setSizePolicy(EXP_MAX)
        self.menubar.setMaximumSize(QSize(INFINITE, 30))
        self.menu_file = QMenu('File', self.menubar)
        self.menu_options = QMenu('Options', self.menubar)
        self.menu_help = QMenu('Help', self.menubar)
        self.menubar.addAction(self.menu_file.menuAction())
        self.menubar.addAction(self.menu_options.menuAction())
        self.menubar.addAction(self.menu_help.menuAction())
        self.open = QAction('Open', self)
        self.menu_file.addAction(self.open)
        self.open.triggered.connect(self.open_file)
        self.exit_button = QAction('Exit', self)
        self.exit_button.triggered.connect(lambda: sys.exit(0),
                                           Qt.QueuedConnection)
        self.menu_file.addAction(self.exit_button)
        self.setMenuBar(self.menubar)

        self.previous_button = QAction(self.load_icon(previous), '<<', self)
        self.next_button = QAction(self.load_icon(next_icon), '>>', self)
        self.rotate_left_button = QAction(self.load_icon(left), '', self)
        self.rotate_right_button = QAction(self.load_icon(right), '', self)
        self.play_button = QAction(self.load_icon(play), '', self)
        self.play_button.setCheckable(True)
        self.delete_button = QAction(self.load_icon(delete), '', self)
        self.reload_button = QAction(self.load_icon(reload), '', self)
        self.mirror_button = QAction('Mirror', self)
        self.actual_size_button = QAction('Actual Size', self)
        self.browser_button = QAction('Browser', self)
        self.browser_button.setCheckable(True)
        self.browser_button.setChecked(True)
        self.crop_button = QAction('Crop', self)
        self.crop_button.setCheckable(True)

        self.toolbuttons = {
            self.rotate_left_button: {
                'shortcut':
                ',',
                'connect':
                lambda: self.pixmap.setRotation(self.pixmap.rotation() - 90)
            },
            self.rotate_right_button: {
                'shortcut':
                '.',
                'connect':
                lambda: self.pixmap.setRotation(self.pixmap.rotation() + 90)
            },
            self.delete_button: {
                'shortcut': 'Del',
                'connect': self.delete
            },
            self.previous_button: {
                'shortcut': 'Left',
                'connect': self.previous
            },
            self.play_button: {
                'shortcut': 'Space',
                'connect': self.play
            },
            self.next_button: {
                'shortcut': 'Right',
                'connect': self.next
            },
            self.reload_button: {
                'shortcut': 'F5',
                'connect': self.reload
            }
        }

        self.toolbar = QToolBar(self)
        self.toolbar.setSizePolicy(EXP_MAX)
        self.toolbar.setMaximumSize(QSize(INFINITE, 27))
        for _ in (self.browser_button, self.crop_button, self.mirror_button,
                  self.actual_size_button):
            self.toolbar.addAction(_)
        self.addToolBar(Qt.TopToolBarArea, self.toolbar)

        for button in self.toolbuttons:
            button.setShortcut(self.toolbuttons[button]['shortcut'])
            button.triggered.connect(self.toolbuttons[button]['connect'])
            self.toolbar.addAction(button)

        self.centralwidget = QWidget(self)
        self.centralwidget.setSizePolicy(EXP_EXP)
        self.setCentralWidget(self.centralwidget)
        self.grid = QGridLayout(self.centralwidget)

        self.media = QGraphicsScene(self)
        self.media.setItemIndexMethod(QGraphicsScene.NoIndex)
        self.media.setBackgroundBrush(QBrush(Qt.black))
        self.view = MyView(self.media, self)
        self.view.setSizePolicy(EXP_EXP)
        self.media.setSceneRect(0, 0, self.view.width(), self.view.height())
        self.grid.addWidget(self.view, 0, 0, 1, 1)

        self.frame = QFrame(self.centralwidget)
        self.frame.setSizePolicy(
            QSizePolicy(QSizePolicy.Fixed, QSizePolicy.MinimumExpanding))
        self.frame.setMinimumSize(QSize(325, 500))
        self.frame.setStyleSheet(
            "QFrame { border: 4px inset #222; border-radius: 10; }")

        self.layout_widget = QWidget(self.frame)
        self.layout_widget.setGeometry(QRect(0, 400, 321, 91))
        self.layout_widget.setContentsMargins(15, 15, 15, 15)

        self.grid2 = QGridLayout(self.layout_widget)
        self.grid2.setContentsMargins(0, 0, 0, 0)

        self.save_button = QPushButton('Yes (Save)', self.layout_widget)
        self.save_button.setSizePolicy(FIX_FIX)
        self.save_button.setMaximumSize(QSize(120, 26))
        self.save_button.setVisible(False)
        self.grid2.addWidget(self.save_button, 1, 0, 1, 1)

        self.no_save_button = QPushButton('No (Reload)', self.layout_widget)
        self.no_save_button.setSizePolicy(FIX_FIX)
        self.no_save_button.setMaximumSize(QSize(120, 26))
        self.no_save_button.setVisible(False)
        self.grid2.addWidget(self.no_save_button, 1, 1, 1, 1)

        self.label = QLabel("Current image modified, save it?",
                            self.layout_widget)
        self.label.setSizePolicy(FIX_FIX)
        self.label.setMaximumSize(QSize(325, 60))
        self.label.setVisible(False)
        self.label.setAlignment(Qt.AlignCenter)
        self.grid2.addWidget(self.label, 0, 0, 1, 2)

        self.layout_widget = QWidget(self.frame)
        self.layout_widget.setGeometry(QRect(0, 0, 321, 213))

        self.ass = QRadioButton('Ass', self.layout_widget)
        self.ass_exposed = QRadioButton('Ass (exposed)', self.layout_widget)
        self.ass_reset = QRadioButton(self.frame)
        self.ass_group = QButtonGroup(self)

        self.breasts = QRadioButton('Breasts', self.layout_widget)
        self.breasts_exposed = QRadioButton('Breasts (exposed)',
                                            self.layout_widget)
        self.breasts_reset = QRadioButton(self.frame)
        self.breasts_group = QButtonGroup(self)

        self.pussy = QRadioButton('Pussy', self.layout_widget)
        self.pussy_exposed = QRadioButton('Pussy (exposed)',
                                          self.layout_widget)
        self.pussy_reset = QRadioButton(self.frame)
        self.pussy_group = QButtonGroup(self)

        self.fully_clothed = QRadioButton('Fully Clothed', self.layout_widget)
        self.fully_nude = QRadioButton('Fully Nude', self.layout_widget)
        self.nudity_reset = QRadioButton(self.frame)
        self.nudity = QButtonGroup(self)

        self.smiling = QRadioButton('Smiling', self.layout_widget)
        self.glaring = QRadioButton('Glaring', self.layout_widget)
        self.expression_reset = QRadioButton(self.frame)
        self.expression = QButtonGroup(self)

        self.grid3 = QGridLayout(self.layout_widget)
        self.grid3.setVerticalSpacing(15)
        self.grid3.setContentsMargins(0, 15, 0, 0)

        self.radios = {
            self.ass: {
                'this': 'ass',
                'that': 'ass_exposed',
                'group': self.ass_group,
                'reset': self.ass_reset,
                'grid': (0, 0, 1, 1)
            },
            self.ass_exposed: {
                'this': 'ass_exposed',
                'that': 'ass',
                'group': self.ass_group,
                'reset': self.ass_reset,
                'grid': (0, 1, 1, 1)
            },
            self.breasts: {
                'this': 'breasts',
                'that': 'breasts_exposed',
                'group': self.breasts_group,
                'reset': self.breasts_reset,
                'grid': (1, 0, 1, 1)
            },
            self.breasts_exposed: {
                'this': 'breasts_exposed',
                'that': 'breasts',
                'group': self.breasts_group,
                'reset': self.breasts_reset,
                'grid': (1, 1, 1, 1)
            },
            self.pussy: {
                'this': 'pussy',
                'that': 'pussy_exposed',
                'group': self.pussy_group,
                'reset': self.pussy_reset,
                'grid': (2, 0, 1, 1)
            },
            self.pussy_exposed: {
                'this': 'pussy_exposed',
                'that': 'pussy',
                'group': self.pussy_group,
                'reset': self.pussy_reset,
                'grid': (2, 1, 1, 1)
            },
            self.fully_clothed: {
                'this': 'fully_clothed',
                'that': 'fully_nude',
                'group': self.nudity,
                'reset': self.nudity_reset,
                'grid': (3, 0, 1, 1)
            },
            self.fully_nude: {
                'this': 'fully_nude',
                'that': 'fully_clothed',
                'group': self.nudity,
                'reset': self.nudity_reset,
                'grid': (3, 1, 1, 1)
            },
            self.smiling: {
                'this': 'smiling',
                'that': 'glaring',
                'group': self.expression,
                'reset': self.expression_reset,
                'grid': (4, 0, 1, 1)
            },
            self.glaring: {
                'this': 'glaring',
                'that': 'smiling',
                'group': self.expression,
                'reset': self.expression_reset,
                'grid': (4, 1, 1, 1)
            },
        }

        for radio in self.radios:
            radio.setSizePolicy(FIX_FIX)
            radio.setMaximumSize(QSize(150, 22))
            self.radios[radio]['reset'].setGeometry(QRect(0, 0, 0, 0))
            self.grid3.addWidget(radio, *self.radios[radio]['grid'])
            if self.radios[radio]['group'] != self.nudity:
                radio.toggled.connect(
                    lambda x=_, y=radio: self.annotate(self.radios[y]['this']))
            self.radios[radio]['group'].addButton(radio)
            self.radios[radio]['group'].addButton(self.radios[radio]['reset'])

        self.save_tags_button = QPushButton('Save Tags', self.layout_widget)
        self.save_tags_button.setSizePolicy(FIX_FIX)
        self.save_tags_button.setMaximumSize(QSize(120, 26))
        self.grid3.addWidget(self.save_tags_button, 5, 1, 1, 1)

        self.grid.addWidget(self.frame, 0, 1, 1, 1)

        self.browse_bar = QLabel(self.centralwidget)
        self.browse_bar.setSizePolicy(EXP_FIX)
        self.browse_bar.setMinimumSize(QSize(0, 100))
        self.browse_bar.setMaximumSize(QSize(INFINITE, 100))
        self.browse_bar.setStyleSheet("background: #000;")
        self.browse_bar.setAlignment(Qt.AlignCenter)
        self.h_box2 = QHBoxLayout(self.browse_bar)
        self.h_box2.setContentsMargins(4, 0, 0, 0)

        self.grid.addWidget(self.browse_bar, 1, 0, 1, 2)

        hiders = [
            self.no_save_button.clicked, self.save_button.clicked,
            self.reload_button.triggered
        ]
        for hider in hiders:
            hider.connect(self.save_button.hide)
            hider.connect(self.no_save_button.hide)
            hider.connect(self.label.hide)
        showers = [
            self.mirror_button.triggered, self.rotate_right_button.triggered,
            self.rotate_left_button.triggered
        ]
        for shower in showers:
            shower.connect(self.save_button.show)
            shower.connect(self.no_save_button.show)
            shower.connect(self.label.show)

        self.no_save_button.clicked.connect(self.reload)
        self.browser_button.toggled.connect(self.browse_bar.setVisible)

        self.play_button.toggled.connect(lambda: self.frame.setVisible(
            (True, False)[self.frame.isVisible()]))
        self.reload_button.triggered.connect(self.reload)
        self.mirror_button.triggered.connect(lambda: self.pixmap.setScale(-1))
        self.save_button.clicked.connect(self.save_image)
        self.play_button.toggled.connect(
            lambda: self.browser_button.setChecked(
                (True, False)[self.browse_bar.isVisible()]))
        self.crop_button.toggled.connect(self.view.reset)
        self.actual_size_button.triggered.connect(self.actual_size)
        self.browser_button.triggered.connect(self.browser)
        self.save_tags_button.clicked.connect(self.save_tags)
        self.view.got_rect.connect(self.set_rect)

        self.crop_rect = QRect(QPoint(0, 0), QSize(0, 0))
        self.dir_now = os.getcwd()
        self.files = []
        self.index = 0
        self.refresh_files()
        self.pixmap_is_scaled = False
        self.pixmap = QGraphicsPixmapItem()
        self.active_tag = ''
        self.reset_browser = False
        self.txt = PngInfo()

    def set_rect(self, rect: tuple[QPointF, QPointF]):
        """Converts the crop rectangle to a QRect after a crop action"""
        self.crop_rect = QRect(rect[0].toPoint(), rect[1].toPoint())

    def keyPressEvent(self, event: QKeyEvent):  # pylint: disable=invalid-name;
        """Keyboard event handler."""
        if event.key() == Qt.Key_Escape and self.play_button.isChecked():
            self.play_button.toggle()
            self.browser_button.setChecked((True, False)[self.reset_browser])
        elif (event.key() in [16777220, 16777221]
              and self.view.g_rect.rect().width() > 0):
            self.view.got_rect.emit((self.view.g_rect.rect().topLeft(),
                                     self.view.g_rect.rect().bottomRight()))
            if self.view.g_rect.pen().color() == Qt.red:
                new_pix = self.pixmap.pixmap().copy(self.crop_rect)
                if self.pixmap_is_scaled:
                    new_pix = new_pix.transformed(
                        self.view.transform().inverted()[0],
                        Qt.SmoothTransformation)
                self.update_pixmap(new_pix)
            elif self.view.g_rect.pen().color() == Qt.magenta:
                self.annotate_rect()
                self.view.annotation = False
            for _ in (self.label, self.save_button, self.no_save_button):
                _.show()
            self.view.reset()

    def play(self):
        """Starts a slideshow."""
        if self.play_button.isChecked():
            if self.browser_button.isChecked():
                self.reset_browser = True
            else:
                self.reset_browser = False
            QTimer.singleShot(3000, self.play)
            self.next()

    def _yield_radio(self):
        """Saves code connecting signals from all the radio buttons."""
        yield from self.radios.keys().__str__()

    def load_icon(self, icon_file):
        """Loads an icon from Base64 encoded strings in icons.py."""
        pix = QPixmap()
        pix.loadFromData(icon_file)
        return QIcon(pix)

    def open_file(self, file: str) -> None:
        """
        Open an image file and display it.

        :param file: The filename of the image to open
        """
        if not os.path.isfile(file):
            file = QFileDialog(self, self.dir_now,
                               self.dir_now).getOpenFileName()[0]
            self.dir_now = os.path.dirname(file)
            self.refresh_files()
        for i, index_file in enumerate(self.files):
            if file.split('/')[-1] == index_file:
                self.index = i
        self.view.setTransform(QTransform())
        self.update_pixmap(QPixmap(file))
        self.browser()
        self.load_tags()

    def refresh_files(self) -> list[str]:
        """Updates the file list when the directory is changed.
        Returns a list of image files available in the current directory."""
        files = os.listdir(self.dir_now)
        self.files = [
            file for file in sorted(files, key=lambda x: x.lower())
            if file.endswith((".png", ".jpg", ".gif", ".bmp", ".jpeg"))
        ]

    def next(self) -> None:
        """Opens the next image in the file list."""
        self.index = (self.index + 1) % len(self.files)
        self.reload()

    def previous(self) -> None:
        """Opens the previous image in the file list."""
        self.index = (self.index + (len(self.files) - 1)) % len(self.files)
        self.reload()

    def save_image(self) -> None:
        """
        Save the modified image file.  If the current pixmap has been
        scaled, we need to load a non-scaled pixmap from the original file and
        re-apply the transformations that have been performed to prevent it
        from being saved as the scaled-down image.
        """
        if self.pixmap_is_scaled:
            rotation = self.pixmap.rotation()
            mirror = self.pixmap.scale() < 0
            pix = QPixmap(self.files[self.index])
            pix = pix.transformed(QTransform().rotate(rotation))
            if mirror:
                pix = pix.transformed(QTransform().scale(-1, 1))
            pix.save(self.files[self.index], quality=-1)
        else:
            self.pixmap.pixmap().save(self.files[self.index], quality=-1)
        self.save_tags()

    def delete(self) -> None:
        """Deletes the current image from the file system."""
        with suppress(OSError):
            os.remove(f"{self.dir_now}/{self.files.pop(self.index)}")
        self.refresh_files()

    def reload(self) -> None:
        """Reloads the current pixmap; used to update the screen when the
        current file is changed."""
        self.open_file(f"{self.dir_now}/{self.files[self.index]}")

    def annotate(self, tag):
        """Starts an annotate action"""
        self.txt = PngInfo()
        self.view.annotation = True
        self.active_tag = tag
        self.view.reset()

    def wheelEvent(self, event: QWheelEvent) -> None:  # pylint: disable=invalid-name
        """With Ctrl depressed, zoom the current image, otherwise fire the
        next/previous functions."""
        modifiers = QApplication.keyboardModifiers()
        if event.angleDelta().y() == 120 and modifiers == Qt.ControlModifier:
            self.view.scale(0.75, 0.75)
        elif event.angleDelta().y() == 120:
            self.previous()
        elif event.angleDelta().y(
        ) == -120 and modifiers == Qt.ControlModifier:
            self.view.scale(1.25, 1.25)
        elif event.angleDelta().y() == -120:
            self.next()

    def actual_size(self) -> None:
        """Display the current image at its actual size, rather than scaled to
        fit the viewport."""
        self.update_pixmap(QPixmap(self.files[self.index]), False)
        self.view.setDragMode(QGraphicsView.ScrollHandDrag)

    def mousePressEvent(self, event: QMouseEvent) -> None:  # pylint: disable=invalid-name
        """Event handler for mouse button presses."""
        if event.button() == Qt.MouseButton.ForwardButton:
            self.next()
        elif event.button() == Qt.MouseButton.BackButton:
            self.previous()

    def update_pixmap(self, new: QPixmap, scaled: bool = True) -> None:
        """
        Updates the currently displayed image.

        :param new: The new `QPixmap` to be displayed.
        :param scaled: If False, don't scale the image to fit the viewport.
        """
        self.pixmap_is_scaled = scaled
        self.media.clear()
        self.pixmap = self.media.addPixmap(new)
        self.pixmap.setTransformOriginPoint(
            self.pixmap.boundingRect().width() / 2,
            self.pixmap.boundingRect().height() / 2)
        if scaled and (new.size().width() > self.view.width()
                       or new.size().height() > self.view.height()):
            self.view.fitInView(self.pixmap, Qt.KeepAspectRatio)
        self.media.setSceneRect(self.pixmap.boundingRect())

    def annotate_rect(self):
        """Creates image coordinate annotation data."""
        self.txt.add_itxt(
            f'{str(self.active_tag)}-rect',
            f'{str(self.crop_rect.x())}, {str(self.crop_rect.y())}, {str(self.crop_rect.width())}, {str(self.crop_rect.height())}'
        )

    def browser(self):
        """Slot function to initialize image thumbnails for the
        'browse mode.'"""
        while self.h_box2.itemAt(0):
            self.h_box2.takeAt(0).widget().deleteLater()
        index = (self.index + (len(self.files) - 2)) % len(self.files)
        for i, file in enumerate(self.files):
            file = self.dir_now + '/' + self.files[index]
            label = ClickableLabel(self, file)
            self.h_box2.addWidget(label)
            pix = QPixmap(file)
            if (pix.size().width() > self.browse_bar.width() / 5
                    or pix.size().height() > 100):
                pix = pix.scaled(self.browse_bar.width() / 5, 100,
                                 Qt.KeepAspectRatio)
            label.setPixmap(pix)
            index = (index + 1) % len(self.files)
            if i == 4:
                break

    def save_tags(self):
        """Save tags for currently loaded image into its iTxt data."""
        file = self.files[self.index]
        img = Image.open(file)
        img.load()
        for key, value, in img.text.items():
            self.txt.add_itxt(key, value)
        for key in self.radios:
            if key.isChecked():
                self.txt.add_itxt(self.radios[key]['this'], 'True')
                self.txt.add_itxt(self.radios[key]['that'], 'False')
        img.save(file, pnginfo=self.txt)

    def load_tags(self):
        """Load tags from iTxt data."""
        for radio in self.radios:
            if radio.isChecked():
                self.radios[radio]['reset'].setChecked(True)
        filename = self.files[self.index]
        fqp = filename
        img = Image.open(fqp)
        img.load()
        with suppress(AttributeError):
            for key, value in img.text.items():
                if value == 'True':
                    for radio in self.radios:
                        if key == self.radios[radio]['this']:
                            radio.setChecked(True)
                            self.view.annotation = False
                            self.active_tag = ''
                            self.view.reset()
            for key, value in img.text.items():
                if key.endswith('-rect'):
                    btn = [
                        radio for radio in self.radios
                        if self.radios[radio]['this'] == key.split('-')[0]
                    ]
                    print(key, value)
                    if btn[0].isChecked():
                        coords = [int(coord) for coord in value.split(', ')]
                        rect = QGraphicsRectItem(*coords)
                        rect.setPen(QPen(Qt.magenta, 1, Qt.SolidLine))
                        rect.setBrush(QBrush(Qt.magenta, Qt.Dense4Pattern))
                        self.view.scene().addItem(rect)
                        text = self.view.scene().addText(
                            key.split('-')[0],
                            QFont('monospace', 20, 400, False))
                        text.font().setPointSize(text.font().pointSize() * 2)
                        text.update()
                        text.setX(rect.rect().x() + 10)
                        text.setY(rect.rect().y() + 10)
                        print(f'set {key}')
Beispiel #10
0
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(911, 607)
        self.action_open = QAction(MainWindow)
        self.action_open.setObjectName(u"action_open")
        self.action_open.setVisible(False)
        self.action_comparison = QAction(MainWindow)
        self.action_comparison.setObjectName(u"action_comparison")
        self.action_comparison.setVisible(False)
        self.action_plot = QAction(MainWindow)
        self.action_plot.setObjectName(u"action_plot")
        self.action_training_session = QAction(MainWindow)
        self.action_training_session.setObjectName(u"action_training_session")
        self.action_training_session.setVisible(False)
        self.action_game = QAction(MainWindow)
        self.action_game.setObjectName(u"action_game")
        self.action_save = QAction(MainWindow)
        self.action_save.setObjectName(u"action_save")
        self.action_save.setVisible(False)
        self.action_save_log = QAction(MainWindow)
        self.action_save_log.setObjectName(u"action_save_log")
        self.action_save_log.setVisible(False)
        self.action_coordinates = QAction(MainWindow)
        self.action_coordinates.setObjectName(u"action_coordinates")
        self.action_coordinates.setCheckable(True)
        self.action_about = QAction(MainWindow)
        self.action_about.setObjectName(u"action_about")
        self.action_new_db = QAction(MainWindow)
        self.action_new_db.setObjectName(u"action_new_db")
        self.action_open_db = QAction(MainWindow)
        self.action_open_db.setObjectName(u"action_open_db")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout_2 = QVBoxLayout(self.centralwidget)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.stacked_widget = QStackedWidget(self.centralwidget)
        self.stacked_widget.setObjectName(u"stacked_widget")
        self.game_page = QWidget()
        self.game_page.setObjectName(u"game_page")
        self.gridLayout_3 = QGridLayout(self.game_page)
        self.gridLayout_3.setObjectName(u"gridLayout_3")
        self.connect4 = QPushButton(self.game_page)
        self.connect4.setObjectName(u"connect4")
        sizePolicy = QSizePolicy(QSizePolicy.Minimum,
                                 QSizePolicy.MinimumExpanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.connect4.sizePolicy().hasHeightForWidth())
        self.connect4.setSizePolicy(sizePolicy)

        self.gridLayout_3.addWidget(self.connect4, 0, 1, 1, 1)

        self.tic_tac_toe = QPushButton(self.game_page)
        self.tic_tac_toe.setObjectName(u"tic_tac_toe")
        sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        sizePolicy1.setHorizontalStretch(0)
        sizePolicy1.setVerticalStretch(0)
        sizePolicy1.setHeightForWidth(
            self.tic_tac_toe.sizePolicy().hasHeightForWidth())
        self.tic_tac_toe.setSizePolicy(sizePolicy1)

        self.gridLayout_3.addWidget(self.tic_tac_toe, 0, 0, 1, 1)

        self.othello = QPushButton(self.game_page)
        self.othello.setObjectName(u"othello")
        sizePolicy.setHeightForWidth(
            self.othello.sizePolicy().hasHeightForWidth())
        self.othello.setSizePolicy(sizePolicy)

        self.gridLayout_3.addWidget(self.othello, 1, 0, 1, 1)

        self.stacked_widget.addWidget(self.game_page)
        self.players_page = QWidget()
        self.players_page.setObjectName(u"players_page")
        self.verticalLayout = QVBoxLayout(self.players_page)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.player_layout = QGridLayout()
        self.player_layout.setObjectName(u"player_layout")
        self.searches_lock2 = QCheckBox(self.players_page)
        self.searches_lock2.setObjectName(u"searches_lock2")

        self.player_layout.addWidget(self.searches_lock2, 2, 4, 1, 1)

        self.player1 = QComboBox(self.players_page)
        self.player1.setObjectName(u"player1")
        sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
        sizePolicy2.setHorizontalStretch(0)
        sizePolicy2.setVerticalStretch(0)
        sizePolicy2.setHeightForWidth(
            self.player1.sizePolicy().hasHeightForWidth())
        self.player1.setSizePolicy(sizePolicy2)

        self.player_layout.addWidget(self.player1, 1, 1, 1, 1)

        self.cancel = QPushButton(self.players_page)
        self.cancel.setObjectName(u"cancel")

        self.player_layout.addWidget(self.cancel, 4, 0, 1, 1)

        self.searches_label1 = QLabel(self.players_page)
        self.searches_label1.setObjectName(u"searches_label1")
        sizePolicy3 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred)
        sizePolicy3.setHorizontalStretch(0)
        sizePolicy3.setVerticalStretch(0)
        sizePolicy3.setHeightForWidth(
            self.searches_label1.sizePolicy().hasHeightForWidth())
        self.searches_label1.setSizePolicy(sizePolicy3)

        self.player_layout.addWidget(self.searches_label1, 1, 3, 1, 1)

        self.player2 = QComboBox(self.players_page)
        self.player2.setObjectName(u"player2")
        sizePolicy2.setHeightForWidth(
            self.player2.sizePolicy().hasHeightForWidth())
        self.player2.setSizePolicy(sizePolicy2)

        self.player_layout.addWidget(self.player2, 2, 1, 1, 1)

        self.searches_lock1 = QCheckBox(self.players_page)
        self.searches_lock1.setObjectName(u"searches_lock1")

        self.player_layout.addWidget(self.searches_lock1, 1, 4, 1, 1)

        self.game_label = QLabel(self.players_page)
        self.game_label.setObjectName(u"game_label")
        sizePolicy4 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy4.setHorizontalStretch(0)
        sizePolicy4.setVerticalStretch(0)
        sizePolicy4.setHeightForWidth(
            self.game_label.sizePolicy().hasHeightForWidth())
        self.game_label.setSizePolicy(sizePolicy4)

        self.player_layout.addWidget(self.game_label, 0, 0, 1, 1)

        self.game_name = QLabel(self.players_page)
        self.game_name.setObjectName(u"game_name")

        self.player_layout.addWidget(self.game_name, 0, 1, 1, 4)

        self.searches_label2 = QLabel(self.players_page)
        self.searches_label2.setObjectName(u"searches_label2")

        self.player_layout.addWidget(self.searches_label2, 2, 3, 1, 1)

        self.player_label1 = QLabel(self.players_page)
        self.player_label1.setObjectName(u"player_label1")
        sizePolicy4.setHeightForWidth(
            self.player_label1.sizePolicy().hasHeightForWidth())
        self.player_label1.setSizePolicy(sizePolicy4)

        self.player_layout.addWidget(self.player_label1, 1, 0, 1, 1)

        self.searches1 = QSpinBox(self.players_page)
        self.searches1.setObjectName(u"searches1")
        sizePolicy5 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        sizePolicy5.setHorizontalStretch(0)
        sizePolicy5.setVerticalStretch(0)
        sizePolicy5.setHeightForWidth(
            self.searches1.sizePolicy().hasHeightForWidth())
        self.searches1.setSizePolicy(sizePolicy5)
        self.searches1.setMaximum(1000000)

        self.player_layout.addWidget(self.searches1, 1, 2, 1, 1)

        self.player_label2 = QLabel(self.players_page)
        self.player_label2.setObjectName(u"player_label2")

        self.player_layout.addWidget(self.player_label2, 2, 0, 1, 1)

        self.shuffle_players = QCheckBox(self.players_page)
        self.shuffle_players.setObjectName(u"shuffle_players")

        self.player_layout.addWidget(self.shuffle_players, 3, 1, 1, 4)

        self.searches2 = QSpinBox(self.players_page)
        self.searches2.setObjectName(u"searches2")
        sizePolicy5.setHeightForWidth(
            self.searches2.sizePolicy().hasHeightForWidth())
        self.searches2.setSizePolicy(sizePolicy5)
        self.searches2.setMaximum(1000000)

        self.player_layout.addWidget(self.searches2, 2, 2, 1, 1)

        self.start = QPushButton(self.players_page)
        self.start.setObjectName(u"start")

        self.player_layout.addWidget(self.start, 4, 1, 1, 4)

        self.player_layout.setColumnStretch(1, 10)
        self.player_layout.setColumnStretch(2, 1)

        self.verticalLayout.addLayout(self.player_layout)

        self.stacked_widget.addWidget(self.players_page)
        self.humans_page = QWidget()
        self.humans_page.setObjectName(u"humans_page")
        self.gridLayout = QGridLayout(self.humans_page)
        self.gridLayout.setObjectName(u"gridLayout")
        self.close_humans = QPushButton(self.humans_page)
        self.close_humans.setObjectName(u"close_humans")
        sizePolicy4.setHeightForWidth(
            self.close_humans.sizePolicy().hasHeightForWidth())
        self.close_humans.setSizePolicy(sizePolicy4)

        self.gridLayout.addWidget(self.close_humans, 1, 1, 1, 1)

        self.players_label = QLabel(self.humans_page)
        self.players_label.setObjectName(u"players_label")

        self.gridLayout.addWidget(self.players_label, 0, 0, 1, 1)

        self.new_human = QPushButton(self.humans_page)
        self.new_human.setObjectName(u"new_human")
        sizePolicy4.setHeightForWidth(
            self.new_human.sizePolicy().hasHeightForWidth())
        self.new_human.setSizePolicy(sizePolicy4)

        self.gridLayout.addWidget(self.new_human, 1, 3, 1, 1)

        self.players_table = QTableWidget(self.humans_page)
        self.players_table.setObjectName(u"players_table")

        self.gridLayout.addWidget(self.players_table, 0, 1, 1, 3)

        self.spacer = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                  QSizePolicy.Minimum)

        self.gridLayout.addItem(self.spacer, 1, 2, 1, 1)

        self.stacked_widget.addWidget(self.humans_page)
        self.rules_page = QWidget()
        self.rules_page.setObjectName(u"rules_page")
        self.gridLayout_4 = QGridLayout(self.rules_page)
        self.gridLayout_4.setObjectName(u"gridLayout_4")
        self.rules_text = QTextBrowser(self.rules_page)
        self.rules_text.setObjectName(u"rules_text")

        self.gridLayout_4.addWidget(self.rules_text, 0, 0, 1, 1)

        self.rules_close = QPushButton(self.rules_page)
        self.rules_close.setObjectName(u"rules_close")
        sizePolicy4.setHeightForWidth(
            self.rules_close.sizePolicy().hasHeightForWidth())
        self.rules_close.setSizePolicy(sizePolicy4)

        self.gridLayout_4.addWidget(self.rules_close, 1, 0, 1, 1)

        self.stacked_widget.addWidget(self.rules_page)
        self.display_page = QWidget()
        self.display_page.setObjectName(u"display_page")
        self.gridLayout_2 = QGridLayout(self.display_page)
        self.gridLayout_2.setObjectName(u"gridLayout_2")
        self.toggle_review = QPushButton(self.display_page)
        self.toggle_review.setObjectName(u"toggle_review")
        sizePolicy4.setHeightForWidth(
            self.toggle_review.sizePolicy().hasHeightForWidth())
        self.toggle_review.setSizePolicy(sizePolicy4)

        self.gridLayout_2.addWidget(self.toggle_review, 3, 2, 1, 1)

        self.move_history = QComboBox(self.display_page)
        self.move_history.setObjectName(u"move_history")
        sizePolicy6 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
        sizePolicy6.setHorizontalStretch(1)
        sizePolicy6.setVerticalStretch(0)
        sizePolicy6.setHeightForWidth(
            self.move_history.sizePolicy().hasHeightForWidth())
        self.move_history.setSizePolicy(sizePolicy6)

        self.gridLayout_2.addWidget(self.move_history, 3, 1, 1, 1)

        self.choices = QTableWidget(self.display_page)
        self.choices.setObjectName(u"choices")
        sizePolicy7 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
        sizePolicy7.setHorizontalStretch(0)
        sizePolicy7.setVerticalStretch(0)
        sizePolicy7.setHeightForWidth(
            self.choices.sizePolicy().hasHeightForWidth())
        self.choices.setSizePolicy(sizePolicy7)

        self.gridLayout_2.addWidget(self.choices, 1, 0, 1, 3)

        self.resume_here = QPushButton(self.display_page)
        self.resume_here.setObjectName(u"resume_here")
        sizePolicy5.setHeightForWidth(
            self.resume_here.sizePolicy().hasHeightForWidth())
        self.resume_here.setSizePolicy(sizePolicy5)

        self.gridLayout_2.addWidget(self.resume_here, 3, 0, 1, 1)

        self.game_display = QLabel(self.display_page)
        self.game_display.setObjectName(u"game_display")

        self.gridLayout_2.addWidget(self.game_display, 0, 0, 1, 3)

        self.stacked_widget.addWidget(self.display_page)
        self.plot_strength_page = QWidget()
        self.plot_strength_page.setObjectName(u"plot_strength_page")
        self.gridLayout_5 = QGridLayout(self.plot_strength_page)
        self.gridLayout_5.setObjectName(u"gridLayout_5")
        self.label = QLabel(self.plot_strength_page)
        self.label.setObjectName(u"label")

        self.gridLayout_5.addWidget(self.label, 0, 0, 1, 1)

        self.plot_game = QComboBox(self.plot_strength_page)
        self.plot_game.setObjectName(u"plot_game")

        self.gridLayout_5.addWidget(self.plot_game, 0, 1, 1, 2)

        self.lineEdit = QLineEdit(self.plot_strength_page)
        self.lineEdit.setObjectName(u"lineEdit")

        self.gridLayout_5.addWidget(self.lineEdit, 2, 1, 1, 2)

        self.label_2 = QLabel(self.plot_strength_page)
        self.label_2.setObjectName(u"label_2")

        self.gridLayout_5.addWidget(self.label_2, 3, 0, 1, 1)

        self.lineEdit_2 = QLineEdit(self.plot_strength_page)
        self.lineEdit_2.setObjectName(u"lineEdit_2")

        self.gridLayout_5.addWidget(self.lineEdit_2, 3, 1, 1, 2)

        self.reset_plot = QPushButton(self.plot_strength_page)
        self.reset_plot.setObjectName(u"reset_plot")

        self.gridLayout_5.addWidget(self.reset_plot, 6, 2, 1, 1)

        self.start_stop_plot = QPushButton(self.plot_strength_page)
        self.start_stop_plot.setObjectName(u"start_stop_plot")

        self.gridLayout_5.addWidget(self.start_stop_plot, 6, 1, 1, 1)

        self.strengths_label = QLabel(self.plot_strength_page)
        self.strengths_label.setObjectName(u"strengths_label")

        self.gridLayout_5.addWidget(self.strengths_label, 2, 0, 1, 1)

        self.label_3 = QLabel(self.plot_strength_page)
        self.label_3.setObjectName(u"label_3")

        self.gridLayout_5.addWidget(self.label_3, 4, 0, 1, 1)

        self.lineEdit_3 = QLineEdit(self.plot_strength_page)
        self.lineEdit_3.setObjectName(u"lineEdit_3")

        self.gridLayout_5.addWidget(self.lineEdit_3, 4, 1, 1, 2)

        self.stacked_widget.addWidget(self.plot_strength_page)
        self.plot_history_page = QWidget()
        self.plot_history_page.setObjectName(u"plot_history_page")
        self.gridLayout_6 = QGridLayout(self.plot_history_page)
        self.gridLayout_6.setObjectName(u"gridLayout_6")
        self.label_4 = QLabel(self.plot_history_page)
        self.label_4.setObjectName(u"label_4")

        self.gridLayout_6.addWidget(self.label_4, 0, 0, 1, 1)

        self.history_game = QComboBox(self.plot_history_page)
        self.history_game.setObjectName(u"history_game")

        self.gridLayout_6.addWidget(self.history_game, 0, 1, 1, 1)

        self.gridLayout_6.setColumnStretch(0, 1)
        self.gridLayout_6.setColumnStretch(1, 8)
        self.stacked_widget.addWidget(self.plot_history_page)

        self.verticalLayout_2.addWidget(self.stacked_widget)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 911, 22))
        self.menu_file = QMenu(self.menubar)
        self.menu_file.setObjectName(u"menu_file")
        self.menu_new = QMenu(self.menu_file)
        self.menu_new.setObjectName(u"menu_new")
        self.menu_view = QMenu(self.menubar)
        self.menu_view.setObjectName(u"menu_view")
        self.menu_help = QMenu(self.menubar)
        self.menu_help.setObjectName(u"menu_help")
        self.menu_rules = QMenu(self.menu_help)
        self.menu_rules.setObjectName(u"menu_rules")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.menubar.addAction(self.menu_file.menuAction())
        self.menubar.addAction(self.menu_view.menuAction())
        self.menubar.addAction(self.menu_help.menuAction())
        self.menu_file.addAction(self.menu_new.menuAction())
        self.menu_file.addAction(self.action_open)
        self.menu_file.addAction(self.action_save)
        self.menu_file.addAction(self.action_save_log)
        self.menu_file.addAction(self.action_new_db)
        self.menu_file.addAction(self.action_open_db)
        self.menu_new.addAction(self.action_game)
        self.menu_new.addAction(self.action_comparison)
        self.menu_new.addAction(self.action_plot)
        self.menu_new.addAction(self.action_training_session)
        self.menu_view.addAction(self.action_coordinates)
        self.menu_help.addAction(self.action_about)
        self.menu_help.addAction(self.menu_rules.menuAction())

        self.retranslateUi(MainWindow)

        self.stacked_widget.setCurrentIndex(2)

        QMetaObject.connectSlotsByName(MainWindow)

    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(
            QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.action_open.setText(
            QCoreApplication.translate("MainWindow", u"&Open...", None))
        self.action_comparison.setText(
            QCoreApplication.translate("MainWindow", u"&Comparison", None))
        self.action_plot.setText(
            QCoreApplication.translate("MainWindow", u"&Plot", None))
        self.action_training_session.setText(
            QCoreApplication.translate("MainWindow", u"&Training Session",
                                       None))
        self.action_game.setText(
            QCoreApplication.translate("MainWindow", u"&Game", None))
        self.action_save.setText(
            QCoreApplication.translate("MainWindow", u"&Save...", None))
        self.action_save_log.setText(
            QCoreApplication.translate("MainWindow", u"Save &Log...", None))
        self.action_coordinates.setText(
            QCoreApplication.translate("MainWindow", u"Coordinates", None))
        self.action_about.setText(
            QCoreApplication.translate("MainWindow", u"&About...", None))
        self.action_new_db.setText(
            QCoreApplication.translate("MainWindow",
                                       u"New Player &Database...", None))
        self.action_open_db.setText(
            QCoreApplication.translate("MainWindow",
                                       u"&Open Player Database...", None))
        self.connect4.setText(
            QCoreApplication.translate("MainWindow", u"Connect 4", None))
        self.tic_tac_toe.setText(
            QCoreApplication.translate("MainWindow", u"Tic Tac Toe", None))
        self.othello.setText(
            QCoreApplication.translate("MainWindow", u"Othello", None))
        self.searches_lock2.setText(
            QCoreApplication.translate("MainWindow", u"Lock", None))
        self.cancel.setText(
            QCoreApplication.translate("MainWindow", u"Cancel", None))
        self.searches_label1.setText(
            QCoreApplication.translate("MainWindow", u"searches", None))
        self.searches_lock1.setText(
            QCoreApplication.translate("MainWindow", u"Lock", None))
        self.game_label.setText(
            QCoreApplication.translate("MainWindow", u"Game:", None))
        self.game_name.setText(
            QCoreApplication.translate("MainWindow", u"Chosen Game's Name",
                                       None))
        self.searches_label2.setText(
            QCoreApplication.translate("MainWindow", u"searches", None))
        self.player_label1.setText(
            QCoreApplication.translate("MainWindow", u"Player 1:", None))
        self.player_label2.setText(
            QCoreApplication.translate("MainWindow", u"Player 2:", None))
        self.shuffle_players.setText(
            QCoreApplication.translate("MainWindow", u"Shuffle Player Order",
                                       None))
        self.start.setText(
            QCoreApplication.translate("MainWindow", u"Start", None))
        self.close_humans.setText(
            QCoreApplication.translate("MainWindow", u"OK", None))
        self.players_label.setText(
            QCoreApplication.translate("MainWindow", u"Players", None))
        self.new_human.setText(
            QCoreApplication.translate("MainWindow", u"New", None))
        self.rules_close.setText(
            QCoreApplication.translate("MainWindow", u"Close", None))
        self.toggle_review.setText(
            QCoreApplication.translate("MainWindow", u"Review / Resume", None))
        self.resume_here.setText(
            QCoreApplication.translate("MainWindow", u"Resume Here", None))
        self.game_display.setText(
            QCoreApplication.translate("MainWindow", u"Game Display", None))
        self.label.setText(
            QCoreApplication.translate("MainWindow", u"Game:", None))
        #if QT_CONFIG(whatsthis)
        self.lineEdit.setWhatsThis("")
        #endif // QT_CONFIG(whatsthis)
        self.label_2.setText(
            QCoreApplication.translate("MainWindow", u"Opponent min:", None))
        self.reset_plot.setText(
            QCoreApplication.translate("MainWindow", u"Reset", None))
        self.start_stop_plot.setText(
            QCoreApplication.translate("MainWindow", u"Start / Stop", None))
        self.strengths_label.setText(
            QCoreApplication.translate("MainWindow", u"Player Strengths:",
                                       None))
        self.label_3.setText(
            QCoreApplication.translate("MainWindow", u"Opponent max:", None))
        self.label_4.setText(
            QCoreApplication.translate("MainWindow", u"Game:", None))
        self.menu_file.setTitle(
            QCoreApplication.translate("MainWindow", u"&File", None))
        self.menu_new.setTitle(
            QCoreApplication.translate("MainWindow", u"&New", None))
        self.menu_view.setTitle(
            QCoreApplication.translate("MainWindow", u"&View", None))
        self.menu_help.setTitle(
            QCoreApplication.translate("MainWindow", u"&Help", None))
        self.menu_rules.setTitle(
            QCoreApplication.translate("MainWindow", u"&Rules", None))
Beispiel #11
0
class Window(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.images = []
        self.index = -1
        self.ratio = 1  # ratio for QLabel image
        self.mouse_position = None
        self.settings = None

        # Extensions
        self.extensions = []
        for format in QImageReader.supportedImageFormats():
            self.extensions.append(format.data().decode('utf-8'))

        # Filters
        self.filters = []
        for extension in self.extensions:
            self.filters.append('*.{0}'.format(str(extension)))

        # UI
        self.set_up_ui()

        # settings
        self.load_settings()

    def on_message_received(self, msg):
        """ on message received from single application

        Args:
            msg (string): file path
        """
        self.create_images(msg)
        self.display_image()

    def set_up_ui(self):
        # Status Bar
        self.status_bar = self.statusBar()
        self.label_name = QLabel()
        self.label_numero = QLabel()
        self.status_bar.addPermanentWidget(self.label_name, 1)
        self.status_bar.addPermanentWidget(self.label_numero, 0)

        # Main Window
        self.setWindowTitle('BaloViewer')
        self.setWindowIcon(QIcon('baloviewer.ico'))

        # Label image
        self.image = QLabel()
        self.image.setScaledContents(True)

        # Scroll area
        self.scroll_area = QScrollArea()
        self.scroll_area.setWidget(self.image)
        self.scroll_area.showMaximized()
        self.scroll_area.setFocusPolicy(Qt.FocusPolicy.NoFocus)
        self.scroll_area.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.scroll_area.viewport().installEventFilter(self)

        # image list
        self.image_gallery = ImageGallery()
        self.image_gallery.itemClicked.connect(self.image_gallery_clicked)
        self.image_gallery.viewport().installEventFilter(self)
        self.dock_widget = QDockWidget('Image Gallery', self)
        self.dock_widget.setWidget(self.image_gallery)
        self.dock_widget.setFloating(False)
        self.addDockWidget(Qt.LeftDockWidgetArea, self.dock_widget)

        # central widget
        self.setCentralWidget(self.scroll_area)

        # Action bar
        self.create_actions()
        self.create_menubar()
        self.create_toolbar()

        # option parser
        parser = OptionParser()
        parser.add_option("-f", "--file", dest="filename", help="open a file")
        (options, args) = parser.parse_args()
        parser_file = options.filename
        if parser_file is not None and os.path.isfile(parser_file):
            self.create_images(parser_file)
            self.display_image()

    def create_actions(self):
        # Action Open
        self.action_open = QAction(QIcon.fromTheme('document-open'), 'Open',
                                   self)
        self.action_open.setShortcut('Ctrl+O')
        self.action_open.setStatusTip('Open file')
        self.action_open.triggered.connect(self.open)

        # Action Save
        self.action_save = QAction(QIcon.fromTheme('document-save'), 'Save',
                                   self)
        self.action_save.setShortcut('Ctrl+S')
        self.action_save.setStatusTip('Save file')
        self.action_save.triggered.connect(self.save)

        # Action Copy
        self.action_copy = QAction(QIcon.fromTheme('edit-copy'), 'Copy', self)
        self.action_copy.setStatusTip('Copy')
        self.action_copy.triggered.connect(self.copy)

        # Action move
        self.action_move = QAction(QIcon.fromTheme('edit-cut'), 'Move', self)
        self.action_move.setStatusTip('Move')
        self.action_move.triggered.connect(self.move)

        # Action Delete
        self.action_delete = QAction(QIcon.fromTheme('edit-delete'), 'Delete',
                                     self)
        self.action_delete.setStatusTip('Delete')
        self.action_delete.triggered.connect(self.delete)

        # Action Quit
        self.action_quit = QAction(QIcon.fromTheme('application-exit'), 'Quit',
                                   self)
        self.action_quit.setShortcut('Ctrl+Q')
        self.action_quit.setStatusTip('Quit')
        self.action_quit.triggered.connect(self.close)

        # Action Rotate left
        self.action_rotate_left = QAction(
            QIcon.fromTheme('object-rotate-left'), 'Rotate left', self)
        self.action_rotate_left.setStatusTip('Rotate left')
        self.action_rotate_left.triggered.connect(self.rotate_left)

        # Action Rotate right
        self.action_rotate_right = QAction(
            QIcon.fromTheme('object-rotate-right'), 'Rotate right', self)
        self.action_rotate_right.setStatusTip('Rotate right')
        self.action_rotate_right.triggered.connect(self.rotate_right)

        # Action Mirror
        self.action_flip_horizontal = QAction(
            QIcon.fromTheme('object-flip-horizontal'), 'Flip horizontally',
            self)
        self.action_flip_horizontal.setStatusTip('Flip horizontally')
        self.action_flip_horizontal.triggered.connect(self.flip_horizontal)

        # Action Flip vertical
        self.action_flip_vertical = QAction(
            QIcon.fromTheme('object-flip-vertical'), 'Flip vertically', self)
        self.action_flip_vertical.setStatusTip('Flip vertically')
        self.action_flip_vertical.triggered.connect(self.flip_vertical)

        # Action Previous image
        self.action_previous_image = QAction(QIcon.fromTheme('go-previous'),
                                             'Previous image', self)
        self.action_previous_image.setStatusTip('Previous image')
        self.action_previous_image.triggered.connect(self.previous_image)

        # Action Full screen
        self.action_fullscreen = QAction(QIcon.fromTheme('view-fullscreen'),
                                         'Full screen', self)
        self.action_fullscreen.setStatusTip('Full screen')
        self.action_fullscreen.triggered.connect(self.fullscreen)

        # Action Normal size
        self.action_normal_size = QAction(QIcon.fromTheme('zoom-original'),
                                          'Normal size', self)
        self.action_normal_size.setStatusTip('Normal Size')
        self.action_normal_size.triggered.connect(self.normal_size)

        # Action Fit Screen
        self.action_fit_screen = QAction(QIcon.fromTheme('zoom-fit-best'),
                                         'Fit to screen', self)
        self.action_fit_screen.setStatusTip('Fit to screen')
        self.action_fit_screen.setCheckable(True)
        self.action_fit_screen.triggered.connect(self.fit_screen)

        # Action Zoom in
        self.action_zoom_in = QAction(QIcon.fromTheme('zoom-in'), 'Zoom in',
                                      self)
        self.action_zoom_in.setStatusTip('Zoom in')
        self.action_zoom_in.triggered.connect(self.zoom_in)

        # Action Zoom out
        self.action_zoom_out = QAction(QIcon.fromTheme('zoom-out'), 'Zoom out',
                                       self)
        self.action_zoom_out.setStatusTip('Zoom out')
        self.action_zoom_out.triggered.connect(self.zoom_out)

        # Action Fit height
        self.action_fit_vertical = QAction('Fit vertically', self)
        self.action_fit_vertical.setStatusTip('Fit vertically')
        self.action_fit_vertical.setCheckable(True)
        self.action_fit_vertical.triggered.connect(self.fit_height)

        # Action Fit width
        self.action_fit_horizontal = QAction('Fit horizontally', self)
        self.action_fit_horizontal.setStatusTip('Fit horizontally')
        self.action_fit_horizontal.setCheckable(True)
        self.action_fit_horizontal.triggered.connect(self.fit_width)

        # Action Fit width
        self.action_fit_horizontal = QAction('Fit horizontally', self)
        self.action_fit_horizontal.setStatusTip('Fit horizontally')
        self.action_fit_horizontal.setCheckable(True)
        self.action_fit_horizontal.triggered.connect(self.fit_width)

        # Action Image list
        self.action_image_gallery = QAction('Image gallery', self)
        self.action_image_gallery.setStatusTip('Image gallery')
        self.action_image_gallery.setCheckable(True)
        self.action_image_gallery.triggered.connect(
            self.image_gallery_triggered)

        # Action Next_image
        self.action_next_image = QAction(QIcon.fromTheme('go-next'),
                                         'Next image', self)
        self.action_next_image.setStatusTip('Next image')
        self.action_next_image.triggered.connect(self.next_image)

        # Action First image
        self.action_first_image = QAction(QIcon.fromTheme('go-first'),
                                          'First image', self)
        self.action_first_image.setStatusTip('First image')
        self.action_first_image.triggered.connect(self.first_image)

        # Action Last image
        self.action_last_image = QAction(QIcon.fromTheme('go-last'),
                                         'Last image', self)
        self.action_last_image.setStatusTip('Last image')
        self.action_last_image.triggered.connect(self.last_image)

        # Action About
        self.action_about = QAction(QIcon.fromTheme('help-about'), 'About',
                                    self)
        self.action_about.setStatusTip('About')
        self.action_about.triggered.connect(self.about)

    def create_menubar(self):
        self.menubar = self.menuBar()

        # File
        self.menu_file = self.menubar.addMenu('File')
        self.menu_file.addAction(self.action_open)
        self.menu_file.addAction(self.action_save)
        self.menu_file.addSeparator()
        self.menu_file.addAction(self.action_copy)
        self.menu_file.addAction(self.action_move)
        self.menu_file.addAction(self.action_delete)
        self.menu_file.addSeparator()
        self.menu_file.addAction(self.action_quit)

        # Edit
        self.menu_edit = self.menubar.addMenu('Edit')
        self.menu_edit.addAction(self.action_rotate_left)
        self.menu_edit.addAction(self.action_rotate_right)
        self.menu_edit.addSeparator()
        self.menu_edit.addAction(self.action_flip_horizontal)
        self.menu_edit.addAction(self.action_flip_vertical)

        # View
        self.menu_view = self.menubar.addMenu('View')
        self.menu_view.addAction(self.action_fullscreen)
        self.menu_view.addAction(self.action_normal_size)
        self.menu_view.addAction(self.action_fit_screen)
        self.menu_view.addSeparator()
        self.menu_view.addAction(self.action_zoom_in)
        self.menu_view.addAction(self.action_zoom_out)
        self.menu_view.addSeparator()
        self.menu_view.addAction(self.action_fit_vertical)
        self.menu_view.addAction(self.action_fit_horizontal)
        self.menu_view.addSeparator()
        self.menu_view.addAction(self.action_image_gallery)

        # Go
        self.menu_go = self.menubar.addMenu('Go')
        self.menu_go.addAction(self.action_previous_image)
        self.menu_go.addAction(self.action_next_image)
        self.menu_go.addSeparator()
        self.menu_go.addAction(self.action_first_image)
        self.menu_go.addAction(self.action_last_image)

        # About
        self.menu_about = self.menubar.addMenu('About')
        self.menu_about.addAction(self.action_about)

    def create_toolbar(self):
        self.toolbar = self.addToolBar('Tool bar')

        self.toolbar.addAction(self.action_open)
        self.toolbar.addAction(self.action_save)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.action_fullscreen)
        self.toolbar.addAction(self.action_normal_size)
        self.toolbar.addAction(self.action_fit_screen)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.action_zoom_in)
        self.toolbar.addAction(self.action_zoom_out)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.action_rotate_left)
        self.toolbar.addAction(self.action_rotate_right)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.action_first_image)
        self.toolbar.addAction(self.action_previous_image)
        self.toolbar.addAction(self.action_next_image)
        self.toolbar.addAction(self.action_last_image)
        self.toolbar.addSeparator()
        self.toolbar.addAction(self.action_copy)
        self.toolbar.addAction(self.action_move)

    def load_settings(self):
        self.settings = QSettings()
        check_state = self.settings.value('view/image_gallery',
                                          True,
                                          type=bool)
        self.action_image_gallery.setChecked(check_state)
        self.image_gallery_triggered()

    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())

    def eventFilter(self, obj, event):
        """ filter events for wheel events

        Args:
            obj (QWidget): scroll_area
            event (QEvent): event
        """

        # try:
        if event.type() == QEvent.Wheel:
            if event.angleDelta().y() < 0:
                self.next_image()
            else:
                self.previous_image()

            return True
        elif event.type() == QEvent.MouseButtonPress and event.button(
        ) == Qt.RightButton:
            index = self.image_gallery.select_row_pos()
            if index > -1:
                self.index = index
                self.display_image()
                return True
        # pass the event on to the parent class
        return super(QMainWindow, self).eventFilter(obj, event)

    def keyPressEvent(self, event):
        key = event.key()
        if key == Qt.Key_Delete:
            self.delete()
        elif key == Qt.Key_Left:
            self.previous_image()
        elif key == Qt.Key_Right:
            self.next_image()
        elif key == Qt.Key_PageUp:
            self.first_image()
        elif key == Qt.Key_PageDown:
            self.last_image()
        elif key == Qt.Key_Escape and self.isFullScreen():
            self.fullscreen()
        else:
            QWidget.keyPressEvent(self, event)

    def mouseDoubleClickEvent(self, QMouseEvent):
        self.fullscreen()

    def mousePressEvent(self, QMouseEvent):
        self.mouse_position = QMouseEvent.pos()

    def mouseMoveEvent(self, QMouseEvent):
        diff = QPoint(QMouseEvent.pos() - self.mouse_position)
        self.mouse_position = QMouseEvent.pos()
        self.scroll_area.verticalScrollBar().setValue(
            self.scroll_area.verticalScrollBar().value() - diff.y())
        self.scroll_area.horizontalScrollBar().setValue(
            self.scroll_area.horizontalScrollBar().value() - diff.x())

    def resizeEvent(self, event):
        if not self.index == -1:
            self.display_image()

    def create_images(self, filename):
        """Create image list

        Args:
            filename (string): file from which to retrieve the list of images in the folder
        """

        self.images.clear()
        # get images only with an allowed extension
        for ext in self.extensions:
            self.images += glob.glob(
                os.path.join(
                    glob.escape(os.path.dirname(filename)),
                    '*.' + ''.join('[%s%s]' % (e.lower(), e.upper())
                                   for e in ext)))

        self.images.sort()
        if filename in self.images:
            self.index = self.images.index(filename)
        else:
            self.index = -1

        # iamge list
        self.image_gallery.add_images(self.images)

    def remove_index(self):
        """ remove file from list images and display next or previous image
        """

        del self.images[self.index]
        self.image_gallery.remove_row(self.index)

        if len(self.images) == 0:
            self.images.clear()
            self.index = -1
            self.image.clear()
            self.image.resize(self.image.minimumSizeHint())
        elif self.index < len(self.images) - 1:
            self.display_image()
        else:
            self.index = len(self.images) - 1
            self.display_image()

    def display_image(self):
        if not self.index == -1:
            self.image.clear()
            self.image.resize(self.image.minimumSizeHint())

            file = self.images[self.index]
            if os.path.isfile(file):
                self.label_name.setText(file)
                self.label_numero.setText(
                    str(self.index + 1) + ' / ' + str(len(self.images)))

                # image list
                self.image_gallery.select_row(self.index)

                image_reader = QImageReader(file)
                if image_reader.imageCount() > 1:
                    # Animated image
                    movie = QMovie(file)
                    movie.setCacheMode(QMovie.CacheAll)
                    movie.jumpToFrame(0)
                    movie_size = movie.currentPixmap().size()
                    self.image.setMovie(movie)
                    self.image.resize(movie_size)
                    movie.start()
                else:
                    self.image.setPixmap(QPixmap(file))
                    self.image.resize(self.image.pixmap().size())

                # fit image
                if self.action_fit_screen.isChecked():
                    self.fit_screen()
                elif self.action_fit_horizontal.isChecked():
                    self.fit_width()
                elif self.action_fit_vertical.isChecked():
                    self.fit_height()

                else:
                    self.ratio = 1.0

                self.action_zoom_in.setEnabled(True)
                self.action_zoom_out.setEnabled(True)

                # scrollbar position
                self.scroll_area.verticalScrollBar().setSliderPosition(0)
                self.scroll_area.horizontalScrollBar().setSliderPosition(0)

    def resize_image(self):
        if self.action_fit_screen.isChecked():
            self.fit_screen()
        elif self.action_fit_horizontal.isChecked():
            self.fit_width()
        elif self.action_fit_vertical.isChecked():
            self.fit_height()
        elif self.image.pixmap():
            self.image.resize(self.ratio * self.image.pixmap().size())
        elif movie := self.image.movie():
            movie.jumpToFrame(0)
            movie_size = movie.currentPixmap().size()
            self.image.resize(self.ratio * movie_size)
Beispiel #12
0
class EvelynDesktop(QStackedWidget):
    INTERVAL_SECS = 30
    ALERT_SECS = 5

    signal_get_ping = Signal()
    signal_post_history = Signal(int, QDateTime)

    def __init__(
            self,
            config_file: str
    ) -> None:
        super().__init__()
        # load config
        try:
            self.config = Config(config_file)
        except Exception as e:
            QMessageBox.critical(self, 'Config error', str(e))
            QTimer.singleShot(0, self.close)
            return
        # load settings
        self.settings = Settings()
        # state
        self.state_key: Optional[int] = None
        # label widget
        self.label_ping = ClickableLabel('Loading ...', self.post_history)
        self.label_ping.setTextFormat(Qt.RichText)
        self.label_ping.setSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
        layout_ping = QGridLayout()
        layout_ping.setContentsMargins(0, 0, 0, 0)
        layout_ping.addWidget(self.label_ping)
        self.widget_ping = QWidget()
        self.widget_ping.setLayout(layout_ping)
        self.addWidget(self.widget_ping)
        # alert widget
        self.label_alert = QLabel()
        self.label_alert.setWordWrap(True)
        self.label_alert.setAlignment(Qt.AlignCenter)
        self.label_alert.setStyleSheet(f'background: #dddddd;')
        self.addWidget(self.label_alert)
        # context menu
        self.action_report_done = QAction('Report done ...')
        self.action_report_done.triggered.connect(self.report_done)
        self.action_exit = QAction('Exit')
        self.action_exit.triggered.connect(self.close)
        self.action_frameless = QAction('Frameless window')
        self.action_frameless.setCheckable(True)
        self.action_frameless.triggered.connect(self.set_frameless_window)
        self.action_homepage = QAction('Open homepage')
        self.action_homepage.triggered.connect(self.open_homepage)
        self.context_menu = QMenu()
        self.context_menu.addAction(self.action_report_done)
        self.context_menu.addAction(self.action_exit)
        self.context_menu.addAction(self.action_frameless)
        self.context_menu.addAction(self.action_homepage)
        # threads
        self.thread_communication = QThread()
        self.thread_communication.start()
        # workers
        self.worker_communication = CommunicationWorker(
            netloc=self.config.netloc,
            base_path=self.config.base_path,
            api_key=self.config.api_key,
            guild=self.config.guild,
            member=self.config.member)
        self.worker_communication.moveToThread(self.thread_communication)
        # signals
        self.worker_communication.signal_get_ping_done.connect(self.get_ping_done)
        self.worker_communication.signal_post_history_done.connect(self.post_history_done)
        self.signal_get_ping.connect(self.worker_communication.get_ping)
        self.signal_post_history.connect(self.worker_communication.post_history)
        # get ping timer
        QTimer.singleShot(0, self.get_ping)
        self.timer_ping = QTimer()
        self.timer_ping.timeout.connect(self.get_ping)
        self.timer_ping.setTimerType(Qt.VeryCoarseTimer)
        self.timer_ping.start(self.INTERVAL_SECS * 1000)
        # switch label timer
        self.timer_label = QTimer()
        self.timer_label.timeout.connect(lambda: self.setCurrentWidget(self.widget_ping))
        self.timer_label.setSingleShot(True)
        self.timer_label.setTimerType(Qt.CoarseTimer)
        # window attributes
        size = self.settings.get('window', 'size', type_=QSize)
        if size is not None:
            self.resize(size)
        pos = self.settings.get('window', 'pos', type_=QPoint)
        if pos is not None:
            self.move(pos)
        frameless = self.settings.get('window', 'frameless', type_=bool)
        if frameless is not None and frameless:
            QTimer.singleShot(100, self.action_frameless.trigger)
        self.setWindowFlag(Qt.WindowStaysOnTopHint, self.config.window_stays_on_top)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setWindowTitle('Evelyn Reminder')

    def closeEvent(
            self,
            event: QCloseEvent
    ) -> None:
        # save settings
        with suppress_and_log_exception():
            self.settings.set('window', 'size', self.size())
            self.settings.set('window', 'pos', self.pos())
            self.settings.set('window', 'frameless', bool(self.windowFlags() & Qt.FramelessWindowHint))
        # stop communication thread
        with suppress_and_log_exception():
            self.thread_communication.quit()
            self.thread_communication.wait()
        # done
        super().closeEvent(event)

    def contextMenuEvent(
            self,
            event: QContextMenuEvent
    ) -> None:
        self.context_menu.exec_(event.globalPos())

    @Slot()
    def get_ping(self) -> None:
        logging.info('Get ping ...')
        self.signal_get_ping.emit()

    @Slot(int, str, str)
    def get_ping_done(
            self,
            key: int,
            text: str,
            color: str
    ) -> None:
        logging.info('Get ping done')
        if key == -1:
            self.state_key = None
            self.label_ping.setWordWrap(True)
        else:
            self.state_key = key
            self.label_ping.setWordWrap(False)
        self.label_ping.setText(text)
        self.widget_ping.setStyleSheet(f'background : {color}; ')

    @Slot()
    def post_history(
            self,
            date_time: QDateTime = QDateTime()
    ) -> None:
        # this method is called as Slot by ClickableLabel.mouseReleaseEvent() without arguments
        # this method is called directly by EvelynDesktop.report_done() with a date_time
        if self.state_key is None:
            return
        logging.info('Post history ...')
        self.label_alert.setText('Sending ...')
        self.label_alert.setStyleSheet(f'background: #dddddd;')
        self.setCurrentWidget(self.label_alert)
        self.signal_post_history.emit(self.state_key, date_time)

    @Slot(str, bool)
    def post_history_done(
            self,
            text: str,
            error: bool
    ) -> None:
        logging.info('Post history done')
        self.label_alert.setText(text)
        if error:
            self.label_alert.setStyleSheet(f'background: #dd4b4b;')
        self.timer_label.start(self.ALERT_SECS * 1000)
        # trigger instant ping update to avoid outdated info
        self.timer_ping.stop()
        self.timer_ping.start(self.INTERVAL_SECS * 1000)
        self.get_ping()

    @Slot()
    def report_done(self) -> None:
        self.timer_ping.stop()  # stop ping update while dialog is open
        report_done_dialog = ReportDoneDialog(self)
        response = report_done_dialog.exec()
        if response != QDialog.Accepted:
            self.timer_ping.start(self.INTERVAL_SECS * 1000)
            self.get_ping()
            return
        date_time = report_done_dialog.get_date_time()
        self.post_history(date_time)

    @Slot(bool)
    def set_frameless_window(
            self,
            value: bool
    ) -> None:
        pos = self.pos()
        self.setWindowFlag(Qt.FramelessWindowHint, value)
        # workaround: window goes invisible otherwise
        self.setVisible(True)
        # workaround: window would move up otherwise
        if value:
            QTimer.singleShot(100, lambda: self.move(pos))

    @Slot()
    def open_homepage(self) -> None:
        webbrowser.open('https://github.com/stefs/evelyn-reminder')
Beispiel #13
0
class Ui_IscApp(object):
    def setupUi(self, IscApp):
        if not IscApp.objectName():
            IscApp.setObjectName(u"IscApp")
        IscApp.resize(1440, 923)
        IscApp.setCursor(QCursor(Qt.ArrowCursor))
        IscApp.setMouseTracking(True)
        self.actionUndo = QAction(IscApp)
        self.actionUndo.setObjectName(u"actionUndo")
        self.actionRedo = QAction(IscApp)
        self.actionRedo.setObjectName(u"actionRedo")
        self.actionView_statusbar = QAction(IscApp)
        self.actionView_statusbar.setObjectName(u"actionView_statusbar")
        self.actionView_statusbar.setCheckable(True)
        self.actionView_statusbar.setChecked(True)
        self.actionView_step_preview = QAction(IscApp)
        self.actionView_step_preview.setObjectName(u"actionView_step_preview")
        self.actionView_step_preview.setCheckable(True)
        self.actionView_step_preview.setChecked(True)
        self.actionInsert = QAction(IscApp)
        self.actionInsert.setObjectName(u"actionInsert")
        self.actionShell_Image = QAction(IscApp)
        self.actionShell_Image.setObjectName(u"actionShell_Image")
        self.actionSection_steps = QAction(IscApp)
        self.actionSection_steps.setObjectName(u"actionSection_steps")
        self.actionAttach_audio = QAction(IscApp)
        self.actionAttach_audio.setObjectName(u"actionAttach_audio")
        self.actionBulk_crop = QAction(IscApp)
        self.actionBulk_crop.setObjectName(u"actionBulk_crop")
        self.actionView_demo_in_folder = QAction(IscApp)
        self.actionView_demo_in_folder.setObjectName(u"actionView_demo_in_folder")
        self.actionLoad_tool_state = QAction(IscApp)
        self.actionLoad_tool_state.setObjectName(u"actionLoad_tool_state")
        self.actionSave_tool_state = QAction(IscApp)
        self.actionSave_tool_state.setObjectName(u"actionSave_tool_state")
        self.actionOpen_DemoMate = QAction(IscApp)
        self.actionOpen_DemoMate.setObjectName(u"actionOpen_DemoMate")
        self.actionOpen_Cloudguides_Packaging = QAction(IscApp)
        self.actionOpen_Cloudguides_Packaging.setObjectName(u"actionOpen_Cloudguides_Packaging")
        self.actionAbout = QAction(IscApp)
        self.actionAbout.setObjectName(u"actionAbout")
        self.actionHelp_2 = QAction(IscApp)
        self.actionHelp_2.setObjectName(u"actionHelp_2")
        self.actionImage_Insert = QAction(IscApp)
        self.actionImage_Insert.setObjectName(u"actionImage_Insert")
        self.actionImage_Shelling = QAction(IscApp)
        self.actionImage_Shelling.setObjectName(u"actionImage_Shelling")
        self.actionHelp_3 = QAction(IscApp)
        self.actionHelp_3.setObjectName(u"actionHelp_3")
        self.actionBulk_insert_image = QAction(IscApp)
        self.actionBulk_insert_image.setObjectName(u"actionBulk_insert_image")
        self.actionBulk_shell_steps = QAction(IscApp)
        self.actionBulk_shell_steps.setObjectName(u"actionBulk_shell_steps")
        self.actionBulk_crop_step_assets = QAction(IscApp)
        self.actionBulk_crop_step_assets.setObjectName(u"actionBulk_crop_step_assets")
        self.actionAttach_audio_to_demo = QAction(IscApp)
        self.actionAttach_audio_to_demo.setObjectName(u"actionAttach_audio_to_demo")
        self.actionClose = QAction(IscApp)
        self.actionClose.setObjectName(u"actionClose")
        self.actionClose_2 = QAction(IscApp)
        self.actionClose_2.setObjectName(u"actionClose_2")
        self.actionFrom_demo_file = QAction(IscApp)
        self.actionFrom_demo_file.setObjectName(u"actionFrom_demo_file")
        self.actionFrom_exe_installer = QAction(IscApp)
        self.actionFrom_exe_installer.setObjectName(u"actionFrom_exe_installer")
        self.actionFrom_docx_file = QAction(IscApp)
        self.actionFrom_docx_file.setObjectName(u"actionFrom_docx_file")
        self.actionFrom_scripts_folder = QAction(IscApp)
        self.actionFrom_scripts_folder.setObjectName(u"actionFrom_scripts_folder")
        self.actionOverwrite = QAction(IscApp)
        self.actionOverwrite.setObjectName(u"actionOverwrite")
        self.actionMerge_demos = QAction(IscApp)
        self.actionMerge_demos.setObjectName(u"actionMerge_demos")
        self.actionLoad_audio_directory = QAction(IscApp)
        self.actionLoad_audio_directory.setObjectName(u"actionLoad_audio_directory")
        self.actionLoad_soundbite = QAction(IscApp)
        self.actionLoad_soundbite.setObjectName(u"actionLoad_soundbite")
        self.actionEdit_audio = QAction(IscApp)
        self.actionEdit_audio.setObjectName(u"actionEdit_audio")
        self.actionAttach_audio_to_demo_2 = QAction(IscApp)
        self.actionAttach_audio_to_demo_2.setObjectName(u"actionAttach_audio_to_demo_2")
        self.actionBulk_edit_demo_audio = QAction(IscApp)
        self.actionBulk_edit_demo_audio.setObjectName(u"actionBulk_edit_demo_audio")
        self.actionEdit_step_audio = QAction(IscApp)
        self.actionEdit_step_audio.setObjectName(u"actionEdit_step_audio")
        self.actionBulk_paste_image = QAction(IscApp)
        self.actionBulk_paste_image.setObjectName(u"actionBulk_paste_image")
        self.actionBulk_image_paste_wizard = QAction(IscApp)
        self.actionBulk_image_paste_wizard.setObjectName(u"actionBulk_image_paste_wizard")
        self.actionBulk_shell_demo_assets = QAction(IscApp)
        self.actionBulk_shell_demo_assets.setObjectName(u"actionBulk_shell_demo_assets")
        self.actionSection_demo = QAction(IscApp)
        self.actionSection_demo.setObjectName(u"actionSection_demo")
        self.actionBulk_resize_demo_assets = QAction(IscApp)
        self.actionBulk_resize_demo_assets.setObjectName(u"actionBulk_resize_demo_assets")
        self.actionBulk_crop_demo_assets = QAction(IscApp)
        self.actionBulk_crop_demo_assets.setObjectName(u"actionBulk_crop_demo_assets")
        self.actionPacing_wizard = QAction(IscApp)
        self.actionPacing_wizard.setObjectName(u"actionPacing_wizard")
        self.actionCompose_demos = QAction(IscApp)
        self.actionCompose_demos.setObjectName(u"actionCompose_demos")
        self.actionBulk_edit_demo_metadata = QAction(IscApp)
        self.actionBulk_edit_demo_metadata.setObjectName(u"actionBulk_edit_demo_metadata")
        self.actionLoad_script = QAction(IscApp)
        self.actionLoad_script.setObjectName(u"actionLoad_script")
        self.actionConvert_script = QAction(IscApp)
        self.actionConvert_script.setObjectName(u"actionConvert_script")
        self.actionSpelling_errors = QAction(IscApp)
        self.actionSpelling_errors.setObjectName(u"actionSpelling_errors")
        self.actionGrammar_errors = QAction(IscApp)
        self.actionGrammar_errors.setObjectName(u"actionGrammar_errors")
        self.actionProduction_notes = QAction(IscApp)
        self.actionProduction_notes.setObjectName(u"actionProduction_notes")
        self.actionTalking_points = QAction(IscApp)
        self.actionTalking_points.setObjectName(u"actionTalking_points")
        self.actionClick_instructions = QAction(IscApp)
        self.actionClick_instructions.setObjectName(u"actionClick_instructions")
        self.actionPackage_demo = QAction(IscApp)
        self.actionPackage_demo.setObjectName(u"actionPackage_demo")
        self.actionSingle_image = QAction(IscApp)
        self.actionSingle_image.setObjectName(u"actionSingle_image")
        self.actionMultiple_images = QAction(IscApp)
        self.actionMultiple_images.setObjectName(u"actionMultiple_images")
        self.actionImage_insert_wizar = QAction(IscApp)
        self.actionImage_insert_wizar.setObjectName(u"actionImage_insert_wizar")
        self.actionAdd_background_image = QAction(IscApp)
        self.actionAdd_background_image.setObjectName(u"actionAdd_background_image")
        self.actionAdd_background_and_wrapper = QAction(IscApp)
        self.actionAdd_background_and_wrapper.setObjectName(u"actionAdd_background_and_wrapper")
        self.actionShell_wizard = QAction(IscApp)
        self.actionShell_wizard.setObjectName(u"actionShell_wizard")
        self.actionCrop = QAction(IscApp)
        self.actionCrop.setObjectName(u"actionCrop")
        self.actionResize = QAction(IscApp)
        self.actionResize.setObjectName(u"actionResize")
        self.actionLoad_operation = QAction(IscApp)
        self.actionLoad_operation.setObjectName(u"actionLoad_operation")
        self.actionSave_operation = QAction(IscApp)
        self.actionSave_operation.setObjectName(u"actionSave_operation")
        self.actionClose_3 = QAction(IscApp)
        self.actionClose_3.setObjectName(u"actionClose_3")
        self.actionZoom_in = QAction(IscApp)
        self.actionZoom_in.setObjectName(u"actionZoom_in")
        self.actionAdd_scroll_section = QAction(IscApp)
        self.actionAdd_scroll_section.setObjectName(u"actionAdd_scroll_section")
        self.actionOpen_assets_folder = QAction(IscApp)
        self.actionOpen_assets_folder.setObjectName(u"actionOpen_assets_folder")
        self.actionUpload_to_CloudGuides = QAction(IscApp)
        self.actionUpload_to_CloudGuides.setObjectName(u"actionUpload_to_CloudGuides")
        self.actionSections = QAction(IscApp)
        self.actionSections.setObjectName(u"actionSections")
        self.actionsteps = QAction(IscApp)
        self.actionsteps.setObjectName(u"actionsteps")
        self.actionSection = QAction(IscApp)
        self.actionSection.setObjectName(u"actionSection")
        self.actionSteps_in_section = QAction(IscApp)
        self.actionSteps_in_section.setObjectName(u"actionSteps_in_section")
        self.actionFirst_step_in_section = QAction(IscApp)
        self.actionFirst_step_in_section.setObjectName(u"actionFirst_step_in_section")
        self.actionSet_section_as_animated = QAction(IscApp)
        self.actionSet_section_as_animated.setObjectName(u"actionSet_section_as_animated")
        self.actionSet_section_as_guided = QAction(IscApp)
        self.actionSet_section_as_guided.setObjectName(u"actionSet_section_as_guided")
        self.actionDelete = QAction(IscApp)
        self.actionDelete.setObjectName(u"actionDelete")
        self.actionDuplicate = QAction(IscApp)
        self.actionDuplicate.setObjectName(u"actionDuplicate")
        self.actionDuplicate_as_pacing = QAction(IscApp)
        self.actionDuplicate_as_pacing.setObjectName(u"actionDuplicate_as_pacing")
        self.actionMove = QAction(IscApp)
        self.actionMove.setObjectName(u"actionMove")
        self.actionMove_2 = QAction(IscApp)
        self.actionMove_2.setObjectName(u"actionMove_2")
        self.actionSet_as_animated = QAction(IscApp)
        self.actionSet_as_animated.setObjectName(u"actionSet_as_animated")
        self.actionSet_as_guided = QAction(IscApp)
        self.actionSet_as_guided.setObjectName(u"actionSet_as_guided")
        self.actionSet_as_scroll = QAction(IscApp)
        self.actionSet_as_scroll.setObjectName(u"actionSet_as_scroll")
        self.actionDecrement_step_delay = QAction(IscApp)
        self.actionDecrement_step_delay.setObjectName(u"actionDecrement_step_delay")
        self.actionIncrement_step_delay = QAction(IscApp)
        self.actionIncrement_step_delay.setObjectName(u"actionIncrement_step_delay")
        self.actionAdd_audio_2 = QAction(IscApp)
        self.actionAdd_audio_2.setObjectName(u"actionAdd_audio_2")
        self.actionDelete_audio = QAction(IscApp)
        self.actionDelete_audio.setObjectName(u"actionDelete_audio")
        self.actionEdit_audio_2 = QAction(IscApp)
        self.actionEdit_audio_2.setObjectName(u"actionEdit_audio_2")
        self.actionReplace_audio = QAction(IscApp)
        self.actionReplace_audio.setObjectName(u"actionReplace_audio")
        self.actionView_metadata = QAction(IscApp)
        self.actionView_metadata.setObjectName(u"actionView_metadata")
        self.actionAdd_audio_3 = QAction(IscApp)
        self.actionAdd_audio_3.setObjectName(u"actionAdd_audio_3")
        self.actionDelete_audio_2 = QAction(IscApp)
        self.actionDelete_audio_2.setObjectName(u"actionDelete_audio_2")
        self.actionReplace_audio_2 = QAction(IscApp)
        self.actionReplace_audio_2.setObjectName(u"actionReplace_audio_2")
        self.actionEdit_audio_3 = QAction(IscApp)
        self.actionEdit_audio_3.setObjectName(u"actionEdit_audio_3")
        self.actionIncrement_step_delay_2 = QAction(IscApp)
        self.actionIncrement_step_delay_2.setObjectName(u"actionIncrement_step_delay_2")
        self.actionDecrement_step_delay_2 = QAction(IscApp)
        self.actionDecrement_step_delay_2.setObjectName(u"actionDecrement_step_delay_2")
        self.actionPreview = QAction(IscApp)
        self.actionPreview.setObjectName(u"actionPreview")
        self.actionView_in_folder = QAction(IscApp)
        self.actionView_in_folder.setObjectName(u"actionView_in_folder")
        self.actionEdit = QAction(IscApp)
        self.actionEdit.setObjectName(u"actionEdit")
        self.actionReplace_image = QAction(IscApp)
        self.actionReplace_image.setObjectName(u"actionReplace_image")
        self.actionView_metadata_2 = QAction(IscApp)
        self.actionView_metadata_2.setObjectName(u"actionView_metadata_2")
        self.actionLoad_SoundBite = QAction(IscApp)
        self.actionLoad_SoundBite.setObjectName(u"actionLoad_SoundBite")
        self.actionFrom_recording = QAction(IscApp)
        self.actionFrom_recording.setObjectName(u"actionFrom_recording")
        self.actionAs_new_version = QAction(IscApp)
        self.actionAs_new_version.setObjectName(u"actionAs_new_version")
        self.actionAs_new_round = QAction(IscApp)
        self.actionAs_new_round.setObjectName(u"actionAs_new_round")
        self.actionExport_to_installer = QAction(IscApp)
        self.actionExport_to_installer.setObjectName(u"actionExport_to_installer")
        self.actionExport_to_Cloudguide = QAction(IscApp)
        self.actionExport_to_Cloudguide.setObjectName(u"actionExport_to_Cloudguide")
        self.actionTo_installer = QAction(IscApp)
        self.actionTo_installer.setObjectName(u"actionTo_installer")
        self.actionTo_Cloudguide = QAction(IscApp)
        self.actionTo_Cloudguide.setObjectName(u"actionTo_Cloudguide")
        self.actionOverwrite_2 = QAction(IscApp)
        self.actionOverwrite_2.setObjectName(u"actionOverwrite_2")
        self.actionAs_new_version_2 = QAction(IscApp)
        self.actionAs_new_version_2.setObjectName(u"actionAs_new_version_2")
        self.actionAs_new_round_2 = QAction(IscApp)
        self.actionAs_new_round_2.setObjectName(u"actionAs_new_round_2")
        self.actionAs_txt = QAction(IscApp)
        self.actionAs_txt.setObjectName(u"actionAs_txt")
        self.actionTo_new_directory = QAction(IscApp)
        self.actionTo_new_directory.setObjectName(u"actionTo_new_directory")
        self.actionOverwrite_3 = QAction(IscApp)
        self.actionOverwrite_3.setObjectName(u"actionOverwrite_3")
        self.actionClose_window = QAction(IscApp)
        self.actionClose_window.setObjectName(u"actionClose_window")
        self.actionReset_demo = QAction(IscApp)
        self.actionReset_demo.setObjectName(u"actionReset_demo")
        self.actionNew = QAction(IscApp)
        self.actionNew.setObjectName(u"actionNew")
        self.actionNew_operation = QAction(IscApp)
        self.actionNew_operation.setObjectName(u"actionNew_operation")
        self.actionAdd_step = QAction(IscApp)
        self.actionAdd_step.setObjectName(u"actionAdd_step")
        self.actionPreferences = QAction(IscApp)
        self.actionPreferences.setObjectName(u"actionPreferences")
        self.actionAdd_text_box = QAction(IscApp)
        self.actionAdd_text_box.setObjectName(u"actionAdd_text_box")
        self.actionAdd_highlight = QAction(IscApp)
        self.actionAdd_highlight.setObjectName(u"actionAdd_highlight")
        self.actionAdd_jump_box = QAction(IscApp)
        self.actionAdd_jump_box.setObjectName(u"actionAdd_jump_box")
        self.actionSet_animated = QAction(IscApp)
        self.actionSet_animated.setObjectName(u"actionSet_animated")
        self.actionSet_guided = QAction(IscApp)
        self.actionSet_guided.setObjectName(u"actionSet_guided")
        self.actionEdit_XML = QAction(IscApp)
        self.actionEdit_XML.setObjectName(u"actionEdit_XML")
        self.actionFrom_capture = QAction(IscApp)
        self.actionFrom_capture.setObjectName(u"actionFrom_capture")
        self.actionCapture_image_edt_macro = QAction(IscApp)
        self.actionCapture_image_edt_macro.setObjectName(u"actionCapture_image_edt_macro")
        self.actionNew_tab = QAction(IscApp)
        self.actionNew_tab.setObjectName(u"actionNew_tab")
        self.actionNew_2 = QAction(IscApp)
        self.actionNew_2.setObjectName(u"actionNew_2")
        self.actionTo_new_version = QAction(IscApp)
        self.actionTo_new_version.setObjectName(u"actionTo_new_version")
        self.actionTo_new_round = QAction(IscApp)
        self.actionTo_new_round.setObjectName(u"actionTo_new_round")
        self.actionSteps = QAction(IscApp)
        self.actionSteps.setObjectName(u"actionSteps")
        self.actionOverwrite_existing = QAction(IscApp)
        self.actionOverwrite_existing.setObjectName(u"actionOverwrite_existing")
        self.actionSave = QAction(IscApp)
        self.actionSave.setObjectName(u"actionSave")
        self.actionDemo = QAction(IscApp)
        self.actionDemo.setObjectName(u"actionDemo")
        self.actionAudio = QAction(IscApp)
        self.actionAudio.setObjectName(u"actionAudio")
        self.actionScript = QAction(IscApp)
        self.actionScript.setObjectName(u"actionScript")
        self.actionView_menubar = QAction(IscApp)
        self.actionView_menubar.setObjectName(u"actionView_menubar")
        self.actionView_menubar.setCheckable(True)
        self.actionView_in_file_explorer = QAction(IscApp)
        self.actionView_in_file_explorer.setObjectName(u"actionView_in_file_explorer")
        self.actionView_menubar_2 = QAction(IscApp)
        self.actionView_menubar_2.setObjectName(u"actionView_menubar_2")
        self.actionView_menubar_2.setCheckable(True)
        self.actionZoom_out = QAction(IscApp)
        self.actionZoom_out.setObjectName(u"actionZoom_out")
        self.actionReset_zoom = QAction(IscApp)
        self.actionReset_zoom.setObjectName(u"actionReset_zoom")
        self.actionNewStep = QAction(IscApp)
        self.actionNewStep.setObjectName(u"actionNewStep")
        self.actionOpenDemo = QAction(IscApp)
        self.actionOpenDemo.setObjectName(u"actionOpenDemo")
        self.menubar = QMenuBar(IscApp)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 1440, 22))
        self.menubar.setDefaultUp(False)
        self.menuFile = QMenu(self.menubar)
        self.menuFile.setObjectName(u"menuFile")
        self.menuExport_2 = QMenu(self.menuFile)
        self.menuExport_2.setObjectName(u"menuExport_2")
        self.menuNew = QMenu(self.menuFile)
        self.menuNew.setObjectName(u"menuNew")
        self.menuOpen = QMenu(self.menuFile)
        self.menuOpen.setObjectName(u"menuOpen")
        self.menuEdit = QMenu(self.menubar)
        self.menuEdit.setObjectName(u"menuEdit")
        self.menuSelect_all = QMenu(self.menuEdit)
        self.menuSelect_all.setObjectName(u"menuSelect_all")
        self.menuSelect_associated = QMenu(self.menuEdit)
        self.menuSelect_associated.setObjectName(u"menuSelect_associated")
        self.menuView = QMenu(self.menubar)
        self.menuView.setObjectName(u"menuView")
        self.menuView.setTearOffEnabled(False)
        self.menuView.setToolTipsVisible(True)
        self.menuZoom = QMenu(self.menuView)
        self.menuZoom.setObjectName(u"menuZoom")
        self.menuTools = QMenu(self.menubar)
        self.menuTools.setObjectName(u"menuTools")
        self.menuAudio = QMenu(self.menuTools)
        self.menuAudio.setObjectName(u"menuAudio")
        self.menuImage = QMenu(self.menuTools)
        self.menuImage.setObjectName(u"menuImage")
        self.menuInsert = QMenu(self.menuImage)
        self.menuInsert.setObjectName(u"menuInsert")
        self.menuShell = QMenu(self.menuImage)
        self.menuShell.setObjectName(u"menuShell")
        self.menuDemo = QMenu(self.menuTools)
        self.menuDemo.setObjectName(u"menuDemo")
        self.menuScript = QMenu(self.menuTools)
        self.menuScript.setObjectName(u"menuScript")
        self.menuCheck_script_for = QMenu(self.menuScript)
        self.menuCheck_script_for.setObjectName(u"menuCheck_script_for")
        self.menuClear = QMenu(self.menuScript)
        self.menuClear.setObjectName(u"menuClear")
        self.menuWeb = QMenu(self.menuTools)
        self.menuWeb.setObjectName(u"menuWeb")
        self.menuSection = QMenu(self.menuTools)
        self.menuSection.setObjectName(u"menuSection")
        self.menuPacing = QMenu(self.menuSection)
        self.menuPacing.setObjectName(u"menuPacing")
        self.menuAudio_2 = QMenu(self.menuSection)
        self.menuAudio_2.setObjectName(u"menuAudio_2")
        self.menuStep = QMenu(self.menuTools)
        self.menuStep.setObjectName(u"menuStep")
        self.menuAudio_3 = QMenu(self.menuStep)
        self.menuAudio_3.setObjectName(u"menuAudio_3")
        self.menuPacing_2 = QMenu(self.menuStep)
        self.menuPacing_2.setObjectName(u"menuPacing_2")
        self.menuImage_2 = QMenu(self.menuStep)
        self.menuImage_2.setObjectName(u"menuImage_2")
        self.menuWindow = QMenu(self.menubar)
        self.menuWindow.setObjectName(u"menuWindow")
        self.menuHelp = QMenu(self.menubar)
        self.menuHelp.setObjectName(u"menuHelp")
        self.menuHow_do_I = QMenu(self.menuHelp)
        self.menuHow_do_I.setObjectName(u"menuHow_do_I")
        IscApp.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(IscApp)
        self.statusbar.setObjectName(u"statusbar")
        self.statusbar.setMinimumSize(QSize(0, 30))
        self.statusbar.setSizeGripEnabled(False)
        IscApp.setStatusBar(self.statusbar)

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

        self.retranslateUi(IscApp)

        QMetaObject.connectSlotsByName(IscApp)
    # setupUi

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