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)
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)
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
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)
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;}')
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)
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')
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)
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()
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()
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)
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)
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)
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)
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
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)
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)
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)
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
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
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
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_()
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
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
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)
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)