43 the project sources browser, the project forms browser, |
43 the project sources browser, the project forms browser, |
44 the project resources browser, the project translations browser, |
44 the project resources browser, the project translations browser, |
45 the project interfaces (IDL) browser and a browser for stuff, |
45 the project interfaces (IDL) browser and a browser for stuff, |
46 that doesn't fit these categories. Optionally it contains an additional |
46 that doesn't fit these categories. Optionally it contains an additional |
47 tab with the file system browser. |
47 tab with the file system browser. |
|
48 |
|
49 Note: The following signals are defined here to proxy the individual browser |
|
50 signals. |
|
51 |
|
52 @signal appendStderr(str) emitted after something was received from |
|
53 a QProcess on stderr |
|
54 @signal appendStdout(str) emitted after something was received from |
|
55 a QProcess on stdout |
|
56 @signal binaryFile(filename) emitted to open a file as binary (str) |
|
57 @signal closeSourceWindow(str) emitted to close a source file |
|
58 @signal designerFile(filename) emitted to open a Qt-Designer file (str) |
|
59 @signal linguistFile(filename) emitted to open a Qt-Linguist (*.ts) |
|
60 file (str) |
|
61 @signal pixmapEditFile(filename) emitted to edit a pixmap file (str) |
|
62 @signal pixmapFile(filename) emitted to open a pixmap file (str) |
|
63 @signal preferencesChanged() emitted when the preferences have been changed |
|
64 @signal sourceFile(filename) emitted to open a Python file at a line (str) |
|
65 @signal sourceFile(filename, lineno) emitted to open a Python file at a |
|
66 line (str, int) |
|
67 @signal sourceFile(filename, lineno, type) emitted to open a Python file |
|
68 at a line giving an explicit file type (str, int, str) |
|
69 @signal sourceFile(filename, linenos) emitted to open a Python file giving |
|
70 a list of lines(str, list) |
|
71 @signal svgFile(filename) emitted to open a SVG file (str) |
|
72 @signal testFile(filename) emitted to open a Python file for a |
|
73 unit test (str) |
|
74 @signal trpreview(filenames) emitted to preview Qt-Linguist (*.qm) |
|
75 files (list of str) |
|
76 @signal trpreview(filenames, ignore) emitted to preview Qt-Linguist (*.qm) |
|
77 files indicating whether non-existent files shall be ignored |
|
78 (list of str, bool) |
|
79 @signal uipreview(str) emitted to preview a forms file |
|
80 @signal umlFile(filename) emitted to open an eric UML file (str) |
48 """ |
81 """ |
|
82 |
|
83 appendStderr = pyqtSignal(str) |
|
84 appendStdout = pyqtSignal(str) |
|
85 binaryFile = pyqtSignal(str) |
|
86 closeSourceWindow = pyqtSignal(str) |
|
87 designerFile = pyqtSignal(str) |
|
88 linguistFile = pyqtSignal(str) |
|
89 pixmapEditFile = pyqtSignal(str) |
|
90 pixmapFile = pyqtSignal(str) |
|
91 preferencesChanged = pyqtSignal() |
|
92 sourceFile = pyqtSignal((str,), (str, int), (str, list), (str, int, str)) |
|
93 svgFile = pyqtSignal(str) |
|
94 testFile = pyqtSignal(str) |
|
95 trpreview = pyqtSignal((list,), (list, bool)) |
|
96 uipreview = pyqtSignal(str) |
|
97 umlFile = pyqtSignal(str) |
49 |
98 |
50 def __init__(self, project, parent=None): |
99 def __init__(self, project, parent=None): |
51 """ |
100 """ |
52 Constructor |
101 Constructor |
53 |
102 |
81 "U": self.tr("update required"), |
130 "U": self.tr("update required"), |
82 "Z": self.tr("conflict"), |
131 "Z": self.tr("conflict"), |
83 } |
132 } |
84 self.__vcsStateChanged(" ") |
133 self.__vcsStateChanged(" ") |
85 |
134 |
86 # step 1: create all the individual browsers |
135 # create all the individual browsers |
87 # sources browser |
136 self.__browsers = { |
88 self.psBrowser = ProjectSourcesBrowser(self.project) |
137 # sources browser |
89 # forms browser |
138 "sources": ProjectSourcesBrowser(self.project, self), |
90 self.pfBrowser = ProjectFormsBrowser(self.project) |
139 # forms browser |
91 # resources browser |
140 "forms": ProjectFormsBrowser(self.project, self), |
92 self.prBrowser = ProjectResourcesBrowser(self.project) |
141 # resources browser |
93 # translations browser |
142 "resources": ProjectResourcesBrowser(self.project, self), |
94 self.ptBrowser = ProjectTranslationsBrowser(self.project) |
143 # translations browser |
95 # interfaces (IDL) browser |
144 "translations": ProjectTranslationsBrowser(self.project, self), |
96 self.piBrowser = ProjectInterfacesBrowser(self.project) |
145 # others browser |
97 # protocols (protobuf) browser |
146 "others": ProjectOthersBrowser(self.project, self), |
98 self.ppBrowser = ProjectProtocolsBrowser(self.project) |
147 # interfaces (IDL) browser |
99 # others browser |
148 "interfaces": ProjectInterfacesBrowser(self.project, self), |
100 self.poBrowser = ProjectOthersBrowser(self.project) |
149 # protocols (protobuf) browser |
101 |
150 "protocols": ProjectProtocolsBrowser(self.project, self), |
102 # step 2: connect all the browsers |
151 } |
103 # connect the sources browser |
|
104 self.project.projectClosed.connect(self.psBrowser._projectClosed) |
|
105 self.project.projectOpened.connect(self.psBrowser._projectOpened) |
|
106 self.project.newProject.connect(self.psBrowser._newProject) |
|
107 self.project.reinitVCS.connect(self.psBrowser._initMenusAndVcs) |
|
108 self.project.projectPropertiesChanged.connect(self.psBrowser._initMenusAndVcs) |
|
109 |
|
110 # connect the forms browser |
|
111 self.project.projectClosed.connect(self.pfBrowser._projectClosed) |
|
112 self.project.projectOpened.connect(self.pfBrowser._projectOpened) |
|
113 self.project.newProject.connect(self.pfBrowser._newProject) |
|
114 self.project.reinitVCS.connect(self.pfBrowser._initMenusAndVcs) |
|
115 self.project.projectPropertiesChanged.connect(self.pfBrowser._initMenusAndVcs) |
|
116 |
|
117 # connect the resources browser |
|
118 self.project.projectClosed.connect(self.prBrowser._projectClosed) |
|
119 self.project.projectOpened.connect(self.prBrowser._projectOpened) |
|
120 self.project.newProject.connect(self.prBrowser._newProject) |
|
121 self.project.reinitVCS.connect(self.prBrowser._initMenusAndVcs) |
|
122 self.project.projectPropertiesChanged.connect(self.prBrowser._initMenusAndVcs) |
|
123 |
|
124 # connect the translations browser |
|
125 self.project.projectClosed.connect(self.ptBrowser._projectClosed) |
|
126 self.project.projectOpened.connect(self.ptBrowser._projectOpened) |
|
127 self.project.newProject.connect(self.ptBrowser._newProject) |
|
128 self.project.reinitVCS.connect(self.ptBrowser._initMenusAndVcs) |
|
129 self.project.projectPropertiesChanged.connect(self.ptBrowser._initMenusAndVcs) |
|
130 |
|
131 # connect the interfaces (IDL) browser |
|
132 self.project.projectClosed.connect(self.piBrowser._projectClosed) |
|
133 self.project.projectOpened.connect(self.piBrowser._projectOpened) |
|
134 self.project.newProject.connect(self.piBrowser._newProject) |
|
135 self.project.reinitVCS.connect(self.piBrowser._initMenusAndVcs) |
|
136 self.project.projectPropertiesChanged.connect(self.piBrowser._initMenusAndVcs) |
|
137 |
|
138 # connect the protocols (protobuf) browser |
|
139 self.project.projectClosed.connect(self.ppBrowser._projectClosed) |
|
140 self.project.projectOpened.connect(self.ppBrowser._projectOpened) |
|
141 self.project.newProject.connect(self.ppBrowser._newProject) |
|
142 self.project.reinitVCS.connect(self.ppBrowser._initMenusAndVcs) |
|
143 self.project.projectPropertiesChanged.connect(self.ppBrowser._initMenusAndVcs) |
|
144 |
|
145 # connect the others browser |
|
146 self.project.projectClosed.connect(self.poBrowser._projectClosed) |
|
147 self.project.projectOpened.connect(self.poBrowser._projectOpened) |
|
148 self.project.newProject.connect(self.poBrowser._newProject) |
|
149 self.project.reinitVCS.connect(self.poBrowser._initMenusAndVcs) |
|
150 self.project.projectPropertiesChanged.connect(self.poBrowser._initMenusAndVcs) |
|
151 |
152 |
152 # add signal connection to ourselves |
153 # add signal connection to ourselves |
153 self.project.projectOpened.connect(self.__projectOpened) |
154 self.project.projectOpened.connect(self.__projectOpened) |
154 self.project.projectClosed.connect(self.__projectClosed) |
155 self.project.projectClosed.connect(self.__projectClosed) |
155 self.project.newProject.connect(self.__newProject) |
156 self.project.newProject.connect(self.__newProject) |
172 self.removeTab(0) |
173 self.removeTab(0) |
173 |
174 |
174 # step 2: add browsers |
175 # step 2: add browsers |
175 if browserFlags & SourcesBrowserFlag: |
176 if browserFlags & SourcesBrowserFlag: |
176 index = self.addTab( |
177 index = self.addTab( |
177 self.psBrowser, EricPixmapCache.getIcon("projectSources"), "" |
178 self.__browsers["sources"], |
178 ) |
179 EricPixmapCache.getIcon("projectSources"), |
179 self.setTabToolTip(index, self.psBrowser.windowTitle()) |
180 "", |
|
181 ) |
|
182 self.setTabToolTip(index, self.__browsers["sources"].windowTitle()) |
180 |
183 |
181 if browserFlags & FormsBrowserFlag: |
184 if browserFlags & FormsBrowserFlag: |
182 index = self.addTab( |
185 index = self.addTab( |
183 self.pfBrowser, EricPixmapCache.getIcon("projectForms"), "" |
186 self.__browsers["forms"], EricPixmapCache.getIcon("projectForms"), "" |
184 ) |
187 ) |
185 self.setTabToolTip(index, self.pfBrowser.windowTitle()) |
188 self.setTabToolTip(index, self.__browsers["forms"].windowTitle()) |
186 |
189 |
187 if browserFlags & ResourcesBrowserFlag: |
190 if browserFlags & ResourcesBrowserFlag: |
188 index = self.addTab( |
191 index = self.addTab( |
189 self.prBrowser, EricPixmapCache.getIcon("projectResources"), "" |
192 self.__browsers["resources"], |
190 ) |
193 EricPixmapCache.getIcon("projectResources"), |
191 self.setTabToolTip(index, self.prBrowser.windowTitle()) |
194 "", |
|
195 ) |
|
196 self.setTabToolTip(index, self.__browsers["resources"].windowTitle()) |
192 |
197 |
193 if browserFlags & TranslationsBrowserFlag: |
198 if browserFlags & TranslationsBrowserFlag: |
194 index = self.addTab( |
199 index = self.addTab( |
195 self.ptBrowser, EricPixmapCache.getIcon("projectTranslations"), "" |
200 self.__browsers["translations"], |
196 ) |
201 EricPixmapCache.getIcon("projectTranslations"), |
197 self.setTabToolTip(index, self.ptBrowser.windowTitle()) |
202 "", |
|
203 ) |
|
204 self.setTabToolTip(index, self.__browsers["translations"].windowTitle()) |
198 |
205 |
199 if browserFlags & InterfacesBrowserFlag: |
206 if browserFlags & InterfacesBrowserFlag: |
200 index = self.addTab( |
207 index = self.addTab( |
201 self.piBrowser, EricPixmapCache.getIcon("projectInterfaces"), "" |
208 self.__browsers["interfaces"], |
202 ) |
209 EricPixmapCache.getIcon("projectInterfaces"), |
203 self.setTabToolTip(index, self.piBrowser.windowTitle()) |
210 "", |
|
211 ) |
|
212 self.setTabToolTip(index, self.__browsers["interfaces"].windowTitle()) |
204 |
213 |
205 if browserFlags & ProtocolsBrowserFlag: |
214 if browserFlags & ProtocolsBrowserFlag: |
206 index = self.addTab(self.ppBrowser, EricPixmapCache.getIcon("protobuf"), "") |
215 index = self.addTab( |
207 self.setTabToolTip(index, self.ppBrowser.windowTitle()) |
216 self.__browsers["protocols"], EricPixmapCache.getIcon("protobuf"), "" |
|
217 ) |
|
218 self.setTabToolTip(index, self.__browsers["protocols"].windowTitle()) |
208 |
219 |
209 if browserFlags & OthersBrowserFlag: |
220 if browserFlags & OthersBrowserFlag: |
210 index = self.addTab( |
221 index = self.addTab( |
211 self.poBrowser, EricPixmapCache.getIcon("projectOthers"), "" |
222 self.__browsers["others"], EricPixmapCache.getIcon("projectOthers"), "" |
212 ) |
223 ) |
213 self.setTabToolTip(index, self.poBrowser.windowTitle()) |
224 self.setTabToolTip(index, self.__browsers["others"].windowTitle()) |
214 |
225 |
215 QApplication.processEvents() |
226 QApplication.processEvents() |
216 |
227 |
217 def __currentChanged(self, index): |
228 def __currentChanged(self, index): |
218 """ |
229 """ |
290 icon = EricPixmapCache.getIcon("projectSourcesRb") |
301 icon = EricPixmapCache.getIcon("projectSourcesRb") |
291 elif self.project.getProjectLanguage() == "JavaScript": |
302 elif self.project.getProjectLanguage() == "JavaScript": |
292 icon = EricPixmapCache.getIcon("projectSourcesJavaScript") |
303 icon = EricPixmapCache.getIcon("projectSourcesJavaScript") |
293 else: |
304 else: |
294 icon = EricPixmapCache.getIcon("projectSources") |
305 icon = EricPixmapCache.getIcon("projectSources") |
295 self.setTabIcon(self.indexOf(self.psBrowser), icon) |
306 self.setTabIcon(self.indexOf(self.__browsers["sources"]), icon) |
296 |
307 |
297 def handleEditorChanged(self, fn): |
308 def handleEditorChanged(self, fn): |
298 """ |
309 """ |
299 Public slot to handle the editorChanged signal. |
310 Public slot to handle the editorChanged signal. |
300 |
311 |
301 @param fn filename of the changed file (string) |
312 @param fn filename of the changed file (string) |
302 """ |
313 """ |
303 if Preferences.getProject("FollowEditor"): |
314 if Preferences.getProject("FollowEditor"): |
304 if self.project.isProjectSource(fn): |
315 if self.project.isProjectSource(fn): |
305 self.psBrowser.selectFile(fn) |
316 self.__browsers["sources"].selectFile(fn) |
306 elif self.project.isProjectForm(fn): |
317 elif self.project.isProjectForm(fn): |
307 self.pfBrowser.selectFile(fn) |
318 self.__browsers["forms"].selectFile(fn) |
308 elif self.project.isProjectResource(fn): |
319 elif self.project.isProjectResource(fn): |
309 self.prBrowser.selectFile(fn) |
320 self.__browsers["resources"].selectFile(fn) |
310 elif self.project.isProjectInterface(fn): |
321 elif self.project.isProjectInterface(fn): |
311 self.piBrowser.selectFile(fn) |
322 self.__browsers["interfaces"].selectFile(fn) |
312 elif self.project.isProjectProtocol(fn): |
323 elif self.project.isProjectProtocol(fn): |
313 self.ppBrowser.selectFile(fn) |
324 self.__browsers["protocols"].selectFile(fn) |
314 |
325 |
315 def handleEditorLineChanged(self, fn, lineno): |
326 def handleEditorLineChanged(self, fn, lineno): |
316 """ |
327 """ |
317 Public slot to handle the editorLineChanged signal. |
328 Public slot to handle the editorLineChanged signal. |
318 |
329 |
322 if ( |
333 if ( |
323 Preferences.getProject("FollowEditor") |
334 Preferences.getProject("FollowEditor") |
324 and Preferences.getProject("FollowCursorLine") |
335 and Preferences.getProject("FollowCursorLine") |
325 and self.project.isProjectSource(fn) |
336 and self.project.isProjectSource(fn) |
326 ): |
337 ): |
327 self.psBrowser.selectFileLine(fn, lineno) |
338 self.__browsers["sources"].selectFileLine(fn, lineno) |
328 |
339 |
329 def getProjectBrowsers(self): |
340 def getProjectBrowsers(self): |
330 """ |
341 """ |
331 Public method to get references to the individual project browsers. |
342 Public method to get references to the individual project browsers. |
332 |
343 |
333 @return list of references to project browsers |
344 @return list of references to project browsers |
334 """ |
345 @rtype list of ProjectBaseBrowser |
335 return [ |
346 """ |
336 self.psBrowser, |
347 return list(self.__browsers.items()) |
337 self.pfBrowser, |
|
338 self.prBrowser, |
|
339 self.ptBrowser, |
|
340 self.piBrowser, |
|
341 self.ppBrowser, |
|
342 self.poBrowser, |
|
343 ] |
|
344 |
348 |
345 def getProjectBrowser(self, name): |
349 def getProjectBrowser(self, name): |
346 """ |
350 """ |
347 Public method to get a reference to the named project browser. |
351 Public method to get a reference to the named project browser. |
348 |
352 |
349 @param name name of the requested project browser (string). |
353 @param name name of the requested project browser. |
350 Valid names are "sources, forms, resources, translations, |
354 @type str |
351 interfaces, protocols, others". |
|
352 @return reference to the requested browser or None |
355 @return reference to the requested browser or None |
353 """ |
356 @rtype ProjectBaseBrowser or None |
354 return { |
357 """ |
355 "sources": self.psBrowser, |
358 return self.__browsers.get(name, None) |
356 "forms": self.pfBrowser, |
|
357 "resources": self.prBrowser, |
|
358 "translations": self.ptBrowser, |
|
359 "interfaces": self.piBrowser, |
|
360 "protocols": self.ppBrowser, |
|
361 "others": self.poBrowser, |
|
362 }.get(name, None) |
|
363 |
359 |
364 def getProjectBrowserNames(self): |
360 def getProjectBrowserNames(self): |
365 """ |
361 """ |
366 Public method to get the names of the various project browsers. |
362 Public method to get the names of the various project browsers. |
367 |
363 |
368 @return list of project browser names (list of string) |
364 @return list of project browser names |
369 """ |
365 @rtype list of str |
370 return [ |
366 """ |
371 "sources", |
367 return list(self.__browsers.keys()) |
372 "forms", |
|
373 "resources", |
|
374 "translations", |
|
375 "interfaces", |
|
376 "protocols", |
|
377 "others", |
|
378 ] |
|
379 |
368 |
380 def handlePreferencesChanged(self): |
369 def handlePreferencesChanged(self): |
381 """ |
370 """ |
382 Public slot used to handle the preferencesChanged signal. |
371 Public slot used to handle the preferencesChanged signal. |
383 """ |
372 """ |
384 self.__projectPropertiesChanged() |
373 self.__projectPropertiesChanged() |
385 self.__vcsStateChanged(self.currentVcsStatus) |
374 self.__vcsStateChanged(self.currentVcsStatus) |
|
375 |
|
376 self.preferencesChanged.emit() # propagate the signal to the browsers |
386 |
377 |
387 def __vcsStateChanged(self, state): |
378 def __vcsStateChanged(self, state): |
388 """ |
379 """ |
389 Private slot to handle a change in the vcs state. |
380 Private slot to handle a change in the vcs state. |
390 |
381 |