Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py

changeset 3190
a9a94491c4fd
parent 3160
209a07d7e401
child 3484
645c12de6b0c
equal deleted inserted replaced
3189:9a21c547de5f 3190:a9a94491c4fd
55 self.__upToDateColumn = 8 55 self.__upToDateColumn = 8
56 self.__pathColumn = 12 56 self.__pathColumn = 12
57 self.__lastColumn = self.statusList.columnCount() 57 self.__lastColumn = self.statusList.columnCount()
58 58
59 self.refreshButton = \ 59 self.refreshButton = \
60 self.buttonBox.addButton(self.trUtf8("Refresh"), 60 self.buttonBox.addButton(self.tr("Refresh"),
61 QDialogButtonBox.ActionRole) 61 QDialogButtonBox.ActionRole)
62 self.refreshButton.setToolTip( 62 self.refreshButton.setToolTip(
63 self.trUtf8("Press to refresh the status display")) 63 self.tr("Press to refresh the status display"))
64 self.refreshButton.setEnabled(False) 64 self.refreshButton.setEnabled(False)
65 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) 65 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False)
66 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) 66 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
67 67
68 self.diff = None 68 self.diff = None
76 self.statusList.header().hideSection(self.__changelistColumn) 76 self.statusList.header().hideSection(self.__changelistColumn)
77 77
78 self.menuactions = [] 78 self.menuactions = []
79 self.menu = QMenu() 79 self.menu = QMenu()
80 self.menuactions.append(self.menu.addAction( 80 self.menuactions.append(self.menu.addAction(
81 self.trUtf8("Commit changes to repository..."), self.__commit)) 81 self.tr("Commit changes to repository..."), self.__commit))
82 self.menuactions.append(self.menu.addAction( 82 self.menuactions.append(self.menu.addAction(
83 self.trUtf8("Select all for commit"), self.__commitSelectAll)) 83 self.tr("Select all for commit"), self.__commitSelectAll))
84 self.menuactions.append(self.menu.addAction( 84 self.menuactions.append(self.menu.addAction(
85 self.trUtf8("Deselect all from commit"), self.__commitDeselectAll)) 85 self.tr("Deselect all from commit"), self.__commitDeselectAll))
86 self.menu.addSeparator() 86 self.menu.addSeparator()
87 self.menuactions.append(self.menu.addAction( 87 self.menuactions.append(self.menu.addAction(
88 self.trUtf8("Add to repository"), self.__add)) 88 self.tr("Add to repository"), self.__add))
89 self.menuactions.append(self.menu.addAction( 89 self.menuactions.append(self.menu.addAction(
90 self.trUtf8("Show differences"), self.__diff)) 90 self.tr("Show differences"), self.__diff))
91 self.menuactions.append(self.menu.addAction( 91 self.menuactions.append(self.menu.addAction(
92 self.trUtf8("Show differences side-by-side"), self.__sbsDiff)) 92 self.tr("Show differences side-by-side"), self.__sbsDiff))
93 self.menuactions.append(self.menu.addAction( 93 self.menuactions.append(self.menu.addAction(
94 self.trUtf8("Revert changes"), self.__revert)) 94 self.tr("Revert changes"), self.__revert))
95 self.menuactions.append(self.menu.addAction( 95 self.menuactions.append(self.menu.addAction(
96 self.trUtf8("Restore missing"), self.__restoreMissing)) 96 self.tr("Restore missing"), self.__restoreMissing))
97 if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0): 97 if pysvn.svn_version >= (1, 5, 0) and pysvn.version >= (1, 6, 0):
98 self.menu.addSeparator() 98 self.menu.addSeparator()
99 self.menuactions.append(self.menu.addAction( 99 self.menuactions.append(self.menu.addAction(
100 self.trUtf8("Add to Changelist"), self.__addToChangelist)) 100 self.tr("Add to Changelist"), self.__addToChangelist))
101 self.menuactions.append(self.menu.addAction( 101 self.menuactions.append(self.menu.addAction(
102 self.trUtf8("Remove from Changelist"), 102 self.tr("Remove from Changelist"),
103 self.__removeFromChangelist)) 103 self.__removeFromChangelist))
104 if self.vcs.version >= (1, 2, 0): 104 if self.vcs.version >= (1, 2, 0):
105 self.menu.addSeparator() 105 self.menu.addSeparator()
106 self.menuactions.append( 106 self.menuactions.append(
107 self.menu.addAction(self.trUtf8("Lock"), self.__lock)) 107 self.menu.addAction(self.tr("Lock"), self.__lock))
108 self.menuactions.append( 108 self.menuactions.append(
109 self.menu.addAction(self.trUtf8("Unlock"), self.__unlock)) 109 self.menu.addAction(self.tr("Unlock"), self.__unlock))
110 self.menuactions.append(self.menu.addAction( 110 self.menuactions.append(self.menu.addAction(
111 self.trUtf8("Break lock"), 111 self.tr("Break lock"),
112 self.__breakLock)) 112 self.__breakLock))
113 self.menuactions.append(self.menu.addAction( 113 self.menuactions.append(self.menu.addAction(
114 self.trUtf8("Steal lock"), 114 self.tr("Steal lock"),
115 self.__stealLock)) 115 self.__stealLock))
116 self.menu.addSeparator() 116 self.menu.addSeparator()
117 self.menuactions.append(self.menu.addAction( 117 self.menuactions.append(self.menu.addAction(
118 self.trUtf8("Adjust column sizes"), 118 self.tr("Adjust column sizes"),
119 self.__resizeColumns)) 119 self.__resizeColumns))
120 for act in self.menuactions: 120 for act in self.menuactions:
121 act.setEnabled(False) 121 act.setEnabled(False)
122 122
123 self.statusList.setContextMenuPolicy(Qt.CustomContextMenu) 123 self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
124 self.statusList.customContextMenuRequested.connect( 124 self.statusList.customContextMenuRequested.connect(
125 self.__showContextMenu) 125 self.__showContextMenu)
126 126
127 self.modifiedIndicators = [ 127 self.modifiedIndicators = [
128 self.trUtf8(svnStatusMap[pysvn.wc_status_kind.added]), 128 self.tr(svnStatusMap[pysvn.wc_status_kind.added]),
129 self.trUtf8(svnStatusMap[pysvn.wc_status_kind.deleted]), 129 self.tr(svnStatusMap[pysvn.wc_status_kind.deleted]),
130 self.trUtf8(svnStatusMap[pysvn.wc_status_kind.modified]) 130 self.tr(svnStatusMap[pysvn.wc_status_kind.modified])
131 ] 131 ]
132 132
133 self.missingIndicators = [ 133 self.missingIndicators = [
134 self.trUtf8(svnStatusMap[pysvn.wc_status_kind.missing]), 134 self.tr(svnStatusMap[pysvn.wc_status_kind.missing]),
135 ] 135 ]
136 136
137 self.unversionedIndicators = [ 137 self.unversionedIndicators = [
138 self.trUtf8(svnStatusMap[pysvn.wc_status_kind.unversioned]), 138 self.tr(svnStatusMap[pysvn.wc_status_kind.unversioned]),
139 ] 139 ]
140 140
141 self.lockedIndicators = [ 141 self.lockedIndicators = [
142 self.trUtf8('locked'), 142 self.tr('locked'),
143 ] 143 ]
144 144
145 self.stealBreakLockIndicators = [ 145 self.stealBreakLockIndicators = [
146 self.trUtf8('other lock'), 146 self.tr('other lock'),
147 self.trUtf8('stolen lock'), 147 self.tr('stolen lock'),
148 self.trUtf8('broken lock'), 148 self.tr('broken lock'),
149 ] 149 ]
150 150
151 self.unlockedIndicators = [ 151 self.unlockedIndicators = [
152 self.trUtf8('not locked'), 152 self.tr('not locked'),
153 ] 153 ]
154 154
155 self.lockinfo = { 155 self.lockinfo = {
156 ' ': self.trUtf8('not locked'), 156 ' ': self.tr('not locked'),
157 'L': self.trUtf8('locked'), 157 'L': self.tr('locked'),
158 'O': self.trUtf8('other lock'), 158 'O': self.tr('other lock'),
159 'S': self.trUtf8('stolen lock'), 159 'S': self.tr('stolen lock'),
160 'B': self.trUtf8('broken lock'), 160 'B': self.tr('broken lock'),
161 } 161 }
162 self.yesno = [ 162 self.yesno = [
163 self.trUtf8('no'), 163 self.tr('no'),
164 self.trUtf8('yes'), 164 self.tr('yes'),
165 ] 165 ]
166 166
167 self.client = self.vcs.getClient() 167 self.client = self.vcs.getClient()
168 self.client.callback_cancel = \ 168 self.client.callback_cancel = \
169 self._clientCancelCallback 169 self._clientCancelCallback
207 @param revision revision (integer) 207 @param revision revision (integer)
208 @param change revision of last change (integer) 208 @param change revision of last change (integer)
209 @param author author of the last change (string) 209 @param author author of the last change (string)
210 @param path path of the file or directory (string) 210 @param path path of the file or directory (string)
211 """ 211 """
212 statusText = self.trUtf8(svnStatusMap[status]) 212 statusText = self.tr(svnStatusMap[status])
213 itm = QTreeWidgetItem(self.statusList) 213 itm = QTreeWidgetItem(self.statusList)
214 itm.setData(0, Qt.DisplayRole, "") 214 itm.setData(0, Qt.DisplayRole, "")
215 itm.setData(1, Qt.DisplayRole, changelist) 215 itm.setData(1, Qt.DisplayRole, changelist)
216 itm.setData(2, Qt.DisplayRole, statusText) 216 itm.setData(2, Qt.DisplayRole, statusText)
217 itm.setData(3, Qt.DisplayRole, self.trUtf8(svnStatusMap[propStatus])) 217 itm.setData(3, Qt.DisplayRole, self.tr(svnStatusMap[propStatus]))
218 itm.setData(4, Qt.DisplayRole, self.yesno[locked]) 218 itm.setData(4, Qt.DisplayRole, self.yesno[locked])
219 itm.setData(5, Qt.DisplayRole, self.yesno[history]) 219 itm.setData(5, Qt.DisplayRole, self.yesno[history])
220 itm.setData(6, Qt.DisplayRole, self.yesno[switched]) 220 itm.setData(6, Qt.DisplayRole, self.yesno[switched])
221 itm.setData(7, Qt.DisplayRole, self.lockinfo[lockinfo]) 221 itm.setData(7, Qt.DisplayRole, self.lockinfo[lockinfo])
222 itm.setData(8, Qt.DisplayRole, self.yesno[uptodate]) 222 itm.setData(8, Qt.DisplayRole, self.yesno[uptodate])
277 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) 277 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
278 QApplication.processEvents() 278 QApplication.processEvents()
279 279
280 self.args = fn 280 self.args = fn
281 281
282 self.setWindowTitle(self.trUtf8('Subversion Status')) 282 self.setWindowTitle(self.tr('Subversion Status'))
283 self.activateWindow() 283 self.activateWindow()
284 self.raise_() 284 self.raise_()
285 285
286 if isinstance(fn, list): 286 if isinstance(fn, list):
287 self.dname, fnames = self.vcs.splitPathList(fn) 287 self.dname, fnames = self.vcs.splitPathList(fn)
430 self.refreshButton.setEnabled(True) 430 self.refreshButton.setEnabled(True)
431 self.__updateButtons() 431 self.__updateButtons()
432 self.__updateCommitButton() 432 self.__updateCommitButton()
433 433
434 self.__statusFilters.sort() 434 self.__statusFilters.sort()
435 self.__statusFilters.insert(0, "<{0}>".format(self.trUtf8("all"))) 435 self.__statusFilters.insert(0, "<{0}>".format(self.tr("all")))
436 self.statusFilterCombo.addItems(self.__statusFilters) 436 self.statusFilterCombo.addItems(self.__statusFilters)
437 437
438 for act in self.menuactions: 438 for act in self.menuactions:
439 act.setEnabled(True) 439 act.setEnabled(True)
440 440
508 """ 508 """
509 Private slot to react to the selection of a status filter. 509 Private slot to react to the selection of a status filter.
510 510
511 @param txt selected status filter (string) 511 @param txt selected status filter (string)
512 """ 512 """
513 if txt == "<{0}>".format(self.trUtf8("all")): 513 if txt == "<{0}>".format(self.tr("all")):
514 for topIndex in range(self.statusList.topLevelItemCount()): 514 for topIndex in range(self.statusList.topLevelItemCount()):
515 topItem = self.statusList.topLevelItem(topIndex) 515 topItem = self.statusList.topLevelItem(topIndex)
516 topItem.setHidden(False) 516 topItem.setHidden(False)
517 else: 517 else:
518 for topIndex in range(self.statusList.topLevelItemCount()): 518 for topIndex in range(self.statusList.topLevelItemCount()):
598 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 598 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
599 for itm in self.__getCommitableItems()] 599 for itm in self.__getCommitableItems()]
600 if not names: 600 if not names:
601 E5MessageBox.information( 601 E5MessageBox.information(
602 self, 602 self,
603 self.trUtf8("Commit"), 603 self.tr("Commit"),
604 self.trUtf8("""There are no entries selected to be""" 604 self.tr("""There are no entries selected to be"""
605 """ committed.""")) 605 """ committed."""))
606 return 606 return
607 607
608 if Preferences.getVCS("AutoSaveFiles"): 608 if Preferences.getVCS("AutoSaveFiles"):
609 vm = e5App().getObject("ViewManager") 609 vm = e5App().getObject("ViewManager")
610 for name in names: 610 for name in names:
638 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 638 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
639 for itm in self.__getUnversionedItems()] 639 for itm in self.__getUnversionedItems()]
640 if not names: 640 if not names:
641 E5MessageBox.information( 641 E5MessageBox.information(
642 self, 642 self,
643 self.trUtf8("Add"), 643 self.tr("Add"),
644 self.trUtf8("""There are no unversioned entries""" 644 self.tr("""There are no unversioned entries"""
645 """ available/selected.""")) 645 """ available/selected."""))
646 return 646 return
647 647
648 self.vcs.vcsAdd(names) 648 self.vcs.vcsAdd(names)
649 self.on_refreshButton_clicked() 649 self.on_refreshButton_clicked()
650 650
660 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 660 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
661 for itm in self.__getModifiedItems()] 661 for itm in self.__getModifiedItems()]
662 if not names: 662 if not names:
663 E5MessageBox.information( 663 E5MessageBox.information(
664 self, 664 self,
665 self.trUtf8("Revert"), 665 self.tr("Revert"),
666 self.trUtf8("""There are no uncommitted changes""" 666 self.tr("""There are no uncommitted changes"""
667 """ available/selected.""")) 667 """ available/selected."""))
668 return 668 return
669 669
670 self.vcs.vcsRevert(names) 670 self.vcs.vcsRevert(names)
671 self.raise_() 671 self.raise_()
672 self.activateWindow() 672 self.activateWindow()
684 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 684 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
685 for itm in self.__getMissingItems()] 685 for itm in self.__getMissingItems()]
686 if not names: 686 if not names:
687 E5MessageBox.information( 687 E5MessageBox.information(
688 self, 688 self,
689 self.trUtf8("Revert"), 689 self.tr("Revert"),
690 self.trUtf8("""There are no missing entries""" 690 self.tr("""There are no missing entries"""
691 """ available/selected.""")) 691 """ available/selected."""))
692 return 692 return
693 693
694 self.vcs.vcsRevert(names) 694 self.vcs.vcsRevert(names)
695 self.on_refreshButton_clicked() 695 self.on_refreshButton_clicked()
696 self.vcs.checkVCSStatus() 696 self.vcs.checkVCSStatus()
702 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 702 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
703 for itm in self.__getModifiedItems()] 703 for itm in self.__getModifiedItems()]
704 if not names: 704 if not names:
705 E5MessageBox.information( 705 E5MessageBox.information(
706 self, 706 self,
707 self.trUtf8("Differences"), 707 self.tr("Differences"),
708 self.trUtf8("""There are no uncommitted changes""" 708 self.tr("""There are no uncommitted changes"""
709 """ available/selected.""")) 709 """ available/selected."""))
710 return 710 return
711 711
712 if self.diff is None: 712 if self.diff is None:
713 from .SvnDiffDialog import SvnDiffDialog 713 from .SvnDiffDialog import SvnDiffDialog
714 self.diff = SvnDiffDialog(self.vcs) 714 self.diff = SvnDiffDialog(self.vcs)
723 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 723 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
724 for itm in self.__getModifiedItems()] 724 for itm in self.__getModifiedItems()]
725 if not names: 725 if not names:
726 E5MessageBox.information( 726 E5MessageBox.information(
727 self, 727 self,
728 self.trUtf8("Side-by-Side Diff"), 728 self.tr("Side-by-Side Diff"),
729 self.trUtf8("""There are no uncommitted changes""" 729 self.tr("""There are no uncommitted changes"""
730 """ available/selected.""")) 730 """ available/selected."""))
731 return 731 return
732 elif len(names) > 1: 732 elif len(names) > 1:
733 E5MessageBox.information( 733 E5MessageBox.information(
734 self, 734 self,
735 self.trUtf8("Side-by-Side Diff"), 735 self.tr("Side-by-Side Diff"),
736 self.trUtf8("""Only one file with uncommitted changes""" 736 self.tr("""Only one file with uncommitted changes"""
737 """ must be selected.""")) 737 """ must be selected."""))
738 return 738 return
739 739
740 self.vcs.svnSbsDiff(names[0]) 740 self.vcs.svnSbsDiff(names[0])
741 741
742 def __lock(self): 742 def __lock(self):
746 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 746 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
747 for itm in self.__getLockActionItems(self.unlockedIndicators)] 747 for itm in self.__getLockActionItems(self.unlockedIndicators)]
748 if not names: 748 if not names:
749 E5MessageBox.information( 749 E5MessageBox.information(
750 self, 750 self,
751 self.trUtf8("Lock"), 751 self.tr("Lock"),
752 self.trUtf8("""There are no unlocked files""" 752 self.tr("""There are no unlocked files"""
753 """ available/selected.""")) 753 """ available/selected."""))
754 return 754 return
755 755
756 self.vcs.svnLock(names, parent=self) 756 self.vcs.svnLock(names, parent=self)
757 self.on_refreshButton_clicked() 757 self.on_refreshButton_clicked()
758 758
763 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 763 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
764 for itm in self.__getLockActionItems(self.lockedIndicators)] 764 for itm in self.__getLockActionItems(self.lockedIndicators)]
765 if not names: 765 if not names:
766 E5MessageBox.information( 766 E5MessageBox.information(
767 self, 767 self,
768 self.trUtf8("Unlock"), 768 self.tr("Unlock"),
769 self.trUtf8("""There are no locked files""" 769 self.tr("""There are no locked files"""
770 """ available/selected.""")) 770 """ available/selected."""))
771 return 771 return
772 772
773 self.vcs.svnUnlock(names, parent=self) 773 self.vcs.svnUnlock(names, parent=self)
774 self.on_refreshButton_clicked() 774 self.on_refreshButton_clicked()
775 775
781 for itm in self.__getLockActionItems( 781 for itm in self.__getLockActionItems(
782 self.stealBreakLockIndicators)] 782 self.stealBreakLockIndicators)]
783 if not names: 783 if not names:
784 E5MessageBox.information( 784 E5MessageBox.information(
785 self, 785 self,
786 self.trUtf8("Break Lock"), 786 self.tr("Break Lock"),
787 self.trUtf8("""There are no locked files""" 787 self.tr("""There are no locked files"""
788 """ available/selected.""")) 788 """ available/selected."""))
789 return 789 return
790 790
791 self.vcs.svnUnlock(names, parent=self, breakIt=True) 791 self.vcs.svnUnlock(names, parent=self, breakIt=True)
792 self.on_refreshButton_clicked() 792 self.on_refreshButton_clicked()
793 793
799 for itm in self.__getLockActionItems( 799 for itm in self.__getLockActionItems(
800 self.stealBreakLockIndicators)] 800 self.stealBreakLockIndicators)]
801 if not names: 801 if not names:
802 E5MessageBox.information( 802 E5MessageBox.information(
803 self, 803 self,
804 self.trUtf8("Steal Lock"), 804 self.tr("Steal Lock"),
805 self.trUtf8("""There are no locked files""" 805 self.tr("""There are no locked files"""
806 """ available/selected.""")) 806 """ available/selected."""))
807 return 807 return
808 808
809 self.vcs.svnLock(names, parent=self, stealIt=True) 809 self.vcs.svnLock(names, parent=self, stealIt=True)
810 self.on_refreshButton_clicked() 810 self.on_refreshButton_clicked()
811 811
816 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 816 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
817 for itm in self.__getNonChangelistItems()] 817 for itm in self.__getNonChangelistItems()]
818 if not names: 818 if not names:
819 E5MessageBox.information( 819 E5MessageBox.information(
820 self, 820 self,
821 self.trUtf8("Remove from Changelist"), 821 self.tr("Remove from Changelist"),
822 self.trUtf8( 822 self.tr(
823 """There are no files available/selected not """ 823 """There are no files available/selected not """
824 """belonging to a changelist.""" 824 """belonging to a changelist."""
825 ) 825 )
826 ) 826 )
827 return 827 return
835 names = [os.path.join(self.dname, itm.text(self.__pathColumn)) 835 names = [os.path.join(self.dname, itm.text(self.__pathColumn))
836 for itm in self.__getChangelistItems()] 836 for itm in self.__getChangelistItems()]
837 if not names: 837 if not names:
838 E5MessageBox.information( 838 E5MessageBox.information(
839 self, 839 self,
840 self.trUtf8("Remove from Changelist"), 840 self.tr("Remove from Changelist"),
841 self.trUtf8( 841 self.tr(
842 """There are no files available/selected belonging""" 842 """There are no files available/selected belonging"""
843 """ to a changelist.""" 843 """ to a changelist."""
844 ) 844 )
845 ) 845 )
846 return 846 return

eric ide

mercurial