Пример #1
0
 def create_menu(self, menu, menu_options):
     index = 0
     for option_text, option_icon, option_action, option_id in menu_options[::
                                                                            -1]:
         if option_icon:
             option_icon = self.prep_menu_icon(option_icon)
             self.menu_item_map[index] = (option_icon, option_text)
         if option_id in self.menu_actions_by_id:
             if option_icon:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     fType=win32con.MFT_OWNERDRAW,
                     dwItemData=index,
                     wID=option_id)
             else:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     text=option_text, wID=option_id)
         else:
             submenu = win32gui.CreatePopupMenu()
             self.create_menu(submenu, option_action)
             if option_icon:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     fType=win32con.MFT_OWNERDRAW,
                     dwItemData=index,
                     wID=option_id,
                     hSubMenu=submenu)
             else:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     text=option_text, wID=option_id, hSubMenu=submenu)
         index = index + 1
         win32gui.InsertMenuItem(menu, 0, 1, item)
Пример #2
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)
Пример #3
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
Пример #4
0
    def create_menu(self, menu, menu_options):

        toggles = self.state.menu_states()

        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:

                state = 0
                try:
                    if toggles[option_text]:
                        state = 8
                except KeyError:
                    pass

                item, extras = win32gui_struct.PackMENUITEMINFO(
                    text=option_text,
                    hbmpItem=option_icon,
                    wID=option_id,
                    fState=state)
                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)
Пример #5
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)
Пример #6
0
 def create_menu(self, menu, menu_options):
     for option_text, option_icon, option_action, option_id in menu_options[::
                                                                            -1]:
         if option_icon:  # has icon
             if not callable(option_icon):
                 option_icon = self.prep_menu_icon(option_icon)
         if option_text == "-":  # separator
             win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION,
                                 win32con.MF_SEPARATOR, None)
         elif option_id in self.menu_actions_by_id:  # normal item
             checked = False
             if callable(option_icon):  # checkbox item
                 checked = option_icon()
                 option_icon = None  # no icon
             if checked:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     text=option_text,
                     fState=win32con.MFS_CHECKED,
                     wID=option_id)
             else:
                 item, extras = win32gui_struct.PackMENUITEMINFO(
                     text=option_text, hbmpItem=option_icon, wID=option_id)
             win32gui.InsertMenuItem(menu, 0, 1, item)
         else:  # submenu
             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)
Пример #7
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
Пример #8
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)
Пример #9
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)
Пример #10
0
 def create_menu(self, menu, menu_options):
     index = 0
     for option_text, option_icon, option_action, option_checked, option_id in menu_options[::
                                                                                            -1]:
         menuiteminfo = dict(text=option_text, wID=option_id)
         menu_checked = self.menu_actions_by_id[option_id][1]
         if menu_checked is not None:
             checkable_menu = menu
             if menu_checked:
                 menuiteminfo.update(dict(fState=win32con.MFS_CHECKED))
         else:
             checkable_menu = None
         self.menu_actions_by_id[option_id] = (
             self.menu_actions_by_id[option_id][0], menu_checked,
             checkable_menu)
         if option_icon:
             option_icon = self.prep_menu_icon(option_icon)
             self.menu_item_map[index] = (option_icon, None)
             menuiteminfo.update(
                 dict(hbmpItem=win32con.HBMMENU_CALLBACK, dwItemData=index))
         if option_id not in self.menu_actions_by_id:
             submenu = win32gui.CreatePopupMenu()
             self.create_menu(submenu, option_action)
             menuiteminfo.update(dict(hSubMenu=submenu))
         item, extras = win32gui_struct.PackMENUITEMINFO(**menuiteminfo)
         if option_icon: index += 1
         self.log.debug('id={} menu={} {}'.format(
             option_id, menu, self.menu_actions_by_id[option_id]))
         win32gui.InsertMenuItem(menu, 0, 1, item)
Пример #11
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
        )
Пример #12
0
    def create_menu(self, menu):
        #        option_icon = self.prep_menu_icon(option_icon)
        item, extras = win32gui_struct.PackMENUITEMINFO(
            text=base.STR_EXIT,
            hbmpItem=None,
            wID=_ID_QUIT)

        win32gui.InsertMenuItem(menu, 0, 1, item)

        win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION,
                            win32con.MF_SEPARATOR, None)

        win32gui.InsertMenu(menu, 0,
                            (win32con.MF_POPUP | win32con.MF_BYPOSITION),
                            self.notices_menu, base.STR_NOTICES_MENU)

        win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION,
                            win32con.MF_SEPARATOR, None)

        win32gui.InsertMenu(menu, 0,
                            win32con.MF_POPUP | win32con.MF_BYPOSITION,
                            self.status_menu, base.STR_STATUS_MENU)

        win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION,
                            win32con.MF_SEPARATOR, None)

        # item, extras = win32gui_struct.PackMENUITEMINFO(
        #     text=STR_OPEN_CONSOLE,
        #     hbmpItem=None,
        #     wID=_ID_OPEN_CONSOLE)
        # win32gui.InsertMenuItem(menu, 0, 1, item)

        item, extras = win32gui_struct.PackMENUITEMINFO(
            text=base.STR_OPEN_FOLDER,
            hbmpItem=None,
            wID=_ID_OPEN_FOLDER)

        win32gui.InsertMenuItem(menu, 0, 1, item)

        item, extras = win32gui_struct.PackMENUITEMINFO(
            text=base.STR_OPEN_WEBFRONT,
            hbmpItem=None,
            wID=_ID_OPEN_WEBFRONT)

        win32gui.InsertMenuItem(menu, 0, 1, item)
Пример #13
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])
Пример #14
0
    def addNewNotice(self, notice, pop_last=False):
        self.notice_index = (self.notice_index + 1) % base.NUM_OF_NOTICES
        item, extras = win32gui_struct.PackMENUITEMINFO(
            text=notice.title,
            hbmpItem=None,
            wID=_ID_NOTICE + (self.notice_index % base.NUM_OF_NOTICES))

        win32gui.InsertMenuItem(self.notices_menu, 0, 1, item)
        if pop_last:
            win32gui.RemoveMenu(self.notices_menu, base.NUM_OF_NOTICES,
                                win32con.MF_BYPOSITION)
Пример #15
0
 def update_status_menu(self, user_status):
     for i, s in enumerate(base.status.STRINGS):
         fstate = 0
         if user_status == i:
             fstate = win32con.MFS_CHECKED
         item, extras = win32gui_struct.PackMENUITEMINFO(
             text=base.status.STRINGS[i],
             hbmpItem=None,
             fState=fstate,
             wID=_ID_STATUS_AVAILABLE + i)
         win32gui.SetMenuItemInfo(self.status_menu, i, 1, item)
Пример #16
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)
 def create_menu(self, menu, menu_options):
     for option_text, option_icon, option_action, option_id in menu_options[::
                                                                            -1]:
         if option_icon:
             option_icon = self.prep_menu_icon(option_icon)
         fstate = win32con.MF_BYCOMMAND
         if option_id in self.menu_actions_by_id:
             if option_action is None:
                 fstate |= win32con.MF_GRAYED
             item, extras = win32gui_struct.PackMENUITEMINFO(
                 text=option_text,
                 fState=fstate,
                 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)
Пример #18
0
    def create_menu(self, menu, menu_options):
        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_text == "-":
                win32gui.InsertMenu(menu, 0, win32con.MF_BYPOSITION,
                                    win32con.MF_SEPARATOR, None)
            else:
                item, extras = win32gui_struct.PackMENUITEMINFO(
                    text=option_text, hbmpItem=option_icon, wID=option_id)
                win32gui.InsertMenuItem(menu, 0, 1, item)
Пример #19
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)
Пример #20
0
    def create_menu(self, menu, menu_options):
        for menu_option in menu_options[::-1]:
            if isinstance(menu_option.icon, str):
                menu_option.icon = self.prep_menu_icon(menu_option.icon)

            if isinstance(menu_option, TraySubmenu):
                submenu = win32gui.CreatePopupMenu()
                self.create_menu(submenu, menu_option.items)
                item, extras = win32gui_struct.PackMENUITEMINFO(
                    text=menu_option.text,
                    hbmpItem=menu_option.icon,
                    hSubMenu=submenu,
                    fState=menu_option.style)
                win32gui.InsertMenuItem(menu, 0, 1, item)
            elif isinstance(menu_option, TrayItem):
                item, extras = win32gui_struct.PackMENUITEMINFO(
                    text=menu_option.text,
                    hbmpItem=menu_option.icon,
                    wID=menu_option._next_action_id,
                    fState=menu_option.style,
                    fType=menu_option.type)
                win32gui.InsertMenuItem(menu, 0, 1, item)
Пример #21
0
    def _create_status_menu(self):
        menu = win32gui.CreateMenu()
        for i, s in enumerate(base.status.STRINGS):
            fstate = 0
            if self.shell.user_status == i:
                fstate = win32con.MFS_CHECKED
            item, extras = win32gui_struct.PackMENUITEMINFO(
                text=base.status.STRINGS[i],
                hbmpItem=None,
                fState=fstate,
                wID=_ID_STATUS_AVAILABLE + i)
            win32gui.InsertMenuItem(menu, i, 1, item)

        self.status_menu = menu
        return self.status_menu
Пример #22
0
 def _testPackUnpack(self, text):
     vals = dict(fType=win32con.MFT_MENUBARBREAK,
                 fState=win32con.MFS_CHECKED,
                 wID=123,
                 hSubMenu=1234,
                 hbmpChecked=12345,
                 hbmpUnchecked=123456,
                 dwItemData=1234567,
                 text=text,
                 hbmpItem=321)
     mii, extras = win32gui_struct.PackMENUITEMINFO(**vals)
     fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked, \
     dwItemData, text, hbmpItem = win32gui_struct.UnpackMENUITEMINFO(mii)
     self.assertDictEquals(vals,
                           fType=fType,
                           fState=fState,
                           wID=wID,
                           hSubMenu=hSubMenu,
                           hbmpChecked=hbmpChecked,
                           hbmpUnchecked=hbmpUnchecked,
                           dwItemData=dwItemData,
                           text=text,
                           hbmpItem=hbmpItem)
Пример #23
0
    def show_menu(self):
        menu = win32gui.CreatePopupMenu()
        count = 0

        for count, (option_text, option_id) in enumerate(self.menu_entries):
            win32gui.AppendMenu(
                menu,
                win32con.MF_STRING | win32con.MF_GRAYED | win32con.MF_DISABLED,
                option_id, option_text)

        win32gui.InsertMenu(menu, count + 1, win32con.MF_BYPOSITION,
                            win32con.MF_SEPARATOR, None)
        win32gui.InsertMenuItem(
            menu, count + 2, 1,
            win32gui_struct.PackMENUITEMINFO(
                text="Quit", wID=0, hbmpItem=win32con.HBMMENU_MBAR_CLOSE)[0])

        pos = win32gui.GetCursorPos()
        # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp
        win32gui.SetForegroundWindow(self.hwnd)
        win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1],
                                0, self.hwnd, None)
        win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0)
Пример #24
0
 def add_item_to_menu(self, *args, **kwargs):
     menu = args[0]
     item, extras = win32gui_struct.PackMENUITEMINFO(**kwargs)
     win32gui.InsertMenuItem(menu, self.menu_counters[menu], 1, item)
     self.menu_counters[menu] += 1
Пример #25
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)