diff --git a/ankiqt/ui/main.py b/ankiqt/ui/main.py index d370feaee..6e833f783 100644 --- a/ankiqt/ui/main.py +++ b/ankiqt/ui/main.py @@ -41,23 +41,14 @@ class AnkiQt(QMainWindow): self.setupBackupDir() self.setupHooks() self.loadPlugins() - self.mainWin = ankiqt.forms.main.Ui_MainWindow() - self.mainWin.setupUi(self) + self.setupMainWindow() self.rebuildPluginsMenu() self.alterShortcuts() - self.help = ui.help.HelpArea(self.mainWin.helpFrame, self.config, self) - self.trayIcon = ui.tray.AnkiTrayIcon( self ) + self.setupTray() self.connectMenuActions() if self.config['mainWindowGeom']: self.restoreGeometry(self.config['mainWindowGeom']) - self.bodyView = ui.view.View(self, self.mainWin.mainText, - self.mainWin.mainTextFrame) - self.mainWin.mainText.pageAction(QWebPage.Reload).setVisible(False) - self.addView(self.bodyView) - self.statusView = ui.status.StatusView(self) - self.addView(self.statusView) - self.mainWin.welcomeText.hide() - self.mainWin.mainText.hide() + self.setupViews() self.setupEditor() self.setupButtons() self.setupAnchors() @@ -79,6 +70,31 @@ class AnkiQt(QMainWindow): # check for updates self.setupAutoUpdate() + def setupMainWindow(self): + self.mainWin = ankiqt.forms.main.Ui_MainWindow() + self.mainWin.setupUi(self) + self.mainWin.mainText = ui.view.AnkiWebView(self.mainWin.mainTextFrame) + self.mainWin.mainText.setObjectName("mainText") + self.mainWin.vboxlayout.addWidget(self.mainWin.mainText) + self.mainWin.buttonWidget = QWidget(self.mainWin.mainTextFrame) + self.mainWin.buttonWidget.setObjectName("buttonWidget") + self.mainWin.vboxlayout.addWidget(self.mainWin.buttonWidget) + self.help = ui.help.HelpArea(self.mainWin.helpFrame, self.config, self) + self.mainWin.mainText.pageAction(QWebPage.Reload).setVisible(False) + self.mainWin.welcomeText.hide() + self.mainWin.mainText.hide() + + def setupViews(self): + self.bodyView = ui.view.View(self, self.mainWin.mainText, + self.mainWin.mainTextFrame) + self.addView(self.bodyView) + self.statusView = ui.status.StatusView(self) + self.addView(self.statusView) + + def setupTray(self): + self.trayIcon = ui.tray.AnkiTrayIcon(self) + + # State machine ########################################################################## diff --git a/ankiqt/ui/view.py b/ankiqt/ui/view.py index ad561bc0a..e136544c2 100644 --- a/ankiqt/ui/view.py +++ b/ankiqt/ui/view.py @@ -11,6 +11,7 @@ from anki.utils import stripHTML import types, time, re, os, urllib, sys from ankiqt import ui from ankiqt.ui.utils import mungeQA +from PyQt4.QtWebKit import QWebPage, QWebView # Views - define the way a user is prompted for questions, etc ########################################################################## @@ -224,3 +225,14 @@ Start adding your own material. self.write("
" + self.main.deck.deckFinishedMsg() + "
") + +class AnkiWebView(QWebView): + + def keyPressEvent(self, evt): + if evt.matches(QKeySequence.Copy): + self.triggerPageAction(QWebPage.Copy) + evt.accept() + evt.ignore() + + def contextMenuEvent(self, evt): + QWebView.contextMenuEvent(self, evt) diff --git a/designer/main.ui b/designer/main.ui index 155e4a874..4ce96565f 100644 --- a/designer/main.ui +++ b/designer/main.ui @@ -23,6 +23,14 @@ :/icons/anki.png:/icons/anki.png + + + 0 + 69 + 454 + 415 + + 1 @@ -153,27 +161,6 @@ - - - - - 0 - 0 - - - - Qt::WheelFocus - - - - about:blank - - - - - - - @@ -366,7 +353,7 @@ 0 0 454 - 25 + 23 @@ -498,11 +485,28 @@ - + + + + 0 + 484 + 454 + 20 + + + true + + + 0 + 23 + 454 + 46 + + Qt::Horizontal @@ -1014,13 +1018,6 @@ - - - QWebView - QWidget -
QtWebKit/QWebView
-
-