def set_message(self, text, color_, bold=False, is_permanent=False): from vise.view import certificate_error_domains key = (text, color_.name(), bold, is_permanent) if key == self.current_key: return self.current_key = key self.is_permanent = is_permanent prefix = text.partition(':')[0] self.is_address = self.is_permanent and prefix.lower() in { 'http', 'https', 'vise', 'file' } self.is_secure = prefix.lower() in {'https', 'vise', 'file'} color_ = color_ or self.palette().color(self.palette().WindowText) if self.is_address: qurl = QUrl(text) if self.is_secure and qurl.host() in certificate_error_domains: self.is_secure = False if qurl.scheme() in {'vise', 'file'}: host = qurl.path() rest = '' sep = ':' else: host = qurl.host() rest = qurl.toDisplayString(QUrl.PrettyDecoded | QUrl.RemoveScheme | QUrl.RemoveAuthority) sep = '://' self.static_text = QStaticText( '<span style="white-space:nowrap; color: {fg}">' '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>' '<span style="color:{fg}">{host}</span>' '<span style="color:{dull}">{rest}</span>'.format( fg=color_.name(), emph='green' if self.is_secure else 'red', scheme=escape(qurl.scheme()), host=escape(host), dull=color('status bar dull foreground', 'gray'), sep=sep, rest=escape(rest))) else: self.static_text = QStaticText( '<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>' .format(color_.name(), ('bold' if bold else 'normal'), escape(text))) to = QTextOption(Qt.AlignLeft | Qt.AlignTop) to.setWrapMode(to.NoWrap) self.static_text.setTextOption(to) self.static_text.prepare(font=self.font()) self.update()
def set_message(self, text, color_, bold=False, is_permanent=False): from vise.view import certificate_error_domains key = (text, color_.name(), bold, is_permanent) if key == self.current_key: return self.current_key = key self.is_permanent = is_permanent prefix = text.partition(':')[0] self.is_address = self.is_permanent and prefix.lower() in {'http', 'https', 'vise'} self.is_secure = prefix.lower() in {'https', 'vise'} color_ = color_ or self.palette().color(self.palette().WindowText) if self.is_address: qurl = QUrl(text) if self.is_secure and qurl.host() in certificate_error_domains: self.is_secure = False if qurl.scheme() == 'vise': host = qurl.path() rest = '' sep = ':' else: host = qurl.host() rest = qurl.toDisplayString(QUrl.PrettyDecoded | QUrl.RemoveScheme | QUrl.RemoveAuthority) sep = '://' self.static_text = QStaticText( '<span style="white-space:nowrap; color: {fg}">' '<span style="color:{emph}; font-weight:bold">{scheme}</span><span style="color:{dull}">{sep}</span>' '<span style="color:{fg}">{host}</span>' '<span style="color:{dull}">{rest}</span>'.format( fg=color_.name(), emph='green' if self.is_secure else 'red', scheme=escape(qurl.scheme()), host=escape(host), dull=color('status bar dull foreground', 'gray'), sep=sep, rest=escape(rest) )) else: self.static_text = QStaticText('<span style="color:{}; font-weight: {}; white-space:nowrap">{}</span>'.format( color_.name(), ('bold' if bold else 'normal'), escape(text))) to = QTextOption(Qt.AlignLeft | Qt.AlignTop) to.setWrapMode(to.NoWrap) self.static_text.setTextOption(to) self.static_text.prepare(font=self.font()) self.update()
def testWebView(view, url): ''' @param: view TabbedWebView @param: url QUrl ''' if not view.webTab().isRestored(): return False if view.browserWindow().tabWidget().tabBar().normalTabsCount() < 2: return False page = view.page() if page.history().count() != 0: return False if const.QTWEBENGINEWIDGETS_VERSION >= const.QT_VERSION_CHECK( 5, 12, 0): return True else: if page.url() != QUrl(): return False tabUrl = page.requestedUrl() if tabUrl.isEmpty(): tabUrl = QUrl(view.webTab().locationBar().text()) return tabUrl.host() == url.host()
class PageThumbnailer(QObject): def __init__(self, parent=None): super().__init__(parent) self._view = QQuickWidget() # QQuickWidget self._size = QSize(450, 253) * gVar.app.devicePixelRatio() self._url = QUrl() self._title = '' self._loadTitle = False self._view.setAttribute(Qt.WA_DontShowOnScreen) self._view.setSource(QUrl('qrc:data/thumbnailer.qml')) self._view.rootContext().setContextProperty('thumbnailer', self) self._view.show() def setSize(self, size): if size.isValid(): self._size = size def setUrl(self, url): if url.isValid(): self._url = url def url(self): return self._url def loadTitle(self): ''' @return: bool ''' return self._loadTitle def setLoadTitle(self, load): ''' @param: load bool ''' self._loadTitle = load def title(self): title = self._title if not title: title = self._url.host() if not title: title = self._url.toString() return title def start(self): if self._view.rootObject() and WebView.isUrlValid(self._url): self._view.rootObject().setProperty('url', self._url) else: def func(): self.thumbnailCreated.emit(QPixmap()) QTimer.singleShot(500, func) # Q_SIGNALS: thumbnailCreated = pyqtSignal(QPixmap) # public Q_SLOTS: @pyqtSlot(result=str) def afterLoadScript(self): ''' @return: QString ''' return Scripts.setCss('::~webkit-scrollbar{display:none;}') @pyqtSlot(bool) def createThumbnail(self, status): ''' @param: status bool ''' if not status: self.thumbnailCreated.emit(QPixmap()) return def func(): self._title = self._view.rootObject().property('title').strip() img = self._view.grabFramebuffer().scaled(self._size, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) pixmap = QPixmap.fromImage(img) self.thumbnailCreated.emit(pixmap) QTimer.singleShot(1000, func)