Project/ProjectInterfacesBrowser.py

changeset 2995
63d874899b8b
parent 2771
281c9b30dd91
child 3020
542e97d4ecb3
child 3057
10516539f238
equal deleted inserted replaced
2994:5ae1349b8fb4 2995:63d874899b8b
2 2
3 # Copyright (c) 2002 - 2013 Detlev Offenbach <detlev@die-offenbachs.de> 3 # Copyright (c) 2002 - 2013 Detlev Offenbach <detlev@die-offenbachs.de>
4 # 4 #
5 5
6 """ 6 """
7 Module implementing the a class used to display the interfaces (IDL) part of the project. 7 Module implementing the a class used to display the interfaces (IDL) part
8 of the project.
8 """ 9 """
9 10
10 import os 11 import os
11 import glob 12 import glob
12 13
19 from .ProjectBrowserModel import ProjectBrowserFileItem, \ 20 from .ProjectBrowserModel import ProjectBrowserFileItem, \
20 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \ 21 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \
21 ProjectBrowserInterfaceType 22 ProjectBrowserInterfaceType
22 from .ProjectBaseBrowser import ProjectBaseBrowser 23 from .ProjectBaseBrowser import ProjectBaseBrowser
23 24
24 from UI.BrowserModel import BrowserFileItem, BrowserClassItem, BrowserMethodItem, \ 25 from UI.BrowserModel import BrowserFileItem, BrowserClassItem, \
25 BrowserClassAttributeItem 26 BrowserMethodItem, BrowserClassAttributeItem
26 import UI.PixmapCache 27 import UI.PixmapCache
27 28
28 import Preferences 29 import Preferences
29 import Utilities 30 import Utilities
30 31
32 class ProjectInterfacesBrowser(ProjectBaseBrowser): 33 class ProjectInterfacesBrowser(ProjectBaseBrowser):
33 """ 34 """
34 A class used to display the interfaces (IDL) part of the project. 35 A class used to display the interfaces (IDL) part of the project.
35 36
36 @signal sourceFile(str, int = 0) emitted to open a file 37 @signal sourceFile(str, int = 0) emitted to open a file
37 @signal closeSourceWindow(str) emitted after a file has been removed/deleted 38 @signal closeSourceWindow(str) emitted after a file has been
38 from the project 39 removed/deleted from the project
39 @signal appendStdout(str) emitted after something was received from 40 @signal appendStdout(str) emitted after something was received from
40 a QProcess on stdout 41 a QProcess on stdout
41 @signal appendStderr(str) emitted after something was received from 42 @signal appendStderr(str) emitted after something was received from
42 a QProcess on stderr 43 a QProcess on stderr
43 @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The name 44 @signal showMenu(str, QMenu) emitted when a menu is about to be shown.
44 of the menu and a reference to the menu are given. 45 The name of the menu and a reference to the menu are given.
45 """ 46 """
46 appendStdout = pyqtSignal(str) 47 appendStdout = pyqtSignal(str)
47 appendStderr = pyqtSignal(str) 48 appendStderr = pyqtSignal(str)
48 showMenu = pyqtSignal(str, QMenu) 49 showMenu = pyqtSignal(str, QMenu)
49 50
54 @param project reference to the project object 55 @param project reference to the project object
55 @param parent parent widget of this browser (QWidget) 56 @param parent parent widget of this browser (QWidget)
56 """ 57 """
57 self.omniidl = Preferences.getCorba("omniidl") 58 self.omniidl = Preferences.getCorba("omniidl")
58 if self.omniidl == "": 59 if self.omniidl == "":
59 self.omniidl = Utilities.isWindowsPlatform() and "omniidl.exe" or "omniidl" 60 self.omniidl = Utilities.isWindowsPlatform() and \
61 "omniidl.exe" or "omniidl"
60 if not Utilities.isinpath(self.omniidl): 62 if not Utilities.isinpath(self.omniidl):
61 self.omniidl = None 63 self.omniidl = None
62 64
63 ProjectBaseBrowser.__init__(self, project, ProjectBrowserInterfaceType, parent) 65 ProjectBaseBrowser.__init__(self, project,
66 ProjectBrowserInterfaceType, parent)
64 67
65 self.selectedItemsFilter = \ 68 self.selectedItemsFilter = \
66 [ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem] 69 [ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem]
67 70
68 self.setWindowTitle(self.trUtf8('Interfaces (IDL)')) 71 self.setWindowTitle(self.trUtf8('Interfaces (IDL)'))
69 72
70 self.setWhatsThis(self.trUtf8( 73 self.setWhatsThis(self.trUtf8(
71 """<b>Project Interfaces Browser</b>""" 74 """<b>Project Interfaces Browser</b>"""
72 """<p>This allows to easily see all interfaces (CORBA IDL files)""" 75 """<p>This allows to easily see all interfaces (CORBA IDL files)"""
73 """ contained in the current project. Several actions can be executed""" 76 """ contained in the current project. Several actions can be"""
74 """ via the context menu.</p>""" 77 """ executed via the context menu.</p>"""
75 )) 78 ))
76 79
77 project.prepareRepopulateItem.connect(self._prepareRepopulateItem) 80 project.prepareRepopulateItem.connect(self._prepareRepopulateItem)
78 project.completeRepopulateItem.connect(self._completeRepopulateItem) 81 project.completeRepopulateItem.connect(self._completeRepopulateItem)
79 82
92 self.__compileInterface) 95 self.__compileInterface)
93 self.sourceMenu.addAction(self.trUtf8('Compile all interfaces'), 96 self.sourceMenu.addAction(self.trUtf8('Compile all interfaces'),
94 self.__compileAllInterfaces) 97 self.__compileAllInterfaces)
95 self.sourceMenu.addAction(self.trUtf8('Open'), self._openItem) 98 self.sourceMenu.addAction(self.trUtf8('Open'), self._openItem)
96 self.sourceMenu.addSeparator() 99 self.sourceMenu.addSeparator()
97 act = self.sourceMenu.addAction(self.trUtf8('Rename file'), self._renameFile) 100 act = self.sourceMenu.addAction(
101 self.trUtf8('Rename file'), self._renameFile)
98 self.menuActions.append(act) 102 self.menuActions.append(act)
99 act = self.sourceMenu.addAction(self.trUtf8('Remove from project'), 103 act = self.sourceMenu.addAction(self.trUtf8('Remove from project'),
100 self._removeFile) 104 self._removeFile)
101 self.menuActions.append(act) 105 self.menuActions.append(act)
102 act = self.sourceMenu.addAction(self.trUtf8('Delete'), self.__deleteFile) 106 act = self.sourceMenu.addAction(
107 self.trUtf8('Delete'), self.__deleteFile)
103 self.menuActions.append(act) 108 self.menuActions.append(act)
104 self.sourceMenu.addSeparator() 109 self.sourceMenu.addSeparator()
105 self.sourceMenu.addAction(self.trUtf8('Add interfaces...'), 110 self.sourceMenu.addAction(self.trUtf8('Add interfaces...'),
106 self.__addInterfaceFiles) 111 self.__addInterfaceFiles)
107 self.sourceMenu.addAction(self.trUtf8('Add interfaces directory...'), 112 self.sourceMenu.addAction(self.trUtf8('Add interfaces directory...'),
114 self._expandAllDirs) 119 self._expandAllDirs)
115 self.sourceMenu.addAction(self.trUtf8('Collapse all directories'), 120 self.sourceMenu.addAction(self.trUtf8('Collapse all directories'),
116 self._collapseAllDirs) 121 self._collapseAllDirs)
117 self.sourceMenu.addSeparator() 122 self.sourceMenu.addSeparator()
118 self.sourceMenu.addAction(self.trUtf8('Configure...'), self._configure) 123 self.sourceMenu.addAction(self.trUtf8('Configure...'), self._configure)
119 self.sourceMenu.addAction(self.trUtf8('Configure CORBA...'), self.__configureCorba) 124 self.sourceMenu.addAction(
125 self.trUtf8('Configure CORBA...'), self.__configureCorba)
120 126
121 self.menu = QMenu(self) 127 self.menu = QMenu(self)
122 if self.omniidl is not None: 128 if self.omniidl is not None:
123 self.menu.addAction(self.trUtf8('Compile interface'), self.__compileInterface) 129 self.menu.addAction(
130 self.trUtf8('Compile interface'), self.__compileInterface)
124 self.menu.addAction(self.trUtf8('Compile all interfaces'), 131 self.menu.addAction(self.trUtf8('Compile all interfaces'),
125 self.__compileAllInterfaces) 132 self.__compileAllInterfaces)
126 self.menu.addAction(self.trUtf8('Open'), self._openItem) 133 self.menu.addAction(self.trUtf8('Open'), self._openItem)
127 self.menu.addSeparator() 134 self.menu.addSeparator()
128 self.menu.addAction(self.trUtf8('Add interfaces...'), self.__addInterfaceFiles) 135 self.menu.addAction(
136 self.trUtf8('Add interfaces...'), self.__addInterfaceFiles)
129 self.menu.addAction(self.trUtf8('Add interfaces directory...'), 137 self.menu.addAction(self.trUtf8('Add interfaces directory...'),
130 self.__addInterfacesDirectory) 138 self.__addInterfacesDirectory)
131 self.menu.addSeparator() 139 self.menu.addSeparator()
132 self.menu.addAction(self.trUtf8('Expand all directories'), 140 self.menu.addAction(self.trUtf8('Expand all directories'),
133 self._expandAllDirs) 141 self._expandAllDirs)
134 self.menu.addAction(self.trUtf8('Collapse all directories'), 142 self.menu.addAction(self.trUtf8('Collapse all directories'),
135 self._collapseAllDirs) 143 self._collapseAllDirs)
136 self.menu.addSeparator() 144 self.menu.addSeparator()
137 self.menu.addAction(self.trUtf8('Configure...'), self._configure) 145 self.menu.addAction(self.trUtf8('Configure...'), self._configure)
138 self.menu.addAction(self.trUtf8('Configure CORBA...'), self.__configureCorba) 146 self.menu.addAction(
147 self.trUtf8('Configure CORBA...'), self.__configureCorba)
139 148
140 self.backMenu = QMenu(self) 149 self.backMenu = QMenu(self)
141 if self.omniidl is not None: 150 if self.omniidl is not None:
142 self.backMenu.addAction(self.trUtf8('Compile all interfaces'), 151 self.backMenu.addAction(self.trUtf8('Compile all interfaces'),
143 self.__compileAllInterfaces) 152 self.__compileAllInterfaces)
151 self._expandAllDirs) 160 self._expandAllDirs)
152 self.backMenu.addAction(self.trUtf8('Collapse all directories'), 161 self.backMenu.addAction(self.trUtf8('Collapse all directories'),
153 self._collapseAllDirs) 162 self._collapseAllDirs)
154 self.backMenu.addSeparator() 163 self.backMenu.addSeparator()
155 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure) 164 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure)
156 self.backMenu.addAction(self.trUtf8('Configure CORBA...'), self.__configureCorba) 165 self.backMenu.addAction(
166 self.trUtf8('Configure CORBA...'), self.__configureCorba)
157 self.backMenu.setEnabled(False) 167 self.backMenu.setEnabled(False)
158 168
159 # create the menu for multiple selected files 169 # create the menu for multiple selected files
160 self.multiMenu = QMenu(self) 170 self.multiMenu = QMenu(self)
161 if self.omniidl is not None: 171 if self.omniidl is not None:
164 self.multiMenu.addAction(self.trUtf8('Open'), self._openItem) 174 self.multiMenu.addAction(self.trUtf8('Open'), self._openItem)
165 self.multiMenu.addSeparator() 175 self.multiMenu.addSeparator()
166 act = self.multiMenu.addAction(self.trUtf8('Remove from project'), 176 act = self.multiMenu.addAction(self.trUtf8('Remove from project'),
167 self._removeFile) 177 self._removeFile)
168 self.multiMenuActions.append(act) 178 self.multiMenuActions.append(act)
169 act = self.multiMenu.addAction(self.trUtf8('Delete'), self.__deleteFile) 179 act = self.multiMenu.addAction(
180 self.trUtf8('Delete'), self.__deleteFile)
170 self.multiMenuActions.append(act) 181 self.multiMenuActions.append(act)
171 self.multiMenu.addSeparator() 182 self.multiMenu.addSeparator()
172 self.multiMenu.addAction(self.trUtf8('Expand all directories'), 183 self.multiMenu.addAction(self.trUtf8('Expand all directories'),
173 self._expandAllDirs) 184 self._expandAllDirs)
174 self.multiMenu.addAction(self.trUtf8('Collapse all directories'), 185 self.multiMenu.addAction(self.trUtf8('Collapse all directories'),
175 self._collapseAllDirs) 186 self._collapseAllDirs)
176 self.multiMenu.addSeparator() 187 self.multiMenu.addSeparator()
177 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure) 188 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure)
178 self.multiMenu.addAction(self.trUtf8('Configure CORBA...'), self.__configureCorba) 189 self.multiMenu.addAction(
190 self.trUtf8('Configure CORBA...'), self.__configureCorba)
179 191
180 self.dirMenu = QMenu(self) 192 self.dirMenu = QMenu(self)
181 if self.omniidl is not None: 193 if self.omniidl is not None:
182 self.dirMenu.addAction(self.trUtf8('Compile all interfaces'), 194 self.dirMenu.addAction(self.trUtf8('Compile all interfaces'),
183 self.__compileAllInterfaces) 195 self.__compileAllInterfaces)
184 self.dirMenu.addSeparator() 196 self.dirMenu.addSeparator()
185 act = self.dirMenu.addAction(self.trUtf8('Remove from project'), self._removeFile) 197 act = self.dirMenu.addAction(
198 self.trUtf8('Remove from project'), self._removeFile)
186 self.dirMenuActions.append(act) 199 self.dirMenuActions.append(act)
187 act = self.dirMenu.addAction(self.trUtf8('Delete'), self._deleteDirectory) 200 act = self.dirMenu.addAction(
201 self.trUtf8('Delete'), self._deleteDirectory)
188 self.dirMenuActions.append(act) 202 self.dirMenuActions.append(act)
189 self.dirMenu.addSeparator() 203 self.dirMenu.addSeparator()
190 self.dirMenu.addAction(self.trUtf8('Add interfaces...'), self.__addInterfaceFiles) 204 self.dirMenu.addAction(
205 self.trUtf8('Add interfaces...'), self.__addInterfaceFiles)
191 self.dirMenu.addAction(self.trUtf8('Add interfaces directory...'), 206 self.dirMenu.addAction(self.trUtf8('Add interfaces directory...'),
192 self.__addInterfacesDirectory) 207 self.__addInterfacesDirectory)
193 self.dirMenu.addSeparator() 208 self.dirMenu.addSeparator()
194 self.dirMenu.addAction(self.trUtf8('Copy Path to Clipboard'), 209 self.dirMenu.addAction(self.trUtf8('Copy Path to Clipboard'),
195 self._copyToClipboard) 210 self._copyToClipboard)
198 self._expandAllDirs) 213 self._expandAllDirs)
199 self.dirMenu.addAction(self.trUtf8('Collapse all directories'), 214 self.dirMenu.addAction(self.trUtf8('Collapse all directories'),
200 self._collapseAllDirs) 215 self._collapseAllDirs)
201 self.dirMenu.addSeparator() 216 self.dirMenu.addSeparator()
202 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure) 217 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure)
203 self.dirMenu.addAction(self.trUtf8('Configure CORBA...'), self.__configureCorba) 218 self.dirMenu.addAction(
219 self.trUtf8('Configure CORBA...'), self.__configureCorba)
204 220
205 self.dirMultiMenu = QMenu(self) 221 self.dirMultiMenu = QMenu(self)
206 if self.omniidl is not None: 222 if self.omniidl is not None:
207 self.dirMultiMenu.addAction(self.trUtf8('Compile all interfaces'), 223 self.dirMultiMenu.addAction(self.trUtf8('Compile all interfaces'),
208 self.__compileAllInterfaces) 224 self.__compileAllInterfaces)
215 self.dirMultiMenu.addAction(self.trUtf8('Expand all directories'), 231 self.dirMultiMenu.addAction(self.trUtf8('Expand all directories'),
216 self._expandAllDirs) 232 self._expandAllDirs)
217 self.dirMultiMenu.addAction(self.trUtf8('Collapse all directories'), 233 self.dirMultiMenu.addAction(self.trUtf8('Collapse all directories'),
218 self._collapseAllDirs) 234 self._collapseAllDirs)
219 self.dirMultiMenu.addSeparator() 235 self.dirMultiMenu.addSeparator()
220 self.dirMultiMenu.addAction(self.trUtf8('Configure...'), self._configure) 236 self.dirMultiMenu.addAction(
237 self.trUtf8('Configure...'), self._configure)
221 self.dirMultiMenu.addAction(self.trUtf8('Configure CORBA...'), 238 self.dirMultiMenu.addAction(self.trUtf8('Configure CORBA...'),
222 self.__configureCorba) 239 self.__configureCorba)
223 240
224 self.sourceMenu.aboutToShow.connect(self.__showContextMenu) 241 self.sourceMenu.aboutToShow.connect(self.__showContextMenu)
225 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) 242 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti)
385 fn2 = itm.fileName() 402 fn2 = itm.fileName()
386 fullNames.append(fn2) 403 fullNames.append(fn2)
387 fn = self.project.getRelativePath(fn2) 404 fn = self.project.getRelativePath(fn2)
388 files.append(fn) 405 files.append(fn)
389 406
390 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog 407 from UI.DeleteFilesConfirmationDialog import \
408 DeleteFilesConfirmationDialog
391 dlg = DeleteFilesConfirmationDialog(self.parent(), 409 dlg = DeleteFilesConfirmationDialog(self.parent(),
392 self.trUtf8("Delete interfaces"), 410 self.trUtf8("Delete interfaces"),
393 self.trUtf8("Do you really want to delete these interfaces from" 411 self.trUtf8("Do you really want to delete these interfaces from"
394 " the project?"), 412 " the project?"),
395 files) 413 files)
397 if dlg.exec_() == QDialog.Accepted: 415 if dlg.exec_() == QDialog.Accepted:
398 for fn2, fn in zip(fullNames, files): 416 for fn2, fn in zip(fullNames, files):
399 self.closeSourceWindow.emit(fn2) 417 self.closeSourceWindow.emit(fn2)
400 self.project.deleteFile(fn) 418 self.project.deleteFile(fn)
401 419
402 ############################################################################ 420 ###########################################################################
403 ## Methods to handle the various compile commands 421 ## Methods to handle the various compile commands
404 ############################################################################ 422 ###########################################################################
405 423
406 def __readStdout(self): 424 def __readStdout(self):
407 """ 425 """
408 Private slot to handle the readyReadStandardOutput signal of the omniidl process. 426 Private slot to handle the readyReadStandardOutput signal of the
427 omniidl process.
409 """ 428 """
410 if self.compileProc is None: 429 if self.compileProc is None:
411 return 430 return
412 431
413 ioEncoding = Preferences.getSystem("IOEncoding") 432 ioEncoding = Preferences.getSystem("IOEncoding")
419 s += output 438 s += output
420 self.appendStdout.emit(s) 439 self.appendStdout.emit(s)
421 440
422 def __readStderr(self): 441 def __readStderr(self):
423 """ 442 """
424 Private slot to handle the readyReadStandardError signal of the omniidl process. 443 Private slot to handle the readyReadStandardError signal of the
444 omniidl process.
425 """ 445 """
426 if self.compileProc is None: 446 if self.compileProc is None:
427 return 447 return
428 448
429 ioEncoding = Preferences.getSystem("IOEncoding") 449 ioEncoding = Preferences.getSystem("IOEncoding")
454 for file in fileList: 474 for file in fileList:
455 self.project.appendFile(file) 475 self.project.appendFile(file)
456 if not self.noDialog and not ui.notificationsEnabled(): 476 if not self.noDialog and not ui.notificationsEnabled():
457 E5MessageBox.information(self, 477 E5MessageBox.information(self,
458 self.trUtf8("Interface Compilation"), 478 self.trUtf8("Interface Compilation"),
459 self.trUtf8("The compilation of the interface file was successful.")) 479 self.trUtf8(
480 "The compilation of the interface file was"
481 " successful."))
460 else: 482 else:
461 ui.showNotification(UI.PixmapCache.getPixmap("corba48.png"), 483 ui.showNotification(UI.PixmapCache.getPixmap("corba48.png"),
462 self.trUtf8("Interface Compilation"), 484 self.trUtf8("Interface Compilation"),
463 self.trUtf8("The compilation of the interface file was successful.")) 485 self.trUtf8(
486 "The compilation of the interface file was"
487 " successful."))
464 else: 488 else:
465 if not self.noDialog: 489 if not self.noDialog:
466 E5MessageBox.information(self, 490 E5MessageBox.information(self,
467 self.trUtf8("Interface Compilation"), 491 self.trUtf8("Interface Compilation"),
468 self.trUtf8("The compilation of the interface file failed.")) 492 self.trUtf8(
493 "The compilation of the interface file failed."))
469 else: 494 else:
470 ui.showNotification(UI.PixmapCache.getPixmap("corba48.png"), 495 ui.showNotification(UI.PixmapCache.getPixmap("corba48.png"),
471 self.trUtf8("Interface Compilation"), 496 self.trUtf8("Interface Compilation"),
472 self.trUtf8("The compilation of the interface file failed.")) 497 self.trUtf8(
498 "The compilation of the interface file failed."))
473 self.compileProc = None 499 self.compileProc = None
474 500
475 def __compileIDL(self, fn, noDialog=False, progress=None): 501 def __compileIDL(self, fn, noDialog=False, progress=None):
476 """ 502 """
477 Privat method to compile a .idl file to python. 503 Privat method to compile a .idl file to python.

eric ide

mercurial