Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.9, 1.9.1, and 1.9.2

manifestdialog: implement status filter button

Changeset ac31dde70712

Parent a6f8f38f8f41

by Yuya Nishihara

Changes to 2 files · Browse files at ac31dde70712 Showing diff from parent a6f8f38f8f41 Diff from another changeset...

 
27
28
29
30
 
31
32
33
 
177
178
179
 
 
 
180
181
182
 
188
189
190
191
 
 
192
193
 
194
195
196
 
244
245
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
248
249
 
27
28
29
 
30
31
32
33
 
177
178
179
180
181
182
183
184
185
 
191
192
193
 
194
195
196
197
198
199
200
201
 
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
@@ -27,7 +27,7 @@
 from tortoisehg.util import paths, thgrepo  from tortoisehg.util.hglib import tounicode   -from tortoisehg.hgqt import qtlib, annotate +from tortoisehg.hgqt import qtlib, annotate, status  from tortoisehg.hgqt.i18n import _  from tortoisehg.hgqt.manifestmodel import ManifestModel  from tortoisehg.hgqt.lexers import get_lexer @@ -177,6 +177,9 @@
  lambda: self._fileselected(self._treeview.currentIndex()))     def _initactions(self): + self._statusfilter = _StatusFilterButton(text='MAC') + self._toolbar.addWidget(self._statusfilter) +   self._action_annotate_mode = QAction(_('Annotate'), self, checkable=True)   self._action_annotate_mode.toggled.connect(   lambda checked: self.setfileview(checked and 'annotate' or 'cat')) @@ -188,9 +191,11 @@
  return self._toolbar     def _setupmodel(self): - self._treemodel = ManifestModel(self._repo, self._rev) + self._treemodel = ManifestModel(self._repo, self._rev, + statusfilter=self._statusfilter.text)   self._treeview.setModel(self._treemodel)   self._treeview.selectionModel().currentChanged.connect(self._fileselected) + self._statusfilter.textChanged.connect(self._treemodel.setStatusFilter)     def reload(self):   # TODO @@ -244,6 +249,57 @@
  self._curfileview = self._filewidgets[mode]   self._contentview.setCurrentWidget(self._curfileview)   +# TODO: share this menu with status widget? +class _StatusFilterButton(QToolButton): + """Button with drop-down menu for status filter""" + textChanged = pyqtSignal(str) + + _TYPES = 'MARC' + + def __init__(self, text=_TYPES, parent=None): + super(_StatusFilterButton, self).__init__( + parent, popupMode=QToolButton.InstantPopup, + icon=qtlib.geticon('status'), + toolButtonStyle=Qt.ToolButtonTextBesideIcon) + + self._initactions(text=text) + self._setText(self.text) + + def _initactions(self, text): + self._actions = {} + menu = QMenu(self) + for c in self._TYPES: + st = status.statusTypes[c] + a = menu.addAction('%s %s' % (c, st.name)) + if st.icon: + a.setIcon(qtlib.geticon(st.icon.rstrip('.ico'))) # XXX + a.setCheckable(True) + a.setChecked(c in text) + a.toggled.connect(self._update) + self._actions[c] = a + self.setMenu(menu) + + @pyqtSlot() + def _update(self): + self._setText(self.text) + self.textChanged.emit(self.text) + + @property + def text(self): + """Return the text for status filter""" + return ''.join(c for c in self._TYPES + if self._actions[c].isChecked()) + + @pyqtSlot(str) + def setText(self, text): + """Set the status text""" + assert util.all(c in self._TYPES for c in text) + for c in self._TYPES: + self._actions[c].setChecked(c in text) + + def _setText(self, text): + super(_StatusFilterButton, self).setText(text) +    def run(ui, *pats, **opts):   repo = opts.get('repo') or thgrepo.repository(ui, paths.find_root())
 
26
27
28
29
 
30
31
32
33
34
 
 
 
35
36
37
 
26
27
28
 
29
30
31
32
33
 
34
35
36
37
38
39
@@ -26,12 +26,14 @@
  StatusRole = Qt.UserRole + 1   """Role for file change status"""   - def __init__(self, repo, rev, parent=None): + def __init__(self, repo, rev, statusfilter='MAC', parent=None):   QAbstractItemModel.__init__(self, parent)     self._repo = repo   self._rev = rev - self._statusfilter = 'MAC' + + assert util.all(c in 'MARC' for c in statusfilter) + self._statusfilter = statusfilter     def data(self, index, role=Qt.DisplayRole):   if not index.isValid():