def hyperlink_dialog(self):
        dialog = QDialog(self.parent_window)
        dialog.setWindowTitle("Create a hyperlink")
        dialog.resize(DIALOG_SIZE_X, DIALOG_SIZE_Y)

        ok_button_anchor = QPushButton("&OK", dialog)
        ok_button_anchor.setEnabled(False)
        ok_button_anchor.clicked.connect(
            lambda: self.insert_anchor(url_edit.text(), urltext_edit.text()))
        ok_button_anchor.clicked.connect(dialog.hide)

        ok_button_anchor.setAutoDefault(True)

        cancel_button_anchor = QPushButton("&Cancel", dialog)
        cancel_button_anchor.clicked.connect(dialog.hide)
        cancel_button_anchor.setAutoDefault(True)

        url_label = QLabel("Link to:")
        url_edit = QLineEdit()
        url_edit.setPlaceholderText("URL")
        url_edit.textChanged.connect(lambda: self.enable_ok_button(
            ok_button_anchor, url_edit.text(), urltext_edit.text()))

        urltext_label = QLabel("Text to display:")
        urltext_edit = QLineEdit()
        urltext_edit.setPlaceholderText("Text")
        urltext_edit.textChanged.connect(lambda: self.enable_ok_button(
            ok_button_anchor, url_edit.text(), urltext_edit.text()))

        button_box = QHBoxLayout()
        button_box.addStretch(1)
        button_box.addWidget(cancel_button_anchor)
        button_box.addWidget(ok_button_anchor)

        dialog_vbox = QVBoxLayout()
        dialog_vbox.addWidget(url_label)
        dialog_vbox.addWidget(url_edit)
        dialog_vbox.addWidget(urltext_label)
        dialog_vbox.addWidget(urltext_edit)
        dialog_vbox.addLayout(button_box)
        dialog.setLayout(dialog_vbox)
        # if user already selected text, put it in urltext_edit
        if self.selected_text:
            if self.selected_is_url:
                url_edit.setText(self.selected_text)
                urltext_edit.setFocus()
            else:
                urltext_edit.setText(self.selected_text)
                url_edit.setFocus()
        dialog.exec()
Esempio n. 2
0
File: sync.py Progetto: rye761/anki
def get_id_and_pass_from_user(mw: aqt.main.AnkiQt,
                              username: str = "",
                              password: str = "") -> tuple[str, str]:
    diag = QDialog(mw)
    diag.setWindowTitle("Anki")
    disable_help_button(diag)
    diag.setWindowModality(Qt.WindowModality.WindowModal)
    vbox = QVBoxLayout()
    info_label = QLabel(
        without_unicode_isolation(
            tr.sync_account_required(
                link="https://ankiweb.net/account/register")))
    info_label.setOpenExternalLinks(True)
    info_label.setWordWrap(True)
    vbox.addWidget(info_label)
    vbox.addSpacing(20)
    g = QGridLayout()
    l1 = QLabel(tr.sync_ankiweb_id_label())
    g.addWidget(l1, 0, 0)
    user = QLineEdit()
    user.setText(username)
    g.addWidget(user, 0, 1)
    l2 = QLabel(tr.sync_password_label())
    g.addWidget(l2, 1, 0)
    passwd = QLineEdit()
    passwd.setText(password)
    passwd.setEchoMode(QLineEdit.EchoMode.Password)
    g.addWidget(passwd, 1, 1)
    vbox.addLayout(g)
    bb = QDialogButtonBox(
        QDialogButtonBox.StandardButton.Ok
        | QDialogButtonBox.StandardButton.Cancel)  # type: ignore
    bb.button(QDialogButtonBox.StandardButton.Ok).setAutoDefault(True)
    qconnect(bb.accepted, diag.accept)
    qconnect(bb.rejected, diag.reject)
    vbox.addWidget(bb)
    diag.setLayout(vbox)
    diag.show()

    accepted = diag.exec()
    if not accepted:
        return ("", "")
    return (user.text().strip(), passwd.text())
def create_link(editor):
    dialog = QDialog(editor.parentWindow, Qt.Dialog)
    form = link.Ui_Dialog()
    form.setupUi(dialog)

    # Default values
    # Line of text
    form.line_display.setText(editor.web.selectedText())

    # open
    form.combo_open_in.setCurrentIndex({
        "Browser": 0,
        "Previewer": 1
    }.get(getUserOption("Last open in", "Browser"), 0))

    # search
    form.combo_search_type.setCurrentIndex({
        "Note": 0,
        "Card": 1,
        "Query": 2
    }.get(getUserOption("Last search type", "Note"), 0))

    # query
    def default() -> str:
        search_type = ["Note", "Card",
                       "Query"][form.combo_search_type.currentIndex()]
        if search_type == "Note":
            if editor.note:
                return str(editor.note.id)
        elif search_type == "Card":
            if editor.card:
                return str(editor.card.id)
            elif editor.note:
                cards = editor.note.cards()
                if cards:
                    return str(cards[0].id)
        else:
            return getUserOption("Last query", "")
        return ""

    def set_default() -> None:
        form.line_search.setText(default())

    set_default()

    form.button_current.clicked.connect(set_default)

    ##
    dialog.exec()
    mw.setupDialogGC(dialog)
    # Get values

    # Line of text
    text = form.line_display.text()
    setUserOption("Last open in", text)

    # open
    open_in = ["Browser search",
               "Previewer"][form.combo_open_in.currentIndex()]
    setUserOption("Last open in", open_in)

    # search
    search_type = ["Note", "Card",
                   "Query"][form.combo_search_type.currentIndex()]
    setUserOption("Last search type", search_type)

    # query
    query = form.line_search.text()
    setUserOption("Last query", query)

    # Replace text
    if search_type == "Note":
        query = f"nid:{query}"
    elif search_type == "Card":
        query = f"cid:{query}"
    text = f"""<a onclick="pycmd('{open_in}:{query}')">{text}</a>"""
    editor.web.eval(
        f"document.execCommand('insertHTML', false, {json.dumps(text)});")