Changeset 1334
- Timestamp:
- 06/05/07 23:02:02 (1 year ago)
- Files:
-
- gaphor/trunk/gaphor/ui/diagrampainters.py (added)
- gaphor/trunk/gaphor/ui/diagramtools.py (modified) (4 diffs)
- gaphor/trunk/gaphor/ui/diagramview.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
gaphor/trunk/gaphor/ui/diagramtools.py
r1310 r1334 12 12 13 13 import gaphas 14 from gaphas.geometry import distance_point_point 14 from gaphas.geometry import distance_point_point, distance_point_point_fast, \ 15 distance_line_point 16 from gaphas.item import Line 15 17 from gaphas.tool import Tool, HandleTool, ItemTool, ToolChain 16 18 … … 26 28 Handle Tool (acts on item handles) that uses the IConnect protocol 27 29 to connect items to one-another. 30 31 It also adds handles to lines when a line is grabbed on the middle of 32 a line segment (points are drawn by the LineSegmentPainter). 28 33 """ 29 34 … … 102 107 adapter.disconnect_constraints(handle) 103 108 109 def on_button_press(self, context, event): 110 """ 111 In addition to the normal behavior, the button press event creates 112 new handles if it is activated on the middle of a line segment. 113 """ 114 if super(ConnectHandleTool, self).on_button_press(context, event): 115 return True 116 117 view = context.view 118 item = view.hovered_item 119 if item and item is view.focused_item and isinstance(item, Line): 120 h = item.handles() 121 x, y = context.view.transform_point_c2i(item, event.x, event.y) 122 for h1, h2 in zip(h[:-1], h[1:]): 123 cx = (h1.x + h2.x) / 2 124 cy = (h1.y + h2.y) / 2 125 if distance_point_point_fast((x,y), (cx, cy)) <= 4: 126 segment = h.index(h1) 127 item.split_segment(segment) 128 self.grab_handle(item, item.handles()[segment + 1]) 129 context.grab() 130 self._grabbed = True 131 return True 132 133 def on_button_release(self, context, event): 134 grabbed_handle = self._grabbed_handle 135 grabbed_item = self._grabbed_item 136 if super(ConnectHandleTool, self).on_button_release(context, event): 137 if grabbed_handle and grabbed_item: 138 h = grabbed_item.handles() 139 if h[0] is grabbed_handle or h[-1] is grabbed_handle: 140 return True 141 segment = h.index(grabbed_handle) 142 before = h[segment - 1] 143 after = h[segment + 1] 144 d, p = distance_line_point(before.pos, after.pos, grabbed_handle.pos) 145 if d < 2: 146 grabbed_item.merge_segment(segment) 147 return True 104 148 105 149 class PopupItemTool(ItemTool): … … 291 335 chain.append(HoverTool()) 292 336 chain.append(ConnectHandleTool()) 293 chain.append( PopupItemTool())337 chain.append(ItemTool()) 294 338 chain.append(TextEditTool()) 295 339 chain.append(RubberbandTool()) gaphor/trunk/gaphor/ui/diagramview.py
r1243 r1334 4 4 import gtk 5 5 import gaphas 6 from diagrampainters import DefaultPainter 7 6 8 7 9 class DiagramView(gaphas.GtkView): … … 23 25 self.diagram = diagram 24 26 self.canvas = diagram.canvas 27 self.painter = DefaultPainter() 25 28 26 29 # Drop
