--- a/Beremiz.py Fri Feb 22 15:40:18 2008 +0100
+++ b/Beremiz.py Fri Feb 22 19:04:01 2008 +0100
@@ -59,8 +59,9 @@
CWD = os.path.split(os.path.realpath(__file__))[0]
+# Some helpers to tweak GenBitmapTextButtons +# TODO: declare customized classes instead. gen_mini_GetBackgroundBrush = lambda obj:lambda dc: wx.Brush(obj.GetParent().GetBackgroundColour(), wx.SOLID)
-gen_mini_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenBitmapTextButton._GetLabelSize(obj)[:-1] + (False,))
gen_textbutton_GetLabelSize = lambda obj:lambda:(wx.lib.buttons.GenButton._GetLabelSize(obj)[:-1] + (False,))
def make_genbitmaptogglebutton_flat(button):
@@ -69,16 +70,45 @@
button.SetUseFocusIndicator(False)
-def GenerateEmptyBitmap(width, height, color):
-# bitmap = wx.EmptyBitmap(width, height)
-# dc = wx.MemoryDC(bitmap)
-# dc.SetPen(wx.Pen(color))
-# dc.SetBrush(wx.Brush(color))
-# dc.DrawRectangle(0, 0, width, height)
- return wx.Bitmap(os.path.join(CWD, "images", "empty.png"))
+# Patch wx.lib.imageutils so that gray is supported on alpha images +import wx.lib.imageutils + Convert the given image (in place) to a grayed-out + version, appropriate for a 'disabled' appearance. + factor = 0.7 # 0 < f < 1. Higher is grayer. + maskColor = (anImage.GetMaskRed(), anImage.GetMaskGreen(), anImage.GetMaskBlue()) + AlphaData = anImage.GetAlphaData() + data = map(ord, list(anImage.GetData())) + for i in range(0, len(data), 3): + pixel = (data[i], data[i+1], data[i+2]) + pixel = wx.lib.imageutils.makeGray(pixel, factor, maskColor) + anImage.SetData(''.join(map(chr, data))) + if AlphaData is not None: + anImage.SetAlphaData(AlphaData) +wx.lib.imageutils.grayOut = grayOut +class GenBitmapTextButton(wx.lib.buttons.GenBitmapTextButton): + def _GetLabelSize(self): + return wx.lib.buttons.GenBitmapTextButton._GetLabelSize(self)[:-1] + (False,) class GenStaticBitmap(wx.lib.statbmp.GenStaticBitmap):
+ """ Customized GenStaticBitmap, fix transparency redraw bug on wx2.8/win32, + and accept image name as __init__ parameter, fail silently if file do not exist""" def __init__(self, parent, ID, bitmapname,
pos = wx.DefaultPosition, size = wx.DefaultSize,
@@ -407,6 +437,7 @@
maxx / SCROLLBAR_UNIT, maxy / SCROLLBAR_UNIT, xstart, ystart)
def RefreshPLCParams(self):
self.ClearSizer(self.PLCParamsSizer)
if self.PluginRoot.HasProjectOpened():
@@ -483,6 +514,7 @@
self.PLCConfigMainSizer.Layout()
# def GenerateAddButtonSizer(self, plugin, parent, horizontal = True):
@@ -512,18 +544,19 @@
for plugin_method in plugin.PluginMethods:
if "method" in plugin_method:
- button = wx.lib.buttons.GenBitmapTextButton(id=id, parent=parent,
+ button = GenBitmapTextButton(id=id, parent=parent, bitmap=wx.Bitmap(os.path.join(CWD, "%s24x24.png"%plugin_method.get("bitmap", os.path.join("images", "Unknown")))), label=plugin_method["name"],
name=plugin_method["name"], pos=wx.DefaultPosition, style=wx.NO_BORDER)
button.SetToolTipString(plugin_method["tooltip"])
button.Bind(wx.EVT_BUTTON, self.GetButtonCallBackFunction(plugin, plugin_method["method"]), id=id)
#hack to force size to mini
- button._GetLabelSize = gen_mini_GetLabelSize(button)
- #button._GetLabelSize = lambda :(-1,-1,False)
+ if not plugin_method.get("enabled",True): msizer.AddWindow(button, 0, border=0, flag=0)
def RefreshPluginTree(self):
self.ClearSizer(self.PluginTreeSizer)
if self.PluginRoot.HasProjectOpened():
@@ -533,6 +566,7 @@
self.CollapsePlugin(child)
self.PLCConfigMainSizer.Layout()
def ExpandPlugin(self, plugin, force = False):
for child in self.PluginInfos[plugin]["children"]:
@@ -583,10 +617,6 @@
rolesizer = wx.BoxSizer(wx.HORIZONTAL)
leftsizer.AddSizer(rolesizer, 0, border=0, flag=wx.GROW|wx.RIGHT)
- roletext = wx.StaticText(leftwindow, -1)
- roletext.SetLabel(plugin.PlugHelp)
- rolesizer.AddWindow(roletext, 0, border=5, flag=wx.RIGHT|wx.ALIGN_LEFT)
enablebutton_id = wx.NewId()
enablebutton = wx.lib.buttons.GenBitmapToggleButton(id=enablebutton_id, bitmap=wx.Bitmap(os.path.join(CWD, 'images', 'Disabled.png')),
name='EnableButton', parent=leftwindow, size=wx.Size(16, 16), pos=wx.Point(0, 0), style=0)#wx.NO_BORDER)
@@ -602,6 +632,9 @@
enablebutton.Bind(wx.EVT_BUTTON, toggleenablebutton, id=enablebutton_id)
rolesizer.AddWindow(enablebutton, 0, border=0, flag=wx.RIGHT|wx.ALIGN_CENTER_VERTICAL)
+ roletext = wx.StaticText(leftwindow, -1) + roletext.SetLabel(plugin.PlugHelp) + rolesizer.AddWindow(roletext, 0, border=5, flag=wx.RIGHT|wx.ALIGN_LEFT) plugin_IECChannel = plugin.BaseParams.getIEC_Channel()
@@ -805,7 +838,11 @@
infos["variable_list"].Append(location["NAME"].replace("__", "%").replace("_", "."))
self.PLCConfigMainSizer.Layout()
+ self.RefreshPLCParams() + self.RefreshPluginTree() def GetItemChannelChangedFunction(self, plugin, value):
def OnPluginTreeItemChannelChanged(event):
res, StructChanged = plugin.SetParamsAttribute("BaseParams.IEC_Channel", value, self.Log)
@@ -834,7 +871,8 @@
def GetButtonCallBackFunction(self, plugin, method):
def OnButtonClick(event):
getattr(plugin,method)(self.Log)
- self.RefreshVariableLists()
+ #self.RefreshVariableLists() + wx.CallAfter(self.RefreshAll) @@ -1166,7 +1204,7 @@
Max_Traceback_List_Size = 20
-def Display_Exception_Dialog(e_type,e_value,e_tb):
+def Display_Exception_Dialog(e_type, e_value, e_tb, bug_report_path): for i,line in enumerate(traceback.extract_tb(e_tb)):
trcbck = " " + str(i+1) + ". "
@@ -1184,17 +1222,16 @@
dlg = wx.SingleChoiceDialog(None,
-Click on OK for saving an error report.
+An unhandled exception (bug) occured. Bug report saved at : -Please contact LOLITech at:
-bugs_Beremiz@lolitech.fr
+Please be kind enough to send this file to: +bugs_beremiz@lolitech.fr +You should now restart Beremiz.
str(e_type) + " : " + str(e_value),
@@ -1231,7 +1268,9 @@
if str(e_value).startswith("!!!"):
Display_Error_Dialog(e_value)
elif ex not in ignored_exceptions:
- result = Display_Exception_Dialog(e_type,e_value,e_traceback)
+ bug_report_path = path+os.sep+"bug_report_"+date.replace(':','-').replace(' ','_')+".txt" + result = Display_Exception_Dialog(e_type,e_value,e_traceback,bug_report_path) ignored_exceptions.append(ex)
@@ -1243,7 +1282,7 @@
'platform' : platform.platform(),
@@ -1254,7 +1293,7 @@
if 'self' in exception_locals:
info['self'] = format_namespace(exception_locals['self'].__dict__)
- output = open(path+os.sep+"bug_report_"+info['date'].replace(':','-').replace(' ','_')+".txt",'w')
+ output = open(bug_report_path,'w') --- a/plugger.py Fri Feb 22 15:40:18 2008 +0100
+++ b/plugger.py Fri Feb 22 19:04:01 2008 +0100
@@ -532,6 +532,13 @@
# logger.write_error("Could not add child \"%s\", type %s :\n%s\n"%(pname, ptype, str(e)))
+ def EnableMethod(self, method, value): + for d in self.PluginMethods: + if d["method"]==method: def _GetClassFunction(name):
return getattr(__import__("plugins." + name), name).RootClass
@@ -968,9 +975,10 @@
status, result, err_result = logger.LogCommand("\"%s\" \"%s\" -o \"%s\" %s"%(linker, '" "'.join(objs), exe_path, ' '.join(LDFLAGS+[_LDFLAGS])))
logger.write_error("Build failed\n")
+ self.EnableMethod("_Run", False)
+ self.EnableMethod("_Run", True) @@ -1060,10 +1068,12 @@
{"bitmap" : os.path.join("images", "Run"),
"tooltip" : "Run PLC from build folder",
{"bitmap" : os.path.join("images", "Stop"),
"tooltip" : "Stop Running PLC",
{"bitmap" : os.path.join("images", "ShowIECcode"),