Kaynağa Gözat

Fixed interface a lot

Yentl Van Tendeloo 8 yıl önce
ebeveyn
işleme
a5655f0285
1 değiştirilmiş dosya ile 23 ekleme ve 26 silme
  1. 23 26
      interface/graphical/main.py

+ 23 - 26
interface/graphical/main.py

@@ -18,6 +18,9 @@ MAX_WIDTH = 500
 MAX_HEIGHT = 500
 MM_RENDERED = "MM_rendered_graphical"
 
+def rendered_formula(model_name, mapper_name):
+    return "__RENDERED_%s__%s" % (model_name, mapper_name)
+
 init()
 login("admin", "admin")
 
@@ -85,7 +88,7 @@ class Window(object):
         # Change coordinates of all enclosed elements!
         # elem is an AS id of the group
         m_x, m_y = coords
-        o_x, o_y = self.original_coords
+        o_x, o_y = self.previous_coords
         d_x = m_x - o_x
         d_y = m_y - o_y
 
@@ -97,28 +100,36 @@ class Window(object):
             elif len(obj_coords) == 4:
                 c_x, c_y, c_x2, c_y2 = obj_coords
                 self.canvas.coords(tkinter_obj, (c_x + d_x, c_y + d_y, c_x2 + d_x, c_y2 + d_y))
-        self.original_coords = coords
 
     def left_clicked(self, evt):
         # Left click means we select an element for dragging
         x, y = evt.x, evt.y
-        self.current_element = self.find_AS(x, y)
         self.original_coords = x, y
-        print("Left clicked on group with : " + str(self.current_element))
+        self.previous_coords = x, y
+        self.current_element = self.find_AS(x, y)
 
     def left_drag(self, evt):
         # Left drag means we are dragging something, but only if something is selected
-        x, y = evt.x, evt.y
         if self.current_element is not None:
+            x, y = evt.x, evt.y
             self.move_group(self.current_element, (x, y))
+            self.previous_coords = x, y
 
     def left_released(self, evt):
         # Left click means we select an element for dragging
-        x, y = evt.x, evt.y
         if self.current_element is not None:
+            x, y = evt.x, evt.y
+            d_x = x - self.original_coords[0]
+            d_y = y - self.original_coords[1]
+
             self.move_group(self.current_element, (x, y))
+            attrs = read_attrs(rendered_formula(self.selected_model.get(), self.selected_mapper.get()), self.AS_to_CS[self.current_element])
+
+            print("Shift: " + str((d_x, d_y)))
+
             # Send new values to Modelverse!
-            # TODO
+            attr_assign(rendered_formula(self.selected_model.get(), self.selected_mapper.get()), self.AS_to_CS[self.current_element], "x", attrs["x"] + d_x)
+            attr_assign(rendered_formula(self.selected_model.get(), self.selected_mapper.get()), self.AS_to_CS[self.current_element], "y", attrs["y"] + d_y)
 
     def middle_clicked(self, evt):
         # Middle clicked means we are modifying attributes of something
@@ -126,7 +137,7 @@ class Window(object):
 
         # Read available attrs and their values
         as_id = self.find_AS(x, y)
-        attrs = read_attrs(as_id)
+        attrs = read_attrs(self.selected_model.get(), as_id)
         attrs = {k: json.dumps(attrs[k]) for k in attrs}
         print("Got attrs: " + str(attrs))
 
@@ -140,9 +151,9 @@ class Window(object):
             for k, v in d.result.items():
                 v = json.loads(v)
                 if v is None:
-                    attr_delete(as_id, k)
+                    attr_delete(self.selected_model.get(), as_id, k)
                 else:
-                    attr_assign(as_id, k, v)
+                    attr_assign(self.selected_model.get(), as_id, k, v)
 
     def right_clicked(self, evt):
         # Right clicked means we are creating something
@@ -152,14 +163,11 @@ class Window(object):
         pass
 
     def visualize(self, model):
-        print("Visualizing model: " + str(model))
         cache = {}
         hierarchy = {}
         parent = {}
 
-        # First remove all previous elements in the canvas!
-        for elem in self.canvas.find_all():
-            self.canvas.destroy(elem)
+        self.canvas.delete("all")
 
         self.CS_to_AS = {}
         self.AS_to_CS = {}
@@ -167,7 +175,6 @@ class Window(object):
         self.TK_to_CS = {}
 
         def findXY(element_id):
-            print(cache[element_id])
             x = cache[element_id]["x"]
             y = cache[element_id]["y"]
 
@@ -217,7 +224,6 @@ class Window(object):
                 height = element["height"]
                 lineWidth = element["lineWidth"]
                 lineColour = element["lineColour"]
-                print("Coordinates: " + str((x, y, x+width, y+height)))
                 tkinter_elem = self.canvas.create_rectangle(x, y, x+width, y+height, fill=fillColour, outline=lineColour)
             elif t == "Ellipse":
                 fillColour = element["fillColour"]
@@ -257,11 +263,8 @@ class Window(object):
         # Get instance model's type first, as transformations are defined on the type
         models = dict(model_list())
         type_model = models[instance_model]
-        print("Found type model: " + type_model)
-        print("Found MM_Rendered model: " + MM_RENDERED)
 
         mappers = transformation_between(type_model, MM_RENDERED)
-        print("Supported: " + str(mappers))
         return mappers
 
     def create_element(self, t):
@@ -277,23 +280,18 @@ class Window(object):
         rendered = model_render(self.selected_model.get(), self.selected_mapper.get())
 
         #TODO visualize rendered model
-        print("Rendering model: " + rendered)
         import json
         self.visualize(json.loads(rendered))
-        model_modify(self.selected_model.get())
 
     def open_model(self):
         try:
             model_exit()
         except InvalidMode:
             pass
-        print("Opening model: " + self.selected_model.get())
         available_mappers = self.read_available_mappers(self.selected_model.get())
         self.reset_optionmenu(self.mapper_options, available_mappers, self.selected_mapper)
 
-        model_modify(self.selected_model.get())
-
-        available_types = [i[0] for i in types_full() if i[1] == "Class"]
+        available_types = [i[0] for i in types_full(self.selected_model.get()) if i[1] == "Class"]
 
         for button in self.mm_buttons:
             button.destroy()
@@ -311,7 +309,6 @@ class Window(object):
         d = PromptDialog(root, ["Name:"])
         if d.result is not None:
             name = str(d.result["Name:"])
-            print("Creating new model named " + name)
             model_add(name, self.selected_model.get())
             self.reset_optionmenu(self.available_models, model_list())
             self.selected_model.set(name)