37 |
41 |
38 |
42 |
39 class ProjectInterfacesBrowser(ProjectBaseBrowser): |
43 class ProjectInterfacesBrowser(ProjectBaseBrowser): |
40 """ |
44 """ |
41 A class used to display the interfaces (IDL) part of the project. |
45 A class used to display the interfaces (IDL) part of the project. |
42 |
46 |
43 @signal appendStdout(str) emitted after something was received from |
47 @signal appendStdout(str) emitted after something was received from |
44 a QProcess on stdout |
48 a QProcess on stdout |
45 @signal appendStderr(str) emitted after something was received from |
49 @signal appendStderr(str) emitted after something was received from |
46 a QProcess on stderr |
50 a QProcess on stderr |
47 @signal showMenu(str, QMenu) emitted when a menu is about to be shown. |
51 @signal showMenu(str, QMenu) emitted when a menu is about to be shown. |
48 The name of the menu and a reference to the menu are given. |
52 The name of the menu and a reference to the menu are given. |
49 """ |
53 """ |
|
54 |
50 appendStdout = pyqtSignal(str) |
55 appendStdout = pyqtSignal(str) |
51 appendStderr = pyqtSignal(str) |
56 appendStderr = pyqtSignal(str) |
52 showMenu = pyqtSignal(str, QMenu) |
57 showMenu = pyqtSignal(str, QMenu) |
53 |
58 |
54 def __init__(self, project, parent=None): |
59 def __init__(self, project, parent=None): |
55 """ |
60 """ |
56 Constructor |
61 Constructor |
57 |
62 |
58 @param project reference to the project object |
63 @param project reference to the project object |
59 @param parent parent widget of this browser (QWidget) |
64 @param parent parent widget of this browser (QWidget) |
60 """ |
65 """ |
61 self.omniidl = Preferences.getCorba("omniidl") |
66 self.omniidl = Preferences.getCorba("omniidl") |
62 if self.omniidl == "": |
67 if self.omniidl == "": |
63 self.omniidl = ( |
68 self.omniidl = Utilities.isWindowsPlatform() and "omniidl.exe" or "omniidl" |
64 Utilities.isWindowsPlatform() and |
|
65 "omniidl.exe" or "omniidl" |
|
66 ) |
|
67 if not Utilities.isinpath(self.omniidl): |
69 if not Utilities.isinpath(self.omniidl): |
68 self.omniidl = None |
70 self.omniidl = None |
69 |
71 |
70 ProjectBaseBrowser.__init__(self, project, |
72 ProjectBaseBrowser.__init__(self, project, ProjectBrowserInterfaceType, parent) |
71 ProjectBrowserInterfaceType, parent) |
73 |
72 |
74 self.selectedItemsFilter = [ |
73 self.selectedItemsFilter = [ProjectBrowserFileItem, |
75 ProjectBrowserFileItem, |
74 ProjectBrowserSimpleDirectoryItem] |
76 ProjectBrowserSimpleDirectoryItem, |
75 |
77 ] |
76 self.setWindowTitle(self.tr('Interfaces (IDL)')) |
78 |
77 |
79 self.setWindowTitle(self.tr("Interfaces (IDL)")) |
78 self.setWhatsThis(self.tr( |
80 |
79 """<b>Project Interfaces Browser</b>""" |
81 self.setWhatsThis( |
80 """<p>This allows to easily see all interfaces (CORBA IDL files)""" |
82 self.tr( |
81 """ contained in the current project. Several actions can be""" |
83 """<b>Project Interfaces Browser</b>""" |
82 """ executed via the context menu.</p>""" |
84 """<p>This allows to easily see all interfaces (CORBA IDL files)""" |
83 )) |
85 """ contained in the current project. Several actions can be""" |
84 |
86 """ executed via the context menu.</p>""" |
|
87 ) |
|
88 ) |
|
89 |
85 project.prepareRepopulateItem.connect(self._prepareRepopulateItem) |
90 project.prepareRepopulateItem.connect(self._prepareRepopulateItem) |
86 project.completeRepopulateItem.connect(self._completeRepopulateItem) |
91 project.completeRepopulateItem.connect(self._completeRepopulateItem) |
87 |
92 |
88 def _createPopupMenus(self): |
93 def _createPopupMenus(self): |
89 """ |
94 """ |
90 Protected overloaded method to generate the popup menu. |
95 Protected overloaded method to generate the popup menu. |
91 """ |
96 """ |
92 self.menuActions = [] |
97 self.menuActions = [] |
93 self.multiMenuActions = [] |
98 self.multiMenuActions = [] |
94 self.dirMenuActions = [] |
99 self.dirMenuActions = [] |
95 self.dirMultiMenuActions = [] |
100 self.dirMultiMenuActions = [] |
96 |
101 |
97 self.sourceMenu = QMenu(self) |
102 self.sourceMenu = QMenu(self) |
98 if self.omniidl is not None: |
103 if self.omniidl is not None: |
99 self.sourceMenu.addAction( |
104 self.sourceMenu.addAction( |
100 self.tr('Compile interface'), self.__compileInterface) |
105 self.tr("Compile interface"), self.__compileInterface |
|
106 ) |
101 self.sourceMenu.addAction( |
107 self.sourceMenu.addAction( |
102 self.tr('Compile all interfaces'), |
108 self.tr("Compile all interfaces"), self.__compileAllInterfaces |
103 self.__compileAllInterfaces) |
109 ) |
104 self.sourceMenu.addSeparator() |
110 self.sourceMenu.addSeparator() |
105 self.sourceMenu.addAction( |
111 self.sourceMenu.addAction( |
106 self.tr('Configure IDL compiler'), |
112 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
107 self.__configureIdlCompiler) |
113 ) |
108 self.sourceMenu.addSeparator() |
114 self.sourceMenu.addSeparator() |
109 self.sourceMenu.addAction(self.tr('Open'), self._openItem) |
115 self.sourceMenu.addAction(self.tr("Open"), self._openItem) |
110 self.sourceMenu.addSeparator() |
116 self.sourceMenu.addSeparator() |
111 act = self.sourceMenu.addAction( |
117 act = self.sourceMenu.addAction(self.tr("Rename file"), self._renameFile) |
112 self.tr('Rename file'), self._renameFile) |
|
113 self.menuActions.append(act) |
118 self.menuActions.append(act) |
114 act = self.sourceMenu.addAction( |
119 act = self.sourceMenu.addAction( |
115 self.tr('Remove from project'), self._removeFile) |
120 self.tr("Remove from project"), self._removeFile |
|
121 ) |
116 self.menuActions.append(act) |
122 self.menuActions.append(act) |
117 act = self.sourceMenu.addAction( |
123 act = self.sourceMenu.addAction(self.tr("Delete"), self.__deleteFile) |
118 self.tr('Delete'), self.__deleteFile) |
|
119 self.menuActions.append(act) |
124 self.menuActions.append(act) |
120 self.sourceMenu.addSeparator() |
125 self.sourceMenu.addSeparator() |
121 self.sourceMenu.addAction( |
126 self.sourceMenu.addAction( |
122 self.tr('Add interfaces...'), self.__addInterfaceFiles) |
127 self.tr("Add interfaces..."), self.__addInterfaceFiles |
|
128 ) |
123 self.sourceMenu.addAction( |
129 self.sourceMenu.addAction( |
124 self.tr('Add interfaces directory...'), |
130 self.tr("Add interfaces directory..."), self.__addInterfacesDirectory |
125 self.__addInterfacesDirectory) |
131 ) |
126 self.sourceMenu.addSeparator() |
132 self.sourceMenu.addSeparator() |
127 self.sourceMenu.addAction( |
133 self.sourceMenu.addAction( |
128 self.tr('Copy Path to Clipboard'), self._copyToClipboard) |
134 self.tr("Copy Path to Clipboard"), self._copyToClipboard |
|
135 ) |
129 self.sourceMenu.addSeparator() |
136 self.sourceMenu.addSeparator() |
130 self.sourceMenu.addAction( |
137 self.sourceMenu.addAction( |
131 self.tr('Expand all directories'), self._expandAllDirs) |
138 self.tr("Expand all directories"), self._expandAllDirs |
|
139 ) |
132 self.sourceMenu.addAction( |
140 self.sourceMenu.addAction( |
133 self.tr('Collapse all directories'), self._collapseAllDirs) |
141 self.tr("Collapse all directories"), self._collapseAllDirs |
|
142 ) |
134 self.sourceMenu.addSeparator() |
143 self.sourceMenu.addSeparator() |
135 self.sourceMenu.addAction(self.tr('Configure...'), self._configure) |
144 self.sourceMenu.addAction(self.tr("Configure..."), self._configure) |
136 self.sourceMenu.addAction( |
145 self.sourceMenu.addAction(self.tr("Configure CORBA..."), self.__configureCorba) |
137 self.tr('Configure CORBA...'), self.__configureCorba) |
|
138 |
146 |
139 self.menu = QMenu(self) |
147 self.menu = QMenu(self) |
140 if self.omniidl is not None: |
148 if self.omniidl is not None: |
|
149 self.menu.addAction(self.tr("Compile interface"), self.__compileInterface) |
141 self.menu.addAction( |
150 self.menu.addAction( |
142 self.tr('Compile interface'), self.__compileInterface) |
151 self.tr("Compile all interfaces"), self.__compileAllInterfaces |
143 self.menu.addAction( |
152 ) |
144 self.tr('Compile all interfaces'), |
|
145 self.__compileAllInterfaces) |
|
146 self.menu.addSeparator() |
153 self.menu.addSeparator() |
147 self.menu.addAction( |
154 self.menu.addAction( |
148 self.tr('Configure IDL compiler'), |
155 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
149 self.__configureIdlCompiler) |
156 ) |
150 self.menu.addSeparator() |
157 self.menu.addSeparator() |
151 self.menu.addAction(self.tr('Open'), self._openItem) |
158 self.menu.addAction(self.tr("Open"), self._openItem) |
152 self.menu.addSeparator() |
159 self.menu.addSeparator() |
|
160 self.menu.addAction(self.tr("Add interfaces..."), self.__addInterfaceFiles) |
153 self.menu.addAction( |
161 self.menu.addAction( |
154 self.tr('Add interfaces...'), self.__addInterfaceFiles) |
162 self.tr("Add interfaces directory..."), self.__addInterfacesDirectory |
155 self.menu.addAction( |
163 ) |
156 self.tr('Add interfaces directory...'), |
|
157 self.__addInterfacesDirectory) |
|
158 self.menu.addSeparator() |
164 self.menu.addSeparator() |
159 self.menu.addAction( |
165 self.menu.addAction(self.tr("Expand all directories"), self._expandAllDirs) |
160 self.tr('Expand all directories'), self._expandAllDirs) |
166 self.menu.addAction(self.tr("Collapse all directories"), self._collapseAllDirs) |
161 self.menu.addAction( |
|
162 self.tr('Collapse all directories'), self._collapseAllDirs) |
|
163 self.menu.addSeparator() |
167 self.menu.addSeparator() |
164 self.menu.addAction(self.tr('Configure...'), self._configure) |
168 self.menu.addAction(self.tr("Configure..."), self._configure) |
165 self.menu.addAction( |
169 self.menu.addAction(self.tr("Configure CORBA..."), self.__configureCorba) |
166 self.tr('Configure CORBA...'), self.__configureCorba) |
|
167 |
170 |
168 self.backMenu = QMenu(self) |
171 self.backMenu = QMenu(self) |
169 if self.omniidl is not None: |
172 if self.omniidl is not None: |
170 self.backMenu.addAction( |
173 self.backMenu.addAction( |
171 self.tr('Compile all interfaces'), |
174 self.tr("Compile all interfaces"), self.__compileAllInterfaces |
172 self.__compileAllInterfaces) |
175 ) |
173 self.backMenu.addSeparator() |
176 self.backMenu.addSeparator() |
174 self.backMenu.addAction( |
177 self.backMenu.addAction( |
175 self.tr('Configure IDL compiler'), |
178 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
176 self.__configureIdlCompiler) |
179 ) |
177 self.backMenu.addSeparator() |
180 self.backMenu.addSeparator() |
|
181 self.backMenu.addAction(self.tr("Add interfaces..."), self.project.addIdlFiles) |
178 self.backMenu.addAction( |
182 self.backMenu.addAction( |
179 self.tr('Add interfaces...'), self.project.addIdlFiles) |
183 self.tr("Add interfaces directory..."), self.project.addIdlDir |
|
184 ) |
|
185 self.backMenu.addSeparator() |
|
186 self.backMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) |
180 self.backMenu.addAction( |
187 self.backMenu.addAction( |
181 self.tr('Add interfaces directory...'), self.project.addIdlDir) |
188 self.tr("Collapse all directories"), self._collapseAllDirs |
|
189 ) |
182 self.backMenu.addSeparator() |
190 self.backMenu.addSeparator() |
183 self.backMenu.addAction( |
191 self.backMenu.addAction(self.tr("Configure..."), self._configure) |
184 self.tr('Expand all directories'), self._expandAllDirs) |
192 self.backMenu.addAction(self.tr("Configure CORBA..."), self.__configureCorba) |
185 self.backMenu.addAction( |
|
186 self.tr('Collapse all directories'), self._collapseAllDirs) |
|
187 self.backMenu.addSeparator() |
|
188 self.backMenu.addAction(self.tr('Configure...'), self._configure) |
|
189 self.backMenu.addAction( |
|
190 self.tr('Configure CORBA...'), self.__configureCorba) |
|
191 self.backMenu.setEnabled(False) |
193 self.backMenu.setEnabled(False) |
192 |
194 |
193 # create the menu for multiple selected files |
195 # create the menu for multiple selected files |
194 self.multiMenu = QMenu(self) |
196 self.multiMenu = QMenu(self) |
195 if self.omniidl is not None: |
197 if self.omniidl is not None: |
196 self.multiMenu.addAction( |
198 self.multiMenu.addAction( |
197 self.tr('Compile interfaces'), |
199 self.tr("Compile interfaces"), self.__compileSelectedInterfaces |
198 self.__compileSelectedInterfaces) |
200 ) |
199 self.multiMenu.addSeparator() |
201 self.multiMenu.addSeparator() |
200 self.multiMenu.addAction( |
202 self.multiMenu.addAction( |
201 self.tr('Configure IDL compiler'), |
203 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
202 self.__configureIdlCompiler) |
204 ) |
203 self.multiMenu.addSeparator() |
205 self.multiMenu.addSeparator() |
204 self.multiMenu.addAction(self.tr('Open'), self._openItem) |
206 self.multiMenu.addAction(self.tr("Open"), self._openItem) |
205 self.multiMenu.addSeparator() |
207 self.multiMenu.addSeparator() |
206 act = self.multiMenu.addAction( |
208 act = self.multiMenu.addAction(self.tr("Remove from project"), self._removeFile) |
207 self.tr('Remove from project'), self._removeFile) |
|
208 self.multiMenuActions.append(act) |
209 self.multiMenuActions.append(act) |
209 act = self.multiMenu.addAction( |
210 act = self.multiMenu.addAction(self.tr("Delete"), self.__deleteFile) |
210 self.tr('Delete'), self.__deleteFile) |
|
211 self.multiMenuActions.append(act) |
211 self.multiMenuActions.append(act) |
212 self.multiMenu.addSeparator() |
212 self.multiMenu.addSeparator() |
|
213 self.multiMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) |
213 self.multiMenu.addAction( |
214 self.multiMenu.addAction( |
214 self.tr('Expand all directories'), self._expandAllDirs) |
215 self.tr("Collapse all directories"), self._collapseAllDirs |
215 self.multiMenu.addAction( |
216 ) |
216 self.tr('Collapse all directories'), self._collapseAllDirs) |
|
217 self.multiMenu.addSeparator() |
217 self.multiMenu.addSeparator() |
218 self.multiMenu.addAction(self.tr('Configure...'), self._configure) |
218 self.multiMenu.addAction(self.tr("Configure..."), self._configure) |
219 self.multiMenu.addAction( |
219 self.multiMenu.addAction(self.tr("Configure CORBA..."), self.__configureCorba) |
220 self.tr('Configure CORBA...'), self.__configureCorba) |
|
221 |
220 |
222 self.dirMenu = QMenu(self) |
221 self.dirMenu = QMenu(self) |
223 if self.omniidl is not None: |
222 if self.omniidl is not None: |
224 self.dirMenu.addAction( |
223 self.dirMenu.addAction( |
225 self.tr('Compile all interfaces'), |
224 self.tr("Compile all interfaces"), self.__compileAllInterfaces |
226 self.__compileAllInterfaces) |
225 ) |
227 self.dirMenu.addSeparator() |
226 self.dirMenu.addSeparator() |
228 self.dirMenu.addAction( |
227 self.dirMenu.addAction( |
229 self.tr('Configure IDL compiler'), |
228 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
230 self.__configureIdlCompiler) |
229 ) |
231 self.dirMenu.addSeparator() |
230 self.dirMenu.addSeparator() |
232 act = self.dirMenu.addAction( |
231 act = self.dirMenu.addAction(self.tr("Remove from project"), self._removeFile) |
233 self.tr('Remove from project'), self._removeFile) |
|
234 self.dirMenuActions.append(act) |
232 self.dirMenuActions.append(act) |
235 act = self.dirMenu.addAction( |
233 act = self.dirMenu.addAction(self.tr("Delete"), self._deleteDirectory) |
236 self.tr('Delete'), self._deleteDirectory) |
|
237 self.dirMenuActions.append(act) |
234 self.dirMenuActions.append(act) |
238 self.dirMenu.addSeparator() |
235 self.dirMenu.addSeparator() |
|
236 self.dirMenu.addAction(self.tr("Add interfaces..."), self.__addInterfaceFiles) |
239 self.dirMenu.addAction( |
237 self.dirMenu.addAction( |
240 self.tr('Add interfaces...'), self.__addInterfaceFiles) |
238 self.tr("Add interfaces directory..."), self.__addInterfacesDirectory |
|
239 ) |
|
240 self.dirMenu.addSeparator() |
|
241 self.dirMenu.addAction(self.tr("Copy Path to Clipboard"), self._copyToClipboard) |
|
242 self.dirMenu.addSeparator() |
|
243 self.dirMenu.addAction(self.tr("Expand all directories"), self._expandAllDirs) |
241 self.dirMenu.addAction( |
244 self.dirMenu.addAction( |
242 self.tr('Add interfaces directory...'), |
245 self.tr("Collapse all directories"), self._collapseAllDirs |
243 self.__addInterfacesDirectory) |
246 ) |
244 self.dirMenu.addSeparator() |
247 self.dirMenu.addSeparator() |
245 self.dirMenu.addAction( |
248 self.dirMenu.addAction(self.tr("Configure..."), self._configure) |
246 self.tr('Copy Path to Clipboard'), self._copyToClipboard) |
249 self.dirMenu.addAction(self.tr("Configure CORBA..."), self.__configureCorba) |
247 self.dirMenu.addSeparator() |
250 |
248 self.dirMenu.addAction( |
|
249 self.tr('Expand all directories'), self._expandAllDirs) |
|
250 self.dirMenu.addAction( |
|
251 self.tr('Collapse all directories'), self._collapseAllDirs) |
|
252 self.dirMenu.addSeparator() |
|
253 self.dirMenu.addAction(self.tr('Configure...'), self._configure) |
|
254 self.dirMenu.addAction( |
|
255 self.tr('Configure CORBA...'), self.__configureCorba) |
|
256 |
|
257 self.dirMultiMenu = QMenu(self) |
251 self.dirMultiMenu = QMenu(self) |
258 if self.omniidl is not None: |
252 if self.omniidl is not None: |
259 self.dirMultiMenu.addAction( |
253 self.dirMultiMenu.addAction( |
260 self.tr('Compile all interfaces'), |
254 self.tr("Compile all interfaces"), self.__compileAllInterfaces |
261 self.__compileAllInterfaces) |
255 ) |
262 self.dirMultiMenu.addSeparator() |
256 self.dirMultiMenu.addSeparator() |
263 self.dirMultiMenu.addAction( |
257 self.dirMultiMenu.addAction( |
264 self.tr('Configure IDL compiler'), |
258 self.tr("Configure IDL compiler"), self.__configureIdlCompiler |
265 self.__configureIdlCompiler) |
259 ) |
266 self.dirMultiMenu.addSeparator() |
260 self.dirMultiMenu.addSeparator() |
267 self.dirMultiMenu.addAction( |
261 self.dirMultiMenu.addAction( |
268 self.tr('Add interfaces...'), self.project.addIdlFiles) |
262 self.tr("Add interfaces..."), self.project.addIdlFiles |
|
263 ) |
269 self.dirMultiMenu.addAction( |
264 self.dirMultiMenu.addAction( |
270 self.tr('Add interfaces directory...'), self.project.addIdlDir) |
265 self.tr("Add interfaces directory..."), self.project.addIdlDir |
|
266 ) |
271 self.dirMultiMenu.addSeparator() |
267 self.dirMultiMenu.addSeparator() |
272 self.dirMultiMenu.addAction( |
268 self.dirMultiMenu.addAction( |
273 self.tr('Expand all directories'), self._expandAllDirs) |
269 self.tr("Expand all directories"), self._expandAllDirs |
|
270 ) |
274 self.dirMultiMenu.addAction( |
271 self.dirMultiMenu.addAction( |
275 self.tr('Collapse all directories'), self._collapseAllDirs) |
272 self.tr("Collapse all directories"), self._collapseAllDirs |
|
273 ) |
276 self.dirMultiMenu.addSeparator() |
274 self.dirMultiMenu.addSeparator() |
|
275 self.dirMultiMenu.addAction(self.tr("Configure..."), self._configure) |
277 self.dirMultiMenu.addAction( |
276 self.dirMultiMenu.addAction( |
278 self.tr('Configure...'), self._configure) |
277 self.tr("Configure CORBA..."), self.__configureCorba |
279 self.dirMultiMenu.addAction(self.tr('Configure CORBA...'), |
278 ) |
280 self.__configureCorba) |
279 |
281 |
|
282 self.sourceMenu.aboutToShow.connect(self.__showContextMenu) |
280 self.sourceMenu.aboutToShow.connect(self.__showContextMenu) |
283 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) |
281 self.multiMenu.aboutToShow.connect(self.__showContextMenuMulti) |
284 self.dirMenu.aboutToShow.connect(self.__showContextMenuDir) |
282 self.dirMenu.aboutToShow.connect(self.__showContextMenuDir) |
285 self.dirMultiMenu.aboutToShow.connect(self.__showContextMenuDirMulti) |
283 self.dirMultiMenu.aboutToShow.connect(self.__showContextMenuDirMulti) |
286 self.backMenu.aboutToShow.connect(self.__showContextMenuBack) |
284 self.backMenu.aboutToShow.connect(self.__showContextMenuBack) |
287 self.mainMenu = self.sourceMenu |
285 self.mainMenu = self.sourceMenu |
288 |
286 |
289 def _contextMenuRequested(self, coord): |
287 def _contextMenuRequested(self, coord): |
290 """ |
288 """ |
291 Protected slot to show the context menu. |
289 Protected slot to show the context menu. |
292 |
290 |
293 @param coord the position of the mouse pointer (QPoint) |
291 @param coord the position of the mouse pointer (QPoint) |
294 """ |
292 """ |
295 if not self.project.isOpen(): |
293 if not self.project.isOpen(): |
296 return |
294 return |
297 |
295 |
298 with contextlib.suppress(Exception): |
296 with contextlib.suppress(Exception): |
299 categories = self.getSelectedItemsCountCategorized( |
297 categories = self.getSelectedItemsCountCategorized( |
300 [ProjectBrowserFileItem, BrowserClassItem, |
298 [ |
301 BrowserMethodItem, ProjectBrowserSimpleDirectoryItem]) |
299 ProjectBrowserFileItem, |
|
300 BrowserClassItem, |
|
301 BrowserMethodItem, |
|
302 ProjectBrowserSimpleDirectoryItem, |
|
303 ] |
|
304 ) |
302 cnt = categories["sum"] |
305 cnt = categories["sum"] |
303 if cnt <= 1: |
306 if cnt <= 1: |
304 index = self.indexAt(coord) |
307 index = self.indexAt(coord) |
305 if index.isValid(): |
308 if index.isValid(): |
306 self._selectSingleItem(index) |
309 self._selectSingleItem(index) |
307 categories = self.getSelectedItemsCountCategorized( |
310 categories = self.getSelectedItemsCountCategorized( |
308 [ProjectBrowserFileItem, BrowserClassItem, |
311 [ |
309 BrowserMethodItem, ProjectBrowserSimpleDirectoryItem]) |
312 ProjectBrowserFileItem, |
|
313 BrowserClassItem, |
|
314 BrowserMethodItem, |
|
315 ProjectBrowserSimpleDirectoryItem, |
|
316 ] |
|
317 ) |
310 cnt = categories["sum"] |
318 cnt = categories["sum"] |
311 |
319 |
312 bfcnt = categories[str(ProjectBrowserFileItem)] |
320 bfcnt = categories[str(ProjectBrowserFileItem)] |
313 cmcnt = ( |
321 cmcnt = ( |
314 categories[str(BrowserClassItem)] + |
322 categories[str(BrowserClassItem)] + categories[str(BrowserMethodItem)] |
315 categories[str(BrowserMethodItem)] |
|
316 ) |
323 ) |
317 sdcnt = categories[str(ProjectBrowserSimpleDirectoryItem)] |
324 sdcnt = categories[str(ProjectBrowserSimpleDirectoryItem)] |
318 if cnt > 1 and cnt == bfcnt: |
325 if cnt > 1 and cnt == bfcnt: |
319 self.multiMenu.popup(self.mapToGlobal(coord)) |
326 self.multiMenu.popup(self.mapToGlobal(coord)) |
320 elif cnt > 1 and cnt == sdcnt: |
327 elif cnt > 1 and cnt == sdcnt: |
324 if cnt == 1 and index.isValid(): |
331 if cnt == 1 and index.isValid(): |
325 if bfcnt == 1 or cmcnt == 1: |
332 if bfcnt == 1 or cmcnt == 1: |
326 itm = self.model().item(index) |
333 itm = self.model().item(index) |
327 if isinstance(itm, ProjectBrowserFileItem): |
334 if isinstance(itm, ProjectBrowserFileItem): |
328 self.sourceMenu.popup(self.mapToGlobal(coord)) |
335 self.sourceMenu.popup(self.mapToGlobal(coord)) |
329 elif isinstance( |
336 elif isinstance(itm, (BrowserClassItem, BrowserMethodItem)): |
330 itm, |
|
331 (BrowserClassItem, BrowserMethodItem) |
|
332 ): |
|
333 self.menu.popup(self.mapToGlobal(coord)) |
337 self.menu.popup(self.mapToGlobal(coord)) |
334 else: |
338 else: |
335 self.backMenu.popup(self.mapToGlobal(coord)) |
339 self.backMenu.popup(self.mapToGlobal(coord)) |
336 elif sdcnt == 1: |
340 elif sdcnt == 1: |
337 self.dirMenu.popup(self.mapToGlobal(coord)) |
341 self.dirMenu.popup(self.mapToGlobal(coord)) |
338 else: |
342 else: |
339 self.backMenu.popup(self.mapToGlobal(coord)) |
343 self.backMenu.popup(self.mapToGlobal(coord)) |
340 else: |
344 else: |
341 self.backMenu.popup(self.mapToGlobal(coord)) |
345 self.backMenu.popup(self.mapToGlobal(coord)) |
342 |
346 |
343 def __showContextMenu(self): |
347 def __showContextMenu(self): |
344 """ |
348 """ |
345 Private slot called by the menu aboutToShow signal. |
349 Private slot called by the menu aboutToShow signal. |
346 """ |
350 """ |
347 ProjectBaseBrowser._showContextMenu(self, self.menu) |
351 ProjectBaseBrowser._showContextMenu(self, self.menu) |
348 |
352 |
349 self.showMenu.emit("Main", self.menu) |
353 self.showMenu.emit("Main", self.menu) |
350 |
354 |
351 def __showContextMenuMulti(self): |
355 def __showContextMenuMulti(self): |
352 """ |
356 """ |
353 Private slot called by the multiMenu aboutToShow signal. |
357 Private slot called by the multiMenu aboutToShow signal. |
354 """ |
358 """ |
355 ProjectBaseBrowser._showContextMenuMulti(self, self.multiMenu) |
359 ProjectBaseBrowser._showContextMenuMulti(self, self.multiMenu) |
356 |
360 |
357 self.showMenu.emit("MainMulti", self.multiMenu) |
361 self.showMenu.emit("MainMulti", self.multiMenu) |
358 |
362 |
359 def __showContextMenuDir(self): |
363 def __showContextMenuDir(self): |
360 """ |
364 """ |
361 Private slot called by the dirMenu aboutToShow signal. |
365 Private slot called by the dirMenu aboutToShow signal. |
362 """ |
366 """ |
363 ProjectBaseBrowser._showContextMenuDir(self, self.dirMenu) |
367 ProjectBaseBrowser._showContextMenuDir(self, self.dirMenu) |
364 |
368 |
365 self.showMenu.emit("MainDir", self.dirMenu) |
369 self.showMenu.emit("MainDir", self.dirMenu) |
366 |
370 |
367 def __showContextMenuDirMulti(self): |
371 def __showContextMenuDirMulti(self): |
368 """ |
372 """ |
369 Private slot called by the dirMultiMenu aboutToShow signal. |
373 Private slot called by the dirMultiMenu aboutToShow signal. |
370 """ |
374 """ |
371 ProjectBaseBrowser._showContextMenuDirMulti(self, self.dirMultiMenu) |
375 ProjectBaseBrowser._showContextMenuDirMulti(self, self.dirMultiMenu) |
372 |
376 |
373 self.showMenu.emit("MainDirMulti", self.dirMultiMenu) |
377 self.showMenu.emit("MainDirMulti", self.dirMultiMenu) |
374 |
378 |
375 def __showContextMenuBack(self): |
379 def __showContextMenuBack(self): |
376 """ |
380 """ |
377 Private slot called by the backMenu aboutToShow signal. |
381 Private slot called by the backMenu aboutToShow signal. |
378 """ |
382 """ |
379 ProjectBaseBrowser._showContextMenuBack(self, self.backMenu) |
383 ProjectBaseBrowser._showContextMenuBack(self, self.backMenu) |
380 |
384 |
381 self.showMenu.emit("MainBack", self.backMenu) |
385 self.showMenu.emit("MainBack", self.backMenu) |
382 |
386 |
383 def _openItem(self): |
387 def _openItem(self): |
384 """ |
388 """ |
385 Protected slot to handle the open popup menu entry. |
389 Protected slot to handle the open popup menu entry. |
386 """ |
390 """ |
387 itmList = self.getSelectedItems( |
391 itmList = self.getSelectedItems( |
388 [BrowserFileItem, BrowserClassItem, BrowserMethodItem, |
392 [ |
389 BrowserClassAttributeItem]) |
393 BrowserFileItem, |
390 |
394 BrowserClassItem, |
|
395 BrowserMethodItem, |
|
396 BrowserClassAttributeItem, |
|
397 ] |
|
398 ) |
|
399 |
391 for itm in itmList: |
400 for itm in itmList: |
392 if isinstance(itm, BrowserFileItem): |
401 if isinstance(itm, BrowserFileItem): |
393 self.sourceFile[str].emit(itm.fileName()) |
402 self.sourceFile[str].emit(itm.fileName()) |
394 elif isinstance(itm, BrowserClassItem): |
403 elif isinstance(itm, BrowserClassItem): |
395 self.sourceFile[str, int].emit( |
404 self.sourceFile[str, int].emit(itm.fileName(), itm.classObject().lineno) |
396 itm.fileName(), itm.classObject().lineno) |
|
397 elif isinstance(itm, BrowserMethodItem): |
405 elif isinstance(itm, BrowserMethodItem): |
398 self.sourceFile[str, int].emit( |
406 self.sourceFile[str, int].emit( |
399 itm.fileName(), itm.functionObject().lineno) |
407 itm.fileName(), itm.functionObject().lineno |
|
408 ) |
400 elif isinstance(itm, BrowserClassAttributeItem): |
409 elif isinstance(itm, BrowserClassAttributeItem): |
401 self.sourceFile[str, int].emit( |
410 self.sourceFile[str, int].emit( |
402 itm.fileName(), itm.attributeObject().lineno) |
411 itm.fileName(), itm.attributeObject().lineno |
403 |
412 ) |
|
413 |
404 def __addInterfaceFiles(self): |
414 def __addInterfaceFiles(self): |
405 """ |
415 """ |
406 Private method to add interface files to the project. |
416 Private method to add interface files to the project. |
407 """ |
417 """ |
408 itm = self.model().item(self.currentIndex()) |
418 itm = self.model().item(self.currentIndex()) |
409 if isinstance( |
419 if isinstance( |
410 itm, |
420 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
411 (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
|
412 ): |
421 ): |
413 dn = os.path.dirname(itm.fileName()) |
422 dn = os.path.dirname(itm.fileName()) |
414 elif isinstance( |
423 elif isinstance( |
415 itm, |
424 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
416 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
|
417 ): |
425 ): |
418 dn = itm.dirName() |
426 dn = itm.dirName() |
419 else: |
427 else: |
420 dn = None |
428 dn = None |
421 self.project.addFiles('interface', dn) |
429 self.project.addFiles("interface", dn) |
422 |
430 |
423 def __addInterfacesDirectory(self): |
431 def __addInterfacesDirectory(self): |
424 """ |
432 """ |
425 Private method to add interface files of a directory to the project. |
433 Private method to add interface files of a directory to the project. |
426 """ |
434 """ |
427 itm = self.model().item(self.currentIndex()) |
435 itm = self.model().item(self.currentIndex()) |
428 if isinstance( |
436 if isinstance( |
429 itm, |
437 itm, (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
430 (ProjectBrowserFileItem, BrowserClassItem, BrowserMethodItem) |
|
431 ): |
438 ): |
432 dn = os.path.dirname(itm.fileName()) |
439 dn = os.path.dirname(itm.fileName()) |
433 elif isinstance( |
440 elif isinstance( |
434 itm, |
441 itm, (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
435 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem) |
|
436 ): |
442 ): |
437 dn = itm.dirName() |
443 dn = itm.dirName() |
438 else: |
444 else: |
439 dn = None |
445 dn = None |
440 self.project.addDirectory('interface', dn) |
446 self.project.addDirectory("interface", dn) |
441 |
447 |
442 def __deleteFile(self): |
448 def __deleteFile(self): |
443 """ |
449 """ |
444 Private method to delete files from the project. |
450 Private method to delete files from the project. |
445 """ |
451 """ |
446 itmList = self.getSelectedItems() |
452 itmList = self.getSelectedItems() |
447 |
453 |
448 files = [] |
454 files = [] |
449 fullNames = [] |
455 fullNames = [] |
450 for itm in itmList: |
456 for itm in itmList: |
451 fn2 = itm.fileName() |
457 fn2 = itm.fileName() |
452 fullNames.append(fn2) |
458 fullNames.append(fn2) |
453 fn = self.project.getRelativePath(fn2) |
459 fn = self.project.getRelativePath(fn2) |
454 files.append(fn) |
460 files.append(fn) |
455 |
461 |
456 from UI.DeleteFilesConfirmationDialog import ( |
462 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog |
457 DeleteFilesConfirmationDialog |
463 |
458 ) |
|
459 dlg = DeleteFilesConfirmationDialog( |
464 dlg = DeleteFilesConfirmationDialog( |
460 self.parent(), |
465 self.parent(), |
461 self.tr("Delete interfaces"), |
466 self.tr("Delete interfaces"), |
462 self.tr("Do you really want to delete these interfaces from" |
467 self.tr( |
463 " the project?"), |
468 "Do you really want to delete these interfaces from" " the project?" |
464 files) |
469 ), |
465 |
470 files, |
|
471 ) |
|
472 |
466 if dlg.exec() == QDialog.DialogCode.Accepted: |
473 if dlg.exec() == QDialog.DialogCode.Accepted: |
467 for fn2, fn in zip(fullNames, files): |
474 for fn2, fn in zip(fullNames, files): |
468 self.closeSourceWindow.emit(fn2) |
475 self.closeSourceWindow.emit(fn2) |
469 self.project.deleteFile(fn) |
476 self.project.deleteFile(fn) |
470 |
477 |
471 ########################################################################### |
478 ########################################################################### |
472 ## Methods to handle the various compile commands |
479 ## Methods to handle the various compile commands |
473 ########################################################################### |
480 ########################################################################### |
474 |
481 |
475 def __readStdout(self): |
482 def __readStdout(self): |
476 """ |
483 """ |
477 Private slot to handle the readyReadStandardOutput signal of the |
484 Private slot to handle the readyReadStandardOutput signal of the |
478 omniidl process. |
485 omniidl process. |
479 """ |
486 """ |
480 if self.compileProc is None: |
487 if self.compileProc is None: |
481 return |
488 return |
482 |
489 |
483 ioEncoding = Preferences.getSystem("IOEncoding") |
490 ioEncoding = Preferences.getSystem("IOEncoding") |
484 |
491 |
485 self.compileProc.setReadChannel(QProcess.ProcessChannel.StandardOutput) |
492 self.compileProc.setReadChannel(QProcess.ProcessChannel.StandardOutput) |
486 while self.compileProc and self.compileProc.canReadLine(): |
493 while self.compileProc and self.compileProc.canReadLine(): |
487 s = 'omniidl: ' |
494 s = "omniidl: " |
488 output = str(self.compileProc.readLine(), ioEncoding, 'replace') |
495 output = str(self.compileProc.readLine(), ioEncoding, "replace") |
489 s += output |
496 s += output |
490 self.appendStdout.emit(s) |
497 self.appendStdout.emit(s) |
491 |
498 |
492 def __readStderr(self): |
499 def __readStderr(self): |
493 """ |
500 """ |
494 Private slot to handle the readyReadStandardError signal of the |
501 Private slot to handle the readyReadStandardError signal of the |
495 omniidl process. |
502 omniidl process. |
496 """ |
503 """ |
497 if self.compileProc is None: |
504 if self.compileProc is None: |
498 return |
505 return |
499 |
506 |
500 ioEncoding = Preferences.getSystem("IOEncoding") |
507 ioEncoding = Preferences.getSystem("IOEncoding") |
501 |
508 |
502 self.compileProc.setReadChannel(QProcess.ProcessChannel.StandardError) |
509 self.compileProc.setReadChannel(QProcess.ProcessChannel.StandardError) |
503 while self.compileProc and self.compileProc.canReadLine(): |
510 while self.compileProc and self.compileProc.canReadLine(): |
504 s = 'omniidl: ' |
511 s = "omniidl: " |
505 error = str(self.compileProc.readLine(), ioEncoding, 'replace') |
512 error = str(self.compileProc.readLine(), ioEncoding, "replace") |
506 s += error |
513 s += error |
507 self.appendStderr.emit(s) |
514 self.appendStderr.emit(s) |
508 |
515 |
509 def __compileIDLDone(self, exitCode, exitStatus): |
516 def __compileIDLDone(self, exitCode, exitStatus): |
510 """ |
517 """ |
511 Private slot to handle the finished signal of the omniidl process. |
518 Private slot to handle the finished signal of the omniidl process. |
512 |
519 |
513 @param exitCode exit code of the process (integer) |
520 @param exitCode exit code of the process (integer) |
514 @param exitStatus exit status of the process (QProcess.ExitStatus) |
521 @param exitStatus exit status of the process (QProcess.ExitStatus) |
515 """ |
522 """ |
516 self.compileRunning = False |
523 self.compileRunning = False |
517 ui = ericApp().getObject("UserInterface") |
524 ui = ericApp().getObject("UserInterface") |