eric7/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/HgQueuesQueueManagementDialog.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2011 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog used by the queue management functions.
8 """
9
10 from PyQt5.QtCore import pyqtSlot, Qt, QCoreApplication
11 from PyQt5.QtWidgets import (
12 QDialog, QDialogButtonBox, QAbstractItemView, QListWidgetItem,
13 QAbstractButton
14 )
15
16 from .Ui_HgQueuesQueueManagementDialog import Ui_HgQueuesQueueManagementDialog
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, vcs, 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
36 active queue (boolean)
37 @param vcs reference to the vcs object
38 @param parent reference to the parent widget (QWidget)
39 @exception ValueError raised to indicate an invalid dialog mode
40 """
41 super().__init__(parent)
42 self.setupUi(self)
43 self.setWindowFlags(Qt.WindowType.Window)
44
45 if mode not in (HgQueuesQueueManagementDialog.NO_INPUT,
46 HgQueuesQueueManagementDialog.NAME_INPUT,
47 HgQueuesQueueManagementDialog.QUEUE_INPUT):
48 raise ValueError("illegal value for mode")
49
50 self.__mode = mode
51 self.__suppressActive = suppressActive
52 self.__hgClient = vcs.getClient()
53 self.vcs = vcs
54
55 self.inputFrame.setHidden(
56 mode != HgQueuesQueueManagementDialog.NAME_INPUT)
57 self.selectLabel.setHidden(
58 mode != HgQueuesQueueManagementDialog.QUEUE_INPUT)
59 if mode != HgQueuesQueueManagementDialog.QUEUE_INPUT:
60 self.queuesList.setSelectionMode(
61 QAbstractItemView.SelectionMode.NoSelection)
62
63 if mode == HgQueuesQueueManagementDialog.NO_INPUT:
64 self.buttonBox.removeButton(
65 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok))
66 self.buttonBox.removeButton(
67 self.buttonBox.button(QDialogButtonBox.StandardButton.Cancel))
68 self.refreshButton = self.buttonBox.addButton(
69 self.tr("Refresh"), QDialogButtonBox.ButtonRole.ActionRole)
70 self.refreshButton.setToolTip(
71 self.tr("Press to refresh the queues list"))
72 self.buttonBox.button(
73 QDialogButtonBox.StandardButton.Close).setDefault(True)
74 else:
75 self.buttonBox.removeButton(
76 self.buttonBox.button(QDialogButtonBox.StandardButton.Close))
77 self.buttonBox.button(
78 QDialogButtonBox.StandardButton.Ok).setEnabled(False)
79 self.refreshButton = None
80
81 self.setWindowTitle(title)
82
83 self.show()
84 QCoreApplication.processEvents()
85
86 self.refresh()
87
88 def __getQueuesList(self):
89 """
90 Private method to get a list of all queues and the name of the active
91 queue.
92
93 @return tuple with a list of all queues and the name of the active
94 queue (list of strings, string)
95 """
96 queuesList = []
97 activeQueue = ""
98
99 args = self.vcs.initCommand("qqueue")
100 args.append("--list")
101
102 output = self.__hgClient.runcommand(args)[0]
103
104 for queue in output.splitlines():
105 queue = queue.strip()
106 if queue.endswith(")"):
107 queue = queue.rsplit(None, 1)[0]
108 activeQueue = queue
109 queuesList.append(queue)
110
111 if self.__suppressActive:
112 if activeQueue in queuesList:
113 queuesList.remove(activeQueue)
114 activeQueue = ""
115 return queuesList, activeQueue
116
117 @pyqtSlot(str)
118 def on_nameEdit_textChanged(self, txt):
119 """
120 Private slot to handle changes of the entered queue name.
121
122 @param txt text of the edit (string)
123 """
124 if self.__mode == HgQueuesQueueManagementDialog.NAME_INPUT:
125 self.buttonBox.button(
126 QDialogButtonBox.StandardButton.Ok).setEnabled(txt != "")
127
128 @pyqtSlot()
129 def on_queuesList_itemSelectionChanged(self):
130 """
131 Private slot to handle changes of selected queue names.
132 """
133 if self.__mode == HgQueuesQueueManagementDialog.QUEUE_INPUT:
134 self.buttonBox.button(
135 QDialogButtonBox.StandardButton.Ok).setEnabled(
136 len(self.queuesList.selectedItems()) > 0)
137
138 @pyqtSlot(QAbstractButton)
139 def on_buttonBox_clicked(self, button):
140 """
141 Private slot called by a button of the button box clicked.
142
143 @param button button that was clicked (QAbstractButton)
144 """
145 if button == self.refreshButton:
146 self.refresh()
147 elif button == self.buttonBox.button(
148 QDialogButtonBox.StandardButton.Close
149 ):
150 self.close()
151
152 def refresh(self):
153 """
154 Public slot to refresh the list of queues.
155 """
156 self.queuesList.clear()
157 queuesList, activeQueue = self.__getQueuesList()
158 for queue in sorted(queuesList):
159 itm = QListWidgetItem(queue, self.queuesList)
160 if queue == activeQueue:
161 font = itm.font()
162 font.setBold(True)
163 itm.setFont(font)
164
165 def getData(self):
166 """
167 Public slot to get the data.
168
169 @return queue name (string)
170 """
171 name = ""
172 if self.__mode == HgQueuesQueueManagementDialog.NAME_INPUT:
173 name = self.nameEdit.text().replace(" ", "_")
174 elif self.__mode == HgQueuesQueueManagementDialog.QUEUE_INPUT:
175 selItems = self.queuesList.selectedItems()
176 if selItems:
177 name = selItems[0].text()
178 return name

eric ide

mercurial