| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
import gobject |
|---|
| 4 |
import diacanvas |
|---|
| 5 |
import gaphor.UML as UML |
|---|
| 6 |
|
|---|
| 7 |
class PlacementTool(diacanvas.PlacementTool): |
|---|
| 8 |
|
|---|
| 9 |
def __init__(self, item_factory, action_id, **properties): |
|---|
| 10 |
"""item_factory is a callable. It is used to create a CanvasItem |
|---|
| 11 |
that is displayed on the diagram. |
|---|
| 12 |
""" |
|---|
| 13 |
diacanvas.PlacementTool.__init__(self, None, **properties) |
|---|
| 14 |
self.item_factory = item_factory |
|---|
| 15 |
self.action_id = action_id |
|---|
| 16 |
self.is_released = False |
|---|
| 17 |
|
|---|
| 18 |
def _create_item(self, view, event): |
|---|
| 19 |
if event.button == 3: |
|---|
| 20 |
return None |
|---|
| 21 |
|
|---|
| 22 |
item = None |
|---|
| 23 |
|
|---|
| 24 |
try: |
|---|
| 25 |
item = self.item_factory() |
|---|
| 26 |
except Exception, e: |
|---|
| 27 |
log.error('Error while creating item: %s' % e) |
|---|
| 28 |
else: |
|---|
| 29 |
if self.properties and len(self.properties) > 0: |
|---|
| 30 |
try: |
|---|
| 31 |
for (k, v) in self.properties.items(): |
|---|
| 32 |
item.set_property(k, v) |
|---|
| 33 |
except TypeError, e: |
|---|
| 34 |
log.error('PlacementTool: could not set property %s' % k, e) |
|---|
| 35 |
|
|---|
| 36 |
return item |
|---|
| 37 |
|
|---|
| 38 |
def _grab_handle(self, view, event, item): |
|---|
| 39 |
if not self.is_released: |
|---|
| 40 |
diacanvas.PlacementTool._grab_handle(self, view, event, item) |
|---|
| 41 |
|
|---|
| 42 |
def do_button_press_event(self, view, event): |
|---|
| 43 |
view.unselect_all() |
|---|
| 44 |
|
|---|
| 45 |
view.set_tool(None) |
|---|
| 46 |
return diacanvas.PlacementTool.do_button_press_event(self, view, event) |
|---|
| 47 |
|
|---|
| 48 |
def do_button_release_event(self, view, event): |
|---|
| 49 |
view.set_tool(None) |
|---|
| 50 |
self.is_released = True |
|---|
| 51 |
|
|---|
| 52 |
|
|---|
| 53 |
return False |
|---|
| 54 |
|
|---|
| 55 |
|
|---|
| 56 |
|
|---|