121 self.dirMultiMenuActions = [] |
121 self.dirMultiMenuActions = [] |
122 |
122 |
123 self.menusAboutToBeCreated.emit() |
123 self.menusAboutToBeCreated.emit() |
124 |
124 |
125 self.menu = QMenu(self) |
125 self.menu = QMenu(self) |
126 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
126 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
127 self.menu.addAction(self.trUtf8('Compile form'), self.__compileForm) |
127 self.menu.addAction(self.trUtf8('Compile form'), self.__compileForm) |
128 self.menu.addAction(self.trUtf8('Compile all forms'), |
128 self.menu.addAction(self.trUtf8('Compile all forms'), |
129 self.__compileAllForms) |
129 self.__compileAllForms) |
130 self.menu.addAction(self.trUtf8('Generate Dialog Code...'), |
130 self.menu.addAction(self.trUtf8('Generate Dialog Code...'), |
131 self.__generateDialogCode) |
131 self.__generateDialogCode) |
152 self.__generateDialogCode) |
152 self.__generateDialogCode) |
153 if self.hooks["compileForm"] is not None or \ |
153 if self.hooks["compileForm"] is not None or \ |
154 self.hooks["compileAllForms"] is not None or \ |
154 self.hooks["compileAllForms"] is not None or \ |
155 self.hooks["generateDialogCode"] is not None: |
155 self.hooks["generateDialogCode"] is not None: |
156 self.menu.addSeparator() |
156 self.menu.addSeparator() |
|
157 if self.hooks["open"] is not None: |
|
158 self.menu.addAction( |
|
159 self.hooksMenuEntries.get("open", self.trUtf8('Open')), |
|
160 self.__openFile) |
157 self.menu.addAction(self.trUtf8('Open'), self.__openFileInEditor) |
161 self.menu.addAction(self.trUtf8('Open'), self.__openFileInEditor) |
158 self.menu.addSeparator() |
162 self.menu.addSeparator() |
159 act = self.menu.addAction(self.trUtf8('Rename file'), self._renameFile) |
163 act = self.menu.addAction(self.trUtf8('Rename file'), self._renameFile) |
160 self.menuActions.append(act) |
164 self.menuActions.append(act) |
161 act = self.menu.addAction(self.trUtf8('Remove from project'), self._removeFile) |
165 act = self.menu.addAction(self.trUtf8('Remove from project'), self._removeFile) |
162 self.menuActions.append(act) |
166 self.menuActions.append(act) |
163 act = self.menu.addAction(self.trUtf8('Delete'), self.__deleteFile) |
167 act = self.menu.addAction(self.trUtf8('Delete'), self.__deleteFile) |
164 self.menuActions.append(act) |
168 self.menuActions.append(act) |
165 self.menu.addSeparator() |
169 self.menu.addSeparator() |
166 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
170 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
167 self.menu.addAction(self.trUtf8('New form...'), self.__newForm) |
171 self.menu.addAction(self.trUtf8('New form...'), self.__newForm) |
168 else: |
172 else: |
169 if self.hooks["newForm"] is not None: |
173 if self.hooks["newForm"] is not None: |
170 self.menu.addAction( |
174 self.menu.addAction( |
171 self.hooksMenuEntries.get("newForm", |
175 self.hooksMenuEntries.get("newForm", |
183 self._collapseAllDirs) |
187 self._collapseAllDirs) |
184 self.menu.addSeparator() |
188 self.menu.addSeparator() |
185 self.menu.addAction(self.trUtf8('Configure...'), self._configure) |
189 self.menu.addAction(self.trUtf8('Configure...'), self._configure) |
186 |
190 |
187 self.backMenu = QMenu(self) |
191 self.backMenu = QMenu(self) |
188 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"] or \ |
192 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"] or \ |
189 self.hooks["compileAllForms"] is not None: |
193 self.hooks["compileAllForms"] is not None: |
190 self.backMenu.addAction(self.trUtf8('Compile all forms'), |
194 self.backMenu.addAction(self.trUtf8('Compile all forms'), |
191 self.__compileAllForms) |
195 self.__compileAllForms) |
192 self.backMenu.addSeparator() |
196 self.backMenu.addSeparator() |
193 self.backMenu.addAction(self.trUtf8('New form...'), self.__newForm) |
197 self.backMenu.addAction(self.trUtf8('New form...'), self.__newForm) |
208 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure) |
212 self.backMenu.addAction(self.trUtf8('Configure...'), self._configure) |
209 self.backMenu.setEnabled(False) |
213 self.backMenu.setEnabled(False) |
210 |
214 |
211 # create the menu for multiple selected files |
215 # create the menu for multiple selected files |
212 self.multiMenu = QMenu(self) |
216 self.multiMenu = QMenu(self) |
213 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
217 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
214 act = self.multiMenu.addAction(self.trUtf8('Compile forms'), |
218 act = self.multiMenu.addAction(self.trUtf8('Compile forms'), |
215 self.__compileSelectedForms) |
219 self.__compileSelectedForms) |
216 self.multiMenu.addSeparator() |
220 self.multiMenu.addSeparator() |
217 self.multiMenu.addAction(self.trUtf8('Open in Qt-Designer'), |
221 self.multiMenu.addAction(self.trUtf8('Open in Qt-Designer'), |
218 self.__openFile) |
222 self.__openFile) |
226 act = self.multiMenu.addAction( |
230 act = self.multiMenu.addAction( |
227 self.hooksMenuEntries.get("compileSelectedForms", |
231 self.hooksMenuEntries.get("compileSelectedForms", |
228 self.trUtf8('Compile forms')), |
232 self.trUtf8('Compile forms')), |
229 self.__compileSelectedForms) |
233 self.__compileSelectedForms) |
230 self.multiMenu.addSeparator() |
234 self.multiMenu.addSeparator() |
|
235 if self.hooks["open"] is not None: |
|
236 self.multiMenu.addAction( |
|
237 self.hooksMenuEntries.get("open", self.trUtf8('Open')), |
|
238 self.__openFile) |
231 self.multiMenu.addAction(self.trUtf8('Open'), self.__openFileInEditor) |
239 self.multiMenu.addAction(self.trUtf8('Open'), self.__openFileInEditor) |
232 self.multiMenu.addSeparator() |
240 self.multiMenu.addSeparator() |
233 act = self.multiMenu.addAction(self.trUtf8('Remove from project'), |
241 act = self.multiMenu.addAction(self.trUtf8('Remove from project'), |
234 self._removeFile) |
242 self._removeFile) |
235 self.multiMenuActions.append(act) |
243 self.multiMenuActions.append(act) |
242 self._collapseAllDirs) |
250 self._collapseAllDirs) |
243 self.multiMenu.addSeparator() |
251 self.multiMenu.addSeparator() |
244 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure) |
252 self.multiMenu.addAction(self.trUtf8('Configure...'), self._configure) |
245 |
253 |
246 self.dirMenu = QMenu(self) |
254 self.dirMenu = QMenu(self) |
247 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
255 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
248 self.dirMenu.addAction(self.trUtf8('Compile all forms'), |
256 self.dirMenu.addAction(self.trUtf8('Compile all forms'), |
249 self.__compileAllForms) |
257 self.__compileAllForms) |
250 self.dirMenu.addSeparator() |
258 self.dirMenu.addSeparator() |
251 else: |
259 else: |
252 if self.hooks["compileAllForms"] is not None: |
260 if self.hooks["compileAllForms"] is not None: |
258 act = self.dirMenu.addAction(self.trUtf8('Remove from project'), self._removeDir) |
266 act = self.dirMenu.addAction(self.trUtf8('Remove from project'), self._removeDir) |
259 self.dirMenuActions.append(act) |
267 self.dirMenuActions.append(act) |
260 act = self.dirMenu.addAction(self.trUtf8('Delete'), self._deleteDirectory) |
268 act = self.dirMenu.addAction(self.trUtf8('Delete'), self._deleteDirectory) |
261 self.dirMenuActions.append(act) |
269 self.dirMenuActions.append(act) |
262 self.dirMenu.addSeparator() |
270 self.dirMenu.addSeparator() |
263 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
271 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
264 self.dirMenu.addAction(self.trUtf8('New form...'), self.__newForm) |
272 self.dirMenu.addAction(self.trUtf8('New form...'), self.__newForm) |
265 else: |
273 else: |
266 if self.hooks["newForm"] is not None: |
274 if self.hooks["newForm"] is not None: |
267 self.dirMenu.addAction( |
275 self.dirMenu.addAction( |
268 self.hooksMenuEntries.get("newForm", |
276 self.hooksMenuEntries.get("newForm", |
280 self._collapseAllDirs) |
288 self._collapseAllDirs) |
281 self.dirMenu.addSeparator() |
289 self.dirMenu.addSeparator() |
282 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure) |
290 self.dirMenu.addAction(self.trUtf8('Configure...'), self._configure) |
283 |
291 |
284 self.dirMultiMenu = QMenu(self) |
292 self.dirMultiMenu = QMenu(self) |
285 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
293 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
286 self.dirMultiMenu.addAction(self.trUtf8('Compile all forms'), |
294 self.dirMultiMenu.addAction(self.trUtf8('Compile all forms'), |
287 self.__compileAllForms) |
295 self.__compileAllForms) |
288 self.dirMultiMenu.addSeparator() |
296 self.dirMultiMenu.addSeparator() |
289 else: |
297 else: |
290 if self.hooks["compileAllForms"] is not None: |
298 if self.hooks["compileAllForms"] is not None: |
427 """ |
435 """ |
428 itmList = self.getSelectedItems() |
436 itmList = self.getSelectedItems() |
429 for itm in itmList[:]: |
437 for itm in itmList[:]: |
430 try: |
438 try: |
431 if isinstance(itm, ProjectBrowserFileItem): |
439 if isinstance(itm, ProjectBrowserFileItem): |
432 self.designerFile.emit(itm.fileName()) |
440 # hook support |
|
441 if self.hooks["open"] is not None: |
|
442 self.hooks["open"](itm.fileName()) |
|
443 else: |
|
444 self.designerFile.emit(itm.fileName()) |
433 except: |
445 except: |
434 pass |
446 pass |
435 |
447 |
436 def __openFileInEditor(self): |
448 def __openFileInEditor(self): |
437 """ |
449 """ |
490 path = os.path.join(self.project.ppath, itm.data(0)) |
502 path = os.path.join(self.project.ppath, itm.data(0)) |
491 |
503 |
492 if self.hooks["newForm"] is not None: |
504 if self.hooks["newForm"] is not None: |
493 self.hooks["newForm"](path) |
505 self.hooks["newForm"](path) |
494 else: |
506 else: |
495 if self.project.getProjectType() in ["Qt4", "E4Plugin", "PySide"]: |
507 if self.project.getProjectType() in ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
496 self.__newUiForm(path) |
508 self.__newUiForm(path) |
497 |
509 |
498 def __newUiForm(self, path): |
510 def __newUiForm(self, path): |
499 """ |
511 """ |
500 Private slot to handle the New Form menu action for Qt-related projects. |
512 Private slot to handle the New Form menu action for Qt-related projects. |
592 return |
604 return |
593 self.compileProc.setReadChannel(QProcess.StandardOutput) |
605 self.compileProc.setReadChannel(QProcess.StandardOutput) |
594 |
606 |
595 while self.compileProc and self.compileProc.canReadLine(): |
607 while self.compileProc and self.compileProc.canReadLine(): |
596 self.buf += str(self.compileProc.readLine(), |
608 self.buf += str(self.compileProc.readLine(), |
597 Preferences.getSystem("IOEncoding"), |
609 "utf-8", 'replace') |
598 'replace') |
|
599 |
610 |
600 def __readStderr(self): |
611 def __readStderr(self): |
601 """ |
612 """ |
602 Private slot to handle the readyReadStandardError signal of the |
613 Private slot to handle the readyReadStandardError signal of the |
603 pyuic/rbuic process. |
614 pyuic/rbuic process. |
689 self.uicompiler = 'pyuic4' |
700 self.uicompiler = 'pyuic4' |
690 if Utilities.isWindowsPlatform(): |
701 if Utilities.isWindowsPlatform(): |
691 uic = self.uicompiler + '.bat' |
702 uic = self.uicompiler + '.bat' |
692 else: |
703 else: |
693 uic = self.uicompiler |
704 uic = self.uicompiler |
|
705 elif self.project.getProjectType() == "PyQt5": |
|
706 self.uicompiler = 'pyuic5' |
|
707 if Utilities.isWindowsPlatform(): |
|
708 uic = self.uicompiler + '.bat' |
|
709 else: |
|
710 uic = self.uicompiler |
694 elif self.project.getProjectType() == "PySide": |
711 elif self.project.getProjectType() == "PySide": |
695 self.uicompiler = 'pyside-uic' |
712 self.uicompiler = 'pyside-uic' |
696 uic = Utilities.generatePySideToolPath(self.uicompiler) |
713 uic = Utilities.generatePySideToolPath(self.uicompiler) |
697 else: |
714 else: |
698 return None |
715 return None |
724 self.compileProc.readyReadStandardOutput.connect(self.__readStdout) |
741 self.compileProc.readyReadStandardOutput.connect(self.__readStdout) |
725 self.compileProc.readyReadStandardError.connect(self.__readStderr) |
742 self.compileProc.readyReadStandardError.connect(self.__readStderr) |
726 |
743 |
727 self.noDialog = noDialog |
744 self.noDialog = noDialog |
728 self.compileProc.start(uic, args) |
745 self.compileProc.start(uic, args) |
729 procStarted = self.compileProc.waitForStarted() |
746 procStarted = self.compileProc.waitForStarted(5000) |
730 if procStarted: |
747 if procStarted: |
731 self.compileRunning = True |
748 self.compileRunning = True |
732 e5App().getObject("ViewManager").enableEditorsCheckFocusIn(False) |
749 e5App().getObject("ViewManager").enableEditorsCheckFocusIn(False) |
733 return self.compileProc |
750 return self.compileProc |
734 else: |
751 else: |
852 """ |
869 """ |
853 if self.hooks["compileChangedForms"] is not None: |
870 if self.hooks["compileChangedForms"] is not None: |
854 self.hooks["compileChangedForms"](self.project.pdata["FORMS"]) |
871 self.hooks["compileChangedForms"](self.project.pdata["FORMS"]) |
855 else: |
872 else: |
856 if self.project.getProjectType() not in \ |
873 if self.project.getProjectType() not in \ |
857 ["Qt4", "Qt4C", "E4Plugin", "PySide"]: |
874 ["Qt4", "PyQt5", "E4Plugin", "PySide"]: |
858 # ignore the request for non Qt projects |
875 # ignore the request for non Qt GUI projects |
859 return |
876 return |
860 |
877 |
861 progress = QProgressDialog(self.trUtf8("Determining changed forms..."), |
878 progress = QProgressDialog(self.trUtf8("Determining changed forms..."), |
862 None, 0, 100) |
879 None, 0, 100) |
863 progress.setMinimumDuration(0) |
880 progress.setMinimumDuration(0) |
924 <li>compileAllForms: takes list of filenames as parameter</li> |
941 <li>compileAllForms: takes list of filenames as parameter</li> |
925 <li>compileSelectedForms: takes list of filenames as parameter</li> |
942 <li>compileSelectedForms: takes list of filenames as parameter</li> |
926 <li>compileChangedForms: takes list of filenames as parameter</li> |
943 <li>compileChangedForms: takes list of filenames as parameter</li> |
927 <li>generateDialogCode: takes filename as parameter</li> |
944 <li>generateDialogCode: takes filename as parameter</li> |
928 <li>newForm: takes full directory path of new file as parameter</li> |
945 <li>newForm: takes full directory path of new file as parameter</li> |
|
946 <li>open: takes a filename as parameter</li> |
929 </ul> |
947 </ul> |
930 |
948 |
931 <b>Note</b>: Filenames are relative to the project directory, if not |
949 <b>Note</b>: Filenames are relative to the project directory, if not |
932 specified differently. |
950 specified differently. |
933 """ |
951 """ |
936 "compileAllForms": None, |
954 "compileAllForms": None, |
937 "compileChangedForms": None, |
955 "compileChangedForms": None, |
938 "compileSelectedForms": None, |
956 "compileSelectedForms": None, |
939 "generateDialogCode": None, |
957 "generateDialogCode": None, |
940 "newForm": None, |
958 "newForm": None, |
|
959 "open": None, |
941 } |
960 } |