replaced dict[rot] storage of areas and lines with a single list for the current...
authorJosh Blum <josh@joshknows.com>
Sat, 5 Sep 2009 09:01:41 +0000 (02:01 -0700)
committerJosh Blum <josh@joshknows.com>
Sat, 5 Sep 2009 09:01:41 +0000 (02:01 -0700)
grc/gui/Element.py
grc/gui/Port.py

index ecf1de1ca30e2a681901ee93089c41dc3b0d045d..bda1870598be03901bddc694b52adb5025a89932 100644 (file)
@@ -70,14 +70,14 @@ class Element(object):
                @param bg_color the color for the inside of the rectangle
                """
                X,Y = self.get_coordinate()
-               for (rX,rY),(W,H) in self.areas_dict[self.get_rotation()]:
+               for (rX,rY),(W,H) in self._areas_list:
                        aX = X + rX
                        aY = Y + rY
                        gc.set_foreground(bg_color)
                        window.draw_rectangle(gc, True, aX, aY, W, H)
                        gc.set_foreground(border_color)
                        window.draw_rectangle(gc, False, aX, aY, W, H)
-               for (x1, y1),(x2, y2) in self.lines_dict[self.get_rotation()]:
+               for (x1, y1),(x2, y2) in self._lines_list:
                        gc.set_foreground(border_color)
                        window.draw_line(gc, X+x1, Y+y1, X+x2, Y+y2)
 
@@ -90,8 +90,8 @@ class Element(object):
 
        def clear(self):
                """Empty the lines and areas."""
-               self.areas_dict = dict((rotation, list()) for rotation in POSSIBLE_ROTATIONS)
-               self.lines_dict = dict((rotation, list()) for rotation in POSSIBLE_ROTATIONS)
+               self._areas_list = list()
+               self._lines_list = list()
 
        def set_coordinate(self, coor):
                """
@@ -136,7 +136,7 @@ class Element(object):
                X, Y = self.get_coordinate()
                self.set_coordinate((X+deltaX, Y+deltaY))
 
-       def add_area(self, rel_coor, area, rotation=None):
+       def add_area(self, rel_coor, area):
                """
                Add an area to the area list.
                An area is actually a coordinate relative to the main coordinate
@@ -144,25 +144,21 @@ class Element(object):
                A positive width is to the right of the coordinate.
                A positive height is above the coordinate.
                The area is associated with a rotation.
-               If rotation is not specified, the element's current rotation is used.
                @param rel_coor (x,y) offset from this element's coordinate
                @param area (width,height) tuple
-               @param rotation rotation in degrees
                """
-               self.areas_dict[rotation or self.get_rotation()].append((rel_coor, area))
+               self._areas_list.append((rel_coor, area))
 
-       def add_line(self, rel_coor1, rel_coor2, rotation=None):
+       def add_line(self, rel_coor1, rel_coor2):
                """
                Add a line to the line list.
                A line is defined by 2 relative coordinates.
                Lines must be horizontal or vertical.
                The line is associated with a rotation.
-               If rotation is not specified, the element's current rotation is used.
                @param rel_coor1 relative (x1,y1) tuple
                @param rel_coor2 relative (x2,y2) tuple
-               @param rotation rotation in degrees
                """
-               self.lines_dict[rotation or self.get_rotation()].append((rel_coor1, rel_coor2))
+               self._lines_list.append((rel_coor1, rel_coor2))
 
        def what_is_selected(self, coor, coor_m=None):
                """
@@ -183,24 +179,24 @@ class Element(object):
                if coor_m:
                        x_m, y_m = [a-b for a,b in zip(coor_m, self.get_coordinate())]
                        #handle rectangular areas
-                       for (x1,y1), (w,h) in self.areas_dict[self.get_rotation()]:
+                       for (x1,y1), (w,h) in self._areas_list:
                                if in_between(x1, x, x_m) and in_between(y1, y, y_m) or \
                                        in_between(x1+w, x, x_m) and in_between(y1, y, y_m) or \
                                        in_between(x1, x, x_m) and in_between(y1+h, y, y_m) or \
                                        in_between(x1+w, x, x_m) and in_between(y1+h, y, y_m):
                                        return self
                        #handle horizontal or vertical lines
-                       for (x1, y1), (x2, y2) in self.lines_dict[self.get_rotation()]:
+                       for (x1, y1), (x2, y2) in self._lines_list:
                                if in_between(x1, x, x_m) and in_between(y1, y, y_m) or \
                                        in_between(x2, x, x_m) and in_between(y2, y, y_m):
                                        return self
                        return None
                else:
                        #handle rectangular areas
-                       for (x1,y1), (w,h) in self.areas_dict[self.get_rotation()]:
+                       for (x1,y1), (w,h) in self._areas_list:
                                if in_between(x, x1, x1+w) and in_between(y, y1, y1+h): return self
                        #handle horizontal or vertical lines
-                       for (x1, y1), (x2, y2) in self.lines_dict[self.get_rotation()]:
+                       for (x1, y1), (x2, y2) in self._lines_list:
                                if x1 == x2: x1, x2 = x1-LINE_SELECT_SENSITIVITY, x2+LINE_SELECT_SENSITIVITY
                                if y1 == y2: y1, y2 = y1-LINE_SELECT_SENSITIVITY, y2+LINE_SELECT_SENSITIVITY
                                if in_between(x, x1, x2) and in_between(y, y1, y2): return self
index 9c8d87a16a3085c1ce77ba9299b731590c71d1ef..f8bfefee69aa0d8ffc481d35955731690ad767f0 100644 (file)
@@ -114,7 +114,7 @@ class Port(Element):
                        border_color=self.is_highlighted() and Colors.HIGHLIGHT_COLOR or Colors.BORDER_COLOR,
                )
                X,Y = self.get_coordinate()
-               (x,y),(w,h) = self.areas_dict[self.get_rotation()][0] #use the first area's sizes to place the labels
+               (x,y),(w,h) = self._areas_list[0] #use the first area's sizes to place the labels
                if self.is_horizontal():
                        window.draw_image(gc, self.horizontal_label, 0, 0, x+X+(self.W-self.w)/2, y+Y+(self.H-self.h)/2, -1, -1)
                elif self.is_vertical():