/[cvs]/nfo/projects/mess/src/client/windows/context_menu.py
ViewVC logotype

Diff of /nfo/projects/mess/src/client/windows/context_menu.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by joko, Sat Jun 3 15:11:27 2006 UTC revision 1.5 by joko, Sat Jun 3 20:29:52 2006 UTC
# Line 8  Line 8 
8  # * Right-Click on a .py file - locate and click on 'Hello from Python' on  # * Right-Click on a .py file - locate and click on 'Hello from Python' on
9  #   the context menu.  #   the context menu.
10    
11    # see also: http://www.codeproject.com/shell/ShellExtGuide2.asp
12    
13  import pythoncom  import pythoncom
14  from win32com.shell import shell, shellcon  from win32com.shell import shell, shellcon
15  import win32gui  import win32gui, win32gui_struct
16  import win32con  import win32con
17    import win32api, winerror
18    
19  IContextMenu_Methods = ["QueryContextMenu", "InvokeCommand", "GetCommandString"]  IContextMenu_Methods = ["QueryContextMenu", "InvokeCommand", "GetCommandString"]
20  IShellExtInit_Methods = ["Initialize"]  IShellExtInit_Methods = ["Initialize"]
# Line 50  class ShellExtension: Line 53  class ShellExtension:
53            self.files_selected.append(fname)            self.files_selected.append(fname)
54    
55          # build context menu(s)          # build context menu(s)
56          msg = "A&rchiveMe"          msg = "Add to A&rchive"
57          idCmd = idCmdFirst          idCmd = idCmdFirst
58          items = []          items = []
59          if (uFlags & 0x000F) == shellcon.CMF_NORMAL: # Check == here, since CMF_NORMAL=0          if (uFlags & 0x000F) == shellcon.CMF_NORMAL: # Check == here, since CMF_NORMAL=0
60              print "CMF_NORMAL..."              print "CMF_NORMAL..."
61              items.append(msg)              items.append(msg + " - normal")
62          elif uFlags & shellcon.CMF_VERBSONLY:          elif uFlags & shellcon.CMF_VERBSONLY:
63              print "CMF_VERBSONLY..."              print "CMF_VERBSONLY..."
64              items.append(msg + " - shortcut")              items.append(msg + " - shortcut")
# Line 63  class ShellExtension: Line 66  class ShellExtension:
66              print "CMF_EXPLORE..."              print "CMF_EXPLORE..."
67              #items.append(msg + " - normal file, right-click in Explorer")              #items.append(msg + " - normal file, right-click in Explorer")
68              items.append(msg)              items.append(msg)
69                items.append("Named Shortcut &1")
70                items.append("Named Shortcut &2")
71          elif uFlags & CMF_DEFAULTONLY:          elif uFlags & CMF_DEFAULTONLY:
72              print "CMF_DEFAULTONLY...\r\n"              print "CMF_DEFAULTONLY...\r\n"
73              items.append("hello world - 1!")              items.append("hello world - 1!")
74          else:          else:
75              print "** unknown flags", uFlags              print "** unknown flags", uFlags
76              items.append("hello world - 2!")              items.append("hello world - 2!")
77            
78            # add seperator line
79          win32gui.InsertMenu(hMenu, indexMenu,          win32gui.InsertMenu(hMenu, indexMenu,
80                              win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,                              win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,
81                              0, None)                              idCmd, None)
82          indexMenu += 1          indexMenu += 1
83            idCmd += 1
84            
85            # create main menu entries
86          for item in items:          for item in items:
87              win32gui.InsertMenu(hMenu, indexMenu,              win32gui.InsertMenu(hMenu, indexMenu,
88                                  win32con.MF_STRING|win32con.MF_BYPOSITION,                                  win32con.MF_STRING|win32con.MF_BYPOSITION,
89                                  idCmd, item)                                  idCmd, item)
90              indexMenu += 1              indexMenu += 1
91              idCmd += 1              idCmd += 1
92            
93            # create submenu entries
94            hSubmenu = win32gui.CreatePopupMenu()
95            win32gui.InsertMenu(hSubmenu, 0,
96                                win32con.MF_BYPOSITION,
97                                idCmd, "&Settings...")
98            idCmd += 1
99            
100            # insert the submenu into a new container menu entry
101            item, extras = win32gui_struct.PackMENUITEMINFO(
102              wID = idCmd,
103              hSubMenu = hSubmenu,
104              text = "&Mess"
105            )
106            win32gui.InsertMenuItem(hMenu, indexMenu, 1, item)        
107            indexMenu += 1
108            idCmd += 1
109    
110            # add seperator line
111          win32gui.InsertMenu(hMenu, indexMenu,          win32gui.InsertMenu(hMenu, indexMenu,
112                              win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,                              win32con.MF_SEPARATOR|win32con.MF_BYPOSITION,
113                              0, None)                              idCmd, None)
114          indexMenu += 1          indexMenu += 1
115            idCmd += 1
116    
117          return idCmd-idCmdFirst # Must return number of menu items we added.          return idCmd-idCmdFirst # Must return number of menu items we added.
118    
119        def GetCommandString(self, cmdId, typ):
120            #if cmdId == 0:
121            #  return "Hello from Python!!"
122            #else:
123            #  return "abc"
124            return self._reg_name_ + "_" + cmdId;
125    
126      def InvokeCommand(self, ci):      def InvokeCommand(self, ci):
127          mask, hwnd, verb, params, dir, nShow, hotkey, hicon = ci          mask, hwnd, verb, params, dir, nShow, hotkey, hicon = ci
         win32gui.MessageBox(hwnd, "\n".join(self.files_selected), "ArchiveMe", win32con.MB_OK)  
128    
129      def GetCommandString(self, cmd, typ):          # If lpVerb really points to a string, ignore this function call and bail out.
130          return "Hello from Python!!"          if win32api.HIWORD( verb ) != 0:
131              return winerror.E_INVALIDARG
132            
133            function_id = win32api.LOWORD(verb)
134            # TODO: establish mapping with building the context menus in "QueryContextMenu"
135            if function_id == 1:
136              method = "Add to archive"
137            elif function_id == 2:
138              method = "Shortcut 1"
139            elif function_id == 3:
140              method = "Shortcut 2"
141            else:
142              method = "Unknown"
143            
144            # do action(s)
145            win32gui.MessageBox(hwnd, "\n".join(self.files_selected), method, win32con.MB_OK)
146    
147    
148  def DllRegisterServer():  def DllRegisterServer():

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.5

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed