chiark / gitweb /
Add radio toolbar buttons for 3D/Top view. Some minor cleanup in toggle button code.
authordaid <daid303@gmail.com>
Wed, 18 Apr 2012 10:39:05 +0000 (12:39 +0200)
committerdaid <daid303@gmail.com>
Wed, 18 Apr 2012 10:39:05 +0000 (12:39 +0200)
Cura/gui/preview3d.py
Cura/gui/toolbarUtil.py

index 90d3d8ede8eadcd1b42532c91efc7c3781b861d4..9aac708d1c9c41268cdd2f14a8bf1b558142b709 100644 (file)
@@ -46,13 +46,10 @@ class previewPanel(wx.Panel):
                \r
                self.toolbar = toolbarUtil.Toolbar(self)\r
 \r
-               button = wx.Button(self.toolbar, -1, "3D", size=(21*2,21))\r
-               self.toolbar.AddControl(button)\r
-               self.Bind(wx.EVT_BUTTON, self.On3DClick, button)\r
-               \r
-               button = wx.Button(self.toolbar, -1, "Top", size=(21*2,21))\r
-               self.toolbar.AddControl(button)\r
-               self.Bind(wx.EVT_BUTTON, self.OnTopClick, button)\r
+               group = []\r
+               toolbarUtil.RadioButton(self.toolbar, group, 'object-mirror-x-on.png', 'object-mirror-x-off.png', '3D view', callback=self.On3DClick).SetValue(True)\r
+               toolbarUtil.RadioButton(self.toolbar, group, 'object-mirror-x-on.png', 'object-mirror-x-off.png', 'Topdown view', callback=self.OnTopClick)\r
+               self.toolbar.AddSeparator()\r
 \r
                self.viewSelect = wx.ComboBox(self.toolbar, -1, 'Model - Normal', choices=['Model - Normal', 'Model - Transparent', 'Model - X-Ray', 'GCode', 'Mixed'], style=wx.CB_DROPDOWN|wx.CB_READONLY)\r
                self.toolbar.AddControl(self.viewSelect)\r
@@ -157,14 +154,14 @@ class previewPanel(wx.Panel):
                profile.putProfileSetting('model_rotate_base', self.rotate.GetValue())\r
                self.updateModelTransform()\r
 \r
-       def On3DClick(self, e):\r
+       def On3DClick(self):\r
                self.glCanvas.yaw = 30\r
                self.glCanvas.pitch = 60\r
                self.glCanvas.zoom = 150\r
                self.glCanvas.view3D = True\r
                self.glCanvas.Refresh()\r
 \r
-       def OnTopClick(self, e):\r
+       def OnTopClick(self):\r
                self.glCanvas.view3D = False\r
                self.glCanvas.zoom = 100\r
                self.glCanvas.offsetX = 0\r
index 6b3b08ef42d5420fd5143c7266f2dfaeccc361c3..2cf1b820851f2784d2234d41408807c62dc7404e 100644 (file)
@@ -77,16 +77,16 @@ class ToggleButton(buttons.GenBitmapToggleButton):
 
        def SetBitmap(self, boolValue):
                if boolValue:
-                       buttons.GenBitmapToggleButton.SetBitmapLabel(self, self.bitmapOn, False)
+                       self.SetBitmapLabel(self.bitmapOn, False)
                else:
-                       buttons.GenBitmapToggleButton.SetBitmapLabel(self, self.bitmapOff, False)
+                       self.SetBitmapLabel(self.bitmapOff, False)
 
        def SetValue(self, boolValue):
                self.SetBitmap(boolValue)
-               buttons.GenBitmapToggleButton.SetValue(self, boolValue)
+               super(ToggleButton, self).SetValue(boolValue)
 
        def OnButton(self, event):
-               self.SetBitmap(buttons.GenBitmapToggleButton.GetValue(self))
+               self.SetBitmap(self.GetValue())
                event.Skip()
 
        def OnButtonProfile(self, event):
@@ -107,6 +107,61 @@ class ToggleButton(buttons.GenBitmapToggleButton):
                self.GetParent().OnPopupHide(event)
                event.Skip()
 
+class RadioButton(buttons.GenBitmapButton):
+       def __init__(self, parent, group, bitmapFilenameOn, bitmapFilenameOff,
+                                helpText='', id=-1, callback=None, size=(20,20)):
+               self.bitmapOn = wx.Bitmap(os.path.join(os.path.split(__file__)[0], "../images", bitmapFilenameOn))
+               self.bitmapOff = wx.Bitmap(os.path.join(os.path.split(__file__)[0], "../images", bitmapFilenameOff))
+
+               super(RadioButton, self).__init__(parent, id, self.bitmapOff, size=size)
+
+               self.group = group
+               group.append(self)
+               self.callback = callback
+               self.helpText = helpText
+               self._value = False
+
+               self.SetBezelWidth(1)
+               self.SetUseFocusIndicator(False)
+
+               self.Bind(wx.EVT_BUTTON, self.OnButton)
+
+               self.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
+               self.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
+               
+               parent.AddControl(self)
+
+       def SetBitmap(self, boolValue):
+               if boolValue:
+                       self.SetBitmapLabel(self.bitmapOn, False)
+               else:
+                       self.SetBitmapLabel(self.bitmapOff, False)
+               self.Refresh()
+
+       def SetValue(self, boolValue):
+               self._value = boolValue
+               self.SetBitmap(self.GetValue())
+               if boolValue == True:
+                       for other in self.group:
+                               if other != self:
+                                       other.SetValue(False)
+       
+       def GetValue(self):
+               return self._value
+
+       def OnButton(self, event):
+               self.SetValue(True)
+               self.callback()
+               event.Skip()
+
+       def OnMouseEnter(self, event):
+               self.GetParent().OnPopupDisplay(event)
+               event.Skip()
+
+       def OnMouseLeave(self, event):
+               self.GetParent().OnPopupHide(event)
+               event.Skip()
+
 class NormalButton(buttons.GenBitmapButton):
        def __init__(self, parent, callback, bitmapFilename,
                                 helpText='', id=-1, size=(20,20)):