mirror of https://github.com/chriskiehl/Gooey.git
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.
92 lines
2.8 KiB
92 lines
2.8 KiB
from collections import OrderedDict
|
|
import wx
|
|
from gooey.gui.pubsub import pub
|
|
|
|
from gooey.gui import events
|
|
from gooey.gui.windows.advanced_config import ConfigPanel
|
|
from gooey.gui.windows.sidebar import Sidebar
|
|
from gooey.gui.util import wx_util
|
|
from gooey.gui.util.quoting import quote
|
|
|
|
|
|
basic_config = {
|
|
'required': [{
|
|
'type': 'CommandField',
|
|
'data': {
|
|
'display_name': 'Enter Commands',
|
|
'help': 'Enter command line arguments',
|
|
'nargs': '',
|
|
'commands': '',
|
|
'choices': [],
|
|
}
|
|
}],
|
|
'optional': []
|
|
}
|
|
|
|
|
|
class FlatLayout(wx.Panel):
|
|
def __init__(self, *args, **kwargs):
|
|
self._build_spec = kwargs.pop('build_spec')
|
|
super(FlatLayout, self).__init__(*args, **kwargs)
|
|
self.SetDoubleBuffered(True)
|
|
|
|
self.main_content = ConfigPanel(self, widgets=self._build_spec['widgets'], opt_cols=self._build_spec['num_optional_cols'])
|
|
|
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
sizer.Add(self.main_content, 3, wx.EXPAND)
|
|
self.SetSizer(sizer)
|
|
|
|
def GetOptions(self):
|
|
return self.main_content.GetOptions()
|
|
|
|
def GetRequiredArgs(self):
|
|
return self.main_content.GetRequiredArgs()
|
|
|
|
|
|
class ColumnLayout(wx.Panel):
|
|
def __init__(self, *args, **kwargs):
|
|
self._build_spec = kwargs.pop('build_spec')
|
|
super(ColumnLayout, self).__init__(*args, **kwargs)
|
|
self.SetDoubleBuffered(True)
|
|
|
|
self.sidebar = Sidebar(self, contents=self._build_spec['widgets'].keys())
|
|
|
|
self.config_panels = self.build_panels(self._build_spec)
|
|
self.active_panel = self.config_panels.keys()[0]
|
|
self.config_panels[self.active_panel].Show()
|
|
|
|
sizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
sizer.Add(self.sidebar, 1, wx.EXPAND)
|
|
sizer.Add(wx_util.vertical_rule(self), 0, wx.EXPAND)
|
|
for panel in self.config_panels.values():
|
|
sizer.Add(panel, 3, wx.EXPAND)
|
|
self.SetSizer(sizer)
|
|
|
|
pub.subscribe(self.load_view, events.PANEL_CHANGE)
|
|
|
|
def load_view(self, view_name):
|
|
self.config_panels[self.active_panel].Hide()
|
|
self.config_panels[view_name].Show()
|
|
self.active_panel = view_name
|
|
self.Layout()
|
|
|
|
def build_panels(self, build_spec):
|
|
panels = OrderedDict()
|
|
for panel_name in self._build_spec['widgets'].keys():
|
|
panel = ConfigPanel(self, widgets=self._build_spec['widgets'][panel_name], opt_cols=self._build_spec['num_optional_cols'], title=panel_name.upper())
|
|
panels[panel_name] = panel
|
|
panel.Hide()
|
|
return panels
|
|
|
|
def GetOptions(self):
|
|
return '{} {}'.format(quote(self.active_panel), self.config_panels[self.active_panel].GetOptions())
|
|
|
|
def GetRequiredArgs(self):
|
|
return self.config_panels[self.active_panel].GetRequiredArgs()
|
|
|
|
|
|
|
|
def get_layout_builder(layout_type):
|
|
if layout_type == 'column':
|
|
return
|
|
|