You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

89 lines
2.7 KiB

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)