12 |
12 |
13 from PyQt5.QtCore import QModelIndex, pyqtSignal, QUrl |
13 from PyQt5.QtCore import QModelIndex, pyqtSignal, QUrl |
14 from PyQt5.QtGui import QDesktopServices |
14 from PyQt5.QtGui import QDesktopServices |
15 from PyQt5.QtWidgets import QDialog, QMenu |
15 from PyQt5.QtWidgets import QDialog, QMenu |
16 |
16 |
|
17 from E5Gui import E5MessageBox |
|
18 |
17 from .ProjectBrowserModel import ProjectBrowserFileItem, \ |
19 from .ProjectBrowserModel import ProjectBrowserFileItem, \ |
18 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \ |
20 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \ |
19 ProjectBrowserOthersType |
21 ProjectBrowserOthersType |
20 from .ProjectBaseBrowser import ProjectBaseBrowser |
22 from .ProjectBaseBrowser import ProjectBaseBrowser |
21 |
23 |
22 import Utilities.MimeTypes |
24 import Utilities.MimeTypes |
|
25 import Preferences |
23 |
26 |
24 |
27 |
25 class ProjectOthersBrowser(ProjectBaseBrowser): |
28 class ProjectOthersBrowser(ProjectBaseBrowser): |
26 """ |
29 """ |
27 A class used to display the parts of the project, that don't fit the |
30 A class used to display the parts of the project, that don't fit the |
72 ProjectBaseBrowser._createPopupMenus(self) |
75 ProjectBaseBrowser._createPopupMenus(self) |
73 |
76 |
74 self.editPixmapAct = self.menu.addAction( |
77 self.editPixmapAct = self.menu.addAction( |
75 self.tr('Open in Icon Editor'), self._editPixmap) |
78 self.tr('Open in Icon Editor'), self._editPixmap) |
76 self.menu.addSeparator() |
79 self.menu.addSeparator() |
|
80 self.mimeTypeAct = self.menu.addAction( |
|
81 self.tr('Show Mime-Type'), self.__showMimeType) |
|
82 self.menu.addSeparator() |
77 self.renameFileAct = self.menu.addAction( |
83 self.renameFileAct = self.menu.addAction( |
78 self.tr('Rename file'), self._renameFile) |
84 self.tr('Rename file'), self._renameFile) |
79 self.menuActions.append(self.renameFileAct) |
85 self.menuActions.append(self.renameFileAct) |
80 act = self.menu.addAction( |
86 act = self.menu.addAction( |
81 self.tr('Remove from project'), self.__removeItem) |
87 self.tr('Remove from project'), self.__removeItem) |
157 index = self.indexAt(coord) |
163 index = self.indexAt(coord) |
158 if cnt == 1 and index.isValid(): |
164 if cnt == 1 and index.isValid(): |
159 itm = self.model().item(index) |
165 itm = self.model().item(index) |
160 if isinstance(itm, ProjectBrowserFileItem): |
166 if isinstance(itm, ProjectBrowserFileItem): |
161 self.editPixmapAct.setVisible(itm.isPixmapFile()) |
167 self.editPixmapAct.setVisible(itm.isPixmapFile()) |
|
168 self.mimeTypeAct.setVisible(True) |
162 self.menu.popup(self.mapToGlobal(coord)) |
169 self.menu.popup(self.mapToGlobal(coord)) |
163 elif isinstance(itm, ProjectBrowserDirectoryItem): |
170 elif isinstance(itm, ProjectBrowserDirectoryItem): |
164 self.editPixmapAct.setVisible(False) |
171 self.editPixmapAct.setVisible(False) |
|
172 self.mimeTypeAct.setVisible(False) |
165 self.menu.popup(self.mapToGlobal(coord)) |
173 self.menu.popup(self.mapToGlobal(coord)) |
166 else: |
174 else: |
167 self.backMenu.popup(self.mapToGlobal(coord)) |
175 self.backMenu.popup(self.mapToGlobal(coord)) |
168 else: |
176 else: |
169 self.backMenu.popup(self.mapToGlobal(coord)) |
177 self.backMenu.popup(self.mapToGlobal(coord)) |
239 else: |
247 else: |
240 if Utilities.MimeTypes.isTextFile(itm.fileName()): |
248 if Utilities.MimeTypes.isTextFile(itm.fileName()): |
241 self.sourceFile.emit(itm.fileName()) |
249 self.sourceFile.emit(itm.fileName()) |
242 else: |
250 else: |
243 QDesktopServices.openUrl(QUrl(itm.fileName())) |
251 QDesktopServices.openUrl(QUrl(itm.fileName())) |
|
252 |
|
253 def __showMimeType(self): |
|
254 """ |
|
255 Private slot to show the mime type of the selected entry. |
|
256 """ |
|
257 itmList = self.getSelectedItems() |
|
258 if itmList: |
|
259 mimetype = Utilities.MimeTypes.mimeType(itmList[0].fileName()) |
|
260 if mimetype is None: |
|
261 E5MessageBox.warning( |
|
262 self, |
|
263 self.tr("Show Mime-Type"), |
|
264 self.tr("""The mime type of the file could not be""" |
|
265 """ determined.""")) |
|
266 elif mimetype.split("/")[0] == "text": |
|
267 E5MessageBox.information( |
|
268 self, |
|
269 self.tr("Show Mime-Type"), |
|
270 self.tr("""The file has the mime type <b>{0}</b>.""") |
|
271 .format(mimetype)) |
|
272 else: |
|
273 textMimeTypesList = Preferences.getUI("TextMimeTypes") |
|
274 if mimetype in textMimeTypesList: |
|
275 E5MessageBox.information( |
|
276 self, |
|
277 self.tr("Show Mime-Type"), |
|
278 self.tr("""The file has the mime type <b>{0}</b>.""") |
|
279 .format(mimetype)) |
|
280 else: |
|
281 ok = E5MessageBox.yesNo( |
|
282 self, |
|
283 self.tr("Show Mime-Type"), |
|
284 self.tr("""The file has the mime type <b>{0}</b>.""" |
|
285 """<br/> Shall it be added to the list of""" |
|
286 """ text mime types?""").format(mimetype)) |
|
287 if ok: |
|
288 textMimeTypesList.append(mimetype) |
|
289 Preferences.setUI("TextMimeTypes", textMimeTypesList) |
244 |
290 |
245 def __removeItem(self): |
291 def __removeItem(self): |
246 """ |
292 """ |
247 Private slot to remove the selected entry from the OTHERS project |
293 Private slot to remove the selected entry from the OTHERS project |
248 data area. |
294 data area. |