src/eric7/Project/ProjectOthersBrowser.py

branch
eric7
changeset 9362
9daa438fb4de
parent 9221
bf71ee032bb4
child 9402
f5d9aa5c62db
equal deleted inserted replaced
9361:718bc86e1c3f 9362:9daa438fb4de
7 Module implementing a class used to display the parts of the project, that 7 Module implementing a class used to display the parts of the project, that
8 don't fit the other categories. 8 don't fit the other categories.
9 """ 9 """
10 10
11 import contextlib 11 import contextlib
12 import os
12 13
13 from PyQt6.QtCore import QModelIndex, pyqtSignal, QUrl 14 from PyQt6.QtCore import QModelIndex, pyqtSignal, QUrl
14 from PyQt6.QtGui import QDesktopServices 15 from PyQt6.QtGui import QDesktopServices
15 from PyQt6.QtWidgets import QDialog, QMenu 16 from PyQt6.QtWidgets import QDialog, QMenu
16 17
91 act = self.menu.addAction(self.tr("Remove from project"), self.__removeItem) 92 act = self.menu.addAction(self.tr("Remove from project"), self.__removeItem)
92 self.menuActions.append(act) 93 self.menuActions.append(act)
93 act = self.menu.addAction(self.tr("Delete"), self.__deleteItem) 94 act = self.menu.addAction(self.tr("Delete"), self.__deleteItem)
94 self.menuActions.append(act) 95 self.menuActions.append(act)
95 self.menu.addSeparator() 96 self.menu.addSeparator()
96 self.menu.addAction(self.tr("Add files..."), self.project.addOthersFiles) 97 self.menu.addAction(self.tr("Add files..."), self.__addOthersFiles)
97 self.menu.addAction(self.tr("Add directory..."), self.project.addOthersDir) 98 self.menu.addAction(self.tr("Add directory..."), self.__addOthersDirectory)
98 self.menu.addSeparator() 99 self.menu.addSeparator()
99 self.menu.addAction(self.tr("Refresh"), self.__refreshItem) 100 self.menu.addAction(self.tr("Refresh"), self.__refreshItem)
100 self.menu.addSeparator() 101 self.menu.addSeparator()
101 self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard) 102 self.menu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
102 self.menu.addSeparator() 103 self.menu.addSeparator()
103 self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs) 104 self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
104 self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs) 105 self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs)
105 self.menu.addSeparator() 106 self.menu.addSeparator()
106 self.menu.addAction(self.tr("Configure..."), self._configure) 107 self.menu.addAction(self.tr("Configure..."), self._configure)
108
109 self.dirMenu = QMenu(self)
110 self.removeDirAct = self.dirMenu.addAction(
111 self.tr("Remove from project"), self._removeDir
112 )
113 self.dirMenuActions.append(self.removeDirAct)
114 self.deleteDirAct = self.dirMenu.addAction(
115 self.tr("Delete"), self._deleteDirectory
116 )
117 self.dirMenuActions.append(self.deleteDirAct)
118 self.dirMenu.addSeparator()
119 self.dirMenu.addAction(self.tr("Add files..."), self.__addOthersFiles)
120 self.dirMenu.addAction(self.tr("Add directory..."), self.__addOthersDirectory)
121 self.dirMenu.addSeparator()
122 self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard)
123 self.dirMenu.addSeparator()
124 self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs)
125 self.dirMenu.addAction(
126 self.tr("Collapse all directories"), self._collapseAllDirs
127 )
128 self.dirMenu.addSeparator()
129 self.dirMenu.addAction(self.tr("Configure..."), self._configure)
107 130
108 self.backMenu = QMenu(self) 131 self.backMenu = QMenu(self)
109 self.backMenu.addAction(self.tr("Add files..."), self.project.addOthersFiles) 132 self.backMenu.addAction(self.tr("Add files..."), self.project.addOthersFiles)
110 self.backMenu.addAction(self.tr("Add directory..."), self.project.addOthersDir) 133 self.backMenu.addAction(self.tr("Add directory..."), self.project.addOthersDir)
111 self.backMenu.addSeparator() 134 self.backMenu.addSeparator()
132 self.multiMenu.addSeparator() 155 self.multiMenu.addSeparator()
133 self.multiMenu.addAction(self.tr("Configure..."), self._configure) 156 self.multiMenu.addAction(self.tr("Configure..."), self._configure)
134 157
135 self.menu.aboutToShow.connect(self.__showContextMenu) 158 self.menu.aboutToShow.connect(self.__showContextMenu)
136 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) 159 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti)
160 self.dirMenu.aboutToShow.connect(self.__showContextMenuDir)
137 self.backMenu.aboutToShow.connect(self.__showContextMenuBack) 161 self.backMenu.aboutToShow.connect(self.__showContextMenuBack)
138 self.mainMenu = self.menu 162 self.mainMenu = self.menu
139 163
140 def _contextMenuRequested(self, coord): 164 def _contextMenuRequested(self, coord):
141 """ 165 """
145 """ 169 """
146 if not self.project.isOpen(): 170 if not self.project.isOpen():
147 return 171 return
148 172
149 with contextlib.suppress(Exception): 173 with contextlib.suppress(Exception):
150 cnt = self.getSelectedItemsCount() 174 cnt = self.getSelectedItemsCount([
151 if cnt <= 1: 175 ProjectBrowserFileItem,
176 ProjectBrowserDirectoryItem,
177 ProjectBrowserSimpleDirectoryItem,
178 ])
179 if cnt < 1:
152 index = self.indexAt(coord) 180 index = self.indexAt(coord)
153 if index.isValid(): 181 if index.isValid():
154 self._selectSingleItem(index) 182 self._selectSingleItem(index)
155 cnt = self.getSelectedItemsCount() 183 cnt = self.getSelectedItemsCount([
184 ProjectBrowserFileItem,
185 ProjectBrowserDirectoryItem,
186 ProjectBrowserSimpleDirectoryItem,
187 ])
156 188
157 if cnt > 1: 189 if cnt > 1:
158 self.multiMenu.popup(self.mapToGlobal(coord)) 190 self.multiMenu.popup(self.mapToGlobal(coord))
159 else: 191 else:
160 index = self.indexAt(coord) 192 index = self.indexAt(coord)
164 self.editPixmapAct.setVisible(itm.isPixmapFile()) 196 self.editPixmapAct.setVisible(itm.isPixmapFile())
165 self.openInEditorAct.setVisible(itm.isSvgFile()) 197 self.openInEditorAct.setVisible(itm.isSvgFile())
166 self.mimeTypeAct.setVisible(True) 198 self.mimeTypeAct.setVisible(True)
167 self.menu.popup(self.mapToGlobal(coord)) 199 self.menu.popup(self.mapToGlobal(coord))
168 elif isinstance(itm, ProjectBrowserDirectoryItem): 200 elif isinstance(itm, ProjectBrowserDirectoryItem):
169 self.editPixmapAct.setVisible(False) 201 self.removeDirAct.setVisible(True)
170 self.mimeTypeAct.setVisible(False) 202 self.deleteDirAct.setVisible(True)
171 self.menu.popup(self.mapToGlobal(coord)) 203 self.dirMenu.popup(self.mapToGlobal(coord))
204 elif isinstance(itm, ProjectBrowserSimpleDirectoryItem):
205 self.removeDirAct.setVisible(False)
206 self.deleteDirAct.setVisible(False)
207 self.dirMenu.popup(self.mapToGlobal(coord))
172 else: 208 else:
173 self.backMenu.popup(self.mapToGlobal(coord)) 209 self.backMenu.popup(self.mapToGlobal(coord))
174 else: 210 else:
175 self.backMenu.popup(self.mapToGlobal(coord)) 211 self.backMenu.popup(self.mapToGlobal(coord))
176 212
187 Private slot called by the multiMenu aboutToShow signal. 223 Private slot called by the multiMenu aboutToShow signal.
188 """ 224 """
189 ProjectBaseBrowser._showContextMenuMulti(self, self.multiMenu) 225 ProjectBaseBrowser._showContextMenuMulti(self, self.multiMenu)
190 226
191 self.showMenu.emit("MainMulti", self.multiMenu) 227 self.showMenu.emit("MainMulti", self.multiMenu)
228
229 def __showContextMenuDir(self):
230 """
231 Private slot called by the dirMenu aboutToShow signal.
232 """
233 ProjectBaseBrowser._showContextMenuDir(self, self.dirMenu)
234
235 self.showMenu.emit("MainDir", self.dirMenu)
192 236
193 def __showContextMenuBack(self): 237 def __showContextMenuBack(self):
194 """ 238 """
195 Private slot called by the backMenu aboutToShow signal. 239 Private slot called by the backMenu aboutToShow signal.
196 """ 240 """
315 ) 359 )
316 if ok: 360 if ok:
317 textMimeTypesList.append(mimetype) 361 textMimeTypesList.append(mimetype)
318 Preferences.setUI("TextMimeTypes", textMimeTypesList) 362 Preferences.setUI("TextMimeTypes", textMimeTypesList)
319 363
364 def __addOthersFiles(self):
365 """
366 Private method to add files to the project.
367 """
368 itm = self.model().item(self.currentIndex())
369 if isinstance(itm, ProjectBrowserFileItem):
370 dn = os.path.dirname(itm.fileName())
371 elif isinstance(
372 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
373 ):
374 dn = itm.dirName()
375 else:
376 dn = None
377 self.project.addFiles("others", dn)
378
379 def __addOthersDirectory(self):
380 """
381 Private method to add files of a directory to the project.
382 """
383 itm = self.model().item(self.currentIndex())
384 if isinstance(ProjectBrowserFileItem):
385 dn = os.path.dirname(itm.fileName())
386 elif isinstance(
387 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
388 ):
389 dn = itm.dirName()
390 else:
391 dn = None
392 self.project.addDirectory("others", dn)
393
320 def __removeItem(self): 394 def __removeItem(self):
321 """ 395 """
322 Private slot to remove the selected entry from the OTHERS project 396 Private slot to remove the selected entry from the OTHERS project
323 data area. 397 data area.
324 """ 398 """

eric ide

mercurial