diff options
author | Daniel 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) |
commit | 3e4efc051e296837053970433ff372fc76b750f8 (patch) | |
tree | a0b4f7bb65d831c25e1e1f940bba7d744e7e92f4 | |
parent | e87fc8ce21777108f0ee1d102220535345124234 (diff) |
Filechoosers completed, new font options, internacionalization.
-rw-r--r-- | activity.py | 71 | ||||
-rw-r--r-- | editor.py | 9 | ||||
-rw-r--r-- | font_options.py | 102 |
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) @@ -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() |