use checkmarks instead of multi selection so we don't lose keyboard focus

This commit is contained in:
Damien Elmes 2011-03-29 12:01:21 +09:00
parent c8aafa7edf
commit 783d8f2a5f
2 changed files with 61 additions and 31 deletions

View file

@ -6,29 +6,34 @@ from PyQt4.QtCore import *
from PyQt4.QtGui import * from PyQt4.QtGui import *
import aqt import aqt
COLNAME = 0
COLCHECK = 1
COLCOUNT = 2
COLDUE = 3
COLNEW = 4
class GroupSel(QDialog): class GroupSel(QDialog):
def __init__(self, mw): def __init__(self, mw):
QDialog.__init__(self, mw) QDialog.__init__(self, mw)
self.mw = mw self.mw = mw
self.form = aqt.forms.groupsel.Ui_Dialog() self.form = aqt.forms.groupsel.Ui_Dialog()
self.form.setupUi(self) self.form.setupUi(self)
self.load() self.loadTable()
# self.connect(self.form.optionsHelpButton, self.addButtons()
# SIGNAL("clicked()"),
# lambda: QDesktopServices.openUrl(QUrl(
# aqt.appWiki + "StudyOptions")))
self.exec_() self.exec_()
def load(self): def loadTable(self):
import time # load the data into the tree
self.mw.progress.start() self.mw.progress.start()
grps = self.mw.deck.sched.groupCountTree() grps = self.mw.deck.sched.groupCountTree()
self.mw.progress.finish() self.mw.progress.finish()
self._groupMap = {} self._groupMap = {}
items = self._makeItems(grps) items = self._makeItems(grps)
self.form.tree.addTopLevelItems(items) self.form.tree.addTopLevelItems(items)
for item in items: # default to check column
self._addButtons(item) self.form.tree.setCurrentItem(items[0], 1)
self.items = items
# config tree
h = self.form.tree.header() h = self.form.tree.header()
h.setResizeMode(QHeaderView.ResizeToContents) h.setResizeMode(QHeaderView.ResizeToContents)
h.setResizeMode(0, QHeaderView.Stretch) h.setResizeMode(0, QHeaderView.Stretch)
@ -36,26 +41,51 @@ class GroupSel(QDialog):
self.form.tree.setIndentation(15) self.form.tree.setIndentation(15)
self.form.tree.expandAll() self.form.tree.expandAll()
def _addButtons(self, item): def addButtons(self):
gid = self._groupMap[unicode(item.text(0))] box = self.form.buttonBox
if gid: def button(name, func):
b = QPushButton("Edit") b = box.addButton(name, QDialogButtonBox.ActionRole)
b.setFixedHeight(20) b.connect(b, SIGNAL("clicked()"), func)
b.connect(b, SIGNAL("clicked()"), lambda g=gid: self._edit(gid)) button(_("Select &All"), self.onSelectAll)
self.form.tree.setItemWidget(item, 4, b) button(_("Select &None"), self.onSelectNone)
for i in range(item.childCount()): button(_("&Edit..."), self.onEdit)
self._addButtons(item.child(i)) self.connect(box,
SIGNAL("helpRequested()"),
lambda: QDesktopServices.openUrl(QUrl(
aqt.appWiki + "GroupSelection")))
def _edit(self, gid): def onSelectAll(self):
for i in self.items:
i.setCheckState(COLCHECK, Qt.Checked)
def onSelectNone(self):
for i in self.items:
i.setCheckState(COLCHECK, Qt.Unchecked)
def onEdit(self):
item = self.form.tree.currentItem()
gid = self._groupMap[unicode(item.text(0))]
print "edit", gid print "edit", gid
def _makeItems(self, grps): def _makeItems(self, grps):
if not self.mw.deck.qconf['groups']:
on = None
else:
for gid in self.mw.deck.qconf['groups']:
on[gid] = True
def makeItems(grp): def makeItems(grp):
branch = QTreeWidgetItem() branch = QTreeWidgetItem()
branch.setText(0, grp[0]) branch.setFlags(
branch.setText(1, str(grp[2])) Qt.ItemIsUserCheckable|Qt.ItemIsEnabled|Qt.ItemIsSelectable|
branch.setText(2, str(grp[3])) Qt.ItemIsTristate)
branch.setText(3, str(grp[4])) if not on or on[gid]:
branch.setCheckState(1, Qt.Checked)
else:
branch.setCheckState(1, Qt.Unchecked)
branch.setText(COLNAME, grp[0])
branch.setText(COLCOUNT, str(grp[2]))
branch.setText(COLDUE, str(grp[3]))
branch.setText(COLNEW, str(grp[4]))
self._groupMap[grp[0]] = grp[1] self._groupMap[grp[0]] = grp[1]
if grp[5]: if grp[5]:
for c in grp[5]: for c in grp[5]:

View file

@ -16,8 +16,8 @@
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QTreeWidget" name="tree"> <widget class="QTreeWidget" name="tree">
<property name="selectionMode"> <property name="alternatingRowColors">
<enum>QAbstractItemView::MultiSelection</enum> <bool>true</bool>
</property> </property>
<attribute name="headerStretchLastSection"> <attribute name="headerStretchLastSection">
<bool>false</bool> <bool>false</bool>
@ -27,6 +27,11 @@
<string>Group</string> <string>Group</string>
</property> </property>
</column> </column>
<column>
<property name="text">
<string>On</string>
</property>
</column>
<column> <column>
<property name="text"> <property name="text">
<string>Cards</string> <string>Cards</string>
@ -42,11 +47,6 @@
<string>New</string> <string>New</string>
</property> </property>
</column> </column>
<column>
<property name="text">
<string>Actions</string>
</property>
</column>
</widget> </widget>
</item> </item>
<item> <item>
@ -55,7 +55,7 @@
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
</property> </property>
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> <set>QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
</property> </property>
</widget> </widget>
</item> </item>