Added 4 orders of magnitude to Z Buttons; Refactored some of XY Buttons

master
Duane Johnson 2011-11-07 21:35:59 -06:00
parent a6f3ec758e
commit 37cdd32347
5 changed files with 38 additions and 69 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -11,36 +11,13 @@ def sign(n):
class XYButtons(BufferedCanvas):
keypad_positions = {
0: (102, 109),
1: (78, 86),
2: (49, 58)
0: (126, 126),
1: (100, 100),
2: (78, 78),
3: (60, 60)
}
concentric_circle_radii = [15, 55, 86, 117, 142]
center = (166, 164)
distance = [
# Order of Magnitude 0 (i.e. 0.1, 1, 10)
[
# Quadrant 0 (Right)
[(0.1, 0), (1, 0), (10, 0)],
# Quadrant 1 (Up)
[(0, 0.1), (0, 1), (0, 10)],
# Quadrant 2 (Left)
[(-0.1, 0), (-1, 0), (-10, 0)],
# Quadrant 3 (Down)
[(0, -0.1), (0, -1), (0, -10)]
],
# Order of Magnitude 1 (i.e. 1, 10, 100)
[
# Quadrant 0 (Right)
[(1, 0), (10, 0), (100, 0)],
# Quadrant 1 (Up)
[(0, 1), (0, 10), (0, 100)],
# Quadrant 2 (Left)
[(-1, 0), (-10, 0), (-100, 0)],
# Quadrant 3 (Down)
[(0, -1), (0, -10), (0, -100)]
]
]
def __init__(self, parent, moveCallback=None, homeCallback=None, ID=-1):
self.bg_bmp = wx.Image(imagefile("control_xy.png"),wx.BITMAP_TYPE_PNG).ConvertToBitmap()
@ -67,29 +44,38 @@ class XYButtons(BufferedCanvas):
if evt.GetKeyCode() == wx.WXK_TAB:
self.setKeypadIndex(self.rotateKeypadIndex())
elif evt.GetKeyCode() == wx.WXK_UP:
if self.moveCallback:
x, y = XYButtons.distance[self.orderOfMagnitudeIdx][1][self.keypad_idx]
self.moveCallback(x, y)
self.quadrant = 1
elif evt.GetKeyCode() == wx.WXK_DOWN:
if self.moveCallback:
x, y = XYButtons.distance[self.orderOfMagnitudeIdx][3][self.keypad_idx]
self.moveCallback(x, y)
self.quadrant = 3
elif evt.GetKeyCode() == wx.WXK_LEFT:
if self.moveCallback:
x, y = XYButtons.distance[self.orderOfMagnitudeIdx][2][self.keypad_idx]
self.moveCallback(x, y)
self.quadrant = 2
elif evt.GetKeyCode() == wx.WXK_RIGHT:
if self.moveCallback:
x, y = XYButtons.distance[self.orderOfMagnitudeIdx][0][self.keypad_idx]
self.moveCallback(x, y)
self.quadrant = 0
else:
evt.Skip()
return
if self.moveCallback:
self.concentric = self.keypad_idx
x, y = self.getMovement()
self.moveCallback(x, y)
def rotateKeypadIndex(self):
idx = self.keypad_idx + 1
if idx > 2: idx = 0
return idx
def setKeypadIndex(self, idx):
self.keypad_idx = idx
self.update()
# self.keypad_bmp.Move(XYButtons.keypad_positions[self.keypad_idx])
def getMovement(self):
xdir = [1, 0, -1, 0][self.quadrant]
ydir = [0, 1, 0, -1][self.quadrant]
magnitude = math.pow(10, self.concentric-1)
return (magnitude * xdir, magnitude * ydir)
def lookupConcentric(self, radius):
idx = -1
for r in XYButtons.concentric_circle_radii:
@ -97,12 +83,7 @@ class XYButtons(BufferedCanvas):
return idx
idx += 1
return None
def setKeypadIndex(self, idx):
self.keypad_idx = idx
self.update()
# self.keypad_bmp.Move(XYButtons.keypad_positions[self.keypad_idx])
def getQuadrantConcentricFromPosition(self, pos):
rel_x = pos[0] - XYButtons.center[0]
rel_y = pos[1] - XYButtons.center[1]
@ -133,9 +114,7 @@ class XYButtons(BufferedCanvas):
idx = self.mouseOverKeypad(mpos)
self.quadrant = None
self.concentric = None
if idx != None:
self.concentric = -1
else:
if idx == None:
center = wx.Point(XYButtons.center[0], XYButtons.center[1])
riseDist = self.distanceToLine(mpos, center.x-1, center.y-1, center.x+1, center.y+1)
fallDist = self.distanceToLine(mpos, center.x-1, center.y+1, center.x+1, center.y-1)
@ -150,13 +129,9 @@ class XYButtons(BufferedCanvas):
idx = self.mouseOverKeypad(mpos)
if idx == None:
quadrant, concentric = self.getQuadrantConcentricFromPosition(mpos)
# print 'click:', mpos, quadrant, concentric
if concentric == -1:
if self.homeCallback:
self.homeCallback()
elif quadrant != None and concentric != None:
x, y = XYButtons.distance[self.orderOfMagnitudeIdx][quadrant][concentric]
self.quadrant, self.concentric = self.getQuadrantConcentricFromPosition(mpos)
if self.quadrant != None and self.concentric != None:
x, y = self.getMovement()
if self.moveCallback:
self.moveCallback(x, y)
else:
@ -230,10 +205,7 @@ class XYButtons(BufferedCanvas):
dc.DrawBitmap(self.bg_bmp, 0, 0)
if self.concentric == -1:
inner_ring_radius = XYButtons.concentric_circle_radii[0]
dc.DrawCircle(XYButtons.center[0], XYButtons.center[1], inner_ring_radius+2)
elif self.quadrant != None and self.concentric != None:
if self.quadrant != None and self.concentric != None:
self.highlightQuadrant(dc, self.quadrant, self.concentric)
pos = XYButtons.keypad_positions[self.keypad_idx]

View File

@ -10,8 +10,8 @@ def sign(n):
else: return 0
class ZButtons(BufferedCanvas):
button_ydistances = [16, 46, 80, 118]
center = (36, 147)
button_ydistances = [8, 30, 56, 84, 118]
center = (32, 146)
def __init__(self, parent, moveCallback=None, homeCallback=None, ID=-1):
self.bg_bmp = wx.Image(imagefile("control_z.png"),wx.BITMAP_TYPE_PNG).ConvertToBitmap()
@ -23,7 +23,7 @@ class ZButtons(BufferedCanvas):
BufferedCanvas.__init__(self, parent, ID)
self.SetSize(wx.Size(84, 295))
self.SetSize(wx.Size(87, 295))
# Set up mouse and keyboard event capture
self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
@ -40,20 +40,17 @@ class ZButtons(BufferedCanvas):
return None
def highlight(self, dc, rng, dir):
assert(rng >= -1 and rng <= 2)
assert(rng >= -1 and rng <= 3)
assert(dir >= -1 and dir <= 1)
fudge = 10
fudge = 11
x = 0 + fudge
w = 72 - fudge*2
if rng == -1:
y = ZButtons.center[1] - ZButtons.button_ydistances[0]
h = ZButtons.button_ydistances[0] * 2
else:
if rng >= 0:
k = 1 if dir > 0 else 0
y = ZButtons.center[1] - (dir * ZButtons.button_ydistances[rng+k])
h = ZButtons.button_ydistances[rng+1] - ZButtons.button_ydistances[rng]
dc.DrawRectangle(x, y, w, h)
dc.DrawRectangle(x, y, w, h)
# self.drawPartialPie(dc, center, r1-inner_ring_radius, r2-inner_ring_radius, a1+fudge, a2-fudge)
def getRangeDir(self, pos):