diff --git a/src/app/dialogs/advanced_config_integration_test.py b/src/app/dialogs/advanced_config_integration_test.py deleted file mode 100644 index 14c5af8..0000000 --- a/src/app/dialogs/advanced_config_integration_test.py +++ /dev/null @@ -1,18 +0,0 @@ -''' -Created on Jan 19, 2014 - -@author: Chris -''' - -import argparse_test_data - - -client_parser_obj = argparse_test_data.parser - -frame = MainWindow(client_parser_obj) - - - - -if __name__ == '__main__': - pass \ No newline at end of file diff --git a/src/app/dialogs/body.py b/src/app/dialogs/body.py deleted file mode 100644 index 55cc53e..0000000 --- a/src/app/dialogs/body.py +++ /dev/null @@ -1,26 +0,0 @@ -''' -Created on Dec 23, 2013 - -@author: Chris -''' - -import wx - -class BasicDisplayPanel(wx.Panel): - def __init__(self, parent, **kwargs): - wx.Panel.__init__(self, parent, **kwargs) - - self.SetBackgroundColour('#F0F0F0') - - sizer = wx.BoxSizer(wx.VERTICAL) - sizer.AddSpacer(10) - text = wx.StaticText(self, label="Running bla bla bla") - sizer.Add(text, 0, wx.LEFT, 20) - sizer.AddSpacer(10) - - self.cmd_textbox = wx.TextCtrl( - self, -1, "", - style=wx.TE_MULTILINE | wx.TE_READONLY) - sizer.Add(self.cmd_textbox, 1, wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 20) - self.SetSizer(sizer) - \ No newline at end of file diff --git a/src/app/dialogs/body.pyc b/src/app/dialogs/body.pyc deleted file mode 100644 index aa3097d..0000000 Binary files a/src/app/dialogs/body.pyc and /dev/null differ diff --git a/src/app/dialogs/component_register.py b/src/app/dialogs/component_register.py index 45c9fa3..3d51a69 100644 --- a/src/app/dialogs/component_register.py +++ b/src/app/dialogs/component_register.py @@ -5,10 +5,9 @@ Created on Jan 20, 2014 ''' class ComponentRegister(object): + ''' Mixin class for attaching controllers to objects ''' - def __init__(self, params): - pass - def Registercontroller(self, controller): + ''' Assigns a Controller to a view (usually panel or frame) object''' if self._controller in None: self._controller = controller \ No newline at end of file diff --git a/src/app/dialogs/controller.py b/src/app/dialogs/controller.py index 6dee2ba..8347de4 100644 --- a/src/app/dialogs/controller.py +++ b/src/app/dialogs/controller.py @@ -6,8 +6,9 @@ Created on Dec 22, 2013 import wx import sys -from app.dialogs.config_model import Model -from multiprocessing.dummy import Pool +import traceback +from multiprocessing.dummy import Pool, Process +from model.i18n import I18N YES = 5103 NO = 5104 @@ -34,16 +35,22 @@ class Controller(object): self._foot = footer_panel self._model = model + + self._payload_runner = Process(target=self.RunClientCode).start + + self._translator = I18N() def OnCancelButton(self, event): - msg = "Are you sure you want to exit?" - dlg = wx.MessageDialog(None, msg, "Close Program?", wx.YES_NO) + msg = self._translator['sure_you_want_to_exit'] + dlg = wx.MessageDialog(None, msg, + self._translator['close_program'], wx.YES_NO) result = dlg.ShowModal() print result if result == YES: dlg.Destroy() self._base.Destroy() sys.exit() + dlg.Destroy() def OnStartButton(self, event): cmd_line_args = self._body.GetOptions() @@ -53,18 +60,36 @@ class Controller(object): return self._model.AddToArgv(cmd_line_args) self._base.NextPage() - self.RunClientCode() + self._payload_runner() def OnCancelRunButton(self, event): pass - def ShowArgumentErrorDlg(self, error): - a = wx.MessageDialog(None, error, 'Argument Error') - a.ShowModal() - a.Destroy() def RunClientCode(self): pool = Pool(1) - pool.apply_async(self._base._payload) + try: + pool.apply(self._base._payload) + self.ShowGoodFinishedDialog() + except: + self.ShowBadFinishedDialog(traceback.format_exc()) + + def ShowDialog(self, title, content, style): + a = wx.MessageDialog(None, content, title, style) + a.ShowModal() + a.Destroy() + def ShowGoodFinishedDialog(self): + self.ShowDialog(self._translator["execution_finished"], + self._translator['success_message'], + wx.ICON_INFORMATION) + + def ShowBadFinishedDialog(self, error_msg): + msg = self._translator['uh_oh'].format(error_msg) + self.ShowDialog(self._translator['error_title'], msg, wx.ICON_ERROR) + + + + + diff --git a/src/app/dialogs/experiments.py b/src/app/dialogs/experiments.py deleted file mode 100644 index 527e63f..0000000 --- a/src/app/dialogs/experiments.py +++ /dev/null @@ -1,51 +0,0 @@ -''' -Created on Dec 28, 2013 - -@author: Chris -''' -import os -import wx -from wx.lib import scrolledpanel -from app.dialogs.advanced_config import AdvancedConfigPanel - -class MainWindow(wx.Frame): - - def __init__(self): - wx.Frame.__init__( - self, - parent=None, - id=-1, - title=os.path.basename(__file__), - size=(640,480) - ) - - self._init_components() - - def _init_components(self): - # init components - self.SetMinSize((400,300)) - - panel = AdvancedConfigPanel(self) - - sizer = wx.BoxSizer(wx.VERTICAL) - -# for i in range(40): -# t = wx.TextCtrl(panel, -1) -# sizer.Add(t, 0) - - panel.SetSizer(sizer) - - _sizer = wx.BoxSizer(wx.VERTICAL) - _sizer.Add(panel, 1, wx.EXPAND) - self.SetSizer(_sizer) - - def _draw_horizontal_line(self): - line = wx.StaticLine(self, -1, style=wx.LI_HORIZONTAL) - line.SetSize((10, 10)) - self.sizer.Add(line, 0, wx.EXPAND) - -if __name__ == '__main__': - app = wx.App(False) - frame = MainWindow() - frame.Show(True) # Show the frame. - app.MainLoop() \ No newline at end of file diff --git a/src/app/dialogs/header.py b/src/app/dialogs/header.py index 7a7709c..b6df726 100644 --- a/src/app/dialogs/header.py +++ b/src/app/dialogs/header.py @@ -6,7 +6,6 @@ Created on Dec 23, 2013 import wx import imageutil -from app.dialogs.segoe_statictext import SegoeText from app.images import image_store PAD_SIZE = 10 diff --git a/src/app/dialogs/header.pyc b/src/app/dialogs/header.pyc index daa2881..e3a1109 100644 Binary files a/src/app/dialogs/header.pyc and b/src/app/dialogs/header.pyc differ diff --git a/src/app/dialogs/model.py b/src/app/dialogs/model.py deleted file mode 100644 index 99e238a..0000000 --- a/src/app/dialogs/model.py +++ /dev/null @@ -1,85 +0,0 @@ -''' -Created on Jan 23, 2014 - -@author: Chris -''' - -import sys -import types -from app.dialogs.action_sorter import ActionSorter - -class ArgumentError(Exception): - pass - -class Model(object): - _instance = None - - def __init__(self, parser=None): - self._parser = parser - self.description = parser.description - - self.action_groups = ActionSorter(self._parser._actions) - - # monkey patch - print self._parser.error - self._parser.error = types.MethodType( - self.ErrorAsString, - self._parser) - print self._parser.error - - Model._instance = self - - def HasPositionals(self): - if self.action_groups._positionals: - return True - return False - - def IsValidArgString(self, arg_string): - if isinstance(self._Parse(arg_string), str): - return False - return True - - def _Parse(self, arg_string): - try: - print self._parser.error - self._parser.parse_args(arg_string.split()) - return True - except ArgumentError as e: - return str(e) - - def GetErrorMsg(self, arg_string): - return self._FormatMsg(self._Parse(arg_string)) - - def _FormatMsg(self, msg): - output = list(msg) - if ':' in output: - output[output.index(':')] = ':\n ' - return ''.join(output) - - def AddToArgv(self, arg_string): - sys.argv.append(arg_string.split()) - - @staticmethod - def ErrorAsString(self, msg): - ''' - Monkey patch for parser.error - Returns the error string rather than - printing and silently exiting. - ''' - raise ArgumentError(msg) - - @classmethod - def GetInstance(cls): - return cls._instance - - - -if __name__ == '__main__': - pass - - -# print m2 - - - - diff --git a/src/app/dialogs/runtime_display_panel.py b/src/app/dialogs/runtime_display_panel.py index 6a43904..dfb8ac1 100644 --- a/src/app/dialogs/runtime_display_panel.py +++ b/src/app/dialogs/runtime_display_panel.py @@ -29,16 +29,8 @@ class RuntimeDisplay(wx.Panel): self._init_properties() self._init_components() self._do_layout() - -# self.queue = Queue.Queue() - _stdout = sys.stdout - _stdout_write = _stdout.write - - sys.stdout = MessagePump() - sys.stdout.write = self.WriteToDisplayBox -# listener = Listener(self.queue, self.cmd_textbox) -# listener.start() - + self._HookStdout() + def _init_properties(self): self.SetBackgroundColour('#F0F0F0') @@ -56,9 +48,16 @@ class RuntimeDisplay(wx.Panel): sizer.Add(self.cmd_textbox, 1, wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 30) sizer.AddSpacer(20) self.SetSizer(sizer) + + def _HookStdout(self): + _stdout = sys.stdout + _stdout_write = _stdout.write + + sys.stdout = MessagePump() + sys.stdout.write = self.WriteToDisplayBox def AppendText(self, txt): - self.cmd_textbox.AppendText(txt) + self.cmd_textbox.AppendText(txt) def WriteToDisplayBox(self, txt): if txt is not '': diff --git a/src/app/dialogs/segoe_statictext.py b/src/app/dialogs/segoe_statictext.py deleted file mode 100644 index 9378635..0000000 --- a/src/app/dialogs/segoe_statictext.py +++ /dev/null @@ -1,28 +0,0 @@ -''' -Created on Jan 20, 2014 - -@author: Chris -''' - -import wx - -class SegoeText(wx.StaticText): - ''' - Convenience subclass of wx.StaticText. - - Sets the default font to Segoe UI and - has methods fow easily changing size and weight - ''' - - - def __init__(self, parent, label): - wx.StaticText.__init__(self, parent, label=label) - self._font = wx.Font(20, wx.FONTFAMILY_DEFAULT, - wx.FONTWEIGHT_NORMAL, wx.FONTWEIGHT_BOLD, False, - 'Segoe UI Light') - - self.SetFont(self._font) - - def SetWeight(self, weight): - pass - \ No newline at end of file diff --git a/src/app/dialogs/simple_config_panel.py b/src/app/dialogs/simple_config_panel.py deleted file mode 100644 index 781a567..0000000 --- a/src/app/dialogs/simple_config_panel.py +++ /dev/null @@ -1,55 +0,0 @@ -''' -Created on Dec 9, 2013 - -@author: Chris - - -''' - -import wx -import os - -class BodyDisplayPanel(wx.Panel): - def __init__(self, parent, **kwargs): - wx.Panel.__init__(self, parent, **kwargs) - - self.SetBackgroundColour('#F0F0F0') - - sizer = wx.BoxSizer(wx.VERTICAL) - sizer.AddSpacer(10) - -# about_header = wx.StaticText(self, label="About") -# about_header = self._bold_static_text("About") -# about_body = wx.StaticText(self, label="This program does bla. Enter the command line args of your choice to control bla and bla.") -# -# sizer.Add(about_header, 0, wx.LEFT | wx.RIGHT, 20) -# sizer.AddSpacer(5) -# sizer.Add(about_body, 0, wx.LEFT | wx.RIGHT, 20) - - sizer.AddSpacer(40) - - text = self._bold_static_text("Enter Command Line Arguments") -# - sizer.Add(text, 0, wx.LEFT, 20) - sizer.AddSpacer(10) - - h_sizer = wx.BoxSizer(wx.HORIZONTAL) - self.cmd_textbox = wx.TextCtrl( - self, -1, "") - h_sizer.Add(self.cmd_textbox, 1, wx.ALL | wx.EXPAND) - sizer.Add(h_sizer, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 20) - - self.SetSizer(sizer) - - def get_contents(self): - return self.cmd_textbox.GetValue() - - def _bold_static_text(self, text_label): - text = wx.StaticText(self, label=text_label) - font_size = text.GetFont().GetPointSize() - bold = wx.Font(font_size, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD) - text.SetFont(bold) - return text - - - diff --git a/src/app/dialogs/test.py b/src/app/dialogs/test.py deleted file mode 100644 index a623f21..0000000 --- a/src/app/dialogs/test.py +++ /dev/null @@ -1,15 +0,0 @@ -''' -Created on Dec 8, 2013 - -@author: Chris -''' - - - - - - - - - -# im = Image.open(images.computer) diff --git a/src/app/images/alessandro_rei_checkmark.png b/src/app/images/alessandro_rei_checkmark.png new file mode 100644 index 0000000..d73d0ab Binary files /dev/null and b/src/app/images/alessandro_rei_checkmark.png differ diff --git a/src/app/images/image_store.py b/src/app/images/image_store.py index 89ac2e6..6b227a2 100644 --- a/src/app/images/image_store.py +++ b/src/app/images/image_store.py @@ -7,6 +7,7 @@ Convenience module for keeping the filepaths in one place. """ +alessandro_rei_checkmark = r"C:\Users\Chris\Dropbox\pretty_gui\Gooey\src\app\images\alessandro_rei_checkmark.png" computer = r"C:\Users\Chris\Dropbox\pretty_gui\Gooey\src\app\images\computer.png" computer2 = r"C:\Users\Chris\Dropbox\pretty_gui\Gooey\src\app\images\computer2.png" computer3 = r"C:\Users\Chris\Dropbox\pretty_gui\Gooey\src\app\images\computer3.png" diff --git a/src/app/images/image_store.pyc b/src/app/images/image_store.pyc index 5bbae25..82d410a 100644 Binary files a/src/app/images/image_store.pyc and b/src/app/images/image_store.pyc differ diff --git a/src/app/testrun.py b/src/app/testrun.py deleted file mode 100644 index ce66db9..0000000 --- a/src/app/testrun.py +++ /dev/null @@ -1,21 +0,0 @@ -''' -Created on Dec 8, 2013 - -@author: Chris -''' - -import wx -import Queue -from dialogs.display_main import MainWindow - - -if __name__ == '__main__': - queue = Queue.Queue() - # stdoutput = sys.stdout - # out = TestObj(queue) - # sys.stdout = out - - app = wx.App(False) - frame = MainWindow(queue) - frame.Show(True) # Show the frame. - app.MainLoop() \ No newline at end of file diff --git a/src/app/widgets/__init__.py b/src/app/widgets/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/experiments/command.py b/src/experiments/command.py index 7b0e788..3da0204 100644 --- a/src/experiments/command.py +++ b/src/experiments/command.py @@ -8,33 +8,22 @@ Created on Jan 7, 2014 import sys import time -_time = time.time - -class MessagePump(object): - def __init__(self): -# self.queue = queue - self.stdout = sys.stdout - self.asdf = [] - - # Overrides stdout's write method - def write(self, text): - self.asdf.append((text, _time())) -# if text != '': -# self.queue.put(text) - - -# self.queue = Queue.Queue() -_stdout = sys.stdout -sys.stdout = MessagePump() -# listener = Listener(self.queue, self.cmd_textbox) -# listener.start() - -print 'hello!' -time.sleep(1) -print 'Jello!' - -output = sys.stdout.asdf -sys.stdout = _stdout -for i in output: - print i -print _time() \ No newline at end of file + +from multiprocessing.dummy import Process, Pool + +def myFunc(): + time.sleep(2) + print 'whoo!' + raise ValueError("Graaaaaaahhhhh") + + +if __name__ == '__main__': + pool = Pool(1) + try: + pool.apply(myFunc) + except: + print 'Yo, shit is broken, son!' + + + + diff --git a/src/languages/eng.py b/src/languages/eng.py index 6614d89..4990d16 100644 --- a/src/languages/eng.py +++ b/src/languages/eng.py @@ -18,7 +18,17 @@ if __name__ == '__main__': 'running':'Running', "sure_you_want_to_exit":"Are you sure you want to exit?", 'close_program': 'Close Program?', - 'status':'Status' + 'status':'Status', + 'uh_oh': ''' +Uh oh! Looks like there was a problem. +Copy the below error to let your developer know what went wrong. + +{} + ''', + 'error_title':"Error", + 'execution_finished':'Execution Finished', + 'success_message': 'Program completed Sucessfully!\nPress the OK button to exit', + } with open('english.json', 'wb') as f: diff --git a/src/languages/english.json b/src/languages/english.json index bd4882d..f44d7e3 100644 --- a/src/languages/english.json +++ b/src/languages/english.json @@ -1,6 +1,8 @@ { "cancel": "Cancel", "close_program": "Close Program?", + "error_title": "Error", + "execution_finished": "Execution Finished", "next": "Next", "optional_args_msg": "Optional Arguments", "required_args_msg": "Required Arguments", @@ -8,5 +10,7 @@ "settings": "Settings", "simple_config": "Enter Command Line Arguments", "status": "Status", - "sure_you_want_to_exit": "Are you sure you want 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?", + "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" } \ No newline at end of file diff --git a/src/mockapplication/mockapp.py b/src/mockapplication/mockapp.py index 3c30b0c..85d5810 100644 --- a/src/mockapplication/mockapp.py +++ b/src/mockapplication/mockapp.py @@ -39,6 +39,7 @@ def main(): print 'printing message at: %s' % hashlib.md5(str(_time())).hexdigest() _sleep(.5) print 'Finished running the program. Byeeeeesss!' +# raise ValueError("Something has gone wrong! AHHHHHHHHHHH") if __name__ == '__main__': # sys.argv.extend('asdf -c 5 -s'.split()) diff --git a/src/model/integration_test.py b/src/model/integration_test.py deleted file mode 100644 index 5627d34..0000000 --- a/src/model/integration_test.py +++ /dev/null @@ -1,8 +0,0 @@ -''' -Created on Jan 24, 2014 - -@author: Chris -''' - -if __name__ == '__main__': - pass \ No newline at end of file diff --git a/src/parser/MultiChoiceOption.py b/src/parser/MultiChoiceOption.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/parser/RequiredOption.py b/src/parser/RequiredOption.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/parser/__init__.py b/src/parser/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/parser/option.py b/src/parser/option.py deleted file mode 100644 index 7b2c0db..0000000 --- a/src/parser/option.py +++ /dev/null @@ -1,14 +0,0 @@ -''' -Created on Dec 12, 2013 - -@author: Chris -''' - -# parser.add_argument("-r", "--recursive", dest="recurse", action="store_true", help="recurse into subfolders [default: %(default)s]") - -class Option(object): - def __init__(self, arg_option): - self.arg_option = arg_option - - @classmethod - def \ No newline at end of file