Exemplo n.º 1
0
    def _create_menu(self, menu, menu_options):
        """Generate the popup menu just before drawing.
        This is needed as it recursively runs on submenus.
        """

        for menu_option in menu_options[::-1]:
            if menu_option.get('hidden', False):
                continue

            text = menu_option.get('name', 'Option')
            icon = menu_option.get('icon', None)
            action = menu_option.get('action', None)
            id = menu_option.get('_id')

            #Set icon
            if icon:
                try:
                    icon = self._set_icon_menu(icon)
                except pywintypes.error:
                    icon = None

            #Add menu item
            if id in self.menu_actions_by_id or action is None:
                item, extras = win32gui_struct.PackMENUITEMINFO(text=text,
                                                                hbmpItem=icon,
                                                                wID=id)
                win32gui.InsertMenuItem(menu, 0, 1, item)

            #Add submenu
            else:
                submenu = win32gui.CreatePopupMenu()
                self._create_menu(submenu, action)
                item, extras = win32gui_struct.PackMENUITEMINFO(
                    text=text, hbmpItem=icon, hSubMenu=submenu)
                win32gui.InsertMenuItem(menu, 0, 1, item)
Exemplo n.º 2
0
 def create_menu(self, menu, menu_options):
     for option_text, option_icon, option_Checked, option_action, option_id in menu_options[::
                                                                                            -1]:
         if option_icon:
             option_icon = self.prep_menu_icon(option_icon)
         item_state = None
         if option_Checked is True:
             item_state = win32con.MFS_CHECKED
         if option_id in self.menu_actions_by_id:
             item, extras = win32gui_struct.PackMENUITEMINFO(
                 text=option_text,
                 hbmpItem=option_icon,
                 fState=item_state,
                 wID=option_id)
             win32gui.InsertMenuItem(menu, 0, 1, item)
             if option_id not in self.__menu_extra:
                 self.__menu_extra.setdefault(option_id, extras)
             else:
                 self.__menu_extra[option_id] = extras
         else:
             submenu = win32gui.CreatePopupMenu()
             self.create_menu(submenu, option_action)
             item, extras = win32gui_struct.PackMENUITEMINFO(
                 text=option_text,
                 hbmpItem=option_icon,
                 fState=item_state,
                 hSubMenu=submenu)
             win32gui.InsertMenuItem(menu, 0, 1, item)
             if option_id not in self.__menu_extra:
                 self.__menu_extra.setdefault(option_id, extras)
             else:
                 self.__menu_extra[option_id] = extras
Exemplo n.º 3
0
 def get_popup(self):
     menu = win32gui.CreatePopupMenu()
     (item, _) = win32gui_struct.PackMENUITEMINFO(text=u'Quit', wID=self.IDI_QUIT)
     win32gui.InsertMenuItem(menu, 0, 1, item)
     win32gui.SetMenuDefaultItem(menu, 0, self.IDI_QUIT)
     (item, _) = win32gui_struct.PackMENUITEMINFO(text=u'Test', wID=123)
     win32gui.InsertMenuItem(menu, 0, 1, item)
     return menu
Exemplo n.º 4
0
 def create_menu(self, menu, menu_options):
     for opt_text, opt_icon, opt_action, opt_id in menu_options[::-1]:
         if  opt_icon:
             opt_icon = self.prep_menu_icon(opt_icon)
         if  opt_id in self.menu_actions_by_id:
             item, extras = win32gui_struct.PackMENUITEMINFO(text=opt_text, hbmpItem=opt_icon, wID=opt_id)
             win32gui.InsertMenuItem(menu, 0, 1, item)
         else:
             submenu = win32gui.CreatePopupMenu()
             self.create_menu(submenu, opt_action)
             item, extras = win32gui_struct.PackMENUITEMINFO(text=opt_text, hbmpItem=opt_icon, hSubMenu=submenu)
             win32gui.InsertMenuItem(menu, 0, 1, item)
Exemplo n.º 5
0
    def create_menu(self, parent_menu, menu_options):
        """ Create Menus """
        for key, (name, action) in menu_options.iteritems():
            # If action is dict, Create sub menu
            if isinstance(action, dict):
                submenu = win32gui.CreatePopupMenu()
                self.create_menu(submenu, action)
                item, _ = win32gui_struct.PackMENUITEMINFO(text=name,
                                                           hSubMenu=submenu)
                win32gui.InsertMenuItem(parent_menu, 0, 1, item)

            # Else, create menu entry
            else:
                item, _ = win32gui_struct.PackMENUITEMINFO(text=name, wID=key)
                win32gui.InsertMenuItem(parent_menu, 0, 1, item)
Exemplo n.º 6
0
	def create_menu(self, menu, menopts):
		# Inserts all items into the popup (again, recursive)
		for opt in menopts:
			if opt[1] != None:
				opt_icon = opt[1].get()
			else:
				opt_icon = None
			mi_fstate = 0
			mi_ftype = 0
			if opt[3]["disabled"]:
				mi_fstate = mi_fstate | win32con.MFS_DISABLED
			if opt[3]["highlight"]:
				mi_fstate = mi_fstate | win32con.MFS_HILITE
			if opt[3]["separator"]:
				mi_ftype = mi_ftype | win32con.MFT_SEPARATOR
			if type(opt[2]) == type([]):
				submenu = win32gui.CreatePopupMenu()
				self.create_menu(submenu, opt[2])
				item, extras = win32gui_struct.PackMENUITEMINFO(
														text=opt[0].get(),
														hbmpItem=opt_icon,
														hSubMenu=submenu,
														fState=mi_fstate,
														fType=mi_ftype,
														wID=opt[-1])
			else:
				item, extras = win32gui_struct.PackMENUITEMINFO(
														text=opt[0].get(),
														hbmpItem=opt_icon,
														fState=mi_fstate,
														fType=mi_ftype,
														wID=opt[-1])
			win32gui.InsertMenuItem(menu, 0, 1, item)
Exemplo n.º 7
0
    def create_menu(self):
        menu = win32gui.CreatePopupMenu()
        item, extras = win32gui_struct.PackMENUITEMINFO(
            text = self.app_state.gettext('Close'),
            hbmpItem=win32con.HBMMENU_MBAR_CLOSE,
            wID=EXIT_COMMAND
        )
        win32gui.InsertMenuItem(
            menu,
            0,
            1,
            item
        )
        win32gui.SetMenuDefaultItem(
            menu,
            EXIT_COMMAND,
            0
        )
        item, extras = win32gui_struct.PackMENUITEMINFO(
            text = self.app_state.gettext('Open'),
            hbmpChecked = None,
            hbmpUnchecked = None,
            wID=OPEN_COMMAND
            )
        win32gui.InsertMenuItem(
            menu,
            0,
            1,
            item
        )

        win32gui.SetForegroundWindow(self.window_id)
        x, y = win32gui.GetCursorPos()
        win32gui.TrackPopupMenu(
            menu,
            win32con.TPM_LEFTALIGN,
            x, y,
            0,
            self.window_id,
            None
        )
        win32gui.PostMessage(
            self.window_id,
            win32con.WM_NULL,
            0,
            0
        )
Exemplo n.º 8
0
    def create_menu(self):
        '''Create context menu'''
        if self.MENU is not None:
            return
        self.MENU = win32gui.CreatePopupMenu()
        # Add menu items
        # Insert backwards
        # https://msdn.microsoft.com/en-us/library/windows/desktop/ms647988(v=vs.85).aspx

        # Quit
        win32gui.InsertMenuItem(
            self.MENU, 0, 1,
            win32gui_struct.PackMENUITEMINFO(text='Quit', wID=0)[0])
        # App name
        win32gui.InsertMenuItem(
            self.MENU, 0, 1,
            win32gui_struct.PackMENUITEMINFO(text=self.APP_NAME,
                                             wID=0,
                                             fState=win32con.MFS_DISABLED)[0])
Exemplo n.º 9
0
    def create_menu(self, menu, menu_options):

        if DEBUG: print(sys._getframe(0).f_code.co_name)

        for option_text, option_icon, option_action, option_id in menu_options[::-1]:
            if option_icon:
                option_icon = self.prep_menu_icon(option_icon)
            
            if option_id in self.menu_actions_by_id:                
                item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text,
                                                                hbmpItem=option_icon,
                                                                wID=option_id)
                win32gui.InsertMenuItem(menu, 0, 1, item)
            else:
                submenu = win32gui.CreatePopupMenu()
                self.create_menu(submenu, option_action)
                item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text,
                                                                hbmpItem=option_icon,
                                                                hSubMenu=submenu)
                win32gui.InsertMenuItem(menu, 0, 1, item)
Exemplo n.º 10
0
    def _notifyCallback(self, hwnd, msg, wparam, lparam):
        if not lparam in [
                win32con.WM_LBUTTONDBLCLK, win32con.WM_RBUTTONUP,
                win32con.WM_LBUTTONUP
        ]:
            return
        hMenu = win32gui.CreatePopupMenu()

        self._callbacks.clear()

        items = self._items() if callable(self._items) else self._items

        wId = 1023
        for txt, bmp, checked, callback in items:
            if checked is None:
                item, _ = win32gui_struct.PackMENUITEMINFO(text=str(txt),
                                                           hbmpItem=bmp,
                                                           wID=wId)
            else:
                item, _ = win32gui_struct.PackMENUITEMINFO(
                    text=str(txt),
                    hbmpItem=bmp,
                    wID=wId,
                    fState=win32con.MFS_CHECKED
                    if checked else win32con.MFS_UNCHECKED)
            win32gui.InsertMenuItem(hMenu, 0, 1, item)
            self._callbacks[wId] = callback
            wId += 1

        pos = win32gui.GetCursorPos()
        try:
            win32gui.SetForegroundWindow(hwnd)
            win32gui.TrackPopupMenu(hMenu, win32con.TPM_LEFTALIGN, pos[0],
                                    pos[1], 0, hwnd, None)
            win32gui.PostMessage(hwnd, win32con.WM_NULL, 0, 0)
        except:
            pass

        win32gui.DefWindowProc(hwnd, msg, wparam, lparam)
Exemplo n.º 11
0
 def create_menu(self, menu, menu_options):
     if len(menu_options) > 9:
         if recorder.mode != "Record":
             menu_options[0][0] = "Start recording\t\tCTRL+ALT+R"
             menu_options[0][1] = icon_record
         else:
             menu_options[0][0] = "Stop recording\t\tCTRL+ALT+R"
             menu_options[0][1] = icon_stop
         if recorder.mode == "Play":
             menu_options[1][0] = "Wait end of replay"  # disabled
             menu_options[1][1] = icon_stop
         else:
             menu_options[1][0] = "Start replaying clipboard"
             menu_options[1][1] = icon_play
         if not recorder.mode == "Info":
             menu_options[2][
                 0] = "Start displaying element information\tCTRL+SHIFT+D"
             menu_options[2][1] = icon_search
         else:
             menu_options[2][
                 0] = "Stop displaying element information\tCTRL+SHIFT+D"
             menu_options[2][1] = icon_stop
         if not recorder.smart_mode:
             menu_options[3][0] = "Start Smart mode\t\tCTRL+ALT+S"
             menu_options[3][1] = icon_light_on
         else:
             menu_options[3][0] = "Stop Smart mode\t\tCTRL+ALT+S"
             menu_options[3][1] = icon_stop
         if not recorder.relative_coordinate_mode:
             menu_options[6][2][0][1] = icon_cross
         else:
             menu_options[6][2][0][1] = icon_check
         if not recorder.process_menu_click_mode:
             menu_options[6][2][1][1] = icon_cross
         else:
             menu_options[6][2][1][1] = icon_check
     for option_text, option_icon, option_action, option_id in menu_options[::
                                                                            -1]:
         if option_icon:
             option_icon = self.prep_menu_icon(option_icon)
         if option_id in self.menu_actions_by_id:
             item, _ = win32gui_struct.PackMENUITEMINFO(
                 text=option_text, hbmpItem=option_icon, wID=option_id)
             if option_text == '- - - - - -':
                 win32gui.InsertMenu(
                     menu, 0,
                     win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0,
                     None)
             else:
                 win32gui.InsertMenuItem(menu, 0, 1, item)
         else:
             submenu = win32gui.CreatePopupMenu()
             self.create_menu(submenu, option_action)
             item, _ = win32gui_struct.PackMENUITEMINFO(
                 text=option_text, hbmpItem=option_icon, hSubMenu=submenu)
             if option_text == '- - - - - -':
                 win32gui.InsertMenu(
                     menu, 0,
                     win32con.MF_SEPARATOR | win32con.MF_BYPOSITION, 0,
                     None)
             else:
                 win32gui.InsertMenuItem(menu, 0, 1, item)