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.
91 lines
2.5 KiB
91 lines
2.5 KiB
'''
|
|
Created on Dec 22, 2013
|
|
|
|
@author: Chris
|
|
'''
|
|
|
|
import wx
|
|
import sys
|
|
import traceback
|
|
|
|
from gooey import i18n
|
|
from multiprocessing.dummy import Pool, Process
|
|
|
|
YES = 5103
|
|
NO = 5104
|
|
|
|
|
|
class Controller(object):
|
|
'''
|
|
Main controller for the gui.
|
|
|
|
All controlls are delegated to this central control point.
|
|
|
|
Args:
|
|
base_frame = Reference to the Basewindow
|
|
head_panel = reference to the BaseWindow's Head Panel
|
|
body_panel = reference to the BaseWindow's Body Panel
|
|
footer_panel = reference to the BaseWindow's Footer Panel
|
|
model = configuration model
|
|
translator = instance of the I18N class
|
|
'''
|
|
|
|
def __init__(self, base_frame, client_app):
|
|
self._base = base_frame
|
|
self._client_app = client_app
|
|
self._payload_runner = Process(target=self.RunClientCode)
|
|
|
|
def OnCancelButton(self, widget, event):
|
|
msg = i18n.translate('sure_you_want_to_exit')
|
|
dlg = wx.MessageDialog(None, msg, i18n.translate('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, widget, event):
|
|
cmd_line_args = self._base.GetOptions()
|
|
if not self._client_app.IsValidArgString(cmd_line_args):
|
|
error_msg = self._client_app.GetErrorMsg(cmd_line_args)
|
|
self.ShowDialog(i18n.translate('error_title'), error_msg, wx.ICON_ERROR)
|
|
return
|
|
self._client_app.AddToArgv(cmd_line_args)
|
|
self._base.NextPage()
|
|
self._payload_runner.start()
|
|
|
|
def ManualStart(self):
|
|
self._base.NextPage()
|
|
wx.CallAfter(wx.ActivateEvent)
|
|
self._payload_runner.start()
|
|
|
|
def OnCloseButton(self, widget, event):
|
|
self._base.Destroy()
|
|
sys.exit()
|
|
|
|
def RunClientCode(self):
|
|
pool = Pool(1)
|
|
try:
|
|
pool.apply(self._client_app.payload)
|
|
self._base.NextPage()
|
|
self.ShowGoodFinishedDialog()
|
|
except:
|
|
self.ShowBadFinishedDialog(traceback.format_exc())
|
|
|
|
def ShowGoodFinishedDialog(self):
|
|
self.ShowDialog(i18n.translate("execution_finished"),
|
|
i18n.translate('success_message'),
|
|
wx.ICON_INFORMATION)
|
|
|
|
def ShowBadFinishedDialog(self, error_msg):
|
|
msg = i18n.translate('uh_oh').format(error_msg)
|
|
self.ShowDialog(i18n.translate('error_title'), msg, wx.ICON_ERROR)
|
|
|
|
|
|
def ShowDialog(self, title, content, style):
|
|
a = wx.MessageDialog(None, content, title, style)
|
|
a.ShowModal()
|
|
a.Destroy()
|
|
|