From be16c98e5979e867af3ac2444ae6ddc88da2011e Mon Sep 17 00:00:00 2001 From: Markus Hitter Date: Sun, 24 May 2015 16:43:53 +0200 Subject: [PATCH] Configtool: give the thing a nice background picture. This is pure dessert topping, no functinal change. Well, eye candy is important for acceptance. :-) --- configtool.py | 4 +++ configtool/background.png | Bin 0 -> 17250 bytes configtool/boardpanel.py | 3 ++ configtool/decoration.py | 64 +++++++++++++++++++++++++++++++++++++ configtool/page.py | 3 ++ configtool/printerpanel.py | 3 ++ 6 files changed, 77 insertions(+) create mode 100644 configtool/background.png create mode 100644 configtool/decoration.py diff --git a/configtool.py b/configtool.py index f9bef25..ccb5c36 100755 --- a/configtool.py +++ b/configtool.py @@ -21,6 +21,7 @@ import inspect cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe()))[0])) +from configtool.decoration import Decoration from configtool.settings import Settings, SettingsDlg from configtool.printerpanel import PrinterPanel from configtool.boardpanel import BoardPanel @@ -45,7 +46,10 @@ class ConfigFrame(wx.Frame): wx.Frame.__init__(self, None, -1, "Teacup Configtool", size = (880, 550)) self.Bind(wx.EVT_CLOSE, self.onClose) + self.deco = Decoration() + panel = wx.Panel(self, -1) + panel.Bind(wx.EVT_PAINT, self.deco.onPaintBackground) self.settings = Settings(self, cmd_folder) self.settings.font = wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, diff --git a/configtool/background.png b/configtool/background.png new file mode 100644 index 0000000000000000000000000000000000000000..bc15d528aade74ff5d7048cb8ac9ec8a8dc1dd5d GIT binary patch literal 17250 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 B2yFlW literal 0 HcmV?d00001 diff --git a/configtool/boardpanel.py b/configtool/boardpanel.py index 3457672..8277fd8 100644 --- a/configtool/boardpanel.py +++ b/configtool/boardpanel.py @@ -4,6 +4,7 @@ import wx import re from sys import platform +from configtool.decoration import Decoration from configtool.data import (defineValueFormat, defineBoolFormat, defineHeaterFormat, reCommDefBL, reCommDefBoolBL, reHelpTextStart, reHelpTextEnd, @@ -30,6 +31,7 @@ class BoardPanel(wx.Panel): self.settings = settings self.protFileLoaded = False + self.deco = Decoration() self.configFile = None self.cfgValues = {} @@ -39,6 +41,7 @@ class BoardPanel(wx.Panel): self.candThermPins = [] self.dir = os.path.join(self.settings.folder, "config") + self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground) sz = wx.BoxSizer(wx.HORIZONTAL) self.nb = wx.Notebook(self, wx.ID_ANY, size = (21, 21), diff --git a/configtool/decoration.py b/configtool/decoration.py new file mode 100644 index 0000000..ec500b9 --- /dev/null +++ b/configtool/decoration.py @@ -0,0 +1,64 @@ + +import wx +import os.path + + +class Decoration(object): + def __new__(type, *args): + # Make it a Singleton. + if not '_the_instance' in type.__dict__: + type._the_instance = object.__new__(type) + + return type._the_instance + + def __init__(self): + if not '_ready' in dir(self): + self._ready = True + # It's a Singleton. Initialisations go in here. + self.backPic = None + self.backPicOffset = (0, -25) + + if not self.backPic: + backPicPath = os.path.join("configtool", "background.png") + if os.path.exists(backPicPath): + backPic = wx.Bitmap(backPicPath) + if backPic.IsOk(): + self.backPic = backPic + else: + print "Background picture %s damaged." % backPicPath + else: + print "Background picture %s doesn't exist." % backPicPath + + # On wxFrames, bind this to wx.EVT_ERASE_BACKGROUND + # On wxPanels, bind this to wx.EVT_PAINT + def onPaintBackground(self, evt): + client = evt.GetEventObject() + topLevel = client.GetTopLevelParent() + + try: + dc = evt.GetDC() + except: + dc = wx.PaintDC(client) + + if dc: + # Now draw the background picture with pseudo-transparency. This is, + # each background is drawn with the same picture, without transparency, + # and offsetted just right to have all backgrounds in the same position + # relative to the *toplevel* window, not relative to the current + # subwindow as usual. + + # Align bottom right. + offX, offY = topLevel.GetClientSize() - self.backPic.GetSize() + \ + self.backPicOffset + + if client != topLevel: + # Note: trying to figure this additional offset via various + # .GetScreenPosition() or .GetPosition() or whatever is hopeless. + # Of many many tries only this worked on Linux. + offX, offY = \ + client.ScreenToClient(topLevel.ClientToScreen((offX, offY))) + + if self.backPic: + dc.DrawBitmap(self.backPic, offX, offY) + + evt.Skip() diff --git a/configtool/page.py b/configtool/page.py index 1fd8d31..293b236 100644 --- a/configtool/page.py +++ b/configtool/page.py @@ -1,6 +1,7 @@ import wx +from configtool.decoration import Decoration from configtool.data import reInteger, reFloat, offsetChLabel, offsetTcLabel @@ -14,8 +15,10 @@ class Page: self.radioButtons = {} self.radioButtonBoxes = {} self.choices = {} + self.deco = Decoration() self.font = font + self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground) def enableAll(self, flag = True): for c in self.textControls.keys(): diff --git a/configtool/printerpanel.py b/configtool/printerpanel.py index abccb49..4b0670f 100644 --- a/configtool/printerpanel.py +++ b/configtool/printerpanel.py @@ -4,6 +4,7 @@ import wx import re from sys import platform +from configtool.decoration import Decoration from configtool.data import (defineValueFormat, defineBoolFormat, reCommDefBL, reCommDefBoolBL, reHelpTextStart, reHelpTextEnd, reDefine, reDefineBL, reDefQS, reDefQSm, @@ -19,6 +20,7 @@ class PrinterPanel(wx.Panel): wx.Panel.__init__(self, nb, wx.ID_ANY) self.parent = parent + self.deco = Decoration() self.configFile = None self.protFileLoaded = False @@ -28,6 +30,7 @@ class PrinterPanel(wx.Panel): self.heaters = [] self.dir = os.path.join(self.settings.folder, "config") + self.Bind(wx.EVT_PAINT, self.deco.onPaintBackground) sz = wx.BoxSizer(wx.HORIZONTAL) self.nb = wx.Notebook(self, wx.ID_ANY, size = (21, 21),