class MainDialog(QDialog): def __init__(self, gui, do_user_config, selected_book_ids, is_sync_selected): QDialog.__init__(self, gui) self.gui = gui self.setWindowTitle('BookFusion Sync') self.l = QVBoxLayout() self.l.setSizeConstraint(QLayout.SetFixedSize) self.setLayout(self.l) self.intro = IntroWidget(gui) self.l.addWidget(self.intro) self.sync = SyncWidget(gui, do_user_config, selected_book_ids, is_sync_selected) self.l.addWidget(self.sync) self.adjustSize() def reject(self): if self.sync.maybe_cancel(): QDialog.reject(self)
def search_epub_content(self): ''' Search epub content ''' # reset results layout self.search_results.clear() # get search input keyword = self.search_input.text() # search in each book db = self.db.new_api matched_ids = {book_id for book_id in db.all_book_ids() if 'EPUB' in db.formats(book_id)} for book_id in matched_ids: mi = db.get_metadata(book_id, get_cover=False, cover_as_data=False) if prefs['tags'] in mi.tags: title = mi.title filepath = fmt_path = self.gui.current_db.format_abspath(book_id, 'EPUB', index_is_id=True) grep = EpubGrep(keyword) grep.setPreview(True) grep_result = grep.searchin(filepath) #print(grep_result) if grep_result != None and len(grep_result) != 0: widgetLayout = QVBoxLayout() book_button = QPushButton(title, self) book_button.clicked.connect(partial(self.view, book_id, 0)) widgetLayout.addWidget(book_button) widgetLayout.setSizeConstraint(QLayout.SetFixedSize) widget = QWidget() widget.setLayout(widgetLayout) widgetItem = QListWidgetItem() widgetItem.setSizeHint(widget.sizeHint()) self.search_results.addItem(widgetItem) self.search_results.setItemWidget(widgetItem, widget) #matched = result.stdout.decode('utf-8') matched = grep_result search_result_count = 0 if prefs['search_result_count'] == '' else int(prefs['search_result_count']) count = 0 for lines in matched.split('--\n'): # only handles results within limit if search_result_count != 0 and count >= search_result_count: break widgetLayout = QVBoxLayout() qLabel = QLabel(lines.replace(keyword, '<font color=yellow>' + keyword + '</font>').replace('\n\n', '\n').replace('\n','<br/>') + '<br/>') qLabel.setTextFormat(Qt.RichText) qLabel.setStyleSheet(''' font-size: 24px; ''') widgetLayout.addWidget(qLabel) widgetLayout.setSizeConstraint(QLayout.SetFixedSize) widget = QWidget() widget.setLayout(widgetLayout) widgetItem = QListWidgetItem() widgetItem.setSizeHint(widget.sizeHint()) widgetItem.setData(Qt.ItemDataRole.UserRole, (book_id, count)) self.search_results.addItem(widgetItem) self.search_results.setItemWidget(widgetItem, widget) count += 1 self.search_results.itemClicked.connect(self.view_search_result)
def __init__(self, parent=None): super(WebTab, self).__init__(parent) self.setObjectName('webtab') self._tabBar = None self._window = None self._parentTab = None self._childTabs = [] self._sessionData = {} self._savedTab = self.SavedTab() self._isPinned = False self._isCurrentTab = False self._webView = TabbedWebView(self) self._webView.setPage(WebPage()) self._webView.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) self.setFocusProxy(self._webView) self._locationBar = LocationBar(self) self._locationBar.setWebView(self._webView) self._tabIcon = TabIcon(self) self._tabIcon.setWebTab(self) self._layout = QVBoxLayout(self) self._layout.setContentsMargins(0, 0, 0, 0) self._layout.setSpacing(0) self._layout.addWidget(self._webView) viewWidget = QWidget(self) viewWidget.setLayout(self._layout) self._splitter = QSplitter(Qt.Vertical, self) self._splitter.setChildrenCollapsible(False) self._splitter.addWidget(viewWidget) layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(self._splitter) self.setLayout(layout) self._notificationWidget = QWidget(self) self._notificationWidget.setAutoFillBackground(True) pal = self._notificationWidget.palette() pal.setColor(QPalette.Window, pal.window().color().darker(110)) self._notificationWidget.setPalette(pal) nlayout = QVBoxLayout(self._notificationWidget) nlayout.setSizeConstraint(QLayout.SetMinAndMaxSize) nlayout.setContentsMargins(0, 0, 0, 0) nlayout.setSpacing(1) self._webView.showNotification.connect(self.showNotification) self._webView.loadFinished.connect(self.loadFinished) self._webView.titleChanged.connect(self.titleWasChanged) self._webView.titleChanged.connect(self.titleChanged) self._webView.iconChanged.connect(self.iconChanged) self._webView.backgroundActivityChanged.connect(self.backgroundActivityChanged) self._webView.loadStarted.connect(lambda: self.loadingChanged.emit(True)) self._webView.loadFinished.connect(lambda: self.loadingChanged.emit(False)) def pageChanged(page): page.audioMutedChanged.connect(self.playingChanged) page.recentlyAudibleChanged.connect(self.mutedChanged) pageChanged(self._webView.page()) self._webView.pageChanged.connect(pageChanged) def tabIconResized(): if self._tabBar: self._tabBar.update() self._tabIcon.resized.connect(tabIconResized)