From cf31a22e914a8fc6c77a41332bcfb3245d9330e4 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 01:52:50 +0100 Subject: [PATCH 1/6] added new graph "work done". --- ankiqt/ui/graphs.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index 2430ca511..312fe716d 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -188,6 +188,12 @@ def intervalGraph(parent, deck): vbox.addWidget(eases) widgets.append(eases) + workload = AdjustableFigure(parent.config, 'workload', dg.workDone, range) + workload.addWidget(QLabel(_("

Work Done

"))) + workload.addFigure() + vbox.addWidget(workload) + widgets.append(workload) + scroll.setWidget(frame) hbox = QHBoxLayout() @@ -210,6 +216,7 @@ def intervalGraph(parent, deck): 'added': _("Added"), 'answered': _("First Answered"), 'eases': _("Eases"), + 'workload': _("Work Done"), } m = QMenu(parent) for graph in widgets: From dd0f452df8645b33e13b7dacca37b93cd648f155 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 02:22:03 +0100 Subject: [PATCH 2/6] do not render the graphs twice when showing the graphs window for the first time! --- ankiqt/ui/graphs.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index 312fe716d..172e962db 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -89,12 +89,14 @@ class AdjustableFigure(QWidget): self.periodCombo.setCurrentIndex(idx) self.connect(self.periodCombo, SIGNAL("currentIndexChanged(int)"), self.onPeriodChange) - self.onPeriodChange(idx) + self.onPeriodChange(idx, initialSkip=True) - def onPeriodChange(self, index): + def onPeriodChange(self, index, initialSkip=False): + print "period changed!" self.config['graphs.period.' + self.name] = index self.range = self.choices[index] - self.scheduleUpdate() + if not initialSkip: + self.scheduleUpdate() def scheduleUpdate(self): if not self.updateTimer: From b2cf4dc35c63af1689034ff4977bb30c0907cb3d Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 02:27:00 +0100 Subject: [PATCH 3/6] removed debug output. --- ankiqt/ui/graphs.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index 172e962db..9e88fce5d 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -92,7 +92,6 @@ class AdjustableFigure(QWidget): self.onPeriodChange(idx, initialSkip=True) def onPeriodChange(self, index, initialSkip=False): - print "period changed!" self.config['graphs.period.' + self.name] = index self.range = self.choices[index] if not initialSkip: From 1f78e989078b4fb661ebb056ea999882c474ca36 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 02:29:43 +0100 Subject: [PATCH 4/6] moved the workload graph to where it's more sensible (between due and cumulative due) that is more sensible, right? --- ankiqt/ui/graphs.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index 9e88fce5d..d136ddfbc 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -157,6 +157,12 @@ def intervalGraph(parent, deck): nextDue.addFigure() vbox.addWidget(nextDue) widgets.append(nextDue) + + workload = AdjustableFigure(parent.config, 'workload', dg.workDone, range) + workload.addWidget(QLabel(_("

Work Done

"))) + workload.addFigure() + vbox.addWidget(workload) + widgets.append(workload) cumDue = AdjustableFigure(parent.config, 'cum', dg.cumulativeDue, range) cumDue.addWidget(QLabel(_("

Cumulative Due

"))) @@ -189,12 +195,6 @@ def intervalGraph(parent, deck): vbox.addWidget(eases) widgets.append(eases) - workload = AdjustableFigure(parent.config, 'workload', dg.workDone, range) - workload.addWidget(QLabel(_("

Work Done

"))) - workload.addFigure() - vbox.addWidget(workload) - widgets.append(workload) - scroll.setWidget(frame) hbox = QHBoxLayout() From 187193dd1ee181cac163c2125c0e5bf215720633 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 03:21:18 +0100 Subject: [PATCH 5/6] sped up graph window startup and hide-graph action by making the AdjustableFigure "lazy". --- ankiqt/ui/graphs.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index d136ddfbc..c6bbefc13 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -56,6 +56,7 @@ class AdjustableFigure(QWidget): self.hbox = QHBoxLayout() self.hbox.addSpacing(10) self.hbox.addStretch(1) + self.figureCanvas = None if self.choices: self.addCombo() @@ -71,6 +72,8 @@ class AdjustableFigure(QWidget): self.vbox.addLayout(self.hbox) def updateFigure(self): + if not self.figureCanvas: + self.addFigure() self.updateTimer = None self.setUpdatesEnabled(False) idx = self.vbox.indexOf(self.figureCanvas) @@ -114,6 +117,8 @@ class AdjustableFigure(QWidget): def showHide(self): shown = self.config.get('graphs.shown.' + self.name, True) self.setVisible(shown) + if shown and not self.figureCanvas: + self.addFigure() class IntervalGraph(QDialog): @@ -154,44 +159,37 @@ def intervalGraph(parent, deck): # views nextDue = AdjustableFigure(parent.config, 'due', dg.nextDue, range) nextDue.addWidget(QLabel(_("

Due

"))) - nextDue.addFigure() vbox.addWidget(nextDue) widgets.append(nextDue) workload = AdjustableFigure(parent.config, 'workload', dg.workDone, range) workload.addWidget(QLabel(_("

Work Done

"))) - workload.addFigure() vbox.addWidget(workload) widgets.append(workload) cumDue = AdjustableFigure(parent.config, 'cum', dg.cumulativeDue, range) cumDue.addWidget(QLabel(_("

Cumulative Due

"))) - cumDue.addFigure() vbox.addWidget(cumDue) widgets.append(cumDue) interval = AdjustableFigure(parent.config, 'interval', dg.intervalPeriod, range) interval.addWidget(QLabel(_("

Intervals

"))) - interval.addFigure() vbox.addWidget(interval) widgets.append(interval) added = AdjustableFigure(parent.config, 'added', dg.addedRecently, range) added.addWidget(QLabel(_("

Added

"))) - added.addFigure() vbox.addWidget(added) widgets.append(added) answered = AdjustableFigure(parent.config, 'answered', lambda *args: apply( dg.addedRecently, args + ('firstAnswered',)), range) answered.addWidget(QLabel(_("

First Answered

"))) - answered.addFigure() vbox.addWidget(answered) widgets.append(answered) eases = AdjustableFigure(parent.config, 'eases', dg.easeBars) eases.addWidget(QLabel(_("

Eases

"))) - eases.addFigure() vbox.addWidget(eases) widgets.append(eases) From 65353bab70330c8bd4a9e8ec265d7a6100779d78 Mon Sep 17 00:00:00 2001 From: Timo Paulssen Date: Sat, 13 Dec 2008 03:46:43 +0100 Subject: [PATCH 6/6] made graphs window even faster when updating figures! IS IT POSSIBLE!? --- ankiqt/ui/graphs.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ankiqt/ui/graphs.py b/ankiqt/ui/graphs.py index c6bbefc13..94a954e1a 100644 --- a/ankiqt/ui/graphs.py +++ b/ankiqt/ui/graphs.py @@ -72,14 +72,15 @@ class AdjustableFigure(QWidget): self.vbox.addLayout(self.hbox) def updateFigure(self): - if not self.figureCanvas: - self.addFigure() self.updateTimer = None self.setUpdatesEnabled(False) idx = self.vbox.indexOf(self.figureCanvas) self.vbox.removeWidget(self.figureCanvas) - self.figureCanvas.deleteLater() - self.figureCanvas = AnkiFigureCanvas(self.figureFunc(self.range)) + if not self.figureCanvas: + self.addFigure() + else: + self.figureCanvas.deleteLater() + self.figureCanvas = AnkiFigureCanvas(self.figureFunc(self.range)) self.vbox.insertWidget(idx, self.figureCanvas) self.setUpdatesEnabled(True)