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.
141 lines
3.4 KiB
141 lines
3.4 KiB
__author__ = 'Chris'
|
|
|
|
import wx
|
|
|
|
from gooey.gui import styling
|
|
from gooey.gui.widgets.calender_dialog import CalendarDlg
|
|
|
|
|
|
class AbstractChooser(object):
|
|
def __init__(self, data):
|
|
self.data = data
|
|
|
|
# parent
|
|
self.panel = None
|
|
|
|
self.button_text = 'Browse'
|
|
|
|
# Widgets
|
|
self.title = None
|
|
self.help_msg = None
|
|
self.text_box = None
|
|
self.button = None
|
|
self.panel = None
|
|
|
|
def build(self, parent):
|
|
return self.do_layout(parent)
|
|
|
|
def do_layout(self, parent):
|
|
self.panel = wx.Panel(parent)
|
|
|
|
self.title = self.CreateNameLabelWidget(self.panel)
|
|
self.help_msg = self.CreateHelpMsgWidget(self.panel)
|
|
self.text_box = wx.TextCtrl(self.panel)
|
|
self.button = wx.Button(self.panel, label=self.button_text, size=(73, 23))
|
|
|
|
vertical_container = wx.BoxSizer(wx.VERTICAL)
|
|
widget_sizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
|
|
vertical_container.Add(self.title)
|
|
vertical_container.AddSpacer(2)
|
|
|
|
if self.help_msg.GetLabelText():
|
|
vertical_container.Add(self.help_msg, 1, wx.EXPAND)
|
|
vertical_container.AddSpacer(2)
|
|
else:
|
|
vertical_container.AddStretchSpacer(1)
|
|
|
|
widget_sizer.Add(self.text_box, 1, wx.EXPAND)
|
|
widget_sizer.AddSpacer(10)
|
|
widget_sizer.Add(self.button, 0)
|
|
|
|
vertical_container.Add(widget_sizer, 0, wx.EXPAND)
|
|
self.panel.SetSizer(vertical_container)
|
|
|
|
self.panel.Bind(wx.EVT_SIZE, self.OnResize)
|
|
self.panel.Bind(wx.EVT_BUTTON, self.on_button, self.button)
|
|
return self.panel
|
|
|
|
def CreateHelpMsgWidget(self, parent):
|
|
base_text = wx.StaticText(parent, label=self.data['help_msg'])
|
|
# if self.data['nargs']:
|
|
# base_text.SetLabelText(base_text.GetLabelText() + self.CreateNargsMsg(action))
|
|
styling.MakeDarkGrey(base_text)
|
|
return base_text
|
|
|
|
def CreateNameLabelWidget(self, parent):
|
|
label = self.data['title'].title()
|
|
text = wx.StaticText(parent, label=label)
|
|
styling.MakeBold(text)
|
|
return text
|
|
|
|
def OnResize(self, evt):
|
|
if self.help_msg is None:
|
|
return
|
|
|
|
container_width, _ = self.panel.Size
|
|
text_width, _ = self.help_msg.Size
|
|
|
|
if text_width != container_width:
|
|
self.help_msg.SetLabel(self.help_msg.GetLabelText().replace('\n', ' '))
|
|
self.help_msg.Wrap(container_width)
|
|
evt.Skip()
|
|
|
|
def on_button(self, evt):
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
class FileChooser(AbstractChooser):
|
|
def __init__(self, data):
|
|
AbstractChooser.__init__(self, data)
|
|
|
|
def on_button(self, evt):
|
|
dlg = wx.FileDialog(self.panel, style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
|
|
result = (dlg.GetPath()
|
|
if dlg.ShowModal() == wx.ID_OK
|
|
else None)
|
|
if result:
|
|
self.text_box.SetLabelText(result)
|
|
|
|
|
|
class DirectoryChooser(AbstractChooser):
|
|
def __init__(self, data):
|
|
AbstractChooser.__init__(self, data)
|
|
|
|
def on_button(self, evt):
|
|
dlg = wx.DirDialog(self.panel, 'Select directory', style=wx.DD_DEFAULT_STYLE)
|
|
result = (dlg.GetPath()
|
|
if dlg.ShowModal() == wx.ID_OK
|
|
else None)
|
|
if result:
|
|
self.text_box.SetLabelText(result)
|
|
|
|
|
|
class CalendarChooser(AbstractChooser):
|
|
def __init__(self, data):
|
|
AbstractChooser.__init__(self, data)
|
|
self.button_text = 'Choose Date'
|
|
|
|
def on_button(self, evt):
|
|
dlg = CalendarDlg(self.panel)
|
|
dlg.ShowModal()
|
|
if dlg.GetPath():
|
|
self.text_box.SetLabelText(dlg.GetPath())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|