From 3cfa76ea9a229eb180410c7bd5359a1705c64b75 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 20 Jan 2009 19:50:03 +0000 Subject: Add selection of thoughts --- 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 -- cgit v0.9.1