Add drag and drop to the Spline UI
Move event handling for the field widget into Field
Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Id566b7a549fb568a089f50eae6d5d2b483a615ee
diff --git a/frc971/control_loops/python/path_edit.py b/frc971/control_loops/python/path_edit.py
index 3386bc6..c639379 100755
--- a/frc971/control_loops/python/path_edit.py
+++ b/frc971/control_loops/python/path_edit.py
@@ -223,8 +223,6 @@
draw_px_cross(cr, self.mousex, self.mousey, 10)
cr.restore()
- if self.points.getLibsplines():
- self.graph.recalculate_graph(self.points)
print("spent {:.2f} ms drawing the field widget".format(1000 * (time.perf_counter() - start_time)))
@@ -249,18 +247,21 @@
def mouse_move(self, event):
old_x = self.mousex
old_y = self.mousey
- self.mousex = event.x
- self.mousey = event.y
+ self.mousex, self.mousey = event.x, event.y
dif_x = self.mousex - old_x
dif_y = self.mousey - old_y
difs = np.array([pxToM(dif_x), pxToM(dif_y)])
- if self.mode == Mode.kEditing:
+ if self.mode == Mode.kEditing and self.spline_edit != -1:
self.points.updates_for_mouse_move(self.index_of_edit,
self.spline_edit,
pxToM(self.mousex),
pxToM(self.mousey), difs)
+ self.points.update_lib_spline()
+ self.graph.recalculate_graph(self.points)
+ self.queue_draw()
+
def export_json(self, file_name):
self.path_to_export = os.path.join(
self.module_path, # position of the python
@@ -310,7 +311,7 @@
print("SPLINES LOADED")
self.mode = Mode.kEditing
- def key_press(self, event, file_name):
+ def key_press(self, event):
keyval = Gdk.keyval_to_lower(event.keyval)
# TODO: This should be a button
@@ -325,10 +326,10 @@
self.points.getSplines()[len(self.points.getSplines()) - 1][5],
self.points.getSplines()[len(self.points.getSplines()) - 1][4],
self.points.getSplines()[len(self.points.getSplines()) - 1][3])
+ self.queue_draw()
def button_press(self, event):
- self.mousex = event.x
- self.mousey = event.y
+ self.mousex, self.mousey = event.x, event.y
if self.mode == Mode.kPlacing:
if self.points.add_point(
@@ -337,15 +338,7 @@
elif self.mode == Mode.kEditing:
# Now after index_of_edit is not -1, the point is selected, so
# user can click for new point
- if self.index_of_edit > -1 and self.held_x != self.mousex:
- self.points.setSplines(self.spline_edit, self.index_of_edit,
- pxToM(self.mousex), pxToM(self.mousey))
-
- self.points.splineExtrapolate(self.spline_edit)
-
- self.index_of_edit = -1
- self.spline_edit = -1
- else:
+ if self.index_of_edit == -1:
# Get clicked point
# Find nearest
# Move nearest to clicked
@@ -367,3 +360,21 @@
self.index_of_edit = index_of_closest
self.spline_edit = index_splines
self.held_x = self.mousex
+ self.queue_draw()
+
+ def button_release(self, event):
+ self.mousex, self.mousey = event.x, event.y
+ if self.mode == Mode.kEditing:
+ if self.index_of_edit > -1 and self.held_x != self.mousex:
+
+ self.points.setSplines(self.spline_edit, self.index_of_edit,
+ pxToM(self.mousex),
+ pxToM(self.mousey))
+
+ self.points.splineExtrapolate(self.spline_edit)
+
+ self.points.update_lib_spline()
+ self.graph.recalculate_graph(self.points)
+
+ self.index_of_edit = -1
+ self.spline_edit = -1