#--------------------------------------------------------------------
#
#   PyGUI - Menu - Win32
#
#--------------------------------------------------------------------

import win32ui as ui, win32con as wc
from GUI import export
from GUI.WinMenus import win_command_to_id
from GUI.GMenus import Menu as GMenu

class Menu(GMenu):

    def __init__(self, *args, **kwds):
        GMenu.__init__(self, *args, **kwds)
    
    def _update_platform_menu(self):
        #  Don't need to do anything here because platform menu item
        #  states are updated by HookCommandUpdate handlers.
        pass
    
    def _win_create_menu(self):
        #  Create a fresh platform menu reflecting the current items. Need
        #  to do this because it's not possible to share submenu handles
        #  between windows.
        self._rebuild_platform_menu()
        win_menu = self._win_menu
        self._win_menu = None # So we don't accidentally try to reuse it
        return win_menu
    
    def _clear_platform_menu(self):
        self._win_menu = ui.CreatePopupMenu()

#	def _clear_platform_menu(self):
#		#print "Menu._clear_platform_menu:", self ###
#		bypos = wc.MF_BYPOSITION
#		win_menu = self._win_menu
#		n = win_menu.GetMenuItemCount()
#		for i in xrange(n-1, -1, -1):
#			win_menu.DeleteMenu(i, bypos)
    
    def _add_separator_to_platform_menu(self):
        #print "Menu._add_separator_to_platform_menu:", self ###
        self._win_menu.AppendMenu(wc.MF_SEPARATOR, 0)
    
    def _add_item_to_platform_menu(self, item, name, command_name, *args):
        #print "Menu._add_item_to_platform_menu:", self, item, name ###
        win_text = name.replace("&", "&&")
        key = item._key
        if key:
            win_text += "\tCtrl+"
            if item._shift:
                win_text += "Shift+"
            if item._option:
                win_text += "Alt+"
            win_text += key
        flags = wc.MF_STRING
        #  These are done by HookCommandUpdate handler
        #if not item.enabled:
        #	flags |= wc.MF_GRAYED
        #if item.checked:
        #	flags |= wc.MF_CHECKED
        id = win_command_to_id(command_name, *args)
        self._win_menu.AppendMenu(flags, id, win_text)

export(Menu)
