|
|
import webbrowser from functools import partial
import wx # type: ignore
from gooey.gui import three_to_four from gooey.gui.components.dialogs import HtmlDialog
class MenuBar(wx.MenuBar): """
Wx.MenuBar handles converting the users list of Menu Groups into concrete wx.Menu instances. """
def __init__(self, buildSpec, *args, **kwargs): super(MenuBar,self).__init__(*args, **kwargs) self.buildSpec = buildSpec self.makeMenuItems(buildSpec.get('menu', []))
def makeMenuItems(self, menuGroups): """
Assign the menu groups list to wx.Menu instances and bind the appropriate handlers. """
for menuGroup in menuGroups: menu = wx.Menu() for item in menuGroup.get('items'): option = menu.Append(wx.NewId(), item.get('menuTitle', '')) self.Bind(wx.EVT_MENU, self.handleMenuAction(item), option) self.Append(menu, '&' + menuGroup.get('name'))
def handleMenuAction(self, item): """
Dispatch based on the value of the type field. """
handlers = { 'Link': self.openBrowser, 'AboutDialog': self.spawnAboutDialog, 'MessageDialog': self.spawnMessageDialog, 'HtmlDialog': self.spawnHtmlDialog } f = handlers[item['type']] return partial(f, item)
def openBrowser(self, item, *args, **kwargs): """
Open the supplied URL in the user's default browser. """
webbrowser.open(item.get('url'))
def spawnMessageDialog(self, item, *args, **kwargs): """
Show a simple message dialog with the user's message and caption. """
wx.MessageDialog(self, item.get('message', ''), caption=item.get('caption', '')).ShowModal()
def spawnHtmlDialog(self, item, *args, **kwargs): HtmlDialog(caption=item.get('caption', ''), html=item.get('html')).ShowModal()
def spawnAboutDialog(self, item, *args, **kwargs): """
Fill the wx.AboutBox with any relevant info the user provided and launch the dialog """
aboutOptions = { 'name': 'SetName', 'version': 'SetVersion', 'description': 'SetDescription', 'copyright': 'SetCopyright', 'website': 'SetWebSite', 'developer': 'AddDeveloper', 'license': 'SetLicense' } about = three_to_four.AboutDialog() for field, method in aboutOptions.items(): if field in item: getattr(about, method)(item[field])
three_to_four.AboutBox(about)
|