Beispiel #1
0
    def updateMapCompleters(self):
        """Update the auto completers for maps."""
        for i in range(self.max_no_sets):
            map_list = scctool.settings.maps.copy()
            try:
                map_list.remove("TBD")
            except Exception:
                pass
            finally:
                map_list.sort()
                map_list.append("TBD")
            completer = QCompleter(map_list, self.le_map[i])
            completer.setCaseSensitivity(Qt.CaseInsensitive)
            completer.setFilterMode(Qt.MatchContains)
            completer.setCompletionMode(
                QCompleter.UnfilteredPopupCompletion)
            completer.setWrapAround(True)
            completer.activated.connect(self.le_map[i].completerFinished)
            self.le_map[i].setCompleter(completer)

        for i in range(self.max_no_vetoes):
            map_list = scctool.settings.maps.copy()
            if 'TBD' in map_list:
                map_list.remove('TBD')
            map_list.sort()
            map_list.append('TBD')
            completer = QCompleter(map_list, self.le_veto_maps[i])
            completer.setCaseSensitivity(Qt.CaseInsensitive)
            completer.setFilterMode(Qt.MatchContains)
            completer.setCompletionMode(
                QCompleter.UnfilteredPopupCompletion)
            completer.setWrapAround(True)
            completer.activated.connect(self.le_veto_maps[i].completerFinished)
            self.le_veto_maps[i].setCompleter(completer)
Beispiel #2
0
    def add_compliter_line_field(self,
                                 f_title,
                                 top,
                                 left,
                                 items,
                                 default_value,
                                 widthchange=0,
                                 readonly=False,
                                 label_margin=2,
                                 label_font_size=LABEL_FONT_SIZE,
                                 field_size=4,
                                 callback=None):
        # make line edit field with compliter, including items
        field = self.add_line_field(f_title,
                                    top,
                                    left,
                                    default_value,
                                    widthchange,
                                    readonly,
                                    label_margin=label_margin,
                                    label_font_size=label_font_size,
                                    field_size=field_size)
        compliter = QCompleter(items)
        compliter.setCaseSensitivity(0)
        compliter.setCompletionMode(0)
        q = compliter.filterMode()
        compliter.setFilterMode(Qt.MatchContains)
        field.setCompleter(compliter)

        if callback:
            field.editingFinished.connect(callback)

        return field
 def reset(self):
     self.line_edit_password.setText("")
     self.check_box_use_pkcs11.setCheckState(Qt.Unchecked)
     self.line_edit_password.setDisabled(False)
     self.line_edit_pkcs11_pin.setText("")
     self.combo_pkcs11_key.clear()
     self.combo_pkcs11_key.addItem("0")
     self.combo_pkcs11_token.clear()
     self.combo_pkcs11_token.addItem("0")
     self.widget_pkcs11.hide()
     devices = devices_manager.list_available_devices(
         self.core_config.config_dir)
     # Display devices in `<organization>:<device_id>` format
     self.devices = {f"{o}:{d}": (o, d, t) for o, d, t in devices}
     if len(self.devices) == 1:
         self.line_edit_device.setText(next(iter(self.devices)))
         self.line_edit_password.setFocus()
     elif len(self.devices) > 1:
         last_device = settings.get_value("last_device")
         if last_device and last_device in self.devices:
             self.line_edit_device.setText(last_device)
             self.line_edit_password.setFocus()
         else:
             self.line_edit_device.setFocus()
     else:
         self.line_edit_device.setText("")
         self.line_edit_device.setFocus()
     completer = QCompleter(self.devices.keys())
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setFilterMode(Qt.MatchContains)
     completer.popup().setStyleSheet(
         "border: 2px solid rgb(46, 145, 208); border-top: 0;")
     self.line_edit_device.setCompleter(completer)
Beispiel #4
0
    def __init__(self, widget, main_app, db, serial):
        Ui_RequestSignature.__init__(self)
        super().__init__(widget)
        self.widget = widget
        self.main_app = main_app
        self.setupUi(widget)
        self.session_storage = SessionStorage.getInstance()
        self.person = self.session_storage.session_info[serial]['personclient']
        self.user = self.session_storage.session_info[serial]['user']
        self.contacts_count = 0
        self.path = None
        self.settings = UserSettings.getInstance()
        self.browseFiles.clicked.connect(self.get_document_path)
        self.filesWidget.set_parent(self)

        self.contacts_model = ContactModel(user=self.user, db=db)

        self.sign_list = []
        self.status_widgets = {}

        completer = QCompleter()
        completer.setModel(self.contacts_model)
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setFilterMode(Qt.MatchContains)

        self.search.setCompleter(completer)
        self.add_contact.clicked.connect(lambda: self.add_contact_to_list())
        self.requestSignature.clicked.connect(self.request_signature)
        self.initialize()
        self.sign_pending = 0
Beispiel #5
0
 def __init__(self, parent):
     super(CommandPalette, self).__init__()
     # set parent and various properties
     self.setParent(parent)
     self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
     self.resize(300, 30)
     self.hal = parent
     # bind ctrl+P to close
     ctrlP = QShortcut(QKeySequence("Ctrl+P"), self)
     ctrlP.activated.connect(self.reject)
     # setup layout
     layout = QVBoxLayout(self)
     # add the command palette input
     cmdline = QLineEdit(self)
     layout.addWidget(cmdline)
     self.cmdline = cmdline
     # connect callback
     cmdline.returnPressed.connect(self.accept)
     # setup completer
     command_list = sorted(parent.palette_commands.keys())
     autoCompleter = QCompleter(command_list, self)
     autoCompleter.setCaseSensitivity(Qt.CaseInsensitive)
     autoCompleter.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
     autoCompleter.setFilterMode(Qt.MatchContains)
     cmdline.setCompleter(autoCompleter)
 def _init_ui(self):
     Payment.add_all_payment(self.payment)
     completer = QCompleter(self._get_all_supplier())
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setFilterMode(Qt.MatchContains)
     self.supplier.setCompleter(completer)
     pyqt_utils.set_validator(self.price, 'float')
     pyqt_utils.set_validator(self.unpaid, 'float')
 def setCompleter(self, lineEdit):
     self.getHotelData()
     model = QStringListModel()
     model.setStringList(self.hotelStringList)
     completer = QCompleter()
     completer.setModel(model)
     completer.setFilterMode(QtCore.Qt.MatchContains)
     lineEdit.setCompleter(completer)
Beispiel #8
0
 def add_completer(self, items):
     self.setEditable(True)
     self.setInsertPolicy(0)
     completer = QCompleter(items, self)
     completer.setFilterMode(Qt.MatchContains)
     completer.setCaseSensitivity(False)
     self.setCompleter(completer)
     self.setStyleSheet('QScrollBar: vertical {width: 20px;}')
Beispiel #9
0
 def __init__(self):
     super().__init__()
     completer = QCompleter(Context.cardboard_names)
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setFilterMode(Qt.MatchStartsWith)
     completer.setModelSorting(QCompleter.CaseInsensitivelySortedModel)
     completer.setCompletionMode(QCompleter.InlineCompletion)
     self.setCompleter(completer)
Beispiel #10
0
 def _init_ui(self):
     view_utils.get_all_payment(self.payment)
     self.payment.addItem('点击新增')
     completer = QCompleter(supplier_service.get_all_supplier())
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setFilterMode(Qt.MatchContains)
     self.supplier.setCompleter(completer)
     view_utils.set_validator(self.price, 'float')
     view_utils.set_validator(self.unpaid, 'float')
Beispiel #11
0
 def completerLine(self, lineEdit, layer, field):
     #Data la lista degli identificatori permette l'autocompletamento dell'input utente
     strList = QueryLayer().getFeaturesList(field, layer)
     completer = QCompleter()
     completer.setFilterMode(Qt.MatchContains)
     completer.setCaseSensitivity(0)
     lineEdit.setCompleter(completer)
     model = QStringListModel()
     model.setStringList(strList)
     completer.setModel(model)
Beispiel #12
0
 def add_icd(self):
     """
     Create ICD10 components.
     """
     self.line_icd = QtWidgets.QLineEdit()
     completer_5 = QCompleter(new_icd, self.line_icd)
     completer_5.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
     completer_5.setFilterMode(QtCore.Qt.MatchContains)
     self.line_icd.setCompleter(completer_5)
     self.label_icd = QtWidgets.QLabel()
Beispiel #13
0
 def add_histology(self):
     """
     Create histology components.
     """
     self.line_histology = QtWidgets.QLineEdit()
     completer_4 = QCompleter(new_hist, self.line_histology)
     completer_4.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
     completer_4.setFilterMode(QtCore.Qt.MatchContains)
     self.line_histology.setCompleter(completer_4)
     self.label_histology = QtWidgets.QLabel()
Beispiel #14
0
    def setEditable(self, state: bool):
        if state:
            super().setEditable(state)
            qcom = QCompleter([str(r[0]) for r in self.FieldInfo.RowSource])
            qcom.setCaseSensitivity(Qt.CaseInsensitive)
            qcom.setCompletionMode(QCompleter.PopupCompletion)
            qcom.setFilterMode(Qt.MatchContains)
            self.setCompleter(qcom)

        else:
            super().setEditable(state)
Beispiel #15
0
 def add_icd(self):
     """
     Create ICD10 components.
     """
     self.line_icd = QtWidgets.QLineEdit(self.scrollAreaWidgetContents)
     # self.line_icd.setGeometry(QtCore.QRect(150, 220, 601, 25))
     completer_5 = QCompleter(new_icd, self.line_icd)
     completer_5.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
     completer_5.setFilterMode(QtCore.Qt.MatchContains)
     self.line_icd.setCompleter(completer_5)
     self.label_icd = QtWidgets.QLabel(self.scrollAreaWidgetContents)
Beispiel #16
0
 def add_histology(self):
     """
     Create histology components.
     """
     self.line_histology = QtWidgets.QLineEdit(
         self.scrollAreaWidgetContents)
     # self.line_histology.setGeometry(QtCore.QRect(150, 270, 601, 25))
     completer_4 = QCompleter(new_hist, self.line_histology)
     completer_4.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
     completer_4.setFilterMode(QtCore.Qt.MatchContains)
     self.line_histology.setCompleter(completer_4)
     self.label_histology = QtWidgets.QLabel(self.scrollAreaWidgetContents)
Beispiel #17
0
    def _set_completer(self, editor: QWidget, title: str):
        if isinstance(editor, QLineEdit):
            completer_list = []
            if title == 'brand':
                completer_list = self._get_all_brand()
            if title == 'model':
                completer_list = self._get_all_model()

            completer = QCompleter(completer_list)
            completer.setFilterMode(Qt.MatchContains)
            completer.setCaseSensitivity(Qt.CaseInsensitive)
            editor.setCompleter(completer)
Beispiel #18
0
 def init_style_config(self):
     widget = QWidget()
     layout = QFormLayout()
     widget.setLayout(layout)
     style_list = QComboBox()
     complete = QCompleter(QStyleFactory.keys())
     complete.setFilterMode(Qt.MatchContains)
     complete.setCompletionMode(QCompleter.PopupCompletion)
     style_list.setCompleter(complete)
     style_list.setEditable(True)
     style_list.addItems(QStyleFactory.keys())
     layout.addRow('选择样式: ', style_list)
     return widget
Beispiel #19
0
 def setup_completer(self):
     """ Sets up the autocomplete on the ancestor """
     completer = QCompleter()
     completer.setModel(self.model)
     completer.setCompletionRole(Qt.DisplayRole)
     completer.setCompletionColumn(self.text_column)
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setCompletionMode(QCompleter.PopupCompletion)
     completer.setFilterMode(Qt.MatchContains)
     # pylint: disable=unsubscriptable-object
     signal = completer.activated[QModelIndex]
     signal.connect(self.autocomplete_activated)
     self.setCompleter(completer)
Beispiel #20
0
 def __init__(self, *args, **kwargs):
     super().__init__(*args, **kwargs)
     self.setPlaceholderText('enter text filter')
     self.setMinimumHeight(30)
     _change_font(self)
     manager = QtGui.qApp.filterManager
     manager.changed.connect(self._clearDelayed)
     completer = QCompleter(manager.keywords)
     _change_font(completer.popup())
     completer.setCaseSensitivity(Qt.CaseInsensitive)
     completer.setFilterMode(Qt.MatchContains)
     self.setCompleter(completer)
     self.returnPressed.connect(self._onReturnPressed)
Beispiel #21
0
 def createEditor(self, parent, option, index):
     editor = QLineEdit(parent)
     # auto completion
     completionlist, regexp_format = index.data(Qt.UserRole)
     autoCompleter = QCompleter(completionlist, parent)
     autoCompleter.setCaseSensitivity(Qt.CaseInsensitive)
     autoCompleter.setFilterMode(Qt.MatchContains)
     editor.setCompleter(autoCompleter)
     # validation
     rx = QRegExp(regexp_format)
     validator = QRegExpValidator(rx)
     editor.setValidator(validator)
     return editor
 def updateTeamCompleters(self):
     """Refresh the completer for the team line edits."""
     list = scctool.settings.config.getMyTeams() + \
         ["TBD"] + self.controller.historyManager.getTeamList()
     for team_idx in range(2):
         completer = QCompleter(list, self.le_team[team_idx])
         completer.setCaseSensitivity(Qt.CaseInsensitive)
         completer.setCompletionMode(QCompleter.InlineCompletion)
         completer.setFilterMode(Qt.MatchContains)
         completer.setWrapAround(True)
         completer.activated.connect(
             self.le_team[team_idx].completerFinished)
         self.le_team[team_idx].setCompleter(completer)
Beispiel #23
0
def set_completer(content, component):
    """ 为控件添加自动补全

    :param content: 候选内容
    :param component: 控件
    :return:
    """
    # 增加自动补全
    completer = QCompleter(content)
    # 设置匹配模式,有三种: Qt.MatchStartsWith 开头匹配(默认)  Qt.MatchContains 内容匹配  Qt.MatchEndsWith 结尾匹配
    completer.setFilterMode(Qt.MatchContains)
    # 设置补全模式,有三种: QCompleter.PopupCompletion(默认)  QCompleter.InlineCompletion   QCompleter.UnfilteredPopupCompletion
    completer.setCompletionMode(QCompleter.PopupCompletion)
    # 给控件设置补全器
    component.setCompleter(completer)
 def updatePlayerCompleters(self):
     """Refresh the completer for the player line edits."""
     list = scctool.settings.config.getMyPlayers(True) + [
         "TBD"
     ] + self.controller.historyManager.getPlayerList()
     for player_idx in range(self.max_no_sets):
         for team_idx in range(2):
             completer = QCompleter(list,
                                    self.le_player[team_idx][player_idx])
             completer.setCaseSensitivity(Qt.CaseInsensitive)
             completer.setCompletionMode(QCompleter.InlineCompletion)
             completer.setFilterMode(Qt.MatchContains)
             completer.setWrapAround(True)
             completer.activated.connect(
                 self.le_player[team_idx][player_idx].completerFinished)
             self.le_player[team_idx][player_idx].setCompleter(completer)
 def _init_widget(self):
     widget = QWidget(self)
     layout = QHBoxLayout()
     self._search_field = SearchField(self)
     self._search_field.setIcon(qtawesome.icon("fa.search"))
     self._search_field.escapePressed.connect(self.close)
     self._search_field.enterPressed.connect(self._on_enter_press)
     self._search_field.setFocus()
     completer = QCompleter()
     completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
     completer.setFilterMode(QtCore.Qt.MatchContains)
     completer_model = CommandListItemModel(self._commands)
     completer.setModel(completer_model)
     self._search_field.setCompleter(completer)
     layout.addWidget(self._search_field)
     widget.setLayout(layout)
     return widget
Beispiel #26
0
    def createEditor(self, parent: QWidget, option: QStyleOptionViewItem,
                     index: QModelIndex):
        editor = QLineEdit(parent)
        editor.setObjectName('Editor')
        if self.items:
            completer = QCompleter()
            completer.setCaseSensitivity(Qt.CaseInsensitive)
            completer.setFilterMode(Qt.MatchContains)
            editor.setCompleter(completer)
            model = QStringListModel()
            completer.setModel(model)
            model.setStringList(self.items)

        if self.validator is not None:
            editor.setValidator(self.validator)

        return editor
Beispiel #27
0
    def initCompleter(self):
        tmp = copy.deepcopy(__support_aug_methods__)
        tmp.insert(0, 'Please Choose...')
        for i in range(len(tmp)):
            self.methods.addItem(tmp[i])

        completer1 = QCompleter(__support_aug_methods__)
        completer1.setFilterMode(Qt.MatchContains)
        completer1.setCompletionMode(QCompleter.PopupCompletion)
        self.methods.setCompleter(completer1)

        tmp = copy.deepcopy(__support_aug_optional_methods__)
        tmp.insert(0, 'Please Choose...')
        for i in range(len(tmp)):
            self.optional_methods.addItem(tmp[i])

        completer2 = QCompleter(__support_aug_optional_methods__)
        completer2.setFilterMode(Qt.MatchContains)
        completer2.setCompletionMode(QCompleter.PopupCompletion)
        self.optional_methods.setCompleter(completer2)

        del tmp
Beispiel #28
0
    def insertFromPath(self):
        dialogue = QDialog(self)
        layout = QHBoxLayout()
        dialogue.setLayout(layout)

        editor = QLineEdit()
        layout.addWidget(editor)

        completer = QCompleter()
        completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setFilterMode(Qt.MatchContains)
        completer.setModelSorting(QCompleter.CaseInsensitivelySortedModel)

        editor.setCompleter(completer)

        model = QStringListModel()
        completion_paths = self.hive_finder.all_hives
        model.setStringList(completion_paths)

        completer.setModel(model)

        def on_return():
            widget = self.tab_widget.currentWidget()

            if not isinstance(widget, NodeEditorSpace):
                return

            reference_path = editor.text()
            widget.addNodeAtMouse(reference_path, NodeTypes.HIVE)
            dialogue.close()

        editor.returnPressed.connect(on_return)

        dialogue.setWindowTitle("Add Hive From Path")
        dialogue.setAttribute(Qt.WA_DeleteOnClose)
        dialogue.exec_()
Beispiel #29
0
    def createEditor(self, parent, option, index):
        line_editor = QLineEdit(parent)
        line_editor.setAlignment(Qt.AlignCenter)

        completer = QCompleter()
        line_editor.setCompleter(completer)

        # TODO: Implement match for multivariables
        model = QStringListModel()
        completer.setModel(model)
        completer.setFilterMode(Qt.MatchContains)

        # get aliases in display and set them to the completer
        aliases_in_display = pd.concat([self.app_data.input_table_data,
                                        self.app_data.output_table_data],
                                       axis='index', ignore_index=True)

        model.setStringList(aliases_in_display['Alias'].tolist())

        # insert the math validator
        exp_validator = ValidMathStr(line_editor)
        line_editor.setValidator(exp_validator)

        return line_editor
Beispiel #30
0
    def __init__(self):
        super(MyWindow, self).__init__()
        uic.loadUi('form1.ui', self)

        with orm.db_session:
            classes: List[str] = list(orm.select(c.name for c in Classifier))
            for classifier in classes:
                self.comboBox_5.addItem(classifier)

            regions: List[str] = list(
                orm.select(r.readable_name for r in Region))
            regions.insert(0, ALL_REGIONS)
            completer = QCompleter(regions, self)
            completer.setCaseSensitivity(False)
            completer.setFilterMode(QtCore.Qt.MatchContains)
            self.plainTextEdit.setCompleter(completer)

        for key in timeintervals.keys():
            self.comboBox.addItem(key)

        self.button.clicked.connect(lambda: self.click_handler())
        self.lay = QtWidgets.QVBoxLayout(self.content_plot)
        self.lay.setContentsMargins(0, 0, 0, 0)
        self.plotWidget = None
Beispiel #31
0
	def init_toolbar(self):
		self.toolbar = QToolBar()
		self.toolbar.setFixedHeight(25)
		self.toolbar.setWindowTitle("Show") # text for the contextmenu
		#self.toolbar.setStyleSheet("QToolBar {border:0px}") # make it user defined?
		self.toolbar.setMovable(False)
		self.toolbar.setFloatable(False)
		#self.toolbar.setIconSize(QSize(20,20))
		self.toolbar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
		self.toolbar.setIconSize(QSize(20,20))

		spacer_start = QWidget() # aligns the first actions properly
		spacer_start.setFixedSize(QSize(10, 1))
		self.toolbar.addWidget(spacer_start)

		self.favourite_btn = misc.ToolbarButton(self.toolbar, 'Favorites')
		self.toolbar.addWidget(self.favourite_btn)
		self.favourite_btn.clicked.connect(self.favourite_display) #need lambda to pass extra args

		self.library_btn = misc.ToolbarButton(self.toolbar, 'Library')
		self.toolbar.addWidget(self.library_btn)
		self.library_btn.clicked.connect(self.catalog_display) #need lambda to pass extra args
		self.library_btn.selected = True

		self.toolbar.addSeparator()

		gallery_menu = QMenu()
		gallery_action = QToolButton()
		gallery_action.setText('Gallery ')
		gallery_action.setPopupMode(QToolButton.InstantPopup)
		gallery_action.setToolTip('Contains various gallery related features')
		gallery_action.setMenu(gallery_menu)
		add_gallery_icon = QIcon(app_constants.PLUS_PATH)
		gallery_action_add = QAction(add_gallery_icon, "Add single gallery...", self)
		gallery_action_add.triggered.connect(self.manga_list_view.SERIES_DIALOG.emit)
		gallery_action_add.setToolTip('Add a single gallery thoroughly')
		gallery_menu.addAction(gallery_action_add)
		add_more_action = QAction(add_gallery_icon, "Add galleries...", self)
		add_more_action.setStatusTip('Add galleries from different folders')
		add_more_action.triggered.connect(lambda: self.populate(True))
		gallery_menu.addAction(add_more_action)
		populate_action = QAction(add_gallery_icon, "Populate from directory/archive...", self)
		populate_action.setStatusTip('Populates the DB with galleries from a single folder or archive')
		populate_action.triggered.connect(self.populate)
		gallery_menu.addAction(populate_action)
		gallery_menu.addSeparator()
		metadata_action = QAction('Get metadata for all galleries', self)
		metadata_action.triggered.connect(self.get_metadata)
		gallery_menu.addAction(metadata_action)
		scan_galleries_action = QAction('Scan for new galleries', self)
		scan_galleries_action.triggered.connect(self.scan_for_new_galleries)
		scan_galleries_action.setStatusTip('Scan monitored folders for new galleries')
		gallery_menu.addAction(scan_galleries_action)
		gallery_action_random = gallery_menu.addAction("Open random gallery")
		gallery_action_random.triggered.connect(self.manga_list_view.open_random_gallery)
		self.toolbar.addWidget(gallery_action)


		misc_action = QToolButton()
		misc_action.setText('Tools ')
		misc_action_menu = QMenu()
		misc_action.setMenu(misc_action_menu)
		misc_action.setPopupMode(QToolButton.InstantPopup)
		misc_action.setToolTip("Contains misc. features")
		gallery_downloader = QAction("Gallery Downloader", misc_action_menu)
		gallery_downloader.triggered.connect(self.download_window.show)
		misc_action_menu.addAction(gallery_downloader)
		duplicate_check_simple = QAction("Simple Duplicate Finder", misc_action_menu)
		duplicate_check_simple.triggered.connect(lambda: self.manga_list_view.duplicate_check())
		misc_action_menu.addAction(duplicate_check_simple)
		self.toolbar.addWidget(misc_action)

		spacer_middle = QWidget() # aligns buttons to the right
		spacer_middle.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
		self.toolbar.addWidget(spacer_middle)


		sort_action = QToolButton()
		sort_action.setIcon(QIcon(app_constants.SORT_PATH))
		sort_action.setMenu(misc.SortMenu(self.toolbar, self.manga_list_view))
		sort_action.setPopupMode(QToolButton.InstantPopup)
		self.toolbar.addWidget(sort_action)
		
		self.grid_toggle_g_icon = QIcon(app_constants.GRID_PATH)
		self.grid_toggle_l_icon = QIcon(app_constants.LIST_PATH)
		self.grid_toggle = QToolButton()
		if self.display.currentIndex() == self.m_l_view_index:
			self.grid_toggle.setIcon(self.grid_toggle_l_icon)
		else:
			self.grid_toggle.setIcon(self.grid_toggle_g_icon)
		self.grid_toggle.setObjectName('gridtoggle')
		self.grid_toggle.clicked.connect(self.toggle_view)
		self.toolbar.addWidget(self.grid_toggle)

		spacer_mid2 = QWidget()
		spacer_mid2.setFixedSize(QSize(5, 1))
		self.toolbar.addWidget(spacer_mid2)

		def set_search_case(b):
			app_constants.GALLERY_SEARCH_CASE = b
			settings.set(b, 'Application', 'gallery search case')
			settings.save()

		def set_search_strict(b):
			app_constants.GALLERY_SEARCH_STRICT = b
			settings.set(b, 'Application', 'gallery search strict')
			settings.save()

		self.search_bar = misc.LineEdit()
		search_options = self.search_bar.addAction(QIcon(app_constants.SEARCH_OPTIONS_PATH), QLineEdit.TrailingPosition)
		search_options_menu = QMenu(self)
		search_options.triggered.connect(lambda: search_options_menu.popup(QCursor.pos()))
		search_options.setMenu(search_options_menu)
		case_search_option = search_options_menu.addAction('Case Sensitive')
		case_search_option.setCheckable(True)
		case_search_option.setChecked(app_constants.GALLERY_SEARCH_CASE)
		case_search_option.toggled.connect(set_search_case)
		strict_search_option = search_options_menu.addAction('Match whole terms')
		strict_search_option.setCheckable(True)
		strict_search_option.setChecked(app_constants.GALLERY_SEARCH_STRICT)
		strict_search_option.toggled.connect(set_search_strict)
		self.search_bar.setObjectName('search_bar')
		self.search_timer = QTimer(self)
		self.search_timer.setSingleShot(True)
		self.search_timer.timeout.connect(lambda: self.search(self.search_bar.text()))
		self._search_cursor_pos = [0, 0]
		def set_cursor_pos(old, new):
			self._search_cursor_pos[0] = old
			self._search_cursor_pos[1] = new
		self.search_bar.cursorPositionChanged.connect(set_cursor_pos)

		if app_constants.SEARCH_AUTOCOMPLETE:
			completer = QCompleter(self)
			completer_view = misc.CompleterPopupView()
			completer.setPopup(completer_view)
			completer_view._setup()
			completer.setModel(self.manga_list_view.gallery_model)
			completer.setCaseSensitivity(Qt.CaseInsensitive)
			completer.setCompletionMode(QCompleter.PopupCompletion)
			completer.setCompletionRole(Qt.DisplayRole)
			completer.setCompletionColumn(app_constants.TITLE)
			completer.setFilterMode(Qt.MatchContains)
			self.search_bar.setCompleter(completer)
			self.search_bar.returnPressed.connect(lambda: self.search(self.search_bar.text()))
		if not app_constants.SEARCH_ON_ENTER:
			self.search_bar.textEdited.connect(lambda: self.search_timer.start(800))
		self.search_bar.setPlaceholderText("Search title, artist, namespace & tags")
		self.search_bar.setMinimumWidth(150)
		self.search_bar.setMaximumWidth(500)
		self.search_bar.setFixedHeight(19)
		self.manga_list_view.sort_model.HISTORY_SEARCH_TERM.connect(lambda a: self.search_bar.setText(a))
		self.toolbar.addWidget(self.search_bar)

		def search_history(_, back=True): # clicked signal passes a bool
			sort_model =  self.manga_list_view.sort_model
			nav = sort_model.PREV if back else sort_model.NEXT
			history_term = sort_model.navigate_history(nav)
			if back:
				self.search_forward.setVisible(True)

		back = QShortcut(QKeySequence(QKeySequence.Back), self, lambda: search_history(None))
		forward = QShortcut(QKeySequence(QKeySequence.Forward), self, lambda: search_history(None, False))

		search_backbutton = QToolButton(self.toolbar)
		search_backbutton.setText(u'\u25C0')
		search_backbutton.setFixedWidth(15)
		search_backbutton.clicked.connect(search_history)
		self.search_backward = self.toolbar.addWidget(search_backbutton)
		self.search_backward.setVisible(False)
		search_forwardbutton = QToolButton(self.toolbar)
		search_forwardbutton.setText(u'\u25B6')
		search_forwardbutton.setFixedWidth(15)
		search_forwardbutton.clicked.connect(lambda: search_history(None, False))
		self.search_forward = self.toolbar.addWidget(search_forwardbutton)
		self.search_forward.setVisible(False)

		spacer_end = QWidget() # aligns settings action properly
		spacer_end.setFixedSize(QSize(10, 1))
		self.toolbar.addWidget(spacer_end)

		settings_act = QToolButton(self.toolbar)
		settings_act.setIcon(QIcon(app_constants.SETTINGS_PATH))
		settings_act.clicked.connect(self.settings)
		self.toolbar.addWidget(settings_act)

		spacer_end2 = QWidget() # aligns About action properly
		spacer_end2.setFixedSize(QSize(5, 1))
		self.toolbar.addWidget(spacer_end2)
		self.addToolBar(self.toolbar)
Beispiel #32
0
    def init_toolbar(self):
        self.toolbar = QToolBar()
        self.toolbar.setFixedHeight(25)
        self.toolbar.setWindowTitle("Show")  # text for the contextmenu
        # self.toolbar.setStyleSheet("QToolBar {border:0px}") # make it user defined?
        self.toolbar.setMovable(False)
        self.toolbar.setFloatable(False)
        # self.toolbar.setIconSize(QSize(20,20))
        self.toolbar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

        spacer_start = QWidget()  # aligns the first actions properly
        spacer_start.setFixedSize(QSize(10, 1))
        self.toolbar.addWidget(spacer_start)

        favourite_view_icon = QIcon(gui_constants.STAR_BTN_PATH)
        favourite_view_action = QAction(favourite_view_icon, "Favorites", self)
        favourite_view_action.setToolTip("Show only favourite galleries")
        favourite_view_action.triggered.connect(self.favourite_display)  # need lambda to pass extra args
        self.toolbar.addAction(favourite_view_action)

        catalog_view_icon = QIcon(gui_constants.HOME_BTN_PATH)
        catalog_view_action = QAction(catalog_view_icon, "Library", self)
        catalog_view_action.setToolTip("Show all your galleries")
        # catalog_view_action.setText("Catalog")
        catalog_view_action.triggered.connect(self.catalog_display)  # need lambda to pass extra args
        self.toolbar.addAction(catalog_view_action)
        self.toolbar.addSeparator()

        gallery_menu = QMenu()
        gallery_action = QToolButton()
        gallery_action.setText("Gallery ")
        gallery_action.setPopupMode(QToolButton.InstantPopup)
        gallery_action.setToolTip("Contains various gallery related features")
        gallery_action.setMenu(gallery_menu)
        add_gallery_icon = QIcon(gui_constants.PLUS_PATH)
        gallery_action_add = QAction(add_gallery_icon, "Add gallery", self)
        gallery_action_add.triggered.connect(self.manga_list_view.SERIES_DIALOG.emit)
        gallery_action_add.setToolTip("Add a single gallery thoroughly")
        gallery_menu.addAction(gallery_action_add)
        add_more_action = QAction(add_gallery_icon, "Add galleries...", self)
        add_more_action.setStatusTip("Add galleries from different folders")
        add_more_action.triggered.connect(lambda: self.populate(True))
        gallery_menu.addAction(add_more_action)
        populate_action = QAction(add_gallery_icon, "Populate from folder...", self)
        populate_action.setStatusTip("Populates the DB with galleries from a single folder")
        populate_action.triggered.connect(self.populate)
        gallery_menu.addAction(populate_action)
        gallery_menu.addSeparator()
        metadata_action = QAction("Get metadata for all galleries", self)
        metadata_action.triggered.connect(self.get_metadata)
        gallery_menu.addAction(metadata_action)
        self.toolbar.addWidget(gallery_action)
        self.toolbar.addSeparator()

        misc_action = QToolButton()
        misc_action.setText("Misc ")
        misc_action_menu = QMenu()
        misc_action.setMenu(misc_action_menu)
        misc_action.setPopupMode(QToolButton.InstantPopup)
        misc_action.setToolTip("Contains misc. features")
        misc_action_random = QAction("Open random gallery", misc_action_menu)
        misc_action_random.triggered.connect(self.manga_list_view.open_random_gallery)
        misc_action_menu.addAction(misc_action_random)
        duplicate_check_simple = QAction("Simple duplicate finder", misc_action_menu)
        duplicate_check_simple.triggered.connect(lambda: self.manga_list_view.duplicate_check())
        misc_action_menu.addAction(duplicate_check_simple)
        self.toolbar.addWidget(misc_action)

        spacer_middle = QWidget()  # aligns buttons to the right
        spacer_middle.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.toolbar.addWidget(spacer_middle)

        self.grid_toggle_g_icon = QIcon(gui_constants.GRID_PATH)
        self.grid_toggle_l_icon = QIcon(gui_constants.LIST_PATH)
        self.grid_toggle = QToolButton()
        if self.display.currentIndex() == self.m_l_view_index:
            self.grid_toggle.setIcon(self.grid_toggle_l_icon)
        else:
            self.grid_toggle.setIcon(self.grid_toggle_g_icon)
        self.grid_toggle.setObjectName("gridtoggle")
        self.grid_toggle.clicked.connect(self.toggle_view)
        self.toolbar.addWidget(self.grid_toggle)

        self.search_bar = misc.LineEdit()
        if gui_constants.SEARCH_AUTOCOMPLETE:
            completer = QCompleter(self)
            completer.setModel(self.manga_list_view.gallery_model)
            completer.setCaseSensitivity(Qt.CaseInsensitive)
            completer.setCompletionMode(QCompleter.PopupCompletion)
            completer.setCompletionRole(Qt.DisplayRole)
            completer.setCompletionColumn(gui_constants.TITLE)
            completer.setFilterMode(Qt.MatchContains)
            self.search_bar.setCompleter(completer)
        if gui_constants.SEARCH_ON_ENTER:
            self.search_bar.returnPressed.connect(lambda: self.search(self.search_bar.text()))
        else:
            self.search_bar.textChanged[str].connect(self.search)
        self.search_bar.setPlaceholderText("Search title, artist, namespace & tags")
        self.search_bar.setMinimumWidth(150)
        self.search_bar.setMaximumWidth(500)
        self.toolbar.addWidget(self.search_bar)
        self.toolbar.addSeparator()
        settings_icon = QIcon(gui_constants.SETTINGS_PATH)
        settings_action = QAction("Set&tings", self)
        settings_action.triggered.connect(self.settings)
        self.toolbar.addAction(settings_action)

        spacer_end = QWidget()  # aligns About action properly
        spacer_end.setFixedSize(QSize(10, 1))
        self.toolbar.addWidget(spacer_end)
        self.addToolBar(self.toolbar)
    def __init__(self, parent):
        super(ProjectExecution, self).__init__()
        self._parent = parent
        grid = QGridLayout(self)

        grid.addWidget(QLabel(translations.TR_PROJECT_MAIN_FILE), 0, 0)
        # Main file
        self.path = QLineEdit()
        choose_main_file_action = QAction(self)
        choose_main_file_action.setIcon(
            self.style().standardIcon(self.style().SP_FileIcon))
        choose_main_file_action.setToolTip(
            translations.TR_PROJECT_SELECT_MAIN_FILE)
        self.path.addAction(
            choose_main_file_action, QLineEdit.TrailingPosition)
        clear_main_file_action = self.path.addAction(
            self.style().standardIcon(self.style().SP_LineEditClearButton),
            QLineEdit.TrailingPosition)
        clear_main_file_action.triggered.connect(self.path.clear)
        self.path.setPlaceholderText(
            os.path.join(os.path.expanduser("~"), 'path', 'to', 'main.py'))
        self.path.setText(self._parent.project.main_file)
        grid.addWidget(self.path, 0, 1)
        # this should be changed, and ALL pythonPath names to
        # python_custom_interpreter or something like that. this is NOT the
        # PYTHONPATH
        self.line_interpreter = QLineEdit()
        choose_interpreter = self.line_interpreter.addAction(
            self.style().standardIcon(self.style().SP_DirIcon),
            QLineEdit.TrailingPosition)
        self.line_interpreter.setText(self._parent.project.python_exec)
        completer = QCompleter(utils.get_python())
        completer.setCaseSensitivity(Qt.CaseInsensitive)
        completer.setFilterMode(Qt.MatchContains)
        self.line_interpreter.setCompleter(completer)
        self.line_interpreter.setPlaceholderText("python")
        grid.addWidget(QLabel(
            translations.TR_PROJECT_PYTHON_INTERPRETER), 1, 0)
        grid.addWidget(self.line_interpreter, 1, 1)
        # PYTHONPATH
        grid.addWidget(QLabel(translations.TR_PROJECT_PYTHON_PATH), 2, 0)
        self.txt_python_path = QPlainTextEdit()  # TODO : better widget
        self.txt_python_path.setPlainText(self._parent.project.python_path)
        self.txt_python_path.setToolTip(translations.TR_PROJECT_PATH_PER_LINE)
        grid.addWidget(self.txt_python_path, 2, 1)

        # Additional builtins/globals for pyflakes
        grid.addWidget(QLabel(translations.TR_PROJECT_BUILTINS), 3, 0)
        self.additional_builtins = QLineEdit()
        self.additional_builtins.setText(
            ' '.join(self._parent.project.additional_builtins))
        self.additional_builtins.setToolTip(
            translations.TR_PROJECT_BUILTINS_TOOLTIP)
        grid.addWidget(self.additional_builtins, 3, 1)
        # Pre script
        self._line_pre_exec = QLineEdit()
        choose_pre_exec = QAction(self)
        choose_pre_exec.setToolTip(
            "Choose Script to execute before run project")
        choose_pre_exec.setIcon(
            self.style().standardIcon(self.style().SP_FileIcon))
        self._line_pre_exec.addAction(
            choose_pre_exec, QLineEdit.TrailingPosition)
        clear_pre_action = self._line_pre_exec.addAction(
            self.style().standardIcon(self.style().SP_LineEditClearButton),
            QLineEdit.TrailingPosition)
        clear_pre_action.triggered.connect(self._line_pre_exec.clear)
        self._line_pre_exec.setReadOnly(True)
        self._line_pre_exec.setText(self._parent.project.pre_exec_script)
        self._line_pre_exec.setPlaceholderText(
            os.path.join(os.path.expanduser("~"), 'path', 'to', 'script.sh'))
        grid.addWidget(QLabel(translations.TR_PROJECT_PRE_EXEC), 4, 0)
        grid.addWidget(self._line_pre_exec, 4, 1)
        # Post script
        self._line_post_exec = QLineEdit()
        choose_post_exec = QAction(self)
        choose_post_exec.setToolTip(
            "Choose script to execute after run project")
        choose_post_exec.setIcon(
            self.style().standardIcon(self.style().SP_FileIcon))
        self._line_post_exec.addAction(
            choose_post_exec, QLineEdit.TrailingPosition)
        clear_post_action = self._line_post_exec.addAction(
            self.style().standardIcon(self.style().SP_LineEditClearButton),
            QLineEdit.TrailingPosition)
        clear_post_action.triggered.connect(self._line_post_exec.clear)
        self._line_post_exec.setReadOnly(True)
        self._line_post_exec.setText(self._parent.project.post_exec_script)
        self._line_post_exec.setPlaceholderText(
            os.path.join(os.path.expanduser("~"), 'path', 'to', 'script.sh'))
        grid.addWidget(QLabel(translations.TR_PROJECT_POST_EXEC), 5, 0)
        grid.addWidget(self._line_post_exec, 5, 1)

        # grid.addItem(QSpacerItem(5, 10, QSizePolicy.Expanding,
        #             QSizePolicy.Expanding), 6, 0)

        # Properties
        grid.addWidget(QLabel(translations.TR_PROJECT_PROPERTIES), 7, 0)
        self._line_params = QLineEdit()
        self._line_params.setToolTip(translations.TR_PROJECT_PARAMS_TOOLTIP)
        self._line_params.setText(self._parent.project.program_params)
        self._line_params.setPlaceholderText('verbose, debug, force')
        grid.addWidget(QLabel(translations.TR_PROJECT_PARAMS), 8, 0)
        grid.addWidget(self._line_params, 8, 1)
        # Widgets for virtualenv properties
        self.txtVenvPath = QLineEdit()
        # ui_tools.LineEditButton(
        #    self.txtVenvPath, self.txtVenvPath.clear,
        #    self.style().standardPixmap(self.style().SP_TrashIcon))
        self.txtVenvPath.setText(self._parent.project.venv)
        self._dir_completer = QCompleter()
        self._dir_completer.setModel(QDirModel(self._dir_completer))
        self.txtVenvPath.setCompleter(self._dir_completer)
        self.txtVenvPath.setPlaceholderText(
            os.path.join(os.path.expanduser("~"), 'path', 'to', 'virtualenv'))
        # self.btnVenvPath = QPushButton(QIcon(":img/open"), '')
        grid.addWidget(QLabel(translations.TR_PROJECT_VIRTUALENV), 9, 0)
        grid.addWidget(self.txtVenvPath, 9, 1)
        # grid.addWidget(self.btnVenvPath, 9, 2)

        choose_main_file_action.triggered.connect(self.select_file)
        choose_interpreter.triggered.connect(self._load_python_path)
        choose_pre_exec.triggered.connect(self.select_pre_exec_script)
        choose_post_exec.triggered.connect(self.select_post_exec_script)