Browse Source

added 'back to edit' button on final screen. All events now driven via pubsub

pull/90/merge
chriskiehl 9 years ago
parent
commit
47f5f3717a
7 changed files with 100 additions and 46 deletions
  1. 13
      gooey/gui/controller.py
  2. 2
      gooey/gui/events.py
  3. 38
      gooey/gui/windows/base_window.py
  4. 50
      gooey/gui/windows/footer.py
  5. 36
      gooey/gui/windows/header.py
  6. 6
      gooey/gui/windows/views.py
  7. 1
      gooey/languages/english.json

13
gooey/gui/controller.py

@ -13,7 +13,7 @@ from wx.lib.pubsub import pub
from multiprocessing.dummy import Pool from multiprocessing.dummy import Pool
from gooey.gui import events from gooey.gui import events
from gooey.gui.lang import i18n from gooey.gui.lang import i18n
from gooey.gui.windows import views
YES = 5103 YES = 5103
NO = 5104 NO = 5104
@ -40,6 +40,10 @@ class Controller(object):
pub.subscribe(self.on_start, events.WINDOW_START) pub.subscribe(self.on_start, events.WINDOW_START)
pub.subscribe(self.on_restart, events.WINDOW_RESTART) pub.subscribe(self.on_restart, events.WINDOW_RESTART)
pub.subscribe(self.on_close, events.WINDOW_CLOSE) pub.subscribe(self.on_close, events.WINDOW_CLOSE)
pub.subscribe(self.on_edit, events.WINDOW_EDIT)
def on_edit(self):
pub.sendMessage(events.WINDOW_CHANGE, view_name=views.CONFIG_SCREEN)
def on_close(self): def on_close(self):
self.core_gui.Destroy() self.core_gui.Destroy()
@ -67,8 +71,7 @@ class Controller(object):
cmd_line_args = self.core_gui.GetOptions() cmd_line_args = self.core_gui.GetOptions()
command = '{0} {1}'.format(self.build_spec['target'], cmd_line_args) command = '{0} {1}'.format(self.build_spec['target'], cmd_line_args)
print command
self.core_gui.NextPage()
pub.sendMessage(events.WINDOW_CHANGE, view_name=views.RUNNING_SCREEN)
self.run_client_code(command) self.run_client_code(command)
def run_client_code(self, command): def run_client_code(self, command):
@ -87,10 +90,10 @@ class Controller(object):
def process_result(self, process): def process_result(self, process):
_stdout, _stderr = process.communicate() _stdout, _stderr = process.communicate()
if process.returncode == 0: if process.returncode == 0:
self.core_gui.NextPage()
pub.sendMessage(events.WINDOW_CHANGE, view_name=views.SUCCESS_SCREEN)
self.success_dialog() self.success_dialog()
else: else:
self.core_gui.NextPage()
pub.sendMessage(events.WINDOW_CHANGE, view_name=views.ERROR_SCREEN)
self.error_dialog(_stderr) self.error_dialog(_stderr)
def skipping_config(self): def skipping_config(self):

2
gooey/gui/events.py

@ -13,5 +13,7 @@ WINDOW_CANCEL = new_id()
WINDOW_CLOSE = new_id() WINDOW_CLOSE = new_id()
WINDOW_START = new_id() WINDOW_START = new_id()
WINDOW_RESTART = new_id() WINDOW_RESTART = new_id()
WINDOW_EDIT = new_id()
WINDOW_CHANGE = new_id()
PANEL_CHANGE = new_id() PANEL_CHANGE = new_id()

38
gooey/gui/windows/base_window.py

@ -10,7 +10,7 @@ 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
from gooey.gui import image_repository
from gooey.gui import image_repository, events
from gooey.gui.util import wx_util from gooey.gui.util import wx_util
from gooey.gui.windows import footer, header, layouts from gooey.gui.windows import footer, header, layouts
@ -36,6 +36,7 @@ class BaseWindow(wx.Frame):
self._init_properties() self._init_properties()
self._init_components() self._init_components()
self._do_layout() self._do_layout()
self._init_pages()
self._init_controller() self._init_controller()
self.registerControllers() self.registerControllers()
self.Bind(wx.EVT_SIZE, self.onResize) self.Bind(wx.EVT_SIZE, self.onResize)
@ -55,8 +56,6 @@ class BaseWindow(wx.Frame):
subheading=_desc or '', subheading=_desc or '',
parent=self) parent=self)
# self.config_panel = AdvancedConfigPanel(self, self.build_spec)
self.runtime_display = RuntimeDisplay(self) self.runtime_display = RuntimeDisplay(self)
self.foot_panel = footer.Footer(self) self.foot_panel = footer.Footer(self)
self.panels = [self.head_panel, self.config_panel, self.foot_panel] self.panels = [self.head_panel, self.config_panel, self.foot_panel]
@ -83,6 +82,9 @@ class BaseWindow(wx.Frame):
self.sizer = sizer self.sizer = sizer
pub.subscribe(self.myListener, "panelListener") pub.subscribe(self.myListener, "panelListener")
pub.subscribe(self.load_view, events.WINDOW_CHANGE)
def myListener(self, message): def myListener(self, message):
print message print message
@ -90,9 +92,6 @@ class BaseWindow(wx.Frame):
if message == 'fetch': if message == 'fetch':
del self.config_panel del self.config_panel
def _init_controller(self): def _init_controller(self):
self._controller = Controller(base_frame=self, build_spec=self.build_spec) self._controller = Controller(base_frame=self, build_spec=self.build_spec)
@ -110,12 +109,27 @@ class BaseWindow(wx.Frame):
return self.config_panel.GetOptionalArgs() return self.config_panel.GetOptionalArgs()
def NextPage(self):
self.head_panel.NextPage()
self.foot_panel.NextPage()
self.config_panel.Hide()
self.runtime_display.Show()
self.Layout()
def _init_pages(self):
def config():
self.config_panel.Show()
self.runtime_display.Hide()
def running():
self.config_panel.Hide()
self.runtime_display.Show()
self.Layout()
def success():
running()
def error():
running()
self.layouts = locals()
def load_view(self, view_name=None):
self.layouts.get(view_name, lambda: None)()
def ManualStart(self): def ManualStart(self):
self._controller.manual_restart() self._controller.manual_restart()

50
gooey/gui/windows/footer.py

@ -33,10 +33,14 @@ class AbstractFooter(wx.Panel):
self.restart_button = None self.restart_button = None
self.buttons = None self.buttons = None
self.layouts = {}
self._init_components() self._init_components()
self._init_pages() self._init_pages()
self._do_layout() self._do_layout()
pub.subscribe(self.load_view, events.WINDOW_CHANGE)
def _init_components(self): def _init_components(self):
self.cancel_button = self.button(i18n._('cancel'), wx.ID_CANCEL, event_id=int(events.WINDOW_CANCEL)) self.cancel_button = self.button(i18n._('cancel'), wx.ID_CANCEL, event_id=int(events.WINDOW_CANCEL))
@ -44,31 +48,46 @@ class AbstractFooter(wx.Panel):
self.start_button = self.button(i18n._('start'), wx.ID_OK, event_id=int(events.WINDOW_START)) self.start_button = self.button(i18n._('start'), wx.ID_OK, event_id=int(events.WINDOW_START))
self.close_button = self.button(i18n._("close"), wx.ID_OK, event_id=int(events.WINDOW_CLOSE)) self.close_button = self.button(i18n._("close"), wx.ID_OK, event_id=int(events.WINDOW_CLOSE))
self.restart_button = self.button(i18n._('restart'), wx.ID_OK, event_id=int(events.WINDOW_RESTART)) self.restart_button = self.button(i18n._('restart'), wx.ID_OK, event_id=int(events.WINDOW_RESTART))
self.edit_button = self.button(i18n._('edit'), wx.ID_OK, event_id=int(events.WINDOW_EDIT))
self.running_animation = wx.animate.GIFAnimationCtrl(self, -1, image_repository.loader) self.running_animation = wx.animate.GIFAnimationCtrl(self, -1, image_repository.loader)
self.buttons = [self.cancel_button, self.start_button, self.stop_button, self.close_button, self.restart_button]
self.buttons = [self.cancel_button, self.start_button, self.stop_button, self.close_button, self.restart_button, self.edit_button]
def _init_pages(self): def _init_pages(self):
if self.restart_button.IsShown(): self.restart_button.Hide()
if self.close_button.IsShown(): self.close_button.Hide()
def config():
self.hide_all_buttons()
self.cancel_button.Show()
self.start_button.Show()
self.running_animation.Stop()
self.Layout()
def PageOne():
self.cancel_button.Hide()
self.start_button.Hide()
def running():
self.hide_all_buttons()
self.running_animation.Show() self.running_animation.Show()
self.running_animation.Play() self.running_animation.Play()
self.Layout() self.Layout()
def PageTwo():
def success():
self.hide_all_buttons()
self.running_animation.Stop() self.running_animation.Stop()
self.running_animation.Hide() self.running_animation.Hide()
self.edit_button.Show()
self.restart_button.Show() self.restart_button.Show()
self.close_button.Show() self.close_button.Show()
self.restart_button.Show()
self.Layout() self.Layout()
self._pages = iter([PageOne, PageTwo])
def error():
success()
self.layouts = locals()
def load_view(self, view_name=None):
self.layouts.get(view_name, lambda: None)()
def hide_all_buttons(self):
for button in self.buttons:
button.Hide()
def _do_layout(self): def _do_layout(self):
self.stop_button.Hide() self.stop_button.Hide()
@ -86,8 +105,10 @@ class AbstractFooter(wx.Panel):
v_sizer.Add(self.running_animation, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.RIGHT, 20) v_sizer.Add(self.running_animation, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.RIGHT, 20)
self.running_animation.Hide() self.running_animation.Hide()
v_sizer.Add(self.restart_button, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.RIGHT, 20)
v_sizer.Add(self.close_button, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.RIGHT, 20)
h_sizer.Add(self.edit_button, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
h_sizer.Add(self.restart_button, 0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
h_sizer.Add(self.close_button, 0, wx.ALIGN_RIGHT | wx.RIGHT, 20)
self.edit_button.Hide()
self.restart_button.Hide() self.restart_button.Hide()
self.close_button.Hide() self.close_button.Hide()
@ -106,13 +127,6 @@ class AbstractFooter(wx.Panel):
if self._controller is None: if self._controller is None:
self._controller = controller self._controller = controller
def NextPage(self):
try:
next(self._pages)()
except:
self._init_pages()
next(self._pages)()
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)

36
gooey/gui/windows/header.py

@ -5,8 +5,9 @@ Created on Dec 23, 2013
''' '''
import wx import wx
from wx.lib.pubsub import pub
from gooey.gui import imageutil, image_repository
from gooey.gui import imageutil, image_repository, events
from gooey.gui.util import wx_util from gooey.gui.util import wx_util
from gooey.gui.lang import i18n from gooey.gui.lang import i18n
@ -16,22 +17,27 @@ PAD_SIZE = 10
class FrameHeader(wx.Panel): 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._controller = None
self.heading_msg = heading
self.subheading_msg = subheading
self._header = None self._header = None
self._subheader = None self._subheader = None
self._settings_img = None self._settings_img = None
self._running_img = None self._running_img = None
self._check_mark = None self._check_mark = None
self.layouts = {}
self._init_properties() self._init_properties()
self._init_components(heading, subheading) self._init_components(heading, subheading)
self._init_pages() self._init_pages()
self._do_layout() self._do_layout()
pub.subscribe(self.load_view, events.WINDOW_CHANGE)
def _init_properties(self): def _init_properties(self):
self.SetBackgroundColour('#ffffff') self.SetBackgroundColour('#ffffff')
@ -78,7 +84,15 @@ class FrameHeader(wx.Panel):
def _init_pages(self): def _init_pages(self):
def PageOne():
def config():
self._header.SetLabel(self.heading_msg)
self._subheader.SetLabel(self.subheading_msg)
self._settings_img.Show()
self._check_mark.Hide()
self._running_img.Hide()
self.Layout()
def running():
self._header.SetLabel(i18n._("running_title")) self._header.SetLabel(i18n._("running_title"))
self._subheader.SetLabel(i18n._('running_msg')) self._subheader.SetLabel(i18n._('running_msg'))
self._check_mark.Hide() self._check_mark.Hide()
@ -86,18 +100,18 @@ class FrameHeader(wx.Panel):
self._running_img.Show() self._running_img.Show()
self.Layout() self.Layout()
def PageTwo():
def success():
self._header.SetLabel(i18n._('finished_title')) self._header.SetLabel(i18n._('finished_title'))
self._subheader.SetLabel(i18n._('finished_msg')) self._subheader.SetLabel(i18n._('finished_msg'))
self._running_img.Hide() self._running_img.Hide()
self._check_mark.Show() self._check_mark.Show()
self.Layout() self.Layout()
self._pages = iter([PageOne, PageTwo])
def error():
success()
self.layouts = locals()
def load_view(self, view_name=None):
self.layouts.get(view_name, lambda: None)()
def NextPage(self):
try:
next(self._pages)()
except:
self._init_pages()
next(self._pages)()

6
gooey/gui/windows/views.py

@ -0,0 +1,6 @@
CONFIG_SCREEN = 'config'
RUNNING_SCREEN = 'running'
SUCCESS_SCREEN = 'success'
ERROR_SCREEN = 'error'

1
gooey/languages/english.json

@ -17,6 +17,7 @@
"stop": "Stop", "stop": "Stop",
"status": "Status", "status": "Status",
"restart": "Restart", "restart": "Restart",
"edit": "Edit",
"success_message": "Program completed Sucessfully!\nPress the OK button to exit", "success_message": "Program completed Sucessfully!\nPress the OK button to exit",
"sure_you_want_to_exit": "Are you sure you want to exit?", "sure_you_want_to_exit": "Are you sure you want to exit?",
"uh_oh": "\nUh oh! Looks like there was a problem. \nCopy the below error to let your developer know what went wrong.\n\n{} \t\t\n\t\t" "uh_oh": "\nUh oh! Looks like there was a problem. \nCopy the below error to let your developer know what went wrong.\n\n{} \t\t\n\t\t"

Loading…
Cancel
Save