eric6/Project/ProjectTranslationsBrowser.py

changeset 7266
d001bc703c29
parent 7229
53054eb5b15a
child 7360
9190402e4505
equal deleted inserted replaced
7265:0665c4d509c9 7266:d001bc703c29
17 from PyQt5.QtWidgets import QDialog, QMenu 17 from PyQt5.QtWidgets import QDialog, QMenu
18 18
19 from E5Gui import E5MessageBox 19 from E5Gui import E5MessageBox
20 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
21 21
22 from .ProjectBrowserModel import ProjectBrowserFileItem, \ 22 from .ProjectBrowserModel import (
23 ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem, \ 23 ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem,
24 ProjectBrowserTranslationType 24 ProjectBrowserDirectoryItem, ProjectBrowserTranslationType
25 )
25 from .ProjectBaseBrowser import ProjectBaseBrowser 26 from .ProjectBaseBrowser import ProjectBaseBrowser
26 27
27 import UI.PixmapCache 28 import UI.PixmapCache
28 29
29 import Preferences 30 import Preferences
54 """ 55 """
55 ProjectBaseBrowser.__init__(self, project, 56 ProjectBaseBrowser.__init__(self, project,
56 ProjectBrowserTranslationType, parent) 57 ProjectBrowserTranslationType, parent)
57 self.isTranslationsBrowser = True 58 self.isTranslationsBrowser = True
58 59
59 self.selectedItemsFilter = \ 60 self.selectedItemsFilter = [ProjectBrowserFileItem,
60 [ProjectBrowserFileItem, ProjectBrowserSimpleDirectoryItem] 61 ProjectBrowserSimpleDirectoryItem]
61 62
62 self.setWindowTitle(self.tr('Translations')) 63 self.setWindowTitle(self.tr('Translations'))
63 64
64 self.setWhatsThis(self.tr( 65 self.setWhatsThis(self.tr(
65 """<b>Project Translations Browser</b>""" 66 """<b>Project Translations Browser</b>"""
98 99
99 self.tsprocBackMenuActions = [] 100 self.tsprocBackMenuActions = []
100 self.qmprocBackMenuActions = [] 101 self.qmprocBackMenuActions = []
101 102
102 self.menu = QMenu(self) 103 self.menu = QMenu(self)
103 if self.project.getProjectType() in \ 104 if self.project.getProjectType() in [
104 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 105 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
105 "PySide", "PySideC", "PySide2", "PySideC2"]: 106 "PySide", "PySideC", "PySide2", "PySideC2"
107 ]:
106 act = self.menu.addAction( 108 act = self.menu.addAction(
107 self.tr('Generate translation'), self.__generateSelected) 109 self.tr('Generate translation'), self.__generateSelected)
108 self.tsMenuActions.append(act) 110 self.tsMenuActions.append(act)
109 self.tsprocMenuActions.append(act) 111 self.tsprocMenuActions.append(act)
110 act = self.menu.addAction( 112 act = self.menu.addAction(
225 self.tr('Copy Path to Clipboard'), self._copyToClipboard) 227 self.tr('Copy Path to Clipboard'), self._copyToClipboard)
226 self.menu.addSeparator() 228 self.menu.addSeparator()
227 self.menu.addAction(self.tr('Configure...'), self._configure) 229 self.menu.addAction(self.tr('Configure...'), self._configure)
228 230
229 self.backMenu = QMenu(self) 231 self.backMenu = QMenu(self)
230 if self.project.getProjectType() in \ 232 if self.project.getProjectType() in [
231 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 233 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
232 "PySide", "PySideC", "PySide2", "PySideC2"]: 234 "PySide", "PySideC", "PySide2", "PySideC2"
235 ]:
233 act = self.backMenu.addAction( 236 act = self.backMenu.addAction(
234 self.tr('Generate all translations'), 237 self.tr('Generate all translations'),
235 self.__generateAll) 238 self.__generateAll)
236 self.tsprocBackMenuActions.append(act) 239 self.tsprocBackMenuActions.append(act)
237 act = self.backMenu.addAction( 240 act = self.backMenu.addAction(
286 self.backMenu.addAction(self.tr('Configure...'), self._configure) 289 self.backMenu.addAction(self.tr('Configure...'), self._configure)
287 self.backMenu.setEnabled(False) 290 self.backMenu.setEnabled(False)
288 291
289 # create the menu for multiple selected files 292 # create the menu for multiple selected files
290 self.multiMenu = QMenu(self) 293 self.multiMenu = QMenu(self)
291 if self.project.getProjectType() in \ 294 if self.project.getProjectType() in [
292 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 295 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
293 "PySide", "PySideC", "PySide2", "PySideC2"]: 296 "PySide", "PySideC", "PySide2", "PySideC2"
297 ]:
294 act = self.multiMenu.addAction( 298 act = self.multiMenu.addAction(
295 self.tr('Generate translations'), 299 self.tr('Generate translations'),
296 self.__generateSelected) 300 self.__generateSelected)
297 self.tsMultiMenuActions.append(act) 301 self.tsMultiMenuActions.append(act)
298 self.tsprocMultiMenuActions.append(act) 302 self.tsprocMultiMenuActions.append(act)
370 self.multiMenuActions.append(act) 374 self.multiMenuActions.append(act)
371 self.multiMenu.addSeparator() 375 self.multiMenu.addSeparator()
372 self.multiMenu.addAction(self.tr('Configure...'), self._configure) 376 self.multiMenu.addAction(self.tr('Configure...'), self._configure)
373 377
374 self.dirMenu = QMenu(self) 378 self.dirMenu = QMenu(self)
375 if self.project.getProjectType() in \ 379 if self.project.getProjectType() in [
376 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 380 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
377 "PySide", "PySideC", "PySide2", "PySideC2"]: 381 "PySide", "PySideC", "PySide2", "PySideC2"
382 ]:
378 act = self.dirMenu.addAction( 383 act = self.dirMenu.addAction(
379 self.tr('Generate all translations'), 384 self.tr('Generate all translations'),
380 self.__generateAll) 385 self.__generateAll)
381 self.tsprocDirMenuActions.append(act) 386 self.tsprocDirMenuActions.append(act)
382 act = self.dirMenu.addAction( 387 act = self.dirMenu.addAction(
488 493
489 def __showContextMenu(self): 494 def __showContextMenu(self):
490 """ 495 """
491 Private slot called by the menu aboutToShow signal. 496 Private slot called by the menu aboutToShow signal.
492 """ 497 """
493 if self.project.getProjectType() in \ 498 if self.project.getProjectType() in [
494 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 499 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
495 "PySide", "PySideC", "PySide2", "PySideC2"]: 500 "PySide", "PySideC", "PySide2", "PySideC2"
501 ]:
496 tsFiles = 0 502 tsFiles = 0
497 qmFiles = 0 503 qmFiles = 0
498 itmList = self.getSelectedItems() 504 itmList = self.getSelectedItems()
499 for itm in itmList[:]: 505 for itm in itmList[:]:
500 if itm.fileName().endswith('.ts'): 506 if itm.fileName().endswith('.ts'):
501 tsFiles += 1 507 tsFiles += 1
502 elif itm.fileName().endswith('.qm'): 508 elif itm.fileName().endswith('.qm'):
503 qmFiles += 1 509 qmFiles += 1
504 if (tsFiles > 0 and qmFiles > 0) or \ 510 if (
505 (tsFiles == 0 and qmFiles == 0): 511 (tsFiles > 0 and qmFiles > 0) or
512 (tsFiles == 0 and qmFiles == 0)
513 ):
506 for act in self.tsMenuActions + self.qmMenuActions: 514 for act in self.tsMenuActions + self.qmMenuActions:
507 act.setEnabled(False) 515 act.setEnabled(False)
508 elif tsFiles > 0: 516 elif tsFiles > 0:
509 for act in self.tsMenuActions: 517 for act in self.tsMenuActions:
510 act.setEnabled(True) 518 act.setEnabled(True)
530 538
531 def __showContextMenuMulti(self): 539 def __showContextMenuMulti(self):
532 """ 540 """
533 Private slot called by the multiMenu aboutToShow signal. 541 Private slot called by the multiMenu aboutToShow signal.
534 """ 542 """
535 if self.project.getProjectType() in \ 543 if self.project.getProjectType() in [
536 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 544 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
537 "PySide", "PySideC", "PySide2", "PySideC2"]: 545 "PySide", "PySideC", "PySide2", "PySideC2"
546 ]:
538 tsFiles = 0 547 tsFiles = 0
539 qmFiles = 0 548 qmFiles = 0
540 itmList = self.getSelectedItems() 549 itmList = self.getSelectedItems()
541 for itm in itmList[:]: 550 for itm in itmList[:]:
542 if itm.fileName().endswith('.ts'): 551 if itm.fileName().endswith('.ts'):
543 tsFiles += 1 552 tsFiles += 1
544 elif itm.fileName().endswith('.qm'): 553 elif itm.fileName().endswith('.qm'):
545 qmFiles += 1 554 qmFiles += 1
546 if (tsFiles > 0 and qmFiles > 0) or \ 555 if (
547 (tsFiles == 0 and qmFiles == 0): 556 (tsFiles > 0 and qmFiles > 0) or
557 (tsFiles == 0 and qmFiles == 0)
558 ):
548 for act in self.tsMultiMenuActions + self.qmMultiMenuActions: 559 for act in self.tsMultiMenuActions + self.qmMultiMenuActions:
549 act.setEnabled(False) 560 act.setEnabled(False)
550 elif tsFiles > 0: 561 elif tsFiles > 0:
551 for act in self.tsMultiMenuActions: 562 for act in self.tsMultiMenuActions:
552 act.setEnabled(True) 563 act.setEnabled(True)
570 581
571 def __showContextMenuDir(self): 582 def __showContextMenuDir(self):
572 """ 583 """
573 Private slot called by the dirMenu aboutToShow signal. 584 Private slot called by the dirMenu aboutToShow signal.
574 """ 585 """
575 if self.project.getProjectType() in \ 586 if self.project.getProjectType() in [
576 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 587 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
577 "PySide", "PySideC", "PySide2", "PySideC2"]: 588 "PySide", "PySideC", "PySide2", "PySideC2"
589 ]:
578 if self.pylupdateProcRunning: 590 if self.pylupdateProcRunning:
579 for act in self.tsprocDirMenuActions: 591 for act in self.tsprocDirMenuActions:
580 act.setEnabled(False) 592 act.setEnabled(False)
581 if self.lreleaseProcRunning: 593 if self.lreleaseProcRunning:
582 for act in self.qmprocDirMenuActions: 594 for act in self.qmprocDirMenuActions:
590 602
591 def __showContextMenuBack(self): 603 def __showContextMenuBack(self):
592 """ 604 """
593 Private slot called by the backMenu aboutToShow signal. 605 Private slot called by the backMenu aboutToShow signal.
594 """ 606 """
595 if self.project.getProjectType() in \ 607 if self.project.getProjectType() in [
596 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 608 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
597 "PySide", "PySideC", "PySide2", "PySideC2"]: 609 "PySide", "PySideC", "PySide2", "PySideC2"
610 ]:
598 if self.pylupdateProcRunning: 611 if self.pylupdateProcRunning:
599 for act in self.tsprocBackMenuActions: 612 for act in self.tsprocBackMenuActions:
600 act.setEnabled(False) 613 act.setEnabled(False)
601 if self.lreleaseProcRunning: 614 if self.lreleaseProcRunning:
602 for act in self.qmprocBackMenuActions: 615 for act in self.qmprocBackMenuActions:
611 Private method to add translation files to the project. 624 Private method to add translation files to the project.
612 """ 625 """
613 itm = self.model().item(self.currentIndex()) 626 itm = self.model().item(self.currentIndex())
614 if isinstance(itm, ProjectBrowserFileItem): 627 if isinstance(itm, ProjectBrowserFileItem):
615 dn = os.path.dirname(itm.fileName()) 628 dn = os.path.dirname(itm.fileName())
616 elif isinstance(itm, ProjectBrowserSimpleDirectoryItem) or \ 629 elif isinstance(
617 isinstance(itm, ProjectBrowserDirectoryItem): 630 itm,
631 (ProjectBrowserSimpleDirectoryItem, ProjectBrowserDirectoryItem)
632 ):
618 dn = itm.dirName() 633 dn = itm.dirName()
619 else: 634 else:
620 dn = None 635 dn = None
621 self.project.addFiles('translation', dn) 636 self.project.addFiles('translation', dn)
622 637
663 """ 678 """
664 itmList = self.getSelectedItems() 679 itmList = self.getSelectedItems()
665 680
666 translationFiles = [itm.fileName() for itm in itmList] 681 translationFiles = [itm.fileName() for itm in itmList]
667 682
668 from UI.DeleteFilesConfirmationDialog import \ 683 from UI.DeleteFilesConfirmationDialog import (
669 DeleteFilesConfirmationDialog 684 DeleteFilesConfirmationDialog
685 )
670 dlg = DeleteFilesConfirmationDialog( 686 dlg = DeleteFilesConfirmationDialog(
671 self.parent(), 687 self.parent(),
672 self.tr("Delete translation files"), 688 self.tr("Delete translation files"),
673 self.tr("Do you really want to delete these translation files" 689 self.tr("Do you really want to delete these translation files"
674 " from the project?"), 690 " from the project?"),
761 if langs: 777 if langs:
762 langs = [self.project.getRelativePath(lang.fileName()) 778 langs = [self.project.getRelativePath(lang.fileName())
763 for lang in langs if lang.fileName().endswith('.ts')] 779 for lang in langs if lang.fileName().endswith('.ts')]
764 else: 780 else:
765 try: 781 try:
766 pattern = self.project.pdata["TRANSLATIONPATTERN"]\ 782 pattern = self.project.pdata["TRANSLATIONPATTERN"].replace(
767 .replace("%language%", "*") 783 "%language%", "*")
768 langs = [lang for lang in self.project.pdata["TRANSLATIONS"] 784 langs = [lang for lang in self.project.pdata["TRANSLATIONS"]
769 if fnmatch.fnmatch(lang, pattern)] 785 if fnmatch.fnmatch(lang, pattern)]
770 except IndexError: 786 except IndexError:
771 langs = [] 787 langs = []
772 if not langs: 788 if not langs:
1002 self.hooks["generateSelectedWithObsolete"](li) 1018 self.hooks["generateSelectedWithObsolete"](li)
1003 return 1019 return
1004 1020
1005 # generate a minimal temporary projectfile suitable for pylupdate 1021 # generate a minimal temporary projectfile suitable for pylupdate
1006 self.__tmpProjects = [] 1022 self.__tmpProjects = []
1007 if self.project.getProjectLanguage() in \ 1023 if self.project.getProjectLanguage() in [
1008 ["Python", "Python2", "Python3"]: 1024 "Python", "Python2", "Python3"
1025 ]:
1009 ok = self.__writeTempProjectFile(langs, [".py"]) 1026 ok = self.__writeTempProjectFile(langs, [".py"])
1010 else: 1027 else:
1011 ok = False 1028 ok = False
1012 if not ok: 1029 if not ok:
1013 return 1030 return
1177 li = [self.project.getRelativePath(lang.fileName()) 1194 li = [self.project.getRelativePath(lang.fileName())
1178 for lang in langs] 1195 for lang in langs]
1179 self.hooks["releaseSelected"](li) 1196 self.hooks["releaseSelected"](li)
1180 return 1197 return
1181 1198
1182 if self.project.getProjectType() in \ 1199 if self.project.getProjectType() in [
1183 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin", 1200 "Qt4", "Qt4C", "PyQt5", "PyQt5C", "E6Plugin",
1184 "PySide", "PySideC", "PySide2", "PySideC2"]: 1201 "PySide", "PySideC", "PySide2", "PySideC2"
1202 ]:
1185 lrelease = os.path.join( 1203 lrelease = os.path.join(
1186 Utilities.getQtBinariesPath(), 1204 Utilities.getQtBinariesPath(),
1187 Utilities.generateQtToolName("lrelease")) 1205 Utilities.generateQtToolName("lrelease"))
1188 else: 1206 else:
1189 return 1207 return
1193 if langs: 1211 if langs:
1194 langs = [self.project.getRelativePath(lang.fileName()) 1212 langs = [self.project.getRelativePath(lang.fileName())
1195 for lang in langs if lang.fileName().endswith('.ts')] 1213 for lang in langs if lang.fileName().endswith('.ts')]
1196 else: 1214 else:
1197 try: 1215 try:
1198 pattern = self.project.pdata["TRANSLATIONPATTERN"]\ 1216 pattern = self.project.pdata["TRANSLATIONPATTERN"].replace(
1199 .replace("%language%", "*") 1217 "%language%", "*")
1200 langs = [lang for lang in self.project.pdata["TRANSLATIONS"] 1218 langs = [lang for lang in self.project.pdata["TRANSLATIONS"]
1201 if fnmatch.fnmatch(lang, pattern)] 1219 if fnmatch.fnmatch(lang, pattern)]
1202 except IndexError: 1220 except IndexError:
1203 langs = [] 1221 langs = []
1204 if not langs: 1222 if not langs:

eric ide

mercurial