blob: 94ee68395fb07ccb3788ad4f280398a366ea2340 [file] [log] [blame]
John Park91e69732019-03-03 13:12:43 -08001#!/usr/bin/python3
2import gi
3from path_edit import *
4import numpy as np
5gi.require_version('Gtk', '3.0')
6from gi.repository import Gdk, Gtk, GLib
7import cairo
8
9class GridWindow(Gtk.Window):
10 def method_connect(self, event, cb):
11 def handler(obj, *args):
12 cb(*args)
13
John Park91e69732019-03-03 13:12:43 -080014 self.connect(event, handler)
15
16 def mouse_move(self, event):
James Kuszmaulb2b89b22020-02-29 13:27:05 -080017 # Changes event.x and event.y to be relative to the center.
John Park91e69732019-03-03 13:12:43 -080018 x = event.x - self.drawing_area.window_shape[0] / 2
19 y = self.drawing_area.window_shape[1] / 2 - event.y
20 scale = self.drawing_area.get_current_scale()
21 event.x = x / scale + self.drawing_area.center[0]
22 event.y = y / scale + self.drawing_area.center[1]
23 self.drawing_area.mouse_move(event)
24 self.queue_draw()
25
26 def button_press(self, event):
James Kuszmaulb2b89b22020-02-29 13:27:05 -080027 original_x = event.x
28 original_y = event.y
John Park91e69732019-03-03 13:12:43 -080029 x = event.x - self.drawing_area.window_shape[0] / 2
30 y = self.drawing_area.window_shape[1] / 2 - event.y
31 scale = 2 * self.drawing_area.get_current_scale()
32 event.x = x / scale + self.drawing_area.center[0]
33 event.y = y / scale + self.drawing_area.center[1]
34 self.drawing_area.do_button_press(event)
James Kuszmaulb2b89b22020-02-29 13:27:05 -080035 event.x = original_x
36 event.y = original_y
John Park91e69732019-03-03 13:12:43 -080037
38 def key_press(self, event):
John Park91e69732019-03-03 13:12:43 -080039 self.drawing_area.do_key_press(event, self.file_name_box.get_text())
40 self.queue_draw()
41
42 def configure(self, event):
John Park91e69732019-03-03 13:12:43 -080043 self.drawing_area.window_shape = (event.width, event.height)
44
45 # handle submitting a constraint
46 def on_submit_click(self, widget):
47 self.drawing_area.inConstraint = int(self.constraint_box.get_text())
48 self.drawing_area.inValue = int(self.value_box.get_text())
49
50 def __init__(self):
51 Gtk.Window.__init__(self)
52
53 self.set_default_size(1.5 * SCREEN_SIZE, SCREEN_SIZE)
54
55 flowBox = Gtk.FlowBox()
56 flowBox.set_valign(Gtk.Align.START)
57 flowBox.set_selection_mode(Gtk.SelectionMode.NONE)
58
59 flowBox.set_valign(Gtk.Align.START)
60
61 self.add(flowBox)
62
63 container = Gtk.Fixed()
64 flowBox.add(container)
65
66 self.eventBox = Gtk.EventBox()
67 container.add(self.eventBox)
68
69 self.eventBox.set_events(Gdk.EventMask.BUTTON_PRESS_MASK
70 | Gdk.EventMask.BUTTON_RELEASE_MASK
71 | Gdk.EventMask.POINTER_MOTION_MASK
72 | Gdk.EventMask.SCROLL_MASK
73 | Gdk.EventMask.KEY_PRESS_MASK)
74
75 #add the graph box
76 self.drawing_area = GTK_Widget()
77 self.eventBox.add(self.drawing_area)
78
79 self.method_connect("key-release-event", self.key_press)
80 self.method_connect("button-release-event", self.button_press)
81 self.method_connect("configure-event", self.configure)
82 self.method_connect("motion_notify_event", self.mouse_move)
83
84 self.file_name_box = Gtk.Entry()
85 self.file_name_box.set_size_request(200, 40)
86
James Kuszmaulb2b89b22020-02-29 13:27:05 -080087 self.file_name_box.set_text("output_file_name.json")
John Park91e69732019-03-03 13:12:43 -080088 self.file_name_box.set_editable(True)
89
90 container.put(self.file_name_box, 0, 0)
91
92 self.show_all()
93
94
95window = GridWindow()
96RunApp()