Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@sugarlabs.org>2009-01-20 19:50:03 (GMT)
committer Tomeu Vizoso <tomeu@sugarlabs.org>2009-01-20 19:50:03 (GMT)
commit3cfa76ea9a229eb180410c7bd5359a1705c64b75 (patch)
tree5903c99be367ceb92f93bc834ee646d2d2afe033
parenta4848bf6ea047b90cbd16712b2b3cb6c9747365c (diff)
Add selection of thoughts
-rw-r--r--canvas.py1
-rw-r--r--view.py77
2 files changed, 58 insertions, 20 deletions
diff --git a/canvas.py b/canvas.py
index d137f78..19f9ae0 100644
--- a/canvas.py
+++ b/canvas.py
@@ -134,6 +134,7 @@ class Canvas(gtk.DrawingArea):
self.dragging_finished.send(self, position=(event.x, event.y),
element=self._last_clicked_element)
self._cleanup_drag()
+ return True
return False
diff --git a/view.py b/view.py
index c4a1a3f..20ebdac 100644
--- a/view.py
+++ b/view.py
@@ -33,12 +33,15 @@ class MindMapView(Canvas):
self._model = None
self._row_deleted_sid = None
self._row_inserted_sid = None
+ self._selected_thought = None
Canvas.__init__(self)
self.dragging_started.connect(self.__dragging_started_cb)
self.dragging_finished.connect(self.__dragging_finished_cb)
+ self.connect('button-release-event', self.__button_release_event_cb)
+
if model is not None:
self.model = model
@@ -61,6 +64,20 @@ class MindMapView(Canvas):
thought.model.x = x
thought.model.y = y
+ def __button_release_event_cb(self, widget, event):
+ logging.debug('button_release_event_cb')
+
+ if self._selected_thought is not None:
+ self._selected_thought.selected = False
+ self._selected_thought = None
+
+ thought = self.get_element_at(event.x, event.y)
+ if thought is not None:
+ thought.selected = True
+ self._selected_thought = thought
+
+ return True
+
def set_model(self, new_model):
logging.debug('set_model %r' % new_model)
if self._model == new_model:
@@ -109,7 +126,8 @@ class MindMapView(Canvas):
class ThoughtView(CanvasElement):
- _PADDING = style.zoom(10)
+ _PADDING = style.zoom(15)
+ _LINE_WIDTH = style.zoom(2)
def __init__(self, model):
CanvasElement.__init__(self)
@@ -118,6 +136,7 @@ class ThoughtView(CanvasElement):
self._last_width = -1
self._last_height = -1
self._dragging = False
+ self._selected = False
self.model.changed.connect(self.__model_changed_cb)
@@ -131,6 +150,13 @@ class ThoughtView(CanvasElement):
dragging = property(get_dragging, set_dragging)
+ def set_selected(self, selected):
+ if self._selected != selected:
+ self._selected = selected
+ self.invalidate()
+
+ selected = property(None, set_selected)
+
def _get_name_layout(self, context=None):
if context is None:
visual = gtk.gdk.screen_get_default().get_system_visual()
@@ -148,8 +174,16 @@ class ThoughtView(CanvasElement):
return layout
def draw(self, context):
-
- # draw background
+ self._draw_background(context)
+ width, height = self._draw_text(context)
+ self._draw_bounding_box(context, width, height)
+
+ self._last_width = width
+ self._last_height = height
+
+ CanvasElement.draw(self, context)
+
+ def _draw_background(self, context):
if self.model.color is None or not self.model.color:
color = style.Color('#FFFFFF')
else:
@@ -161,13 +195,11 @@ class ThoughtView(CanvasElement):
context.paint()
context.restore()
- if self._dragging:
- context.set_source_rgb(0.8, 0.8, 0.8)
- else:
- context.set_source_rgb(0, 0, 0)
-
- # draw text
+ def _draw_text(self, context):
context.save()
+
+ context.set_source_rgb(0.0, 0.0, 0.0)
+
layout = self._get_name_layout(context)
width, height = layout.get_pixel_size()
@@ -180,21 +212,26 @@ class ThoughtView(CanvasElement):
context.show_layout(layout)
context.restore()
- # draw bounding box
+ return width, height
+
+ def _draw_bounding_box(self, context, width, height):
context.save()
- context.set_line_width(4)
- context.rectangle(self.model.x, self.model.y, width, height)
- context.stroke()
- context.restore()
-
- self._last_width = width
- self._last_height = height
+ if self._selected or self._dragging:
+ context.set_source_rgb(0.6, 0.6, 0.6)
+ context.set_line_width(self._LINE_WIDTH * 2)
+ else:
+ context.set_source_rgb(0, 0, 0)
+ context.set_line_width(self._LINE_WIDTH)
- CanvasElement.draw(self, context)
+ x = self.model.x + self._LINE_WIDTH / 2
+ y = self.model.y + self._LINE_WIDTH / 2
+ rect_width = width - self._LINE_WIDTH
+ rect_height = height - self._LINE_WIDTH
- def get_size(self):
- return self._last_width, self._last_height
+ context.rectangle(x, y, rect_width, rect_height)
+ context.stroke()
+ context.restore()
def __model_changed_cb(self, **kwargs):
self.x = self.model.x