Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py

branch
Py2 comp.
changeset 3484
645c12de6b0c
parent 3178
f25fc1364c88
parent 3359
6b6c224d67d6
child 3515
1b8381afe38f
equal deleted inserted replaced
3456:96232974dcdb 3484:645c12de6b0c
38 @param name name of this object (string) 38 @param name name of this object (string)
39 """ 39 """
40 VcsProjectBrowserHelper.__init__(self, vcsObject, browserObject, 40 VcsProjectBrowserHelper.__init__(self, vcsObject, browserObject,
41 projectObject, isTranslationsBrowser, 41 projectObject, isTranslationsBrowser,
42 parent, name) 42 parent, name)
43
44 # instantiate the extensions
45 from .ShelveExtension.ProjectBrowserHelper import \
46 ShelveProjectBrowserHelper
47 from .LargefilesExtension.ProjectBrowserHelper import \
48 LargefilesProjectBrowserHelper
49 self.__extensions = {
50 "shelve": ShelveProjectBrowserHelper(
51 vcsObject, browserObject, projectObject),
52 "largefiles": LargefilesProjectBrowserHelper(
53 vcsObject, browserObject, projectObject),
54 }
55
56 self.__extensionMenuTitles = {}
57 for extension in self.__extensions:
58 self.__extensionMenuTitles[
59 self.__extensions[extension].menuTitle()] = extension
60 self.__extensionMenus = {}
61 for extension in self.__extensions:
62 self.__extensionMenus[extension] = \
63 self.__extensions[extension].initMenus()
64
65 def __showExtensionMenu(self, key, controlled):
66 """
67 Private slot showing the extensions menu.
68
69 @param key menu key (string, one of 'mainMenu', 'multiMenu',
70 'backMenu', 'dirMenu' or 'dirMultiMenu')
71 @param controlled flag indicating to show the menu for a
72 version controlled entry or a non-version controlled entry
73 (boolean)
74 """
75 for extensionName in self.__extensionMenus:
76 if key in self.__extensionMenus[extensionName]:
77 self.__extensionMenus[extensionName][key].setEnabled(
78 self.vcs.isExtensionActive(extensionName))
79 if self.__extensionMenus[extensionName][key].isEnabled():
80 # adjust individual extension menu entries
81 self.__extensions[extensionName].showExtensionMenu(
82 key, controlled)
83 if (not self.__extensionMenus[extensionName][key].isEnabled()
84 and self.__extensionMenus[extensionName][key]
85 .isTearOffMenuVisible()):
86 self.__extensionMenus[extensionName][key].hideTearOffMenu()
43 87
44 def showContextMenu(self, menu, standardItems): 88 def showContextMenu(self, menu, standardItems):
45 """ 89 """
46 Slot called before the context menu is shown. 90 Slot called before the context menu is shown.
47 91
51 @param menu reference to the menu to be shown 95 @param menu reference to the menu to be shown
52 @param standardItems array of standard items that need 96 @param standardItems array of standard items that need
53 activation/deactivation depending on the overall VCS status 97 activation/deactivation depending on the overall VCS status
54 """ 98 """
55 if self.browser.currentItem().data(1) == self.vcs.vcsName(): 99 if self.browser.currentItem().data(1) == self.vcs.vcsName():
100 controlled = True
56 for act in self.vcsMenuActions: 101 for act in self.vcsMenuActions:
57 act.setEnabled(True) 102 act.setEnabled(True)
58 for act in self.vcsAddMenuActions: 103 for act in self.vcsAddMenuActions:
59 act.setEnabled(False) 104 act.setEnabled(False)
60 for act in standardItems: 105 for act in standardItems:
61 act.setEnabled(False) 106 act.setEnabled(False)
62 if not hasattr(self.browser.currentItem(), 'fileName'): 107 if not hasattr(self.browser.currentItem(), 'fileName'):
63 self.annotateAct.setEnabled(False) 108 self.annotateAct.setEnabled(False)
64 else: 109 else:
110 controlled = False
65 for act in self.vcsMenuActions: 111 for act in self.vcsMenuActions:
66 act.setEnabled(False) 112 act.setEnabled(False)
67 for act in self.vcsAddMenuActions: 113 for act in self.vcsAddMenuActions:
68 act.setEnabled(True) 114 act.setEnabled(True)
69 for act in standardItems: 115 for act in standardItems:
70 act.setEnabled(True) 116 act.setEnabled(True)
117 self.__showExtensionMenu("mainMenu", controlled)
71 118
72 def showContextMenuMulti(self, menu, standardItems): 119 def showContextMenuMulti(self, menu, standardItems):
73 """ 120 """
74 Slot called before the context menu (multiple selections) is shown. 121 Slot called before the context menu (multiple selections) is shown.
75 122
87 for itm in items: 134 for itm in items:
88 if itm.data(1) == vcsName: 135 if itm.data(1) == vcsName:
89 vcsItems += 1 136 vcsItems += 1
90 137
91 if vcsItems > 0: 138 if vcsItems > 0:
139 controlled = True
92 if vcsItems != len(items): 140 if vcsItems != len(items):
93 for act in self.vcsMultiMenuActions: 141 for act in self.vcsMultiMenuActions:
94 act.setEnabled(False) 142 act.setEnabled(False)
95 else: 143 else:
96 for act in self.vcsMultiMenuActions: 144 for act in self.vcsMultiMenuActions:
98 for act in self.vcsAddMultiMenuActions: 146 for act in self.vcsAddMultiMenuActions:
99 act.setEnabled(False) 147 act.setEnabled(False)
100 for act in standardItems: 148 for act in standardItems:
101 act.setEnabled(False) 149 act.setEnabled(False)
102 else: 150 else:
151 controlled = False
103 for act in self.vcsMultiMenuActions: 152 for act in self.vcsMultiMenuActions:
104 act.setEnabled(False) 153 act.setEnabled(False)
105 for act in self.vcsAddMultiMenuActions: 154 for act in self.vcsAddMultiMenuActions:
106 act.setEnabled(True) 155 act.setEnabled(True)
107 for act in standardItems: 156 for act in standardItems:
108 act.setEnabled(True) 157 act.setEnabled(True)
158 self.__showExtensionMenu("multiMenu", controlled)
109 159
110 def showContextMenuDir(self, menu, standardItems): 160 def showContextMenuDir(self, menu, standardItems):
111 """ 161 """
112 Slot called before the context menu is shown. 162 Slot called before the context menu is shown.
113 163
117 @param menu reference to the menu to be shown 167 @param menu reference to the menu to be shown
118 @param standardItems array of standard items that need 168 @param standardItems array of standard items that need
119 activation/deactivation depending on the overall VCS status 169 activation/deactivation depending on the overall VCS status
120 """ 170 """
121 if self.browser.currentItem().data(1) == self.vcs.vcsName(): 171 if self.browser.currentItem().data(1) == self.vcs.vcsName():
172 controlled = True
122 for act in self.vcsDirMenuActions: 173 for act in self.vcsDirMenuActions:
123 act.setEnabled(True) 174 act.setEnabled(True)
124 for act in self.vcsAddDirMenuActions: 175 for act in self.vcsAddDirMenuActions:
125 act.setEnabled(False) 176 act.setEnabled(False)
126 for act in standardItems: 177 for act in standardItems:
127 act.setEnabled(False) 178 act.setEnabled(False)
128 else: 179 else:
180 controlled = False
129 for act in self.vcsDirMenuActions: 181 for act in self.vcsDirMenuActions:
130 act.setEnabled(False) 182 act.setEnabled(False)
131 for act in self.vcsAddDirMenuActions: 183 for act in self.vcsAddDirMenuActions:
132 act.setEnabled(True) 184 act.setEnabled(True)
133 for act in standardItems: 185 for act in standardItems:
134 act.setEnabled(True) 186 act.setEnabled(True)
187 self.__showExtensionMenu("dirMenu", controlled)
135 188
136 def showContextMenuDirMulti(self, menu, standardItems): 189 def showContextMenuDirMulti(self, menu, standardItems):
137 """ 190 """
138 Slot called before the context menu is shown. 191 Slot called before the context menu is shown.
139 192
151 for itm in items: 204 for itm in items:
152 if itm.data(1) == vcsName: 205 if itm.data(1) == vcsName:
153 vcsItems += 1 206 vcsItems += 1
154 207
155 if vcsItems > 0: 208 if vcsItems > 0:
209 controlled = True
156 if vcsItems != len(items): 210 if vcsItems != len(items):
157 for act in self.vcsDirMultiMenuActions: 211 for act in self.vcsDirMultiMenuActions:
158 act.setEnabled(False) 212 act.setEnabled(False)
159 else: 213 else:
160 for act in self.vcsDirMultiMenuActions: 214 for act in self.vcsDirMultiMenuActions:
162 for act in self.vcsAddDirMultiMenuActions: 216 for act in self.vcsAddDirMultiMenuActions:
163 act.setEnabled(False) 217 act.setEnabled(False)
164 for act in standardItems: 218 for act in standardItems:
165 act.setEnabled(False) 219 act.setEnabled(False)
166 else: 220 else:
221 controlled = False
167 for act in self.vcsDirMultiMenuActions: 222 for act in self.vcsDirMultiMenuActions:
168 act.setEnabled(False) 223 act.setEnabled(False)
169 for act in self.vcsAddDirMultiMenuActions: 224 for act in self.vcsAddDirMultiMenuActions:
170 act.setEnabled(True) 225 act.setEnabled(True)
171 for act in standardItems: 226 for act in standardItems:
172 act.setEnabled(True) 227 act.setEnabled(True)
173 228 self.__showExtensionMenu("dirMultiMenu", controlled)
229
174 ########################################################################### 230 ###########################################################################
175 # Protected menu generation methods below 231 ## Private menu generation methods below
176 ########################################################################### 232 ###########################################################################
177 233
234 def __addExtensionsMenu(self, menu, key):
235 """
236 Private method to add an extension menu entry.
237
238 @param menu menu to add it to (QMenu)
239 @param key menu key (string, one of 'mainMenu', 'multiMenu',
240 'backMenu', 'dirMenu' or 'dirMultiMenu')
241 @return reference to the menu action (QAction)
242 """
243 act = None
244 if key in ['mainMenu', 'multiMenu', 'backMenu', 'dirMenu',
245 'dirMultiMenu']:
246 extensionsMenu = QMenu(self.tr("Extensions"), menu)
247 extensionsMenu.setTearOffEnabled(True)
248 for extensionMenuTitle in sorted(self.__extensionMenuTitles):
249 extensionName = self.__extensionMenuTitles[extensionMenuTitle]
250 if key in self.__extensionMenus[extensionName]:
251 extensionsMenu.addMenu(
252 self.__extensionMenus[extensionName][key])
253 if not extensionsMenu.isEmpty():
254 if not menu.isEmpty():
255 menu.addSeparator()
256 act = menu.addMenu(extensionsMenu)
257 return act
258
259 ###########################################################################
260 ## Protected menu generation methods below
261 ###########################################################################
262
178 def _addVCSMenu(self, mainMenu): 263 def _addVCSMenu(self, mainMenu):
179 """ 264 """
180 Protected method used to add the VCS menu to all project browsers. 265 Protected method used to add the VCS menu to all project browsers.
181 266
182 @param mainMenu reference to the menu to be amended 267 @param mainMenu reference to the menu to be amended
183 """ 268 """
184 self.vcsMenuActions = [] 269 self.vcsMenuActions = []
185 self.vcsAddMenuActions = [] 270 self.vcsAddMenuActions = []
186 271
187 menu = QMenu(self.trUtf8("Version Control")) 272 menu = QMenu(self.tr("Version Control"))
188 273
189 act = menu.addAction( 274 act = menu.addAction(
190 UI.PixmapCache.getIcon( 275 UI.PixmapCache.getIcon(
191 os.path.join("VcsPlugins", "vcsMercurial", "icons", 276 os.path.join("VcsPlugins", "vcsMercurial", "icons",
192 "mercurial.png")), 277 "mercurial.png")),
196 act.setFont(font) 281 act.setFont(font)
197 menu.addSeparator() 282 menu.addSeparator()
198 283
199 act = menu.addAction( 284 act = menu.addAction(
200 UI.PixmapCache.getIcon("vcsCommit.png"), 285 UI.PixmapCache.getIcon("vcsCommit.png"),
201 self.trUtf8('Commit changes to repository...'), 286 self.tr('Commit changes to repository...'),
202 self._VCSCommit) 287 self._VCSCommit)
203 self.vcsMenuActions.append(act) 288 self.vcsMenuActions.append(act)
289 self.__addExtensionsMenu(menu, 'mainMenu')
204 menu.addSeparator() 290 menu.addSeparator()
205 act = menu.addAction( 291 act = menu.addAction(
206 UI.PixmapCache.getIcon("vcsAdd.png"), 292 UI.PixmapCache.getIcon("vcsAdd.png"),
207 self.trUtf8('Add to repository'), 293 self.tr('Add to repository'),
208 self._VCSAdd) 294 self._VCSAdd)
209 self.vcsAddMenuActions.append(act) 295 self.vcsAddMenuActions.append(act)
210 act = menu.addAction( 296 act = menu.addAction(
211 UI.PixmapCache.getIcon("vcsRemove.png"), 297 UI.PixmapCache.getIcon("vcsRemove.png"),
212 self.trUtf8('Remove from repository (and disk)'), 298 self.tr('Remove from repository (and disk)'),
213 self._VCSRemove) 299 self._VCSRemove)
214 self.vcsMenuActions.append(act) 300 self.vcsMenuActions.append(act)
215 act = menu.addAction( 301 act = menu.addAction(
216 UI.PixmapCache.getIcon("vcsRemove.png"), 302 UI.PixmapCache.getIcon("vcsRemove.png"),
217 self.trUtf8('Remove from repository only'), 303 self.tr('Remove from repository only'),
218 self.__HgForget) 304 self.__HgForget)
219 self.vcsMenuActions.append(act) 305 self.vcsMenuActions.append(act)
220 menu.addSeparator() 306 menu.addSeparator()
221 act = menu.addAction(self.trUtf8('Copy'), self.__HgCopy) 307 act = menu.addAction(self.tr('Copy'), self.__HgCopy)
222 self.vcsMenuActions.append(act) 308 self.vcsMenuActions.append(act)
223 act = menu.addAction(self.trUtf8('Move'), self.__HgMove) 309 act = menu.addAction(self.tr('Move'), self.__HgMove)
224 self.vcsMenuActions.append(act) 310 self.vcsMenuActions.append(act)
225 menu.addSeparator() 311 menu.addSeparator()
226 act = menu.addAction( 312 act = menu.addAction(
227 UI.PixmapCache.getIcon("vcsLog.png"), 313 UI.PixmapCache.getIcon("vcsLog.png"),
228 self.trUtf8('Show log'), self._VCSLog) 314 self.tr('Show log'), self._VCSLog)
229 self.vcsMenuActions.append(act) 315 self.vcsMenuActions.append(act)
230 act = menu.addAction( 316 act = menu.addAction(
231 UI.PixmapCache.getIcon("vcsLog.png"), 317 UI.PixmapCache.getIcon("vcsLog.png"),
232 self.trUtf8('Show log browser'), self.__HgLogBrowser) 318 self.tr('Show log browser'), self._VCSLogBrowser)
233 self.vcsMenuActions.append(act) 319 self.vcsMenuActions.append(act)
234 menu.addSeparator() 320 menu.addSeparator()
235 act = menu.addAction( 321 act = menu.addAction(
236 UI.PixmapCache.getIcon("vcsStatus.png"), 322 UI.PixmapCache.getIcon("vcsStatus.png"),
237 self.trUtf8('Show status'), self._VCSStatus) 323 self.tr('Show status'), self._VCSStatus)
238 self.vcsMenuActions.append(act) 324 self.vcsMenuActions.append(act)
239 menu.addSeparator() 325 menu.addSeparator()
240 act = menu.addAction( 326 act = menu.addAction(
241 UI.PixmapCache.getIcon("vcsDiff.png"), 327 UI.PixmapCache.getIcon("vcsDiff.png"),
242 self.trUtf8('Show difference'), self._VCSDiff) 328 self.tr('Show difference'), self._VCSDiff)
243 self.vcsMenuActions.append(act) 329 self.vcsMenuActions.append(act)
244 act = menu.addAction( 330 act = menu.addAction(
245 UI.PixmapCache.getIcon("vcsSbsDiff.png"), 331 UI.PixmapCache.getIcon("vcsSbsDiff.png"),
246 self.trUtf8('Show difference side-by-side'), self.__HgSbsDiff) 332 self.tr('Show difference side-by-side'), self.__HgSbsDiff)
247 self.vcsMenuActions.append(act) 333 self.vcsMenuActions.append(act)
248 act = menu.addAction( 334 act = menu.addAction(
249 UI.PixmapCache.getIcon("vcsDiff.png"), 335 UI.PixmapCache.getIcon("vcsDiff.png"),
250 self.trUtf8('Show difference (extended)'), 336 self.tr('Show difference (extended)'),
251 self.__HgExtendedDiff) 337 self.__HgExtendedDiff)
252 self.vcsMenuActions.append(act) 338 self.vcsMenuActions.append(act)
253 act = menu.addAction( 339 act = menu.addAction(
254 UI.PixmapCache.getIcon("vcsSbsDiff.png"), 340 UI.PixmapCache.getIcon("vcsSbsDiff.png"),
255 self.trUtf8('Show difference side-by-side (extended)'), 341 self.tr('Show difference side-by-side (extended)'),
256 self.__HgSbsExtendedDiff) 342 self.__HgSbsExtendedDiff)
257 self.vcsMenuActions.append(act) 343 self.vcsMenuActions.append(act)
258 self.annotateAct = menu.addAction( 344 self.annotateAct = menu.addAction(
259 self.trUtf8('Show annotated file'), 345 self.tr('Show annotated file'),
260 self.__HgAnnotate) 346 self.__HgAnnotate)
261 self.vcsMenuActions.append(self.annotateAct) 347 self.vcsMenuActions.append(self.annotateAct)
262 menu.addSeparator() 348 menu.addSeparator()
263 act = menu.addAction( 349 act = menu.addAction(
264 UI.PixmapCache.getIcon("vcsRevert.png"), 350 UI.PixmapCache.getIcon("vcsRevert.png"),
265 self.trUtf8('Revert changes'), self.__HgRevert) 351 self.tr('Revert changes'), self.__HgRevert)
266 self.vcsMenuActions.append(act) 352 self.vcsMenuActions.append(act)
267 act = menu.addAction( 353 act = menu.addAction(
268 self.trUtf8('Conflict resolved'), self.__HgResolve) 354 self.tr('Conflict resolved'), self.__HgResolve)
269 self.vcsMenuActions.append(act) 355 self.vcsMenuActions.append(act)
270 menu.addSeparator() 356 menu.addSeparator()
271 menu.addAction(self.trUtf8('Select all local file entries'), 357 menu.addAction(self.tr('Select all local file entries'),
272 self.browser.selectLocalEntries) 358 self.browser.selectLocalEntries)
273 menu.addAction(self.trUtf8('Select all versioned file entries'), 359 menu.addAction(self.tr('Select all versioned file entries'),
274 self.browser.selectVCSEntries) 360 self.browser.selectVCSEntries)
275 menu.addAction(self.trUtf8('Select all local directory entries'), 361 menu.addAction(self.tr('Select all local directory entries'),
276 self.browser.selectLocalDirEntries) 362 self.browser.selectLocalDirEntries)
277 menu.addAction(self.trUtf8('Select all versioned directory entries'), 363 menu.addAction(self.tr('Select all versioned directory entries'),
278 self.browser.selectVCSDirEntries) 364 self.browser.selectVCSDirEntries)
279 menu.addSeparator() 365 menu.addSeparator()
280 366
281 mainMenu.addSeparator() 367 mainMenu.addSeparator()
282 mainMenu.addMenu(menu) 368 mainMenu.addMenu(menu)
290 @param mainMenu reference to the menu to be amended 376 @param mainMenu reference to the menu to be amended
291 """ 377 """
292 self.vcsMultiMenuActions = [] 378 self.vcsMultiMenuActions = []
293 self.vcsAddMultiMenuActions = [] 379 self.vcsAddMultiMenuActions = []
294 380
295 menu = QMenu(self.trUtf8("Version Control")) 381 menu = QMenu(self.tr("Version Control"))
296 382
297 act = menu.addAction( 383 act = menu.addAction(
298 UI.PixmapCache.getIcon( 384 UI.PixmapCache.getIcon(
299 os.path.join("VcsPlugins", "vcsMercurial", "icons", 385 os.path.join("VcsPlugins", "vcsMercurial", "icons",
300 "mercurial.png")), 386 "mercurial.png")),
304 act.setFont(font) 390 act.setFont(font)
305 menu.addSeparator() 391 menu.addSeparator()
306 392
307 act = menu.addAction( 393 act = menu.addAction(
308 UI.PixmapCache.getIcon("vcsCommit.png"), 394 UI.PixmapCache.getIcon("vcsCommit.png"),
309 self.trUtf8('Commit changes to repository...'), 395 self.tr('Commit changes to repository...'),
310 self._VCSCommit) 396 self._VCSCommit)
311 self.vcsMultiMenuActions.append(act) 397 self.vcsMultiMenuActions.append(act)
398 self.__addExtensionsMenu(menu, 'multiMenu')
312 menu.addSeparator() 399 menu.addSeparator()
313 act = menu.addAction( 400 act = menu.addAction(
314 UI.PixmapCache.getIcon("vcsAdd.png"), 401 UI.PixmapCache.getIcon("vcsAdd.png"),
315 self.trUtf8('Add to repository'), self._VCSAdd) 402 self.tr('Add to repository'), self._VCSAdd)
316 self.vcsAddMultiMenuActions.append(act) 403 self.vcsAddMultiMenuActions.append(act)
317 act = menu.addAction( 404 act = menu.addAction(
318 UI.PixmapCache.getIcon("vcsRemove.png"), 405 UI.PixmapCache.getIcon("vcsRemove.png"),
319 self.trUtf8('Remove from repository (and disk)'), 406 self.tr('Remove from repository (and disk)'),
320 self._VCSRemove) 407 self._VCSRemove)
321 self.vcsMultiMenuActions.append(act) 408 self.vcsMultiMenuActions.append(act)
322 act = menu.addAction( 409 act = menu.addAction(
323 UI.PixmapCache.getIcon("vcsRemove.png"), 410 UI.PixmapCache.getIcon("vcsRemove.png"),
324 self.trUtf8('Remove from repository only'), 411 self.tr('Remove from repository only'),
325 self.__HgForget) 412 self.__HgForget)
326 self.vcsMultiMenuActions.append(act) 413 self.vcsMultiMenuActions.append(act)
327 menu.addSeparator() 414 menu.addSeparator()
328 act = menu.addAction( 415 act = menu.addAction(
329 UI.PixmapCache.getIcon("vcsStatus.png"), 416 UI.PixmapCache.getIcon("vcsStatus.png"),
330 self.trUtf8('Show status'), self._VCSStatus) 417 self.tr('Show status'), self._VCSStatus)
331 self.vcsMultiMenuActions.append(act) 418 self.vcsMultiMenuActions.append(act)
332 menu.addSeparator() 419 menu.addSeparator()
333 act = menu.addAction( 420 act = menu.addAction(
334 UI.PixmapCache.getIcon("vcsDiff.png"), 421 UI.PixmapCache.getIcon("vcsDiff.png"),
335 self.trUtf8('Show difference'), self._VCSDiff) 422 self.tr('Show difference'), self._VCSDiff)
336 self.vcsMultiMenuActions.append(act) 423 self.vcsMultiMenuActions.append(act)
337 act = menu.addAction( 424 act = menu.addAction(
338 UI.PixmapCache.getIcon("vcsDiff.png"), 425 UI.PixmapCache.getIcon("vcsDiff.png"),
339 self.trUtf8('Show difference (extended)'), 426 self.tr('Show difference (extended)'),
340 self.__HgExtendedDiff) 427 self.__HgExtendedDiff)
341 self.vcsMultiMenuActions.append(act) 428 self.vcsMultiMenuActions.append(act)
342 menu.addSeparator() 429 menu.addSeparator()
343 act = menu.addAction( 430 act = menu.addAction(
344 UI.PixmapCache.getIcon("vcsRevert.png"), 431 UI.PixmapCache.getIcon("vcsRevert.png"),
345 self.trUtf8('Revert changes'), self.__HgRevert) 432 self.tr('Revert changes'), self.__HgRevert)
346 self.vcsMultiMenuActions.append(act) 433 self.vcsMultiMenuActions.append(act)
347 act = menu.addAction( 434 act = menu.addAction(
348 self.trUtf8('Conflict resolved'), self.__HgResolve) 435 self.tr('Conflict resolved'), self.__HgResolve)
349 self.vcsMultiMenuActions.append(act) 436 self.vcsMultiMenuActions.append(act)
350 menu.addSeparator() 437 menu.addSeparator()
351 menu.addAction(self.trUtf8('Select all local file entries'), 438 menu.addAction(self.tr('Select all local file entries'),
352 self.browser.selectLocalEntries) 439 self.browser.selectLocalEntries)
353 menu.addAction(self.trUtf8('Select all versioned file entries'), 440 menu.addAction(self.tr('Select all versioned file entries'),
354 self.browser.selectVCSEntries) 441 self.browser.selectVCSEntries)
355 menu.addAction(self.trUtf8('Select all local directory entries'), 442 menu.addAction(self.tr('Select all local directory entries'),
356 self.browser.selectLocalDirEntries) 443 self.browser.selectLocalDirEntries)
357 menu.addAction(self.trUtf8('Select all versioned directory entries'), 444 menu.addAction(self.tr('Select all versioned directory entries'),
358 self.browser.selectVCSDirEntries) 445 self.browser.selectVCSDirEntries)
359 menu.addSeparator() 446 menu.addSeparator()
360 447
361 mainMenu.addSeparator() 448 mainMenu.addSeparator()
362 mainMenu.addMenu(menu) 449 mainMenu.addMenu(menu)
366 """ 453 """
367 Protected method used to add the VCS menu to all project browsers. 454 Protected method used to add the VCS menu to all project browsers.
368 455
369 @param mainMenu reference to the menu to be amended 456 @param mainMenu reference to the menu to be amended
370 """ 457 """
371 menu = QMenu(self.trUtf8("Version Control")) 458 menu = QMenu(self.tr("Version Control"))
372 459
373 act = menu.addAction( 460 act = menu.addAction(
374 UI.PixmapCache.getIcon( 461 UI.PixmapCache.getIcon(
375 os.path.join("VcsPlugins", "vcsMercurial", "icons", 462 os.path.join("VcsPlugins", "vcsMercurial", "icons",
376 "mercurial.png")), 463 "mercurial.png")),
378 font = act.font() 465 font = act.font()
379 font.setBold(True) 466 font.setBold(True)
380 act.setFont(font) 467 act.setFont(font)
381 menu.addSeparator() 468 menu.addSeparator()
382 469
383 menu.addAction(self.trUtf8('Select all local file entries'), 470 menu.addAction(self.tr('Select all local file entries'),
384 self.browser.selectLocalEntries) 471 self.browser.selectLocalEntries)
385 menu.addAction(self.trUtf8('Select all versioned file entries'), 472 menu.addAction(self.tr('Select all versioned file entries'),
386 self.browser.selectVCSEntries) 473 self.browser.selectVCSEntries)
387 menu.addAction(self.trUtf8('Select all local directory entries'), 474 menu.addAction(self.tr('Select all local directory entries'),
388 self.browser.selectLocalDirEntries) 475 self.browser.selectLocalDirEntries)
389 menu.addAction(self.trUtf8('Select all versioned directory entries'), 476 menu.addAction(self.tr('Select all versioned directory entries'),
390 self.browser.selectVCSDirEntries) 477 self.browser.selectVCSDirEntries)
391 menu.addSeparator() 478 menu.addSeparator()
392 479
393 mainMenu.addSeparator() 480 mainMenu.addSeparator()
394 mainMenu.addMenu(menu) 481 mainMenu.addMenu(menu)
404 return 491 return
405 492
406 self.vcsDirMenuActions = [] 493 self.vcsDirMenuActions = []
407 self.vcsAddDirMenuActions = [] 494 self.vcsAddDirMenuActions = []
408 495
409 menu = QMenu(self.trUtf8("Version Control")) 496 menu = QMenu(self.tr("Version Control"))
410 497
411 act = menu.addAction( 498 act = menu.addAction(
412 UI.PixmapCache.getIcon( 499 UI.PixmapCache.getIcon(
413 os.path.join("VcsPlugins", "vcsMercurial", "icons", 500 os.path.join("VcsPlugins", "vcsMercurial", "icons",
414 "mercurial.png")), 501 "mercurial.png")),
418 act.setFont(font) 505 act.setFont(font)
419 menu.addSeparator() 506 menu.addSeparator()
420 507
421 act = menu.addAction( 508 act = menu.addAction(
422 UI.PixmapCache.getIcon("vcsCommit.png"), 509 UI.PixmapCache.getIcon("vcsCommit.png"),
423 self.trUtf8('Commit changes to repository...'), 510 self.tr('Commit changes to repository...'),
424 self._VCSCommit) 511 self._VCSCommit)
425 self.vcsDirMenuActions.append(act) 512 self.vcsDirMenuActions.append(act)
513 self.__addExtensionsMenu(menu, 'dirMenu')
426 menu.addSeparator() 514 menu.addSeparator()
427 act = menu.addAction( 515 act = menu.addAction(
428 UI.PixmapCache.getIcon("vcsAdd.png"), 516 UI.PixmapCache.getIcon("vcsAdd.png"),
429 self.trUtf8('Add to repository'), self._VCSAdd) 517 self.tr('Add to repository'), self._VCSAdd)
430 self.vcsAddDirMenuActions.append(act) 518 self.vcsAddDirMenuActions.append(act)
431 act = menu.addAction( 519 act = menu.addAction(
432 UI.PixmapCache.getIcon("vcsRemove.png"), 520 UI.PixmapCache.getIcon("vcsRemove.png"),
433 self.trUtf8('Remove from repository (and disk)'), 521 self.tr('Remove from repository (and disk)'),
434 self._VCSRemove) 522 self._VCSRemove)
435 self.vcsDirMenuActions.append(act) 523 self.vcsDirMenuActions.append(act)
436 menu.addSeparator() 524 menu.addSeparator()
437 act = menu.addAction(self.trUtf8('Copy'), self.__HgCopy) 525 act = menu.addAction(self.tr('Copy'), self.__HgCopy)
438 self.vcsDirMenuActions.append(act) 526 self.vcsDirMenuActions.append(act)
439 act = menu.addAction(self.trUtf8('Move'), self.__HgMove) 527 act = menu.addAction(self.tr('Move'), self.__HgMove)
440 self.vcsDirMenuActions.append(act) 528 self.vcsDirMenuActions.append(act)
441 menu.addSeparator() 529 menu.addSeparator()
442 act = menu.addAction( 530 act = menu.addAction(
443 UI.PixmapCache.getIcon("vcsLog.png"), 531 UI.PixmapCache.getIcon("vcsLog.png"),
444 self.trUtf8('Show log'), self._VCSLog) 532 self.tr('Show log'), self._VCSLog)
445 self.vcsDirMenuActions.append(act) 533 self.vcsDirMenuActions.append(act)
446 act = menu.addAction( 534 act = menu.addAction(
447 UI.PixmapCache.getIcon("vcsLog.png"), 535 UI.PixmapCache.getIcon("vcsLog.png"),
448 self.trUtf8('Show log browser'), self.__HgLogBrowser) 536 self.tr('Show log browser'), self._VCSLogBrowser)
449 self.vcsDirMenuActions.append(act) 537 self.vcsDirMenuActions.append(act)
450 menu.addSeparator() 538 menu.addSeparator()
451 act = menu.addAction( 539 act = menu.addAction(
452 UI.PixmapCache.getIcon("vcsStatus.png"), 540 UI.PixmapCache.getIcon("vcsStatus.png"),
453 self.trUtf8('Show status'), self._VCSStatus) 541 self.tr('Show status'), self._VCSStatus)
454 self.vcsDirMenuActions.append(act) 542 self.vcsDirMenuActions.append(act)
455 menu.addSeparator() 543 menu.addSeparator()
456 act = menu.addAction( 544 act = menu.addAction(
457 UI.PixmapCache.getIcon("vcsDiff.png"), 545 UI.PixmapCache.getIcon("vcsDiff.png"),
458 self.trUtf8('Show difference'), self._VCSDiff) 546 self.tr('Show difference'), self._VCSDiff)
459 self.vcsDirMenuActions.append(act) 547 self.vcsDirMenuActions.append(act)
460 act = menu.addAction( 548 act = menu.addAction(
461 UI.PixmapCache.getIcon("vcsDiff.png"), 549 UI.PixmapCache.getIcon("vcsDiff.png"),
462 self.trUtf8('Show difference (extended)'), 550 self.tr('Show difference (extended)'),
463 self.__HgExtendedDiff) 551 self.__HgExtendedDiff)
464 self.vcsDirMenuActions.append(act) 552 self.vcsDirMenuActions.append(act)
465 menu.addSeparator() 553 menu.addSeparator()
466 act = menu.addAction( 554 act = menu.addAction(
467 UI.PixmapCache.getIcon("vcsRevert.png"), 555 UI.PixmapCache.getIcon("vcsRevert.png"),
468 self.trUtf8('Revert changes'), self.__HgRevert) 556 self.tr('Revert changes'), self.__HgRevert)
469 self.vcsDirMenuActions.append(act) 557 self.vcsDirMenuActions.append(act)
470 act = menu.addAction( 558 act = menu.addAction(
471 self.trUtf8('Conflict resolved'), self.__HgResolve) 559 self.tr('Conflict resolved'), self.__HgResolve)
472 self.vcsDirMenuActions.append(act) 560 self.vcsDirMenuActions.append(act)
473 menu.addSeparator() 561 menu.addSeparator()
474 menu.addAction(self.trUtf8('Select all local file entries'), 562 menu.addAction(self.tr('Select all local file entries'),
475 self.browser.selectLocalEntries) 563 self.browser.selectLocalEntries)
476 menu.addAction(self.trUtf8('Select all versioned file entries'), 564 menu.addAction(self.tr('Select all versioned file entries'),
477 self.browser.selectVCSEntries) 565 self.browser.selectVCSEntries)
478 menu.addAction(self.trUtf8('Select all local directory entries'), 566 menu.addAction(self.tr('Select all local directory entries'),
479 self.browser.selectLocalDirEntries) 567 self.browser.selectLocalDirEntries)
480 menu.addAction(self.trUtf8('Select all versioned directory entries'), 568 menu.addAction(self.tr('Select all versioned directory entries'),
481 self.browser.selectVCSDirEntries) 569 self.browser.selectVCSDirEntries)
482 menu.addSeparator() 570 menu.addSeparator()
483 571
484 mainMenu.addSeparator() 572 mainMenu.addSeparator()
485 mainMenu.addMenu(menu) 573 mainMenu.addMenu(menu)
495 return 583 return
496 584
497 self.vcsDirMultiMenuActions = [] 585 self.vcsDirMultiMenuActions = []
498 self.vcsAddDirMultiMenuActions = [] 586 self.vcsAddDirMultiMenuActions = []
499 587
500 menu = QMenu(self.trUtf8("Version Control")) 588 menu = QMenu(self.tr("Version Control"))
501 589
502 act = menu.addAction( 590 act = menu.addAction(
503 UI.PixmapCache.getIcon( 591 UI.PixmapCache.getIcon(
504 os.path.join("VcsPlugins", "vcsMercurial", "icons", 592 os.path.join("VcsPlugins", "vcsMercurial", "icons",
505 "mercurial.png")), 593 "mercurial.png")),
509 act.setFont(font) 597 act.setFont(font)
510 menu.addSeparator() 598 menu.addSeparator()
511 599
512 act = menu.addAction( 600 act = menu.addAction(
513 UI.PixmapCache.getIcon("vcsCommit.png"), 601 UI.PixmapCache.getIcon("vcsCommit.png"),
514 self.trUtf8('Commit changes to repository...'), 602 self.tr('Commit changes to repository...'),
515 self._VCSCommit) 603 self._VCSCommit)
516 self.vcsDirMultiMenuActions.append(act) 604 self.vcsDirMultiMenuActions.append(act)
605 self.__addExtensionsMenu(menu, 'dirMultiMenu')
517 menu.addSeparator() 606 menu.addSeparator()
518 act = menu.addAction( 607 act = menu.addAction(
519 UI.PixmapCache.getIcon("vcsAdd.png"), 608 UI.PixmapCache.getIcon("vcsAdd.png"),
520 self.trUtf8('Add to repository'), self._VCSAdd) 609 self.tr('Add to repository'), self._VCSAdd)
521 self.vcsAddDirMultiMenuActions.append(act) 610 self.vcsAddDirMultiMenuActions.append(act)
522 act = menu.addAction( 611 act = menu.addAction(
523 UI.PixmapCache.getIcon("vcsRemove.png"), 612 UI.PixmapCache.getIcon("vcsRemove.png"),
524 self.trUtf8('Remove from repository (and disk)'), 613 self.tr('Remove from repository (and disk)'),
525 self._VCSRemove) 614 self._VCSRemove)
526 self.vcsDirMultiMenuActions.append(act) 615 self.vcsDirMultiMenuActions.append(act)
527 menu.addSeparator() 616 menu.addSeparator()
528 act = menu.addAction( 617 act = menu.addAction(
529 UI.PixmapCache.getIcon("vcsStatus.png"), 618 UI.PixmapCache.getIcon("vcsStatus.png"),
530 self.trUtf8('Show status'), self._VCSStatus) 619 self.tr('Show status'), self._VCSStatus)
531 self.vcsDirMultiMenuActions.append(act) 620 self.vcsDirMultiMenuActions.append(act)
532 menu.addSeparator() 621 menu.addSeparator()
533 act = menu.addAction( 622 act = menu.addAction(
534 UI.PixmapCache.getIcon("vcsDiff.png"), 623 UI.PixmapCache.getIcon("vcsDiff.png"),
535 self.trUtf8('Show difference'), self._VCSDiff) 624 self.tr('Show difference'), self._VCSDiff)
536 self.vcsDirMultiMenuActions.append(act) 625 self.vcsDirMultiMenuActions.append(act)
537 act = menu.addAction( 626 act = menu.addAction(
538 UI.PixmapCache.getIcon("vcsDiff.png"), 627 UI.PixmapCache.getIcon("vcsDiff.png"),
539 self.trUtf8('Show difference (extended)'), 628 self.tr('Show difference (extended)'),
540 self.__HgExtendedDiff) 629 self.__HgExtendedDiff)
541 self.vcsDirMultiMenuActions.append(act) 630 self.vcsDirMultiMenuActions.append(act)
542 menu.addSeparator() 631 menu.addSeparator()
543 act = menu.addAction( 632 act = menu.addAction(
544 UI.PixmapCache.getIcon("vcsRevert.png"), 633 UI.PixmapCache.getIcon("vcsRevert.png"),
545 self.trUtf8('Revert changes'), self.__HgRevert) 634 self.tr('Revert changes'), self.__HgRevert)
546 self.vcsDirMultiMenuActions.append(act) 635 self.vcsDirMultiMenuActions.append(act)
547 act = menu.addAction( 636 act = menu.addAction(
548 self.trUtf8('Conflict resolved'), self.__HgResolve) 637 self.tr('Conflict resolved'), self.__HgResolve)
549 self.vcsDirMultiMenuActions.append(act) 638 self.vcsDirMultiMenuActions.append(act)
550 menu.addSeparator() 639 menu.addSeparator()
551 menu.addAction(self.trUtf8('Select all local file entries'), 640 menu.addAction(self.tr('Select all local file entries'),
552 self.browser.selectLocalEntries) 641 self.browser.selectLocalEntries)
553 menu.addAction(self.trUtf8('Select all versioned file entries'), 642 menu.addAction(self.tr('Select all versioned file entries'),
554 self.browser.selectVCSEntries) 643 self.browser.selectVCSEntries)
555 menu.addAction(self.trUtf8('Select all local directory entries'), 644 menu.addAction(self.tr('Select all local directory entries'),
556 self.browser.selectLocalDirEntries) 645 self.browser.selectLocalDirEntries)
557 menu.addAction(self.trUtf8('Select all versioned directory entries'), 646 menu.addAction(self.tr('Select all versioned directory entries'),
558 self.browser.selectVCSDirEntries) 647 self.browser.selectVCSDirEntries)
559 menu.addSeparator() 648 menu.addSeparator()
560 649
561 mainMenu.addSeparator() 650 mainMenu.addSeparator()
562 mainMenu.addMenu(menu) 651 mainMenu.addMenu(menu)
563 self.menuDirMulti = menu 652 self.menuDirMulti = menu
564 653
565 ########################################################################### 654 ###########################################################################
566 # Menu handling methods below 655 ## Menu handling methods below
567 ########################################################################### 656 ###########################################################################
568 657
569 def __HgRevert(self): 658 def __HgRevert(self):
570 """ 659 """
571 Protected slot called by the context menu to revert changes made. 660 Protected slot called by the context menu to revert changes made.
650 """ 739 """
651 itm = self.browser.currentItem() 740 itm = self.browser.currentItem()
652 fn = itm.fileName() 741 fn = itm.fileName()
653 self.vcs.hgAnnotate(fn) 742 self.vcs.hgAnnotate(fn)
654 743
655 def __HgLogBrowser(self):
656 """
657 Private slot called by the context menu to show the log browser for a
658 file.
659 """
660 itm = self.browser.currentItem()
661 try:
662 fn = itm.fileName()
663 isFile = True
664 except AttributeError:
665 fn = itm.dirName()
666 isFile = False
667 self.vcs.hgLogBrowser(fn, isFile=isFile)
668
669 def __HgResolve(self): 744 def __HgResolve(self):
670 """ 745 """
671 Private slot called by the context menu to resolve conflicts of a file. 746 Private slot called by the context menu to resolve conflicts of a file.
672 """ 747 """
673 names = [] 748 names = []
689 items = self.browser.getSelectedItems([ProjectBrowserFileItem]) 764 items = self.browser.getSelectedItems([ProjectBrowserFileItem])
690 names = [itm.fileName() for itm in items] 765 names = [itm.fileName() for itm in items]
691 766
692 dlg = DeleteFilesConfirmationDialog( 767 dlg = DeleteFilesConfirmationDialog(
693 self.parent(), 768 self.parent(),
694 self.trUtf8("Remove from repository only"), 769 self.tr("Remove from repository only"),
695 self.trUtf8( 770 self.tr(
696 "Do you really want to remove these files" 771 "Do you really want to remove these files"
697 " from the repository?"), 772 " from the repository?"),
698 names) 773 names)
699 else: 774 else:
700 items = self.browser.getSelectedItems() 775 items = self.browser.getSelectedItems()
702 files = [self.browser.project.getRelativePath(name) 777 files = [self.browser.project.getRelativePath(name)
703 for name in names] 778 for name in names]
704 779
705 dlg = DeleteFilesConfirmationDialog( 780 dlg = DeleteFilesConfirmationDialog(
706 self.parent(), 781 self.parent(),
707 self.trUtf8("Remove from repository only"), 782 self.tr("Remove from repository only"),
708 self.trUtf8( 783 self.tr(
709 "Do you really want to remove these files" 784 "Do you really want to remove these files"
710 " from the repository?"), 785 " from the repository?"),
711 files) 786 files)
712 787
713 if dlg.exec_() == QDialog.Accepted: 788 if dlg.exec_() == QDialog.Accepted:

eric ide

mercurial