diff --git a/qt/aqt/toolbar.py b/qt/aqt/toolbar.py
index d96a9a3f0..c72faf896 100644
--- a/qt/aqt/toolbar.py
+++ b/qt/aqt/toolbar.py
@@ -4,6 +4,7 @@
from __future__ import annotations
+from dataclasses import dataclass
from typing import Any, Dict, Optional
import aqt
@@ -25,17 +26,21 @@ class BottomToolbar:
self.toolbar = toolbar
+@dataclass
+class CenterLink:
+ cmd: str
+ label: str
+ func: Callable
+ tip: Optional[str] = None
+ id: Optional[str] = None
+
+
class Toolbar:
def __init__(self, mw: aqt.AnkiQt, web: AnkiWebView) -> None:
self.mw = mw
self.web = web
self.link_handlers: Dict[str, Callable] = {
- "decks": self._deckLinkHandler,
"study": self._studyLinkHandler,
- "add": self._addLinkHandler,
- "browse": self._browseLinkHandler,
- "stats": self._statsLinkHandler,
- "sync": self._syncLinkHandler,
}
self.web.setFixedHeight(30)
self.web.requiresCol = False
@@ -59,39 +64,61 @@ class Toolbar:
# Available links
######################################################################
- def addLink(
- self, name: str, cmd: str, func: Callable, tip: str = "",
- ):
- self.link_handlers[cmd] = func
+ def create_link(self, link: CenterLink):
+ self.link_handlers[link.cmd] = link.func
- return (cmd, name, tip)
+ title_attr = f'title="{link.tip}"' if link.tip else ""
+ id_attr = f"id={link.id}" if link.id else ""
+
+ return (
+ f""""""
+ f"""{link.label}"""
+ )
def _centerLinks(self):
links = [
- ("decks", _("Decks"), _("Shortcut key: %s") % "D"),
- ("add", _("Add"), _("Shortcut key: %s") % "A"),
- ("browse", _("Browse"), _("Shortcut key: %s") % "B"),
- ("stats", _("Stats"), _("Shortcut key: %s") % "T"),
+ self.create_link(link)
+ for link in [
+ CenterLink(
+ cmd="decks",
+ label=_("Decks"),
+ tip=_("Shortcut key: %s") % "D",
+ func=self._deckLinkHandler,
+ ),
+ CenterLink(
+ cmd="add",
+ label=_("Add"),
+ tip=_("Shortcut key: %s") % "A",
+ func=self._addLinkHandler,
+ ),
+ CenterLink(
+ cmd="browse",
+ label=_("Browse"),
+ tip=_("Shortcut key: %s") % "B",
+ func=self._browseLinkHandler,
+ ),
+ CenterLink(
+ cmd="stats",
+ label=_("Stats"),
+ tip=_("Shortcut key: %s") % "T",
+ func=self._statsLinkHandler,
+ ),
+ ]
]
- gui_hooks.top_toolbar_did_init_links(links, self)
- return self._linkHTML(links) + self._sync_link()
- def _linkHTML(self, links):
- buf = ""
- for ln, name, title in links:
- buf += """
- %s""" % (
- name,
- title,
- ln,
- name,
- )
- return buf
+ links.append(self._create_sync_link())
- def _sync_link(self) -> str:
+ # gui_hooks.top_toolbar_did_init_links(links, self)
+
+ return "\n".join(links)
+
+ def _create_sync_link(self) -> str:
name = _("Sync")
title = _("Shortcut key: %s") % "Y"
label = "sync"
+ self.link_handlers[label] = self._syncLinkHandler
+
return f"""
{name}