Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Francis <santiago.danielfrancis@gmail.com>2011-12-05 12:30:16 (GMT)
committer Daniel Francis <santiago.danielfrancis@gmail.com>2011-12-05 12:30:16 (GMT)
commit3e4efc051e296837053970433ff372fc76b750f8 (patch)
treea0b4f7bb65d831c25e1e1f940bba7d744e7e92f4
parente87fc8ce21777108f0ee1d102220535345124234 (diff)
Filechoosers completed, new font options, internacionalization.
-rw-r--r--activity.py71
-rw-r--r--editor.py9
-rw-r--r--font_options.py102
3 files changed, 162 insertions, 20 deletions
diff --git a/activity.py b/activity.py
index bf1de96..cbbbd44 100644
--- a/activity.py
+++ b/activity.py
@@ -1,8 +1,9 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
-# activity.py por:
+# activity.py by/por:
# Agustin Zubiaga <aguzubiaga97@gmail.com>
+# Daniel Francis <santiago.danielfrancis@gmail.com>
# Sugarlabs - CeibalJAM! - Uruguay
# This program is free software; you can redistribute it and/or modify
@@ -22,9 +23,16 @@
import os
import sys
+import gettext
+LOCALE_DIR = os.path.join(".", "locale")
+TRANSLATION_DOMAIN = "jamedit"
+gettext.install(TRANSLATION_DOMAIN, LOCALE_DIR)
+
+import pango
import gtk
import sugar
+from sugar import mime
from sugar.graphics import iconentry
from sugar.graphics.toolbutton import ToolButton
from sugar.graphics.toggletoolbutton import ToggleToolButton
@@ -33,9 +41,12 @@ from sugar.activity.widgets import EditToolbar, StopButton, \
ActivityToolbarButton, ToolbarButton
from sugar.datastore import datastore
from sugar.activity import activity
-from editor import Editor
-from filechooser import FileChooserOpen, FileChooserSave
+from font_options import FontToolbarOptions
+from editor import Editor, LANGUAGE_MANAGER, LANGUAGES
+import file_choosers
+file_choosers.langsmanager = LANGUAGE_MANAGER
+file_choosers.langs = LANGUAGES
class JAMEdit(activity.Activity):
@@ -48,6 +59,7 @@ class JAMEdit(activity.Activity):
self.editor = Editor(self)
scroll = gtk.ScrolledWindow()
+ scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scroll.add(self.editor)
scroll.show_all()
@@ -69,13 +81,13 @@ class JAMEdit(activity.Activity):
# ****** Open File button ******
open_btn = ToolButton("fileopen")
- open_btn.set_tooltip("Abrir achivo")
+ open_btn.set_tooltip(_("Open File"))
open_btn.connect("clicked", self.open_file)
activity_toolbar.insert(open_btn, -1)
# ****** Save File button ******
save_btn = ToolButton("stock_save")
- save_btn.set_tooltip("Guardar este archivo")
+ save_btn.set_tooltip(_("Save this file"))
save_btn.connect("clicked", self.save_file)
activity_toolbar.insert(save_btn, -1)
@@ -88,12 +100,12 @@ class JAMEdit(activity.Activity):
# Edicion / Edit Toolbar
edit_toolbar = EditToolbar()
- edit_toolbar_button = ToolbarButton(label="Editar",
+ edit_toolbar_button = ToolbarButton(label=_("Edit"),
page=edit_toolbar,
icon_name='toolbar-edit')
edit_toolbar.cut = ToolButton("cut")
- edit_toolbar.cut.set_tooltip("Cortar")
+ edit_toolbar.cut.set_tooltip(_("Cut"))
edit_toolbar.cut.set_accelerator('<ctrl>x')
edit_toolbar.insert(edit_toolbar.cut, 4)
@@ -139,13 +151,13 @@ class JAMEdit(activity.Activity):
self.toolbox.toolbar.insert(search_item, -1)
self._search_prev = ToolButton('go-previous-paired')
- self._search_prev.set_tooltip('Anterior')
+ self._search_prev.set_tooltip(_('Previous'))
self._search_prev.connect('clicked',
self.editor._search_prev_cb)
self.toolbox.toolbar.insert(self._search_prev, -1)
self._search_next = ToolButton('go-next-paired')
- self._search_next.set_tooltip('Siguiente')
+ self._search_next.set_tooltip(_('Next'))
self._search_next.connect('clicked',
self.editor._search_next_cb)
self.toolbox.toolbar.insert(self._search_next, -1)
@@ -155,7 +167,7 @@ class JAMEdit(activity.Activity):
preferences_toolbar = gtk.Toolbar()
show_line_numbers = ToggleToolButton('show-numbers')
- show_line_numbers.set_tooltip("Mostrar numeros de linea")
+ show_line_numbers.set_tooltip(_("Show line numbers"))
show_line_numbers.set_active(True)
show_line_numbers.connect("clicked", \
@@ -164,6 +176,15 @@ class JAMEdit(activity.Activity):
preferences_toolbar.insert(show_line_numbers, -1)
self.editor._make_languages_combo(preferences_toolbar)
+
+ #Font Options / Opciones de fuente
+ font_options = FontToolbarOptions()
+ font_options.connect("load-pango-context", self.load_pango_context)
+ font_options.load_toolbar()
+ font_options.connect("font-changed", self.change_font)
+ preferences_toolbar.insert(font_options.family_tool_item, -1)
+ preferences_toolbar.insert(font_options.face_tool_item, -1)
+ preferences_toolbar.insert(font_options.size_spin_item, -1)
preferences = ToolbarButton()
preferences.props.page = preferences_toolbar
@@ -172,7 +193,6 @@ class JAMEdit(activity.Activity):
self.toolbar_box.toolbar.insert(preferences, -1)
-
# Separador / Separator
separator = gtk.SeparatorToolItem()
@@ -189,12 +209,27 @@ class JAMEdit(activity.Activity):
self.set_toolbar_box(self.toolbar_box)
+ def change_font(self, widget, family, face, size):
+ self.editor.modify_font(pango.FontDescription("%s %s %d" % (family, face, size)))
+
+ def load_pango_context(self, widget):
+ return self.editor.get_pango_context()
+
def pep8_check(self, widget):
self.editor.pep8.check_file(self.editor._get_all_text(), self.editor)
def open_file(self, widget):
- fc = FileChooserOpen(self)
- fc.show_all()
+ file_path = file_choosers.open_file_dialog()
+ if file_path != None:
+ self.set_title(os.path.split(file_path)[-1])
+ mime_type = mime.get_from_file_name(file_path)
+ self.metadata["mime_type"] = mime_type
+
+ file = open(file_path, "r")
+ self.editor.buffer.set_text(file.read())
+ self.editor.file = file_path
+ self.editor._search_and_active_language(mime_type)
+ file.close()
def save_file(self, widget):
if self.editor.file:
@@ -202,8 +237,12 @@ class JAMEdit(activity.Activity):
file.write(self.editor._get_all_text())
file.close()
else:
- fc = FileChooserSave(self)
- fc.show_all()
+ file_path = file_choosers.save_file_dialog()
+ if file_path:
+ self.editor.file = file_path
+ file = open(self.editor.file, "w")
+ file.write(self.editor._get_all_text())
+ file.close()
def write_file(self, file_path):
if self.editor.lang:
@@ -226,4 +265,4 @@ class JAMEdit(activity.Activity):
mime_type = self.metadata["mime_type"]
self.editor.buffer.set_text(text)
- self.editor._search_and_active_language(mime_type) \ No newline at end of file
+ self.editor._search_and_active_language(mime_type)
diff --git a/editor.py b/editor.py
index 29a3ec6..5e29610 100644
--- a/editor.py
+++ b/editor.py
@@ -1,8 +1,9 @@
#!/usr/bin/env python
-#! -*- coding: UTF-8 -*-
+# -*- coding: UTF-8 -*-
-# editor.py por:
+# editor.py by/por:
# Agustin Zubiaga <aguzubiaga97@gmail.com>
+# Daniel Francis <santiago.danielfrancis@gmail.com>
# Sugarlabs - CeibalJAM! - Uruguay
# This program is free software; you can redistribute it and/or modify
@@ -45,7 +46,7 @@ class Editor(gtksourceview2.View):
self.set_show_line_numbers(True)
- pangoFont = pango.FontDescription('Mono')
+ pangoFont = pango.FontDescription('Monospace 10')
self.modify_font(pangoFont)
bgcolor = gtk.gdk.color_parse('#FFFFFF')
@@ -102,7 +103,7 @@ class Editor(gtksourceview2.View):
def _make_languages_combo(self, toolbar):
self.lang_combo = ComboBox()
- self.lang_combo.append_item(None, "Texto Simple")
+ self.lang_combo.append_item(None, _("Plain text"))
self.lang_combo.set_active(0)
for lang in LANGUAGES:
diff --git a/font_options.py b/font_options.py
new file mode 100644
index 0000000..0a801d6
--- /dev/null
+++ b/font_options.py
@@ -0,0 +1,102 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# font_options.py
+#
+# Copyright 2011 Daniel Francis <santiago.danielfrancis@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 Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+#
+
+import gobject
+import gtk
+
+from sugar.graphics.combobox import ComboBox
+from sugar.graphics.toolcombobox import ToolComboBox
+
+class FontToolbarOptions(gobject.GObject):
+ __gsignals__ = {'load-pango-context' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_PYOBJECT, tuple()),
+ 'font-changed' : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_INT))}
+ def __init__(self):
+ gobject.GObject.__init__(self)
+ self.family = "Monospace"
+ self.face = "Regular"
+
+ def size_changed(self, adjustment):
+ self.emit("font-changed", self.family, self.face, adjustment.get_value())
+
+ def face_changed(self, widget):
+ iter = widget.get_active_iter()
+ self.face = self.faces[self.family].get_value(iter, 0)
+ self.emit('font-changed', self.family, self.face, self.size_adj.get_value())
+
+ def family_changed(self, widget):
+ iter = widget.get_active_iter()
+ self.family = self.family_model.get_value(iter, 0)
+ self.face_combo.set_model(self.faces[self.family])
+ self.face_combo.set_active(0)
+
+ def load_toolbar(self):
+ self.context = self.emit("load-pango-context")
+ self.family_combo = ComboBox()
+ family_renderer = gtk.CellRendererText()
+ family_renderer.set_property("family-set", True)
+ self.family_combo.pack_start(family_renderer)
+ self.family_combo.add_attribute(family_renderer, 'text', 0)
+ self.family_combo.add_attribute(family_renderer, 'family', 0)
+ self.family_model = gtk.ListStore(str)
+ monospace_index = 0
+ count = 0
+ self.faces = {}
+ for i in self.context.list_families():
+ count += 1
+ name = i.get_name()
+ if name == "Monospace": monospace_index = count - 1
+ self.family_model.append([name])
+ family_faces = gtk.ListStore(str, str)
+ for face in i.list_faces():
+ face_name = face.get_face_name()
+ family_faces.append([face_name, "%s %s" % (name, face_name)])
+ self.faces[name] = family_faces
+ self.family_combo.set_model(self.family_model)
+ self.family_combo.set_active(monospace_index)
+ self.family_combo.connect("changed", self.family_changed)
+ self.family_combo.show()
+ self.family_tool_item = ToolComboBox(self.family_combo)
+ self.family_tool_item.show()
+
+ self.face_combo = ComboBox()
+ face_renderer = gtk.CellRendererText()
+ face_renderer.set_property("family-set", True)
+ self.face_combo.pack_start(face_renderer)
+ self.face_combo.add_attribute(face_renderer, 'text', 0)
+ self.face_combo.add_attribute(face_renderer, 'font', 1)
+ current_model = self.faces["Monospace"]
+ self.face_combo.set_model(current_model)
+ self.face_combo.set_active(0)
+ self.face_combo.connect("changed", self.face_changed)
+ self.face_combo.show()
+ self.face_tool_item = ToolComboBox(self.face_combo)
+ self.face_tool_item.show()
+
+ self.size_adj = gtk.Adjustment(value=10, lower=5, upper=100, step_incr=1)
+ self.size_adj.connect("value-changed", self.size_changed)
+ self.size_spin = gtk.SpinButton(self.size_adj)
+ self.size_spin.show()
+ self.size_spin_item = gtk.ToolItem()
+ self.size_spin_item.add(self.size_spin)
+ self.size_spin_item.show()