Add a segment selector to ArmUI
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: Ib7a40c1cb20a2fef2be886e5a188be2ca50e3915
diff --git a/y2023/control_loops/python/graph_edit.py b/y2023/control_loops/python/graph_edit.py
index f18a0b6..82961fb 100644
--- a/y2023/control_loops/python/graph_edit.py
+++ b/y2023/control_loops/python/graph_edit.py
@@ -192,10 +192,45 @@
DRIVER_CAM_HEIGHT = DRIVER_CAM_POINTS[-1][1] - DRIVER_CAM_POINTS[0][1]
+class SegmentSelector(basic_window.BaseWindow):
+
+ def __init__(self, segments):
+ super(SegmentSelector, self).__init__()
+
+ self.window = Gtk.Window()
+ self.window.set_title("Segment Selector")
+
+ self.segments = segments
+
+ self.segment_store = Gtk.ListStore(int, str)
+
+ for i, segment in enumerate(segments):
+ self.segment_store.append([i, segment.name])
+
+ self.segment_box = Gtk.ComboBox.new_with_model_and_entry(
+ self.segment_store)
+ self.segment_box.connect("changed", self.on_combo_changed)
+ self.segment_box.set_entry_text_column(1)
+
+ self.current_path_index = None
+
+ self.window.add(self.segment_box)
+ self.window.show_all()
+
+ def on_combo_changed(self, combo):
+ iter = combo.get_active_iter()
+
+ if iter is not None:
+ model = combo.get_model()
+ id, name = model[iter][:2]
+ print("Selected: ID=%d, name=%s" % (id, name))
+ self.current_path_index = id
+
+
# Create a GTK+ widget on which we will draw using Cairo
class ArmUi(basic_window.BaseWindow):
- def __init__(self):
+ def __init__(self, segments):
super(ArmUi, self).__init__()
self.window = Gtk.Window()
@@ -221,7 +256,7 @@
self.circular_index_select = 1
# Extra stuff for drawing lines.
- self.segments = []
+ self.segments = segments
self.prev_segment_pt = None
self.now_segment_pt = None
self.spline_edit = 0
@@ -247,6 +282,9 @@
[DRIVER_CAM_X, DRIVER_CAM_Y],
DRIVER_CAM_WIDTH, DRIVER_CAM_HEIGHT)
+ self.segment_selector = SegmentSelector(self.segments)
+ self.segment_selector.show()
+
def _do_button_press_internal(self, event):
o_x = event.x
o_y = event.y
@@ -295,6 +333,8 @@
# Handle the expose-event by drawing
def handle_draw(self, cr):
# use "with px(cr): blah;" to transform to pixel coordinates.
+ if self.segment_selector.current_path_index is not None:
+ self.index = self.segment_selector.current_path_index
# Fill the background color of the window with grey
set_color(cr, palette["GREY"])
@@ -563,8 +603,7 @@
self.redraw()
-arm_ui = ArmUi()
-arm_ui.segments = graph_paths.segments
+arm_ui = ArmUi(graph_paths.segments)
print('Starting with segment: ', arm_ui.segments[arm_ui.index].name)
arm_ui.segments[arm_ui.index].Print(graph_paths.points)
basic_window.RunApp()