Add subclass to specify direction only
This commit is contained in:
@@ -24,7 +24,7 @@ import wx
|
|||||||
from gui.bitmap_loader import BitmapLoader
|
from gui.bitmap_loader import BitmapLoader
|
||||||
from service.fit import Fit
|
from service.fit import Fit
|
||||||
from .lists import FitList, TargetList
|
from .lists import FitList, TargetList
|
||||||
from .vector import VectorPicker
|
from .vector import VectorPicker, DirectionPicker
|
||||||
|
|
||||||
|
|
||||||
class GraphControlPanel(wx.Panel):
|
class GraphControlPanel(wx.Panel):
|
||||||
@@ -59,7 +59,7 @@ class GraphControlPanel(wx.Panel):
|
|||||||
srcTgtSizer.Add(self.fitList, 1, wx.EXPAND)
|
srcTgtSizer.Add(self.fitList, 1, wx.EXPAND)
|
||||||
self.srcVector = VectorPicker(self, style=wx.NO_BORDER, size=60, offset=90, label='Src', labelpos=2)
|
self.srcVector = VectorPicker(self, style=wx.NO_BORDER, size=60, offset=90, label='Src', labelpos=2)
|
||||||
srcTgtSizer.Add(self.srcVector, flag=wx.SHAPED | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
|
srcTgtSizer.Add(self.srcVector, flag=wx.SHAPED | wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
|
||||||
self.tgtVector = VectorPicker(self, style=wx.NO_BORDER, size=60, offset=-90, label='Tgt', labelpos=3)
|
self.tgtVector = DirectionPicker(self, style=wx.NO_BORDER, size=60, offset=-90, label='Tgt', labelpos=3)
|
||||||
srcTgtSizer.Add(self.tgtVector, flag=wx.SHAPED | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
|
srcTgtSizer.Add(self.tgtVector, flag=wx.SHAPED | wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
|
||||||
self.targets = []
|
self.targets = []
|
||||||
self.targetList = TargetList(graphFrame, self)
|
self.targetList = TargetList(graphFrame, self)
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ class VectorPicker(wx.Window):
|
|||||||
|
|
||||||
myEVT_VECTOR_CHANGED = wx.NewEventType()
|
myEVT_VECTOR_CHANGED = wx.NewEventType()
|
||||||
EVT_VECTOR_CHANGED = wx.PyEventBinder(myEVT_VECTOR_CHANGED, 1)
|
EVT_VECTOR_CHANGED = wx.PyEventBinder(myEVT_VECTOR_CHANGED, 1)
|
||||||
|
_tooltip = 'Click to set angle and velocity\nRight-click to snap to 15% angle/5% speed increments\nMouse wheel to change velocity only'
|
||||||
|
_lengthLabel = True
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self._label = str(kwargs.pop('label', ''))
|
self._label = str(kwargs.pop('label', ''))
|
||||||
@@ -35,13 +37,12 @@ class VectorPicker(wx.Window):
|
|||||||
self._offset = float(kwargs.pop('offset', 0))
|
self._offset = float(kwargs.pop('offset', 0))
|
||||||
self._size = max(0, float(kwargs.pop('size', 50)))
|
self._size = max(0, float(kwargs.pop('size', 50)))
|
||||||
self._fontsize = max(1, float(kwargs.pop('fontsize', 8)))
|
self._fontsize = max(1, float(kwargs.pop('fontsize', 8)))
|
||||||
wx.Window.__init__(self, *args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self._font = wx.Font(self._fontsize, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
|
self._font = wx.Font(self._fontsize, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False)
|
||||||
self._angle = 0
|
self._angle = 0
|
||||||
self._length = 1
|
self._length = 1
|
||||||
self._left = False
|
self._left = False
|
||||||
self._right = False
|
self._right = False
|
||||||
self._tooltip = 'Click to set angle and velocity, right-click for increments; mouse wheel for velocity only'
|
|
||||||
self.SetToolTip(wx.ToolTip(self._tooltip))
|
self.SetToolTip(wx.ToolTip(self._tooltip))
|
||||||
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
self.Bind(wx.EVT_PAINT, self.OnPaint)
|
||||||
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
|
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
|
||||||
@@ -108,11 +109,12 @@ class VectorPicker(wx.Window):
|
|||||||
labelTextY = (radius * 2 + 4 - labelTextH) if (self._labelpos & 2) else 0
|
labelTextY = (radius * 2 + 4 - labelTextH) if (self._labelpos & 2) else 0
|
||||||
dc.DrawText(labelText, labelTextX, labelTextY)
|
dc.DrawText(labelText, labelTextX, labelTextY)
|
||||||
|
|
||||||
lengthText = '%d%%' % (100 * self._length,)
|
if self._lengthLabel:
|
||||||
lengthTextW, lengthTextH = dc.GetTextExtent(lengthText)
|
lengthText = '%d%%' % (100 * self._length,)
|
||||||
lengthTextX = radius + 2 + x / 2 - y / 3 - lengthTextW / 2
|
lengthTextW, lengthTextH = dc.GetTextExtent(lengthText)
|
||||||
lengthTextY = radius + 2 - y / 2 - x / 3 - lengthTextH / 2
|
lengthTextX = radius + 2 + x / 2 - y / 3 - lengthTextW / 2
|
||||||
dc.DrawText(lengthText, lengthTextX, lengthTextY)
|
lengthTextY = radius + 2 - y / 2 - x / 3 - lengthTextH / 2
|
||||||
|
dc.DrawText(lengthText, lengthTextX, lengthTextY)
|
||||||
|
|
||||||
angleText = '%d\u00B0' % (self._angle,)
|
angleText = '%d\u00B0' % (self._angle,)
|
||||||
angleTextW, angleTextH = dc.GetTextExtent(angleText)
|
angleTextW, angleTextH = dc.GetTextExtent(angleText)
|
||||||
@@ -209,3 +211,17 @@ class VectorPicker(wx.Window):
|
|||||||
changeEvent._angle = self._angle
|
changeEvent._angle = self._angle
|
||||||
changeEvent._length = self._length
|
changeEvent._length = self._length
|
||||||
self.GetEventHandler().ProcessEvent(changeEvent)
|
self.GetEventHandler().ProcessEvent(changeEvent)
|
||||||
|
|
||||||
|
|
||||||
|
class DirectionPicker(VectorPicker):
|
||||||
|
|
||||||
|
_tooltip = 'Click to set angle\nRight-click to snap to 15% angle'
|
||||||
|
_lengthLabel = False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _length(self):
|
||||||
|
return 1
|
||||||
|
|
||||||
|
@_length.setter
|
||||||
|
def _length(self, length):
|
||||||
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user