/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to tortoise-bzr.py

  • Committer: Curtis Hovey
  • Date: 2011-09-05 03:44:26 UTC
  • mto: This revision was merged to the branch mainline in revision 741.
  • Revision ID: sinzui.is@verizon.net-20110905034426-p98pxnay9rmzkr99
Fix the initializer for many classes.
Replace Gtk.Dialog.vbox with .get_content_area().

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Simple TortoiseSVN-like Bazaar plugin for the Windows Shell
2
 
# Published under the GNU GPL, v2 or later.
3
 
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
4
 
 
5
 
import pythoncom
6
 
from win32com.shell import shell, shellcon
7
 
import win32gui
8
 
import win32con
9
 
 
10
 
"""Windows shell extension that adds context menu items to Bazaar branches."""
11
 
class BazaarShellExtension:
12
 
    _reg_progid_ = "Bazaar.ShellExtension.ContextMenu"
13
 
    _reg_desc_ = "Bazaar Shell Extension"
14
 
    _reg_clsid_ = "{EEE9936B-73ED-4D45-80C9-AF918354F885}"
15
 
    _com_interfaces_ = [shell.IID_IShellExtInit, shell.IID_IContextMenu]
16
 
    _public_methods_ = [
17
 
        "Initialize", # From IShellExtInit
18
 
        "QueryContextMenu", "InvokeCommand", "GetCommandString" # IContextMenu
19
 
        ]
20
 
 
21
 
    def Initialize(self, folder, dataobj, hkey):
22
 
        self.dataobj = dataobj
23
 
 
24
 
    def QueryContextMenu(self, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags):
25
 
        format_etc = win32con.CF_HDROP, None, 1, -1, pythoncom.TYMED_HGLOBAL
26
 
        sm = self.dataobj.GetData(format_etc)
27
 
        num_files = shell.DragQueryFile(sm.data_handle, -1)
28
 
        if num_files>1:
29
 
            msg = "&Hello from Python (with %d files selected)" % num_files
30
 
        else:
31
 
            fname = shell.DragQueryFile(sm.data_handle, 0)
32
 
            msg = "&Hello from Python (with '%s' selected)" % fname
33
 
        idCmd = idCmdFirst
34
 
        items = []
35
 
        if (uFlags & 0x000F) == shellcon.CMF_NORMAL: # Check == here, since CMF_NORMAL=0
36
 
            print "CMF_NORMAL..."
37
 
            items.append(msg)
38
 
        elif uFlags & shellcon.CMF_VERBSONLY:
39
 
            print "CMF_VERBSONLY..."
40
 
            items.append(msg + " - shortcut")
41
 
        elif uFlags & shellcon.CMF_EXPLORE:
42
 
            print "CMF_EXPLORE..."
43
 
            items.append(msg + " - normal file, right-click in Explorer")
44
 
        elif uFlags & CMF_DEFAULTONLY:
45
 
            print "CMF_DEFAULTONLY...\r\n"
46
 
        else:
47
 
            print "** unknown flags", uFlags
48
 
        win32gui.InsertMenu(hMenu, indexMenu,
49
 
                            win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,
50
 
                            0, None)
51
 
        indexMenu += 1
52
 
        for item in items:
53
 
            win32gui.InsertMenu(hMenu, indexMenu,
54
 
                                win32con.MF_STRING|win32con.MF_BYPOSITION,
55
 
                                idCmd, item)
56
 
            indexMenu += 1
57
 
            idCmd += 1
58
 
 
59
 
        win32gui.InsertMenu(hMenu, indexMenu,
60
 
                            win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,
61
 
                            0, None)
62
 
        indexMenu += 1
63
 
        return idCmd-idCmdFirst # Must return number of menu items we added.
64
 
 
65
 
    def InvokeCommand(self, ci):
66
 
        mask, hwnd, verb, params, dir, nShow, hotkey, hicon = ci
67
 
        # FIXME: Run the actual command
68
 
 
69
 
    def GetCommandString(self, cmd, typ):
70
 
        return "Hello from Python!!"
71
 
 
72
 
registryKeys = [
73
 
        "*\\shellex\\ContextMenuHandlers", 
74
 
        "Directory\\Background\\shellex\\ContextMenuHandlers", 
75
 
        "Directory\\shellex\\ContextMenuHandlers", 
76
 
        "Folder\\shellex\\ContextmenuHandlers"
77
 
        ]
78
 
 
79
 
def DllRegisterServer():
80
 
    import _winreg
81
 
    for keyname in registryKeys: 
82
 
            key = _winreg.CreateKey(_winreg.HKEY_CLASSES_ROOT, keyname)
83
 
            subkey = _winreg.CreateKey(key, "TortoiseBzr")
84
 
            _winreg.SetValueEx(subkey, None, 0, _winreg.REG_SZ, BazaarShellExtension._reg_clsid_)
85
 
            _winreg.CloseKey(subkey)
86
 
            _winreg.CloseKey(key)
87
 
 
88
 
    print BazaarShellExtension._reg_desc_, "registration complete."
89
 
 
90
 
def DllUnregisterServer():
91
 
    import _winreg
92
 
    try:
93
 
        for keyname in registryKeys:
94
 
            _winreg.DeleteKey(_winreg.HKEY_CLASSES_ROOT,
95
 
                                "%s\\TortoiseBzr" % keyname)
96
 
    except WindowsError, details:
97
 
        import errno
98
 
        if details.errno != errno.ENOENT:
99
 
            raise
100
 
    print BazaarShellExtension._reg_desc_, "unregistration complete."
101
 
 
102
 
if __name__ == '__main__':
103
 
    from win32com.server import register
104
 
    register.UseCommandLine(BazaarShellExtension,
105
 
                   finalize_register = DllRegisterServer,
106
 
                   finalize_unregister = DllUnregisterServer)