From: Youness Alaoui Date: Tue, 28 Jul 2015 19:50:57 +0000 (-0400) Subject: Add a new ImageButton widget X-Git-Tag: lulzbot-15.02.1-2.01~56^2~28 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=cebb4179745ef4deb284f49fc873a8795bcda553;p=cura.git Add a new ImageButton widget --- diff --git a/Cura/gui/configWizard.py b/Cura/gui/configWizard.py index 52053020..224ac480 100644 --- a/Cura/gui/configWizard.py +++ b/Cura/gui/configWizard.py @@ -106,6 +106,77 @@ class InfoBox(wx.Panel): self.busyState = None self.bitmap.SetBitmap(self.attentionBitmap) +class ImageButton(wx.Panel): + DefaultOverlay = wx.Bitmap(resources.getPathForImage('ImageButton_Overlay.png')) + IB_GROUP=1 + __groups__ = {} + __last_group__ = None + def __init__(self, parent, label, bitmap, extra_label=None, overlay=DefaultOverlay, style=None): + super(ImageButton, self).__init__(parent) + + if style is ImageButton.IB_GROUP: + ImageButton.__last_group__ = self + ImageButton.__groups__[self] = [self] + self.group = self + else: + if ImageButton.__last_group__: + ImageButton.__groups__[ImageButton.__last_group__].append(self) + self.group = ImageButton.__last_group__ + else: + self.group = None + self.sizer = wx.BoxSizer(wx.VERTICAL) + self.SetSizer(self.sizer) + self.bitmap = bitmap + self.overlay = self.createOverlay(bitmap, overlay) + self.text = wx.StaticText(self, -1, label) + self.bmp = wx.StaticBitmap(self, -1, self.bitmap) + if extra_label: + self.extra_text = wx.StaticText(self, -1, extra_label) + self.selected = False + + self.sizer.Add(self.text, 0, flag=wx.ALL|wx.ALIGN_CENTER, border=5) + self.sizer.Add(self.bmp, 1, flag=wx.ALL|wx.ALIGN_CENTER|wx.EXPAND, border=5) + if extra_label: + self.sizer.Add(self.extra_text, 0, flag=wx.ALL|wx.ALIGN_CENTER, border=5) + self.bmp.Bind(wx.EVT_LEFT_UP, self.OnLeftClick) + + def __del__(self): + if self.group: + ImageButton.__groups__[self.group].remove(self) + if self == self.group: + for ib in ImageButton.__groups__[self.group]: + ib.group = None + del ImageButton.__groups__[self.group] + if ImageButton.__last_group__ == self: + ImageButton.__last_group__ = None + + def OnLeftClick(self, e): + self.SetValue(True) + + def GetValue(self): + return self.selected + + def SetValue(self, value): + self.selected = bool(value) + self.bmp.SetBitmap(self.overlay if self.GetValue() else self.bitmap) + if self.selected and self.group: + for ib in ImageButton.__groups__[self.group]: + if ib == self: + continue + ib.SetValue(False) + + def createOverlay(self, bitmap, overlay): + result = bitmap.GetSubBitmap(wx.Rect(0, 0, *bitmap.Size)) + (width, height) = bitmap.GetSize() + overlay_image = wx.ImageFromBitmap(overlay) + overlay_image = overlay_image.Scale(width, height, wx.IMAGE_QUALITY_HIGH) + overlay_scaled = wx.BitmapFromImage(overlay_image) + dc = wx.MemoryDC() + dc.SelectObject(result) + dc.DrawBitmap(overlay_scaled, 0, 0) + dc.SelectObject(wx.NullBitmap) + return result + class InfoPage(wx.wizard.WizardPageSimple): def __init__(self, parent, title): diff --git a/resources/images/ImageButton_Overlay.png b/resources/images/ImageButton_Overlay.png new file mode 100644 index 00000000..663ccea4 Binary files /dev/null and b/resources/images/ImageButton_Overlay.png differ