From f4d18e4dff82e532309fedc695eec650c1bdf763 Mon Sep 17 00:00:00 2001 From: Duane Johnson Date: Mon, 7 Nov 2011 22:09:18 -0600 Subject: [PATCH] Fixed keypad toggle for XY controls. Defaults to off. --- bufferedcanvas.py | 2 +- pronterface.py | 57 ++++++++++++++++------------------------------- xybuttons.py | 55 ++++++++++++++++++++++++--------------------- zbuttons.py | 6 +---- 4 files changed, 50 insertions(+), 70 deletions(-) diff --git a/bufferedcanvas.py b/bufferedcanvas.py index d751cc8..88fcc37 100644 --- a/bufferedcanvas.py +++ b/bufferedcanvas.py @@ -144,4 +144,4 @@ class BufferedCanvas(wx.Panel): self.backbuffer = wx.EmptyBitmapRGBA(w, h, alpha=0) # Now update the screen - self.update() \ No newline at end of file + self.update() diff --git a/pronterface.py b/pronterface.py index 4541ba8..7ac9b8a 100755 --- a/pronterface.py +++ b/pronterface.py @@ -76,36 +76,14 @@ class PronterWindow(wx.Frame,pronsole.pronsole): ycol=(180,180,255) zcol=(180,255,180) self.cpbuttons=[ - # [_("X+100"),("move X 100"),(2,0),xcol,(1,3)], - # [_("X+10"),("move X 10"),(3,0),xcol,(1,3)], - # [_("X+1"),("move X 1"),(4,0),xcol,(1,3)], - # [_("X+0.1"),("move X 0.1"),(5,0),xcol,(1,3)], - # [_("HomeX"),("home X"),(6,0),(205,205,78),(1,3)], - # [_("X-0.1"),("move X -0.1"),(7,0),xcol,(1,3)], - # [_("X-1"),("move X -1"),(8,0),xcol,(1,3)], - # [_("X-10"),("move X -10"),(9,0),xcol,(1,3)], - # [_("X-100"),("move X -100"),(10,0),xcol,(1,3)], - # [_("Y+100"),("move Y 100"),(2,3),ycol,(1,3)], - # [_("Y+10"),("move Y 10"),(3,3),ycol,(1,3)], - # [_("Y+1"),("move Y 1"),(4,3),ycol,(1,3)], - # [_("Y+0.1"),("move Y 0.1"),(5,3),ycol,(1,3)], - # [_("HomeY"),("home Y"),(6,3),(150,150,205),(1,3)], - # [_("Y-0.1"),("move Y -0.1"),(7,3),ycol,(1,3)], - # [_("Y-1"),("move Y -1"),(8,3),ycol,(1,3)], - # [_("Y-10"),("move Y -10"),(9,3),ycol,(1,3)], - # [_("Y-100"),("move Y -100"),(10,3),ycol,(1,3)], - # [_("Motors off"),("M84"),(2,6),(250,250,250),(1,3)], - # [_("Z+10"),("move Z 10"),(3,6),zcol,(1,3)], - # [_("Z+1"),("move Z 1"),(4,6),zcol,(1,3)], - # [_("Z+0.1"),("move Z 0.1"),(5,6),zcol,(1,3)], - # [_("HomeZ"),("home Z"),(6,6),(150,205,150),(1,3)], - # [_("Z-0.1"),("move Z -0.1"),(7,6),zcol,(1,3)], - # [_("Z-1"),("move Z -1"),(8,6),zcol,(1,3)], - # [_("Z-10"),("move Z -10"),(9,6),zcol,(1,3)], - # [_("Home"),("home"),(10,6),(250,250,250),(1,3)], - [_("Check temp"),("M105"),(11,6),(225,200,200),(1,3)], - [_("Extrude"),("extrude"),(13,0),(225,200,200),(1,2)], - [_("Reverse"),("reverse"),(14,0),(225,200,200),(1,2)], + [_("Home"),("home"),(3,0),(250,250,250),(1,2)], + [_("HomeX"),("home X"),(3,2),(205,205,78),(1,2)], + [_("HomeY"),("home Y"),(3,4),(150,150,205),(1,2)], + [_("HomeZ"),("home Z"),(3,6),(150,205,150),(1,2)], + [_("Motors off"),("M84"),(3,8),(250,250,250),(1,2)], + [_("Check temp"),("M105"),(6,6),(225,200,200),(1,3)], + [_("Extrude"),("extrude"),(7,0),(225,200,200),(1,2)], + [_("Reverse"),("reverse"),(8,0),(225,200,200),(1,2)], ] self.custombuttons=[] self.btndict={} @@ -388,7 +366,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): portslist += [self.settings.port] self.serialport = wx.ComboBox(self.panel, -1, choices=portslist, - style=wx.CB_DROPDOWN|wx.CB_SORT, pos=(50,0)) + style=wx.CB_DROPDOWN|wx.CB_SORT|wx.CB_READONLY, pos=(50,0)) try: if self.settings.port in scan: self.serialport.SetValue(self.settings.port) @@ -400,7 +378,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): uts.Add(wx.StaticText(self.panel,-1,"@",pos=(250,5)),wx.RIGHT,5) self.baud = wx.ComboBox(self.panel, -1, choices=["2400", "9600", "19200", "38400", "57600", "115200"], - style=wx.CB_DROPDOWN|wx.CB_SORT, size=(110,30),pos=(275,0)) + style=wx.CB_DROPDOWN|wx.CB_SORT|wx.CB_READONLY, size=(110,30),pos=(275,0)) try: self.baud.SetValue("115200") self.baud.SetValue(str(self.settings.baudrate)) @@ -480,8 +458,11 @@ class PronterWindow(wx.Frame,pronsole.pronsole): #lls.Add((200,375)) - lls.Add(XYButtons(self.panel, self.moveXY, self.home), pos=(2,0), span=(9,6)) - lls.Add(ZButtons(self.panel, self.moveZ, self.home), pos=(2,7), span=(9,2)) + xyb = XYButtons(self.panel, self.moveXY) + lls.Add(xyb, pos=(2,0), span=(1,6), flag=wx.ALIGN_CENTER) + zb = ZButtons(self.panel, self.moveZ) + lls.Add(zb, pos=(2,7), span=(1,2), flag=wx.ALIGN_CENTER) + wx.CallAfter(xyb.SetFocus) for i in self.cpbuttons: btn=wx.Button(self.panel,-1,i[0])#,size=(60,-1)) @@ -494,7 +475,7 @@ class PronterWindow(wx.Frame,pronsole.pronsole): lls.Add(btn,pos=i[2],span=i[4]) - lls.Add(wx.StaticText(self.panel,-1,_("Heater:"),pos=(0,343)),pos=(11,0),span=(1,1)) + lls.Add(wx.StaticText(self.panel,-1,_("Heater:"),pos=(0,343)),pos=(4,0),span=(1,1)) htemp_choices=[self.temps[i]+" ("+i+")" for i in sorted(self.temps.keys(),key=lambda x:self.temps[x])] if self.settings.last_temperature not in map(float,self.temps.values()): @@ -503,12 +484,12 @@ class PronterWindow(wx.Frame,pronsole.pronsole): choices=htemp_choices,style=wx.CB_DROPDOWN, size=(90,25),pos=(45,337)) - lls.Add(self.htemp,pos=(11,1),span=(1,3)) + lls.Add(self.htemp,pos=(4,1),span=(1,3)) self.settbtn=wx.Button(self.panel,-1,_("Set"),size=(38,-1),pos=(135,335)) self.settbtn.Bind(wx.EVT_BUTTON,self.do_settemp) self.printerControls.append(self.settbtn) - lls.Add(self.settbtn,pos=(11,4),span=(1,2)) - lls.Add(wx.StaticText(self.panel,-1,_("Bed:"),pos=(0,343)),pos=(12,0),span=(1,1)) + lls.Add(self.settbtn,pos=(4,4),span=(1,2)) + lls.Add(wx.StaticText(self.panel,-1,_("Bed:"),pos=(0,343)),pos=(5,0),span=(1,1)) btemp_choices=[self.bedtemps[i]+" ("+i+")" for i in sorted(self.bedtemps.keys(),key=lambda x:self.temps[x])] if self.settings.last_bed_temperature not in map(float,self.bedtemps.values()): btemp_choices = [str(self.settings.last_bed_temperature)] + btemp_choices diff --git a/xybuttons.py b/xybuttons.py index 9b068fc..e877433 100644 --- a/xybuttons.py +++ b/xybuttons.py @@ -19,15 +19,13 @@ class XYButtons(BufferedCanvas): concentric_circle_radii = [15, 55, 86, 117, 142] center = (166, 164) - def __init__(self, parent, moveCallback=None, homeCallback=None, ID=-1): + def __init__(self, parent, moveCallback=None, ID=-1): self.bg_bmp = wx.Image(imagefile("control_xy.png"),wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.keypad_bmp = wx.Image(imagefile("arrow_keys.png"),wx.BITMAP_TYPE_PNG).ConvertToBitmap() - self.keypad_idx = 0 - self.orderOfMagnitudeIdx = 0 + self.keypad_idx = -1 self.quadrant = None self.concentric = None self.moveCallback = moveCallback - self.homeCallback = homeCallback BufferedCanvas.__init__(self, parent, ID) @@ -38,26 +36,27 @@ class XYButtons(BufferedCanvas): self.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDown) self.Bind(wx.EVT_MOTION, self.OnMotion) self.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeaveWindow) - parent.Bind(wx.EVT_CHAR_HOOK, self.onKey) + wx.GetTopLevelParent(self).Bind(wx.EVT_CHAR_HOOK, self.onKey) def onKey(self, evt): - if evt.GetKeyCode() == wx.WXK_TAB: - self.setKeypadIndex(self.rotateKeypadIndex()) - elif evt.GetKeyCode() == wx.WXK_UP: - self.quadrant = 1 - elif evt.GetKeyCode() == wx.WXK_DOWN: - self.quadrant = 3 - elif evt.GetKeyCode() == wx.WXK_LEFT: - self.quadrant = 2 - elif evt.GetKeyCode() == wx.WXK_RIGHT: - self.quadrant = 0 - else: - evt.Skip() - return - if self.moveCallback: - self.concentric = self.keypad_idx - x, y = self.getMovement() - self.moveCallback(x, y) + if self.keypad_idx >= 0: + if evt.GetKeyCode() == wx.WXK_TAB: + self.setKeypadIndex(self.rotateKeypadIndex()) + elif evt.GetKeyCode() == wx.WXK_UP: + self.quadrant = 1 + elif evt.GetKeyCode() == wx.WXK_DOWN: + self.quadrant = 3 + elif evt.GetKeyCode() == wx.WXK_LEFT: + self.quadrant = 2 + elif evt.GetKeyCode() == wx.WXK_RIGHT: + self.quadrant = 0 + else: + evt.Skip() + return False + if self.moveCallback: + self.concentric = self.keypad_idx + x, y = self.getMovement() + self.moveCallback(x, y) def rotateKeypadIndex(self): @@ -135,7 +134,10 @@ class XYButtons(BufferedCanvas): if self.moveCallback: self.moveCallback(x, y) else: - self.setKeypadIndex(idx) + if self.keypad_idx == idx: + self.setKeypadIndex(-1) + else: + self.setKeypadIndex(idx) def OnLeaveWindow(self, evt): self.quadrant = None @@ -207,8 +209,9 @@ class XYButtons(BufferedCanvas): if self.quadrant != None and self.concentric != None: self.highlightQuadrant(dc, self.quadrant, self.concentric) - - pos = XYButtons.keypad_positions[self.keypad_idx] - dc.DrawBitmap(self.keypad_bmp, pos[0], pos[1]) + + if self.keypad_idx >= 0: + pos = XYButtons.keypad_positions[self.keypad_idx] + dc.DrawBitmap(self.keypad_bmp, pos[0], pos[1]) return True diff --git a/zbuttons.py b/zbuttons.py index eb3814d..e72c670 100644 --- a/zbuttons.py +++ b/zbuttons.py @@ -13,13 +13,12 @@ class ZButtons(BufferedCanvas): button_ydistances = [8, 30, 56, 84, 118] center = (32, 146) - def __init__(self, parent, moveCallback=None, homeCallback=None, ID=-1): + def __init__(self, parent, moveCallback=None, ID=-1): self.bg_bmp = wx.Image(imagefile("control_z.png"),wx.BITMAP_TYPE_PNG).ConvertToBitmap() self.range = None self.direction = None self.orderOfMagnitudeIdx = 0 # 0 means '1', 1 means '10', 2 means '100', etc. self.moveCallback = moveCallback - self.homeCallback = homeCallback BufferedCanvas.__init__(self, parent, ID) @@ -73,9 +72,6 @@ class ZButtons(BufferedCanvas): value = math.pow(10, self.orderOfMagnitudeIdx) * math.pow(10, r - 1) * d if self.moveCallback: self.moveCallback(value) - else: - if self.homeCallback: - self.homeCallback() def OnLeaveWindow(self, evt): self.range = None