# HG changeset patch
# User Simon Heimberg <[email protected]>
# Date 1234800759 -3600
# Node ID 9521df28903da5391789bcbb2b341613c9e01a10
# Parent  a7d4a0c9e5e57b5be8c174e79ba22d4ac7621f7d
add separate module for menu creation

diff -r a7d4a0c9e5e5 -r 9521df28903d tortoise/menuthg.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tortoise/menuthg.py       Mon Feb 16 17:12:39 2009 +0100
@@ -0,0 +1,271 @@
+# Published under the GNU GPL, v2 or later.
+# Copyright (C) 2007 Jelmer Vernooij <[email protected]>
+# Copyright (C) 2007 Henry Ludemann <[email protected]>
+# Copyright (C) 2007 TK Soh <[email protected]>
+
+import os
+#import tempfile
+from mercurial import hg
+from thgutil import *
+from mercurial import ui
+from mercurial.i18n import _
+
+try:
+    from mercurial.error import RepoError
+except ImportError:
+    from mercurial.repo import RepoError
+
+
+class TortoiseMenu(object):
+
+    def __init__(self, menutext, helptext, handler, icon=None, state=True):
+        self.menutext = menutext
+        self.helptext = helptext
+        self.handler = handler
+        self.state = state
+        self.icon = icon
+
+    def isSubmenu():
+        return false
+
+    def isSep():
+        return false
+
+
+class TortoiseSubmenu(TortoiseMenu):
+
+    def __init__(self, menutext, helptext, menus=[], icon=None):
+        TortoiseMenu.__init(self, menutext, helptext, None, icon)
+        self.menus = menus[:]
+
+    def add_menu(self, menutext, helptext, handler, icon=None, state=True):
+        self.menus.append(TortoiseMenu(menutext, helptext,
+                handler, icon, state))
+
+    def add_sep(self):
+        self.menus.append(TortoiseMenuSep())
+
+    def get_menus(self):
+        return self.menus
+
+    def append(self, entry):
+        self.menus.append(entry)
+
+    def isSubmenu():
+        return true
+
+
+class TortoiseMenuSep(object):
+
+    def isSubmenu():
+        return false
+
+    def isSep():
+        return true
+
+
+class menuThg:
+    """shell extension that adds context menu items"""
+
+    def __init__(self):
+        self.handlers = self
+        self.name = "TortoiseHG"
+
+    def get_commands_dragdrop(self, srcfiles, destfolder):
+        """
+        Get a list of commands valid for the current selection.
+
+        Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu
+        """
+
+        print "_get_commands_dragdrop() on %s" % ", ".join(self._filenames)
+
+        # we can only accept dropping one item
+        if len(srcfiles) > 1:
+            return []
+
+        # open repo
+        drag_repo = None
+        drop_repo = None
+
+        print "drag = %s" % self.srcfiles[0]
+        print "drop = %s" % self.destfolder
+
+        drag_path = self.srcfiles[0]
+        drag_repo = open_repo(drag_path)
+        if not drag_repo:
+            return []
+        if drag_repo and drag_repo.root != drag_path:
+            return []   # dragged item must be a hg repo root directory
+
+        drop_repo = open_repo(self._folder)
+
+        thgmenu = []
+        thgmenu.append(TortoiseMenu(_("Create Clone"),
+                  _("Create clone here from source"),
+                  self.handlers._clone_here, icon="menuclone.ico"))
+
+        if drop_repo:
+            thgmenu.append(TortoiseMenu(_("Synchronize"),
+                     _("Synchronize with dragged repository"),
+                     self.handlers._synch_here, icon="menusynch.py"))
+        return thgmenu
+
+    def get_commands(self, files):
+        """
+        Get a list of commands valid for the current selection.
+
+        Commands are instances of TortoiseMenu, TortoiseMenuSep or TortoiseMenu
+        """
+
+        print "_get_commands() on %s" % ", ".join(self._filenames)
+
+        # open repo
+        repo = open_repo(files[0])
+
+        if repo:
+            thgmenu.append(TortoiseMenu(_("HG Commit..."),
+                      _("Commit changes in repository"),
+                      self.handlers._commit, icon="menucommit.ico"))
+
+        menu = TortoiseSubmenu(self.name, "Mercurial", [], icon="hg.ico")
+
+        if repo is None:
+            menu.append(TortoiseMenu(_("Clone a Repository"),
+                      _("clone a repository"),
+                      self.handlers._clone, icon="menuclone.ico"))
+            menu.append(TortoiseMenu(_("Create Repository Here"),
+                      _("create a new repository in this directory"),
+                      self.handlers._init, icon="menucreaterepos.ico",
+                      state=os.path.isdir(rpath)))
+        else:
+
+            for f in self._filenames:
+                if f.endswith('.hgignore'):
+                    menu.append(TortoiseMenu(_("Modify ignore filter"),
+                              _("Modify repository ignore filter"),
+                              self.handlers._hgignore, icon="general.ico")) # 
needs ico
+                     break
+ 
+            menu.append(TortoiseMenu(_("View File Status"),
+                      _("Repository status"),
+                      self.handlers._status, icon="menushowchanged.ico"))
+
+            menu.append(TortoiseMenu(_("(Un)Shelve Changes"),
+                      _("Shelve repository changes"),
+                      self.handlers._shelve, icon="general.ico")) # needs ico
+
+            # Visual Diff (any extdiff command)
+            has_vdiff = repo.ui.config('tortoisehg', 'vdiff', '') != ''
+            menu.append(TortoiseMenu(_("Visual Diff"),
+                      _("View changes using GUI diff tool"),
+                      self.handlers._vdiff, icon="TortoiseMerge.ico",
+                      state=has_vdiff))
+
+            if len(self._filenames) == 0:
+                menu.append(TortoiseMenu(_("Guess Renames"),
+                       _("Detect renames and copies"),
+                       self.handlers._guess_rename, icon="general.ico")) # 
needs ico
+            elif len(self._filenames) == 1:
+                result.append(TortoiseMenu(_("Rename file"),
+                       _("Rename file or directory"),
+                       self.handlers._rename, icon="general.ico")) # needs ico
+
+            menu.append(TortoiseMenu(_("Add Files"),
+                      _("Add files to Hg repository"),
+                      self.handlers._add, icon="menuadd.ico"))
+            menu.append(TortoiseMenu(_("Remove Files"),
+                      _("Remove selected files on the next commit"),
+                      self.handlers._remove, icon="menudelete.ico"))
+            menu.append(TortoiseMenu(_("Undo Changes"),
+                      _("Revert selected files"),
+                      self.handlers._revert, icon="menurevert.ico"))
+
+            # we can only annotate file but not directories
+            annotatible = len(files) > 0
+            for f in self._filenames:
+                if not os.path.isfile(f):
+                    annotatible = False
+                    break
+            menu.append(TortoiseMenu(_("Annotate Files"),
+                      _("show changeset information per file line"),
+                      self.handlers._annotate, icon="menublame.ico",
+                      state=annotatible))
+
+            menu.append(TortoiseMenuSep())
+            menu.append(TortoiseMenu(_("Update To Revision"),
+                      _("update working directory"),
+                      self.handlers._update, icon="menucheckout.ico"))
+
+            can_merge = len(repo.heads()) > 1 and \
+                      len(repo.changectx(None).parents()) < 2
+            menu.append(TortoiseMenu(_("Merge Revisions"),
+                      _("merge working directory with another revision"),
+                      self.handlers._merge, icon="menumerge.ico",
+                      state=can_merge))
+
+            in_merge = len(repo.changectx(None).parents()) > 1
+            menu.append(TortoiseMenu(_("Undo Merge"),
+                      _("Undo merge by updating to revision"),
+                      self.handlers._merge, icon="menuunmerge.ico",
+                      state=in_merge))
+
+            menu.append(TortoiseMenuSep())
+
+            menu.append(TortoiseMenu(_("View Changelog"),
+                      _("View revision history"),
+                      self.handlers._history, icon="menulog.ico"))
+
+            menu.append(TortoiseMenu(_("Search Repository"),
+                      _("Search revisions of files for a text pattern"),
+                      self.handlers._grep, icon="menurepobrowse.ico"))
+
+            if repo.ui.config('tortoisehg', 'view'):
+                menu.append(TortoiseMenu(_("Revision Graph"),
+                          _("View history with DAG graph"),
+                          self.handlers._view, icon="menurevisiongraph.ico"))
+
+            menu.append(TortoiseMenuSep())
+
+            menu.append(TortoiseMenu(_("Synchronize..."),
+                      _("Synchronize with remote repository"),
+                      self.handlers._synch, icon="menusynch.ico"))
+            menu.append(TortoiseMenu(_("Recovery..."),
+                      _("General repair and recovery of repository"),
+                      self.handlers._recovery, icon="general.ico"))
+            menu.append(TortoiseMenu(_("Web Server"),
+                      _("start web server for this repository"),
+                      self.handlers._serve, icon="proxy.ico"))
+
+            menu.append(TortoiseMenuSep())
+            menu.append(TortoiseMenu(_("Create Clone"),
+                      _("Clone a repository here"),
+                      self.handlers._clone, icon="menuclone.ico"))
+            can_init = repo.root != rpath and os.path.isdir(rpath)
+            menu.append(TortoiseMenu(_("Create Repository Here"),
+                      _("create a new repository in this directory"),
+                      self.handlers._init, icon="menucreaterepos.ico",
+                      state=can_init))
+
+        # config settings menu
+        menu.append(TortoiseMenuSep())
+        optmenu = TortoiseSubmenu(_("Settings"), '',
+                  icon="menusettings.ico")
+        optmenu.add_menu(_("Global"),
+                  _("Configure user wide settings"),
+                  self.handlers._config_user, icon="settings_user.ico")
+        if repo:
+            optmenu.add_menu(_("Repository"),
+                      _("Configure settings local to this repository"),
+                      self.handlers._config_repo,
+                      icon="settings_repo.ico")
+        menu.append(optmenu)
+
+        # add common menu items
+        menu.append(TortoiseMenuSep())
+        menu.append(TortoiseMenu(_("About"), _("About TortoiseHg"),
+                  self.handlers._about, icon="menuabout.ico"))
+
+        thgmenu.append(menu)
+        thgmenu.append(TortoiseMenuSep())
+        return thgmenu


------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Tortoisehg-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to