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

View File

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