Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-05-24 23:08:41 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-05-24 23:08:41 (GMT)
commit050a79130e99b3e4ee4caf8ff52fb6f336f14f4d (patch)
treec79ff729c96ef08772d67a199c1dab1a3bb81319
parent7f8733fb9058ee7cc3ccb82fd060ce8038f9600c (diff)
resync with v27; new translationsv29
-rw-r--r--NEWS12
-rw-r--r--RulerActivity.py62
-rw-r--r--activity/activity.info2
-rw-r--r--show_rulers.py58
4 files changed, 128 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 6163247..66952c4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,15 @@
+29
+
+* New translations
+
+27
+
+* Fix issues with custom units ruler as per #4376
+
+25
+
+* Add a custom units ruler. (Aneesh Dogra)
+
23
* Remove dependency on xpdyinfo
diff --git a/RulerActivity.py b/RulerActivity.py
index 7479753..b6e4b44 100644
--- a/RulerActivity.py
+++ b/RulerActivity.py
@@ -1,6 +1,7 @@
# Copyright (c) 2007 Mitchell N. Charity
# Copyright (c) 2009-2012 Walter Bender
# Copyright (c) 2012 Flavio Danesse
+# Copyright (c) 2013 Aneesh Dogra <lionaneesh@gmail.com>
#
# This file is part of Ruler.
#
@@ -52,7 +53,8 @@ import show_grids
import show_checkers
import show_angles
-from sugar3.graphics import style
+MMPERINCH = 25.4
+
class MyCanvas(Gtk.DrawingArea):
''' Create a GTK+ widget on which we will draw using Cairo '''
@@ -167,6 +169,37 @@ class RulerActivity(activity.Activity):
tooltip=_('Checker'),
group=self.rulers)
+ self.wrapper = Gtk.ToolItem()
+ self.wrapper2 = Gtk.ToolItem()
+ self.wrapper3 = Gtk.ToolItem()
+ self.custom_unit_entry = Gtk.Entry()
+ self.txt1 = Gtk.Label()
+ self.txt1.set_text(_('1 custom unit equals '))
+ self.txt2 = Gtk.Label()
+ # TRANS: mm is for Milli Meters
+ self.txt2.set_text(_(' mm.'))
+ self.wrapper.add(self.txt1)
+ self.wrapper2.add(self.custom_unit_entry)
+ self.wrapper3.add(self.txt2)
+ self.wrapper.show_all()
+ self.wrapper2.show_all()
+ self.wrapper3.show_all()
+ separator = Gtk.SeparatorToolItem()
+ separator.props.draw = True
+ separator.set_expand(False)
+ separator.show()
+ toolbar_box.toolbar.insert(separator, -1)
+ custom_units_toolbox = ToolbarBox()
+ custom_units_toolbox.toolbar.insert(self.wrapper, -1)
+ custom_units_toolbox.toolbar.insert(self.wrapper2, -1)
+ custom_units_toolbox.toolbar.insert(self.wrapper3, -1)
+ custom_units_toolbox.show()
+ self.custom_units_button = ToolbarButton(icon_name='view-source',
+ page=custom_units_toolbox)
+ toolbar_box.toolbar.insert(self.custom_units_button, -1)
+ self.custom_unit_entry.connect('changed', self.custom_unit_change_cb)
+ self.custom_units_button.show()
+
if not self.known_dpi:
separator = Gtk.SeparatorToolItem()
separator.show()
@@ -211,19 +244,42 @@ class RulerActivity(activity.Activity):
self._rulers_cb()
self.rulers.set_active(True)
+ if 'custom_unit' in self.metadata:
+ self.custom_unit_entry.set_text(str(self.metadata['custom_unit']))
+ else: # set the default
+ self.custom_unit_entry.set_text("25.4")
+
#
# Button callbacks
#
def _rulers_cb(self, button=None):
if self._ready:
+ self.custom_units_button.set_sensitive(True)
self._current = self._r
self._canvas.add_a_ruler(self._current)
_logger.debug('selecting ruler')
self.metadata['ruler'] = 'ruler'
return False
+ def custom_unit_change_cb(self, widget):
+ try:
+ new = float(widget.get_text())
+ except ValueError:
+ new = MMPERINCH
+ new = abs(new)
+ if new == 0:
+ new = MMPERINCH
+ if widget.get_text != '':
+ widget.set_text(str(new))
+ self._canvas.add_a_ruler(self._r)
+ self._r.custom_unit_in_mm = new
+ self._r.draw_custom_ruler(self._r.custom_unit_in_mm)
+ self.metadata['custom_unit'] = new
+
def _grids_cb(self, button=None):
if self._ready:
+ self.custom_units_button.set_sensitive(False)
+ self.custom_units_button.set_expanded(False)
if self._grids_mode == "cm":
self._current = self._gcm
if hasattr(self, 'grids'):
@@ -241,6 +297,8 @@ class RulerActivity(activity.Activity):
def _angles_cb(self, button=None):
if self._ready:
+ self.custom_units_button.set_sensitive(False)
+ self.custom_units_button.set_expanded(False)
if self._angles_mode == "90":
self._current = self._a90
if hasattr(self, 'angles'):
@@ -258,6 +316,8 @@ class RulerActivity(activity.Activity):
def _checker_cb(self, button=None):
if self._ready:
+ self.custom_units_button.set_sensitive(False)
+ self.custom_units_button.set_expanded(False)
self._current = self._c
self._canvas.add_a_ruler(self._current)
_logger.debug('selecting checker')
diff --git a/activity/activity.info b/activity/activity.info
index 23ff3ac..5204805 100644
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,7 +3,7 @@ name = Ruler
bundle_id = com.laptop.Ruler
exec = sugar-activity RulerActivity.RulerActivity
icon = activity-ruler
-activity_version = 23
+activity_version = 29
show_launcher = yes
license = GPLv3+
summary = scaled images of a ruler, protractor, and a checker board
diff --git a/show_rulers.py b/show_rulers.py
index a4d5857..70cd06b 100644
--- a/show_rulers.py
+++ b/show_rulers.py
@@ -1,5 +1,6 @@
# Copyright 2007 Mitchell N. Charity
# Copyright 2009 Walter Bender
+# Copyright 2013 Aneesh Dogra <lionaneesh@gmail.com>
#
# This file is part of Ruler.
#
@@ -29,9 +30,15 @@ class ScreenOfRulers():
self.font_bold = font_bold
self.w = w
self.h = h
+ self.custom_unit_in_mm = 24.5 # precise upto 2 decimal places
self.hw = get_hardware()
+ self.offset_of_xo_side_from_screen = 0
+ self.dpi = 0
+ self.c = None
def draw(self, c, dpi):
+ self.c = c
+ self.dpi = dpi
set_background_color(c, self.w, self.h)
nw, nh = dimensions_mm(dpi, self.w, self.h)
@@ -42,8 +49,8 @@ class ScreenOfRulers():
# Only calculate offsets if on an OLPC XO-1, 1.5, 1.75
# Not applicable to XO 3.0
if self.hw[0:2] == 'xo' and dpi in [200, 201]:
- offset_of_xo_side_from_screen = mm(dpi, -38.5)
- c.move_to(offset_of_xo_side_from_screen, mm(dpi, 65))
+ self.offset_of_xo_side_from_screen = mm(dpi, -38.5)
+ c.move_to(self.offset_of_xo_side_from_screen, mm(dpi, 65))
self.draw_cm_ruler(c, dpi, 180)
c.save()
@@ -55,11 +62,13 @@ class ScreenOfRulers():
offset_of_molding_from_screen = mm(dpi, -0.4)
c.move_to(offset_of_molding_from_screen, mm(dpi, 95))
self.draw_cm_ruler(c, dpi, 150)
+ self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 10 * 10))
else:
- offset_of_xo_side_from_screen = mm(dpi, 0)
- c.move_to(offset_of_xo_side_from_screen, mm(dpi, 65))
+ self.offset_of_xo_side_from_screen = mm(dpi, 0)
+ c.move_to(self.offset_of_xo_side_from_screen, mm(dpi, 65))
self.draw_cm_ruler(c, dpi, int(nw / 10 * 10))
+ self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 10 * 10))
def draw_ruler_pair(self, c, dpi, y):
c.move_to(mm(dpi, 10), y)
@@ -89,6 +98,47 @@ class ScreenOfRulers():
c.restore()
+ # units_per_mm is precise upto 2 decimal places
+ def draw_custom_ruler(self, units_per_mm, width=130):
+ if not self.c:
+ return
+
+ self.c.set_source_rgb(255, 255, 255)
+ self.c.rectangle(0, mm(self.dpi, 85),
+ width, mm(self.dpi, 85) + 10)
+ self.c.fill()
+ self.c.set_source_rgb(0, 0, 0)
+
+ self.c.move_to(self.offset_of_xo_side_from_screen, mm(self.dpi, 85))
+ self.c.save()
+ self.c.set_line_cap(cairo.LINE_CAP_SQUARE)
+ self.c.translate(*self.c.get_current_point())
+
+ self.c.set_line_width(5)
+ self.c.move_to(0, 0)
+ self.c.line_to(mm(self.dpi, width), 0)
+ for x in [mm(self.dpi, xm / 100.) for xm in xrange(
+ 0, (width + 1) * 100, int(units_per_mm * 100))]:
+ self.c.move_to(x, 0)
+ self.c.rel_line_to(0, mm(self.dpi, -3))
+ self.c.stroke()
+ pt_list = [x / int(units_per_mm * 100) for x in \
+ range(0, (width + 1) * 100, int(units_per_mm * 100))]
+ coord_list = [mm(self.dpi, xm / 100) for xm in range(
+ 0, (width + 1) * 100, int(units_per_mm * 100))]
+
+ if units_per_mm > 7: # Avoid overlapping labels
+ for a in range(0, len(coord_list)):
+ xm = pt_list[a]
+ x = coord_list[a]
+ n = xm
+ self.c.move_to(x, mm(self.dpi, -4))
+ write(self.c, "%d" % n, self.font_bold, mm(self.dpi, 2.5),
+ centered=True)
+
+ self.c.restore()
+
+
def draw_cm_ruler(self, c, dpi, width=130):
c.save()
c.set_line_cap(cairo.LINE_CAP_SQUARE)