Add subclass to specify direction only

This commit is contained in:
DarkPhoenix
2019-06-20 15:59:59 +03:00
parent 2c1905f041
commit 28db388fa0
2 changed files with 25 additions and 9 deletions

View File

@@ -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)

View File

@@ -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