Browse Source

Remove old controller implementation

pull/150/head
chriskiehl 9 years ago
parent
commit
a907e8ba37
8 changed files with 44 additions and 91 deletions
  1. 9
      gooey/gui/application.py
  2. 70
      gooey/gui/controller.py
  3. 15
      gooey/gui/widgets/widget_pack.py
  4. 6
      gooey/gui/windows/advanced_config.py
  5. 22
      gooey/gui/windows/base_window.py
  6. 6
      gooey/gui/windows/footer.py
  7. 5
      gooey/gui/windows/header.py
  8. 2
      gooey/gui/windows/sidebar.py

9
gooey/gui/application.py

@ -8,11 +8,8 @@ import sys
import json import json
import argparse import argparse
from functools import partial
from gooey.gui.lang import i18n from gooey.gui.lang import i18n
from gooey.gui.windows.base_window import BaseWindow
from gooey.gui.windows.advanced_config import ConfigPanel
from gooey.gui.controller import Controller
from gooey.python_bindings import config_generator, source_parser from gooey.python_bindings import config_generator, source_parser
from gooey.gui import image_repository from gooey.gui import image_repository
@ -73,8 +70,8 @@ def run(build_spec):
i18n.load(build_spec['language_dir'], build_spec['language']) i18n.load(build_spec['language_dir'], build_spec['language'])
image_repository.patch_images(build_spec['image_dir']) image_repository.patch_images(build_spec['image_dir'])
frame = BaseWindow(build_spec)
frame.Show(True)
controller = Controller(build_spec)
controller.run()
app.MainLoop() app.MainLoop()

70
gooey/gui/controller.py

@ -1,42 +1,31 @@
'''
Created on Dec 22, 2013
@author: Chris
'''
import wx
import os import os
import re import re
import wx
import sys import sys
import subprocess
from gooey.gui.pubsub import pub
import subprocess
from multiprocessing.dummy import Pool from multiprocessing.dummy import Pool
from gooey.gui import events
from gooey.gui.lang import i18n from gooey.gui.lang import i18n
from gooey.gui.windows import views
from gooey.gui import events
from gooey.gui.pubsub import pub
from gooey.gui.util.taskkill import taskkill from gooey.gui.util.taskkill import taskkill
from gooey.gui.windows import views
from gooey.gui.windows.base_window import BaseWindow
YES = 5103 YES = 5103
NO = 5104 NO = 5104
class Controller(object): class Controller(object):
'''
Main controller for the gui.
All controlls are delegated to this central control point.
'''
def __init__(self, base_frame, build_spec):
'''
:type base_frame: BaseWindow
:type build_spec: dict
'''
self.core_gui = base_frame
def __init__(self, build_spec):
# todo: model!
self.build_spec = build_spec self.build_spec = build_spec
self.view = BaseWindow(build_spec)
self._process = None self._process = None
# wire up all the observers # wire up all the observers
@ -52,7 +41,7 @@ class Controller(object):
def on_close(self): def on_close(self):
if self.ask_stop(): if self.ask_stop():
self.core_gui.Destroy()
self.view.Destroy()
sys.exit() sys.exit()
def on_restart(self): def on_restart(self):
@ -63,19 +52,16 @@ class Controller(object):
def on_cancel(self): def on_cancel(self):
msg = i18n._('sure_you_want_to_exit') msg = i18n._('sure_you_want_to_exit')
dlg = wx.MessageDialog(None, msg, i18n._('close_program'), wx.YES_NO)
result = dlg.ShowModal()
result = self.view.show_dialog(msg, i18n._('close_program'), wx.YES_NO)
if result == YES: if result == YES:
dlg.Destroy()
self.core_gui.Destroy()
self.view.Destroy()
sys.exit() sys.exit()
dlg.Destroy()
def on_start(self): def on_start(self):
if not self.skipping_config() and not self.required_section_complete(): if not self.skipping_config() and not self.required_section_complete():
return self.show_dialog(i18n._('error_title'), i18n._('error_required_fields'), wx.ICON_ERROR)
return self.view.show_dialog(i18n._('error_title'), i18n._('error_required_fields'), wx.ICON_ERROR)
cmd_line_args = self.core_gui.GetOptions()
cmd_line_args = self.view.GetOptions()
command = '{} --ignore-gooey {}'.format(self.build_spec['target'], cmd_line_args) command = '{} --ignore-gooey {}'.format(self.build_spec['target'], cmd_line_args)
pub.send_message(events.WINDOW_CHANGE, view_name=views.RUNNING_SCREEN) pub.send_message(events.WINDOW_CHANGE, view_name=views.RUNNING_SCREEN)
self.run_client_code(command) self.run_client_code(command)
@ -89,9 +75,7 @@ class Controller(object):
if self.build_spec['disable_stop_button']: if self.build_spec['disable_stop_button']:
return False return False
msg = i18n._('sure_you_want_to_stop') msg = i18n._('sure_you_want_to_stop')
dlg = wx.MessageDialog(None, msg, i18n._('stop_task'), wx.YES_NO)
result = dlg.ShowModal()
dlg.Destroy()
result = self.view.show_dialog(msg, i18n._('stop_task'), wx.YES_NO)
if result == YES: if result == YES:
self.stop() self.stop()
return True return True
@ -119,10 +103,10 @@ class Controller(object):
line = process.stdout.readline() line = process.stdout.readline()
if not line: if not line:
break break
wx.CallAfter(self.core_gui.PublishConsoleMsg, line)
wx.CallAfter(self.view.PublishConsoleMsg, line)
progress = self.progress_from_line(line) progress = self.progress_from_line(line)
if progress is not None: if progress is not None:
wx.CallAfter(self.core_gui.UpdateProgressBar, progress)
wx.CallAfter(self.view.UpdateProgressBar, progress)
wx.CallAfter(callback, process) wx.CallAfter(callback, process)
def progress_from_line(self, text): def progress_from_line(self, text):
@ -171,19 +155,17 @@ class Controller(object):
return self.build_spec['manual_start'] return self.build_spec['manual_start']
def required_section_complete(self): def required_section_complete(self):
required_section = self.core_gui.GetRequiredArgs()
required_section = self.view.GetRequiredArgs()
if len(required_section) == 0: if len(required_section) == 0:
return True # no requirements! return True # no requirements!
return not any(req == '' for req in required_section) return not any(req == '' for req in required_section)
def success_dialog(self): def success_dialog(self):
self.show_dialog(i18n._("execution_finished"), i18n._('success_message'), wx.ICON_INFORMATION)
self.view.show_dialog(i18n._("execution_finished"), i18n._('success_message'), wx.ICON_INFORMATION)
def error_dialog(self): def error_dialog(self):
self.show_dialog(i18n._('error_title'), i18n._('uh_oh'), wx.ICON_ERROR)
self.view.show_dialog(i18n._('error_title'), i18n._('uh_oh'), wx.ICON_ERROR)
def show_dialog(self, title, content, style):
a = wx.MessageDialog(None, content, title, style)
a.ShowModal()
a.Destroy()
def run(self):
self.view.Show(True)

15
gooey/gui/widgets/widget_pack.py

@ -129,12 +129,6 @@ def build_dialog(style, exist_constraint=True, **kwargs):
else: else:
return lambda panel: wx.FileDialog(panel, style=style, **kwargs) return lambda panel: wx.FileDialog(panel, style=style, **kwargs)
FileChooserPayload = partial(BaseFileChooser, dialog=build_dialog(wx.FD_OPEN))
FileSaverPayload = partial(BaseFileChooser, dialog=build_dialog(wx.FD_SAVE, False, defaultFile="Enter Filename"))
MultiFileSaverPayload = partial(BaseMultiFileChooser, dialog=build_dialog(wx.FD_MULTIPLE, False))
DirChooserPayload = partial(BaseFileChooser, dialog=lambda parent: wx.DirDialog(parent, 'Select Directory', style=wx.DD_DEFAULT_STYLE))
DateChooserPayload = partial(BaseFileChooser, dialog=CalendarDlg)
MultiDirChooserPayload = partial(BaseMultiFileChooser, dialog=lambda parent: MyMultiDirChooser(parent, title="Select Directories", defaultPath=os.getcwd(), agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST))
class TextInputPayload(WidgetPack): class TextInputPayload(WidgetPack):
def __init__(self, no_quoting=False): def __init__(self, no_quoting=False):
@ -242,3 +236,12 @@ class CounterPayload(WidgetPack):
def safe_default(data, default): def safe_default(data, default):
# str(None) is 'None'!? Whaaaaat...? # str(None) is 'None'!? Whaaaaat...?
return str(data['default']) if data['default'] else default return str(data['default']) if data['default'] else default
FileChooserPayload = partial(BaseFileChooser, dialog=build_dialog(wx.FD_OPEN))
FileSaverPayload = partial(BaseFileChooser, dialog=build_dialog(wx.FD_SAVE, False, defaultFile="Enter Filename"))
MultiFileSaverPayload = partial(BaseMultiFileChooser, dialog=build_dialog(wx.FD_MULTIPLE, False))
DirChooserPayload = partial(BaseFileChooser, dialog=lambda parent: wx.DirDialog(parent, 'Select Directory', style=wx.DD_DEFAULT_STYLE))
DateChooserPayload = partial(BaseFileChooser, dialog=CalendarDlg)
MultiDirChooserPayload = partial(BaseMultiFileChooser, dialog=lambda parent: MyMultiDirChooser(parent, title="Select Directories", defaultPath=os.getcwd(), agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST))

6
gooey/gui/windows/advanced_config.py

@ -34,8 +34,6 @@ class ConfigPanel(ScrolledPanel, OptionReader):
self._num_req_cols = req_cols self._num_req_cols = req_cols
self._num_opt_cols = opt_cols self._num_opt_cols = opt_cols
self._controller = None
self._do_layout() self._do_layout()
self.Bind(wx.EVT_SIZE, self.OnResize) self.Bind(wx.EVT_SIZE, self.OnResize)
@ -85,10 +83,6 @@ class ConfigPanel(ScrolledPanel, OptionReader):
self.SetupScrolling(scroll_x=False, scrollToTop=False) self.SetupScrolling(scroll_x=False, scrollToTop=False)
evt.Skip() evt.Skip()
def RegisterController(self, controller):
if self._controller is None:
self._controller = controller
def GetOptions(self): def GetOptions(self):
""" """
returns the collective values from all of the returns the collective values from all of the

22
gooey/gui/windows/base_window.py

@ -8,7 +8,6 @@ import sys
import wx import wx
from gooey.gui.pubsub import pub from gooey.gui.pubsub import pub
from gooey.gui.controller import Controller
from gooey.gui.lang import i18n from gooey.gui.lang import i18n
from gooey.gui.windows.advanced_config import ConfigPanel from gooey.gui.windows.advanced_config import ConfigPanel
from gooey.gui.windows.runtime_display_panel import RuntimeDisplay from gooey.gui.windows.runtime_display_panel import RuntimeDisplay
@ -23,8 +22,6 @@ class BaseWindow(wx.Frame):
self.build_spec = build_spec self.build_spec = build_spec
self._controller = None
self.SetDoubleBuffered(True) self.SetDoubleBuffered(True)
# Components # Components
@ -39,8 +36,6 @@ class BaseWindow(wx.Frame):
self._init_components() self._init_components()
self._do_layout() self._do_layout()
self._init_pages() self._init_pages()
self._init_controller()
self.registerControllers()
self.Bind(wx.EVT_SIZE, self.onResize) self.Bind(wx.EVT_SIZE, self.onResize)
self.Bind(wx.EVT_CLOSE, self.onClose) self.Bind(wx.EVT_CLOSE, self.onClose)
@ -99,13 +94,6 @@ class BaseWindow(wx.Frame):
if message == 'fetch': if message == 'fetch':
del self.config_panel del self.config_panel
def _init_controller(self):
self._controller = Controller(base_frame=self, build_spec=self.build_spec)
def registerControllers(self):
for panel in self.panels:
pass
def GetOptions(self): def GetOptions(self):
return self.config_panel.GetOptions() return self.config_panel.GetOptions()
@ -115,7 +103,6 @@ class BaseWindow(wx.Frame):
def GetOptionalArgs(self): def GetOptionalArgs(self):
return self.config_panel.GetOptionalArgs() return self.config_panel.GetOptionalArgs()
def _init_pages(self): def _init_pages(self):
def config(): def config():
@ -138,9 +125,6 @@ class BaseWindow(wx.Frame):
def load_view(self, view_name=None): def load_view(self, view_name=None):
self.layouts.get(view_name, lambda: None)() self.layouts.get(view_name, lambda: None)()
def ManualStart(self):
self._controller.manual_restart()
def onResize(self, evt): def onResize(self, evt):
evt.Skip() evt.Skip()
@ -170,6 +154,12 @@ class BaseWindow(wx.Frame):
pb.SetValue(value+1) pb.SetValue(value+1)
pb.SetValue(value) pb.SetValue(value)
def show_dialog(self, title, content, style):
dlg = wx.MessageDialog(None, content, title, style)
result = dlg.ShowModal()
dlg.Destroy()
return result
if __name__ == '__main__': if __name__ == '__main__':
pass pass

6
gooey/gui/windows/footer.py

@ -22,8 +22,6 @@ class AbstractFooter(wx.Panel):
wx.Panel.__init__(self, parent, **kwargs) wx.Panel.__init__(self, parent, **kwargs)
self.SetMinSize((30, 53)) self.SetMinSize((30, 53))
self._controller = None
# components # components
self.cancel_button = None self.cancel_button = None
self.start_button = None self.start_button = None
@ -124,10 +122,6 @@ class AbstractFooter(wx.Panel):
label=label, label=label,
style=style) style=style)
def RegisterController(self, controller):
if self._controller is None:
self._controller = controller
def _load_image(self, img_path, height=70): def _load_image(self, img_path, height=70):
return imageutil.resize_bitmap(self, imageutil._load_image(img_path), height) return imageutil.resize_bitmap(self, imageutil._load_image(img_path), height)

5
gooey/gui/windows/header.py

@ -19,7 +19,6 @@ class FrameHeader(wx.Panel):
def __init__(self, heading, subheading, **kwargs): def __init__(self, heading, subheading, **kwargs):
wx.Panel.__init__(self, **kwargs) wx.Panel.__init__(self, **kwargs)
self.SetDoubleBuffered(True) self.SetDoubleBuffered(True)
self._controller = None
self.heading_msg = heading self.heading_msg = heading
self.subheading_msg = subheading self.subheading_msg = subheading
@ -82,10 +81,6 @@ class FrameHeader(wx.Panel):
sizer.AddStretchSpacer(1) sizer.AddStretchSpacer(1)
return sizer return sizer
def RegisterController(self, controller):
if self._controller is None:
self._controller = controller
def _init_pages(self): def _init_pages(self):
def config(): def config():

2
gooey/gui/windows/sidebar.py

@ -14,8 +14,6 @@ class Sidebar(wx.Panel):
self._parent = parent self._parent = parent
self._controller = None
self._init_components() self._init_components()
self._do_layout() self._do_layout()

Loading…
Cancel
Save