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

workbench: add MQ as an optional task tab

In order to support an arbitrary number of optional tabs, I had to introduce
a named tab dictionary so workbench actions can manage tabs.

I removed the logic that added tabs on config changes, since extensions are
only loaded when repositories are first opened and are never unloaded. I also
removed the qqueue context menu option.

The MQ task tab uses the qreorder icon for moment.

Changeset eee78a5994c1

Parent 8b2a68af5191

by Steve Borho

Changes to 2 files · Browse files at eee78a5994c1 Showing diff from parent 8b2a68af5191 Diff from another changeset...

 
19
20
21
22
23
 
 
24
25
26
 
68
69
70
 
71
72
73
 
177
178
179
 
 
 
 
 
 
180
181
 
 
 
 
 
 
 
 
 
182
183
184
 
364
365
366
 
 
 
 
 
 
 
 
367
368
369
 
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
 
609
610
611
 
 
612
613
614
 
639
640
641
642
643
644
645
646
 
791
792
793
794
795
 
796
797
798
 
821
822
823
824
825
826
827
 
851
852
853
854
855
856
857
858
 
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
 
19
20
21
 
 
22
23
24
25
26
 
68
69
70
71
72
73
74
 
178
179
180
181
182
183
184
185
186
187
 
188
189
190
191
192
193
194
195
196
197
198
199
 
379
380
381
382
383
384
385
386
387
388
389
390
391
392
 
394
395
396
 
 
 
 
 
 
 
 
 
 
397
398
399
 
622
623
624
625
626
627
628
629
 
654
655
656
 
 
657
658
659
 
804
805
806
 
 
807
808
809
810
 
833
834
835
 
836
837
838
 
862
863
864
 
 
865
866
867
 
1118
1119
1120
 
 
 
 
 
 
 
1121
1122
1123
@@ -19,8 +19,8 @@
 from tortoisehg.hgqt.repomodel import HgRepoListModel  from tortoisehg.hgqt import cmdui, update, tag, backout, merge, visdiff  from tortoisehg.hgqt import archive, thgimport, thgstrip, run, purge, bookmark -from tortoisehg.hgqt import bisect, rebase, resolve, thgrepo, compress -from tortoisehg.hgqt import qdelete, qreorder, qrename, qfold, shelve, qqueue +from tortoisehg.hgqt import bisect, rebase, resolve, thgrepo, compress, mq +from tortoisehg.hgqt import qdelete, qreorder, qrename, qfold, shelve    from tortoisehg.hgqt.repofilter import RepoFilterBar  from tortoisehg.hgqt.repoview import HgRepoView @@ -68,6 +68,7 @@
  self.branch = ''   self.bundle = None   self.revset = set() + self.namedTabs = {}     if repo.parents()[0].rev() == -1:   self._reload_rev = 'tip' @@ -177,8 +178,22 @@
  self.syncTabIndex = idx = tt.addTab(w, geticon('view-refresh'), '')   tt.setTabToolTip(idx, _("Synchronize"))   + self.mqDemand = w = DemandWidget(self.createMQWidget) + if 'mq' in self.repo.extensions(): + self.mqTabIndex = idx = tt.addTab(w, geticon('reorder'), '') + tt.setTabToolTip(idx, _("Patch Queue")) + self.namedTabs['mq'] = idx +   self.pbranchDemand = w = DemandWidget(self.createPatchBranchWidget) - self.updatePatchBranchTab() + if 'pbranch' in self.repo.extensions(): + self.pbranchTabIndex = idx = tt.addTab(w, geticon('branch'), '') + tt.setTabToolTip(idx, _("Patch Branch")) + self.namedTabs['pbranch'] = idx + + def switchToNamedTaskTab(self, tabname): + if tabname in self.namedTabs: + idx = self.namedTabs[tabname] + self.taskTabsWidget.setCurrentIndex(idx)     def title(self):   """Returns the expected title for this widget [unicode]""" @@ -364,6 +379,14 @@
  gw.revisionSelected.connect(self.goto)   return gw   + def createMQWidget(self): + mqw = mq.MQWidget(self.repo, self) + mqw.output.connect(self.output) + mqw.progress.connect(self.progress) + mqw.makeLogVisible.connect(self.makeLogVisible) + mqw.showMessage.connect(self.showMessage) + return mqw +   def createPatchBranchWidget(self):   pbw = PatchBranchWidget(self.repo, parent=self)   pbw.output.connect(self.output) @@ -371,16 +394,6 @@
  pbw.makeLogVisible.connect(self.makeLogVisible)   return pbw   - def updatePatchBranchTab(self): - "Only show pbranch tab when pbranch extension is installed" - tt = self.taskTabsWidget - w = self.pbranchDemand - self.pbranchTabIndex = idx = tt.indexOf(w) - if 'pbranch' in self.repo.extensions(): - if idx == -1: - self.pbranchTabIndex = idx = tt.addTab(w, geticon('branch'), '') - tt.setTabToolTip(idx, _("Patch Branch")) -   def reponame(self):   return self.repo.shortname   @@ -609,6 +622,8 @@
  ttw = self.grepDemand.get()   elif tti == self.pbranchTabIndex:   ttw = self.pbranchDemand.get() + elif tti == self.mqTabIndex: + ttw = self.mqDemand.get()   if ttw:   ttw.reload()   @@ -639,8 +654,6 @@
  'Repository is reporting its config files have changed'   self.repomodel.invalidate()   self.revDetailsWidget.reload() - self.updatePatchBranchTab() - # TODO: emit only if actually changed   self.titleChanged.emit(self.title())   vis = self.repo.ui.configbool('tortoisehg', 'tasktabs')   self.taskTabsWidget.tabBar().setShown(vis) @@ -791,8 +804,7 @@
  (_('Rename patch'), self.qrenameRevision),   (_('Fold patches'), qfoldact),   (_('Delete patches'), qdeleteact), - (_('Reorder patches'), qreorderact), - (_('Manage patch queues'), self.qqueueManage)): + (_('Reorder patches'), qreorderact)):   act = QAction(name, self)   act.triggered.connect(cb)   acts.append(act) @@ -821,7 +833,6 @@
  qpar = lambda ap, up, qp, wd: qp   applied = lambda ap, up, qp, wd: ap   unapp = lambda ap, up, qp, wd: up - allctx = lambda ap, up, qp, wd: True     exs = self.repo.extensions()   menu = QMenu(self) @@ -851,8 +862,6 @@
  ('mq', patch, _('Goto patch'), None, self.qgotoRevision),   ('mq', patch, _('Rename patch'), None, self.qrenameRevision),   ('mq', fixed, _('Strip...'), None, self.stripRevision), - ('mq', allctx, _('Manage patch queues'), None, - self.qqueueManage),   ('reviewboard', fixed, _('Post to Review Board...'),   'reviewboard', self.sendToReviewBoard)):   if ext and ext not in exs: @@ -1109,13 +1118,6 @@
  dlg.makeLogVisible.connect(self.makeLogVisible)   dlg.exec_()   - def qqueueManage(self): - dlg = qqueue.QQueueDialog(self.repo, self) - dlg.finished.connect(dlg.deleteLater) - dlg.output.connect(self.output) - dlg.makeLogVisible.connect(self.makeLogVisible) - dlg.exec_() -   def runCommand(self, title, cmdline):   if self.runner:   InfoMsgBox(_('Unable to start'),
 
221
222
223
224
225
226
227
 
 
 
 
 
228
229
230
 
235
236
237
 
 
238
239
 
240
241
242
 
325
326
327
328
 
329
330
331
332
 
 
 
 
 
333
334
335
 
412
413
414
415
 
416
417
418
 
419
420
421
422
 
 
 
423
424
 
 
 
 
 
 
425
426
427
 
221
222
223
 
 
 
 
224
225
226
227
228
229
230
231
 
236
237
238
239
240
241
 
242
243
244
245
 
328
329
330
 
331
332
333
 
 
334
335
336
337
338
339
340
341
 
418
419
420
 
421
422
423
424
425
426
427
428
 
429
430
431
432
 
433
434
435
436
437
438
439
440
441
@@ -221,10 +221,11 @@
  newseparator(menu='view')     self.actionGroupTaskView = QActionGroup(self) - self.actionGroupTaskView.triggered.connect(self._switchRepoTaskTab) - def addtaskview(icon, label): - index = len(self.actionGroupTaskView.actions()) - a = newaction(label, icon=icon, checkable=True, data=index, + self.actionGroupTaskView.triggered.connect(self.onSwitchRepoTaskTab) + def addtaskview(icon, label, data=None): + if data is None: + data = len(self.actionGroupTaskView.actions()) + a = newaction(label, icon=icon, checkable=True, data=data,   enabled='repoopen', menu='view')   self.actionGroupTaskView.addAction(a)   self.tasktbar.addAction(a) @@ -235,8 +236,10 @@
  addtaskview('annotate', _("&Manifest..."))   addtaskview('repobrowse', _("&Search..."))   addtaskview('view-refresh', _("S&ynchronize...")) + self.actionSelectTaskMQ = \ + addtaskview('qreorder', _("Patch &Queue..."), 'mq')   self.actionSelectTaskPbranch = \ - addtaskview('branch', _("&Patch Branch...")) + addtaskview('branch', _("&Patch Branch..."), 'pbranch')   newseparator(menu='view')     newaction(_("&Refresh"), self._repofwd('reload'), icon='reload', @@ -325,11 +328,14 @@
  self.updateMenu()     @pyqtSlot(QAction) - def _switchRepoTaskTab(self, action): + def onSwitchRepoTaskTab(self, action):   rw = self.repoTabsWidget.currentWidget()   if not rw: return - index = action.data().toPyObject() - rw.taskTabsWidget.setCurrentIndex(index) + index, wasint = action.data().toInt() + if wasint: + rw.taskTabsWidget.setCurrentIndex(index) + else: + rw.switchToNamedTaskTab(str(action.data().toString()))     def openRepo(self, repopath):   """ Open repo by openRepoSignal from reporegistry """ @@ -412,16 +418,24 @@
      def updateTaskViewMenu(self, taskIndex=0): - # Fetch selected task tab from current repowidget and check corresponding action in menu + 'Update task tab menu for current repository'   if self.repoTabsWidget.count() == 0:   for a in self.actionGroupTaskView.actions():   a.setChecked(False) + self.actionSelectTaskMQ.setVisible(False)   self.actionSelectTaskPbranch.setVisible(False)   else:   repoWidget = self.repoTabsWidget.currentWidget() - self.actionSelectTaskPbranch.setVisible('pbranch' in repoWidget.repo.extensions()) + exts = repoWidget.repo.extensions() + self.actionSelectTaskMQ.setVisible('mq' in exts) + self.actionSelectTaskPbranch.setVisible('pbranch' in exts)   taskIndex = repoWidget.taskTabsWidget.currentIndex() - self.actionGroupTaskView.actions()[taskIndex].setChecked(True) + if taskIndex <= 4: # count of standard task tabs + self.actionGroupTaskView.actions()[taskIndex].setChecked(True) + elif taskIndex == repoWidget.namedTabs.get('mq', None): + self.actionSelectTaskMQ.setChecked(True) + elif taskIndex == repoWidget.namedTabs.get('pbranch', None): + self.actionSelectTaskPbranch.setChecked(True)     @pyqtSlot()   def updateHistoryActions(self):