96 """ |
96 """ |
97 Public method to generate the action objects. |
97 Public method to generate the action objects. |
98 """ |
98 """ |
99 self.vcsNewAct = E5Action(self.trUtf8('New from repository'), |
99 self.vcsNewAct = E5Action(self.trUtf8('New from repository'), |
100 UI.PixmapCache.getIcon("vcsCheckout.png"), |
100 UI.PixmapCache.getIcon("vcsCheckout.png"), |
101 self.trUtf8('&New from repository...'), 0, 0, self, 'mercurial_new') |
101 self.trUtf8('&New from repository...'), 0, 0, |
|
102 self, 'mercurial_new') |
102 self.vcsNewAct.setStatusTip(self.trUtf8( |
103 self.vcsNewAct.setStatusTip(self.trUtf8( |
103 'Create (clone) a new project from a Mercurial repository' |
104 'Create (clone) a new project from a Mercurial repository' |
104 )) |
105 )) |
105 self.vcsNewAct.setWhatsThis(self.trUtf8( |
106 self.vcsNewAct.setWhatsThis(self.trUtf8( |
106 """<b>New from repository</b>""" |
107 """<b>New from repository</b>""" |
146 self.vcsUpdateAct.setStatusTip(self.trUtf8( |
148 self.vcsUpdateAct.setStatusTip(self.trUtf8( |
147 'Update the local project from the Mercurial repository' |
149 'Update the local project from the Mercurial repository' |
148 )) |
150 )) |
149 self.vcsUpdateAct.setWhatsThis(self.trUtf8( |
151 self.vcsUpdateAct.setWhatsThis(self.trUtf8( |
150 """<b>Update from repository</b>""" |
152 """<b>Update from repository</b>""" |
151 """<p>This updates the local project from the Mercurial repository.</p>""" |
153 """<p>This updates the local project from the Mercurial""" |
|
154 """ repository.</p>""" |
152 )) |
155 )) |
153 self.vcsUpdateAct.triggered[()].connect(self._vcsUpdate) |
156 self.vcsUpdateAct.triggered[()].connect(self._vcsUpdate) |
154 self.actions.append(self.vcsUpdateAct) |
157 self.actions.append(self.vcsUpdateAct) |
155 |
158 |
156 self.vcsCommitAct = E5Action(self.trUtf8('Commit changes to repository'), |
159 self.vcsCommitAct = E5Action( |
157 UI.PixmapCache.getIcon("vcsCommit.png"), |
160 self.trUtf8('Commit changes to repository'), |
158 self.trUtf8('&Commit changes to repository...'), 0, 0, self, |
161 UI.PixmapCache.getIcon("vcsCommit.png"), |
159 'mercurial_commit') |
162 self.trUtf8('&Commit changes to repository...'), 0, 0, self, |
|
163 'mercurial_commit') |
160 self.vcsCommitAct.setStatusTip(self.trUtf8( |
164 self.vcsCommitAct.setStatusTip(self.trUtf8( |
161 'Commit changes to the local project to the Mercurial repository' |
165 'Commit changes to the local project to the Mercurial repository' |
162 )) |
166 )) |
163 self.vcsCommitAct.setWhatsThis(self.trUtf8( |
167 self.vcsCommitAct.setWhatsThis(self.trUtf8( |
164 """<b>Commit changes to repository</b>""" |
168 """<b>Commit changes to repository</b>""" |
247 self.hgLogBrowserAct.setStatusTip(self.trUtf8( |
252 self.hgLogBrowserAct.setStatusTip(self.trUtf8( |
248 'Show a dialog to browse the log of the local project' |
253 'Show a dialog to browse the log of the local project' |
249 )) |
254 )) |
250 self.hgLogBrowserAct.setWhatsThis(self.trUtf8( |
255 self.hgLogBrowserAct.setWhatsThis(self.trUtf8( |
251 """<b>Show log browser</b>""" |
256 """<b>Show log browser</b>""" |
252 """<p>This shows a dialog to browse the log of the local project.""" |
257 """<p>This shows a dialog to browse the log of the local""" |
253 """ A limited number of entries is shown first. More can be""" |
258 """ project. A limited number of entries is shown first.""" |
254 """ retrieved later on.</p>""" |
259 """ More can be retrieved later on.</p>""" |
255 )) |
260 )) |
256 self.hgLogBrowserAct.triggered[()].connect(self.__hgLogBrowser) |
261 self.hgLogBrowserAct.triggered[()].connect(self.__hgLogBrowser) |
257 self.actions.append(self.hgLogBrowserAct) |
262 self.actions.append(self.hgLogBrowserAct) |
258 |
263 |
259 self.vcsDiffAct = E5Action(self.trUtf8('Show difference'), |
264 self.vcsDiffAct = E5Action(self.trUtf8('Show difference'), |
263 self.vcsDiffAct.setStatusTip(self.trUtf8( |
268 self.vcsDiffAct.setStatusTip(self.trUtf8( |
264 'Show the difference of the local project to the repository' |
269 'Show the difference of the local project to the repository' |
265 )) |
270 )) |
266 self.vcsDiffAct.setWhatsThis(self.trUtf8( |
271 self.vcsDiffAct.setWhatsThis(self.trUtf8( |
267 """<b>Show difference</b>""" |
272 """<b>Show difference</b>""" |
268 """<p>This shows the difference of the local project to the repository.</p>""" |
273 """<p>This shows the difference of the local project to the""" |
|
274 """ repository.</p>""" |
269 )) |
275 )) |
270 self.vcsDiffAct.triggered[()].connect(self._vcsDiff) |
276 self.vcsDiffAct.triggered[()].connect(self._vcsDiff) |
271 self.actions.append(self.vcsDiffAct) |
277 self.actions.append(self.vcsDiffAct) |
272 |
278 |
273 self.hgExtDiffAct = E5Action(self.trUtf8('Show difference (extended)'), |
279 self.hgExtDiffAct = E5Action(self.trUtf8('Show difference (extended)'), |
451 |
460 |
452 self.hgPushBranchAct = E5Action(self.trUtf8('Push new branch'), |
461 self.hgPushBranchAct = E5Action(self.trUtf8('Push new branch'), |
453 self.trUtf8('Push new branch'), |
462 self.trUtf8('Push new branch'), |
454 0, 0, self, 'mercurial_push_branch') |
463 0, 0, self, 'mercurial_push_branch') |
455 self.hgPushBranchAct.setStatusTip(self.trUtf8( |
464 self.hgPushBranchAct.setStatusTip(self.trUtf8( |
456 'Push the current branch of the local project as a new named branch' |
465 'Push the current branch of the local project as a new named' |
|
466 ' branch' |
457 )) |
467 )) |
458 self.hgPushBranchAct.setWhatsThis(self.trUtf8( |
468 self.hgPushBranchAct.setWhatsThis(self.trUtf8( |
459 """<b>Push new branch</b>""" |
469 """<b>Push new branch</b>""" |
460 """<p>This pushes the current branch of the local project""" |
470 """<p>This pushes the current branch of the local project""" |
461 """ as a new named branch.</p>""" |
471 """ as a new named branch.</p>""" |
522 self.vcsCommandAct.setStatusTip(self.trUtf8( |
533 self.vcsCommandAct.setStatusTip(self.trUtf8( |
523 'Execute an arbitrary Mercurial command' |
534 'Execute an arbitrary Mercurial command' |
524 )) |
535 )) |
525 self.vcsCommandAct.setWhatsThis(self.trUtf8( |
536 self.vcsCommandAct.setWhatsThis(self.trUtf8( |
526 """<b>Execute command</b>""" |
537 """<b>Execute command</b>""" |
527 """<p>This opens a dialog to enter an arbitrary Mercurial command.</p>""" |
538 """<p>This opens a dialog to enter an arbitrary Mercurial""" |
|
539 """ command.</p>""" |
528 )) |
540 )) |
529 self.vcsCommandAct.triggered[()].connect(self._vcsCommand) |
541 self.vcsCommandAct.triggered[()].connect(self._vcsCommand) |
530 self.actions.append(self.vcsCommandAct) |
542 self.actions.append(self.vcsCommandAct) |
531 |
543 |
532 self.vcsPropsAct = E5Action(self.trUtf8('Command options'), |
544 self.vcsPropsAct = E5Action(self.trUtf8('Command options'), |
533 self.trUtf8('Command &options...'), 0, 0, self, |
545 self.trUtf8('Command &options...'), 0, 0, self, |
534 'mercurial_options') |
546 'mercurial_options') |
535 self.vcsPropsAct.setStatusTip(self.trUtf8('Show the Mercurial command options')) |
547 self.vcsPropsAct.setStatusTip(self.trUtf8( |
|
548 'Show the Mercurial command options')) |
536 self.vcsPropsAct.setWhatsThis(self.trUtf8( |
549 self.vcsPropsAct.setWhatsThis(self.trUtf8( |
537 """<b>Command options...</b>""" |
550 """<b>Command options...</b>""" |
538 """<p>This shows a dialog to edit the Mercurial command options.</p>""" |
551 """<p>This shows a dialog to edit the Mercurial command""" |
|
552 """ options.</p>""" |
539 )) |
553 )) |
540 self.vcsPropsAct.triggered[()].connect(self._vcsCommandOptions) |
554 self.vcsPropsAct.triggered[()].connect(self._vcsCommandOptions) |
541 self.actions.append(self.vcsPropsAct) |
555 self.actions.append(self.vcsPropsAct) |
542 |
556 |
543 self.hgConfigAct = E5Action(self.trUtf8('Configure'), |
557 self.hgConfigAct = E5Action(self.trUtf8('Configure'), |
546 self.hgConfigAct.setStatusTip(self.trUtf8( |
560 self.hgConfigAct.setStatusTip(self.trUtf8( |
547 'Show the configuration dialog with the Mercurial page selected' |
561 'Show the configuration dialog with the Mercurial page selected' |
548 )) |
562 )) |
549 self.hgConfigAct.setWhatsThis(self.trUtf8( |
563 self.hgConfigAct.setWhatsThis(self.trUtf8( |
550 """<b>Configure</b>""" |
564 """<b>Configure</b>""" |
551 """<p>Show the configuration dialog with the Mercurial page selected.</p>""" |
565 """<p>Show the configuration dialog with the Mercurial page""" |
|
566 """ selected.</p>""" |
552 )) |
567 )) |
553 self.hgConfigAct.triggered[()].connect(self.__hgConfigure) |
568 self.hgConfigAct.triggered[()].connect(self.__hgConfigure) |
554 self.actions.append(self.hgConfigAct) |
569 self.actions.append(self.hgConfigAct) |
555 |
570 |
556 self.hgEditUserConfigAct = E5Action(self.trUtf8('Edit user configuration'), |
571 self.hgEditUserConfigAct = E5Action( |
557 self.trUtf8('Edit user configuration...'), |
572 self.trUtf8('Edit user configuration'), |
558 0, 0, self, 'mercurial_user_configure') |
573 self.trUtf8('Edit user configuration...'), |
|
574 0, 0, self, 'mercurial_user_configure') |
559 self.hgEditUserConfigAct.setStatusTip(self.trUtf8( |
575 self.hgEditUserConfigAct.setStatusTip(self.trUtf8( |
560 'Show an editor to edit the user configuration file' |
576 'Show an editor to edit the user configuration file' |
561 )) |
577 )) |
562 self.hgEditUserConfigAct.setWhatsThis(self.trUtf8( |
578 self.hgEditUserConfigAct.setWhatsThis(self.trUtf8( |
563 """<b>Edit user configuration</b>""" |
579 """<b>Edit user configuration</b>""" |
564 """<p>Show an editor to edit the user configuration file.</p>""" |
580 """<p>Show an editor to edit the user configuration file.</p>""" |
565 )) |
581 )) |
566 self.hgEditUserConfigAct.triggered[()].connect(self.__hgEditUserConfig) |
582 self.hgEditUserConfigAct.triggered[()].connect(self.__hgEditUserConfig) |
567 self.actions.append(self.hgEditUserConfigAct) |
583 self.actions.append(self.hgEditUserConfigAct) |
568 |
584 |
569 self.hgRepoConfigAct = E5Action(self.trUtf8('Edit repository configuration'), |
585 self.hgRepoConfigAct = E5Action( |
570 self.trUtf8('Edit repository configuration...'), |
586 self.trUtf8('Edit repository configuration'), |
571 0, 0, self, 'mercurial_repo_configure') |
587 self.trUtf8('Edit repository configuration...'), |
|
588 0, 0, self, 'mercurial_repo_configure') |
572 self.hgRepoConfigAct.setStatusTip(self.trUtf8( |
589 self.hgRepoConfigAct.setStatusTip(self.trUtf8( |
573 'Show an editor to edit the repository configuration file' |
590 'Show an editor to edit the repository configuration file' |
574 )) |
591 )) |
575 self.hgRepoConfigAct.setWhatsThis(self.trUtf8( |
592 self.hgRepoConfigAct.setWhatsThis(self.trUtf8( |
576 """<b>Edit repository configuration</b>""" |
593 """<b>Edit repository configuration</b>""" |
577 """<p>Show an editor to edit the repository configuration file.</p>""" |
594 """<p>Show an editor to edit the repository configuration""" |
|
595 """ file.</p>""" |
578 )) |
596 )) |
579 self.hgRepoConfigAct.triggered[()].connect(self.__hgEditRepoConfig) |
597 self.hgRepoConfigAct.triggered[()].connect(self.__hgEditRepoConfig) |
580 self.actions.append(self.hgRepoConfigAct) |
598 self.actions.append(self.hgRepoConfigAct) |
581 |
599 |
582 self.hgShowConfigAct = E5Action( |
600 self.hgShowConfigAct = E5Action( |
583 self.trUtf8('Show combined configuration settings'), |
601 self.trUtf8('Show combined configuration settings'), |
584 self.trUtf8('Show combined configuration settings...'), |
602 self.trUtf8('Show combined configuration settings...'), |
585 0, 0, self, 'mercurial_show_config') |
603 0, 0, self, 'mercurial_show_config') |
586 self.hgShowConfigAct.setStatusTip(self.trUtf8( |
604 self.hgShowConfigAct.setStatusTip(self.trUtf8( |
587 'Show the combined configuration settings from all configuration files' |
605 'Show the combined configuration settings from all configuration' |
|
606 ' files' |
588 )) |
607 )) |
589 self.hgShowConfigAct.setWhatsThis(self.trUtf8( |
608 self.hgShowConfigAct.setWhatsThis(self.trUtf8( |
590 """<b>Show combined configuration settings</b>""" |
609 """<b>Show combined configuration settings</b>""" |
591 """<p>This shows the combined configuration settings""" |
610 """<p>This shows the combined configuration settings""" |
592 """ from all configuration files.</p>""" |
611 """ from all configuration files.</p>""" |
665 self.hgBundleAct.setStatusTip(self.trUtf8( |
684 self.hgBundleAct.setStatusTip(self.trUtf8( |
666 'Create changegroup file collecting changesets' |
685 'Create changegroup file collecting changesets' |
667 )) |
686 )) |
668 self.hgBundleAct.setWhatsThis(self.trUtf8( |
687 self.hgBundleAct.setWhatsThis(self.trUtf8( |
669 """<b>Create changegroup</b>""" |
688 """<b>Create changegroup</b>""" |
670 """<p>This creates a changegroup file collecting selected changesets""" |
689 """<p>This creates a changegroup file collecting selected""" |
671 """ (hg bundle).</p>""" |
690 """ changesets (hg bundle).</p>""" |
672 )) |
691 )) |
673 self.hgBundleAct.triggered[()].connect(self.__hgBundle) |
692 self.hgBundleAct.triggered[()].connect(self.__hgBundle) |
674 self.actions.append(self.hgBundleAct) |
693 self.actions.append(self.hgBundleAct) |
675 |
694 |
676 self.hgPreviewBundleAct = E5Action(self.trUtf8('Preview changegroup'), |
695 self.hgPreviewBundleAct = E5Action(self.trUtf8('Preview changegroup'), |
679 self.hgPreviewBundleAct.setStatusTip(self.trUtf8( |
698 self.hgPreviewBundleAct.setStatusTip(self.trUtf8( |
680 'Preview a changegroup file containing a collection of changesets' |
699 'Preview a changegroup file containing a collection of changesets' |
681 )) |
700 )) |
682 self.hgPreviewBundleAct.setWhatsThis(self.trUtf8( |
701 self.hgPreviewBundleAct.setWhatsThis(self.trUtf8( |
683 """<b>Preview changegroup</b>""" |
702 """<b>Preview changegroup</b>""" |
684 """<p>This previews a changegroup file containing a collection of""" |
703 """<p>This previews a changegroup file containing a collection""" |
685 """ changesets.</p>""" |
704 """ of changesets.</p>""" |
686 )) |
705 )) |
687 self.hgPreviewBundleAct.triggered[()].connect(self.__hgPreviewBundle) |
706 self.hgPreviewBundleAct.triggered[()].connect(self.__hgPreviewBundle) |
688 self.actions.append(self.hgPreviewBundleAct) |
707 self.actions.append(self.hgPreviewBundleAct) |
689 |
708 |
690 self.hgIdentifyBundleAct = E5Action(self.trUtf8('Identify changegroup'), |
709 self.hgIdentifyBundleAct = E5Action( |
691 self.trUtf8('Identify changegroup...'), |
710 self.trUtf8('Identify changegroup'), |
692 0, 0, self, 'mercurial_identify_bundle') |
711 self.trUtf8('Identify changegroup...'), |
|
712 0, 0, self, 'mercurial_identify_bundle') |
693 self.hgIdentifyBundleAct.setStatusTip(self.trUtf8( |
713 self.hgIdentifyBundleAct.setStatusTip(self.trUtf8( |
694 'Identify a changegroup file containing a collection of changesets' |
714 'Identify a changegroup file containing a collection of changesets' |
695 )) |
715 )) |
696 self.hgIdentifyBundleAct.setWhatsThis(self.trUtf8( |
716 self.hgIdentifyBundleAct.setWhatsThis(self.trUtf8( |
697 """<b>Identify changegroup</b>""" |
717 """<b>Identify changegroup</b>""" |
698 """<p>This identifies a changegroup file containing a collection of""" |
718 """<p>This identifies a changegroup file containing a""" |
699 """ changesets.</p>""" |
719 """ collection of changesets.</p>""" |
700 )) |
720 )) |
701 self.hgIdentifyBundleAct.triggered[()].connect(self.__hgIdentifyBundle) |
721 self.hgIdentifyBundleAct.triggered[()].connect(self.__hgIdentifyBundle) |
702 self.actions.append(self.hgIdentifyBundleAct) |
722 self.actions.append(self.hgIdentifyBundleAct) |
703 |
723 |
704 self.hgUnbundleAct = E5Action(self.trUtf8('Apply changegroups'), |
724 self.hgUnbundleAct = E5Action(self.trUtf8('Apply changegroups'), |
786 self.hgRollbackAct.setStatusTip(self.trUtf8( |
806 self.hgRollbackAct.setStatusTip(self.trUtf8( |
787 'Rollback the last transaction' |
807 'Rollback the last transaction' |
788 )) |
808 )) |
789 self.hgRollbackAct.setWhatsThis(self.trUtf8( |
809 self.hgRollbackAct.setWhatsThis(self.trUtf8( |
790 """<b>Rollback last transaction</b>""" |
810 """<b>Rollback last transaction</b>""" |
791 """<p>This performs a rollback of the last transaction. Transactions""" |
811 """<p>This performs a rollback of the last transaction.""" |
792 """ are used to encapsulate the effects of all commands that create new""" |
812 """ Transactions are used to encapsulate the effects of all""" |
793 """ changesets or propagate existing changesets into a repository.""" |
813 """ commands that create new changesets or propagate existing""" |
794 """ For example, the following commands are transactional, and""" |
814 """ changesets into a repository. For example, the following""" |
795 """ their effects can be rolled back:<ul>""" |
815 """ commands are transactional, and their effects can be""" |
|
816 """ rolled back:<ul>""" |
796 """<li>commit</li>""" |
817 """<li>commit</li>""" |
797 """<li>import</li>""" |
818 """<li>import</li>""" |
798 """<li>pull</li>""" |
819 """<li>pull</li>""" |
799 """<li>push (with this repository as the destination)</li>""" |
820 """<li>push (with this repository as the destination)</li>""" |
800 """<li>unbundle</li>""" |
821 """<li>unbundle</li>""" |
801 """</ul>""" |
822 """</ul>""" |
802 """</p><p><strong>This command is dangerous. Please use with care.""" |
823 """</p><p><strong>This command is dangerous. Please use with""" |
803 """</strong></p>""" |
824 """ care. </strong></p>""" |
804 )) |
825 )) |
805 self.hgRollbackAct.triggered[()].connect(self.__hgRollback) |
826 self.hgRollbackAct.triggered[()].connect(self.__hgRollback) |
806 self.actions.append(self.hgRollbackAct) |
827 self.actions.append(self.hgRollbackAct) |
807 |
828 |
808 self.hgServeAct = E5Action(self.trUtf8('Serve project repository'), |
829 self.hgServeAct = E5Action(self.trUtf8('Serve project repository'), |
865 'Copies changesets from another branch' |
887 'Copies changesets from another branch' |
866 )) |
888 )) |
867 self.hgGraftAct.setWhatsThis(self.trUtf8( |
889 self.hgGraftAct.setWhatsThis(self.trUtf8( |
868 """<b>Copy Changesets</b>""" |
890 """<b>Copy Changesets</b>""" |
869 """<p>This copies changesets from another branch on top of the""" |
891 """<p>This copies changesets from another branch on top of the""" |
870 """ current working directory with the user, date and description""" |
892 """ current working directory with the user, date and""" |
871 """ of the original changeset.</p>""" |
893 """ description of the original changeset.</p>""" |
872 )) |
894 )) |
873 self.hgGraftAct.triggered[()].connect(self.__hgGraft) |
895 self.hgGraftAct.triggered[()].connect(self.__hgGraft) |
874 self.actions.append(self.hgGraftAct) |
896 self.actions.append(self.hgGraftAct) |
875 |
897 |
876 self.hgGraftContinueAct = E5Action( |
898 self.hgGraftContinueAct = E5Action( |
913 )) |
935 )) |
914 self.hgRemoveSubreposAct.setWhatsThis(self.trUtf8( |
936 self.hgRemoveSubreposAct.setWhatsThis(self.trUtf8( |
915 """<b>Remove...</b>""" |
937 """<b>Remove...</b>""" |
916 """<p>Remove sub-repositories from the project.</p>""" |
938 """<p>Remove sub-repositories from the project.</p>""" |
917 )) |
939 )) |
918 self.hgRemoveSubreposAct.triggered[()].connect(self.__hgRemoveSubrepositories) |
940 self.hgRemoveSubreposAct.triggered[()].connect( |
|
941 self.__hgRemoveSubrepositories) |
919 self.actions.append(self.hgRemoveSubreposAct) |
942 self.actions.append(self.hgRemoveSubreposAct) |
920 |
943 |
921 self.hgArchiveAct = E5Action(self.trUtf8('Create unversioned archive'), |
944 self.hgArchiveAct = E5Action(self.trUtf8('Create unversioned archive'), |
922 UI.PixmapCache.getIcon("vcsExport.png"), |
945 UI.PixmapCache.getIcon("vcsExport.png"), |
923 self.trUtf8('Create unversioned archive...'), |
946 self.trUtf8('Create unversioned archive...'), |
1001 self.__extensionsMenu.aboutToShow.connect(self.__showExtensionMenu) |
1025 self.__extensionsMenu.aboutToShow.connect(self.__showExtensionMenu) |
1002 self.extensionMenus = {} |
1026 self.extensionMenus = {} |
1003 for extensionMenuTitle in sorted(self.__extensionMenuTitles): |
1027 for extensionMenuTitle in sorted(self.__extensionMenuTitles): |
1004 extensionName = self.__extensionMenuTitles[extensionMenuTitle] |
1028 extensionName = self.__extensionMenuTitles[extensionMenuTitle] |
1005 self.extensionMenus[extensionName] = self.__extensionsMenu.addMenu( |
1029 self.extensionMenus[extensionName] = self.__extensionsMenu.addMenu( |
1006 self.__extensions[extensionName].initMenu(self.__extensionsMenu)) |
1030 self.__extensions[extensionName].initMenu( |
|
1031 self.__extensionsMenu)) |
1007 self.vcs.activeExtensionsChanged.connect(self.__showExtensionMenu) |
1032 self.vcs.activeExtensionsChanged.connect(self.__showExtensionMenu) |
1008 |
1033 |
1009 if self.vcs.version >= (2, 0): |
1034 if self.vcs.version >= (2, 0): |
1010 graftMenu = QMenu(self.trUtf8("Graft"), menu) |
1035 graftMenu = QMenu(self.trUtf8("Graft"), menu) |
1011 graftMenu.setIcon(UI.PixmapCache.getIcon("vcsGraft.png")) |
1036 graftMenu.setIcon(UI.PixmapCache.getIcon("vcsGraft.png")) |