Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.9.3, 2.0, and 2.0.1

stable repofilter: refactor revision set toolbar and load/save routines

All successful queries are save by default, like commit messages. Keep the
stored queries in a combo box for perusal. Include some useful default queries
that replace hgtk filter bar buttons.

Hitting return with no text clears any existing revset filter.

Nits:

* a QComboBox does not auto-expand like a QLineEdit, so the layout is fixed
* still no way to delete stored queries

Changeset 61fac0ba05d3

Parent 53dbf4544208

by Steve Borho

Changes to 3 files · Browse files at 61fac0ba05d3 Showing diff from parent 53dbf4544208 Diff from another changeset...

 
12
13
14
 
 
15
16
17
18
19
 
 
20
21
22
 
36
37
38
39
 
40
41
42
43
 
 
 
 
 
 
 
 
 
44
45
46
47
 
 
 
 
 
 
 
 
 
48
49
50
51
52
53
54
55
56
57
 
 
 
 
 
58
59
60
 
 
 
 
 
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
83
84
85
86
 
87
88
89
 
 
90
91
92
 
94
95
96
 
 
97
98
99
100
101
102
103
104
105
 
 
 
 
 
 
 
 
106
107
 
 
 
 
 
 
 
 
 
 
 
108
109
110
 
12
13
14
15
16
17
18
19
 
 
20
21
22
23
24
 
38
39
40
 
41
42
43
 
 
44
45
46
47
48
49
50
51
52
53
 
 
 
54
55
56
57
58
59
60
61
62
63
 
 
 
 
 
 
 
 
 
64
65
66
67
68
69
 
 
70
71
72
73
74
75
76
 
77
78
79
 
 
 
 
 
 
80
81
82
 
90
91
92
 
93
94
 
 
95
96
97
98
99
 
101
102
103
104
105
106
107
108
109
110
 
 
 
 
111
112
113
114
115
116
117
118
119
 
120
121
122
123
124
125
126
127
128
129
130
131
132
133
@@ -12,11 +12,13 @@
 from tortoisehg.hgqt.i18n import _  from tortoisehg.hgqt import revset, qtlib   +_permanent_queries = ('head()', 'merge()', 'tagged()') +  class RepoFilterBar(QToolBar):   """Toolbar for RepoWidget to filter changesets"""   - revisionSet = pyqtSignal(object) - clearSet = pyqtSignal() + setRevisionSet = pyqtSignal(object) + clearRevisionSet = pyqtSignal()   filterToggled = pyqtSignal(bool)     showMessage = pyqtSignal(QString) @@ -36,40 +38,45 @@
  self.entrydlg = revset.RevisionSetQuery(repo, self)   self.entrydlg.progress.connect(self.progress)   self.entrydlg.showMessage.connect(self.showMessage) - self.entrydlg.queryIssued.connect(self.dialogQuery) + self.entrydlg.queryIssued.connect(self.queryIssued)   self.entrydlg.hide()   - self.clear = QPushButton(_('clear')) - self.addWidget(self.clear) + self.revsetcombo = combo = QComboBox() + combo.setEditable(True) + combo.setMinimumContentsLength(50) + le = combo.lineEdit() + le.returnPressed.connect(self.returnPressed) + if hasattr(le, 'setPlaceholderText'): # Qt >= 4.7 + le.setPlaceholderText('### revision set query ###') + self.addWidget(combo) + self.revsetle = le   - self.editor = QPushButton(_('editor')) - self.editor.clicked.connect(self.openEditor) - self.addWidget(self.editor) + icon = QIcon() + style = QApplication.style() + icon.addPixmap(style.standardPixmap(QStyle.SP_DialogDiscardButton)) + self.clearBtn = QToolButton(self) + self.clearBtn.setIcon(icon) + self.clearBtn.setToolTip(_('Discard or clear current query')) + self.clearBtn.clicked.connect(le.clear) + self.clearBtn.clicked.connect(self.clearRevisionSet) + self.addWidget(self.clearBtn)   - s = QSettings() - self.entrydlg.restoreGeometry(s.value('revset/geom').toByteArray()) - self.revsethist = list(s.value('revset-queries').toStringList()) - self.revsetle = le = QLineEdit() - le.setCompleter(QCompleter(self.revsethist, self)) - le.returnPressed.connect(self.returnPressed) - if hasattr(self.revsetle, 'setPlaceholderText'): # Qt >= 4.7 - self.revsetle.setPlaceholderText('### revision set query ###') - self.addWidget(le) + self.searchBtn = QToolButton(self) + self.searchBtn.setText(_('Search')) + self.searchBtn.setToolTip(_('Trigger search')) + self.searchBtn.clicked.connect(self.returnPressed) + self.addWidget(self.searchBtn)   - self.clear.clicked.connect(le.clear) - self.clear.clicked.connect(self.clearSet) + self.editorBtn = QToolButton() + self.editorBtn.setText('...') + self.editorBtn.setToolTip(_('Open advanced query editor')) + self.editorBtn.clicked.connect(self.openEditor) + self.addWidget(self.editorBtn)     self.filtercb = f = QCheckBox(_('filter')) - f.setChecked(s.value('revset-filter', True).toBool())   f.toggled.connect(self.filterToggled)   self.addWidget(f)   - self.store = store = QPushButton(_('store')) - store.clicked.connect(self.saveQuery) - le.textChanged.connect(lambda t: store.setEnabled(False)) - store.setEnabled(False) - self.addWidget(store) -   self._initbranchfilter()   self.refresh()   @@ -83,10 +90,10 @@
  self.entrydlg.entry.setFocus()   self.entrydlg.setShown(True)   - def dialogQuery(self, query, revset): + def queryIssued(self, query, revset):   self.revsetle.setText(query) - self.store.setEnabled(True) - self.revisionSet.emit(revset) + self.setRevisionSet.emit(revset) + self.saveQuery()     def returnPressed(self):   'Return pressed on revset line entry, forward to dialog' @@ -94,17 +101,33 @@
  if query:   self.entrydlg.entry.setText(query)   self.entrydlg.runQuery() + else: + self.clearRevisionSet.emit()     def saveQuery(self):   query = self.revsetle.text()   if query in self.revsethist:   self.revsethist.remove(query) - self.revsethist.insert(0, query) - self.revsetle.setCompleter(QCompleter(self.revsethist, self)) - self.store.setEnabled(False) - self.showMessage.emit(_('Revision set query saved')) + if query not in _permanent_queries: + self.revsethist.insert(0, query) + self.revsethist = self.revsethist[:20] + full = self.revsethist + list(_permanent_queries) + self.revsetcombo.clear() + self.revsetcombo.addItems(full) + #self.revsetle.setCompleter(QCompleter(full, self)) + self.revsetle.setText(query)   - def storeConfigs(self, s): + def loadSettings(self, s): + self.entrydlg.restoreGeometry(s.value('revset/geom').toByteArray()) + self.revsethist = list(s.value('revset-queries').toStringList()) + self.filtercb.setChecked(s.value('revset-filter', True).toBool()) + full = self.revsethist + list(_permanent_queries) + self.revsetcombo.clear() + self.revsetcombo.addItems(full) + self.revsetcombo.setCurrentIndex(-1) + #self.revsetle.setCompleter(QCompleter(full, self)) + + def saveSettings(self, s):   s.setValue('revset/geom', self.entrydlg.saveGeometry())   s.setValue('revset-queries', self.revsethist)   s.setValue('revset-filter', self.filtercb.isChecked())
 
81
82
83
84
 
85
86
87
 
116
117
118
119
120
 
 
121
122
123
 
339
340
341
342
 
343
344
345
 
681
682
683
684
685
 
686
687
688
689
690
691
692
693
694
 
 
695
696
697
698
699
700
701
 
 
 
 
 
 
 
 
 
 
702
703
704
705
706
 
707
708
709
710
711
 
 
 
 
712
713
714
 
715
716
717
 
81
82
83
 
84
85
86
87
 
116
117
118
 
 
119
120
121
122
123
 
339
340
341
 
342
343
344
345
 
681
682
683
 
 
684
685
686
 
 
 
 
 
 
 
687
688
689
690
691
692
 
 
 
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
 
 
 
 
710
711
712
713
714
715
 
716
717
718
719
@@ -81,7 +81,7 @@
    self.setupUi()   self.createActions() - self.restoreSettings() + self.loadSettings()   self.setupModels()     def setupUi(self): @@ -116,8 +116,8 @@
  self.filterbar.branchChanged.connect(self.setBranch)   self.filterbar.progress.connect(self.progress)   self.filterbar.showMessage.connect(self.showMessage) - self.filterbar.revisionSet.connect(self.setRevisionSet) - self.filterbar.clearSet.connect(self.clearSet) + self.filterbar.setRevisionSet.connect(self.setRevisionSet) + self.filterbar.clearRevisionSet.connect(self.clearRevisionSet)   self.filterbar.filterToggled.connect(self.filterToggled)   self.bar_splitter.addWidget(self.filterbar)   @@ -339,7 +339,7 @@
  self.clearBundle()   self.reload()   - def clearSet(self): + def clearRevisionSet(self):   self.revset = []   if self.revsetfilter:   self.reload() @@ -681,37 +681,39 @@
  def canGoForward(self):   return self.repoview.canGoForward()   - def storeSettings(self): - self.revDetailsWidget.storeSettings() + def loadSettings(self):   s = QSettings()   repoid = str(self.repo[0]) - s.setValue('repowidget/splitter-'+repoid, - self.repotabs_splitter.saveState()) - - def restoreSettings(self): - self.revDetailsWidget.restoreSettings() - s = QSettings() - repoid = str(self.repo[0]) + self.revDetailsWidget.loadSettings(s) + self.filterbar.loadSettings(s)   self.repotabs_splitter.restoreState(   s.value('repowidget/splitter-'+repoid).toByteArray())     def okToContinue(self): - return self.commitDemand.forward('canExit', default=True) and \ - self.syncDemand.forward('canExit', default=True) and \ - self.mqDemand.forward('canExit', default=True) + if not self.commitDemand.forward('canExit', default=True): + self.showMessage.emit(_('Commit tab cannot exit')) + return False + if not self.syncDemand.forward('canExit', default=True): + self.showMessage.emit(_('Sync tab cannot exit')) + return False + if not self.mqDemand.forward('canExit', default=True): + self.showMessage.emit(_('MQ tab cannot exit')) + return False + return True     def closeRepoWidget(self):   '''returns False if close should be aborted'''   if not self.okToContinue():   return False + s = QSettings()   if self.isVisible(): - # assuming here that there is at most one RepoWidget visible - self.storeSettings() - self.revDetailsWidget.storeSettings() - s = QSettings() + repoid = str(self.repo[0]) + s.setValue('repowidget/splitter-'+repoid, + self.repotabs_splitter.saveState()) + self.revDetailsWidget.saveSettings(s)   self.commitDemand.forward('saveSettings', s, 'workbench')   self.manifestDemand.forward('saveSettings', s, 'workbench') - self.filterbar.storeConfigs(s) + self.filterbar.saveSettings(s)   return True     def incoming(self):
 
45
46
47
48
49
50
51
 
223
224
225
226
227
 
228
229
230
231
232
233
234
235
 
236
237
238
 
45
46
47
 
48
49
50
 
222
223
224
 
 
225
226
227
228
229
230
231
 
 
232
233
234
235
@@ -45,7 +45,6 @@
  self.fileview.showMessage.connect(self.showMessage)   self.fileview.grepRequested.connect(self.grepRequested)   self.fileview.revisionSelected.connect(self.revisionSelected) - self.restoreSettings()     def setRepo(self, repo):   self.repo = repo @@ -223,16 +222,14 @@
  self.revision_selected(self._last_rev)   self.filelist.selectFile(f)   - def storeSettings(self): - s = QSettings() + def saveSettings(self, s):   wb = "RevDetailsWidget/"   for n in self.splitternames:   s.setValue(wb + n, getattr(self, n).saveState())   s.setValue(wb + 'revpanel.expanded', self.revpanel.is_expanded())   self.fileview.saveSettings(s, 'revpanel/fileview')   - def restoreSettings(self): - s = QSettings() + def loadSettings(self, s):   wb = "RevDetailsWidget/"   for n in self.splitternames:   getattr(self, n).restoreState(s.value(wb + n).toByteArray())