Exemplo n.º 1
0
class Counters(QScrollArea):
    button_clicked = Signal(object, object)
    SPACING = 2

    def __init__(self, parent=None):
        QScrollArea.__init__(self, parent)
        self.setWidgetResizable(True)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

        self._layout = QVBoxLayout()
        self._layout.setContentsMargins(0, 0, 0, 0)
        self._layout.setSpacing(Counters.SPACING)

        widget = QWidget()
        widget.setLayout(self._layout)
        self.setWidget(widget)

        self.setFixedWidth(200)
        self.checked_buttons = dict()

    def set(self, counters):
        previous_buttons = self.checked_buttons.copy()
        self.clear()

        for column, counter in counters.items():
            for entry, value in counter.items():
                checked = previous_buttons.get(entry, False)
                self.checked_buttons[entry] = checked

                button = QPushButton('{} {}'.format(entry, value))
                button.setProperty(PROPERTY_SIDE_STROKED, checked)
                button.clicked.connect(self._clicked)
                self._layout.addWidget(button)

            self._layout.addWidget(QLabel())

        self._layout.addWidget(QWidget())
        self._layout.setStretch(self._layout.count() - 1, 100)

    def clear(self):
        clear_layout(self._layout)
        self.checked_buttons = dict()

    def _clicked(self):
        button = self.sender()
        checked = not button.property(PROPERTY_SIDE_STROKED)

        entry = button.text().split()[0]
        self.checked_buttons[entry] = checked

        button.setProperty(PROPERTY_SIDE_STROKED, checked)

        self.button_clicked.emit(entry, self.checked_buttons)
Exemplo n.º 2
0
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, url: QUrl) -> None:
        super().__init__()
        self.setupUi(self)

        self.m_cookies = []

        self.m_urlLineEdit.setText(url.toString())

        self.m_layout = QVBoxLayout()
        self.m_layout.addItem(
            QSpacerItem(0, 0, QSizePolicy.Minimum, QSizePolicy.Expanding))
        self.m_layout.setContentsMargins(0, 0, 0, 0)
        self.m_layout.setSpacing(0)

        w = QWidget()
        p = w.palette()
        p.setColor(self.widget.backgroundRole(), Qt.white)
        w.setPalette(p)
        w.setLayout(self.m_layout)

        self.m_scrollArea.setWidget(w)
        self.m_scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.m_scrollArea.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

        self.m_urlButton.clicked.connect(self.handleUrlClicked)
        self.m_deleteAllButton.clicked.connect(self.handleDeleteAllClicked)
        self.m_newButton.clicked.connect(self.handleNewClicked)

        self.m_store: QWebEngineCookieStore = self.m_webview.page().profile(
        ).cookieStore()
        self.m_store.cookieAdded.connect(self.handleCookieAdded)
        self.m_store.loadAllCookies()
        self.m_webview.load(url)

    def containsCookie(self, cookie: QNetworkCookie):
        for c in self.m_cookies:
            if c.hasSameIdentifier(cookie):
                return True
        return False

    @Slot(QNetworkCookie)
    def handleCookieAdded(self, cookie: QNetworkCookie):
        if self.containsCookie(cookie):
            return

        widget = CookieWidget(cookie)
        widget.setHighlighted(len(self.m_cookies) % 2)

        self.m_cookies.append(QNetworkCookie(cookie))
        self.m_layout.insertWidget(0, widget)

        widget.deleteClicked.connect(
            partial(self._on_deleteClicked, QNetworkCookie(cookie), widget))
        widget.viewClicked.connect(
            partial(self._on_viewClicked, QNetworkCookie(cookie)))

    def _on_deleteClicked(self, cookie: QNetworkCookie, widget: QWidget):
        self.m_store.deleteCookie(QNetworkCookie(cookie))
        # FIXME
        # sip.delete(widget)
        self.m_cookies.remove(cookie)
        for i in range(self.m_layout.count() - 1, -1, -1):
            w = self.m_layout.itemAt(i).widget()
            if isinstance(w, CookieWidget):
                w.setHighlighted(i % 2)

    def _on_viewClicked(self, cookie):
        dialog = CookieDialog(cookie)
        dialog.exec_()

    @Slot()
    def handleDeleteAllClicked(self):
        self.m_store.deleteAllCookies()
        for i in range(self.m_layout.count() - 1, -1, -1):
            w = self.m_layout.itemAt(i).widget()
            if w:
                sip.delete(w)
        self.m_cookies.clear()

    @Slot()
    def handleNewClicked(self):
        dialog = CookieDialog()
        if dialog.exec_() == QDialog.Accepted:
            self.m_store.setCookie(QNetworkCookie(dialog.cookie()))

    @Slot()
    def handleUrlClicked(self):
        self.m_webview.load(QUrl.fromUserInput(self.m_urlLineEdit.text()))