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.
103 lines
3.2 KiB
103 lines
3.2 KiB
import webbrowser
|
|
|
|
import wx
|
|
|
|
from gooey.gui.lang.i18n import _
|
|
from .widgets.basictextconsole import BasicTextConsole
|
|
|
|
|
|
class Console(wx.Panel):
|
|
'''
|
|
Textbox console/terminal displayed during the client program's execution.
|
|
'''
|
|
|
|
def __init__(self, parent, buildSpec, **kwargs):
|
|
wx.Panel.__init__(self, parent, **kwargs)
|
|
self.buildSpec = buildSpec
|
|
|
|
self.text = wx.StaticText(self, label=_("status"))
|
|
if buildSpec["richtext_controls"]:
|
|
from .widgets.richtextconsole import RichTextConsole
|
|
self.textbox = RichTextConsole(self)
|
|
else:
|
|
self.textbox = BasicTextConsole(self)
|
|
|
|
self.defaultFont = self.textbox.GetFont()
|
|
|
|
self.textbox.SetFont(wx.Font(
|
|
self.buildSpec['terminal_font_size'] or self.defaultFont.GetPointSize(),
|
|
self.getFontStyle(),
|
|
wx.NORMAL,
|
|
self.buildSpec['terminal_font_weight'] or wx.NORMAL,
|
|
False,
|
|
self.getFontFace(),
|
|
))
|
|
self.textbox.SetForegroundColour(self.buildSpec['terminal_font_color'])
|
|
|
|
self.layoutComponent()
|
|
self.Layout()
|
|
self.Bind(wx.EVT_TEXT_URL, self.evtUrl, self.textbox)
|
|
|
|
def evtUrl(self, event):
|
|
if event.MouseEvent.LeftUp():
|
|
# The rich console provides the embedded URL via GetString()
|
|
# but the basic console does not
|
|
webbrowser.open(
|
|
event.GetString() or
|
|
self.textbox.GetRange(event.URLStart,event.URLEnd))
|
|
event.Skip()
|
|
|
|
|
|
def getFontStyle(self):
|
|
"""
|
|
Force wx.Modern style to support legacy
|
|
monospace_display param when present
|
|
"""
|
|
return (wx.MODERN
|
|
if self.buildSpec['monospace_display']
|
|
else wx.DEFAULT)
|
|
|
|
|
|
def getFontFace(self):
|
|
"""Choose the best font face available given the user options"""
|
|
userFace = self.buildSpec['terminal_font_family'] or self.defaultFont.GetFaceName()
|
|
return (''
|
|
if self.buildSpec['monospace_display']
|
|
else userFace)
|
|
|
|
|
|
def logOutput(self, *args, **kwargs):
|
|
"""Event Handler for console updates coming from the client's program"""
|
|
self.appendText(kwargs.get('msg'))
|
|
|
|
|
|
def appendText(self, txt):
|
|
"""
|
|
Append the text to the main TextCtrl.
|
|
|
|
Note! Must be called from a Wx specific thread handler to avoid
|
|
multi-threaded explosions (e.g. wx.CallAfter)
|
|
"""
|
|
self.textbox.AppendText(txt)
|
|
|
|
def clear(self):
|
|
"""
|
|
Clear the the main TextCtrl.
|
|
"""
|
|
self.textbox.Clear()
|
|
|
|
|
|
def getText(self):
|
|
return self.textbox.GetValue()
|
|
|
|
def layoutComponent(self):
|
|
self.SetBackgroundColour(self.buildSpec.get('terminal_bg_color', '#F0F0F0'))
|
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
sizer.AddSpacer(10)
|
|
sizer.Add(self.text, 0, wx.LEFT, 20)
|
|
sizer.AddSpacer(10)
|
|
sizer.Add(self.textbox, 1, wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, 20)
|
|
sizer.AddSpacer(20)
|
|
self.SetSizer(sizer)
|
|
|
|
|