Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/gridcreate.py
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2012-10-24 15:22:57 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2012-10-24 15:22:57 (GMT)
commit5a7acd6fdf1489a999b373f4eff5667c5c9dcbff (patch)
treed0edb1ea98f69cf1c5de19d03a40587a8760636d /gridcreate.py
parentb9a67e19b24cf4e067bb93a2eb2a4c07fc151ad5 (diff)
Fix table creation - SL #3870
This patch replace the abiword widget used for one with bigger cells to enable the use with touch. Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
Diffstat (limited to 'gridcreate.py')
-rw-r--r--gridcreate.py106
1 files changed, 106 insertions, 0 deletions
diff --git a/gridcreate.py b/gridcreate.py
new file mode 100644
index 0000000..9115566
--- /dev/null
+++ b/gridcreate.py
@@ -0,0 +1,106 @@
+#!/usr/bin/python
+
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
+
+class GridCreateWidget(Gtk.DrawingArea):
+
+ __gsignals__ = {
+ 'create-table': (
+ GObject.SignalFlags.RUN_FIRST, None, [int, int]),
+ }
+
+ def __init__(self):
+ super(GridCreateWidget, self).__init__()
+ self._cell_width = 75 # will be style.GRID_CELL_SIZE
+ self._cell_height = int(self._cell_width / 2)
+ self._rows = 0
+ self._columns = 0
+ self._min_rows = 3
+ self._min_columns = 3
+
+ self._update_size()
+ self.connect('draw', self.__draw_cb)
+ self.set_events(Gdk.EventMask.TOUCH_MASK)
+ self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
+ self.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
+ self.add_events(Gdk.EventMask.BUTTON_MOTION_MASK)
+ self.connect('event', self.__event_cb)
+
+ def __event_cb(self, widget, event):
+ if event.type in (Gdk.EventType.TOUCH_BEGIN,
+ Gdk.EventType.TOUCH_CANCEL, Gdk.EventType.TOUCH_END,
+ Gdk.EventType.TOUCH_UPDATE, Gdk.EventType.BUTTON_PRESS,
+ Gdk.EventType.BUTTON_RELEASE, Gdk.EventType.MOTION_NOTIFY):
+ x = event.get_coords()[1]
+ y = event.get_coords()[2]
+ seq = str(event.touch.sequence)
+
+ if event.type in (Gdk.EventType.TOUCH_BEGIN,
+ Gdk.EventType.TOUCH_UPDATE, Gdk.EventType.BUTTON_PRESS,
+ Gdk.EventType.MOTION_NOTIFY):
+ # update rows and cols
+ columns = int(x / self._cell_width) + 1
+ rows = int(y / self._cell_height) + 1
+ if self._columns != columns or self._rows != rows:
+ self._columns = columns
+ self._rows = rows
+ self._update_size()
+
+ elif event.type in (Gdk.EventType.TOUCH_END,
+ Gdk.EventType.BUTTON_RELEASE):
+ self.emit('create-table', self._rows, self._columns)
+
+ def _update_size(self):
+ self._min_col = max(self._columns + 1, self._min_columns)
+ self._width = self._min_col * self._cell_width
+ self._min_rows = max(self._rows + 1, self._min_rows)
+ self._height = self._min_rows * self._cell_height
+ self.set_size_request(self._width, self._height)
+ self.queue_draw()
+
+ def __draw_cb(self, widget, cr):
+ # background
+ cr.set_source_rgb(0.0, 0.0, 0.0)
+ cr.rectangle(0, 0, self._width, self._height)
+ cr.fill()
+ # used area
+ cr.set_source_rgb(0.9, 0.9, 0.9)
+ width = self._columns * self._cell_width
+ height = self._rows * self._cell_height
+ cr.rectangle(0, 0, width, height)
+ cr.fill()
+ # draw grid
+ cr.set_source_rgb(1.0, 1.0, 1.0)
+ self._draw_grid(cr, self._min_rows, self._min_col, self._width,
+ self._height)
+ cr.set_source_rgb(0.0, 0.0, 0.0)
+ self._draw_grid(cr, self._rows, self._columns, width, height)
+
+ def _draw_grid(self, cr, rows, cols, width, height):
+ for n in range(rows + 1):
+ cr.move_to(0, n * self._cell_height)
+ cr.line_to(width, n * self._cell_height)
+ for n in range(cols + 1):
+ cr.move_to(n * self._cell_width, 0)
+ cr.line_to(n * self._cell_width, height)
+ cr.stroke()
+
+
+class GridCreateTest(Gtk.Window):
+
+ def __init__(self):
+ super(GridCreateTest, self).__init__()
+ self.connect("destroy", Gtk.main_quit)
+ grid_create = GridCreateWidget()
+ grid_create.connect('create-table', self.__create_table)
+ self.add(grid_create)
+ self.show_all()
+
+ def __create_table(self, grid_creator, rows, columns):
+ print 'rows %d columns %d' % (rows, columns)
+
+if __name__ == '__main__':
+ GridCreateTest()
+ Gtk.main()