class FontFamilyChooser(QWidget): family_changed = pyqtSignal(object) def __init__(self, parent=None): QWidget.__init__(self, parent) self.l = l = QHBoxLayout() l.setContentsMargins(0, 0, 0, 0) self.setLayout(l) self.button = QPushButton(self) self.button.setIcon(QIcon(I('font.png'))) self.button.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) l.addWidget(self.button) self.default_text = _('Choose &font family') self.font_family = None self.button.clicked.connect(self.show_chooser) self.clear_button = QToolButton(self) self.clear_button.setIcon(QIcon(I('clear_left.png'))) self.clear_button.clicked.connect(self.clear_family) l.addWidget(self.clear_button) self.setToolTip = self.button.setToolTip self.toolTip = self.button.toolTip self.clear_button.setToolTip(_('Clear the font family')) l.addStretch(1) def clear_family(self): self.font_family = None @property def font_family(self): return self._current_family @font_family.setter def font_family(self, val): if not val: val = None self._current_family = val self.button.setText(val or self.default_text) self.family_changed.emit(val) def show_chooser(self): d = FontFamilyDialog(self.font_family, self) if d.exec_() == QDialog.DialogCode.Accepted: self.font_family = d.font_family
def __init__(self, gui): QDialog.__init__(self, parent=gui) self.gui = gui self.setWindowTitle(_('Mark books with text label')) layout = QGridLayout() layout.setColumnStretch(1, 10) self.setLayout(layout) self.text_box = textbox = MyHistoryComboBox() textbox.initialize('mark_with_text') history = textbox.all_items button_rows = min(4, len(history) - 1) for i in range(0, button_rows): if i == 0: layout.addWidget(QLabel(_('Recently used values:')), 0, 0, 1, 2) button = QPushButton() text = history[i + 1] button.setText(text) button.clicked.connect(partial(self.button_pushed, text=text)) row = i + 1 layout.addWidget(button, row, 1) label = QLabel('&' + str(row + 1)) label.setBuddy(button) layout.addWidget(label, row, 0) if button_rows > 0: layout.addWidget(QLabel(_('Enter a value:')), button_rows + 1, 0, 1, 2) textbox.show_initial_value(history[0] if history else '') layout.addWidget(textbox, button_rows + 2, 1) textbox.setFocus() button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) layout.addWidget(button_box, button_rows + 3, 0, 1, 2)
class ChooseFormatDialog(QDialog): def __init__(self, window, msg, formats, show_open_with=False): QDialog.__init__(self, window) self.resize(507, 377) self.setWindowIcon(QIcon(I("mimetypes/unknown.png"))) self.setWindowTitle(_('Choose format')) self.l = l = QVBoxLayout(self) self.msg = QLabel(msg) l.addWidget(self.msg) self.formats = QListWidget(self) self.formats.setIconSize(QSize(64, 64)) self.formats.activated[QModelIndex].connect(self.activated_slot) l.addWidget(self.formats) self.h = h = QHBoxLayout() h.setContentsMargins(0, 0, 0, 0) l.addLayout(h) if show_open_with: self.owb = QPushButton(_('&Open with...'), self) self.formats.currentRowChanged.connect( self.update_open_with_button) h.addWidget(self.owb) self.own = QMenu(self.owb.text()) self.owb.setMenu(self.own) self.own.aboutToShow.connect(self.populate_open_with) self.buttonBox = bb = QDialogButtonBox(self) bb.setStandardButtons(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) bb.accepted.connect(self.accept), bb.rejected.connect(self.reject) h.addStretch(10), h.addWidget(self.buttonBox) formats = list(formats) for format in formats: self.formats.addItem( QListWidgetItem( file_icon_provider().icon_from_ext(format.lower()), format.upper())) self._formats = formats self.formats.setCurrentRow(0) self._format = self.open_with_format = None if show_open_with: self.populate_open_with() self.update_open_with_button() def populate_open_with(self): from calibre.gui2.open_with import populate_menu, edit_programs menu = self.own menu.clear() fmt = self._formats[self.formats.currentRow()] def connect_action(ac, entry): connect_lambda(ac.triggered, self, lambda self: self.open_with(entry)) populate_menu(menu, connect_action, fmt) if len(menu.actions()) == 0: menu.addAction( _('Open %s with...') % fmt.upper(), self.choose_open_with) else: menu.addSeparator() menu.addAction( _('Add other application for %s files...') % fmt.upper(), self.choose_open_with) menu.addAction(_('Edit "Open with" applications...'), partial(edit_programs, fmt, self)) def update_open_with_button(self): fmt = self._formats[self.formats.currentRow()] self.owb.setText(_('Open %s with...') % fmt) def open_with(self, entry): self.open_with_format = (self._formats[self.formats.currentRow()], entry) self.accept() def choose_open_with(self): from calibre.gui2.open_with import choose_program fmt = self._formats[self.formats.currentRow()] entry = choose_program(fmt, self) if entry is not None: self.open_with(entry) def book_converted(self, book_id, fmt): fmt = fmt.upper() if fmt not in self._formats: self._formats.append(fmt) self.formats.addItem( QListWidgetItem( file_icon_provider().icon_from_ext(fmt.lower()), fmt.upper())) def activated_slot(self, *args): self.accept() def format(self): return self._format def accept(self): self._format = self._formats[self.formats.currentRow()] return QDialog.accept(self)