Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAneesh Dogra <lionaneesh@gmail.com>2012-12-12 04:28:01 (GMT)
committer Aneesh Dogra <lionaneesh@gmail.com>2012-12-12 04:28:01 (GMT)
commitf1890e1916ca6f4b4f124b941c583626d76dd734 (patch)
treeb97b9c63c17d3ab5480e736f27ce032e646e807f
parent5dd214f2693f5a3b0d80256da4f3a326e0c05a88 (diff)
Add Gtk3 version of ReadEtexts Activity (sugar).
-rw-r--r--Inherit_From_sugar.activity.Activity_gtk3/MANIFEST7
-rw-r--r--Inherit_From_sugar.activity.Activity_gtk3/ReadEtextsActivity.py205
-rw-r--r--Inherit_From_sugar.activity.Activity_gtk3/activity/activity.info9
-rw-r--r--Inherit_From_sugar.activity.Activity_gtk3/activity/read-etexts.svg71
-rw-r--r--Inherit_From_sugar.activity.Activity_gtk3/po/ReadEtextsI.pot22
-rwxr-xr-xInherit_From_sugar.activity.Activity_gtk3/setup.py23
6 files changed, 337 insertions, 0 deletions
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/MANIFEST b/Inherit_From_sugar.activity.Activity_gtk3/MANIFEST
new file mode 100644
index 0000000..8cba1c5
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/MANIFEST
@@ -0,0 +1,7 @@
+
+setup.py
+ReadEtextsActivity.py
+
+activity/read-etexts.svg
+activity/activity.info
+po/ReadEtextsI.pot
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/ReadEtextsActivity.py b/Inherit_From_sugar.activity.Activity_gtk3/ReadEtextsActivity.py
new file mode 100644
index 0000000..072ef37
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/ReadEtextsActivity.py
@@ -0,0 +1,205 @@
+#
+# ReadEtextsActivity.py A very minimal ebook reading Activity for Sugar.
+# Copyright (C) 2010 James D. Simmons
+# Copyright (C) 2012 Aneesh Dogra <lionaneesh@gmail.com>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+
+import os
+import zipfile
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import Pango
+from sugar3.activity import widgets
+from sugar3.activity.widgets import StopButton
+from sugar3.activity import activity
+from sugar3.graphics import style
+
+page=0
+PAGE_SIZE = 45
+
+class ReadEtextsActivity(activity.Activity):
+ def __init__(self, handle):
+ "The entry point to the Activity"
+ global page
+ activity.Activity.__init__(self, handle)
+
+ toolbox = widgets.ActivityToolbar(self)
+ toolbox.share.props.visible = False
+
+ stop_button = StopButton(self)
+ stop_button.show()
+ toolbox.insert(stop_button, -1)
+
+ self.set_toolbar_box(toolbox)
+
+ toolbox.show()
+ self.scrolled_window = Gtk.ScrolledWindow()
+ self.scrolled_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
+
+ self.textview = Gtk.TextView()
+ self.textview.set_editable(False)
+ self.textview.set_cursor_visible(False)
+ self.textview.set_left_margin(50)
+ self.textview.connect("key_press_event", self.keypress_cb)
+
+ self.scrolled_window.add(self.textview)
+ self.set_canvas(self.scrolled_window)
+ self.textview.show()
+ self.scrolled_window.show()
+ page = 0
+ self.textview.grab_focus()
+ self.font_desc = Pango.FontDescription("sans %d" % style.zoom(10))
+ self.textview.modify_font(self.font_desc)
+
+ def keypress_cb(self, widget, event):
+ "Respond when the user presses one of the arrow keys"
+ keyname = Gdk.keyval_name(event.keyval)
+ print keyname
+ if keyname == 'plus':
+ self.font_increase()
+ return True
+ if keyname == 'minus':
+ self.font_decrease()
+ return True
+ if keyname == 'Page_Up' :
+ self.page_previous()
+ return True
+ if keyname == 'Page_Down':
+ self.page_next()
+ return True
+ if keyname == 'Up' or keyname == 'KP_Up' \
+ or keyname == 'KP_Left':
+ self.scroll_up()
+ return True
+ if keyname == 'Down' or keyname == 'KP_Down' \
+ or keyname == 'KP_Right':
+ self.scroll_down()
+ return True
+ return False
+
+ def page_previous(self):
+ global page
+ page=page-1
+ if page < 0: page=0
+ self.show_page(page)
+ v_adjustment = self.scrolled_window.get_vadjustment()
+ v_adjustment.set_value(v_adjustment.get_upper() - v_adjustment.get_page_size())
+
+ def page_next(self):
+ global page
+ page=page+1
+ if page >= len(self.page_index): page=0
+ self.show_page(page)
+ v_adjustment = self.scrolled_window.get_vadjustment()
+ v_adjustment.set_value(v_adjustment.get_lower())
+
+ def font_decrease(self):
+ font_size = self.font_desc.get_size() / 1024
+ font_size = font_size - 1
+ if font_size < 1:
+ font_size = 1
+ self.font_desc.set_size(font_size * 1024)
+ self.textview.modify_font(self.font_desc)
+
+ def font_increase(self):
+ font_size = self.font_desc.get_size() / 1024
+ font_size = font_size + 1
+ self.font_desc.set_size(font_size * 1024)
+ self.textview.modify_font(self.font_desc)
+
+ def scroll_down(self):
+ v_adjustment = self.scrolled_window.get_vadjustment()
+ if v_adjustment.get_value() == v_adjustment.get_upper() - \
+ v_adjustment.get_page_size():
+ self.page_next()
+ return
+ if v_adjustment.get_value() < v_adjustment.get_upper() - v_adjustment.get_page_size():
+ new_value = v_adjustment.get_value() + v_adjustment.step_increment
+ if new_value > v_adjustment.get_upper() - v_adjustment.get_page_size():
+ new_value = v_adjustment.get_upper() - v_adjustment.get_page_size()
+ v_adjustment.set_value(new_value)
+
+ def scroll_up(self):
+ v_adjustment = self.scrolled_window.get_vadjustment()
+ if v_adjustment.get_value() == v_adjustment.get_lower():
+ self.page_previous()
+ return
+ if v_adjustment.get_value() > v_adjustment.get_lower():
+ new_value = v_adjustment.get_value() - \
+ v_adjustment.step_increment
+ if new_value < v_adjustment.get_lower():
+ new_value = v_adjustment.get_lower()
+ v_adjustment.set_value(new_value)
+
+ def show_page(self, page_number):
+ global PAGE_SIZE, current_word
+ position = self.page_index[page_number]
+ self.etext_file.seek(position)
+ linecount = 0
+ label_text = '\n\n\n'
+ textbuffer = self.textview.get_buffer()
+ while linecount < PAGE_SIZE:
+ line = self.etext_file.readline()
+ label_text = label_text + unicode(line, 'iso-8859-1')
+ linecount = linecount + 1
+ label_text = label_text + '\n\n\n'
+ textbuffer.set_text(label_text)
+ self.textview.set_buffer(textbuffer)
+
+ def save_extracted_file(self, zipfile, filename):
+ "Extract the file to a temp directory for viewing"
+ filebytes = zipfile.read(filename)
+ outfn = self.make_new_filename(filename)
+ if (outfn == ''):
+ return False
+ f = open(os.path.join(self.get_activity_root(), 'tmp', outfn), 'w')
+ try:
+ f.write(filebytes)
+ finally:
+ f.close()
+
+ def read_file(self, filename):
+ "Read the Etext file"
+ global PAGE_SIZE
+
+ if zipfile.is_zipfile(filename):
+ self.zf = zipfile.ZipFile(filename, 'r')
+ self.book_files = self.zf.namelist()
+ self.save_extracted_file(self.zf, self.book_files[0])
+ currentFileName = os.path.join(self.get_activity_root(), 'tmp', self.book_files[0])
+ else:
+ currentFileName = filename
+
+ self.etext_file = open(currentFileName,"r")
+ self.page_index = [ 0 ]
+ linecount = 0
+ while self.etext_file:
+ line = self.etext_file.readline()
+ if not line:
+ break
+ linecount = linecount + 1
+ if linecount >= PAGE_SIZE:
+ position = self.etext_file.tell()
+ self.page_index.append(position)
+ linecount = 0
+ if filename.endswith(".zip"):
+ os.remove(currentFileName)
+ self.show_page(0)
+
+ def make_new_filename(self, filename):
+ partition_tuple = filename.rpartition('/')
+ return partition_tuple[2]
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/activity/activity.info b/Inherit_From_sugar.activity.Activity_gtk3/activity/activity.info
new file mode 100644
index 0000000..8b6a1cf
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/activity/activity.info
@@ -0,0 +1,9 @@
+[Activity]
+name = ReadEtexts I
+bundle_id = net.flossmanuals.ReadETextsActivity
+icon = read-etexts
+exec = sugar-activity ReadEtextsActivity.ReadEtextsActivity
+show_launcher = no
+mime_types = text/plain;application/zip
+activity_version = 1
+license = GPLv2+
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/activity/read-etexts.svg b/Inherit_From_sugar.activity.Activity_gtk3/activity/read-etexts.svg
new file mode 100644
index 0000000..5682ec8
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/activity/read-etexts.svg
@@ -0,0 +1,71 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#000000">
+ <!ENTITY fill_color "#FFFFFF">
+]><svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg116"
+ sodipodi:version="0.32"
+ inkscape:version="0.46+devel"
+ sodipodi:docname="New document 4"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs118">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective124" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7"
+ inkscape:cx="24"
+ inkscape:cy="24"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1024"
+ inkscape:window-height="698"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata121">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <rect
+ style="fill:&fill_color;;stroke:&stroke_color;;stroke-opacity:1"
+ id="rect904"
+ width="36.142857"
+ height="32.142857"
+ x="4.1428571"
+ y="7.1428571" />
+ </g>
+</svg>
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/po/ReadEtextsI.pot b/Inherit_From_sugar.activity.Activity_gtk3/po/ReadEtextsI.pot
new file mode 100644
index 0000000..f5f645e
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/po/ReadEtextsI.pot
@@ -0,0 +1,22 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2012-12-12 09:57+0530\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "ReadEtexts I"
+msgstr ""
diff --git a/Inherit_From_sugar.activity.Activity_gtk3/setup.py b/Inherit_From_sugar.activity.Activity_gtk3/setup.py
new file mode 100755
index 0000000..601d35c
--- /dev/null
+++ b/Inherit_From_sugar.activity.Activity_gtk3/setup.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+
+# setup.py
+
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from sugar3.activity import bundlebuilder
+
+bundlebuilder.start()