Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py

changeset 1053
c54aa980ea8e
child 1054
6365b1466615
equal deleted inserted replaced
1052:66f35ec09fb6 1053:c54aa980ea8e
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog used by the queue management functions.
8 """
9
10 from PyQt4.QtCore import pyqtSlot, QProcess
11 from PyQt4.QtGui import QDialog, QDialogButtonBox, QAbstractItemView, QListWidgetItem, \
12 QAbstractButton
13
14 from .Ui_HgQueuesQueueManagementDialog import Ui_HgQueuesQueueManagementDialog
15
16 import Preferences
17
18
19 class HgQueuesQueueManagementDialog(QDialog, Ui_HgQueuesQueueManagementDialog):
20 """
21 Class implementing a dialog used by the queue management functions.
22 """
23 NO_INPUT = 0
24 NAME_INPUT = 1
25 QUEUE_INPUT = 2
26
27 def __init__(self, mode, title, suppressActive, repodir, parent=None):
28 """
29 Constructor
30
31 @param mode mode of the dialog (HgQueuesQueueManagementDialog.NO_INPUT
32 HgQueuesQueueManagementDialog.NAME_INPUT,
33 HgQueuesQueueManagementDialog.QUEUE_INPUT)
34 @param title title for the dialog (string)
35 @param suppressActive flag indicating to not show the name of the active
36 queue (boolean)
37 @param repodir name of the repository directory (string)
38 @param parent reference to the parent widget (QWidget)
39 """
40 QDialog.__init__(self, parent)
41 self.setupUi(self)
42
43 if mode not in (HgQueuesQueueManagementDialog.NO_INPUT,
44 HgQueuesQueueManagementDialog.NAME_INPUT,
45 HgQueuesQueueManagementDialog.QUEUE_INPUT):
46 raise ValueError("illegal value for mode")
47
48 self.__mode = mode
49 self.__repodir = repodir
50 self.__suppressActive = suppressActive
51
52 self.inputFrame.setHidden(mode != HgQueuesQueueManagementDialog.NAME_INPUT)
53 self.selectLabel.setHidden(mode != HgQueuesQueueManagementDialog.QUEUE_INPUT)
54 if mode != HgQueuesQueueManagementDialog.QUEUE_INPUT:
55 self.queuesList.setSelectionMode(QAbstractItemView.NoSelection)
56
57 if mode == HgQueuesQueueManagementDialog.NO_INPUT:
58 self.buttonBox.removeButton(self.buttonBox.button(QDialogButtonBox.Ok))
59 self.buttonBox.removeButton(self.buttonBox.button(QDialogButtonBox.Cancel))
60 self.refreshButton = self.buttonBox.addButton(
61 self.trUtf8("Refresh"), QDialogButtonBox.ActionRole)
62 self.refreshButton.setToolTip(
63 self.trUtf8("Press to refresh the queues list"))
64 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
65 else:
66 self.buttonBox.removeButton(self.buttonBox.button(QDialogButtonBox.Close))
67 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
68 self.refreshButton = None
69
70 self.setWindowTitle(title)
71
72 self.refresh()
73
74 def __getQueuesList(self):
75 """
76 Public method to get a list of all queues and the name of the active queue.
77
78 @return tuple with a list of all queues and the name of the active queue
79 (list of strings, string)
80 """
81 queuesList = []
82 activeQueue = ""
83
84 ioEncoding = Preferences.getSystem("IOEncoding")
85 process = QProcess()
86 args = []
87 args.append("qqueue")
88 args.append("--list")
89
90 process.setWorkingDirectory(self.__repodir)
91 process.start('hg', args)
92 procStarted = process.waitForStarted()
93 if procStarted:
94 finished = process.waitForFinished(30000)
95 if finished and process.exitCode() == 0:
96 output = \
97 str(process.readAllStandardOutput(), ioEncoding, 'replace')
98 for queue in output.splitlines():
99 queue = queue.strip()
100 if queue.endswith("(active)"):
101 queue = queue.rsplit(None, 1)[0]
102 activeQueue = queue
103 queuesList.append(queue)
104
105 if self.__suppressActive:
106 if activeQueue in queuesList:
107 queuesList.remove(activeQueue)
108 activeQueue = ""
109 return queuesList, activeQueue
110
111 @pyqtSlot(str)
112 def on_nameEdit_textChanged(self, txt):
113 """
114 Private slot to handle changes of the entered queue name.
115 """
116 if self.__mode == HgQueuesQueueManagementDialog.NAME_INPUT:
117 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(txt != "")
118
119 @pyqtSlot()
120 def on_queuesList_itemSelectionChanged(self):
121 """
122 Private slot to handle changes of selected queue names.
123 """
124 if self.__mode == HgQueuesQueueManagementDialog.QUEUE_INPUT:
125 self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(
126 len(self.queuesList.selectedItems()) > 0)
127
128 @pyqtSlot(QAbstractButton)
129 def on_buttonBox_clicked(self, button):
130 """
131 Private slot called by a button of the button box clicked.
132
133 @param button button that was clicked (QAbstractButton)
134 """
135 if button == self.refreshButton:
136 self.refresh()
137 elif button == self.buttonBox.button(QDialogButtonBox.Close):
138 self.close()
139
140 def refresh(self):
141 """
142 Public slot to refresh the list of queues.
143 """
144 self.queuesList.clear()
145 queuesList, activeQueue = self.__getQueuesList()
146 for queue in sorted(queuesList):
147 itm = QListWidgetItem(queue, self.queuesList)
148 if queue == activeQueue:
149 font = itm.font()
150 font.setBold(True)
151 itm.setFont(font)
152
153 def getData(self):
154 """
155 Public slot to get the data.
156
157 @return queue name (string)
158 """
159 name = ""
160 if self.__mode == HgQueuesQueueManagementDialog.NAME_INPUT:
161 name = self.nameEdit.text()
162 elif self.__mode == HgQueuesQueueManagementDialog.QUEUE_INPUT:
163 selItems = self.queuesList.selectedItems()
164 if selItems:
165 name = selItems[0].text()
166 return name

eric ide

mercurial