Project/ProjectFormsBrowser.py

branch
Py2 comp.
changeset 2791
a9577f248f04
parent 2677
3d4277929fb3
parent 2776
43b8060a4b44
child 3057
10516539f238
equal deleted inserted replaced
2790:6686a3326df8 2791:a9577f248f04
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 }

eric ide

mercurial