src/eric7/Sessions/CrashedSessionsSelectionDialog.py

branch
eric7
changeset 11207
7193db06924d
parent 11206
9271719f43a7
equal deleted inserted replaced
11206:9271719f43a7 11207:7193db06924d
5 5
6 """ 6 """
7 Module implementing a dialog to show a list of existing crash session files. 7 Module implementing a dialog to show a list of existing crash session files.
8 """ 8 """
9 9
10 import contextlib
10 import json 11 import json
11 import os 12 import os
12 import time 13 import time
13 14
14 from PyQt6.QtCore import Qt, pyqtSlot 15 from PyQt6.QtCore import Qt, pyqtSlot
15 from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QListWidgetItem 16 from PyQt6.QtWidgets import (
17 QAbstractItemView,
18 QDialog,
19 QDialogButtonBox,
20 QListWidgetItem,
21 )
16 22
17 from eric7.EricWidgets import EricMessageBox 23 from eric7.EricWidgets import EricMessageBox
18 24
19 from .Ui_CrashedSessionsSelectionDialog import Ui_CrashedSessionsSelectionDialog 25 from .Ui_CrashedSessionsSelectionDialog import Ui_CrashedSessionsSelectionDialog
20 26
22 class CrashedSessionsSelectionDialog(QDialog, Ui_CrashedSessionsSelectionDialog): 28 class CrashedSessionsSelectionDialog(QDialog, Ui_CrashedSessionsSelectionDialog):
23 """ 29 """
24 Class implementing a dialog to show a list of existing crash session files. 30 Class implementing a dialog to show a list of existing crash session files.
25 """ 31 """
26 32
27 def __init__(self, sessionFiles, parent=None): 33 def __init__(self, sessionFiles, deleteMode=False, parent=None):
28 """ 34 """
29 Constructor 35 Constructor
30 36
31 @param sessionFiles list of crash session file names 37 @param sessionFiles list of crash session file names
32 @type list of str 38 @type list of str
39 @param deleteMode flag indicating the delete mode (defaults to False)
40 @type bool (optional)
33 @param parent reference to the parent widget (defaults to None) 41 @param parent reference to the parent widget (defaults to None)
34 @type QWidget (optional) 42 @type QWidget (optional)
35 """ 43 """
36 super().__init__(parent) 44 super().__init__(parent)
37 self.setupUi(self) 45 self.setupUi(self)
38 46
39 self.crashedSessionsList.itemDoubleClicked.connect(self.accept) 47 self.crashedSessionsList.itemDoubleClicked.connect(self.accept)
40 self.crashedSessionsList.itemActivated.connect(self.accept) 48 self.crashedSessionsList.itemActivated.connect(self.accept)
41 self.crashedSessionsList.itemSelectionChanged.connect(self.__updateOk) 49 self.crashedSessionsList.itemSelectionChanged.connect(self.__updateButtonStates)
42 50
43 for sessionFile in sessionFiles: 51 for sessionFile in sessionFiles:
44 self.__addSessionFileEntry(sessionFile) 52 self.__addSessionFileEntry(sessionFile)
45 53
46 self.__updateOk() 54 self.__deleteMode = deleteMode
55 if deleteMode:
56 self.setWindowTitle(self.tr("Clean Crash Sessions"))
57 self.messageLabel.setText(
58 self.tr(
59 "These crash session files were found. Select the ones to be"
60 " deleted."
61 )
62 )
63 self.crashedSessionsList.setSelectionMode(
64 QAbstractItemView.SelectionMode.ExtendedSelection
65 )
66 self.removeButton.hide()
67 else:
68 self.setWindowTitle(self.tr("Found Crash Sessions"))
69 self.messageLabel.setText(
70 self.tr(
71 "These crash session files were found. Select the one to open."
72 " Select 'Cancel' to not open a crash session."
73 )
74 )
75
76 self.__updateButtonStates()
47 77
48 @pyqtSlot() 78 @pyqtSlot()
49 def __updateOk(self): 79 def __updateButtonStates(self):
50 """ 80 """
51 Private method to update the enabled state of the OK button. 81 Private method to update the enabled state of the buttons.
52 """ 82 """
53 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( 83 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled(
54 bool(self.crashedSessionsList.selectedItems()) 84 bool(self.crashedSessionsList.selectedItems())
55 ) 85 )
86 self.removeButton.setEnabled(bool(self.crashedSessionsList.selectedItems()))
56 87
57 def __addSessionFileEntry(self, sessionFile): 88 def __addSessionFileEntry(self, sessionFile):
58 """ 89 """
59 Private method to read the given session file and add a list entry for it. 90 Private method to read the given session file and add a list entry for it.
60 91
88 "{0}\nTimestamp: {1}", "Crash Session, Timestamp" 119 "{0}\nTimestamp: {1}", "Crash Session, Timestamp"
89 ).format(sessionFile, timestamp) 120 ).format(sessionFile, timestamp)
90 itm = QListWidgetItem(labelText, self.crashedSessionsList) 121 itm = QListWidgetItem(labelText, self.crashedSessionsList)
91 itm.setData(Qt.ItemDataRole.UserRole, sessionFile) 122 itm.setData(Qt.ItemDataRole.UserRole, sessionFile)
92 123
124 @pyqtSlot()
125 def on_removeButton_clicked(self):
126 """
127 Private slot to remove the selected crash session files.
128 """
129 for itm in self.crashedSessionsList.selectedItems():
130 crashSession = itm.data(Qt.ItemDataRole.UserRole)
131 with contextlib.suppress(OSError):
132 os.remove(crashSession)
133 self.crashedSessionsList.takeItem(self.crashedSessionsList.row(itm))
134 del itm
135
93 def getSelectedCrashSession(self): 136 def getSelectedCrashSession(self):
94 """ 137 """
95 Public method to get the selected crash session file name. 138 Public method to get the selected crash session file name.
96 139
97 @return file name of the selected crash session 140 @return file name of the selected crash session
98 @rtype str 141 @rtype str
99 """ 142 """
100 # TODO: not implemented yet
101 selectedItems = self.crashedSessionsList.selectedItems() 143 selectedItems = self.crashedSessionsList.selectedItems()
102 144
103 if selectedItems: 145 if selectedItems:
104 return selectedItems[0].data(Qt.ItemDataRole.UserRole) 146 return selectedItems[0].data(Qt.ItemDataRole.UserRole)
105 else: 147 else:
106 return None 148 return None
149
150 def getSelectedCrashSessions(self):
151 """
152 Public method to get the selected crash session file names.
153
154 @return file names of the selected crash sessions
155 @rtype list of str
156 """
157 selectedItems = self.crashedSessionsList.selectedItems()
158
159 if selectedItems:
160 return [itm.data(Qt.ItemDataRole.UserRole) for itm in selectedItems]
161 else:
162 return []

eric ide

mercurial