diff --git a/aqt/__init__.py b/aqt/__init__.py index 30e0dd967..d8851bb60 100644 --- a/aqt/__init__.py +++ b/aqt/__init__.py @@ -4,11 +4,11 @@ import os, sys from aqt.qt import * -appName="Anki" appVersion="2.0-alpha2" appWebsite="http://ankisrs.net/" appHelpSite="http://ankisrs.net/docs/dev/" appDonate="http://ankisrs.net/support/" +appShared="http://test.ankiweb.net/shared/decks/" mw = None # set on init moduleDir = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0] diff --git a/aqt/browser.py b/aqt/browser.py index 281668a9b..c12d166c7 100644 --- a/aqt/browser.py +++ b/aqt/browser.py @@ -1415,21 +1415,22 @@ Are you sure you want to continue?""")): ###################################################################### class BrowserToolbar(Toolbar): - always = [ - ["setDeck", "Move to Deck"], - ["addTags", "Add Tags"], - ["remTags", "Remove Tags"], - ] def __init__(self, mw, web, browser): self.browser = browser Toolbar.__init__(self, mw, web) + def _centerLinks(self): + links = [ + ["setDeck", _("Move to Deck")], + ["addTags", _("Add Tags")], + ["remTags", _("Remove Tags")], + ] + return self._linkHTML(links) + def draw(self): mark = self.browser.isMarked() pause = self.browser.isSuspended() - links = self.always[:] - self.centerLinks = links def borderImg(link, icon, on): if on: fmt = '''\ diff --git a/aqt/deckbrowser.py b/aqt/deckbrowser.py index 0fa206db1..4623711c5 100644 --- a/aqt/deckbrowser.py +++ b/aqt/deckbrowser.py @@ -3,13 +3,15 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html from aqt.qt import * -from aqt.utils import askUser, getOnlyText +from aqt.utils import askUser, getOnlyText, openLink +import aqt class DeckBrowser(object): def __init__(self, mw): self.mw = mw self.web = mw.web + self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) def show(self, _init=True): if _init: @@ -28,18 +30,10 @@ class DeckBrowser(object): self._selDeck(arg) elif cmd == "opts": self._showOptions(arg) - elif cmd == "download": - self.mw.onGetSharedDeck() - elif cmd == "new": - self.mw.onNew() + elif cmd == "shared": + self._onShared() elif cmd == "import": self.mw.onImport() - elif cmd == "opensel": - self.mw.onOpen() - elif cmd == "synced": - self.mw.onOpenOnline() - elif cmd == "refresh": - self.refresh() def _selDeck(self, did): self.mw.col.decks.select(did) @@ -74,6 +68,7 @@ body { margin: 1em; } self.web.stdHtml(self._body%dict( title=_("Decks"), tree=tree), css=css) + self._drawButtons() def _renderDeckTree(self, nodes, depth=0): if not nodes: @@ -136,3 +131,22 @@ body { margin: 1em; } Are you sure you wish to delete all of the cards in %s?""")%deck['name']): self.mw.col.decks.rem(did, True) self.show() + + # Top buttons + ###################################################################### + + def _drawButtons(self): + links = [ + ["shared", _("Get Shared")], + ["import", _("Import File")], + ] + buf = "" + for b in links: + buf += "" % tuple(b) + self.bottom.draw(buf) + self.bottom.web.setFixedHeight(32) + self.bottom.web.setLinkHandler(self._linkHandler) + + def _onShared(self): + print "fixme: check & warn if schema modified first" + openLink(aqt.appShared) diff --git a/aqt/main.py b/aqt/main.py index 1a98059a8..e0a92800e 100755 --- a/aqt/main.py +++ b/aqt/main.py @@ -326,12 +326,20 @@ title="%s">%s''' % ( self.web.setObjectName("mainText") self.web.setFocusPolicy(Qt.WheelFocus) self.web.setMinimumWidth(400) + # bottom area + sweb = self.bottomWeb = aqt.webview.AnkiWebView() + #sweb.hide() + sweb.setFixedHeight(100) + sweb.setObjectName("bottomWeb") + sweb.setFocusPolicy(Qt.WheelFocus) + sweb.stdHtml("foo") # add in a layout self.mainLayout = QVBoxLayout() self.mainLayout.setContentsMargins(0,0,0,0) self.mainLayout.setSpacing(0) self.mainLayout.addWidget(tweb) self.mainLayout.addWidget(self.web) + self.mainLayout.addWidget(sweb) self.form.centralwidget.setLayout(self.mainLayout) def closeAllWindows(self): @@ -738,7 +746,7 @@ Please choose a new deck name:""")) self.enableDeckMenuItems(enabled=False) def updateTitleBar(self): - self.setWindowTitle(aqt.appName) + self.setWindowTitle("Anki") # Auto update ########################################################################## diff --git a/aqt/overview.py b/aqt/overview.py index 753470bc0..f2440de84 100644 --- a/aqt/overview.py +++ b/aqt/overview.py @@ -7,6 +7,7 @@ from aqt.qt import * from anki.consts import NEW_CARDS_RANDOM from anki.hooks import addHook from aqt.utils import showInfo +import aqt class Overview(object): "Deck overview." @@ -14,6 +15,7 @@ class Overview(object): def __init__(self, mw): self.mw = mw self.web = mw.web + self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) addHook("reset", self.refresh) def show(self): @@ -23,8 +25,9 @@ class Overview(object): def refresh(self): self._renderPage() + self._renderBottom() - # Handlers + # Handlers ############################################################ def _keyHandler(self, evt): @@ -127,4 +130,8 @@ h3 { margin-bottom: 0; } td { font-size: 14px; } """ + # Bottom area + ###################################################################### + def _renderBottom(self): + self.bottom.draw("hello") diff --git a/aqt/reviewer.py b/aqt/reviewer.py index 4ba30398f..6e7481a5d 100644 --- a/aqt/reviewer.py +++ b/aqt/reviewer.py @@ -23,6 +23,7 @@ class Reviewer(object): self.state = None self.keep = False self._setupStatus() + self.bottom = aqt.toolbar.BottomBar(mw, mw.bottomWeb) addHook("leech", self.onLeech) def show(self): diff --git a/aqt/toolbar.py b/aqt/toolbar.py index 523b12960..0f1bc21be 100644 --- a/aqt/toolbar.py +++ b/aqt/toolbar.py @@ -25,22 +25,24 @@ class Toolbar(object): # Available links ###################################################################### - centerLinks = [ - ["decks", "Decks"], - ["study", "Study"], - ["add", "Add"], - ["browse", "Browse"], - ] - rightIcons = [ ["stats", "qrc:/icons/view-statistics.png"], ["sync", "qrc:/icons/view-refresh.png"], ] def _centerLinks(self): + links = [ + ["decks", _("Decks")], + ["study", _("Study")], + ["add", _("Add")], + ["browse", _("Browse")], + ] + return self._linkHTML(links) + + def _linkHTML(self, links): buf = "" - for ln, name in self.centerLinks: - buf += '%s' % (ln, _(name)) + for ln, name in links: + buf += '%s' % (ln, name) buf += " "*3 return buf @@ -89,12 +91,16 @@ margin:0; background: -webkit-gradient(linear, left top, left bottom, from(#ddd), to(#fff)); font-weight: bold; -height: 10px; margin-bottom: 1px; border-bottom: 1px solid #aaa; } -body { margin: 0; padding: 0; } +body { +margin: 0; padding: 0; +-webkit-user-select: none; +} + +* { -webkit-user-drag: none; } .hitem { display: inline-block; padding: 4px; padding-right: 6px; text-decoration: none; color: #000; @@ -104,3 +110,27 @@ background: #333; color: #fff; } """ + +class BottomBar(Toolbar): + + _css = Toolbar._css + """ +#header { +background: -webkit-gradient(linear, left top, left bottom, +from(#fff), to(#ddd)); +border-bottom: 0; +border-top: 1px solid #aaa; +font-weight: normal; +margin-bottom: 6px; +} +""" + + _centerBody = """ +
+""" + + def draw(self, buf): + self.web.show() + self.web.stdHtml( + self._centerBody % buf, + self._css) diff --git a/designer/icons/clock-icon.png b/designer/icons/clock-icon.png index 0d2cab138..24bd3b5c1 100644 Binary files a/designer/icons/clock-icon.png and b/designer/icons/clock-icon.png differ diff --git a/designer/icons/plus-circle.png b/designer/icons/plus-circle.png index 2d0bc6365..4fc5b8c81 100644 Binary files a/designer/icons/plus-circle.png and b/designer/icons/plus-circle.png differ