Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py

changeset 5520
2a97a4d58bc6
parent 5507
b940eafe6984
child 5522
e07d1df4c64a
equal deleted inserted replaced
5519:ab19452732df 5520:2a97a4d58bc6
14 except NameError: 14 except NameError:
15 pass 15 pass
16 16
17 import os 17 import os
18 18
19 from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer 19 from PyQt5.QtCore import pyqtSlot, Qt, QProcess, QTimer, QSize
20 from PyQt5.QtGui import QTextCursor 20 from PyQt5.QtGui import QTextCursor
21 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QMenu, QHeaderView, \ 21 from PyQt5.QtWidgets import QWidget, QDialogButtonBox, QMenu, QHeaderView, \
22 QTreeWidgetItem, QLineEdit 22 QTreeWidgetItem, QLineEdit
23 23
24 from E5Gui.E5Application import e5App 24 from E5Gui.E5Application import e5App
32 import Preferences 32 import Preferences
33 33
34 34
35 # TODO: convert action buttons to a tool button with menu and delete status 35 # TODO: convert action buttons to a tool button with menu and delete status
36 # list context menu (i.e. make it the action menu) 36 # list context menu (i.e. make it the action menu)
37 # TODO: save window geometry and splitter state
38 class HgStatusDialog(QWidget, Ui_HgStatusDialog): 37 class HgStatusDialog(QWidget, Ui_HgStatusDialog):
39 """ 38 """
40 Class implementing a dialog to show the output of the hg status command 39 Class implementing a dialog to show the output of the hg status command
41 process. 40 process.
42 """ 41 """
75 self.process = QProcess() 74 self.process = QProcess()
76 self.process.finished.connect(self.__procFinished) 75 self.process.finished.connect(self.__procFinished)
77 self.process.readyReadStandardOutput.connect(self.__readStdout) 76 self.process.readyReadStandardOutput.connect(self.__readStdout)
78 self.process.readyReadStandardError.connect(self.__readStderr) 77 self.process.readyReadStandardError.connect(self.__readStderr)
79 78
80 self.diffSplitter.setSizes([350, 350]) 79 self.diffSplitter.setSizes([300, 300])
81 self.__diffSplitterState = None
82 80
83 self.statusList.headerItem().setText(self.__lastColumn, "") 81 self.statusList.headerItem().setText(self.__lastColumn, "")
84 self.statusList.header().setSortIndicator( 82 self.statusList.header().setSortIndicator(
85 self.__pathColumn, Qt.AscendingOrder) 83 self.__pathColumn, Qt.AscendingOrder)
86 84
196 'R': self.tr('removed'), 194 'R': self.tr('removed'),
197 '?': self.tr('not tracked'), 195 '?': self.tr('not tracked'),
198 '!': self.tr('missing'), 196 '!': self.tr('missing'),
199 } 197 }
200 198
199 def closeEvent(self, e):
200 """
201 Protected slot implementing a close event handler.
202
203 @param e close event (QCloseEvent)
204 """
205 if self.__hgClient:
206 if self.__hgClient.isExecuting():
207 self.__hgClient.cancel()
208 else:
209 if self.process is not None and \
210 self.process.state() != QProcess.NotRunning:
211 self.process.terminate()
212 QTimer.singleShot(2000, self.process.kill)
213 self.process.waitForFinished(3000)
214
215 if self.__mq:
216 self.vcs.getPlugin().setPreferences(
217 "MqStatusDialogGeometry", self.saveGeometry())
218 self.vcs.getPlugin().setPreferences(
219 "MqStatusDialogSplitterState", self.diffSplitter.saveState())
220 else:
221 self.vcs.getPlugin().setPreferences(
222 "StatusDialogGeometry", self.saveGeometry())
223 self.vcs.getPlugin().setPreferences(
224 "StatusDialogSplitterState", self.diffSplitter.saveState())
225
226 e.accept()
227
228 def show(self):
229 """
230 Public slot to show the dialog.
231 """
232 super(HgStatusDialog, self).show()
233
234 if self.__mq:
235 geom = self.vcs.getPlugin().getPreferences(
236 "MqStatusDialogGeometry")
237 else:
238 geom = self.vcs.getPlugin().getPreferences(
239 "StatusDialogGeometry")
240 if geom.isEmpty():
241 s = QSize(800, 600)
242 self.resize(s)
243 else:
244 self.restoreGeometry(geom)
245
246 if self.__mq:
247 diffSplitterState = self.vcs.getPlugin().getPreferences(
248 "MqStatusDialogSplitterState")
249 else:
250 diffSplitterState = self.vcs.getPlugin().getPreferences(
251 "StatusDialogSplitterState")
252 if diffSplitterState is not None:
253 self.diffSplitter.restoreState(diffSplitterState)
254
201 def __activeExtensionsChanged(self): 255 def __activeExtensionsChanged(self):
202 """ 256 """
203 Private slot handling a change in the activated extensions. 257 Private slot handling a change in the activated extensions.
204 """ 258 """
205 if self.vcs.isExtensionActive("largefiles"): 259 if self.vcs.isExtensionActive("largefiles"):
206 if self.addButton.menu() is None: 260 if self.addButton.menu() is None:
207 self.addButton.setMenu(self.__addButtonMenu) 261 self.addButton.setMenu(self.__addButtonMenu)
208 else: 262 else:
209 if self.addButton.menu() is not None: 263 if self.addButton.menu() is not None:
210 self.addButton.setMenu(None) 264 self.addButton.setMenu(None)
211
212 def show(self):
213 """
214 Public slot to show the dialog.
215 """
216 super(HgStatusDialog, self).show()
217
218 if not self.__mq and self.__diffSplitterState:
219 self.diffSplitter.restoreState(self.__diffSplitterState)
220 265
221 def __resort(self): 266 def __resort(self):
222 """ 267 """
223 Private method to resort the tree. 268 Private method to resort the tree.
224 """ 269 """
257 itm.setFlags(itm.flags() & ~Qt.ItemIsUserCheckable) 302 itm.setFlags(itm.flags() & ~Qt.ItemIsUserCheckable)
258 303
259 if statusText not in self.__statusFilters: 304 if statusText not in self.__statusFilters:
260 self.__statusFilters.append(statusText) 305 self.__statusFilters.append(statusText)
261 306
262 def closeEvent(self, e):
263 """
264 Protected slot implementing a close event handler.
265
266 @param e close event (QCloseEvent)
267 """
268 if self.__hgClient:
269 if self.__hgClient.isExecuting():
270 self.__hgClient.cancel()
271 else:
272 if self.process is not None and \
273 self.process.state() != QProcess.NotRunning:
274 self.process.terminate()
275 QTimer.singleShot(2000, self.process.kill)
276 self.process.waitForFinished(3000)
277
278 if not self.__mq:
279 self.__diffSplitterState = self.diffSplitter.saveState()
280
281 e.accept()
282
283 def start(self, fn): 307 def start(self, fn):
284 """ 308 """
285 Public slot to start the hg status command. 309 Public slot to start the hg status command.
286 310
287 @param fn filename(s)/directoryname(s) to show the status of 311 @param fn filename(s)/directoryname(s) to show the status of

eric ide

mercurial