diff --git a/gui/graphFrame/panel.py b/gui/graphFrame/panel.py index a28f95e3f..cc661901b 100644 --- a/gui/graphFrame/panel.py +++ b/gui/graphFrame/panel.py @@ -24,7 +24,7 @@ import wx from gui.bitmap_loader import BitmapLoader from service.fit import Fit from .lists import FitList, TargetList -from .vector import VectorPicker +from .vector import VectorPicker, DirectionPicker class GraphControlPanel(wx.Panel): @@ -59,7 +59,7 @@ class GraphControlPanel(wx.Panel): srcTgtSizer.Add(self.fitList, 1, wx.EXPAND) 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) - 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) self.targets = [] self.targetList = TargetList(graphFrame, self) diff --git a/gui/graphFrame/vector.py b/gui/graphFrame/vector.py index b93ab68f9..047cb1821 100644 --- a/gui/graphFrame/vector.py +++ b/gui/graphFrame/vector.py @@ -28,6 +28,8 @@ class VectorPicker(wx.Window): myEVT_VECTOR_CHANGED = wx.NewEventType() 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): self._label = str(kwargs.pop('label', '')) @@ -35,13 +37,12 @@ class VectorPicker(wx.Window): self._offset = float(kwargs.pop('offset', 0)) self._size = max(0, float(kwargs.pop('size', 50))) 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._angle = 0 self._length = 1 self._left = 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.Bind(wx.EVT_PAINT, self.OnPaint) 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 dc.DrawText(labelText, labelTextX, labelTextY) - lengthText = '%d%%' % (100 * self._length,) - lengthTextW, lengthTextH = dc.GetTextExtent(lengthText) - lengthTextX = radius + 2 + x / 2 - y / 3 - lengthTextW / 2 - lengthTextY = radius + 2 - y / 2 - x / 3 - lengthTextH / 2 - dc.DrawText(lengthText, lengthTextX, lengthTextY) + if self._lengthLabel: + lengthText = '%d%%' % (100 * self._length,) + lengthTextW, lengthTextH = dc.GetTextExtent(lengthText) + lengthTextX = radius + 2 + x / 2 - y / 3 - lengthTextW / 2 + lengthTextY = radius + 2 - y / 2 - x / 3 - lengthTextH / 2 + dc.DrawText(lengthText, lengthTextX, lengthTextY) angleText = '%d\u00B0' % (self._angle,) angleTextW, angleTextH = dc.GetTextExtent(angleText) @@ -209,3 +211,17 @@ class VectorPicker(wx.Window): changeEvent._angle = self._angle changeEvent._length = self._length 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