From 01f57375dfebeceff9c1ab49d840068b6774b383 Mon Sep 17 00:00:00 2001 From: Ignacio Rodriguez Date: Mon, 23 Dec 2013 15:31:18 +0000 Subject: fixes --- diff --git a/IconDialog.py b/IconDialog.py index 637889c..1087d8a 100644 --- a/IconDialog.py +++ b/IconDialog.py @@ -21,13 +21,15 @@ from gi.repository import Gtk from gi.repository import Gdk from gi.repository import GdkPixbuf from jarabe.journal.model import get_documents_path +from sugar3.activity.activity import get_bundle_path from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.toolbarbox import ToolbarBox -from sugar3.graphics import style from gettext import gettext as _ import os -SUGAR_ARTWORK = [_('Actions'), _('Emblems'), _('Documents')] +DEFAULT_NAME = "default-pippy.svg" +DEFAULT_ICON = os.path.join(get_bundle_path(), 'activity', + 'activity-default.svg') def get_document_icons(): @@ -39,55 +41,41 @@ def get_document_icons(): return icons_ -SUGAR_ICONS = { - _('Actions'): ['media-playlist-repeat-insensitive', - 'media-playlist-shuffle-insensitive', - 'format-justify-left', - 'cell-height', - 'media-playback-stop-insensitive', - 'select-all', 'format-columns-triple', 'column-insert', - 'go-right', 'cell-format', 'format-justify-right', 'row-insert', - 'entry-search', 'invite', 'format-text-underline', 'entry-stop', - 'view-return', 'transfer-from-text-uri-list', 'cell-size', 'column-remove', - 'insert-image', 'edit-clear', 'view-radial', 'view-lastedit', - 'media-seek-forward-insensitive', 'row-remove', 'zoom-home', - 'zoom-best-fit', 'media-playlist-repeat', 'media-eject-insensitive', - 'view-fullscreen', 'format-text-leading', 'transfer-from-text-x-generic', - 'select-none', 'toolbar-view', 'media-playback-pause', 'format-text-bold', - 'media-playback-start-insensitive', 'go-home', 'view-freeform', 'go-next', - 'transfer-from-image-x-generic', 'media-seek-backward', 'list-add', - 'edit-description', 'toolbar-colors', 'cell-width', - 'transfer-from-audio-x-generic', 'zoom-in', 'zoom-groups', - 'media-seek-forward', 'go-up', 'view-list', 'format-justify-center', - 'transfer-from', 'media-playback-pause-insensitive', 'media-playback-stop', - 'go-previous', 'go-left', 'transfer-from-video-x-generic', - 'media-playlist-shuffle', 'zoom-out', 'toolbar-edit', 'go-next-paired', - 'system-logout', 'view-source', 'tray-hide', 'edit-copy', 'insert-table', - 'view-size', 'format-justify-fill', 'go-down', 'format-columns-single', - 'transfer-to-text-uri-list', 'activity-stop', - 'transfer-to-audio-x-generic', 'view-box', 'zoom-original', - 'edit-undo', 'document-send', 'view-refresh', - 'document-save', 'system-shutdown', 'entry-refresh', 'dialog-cancel', - 'system-search', 'transfer-to-image-x-generic', - 'transfer-from-application-octet-stream', - 'media-seek-backward-insensitive', 'dialog-ok', 'edit-redo', - 'view-created', 'activity-start', 'format-text-size', 'view-triangle', - 'entry-cancel', 'media-eject', 'edit-paste', 'tray-show', - 'transfer-to-video-x-generic', 'transfer-to', 'view-details', - 'system-restart', 'zoom-activity', 'media-record', - 'transfer-to-text-x-generic', 'zoom-to-width', 'format-columns-double', - 'format-text-italic', 'tray-favourite', 'list-remove', - 'transfer-to-application-octet-stream', 'view-spiral', - 'media-record-insensitive', 'edit-delete', 'toolbar-help', - 'edit-duplicate', 'media-playback-start', 'zoom-neighborhood', - 'go-previous-paired'], - _('Emblems'): ['emblem-busy', 'emblem-charging', 'emblem-downloads', - 'emblem-favorite', 'emblem-locked', 'emblem-notification', - 'emblem-outofrange', 'emblem-question', 'emblem-view-source', - 'emblem-warning'], - _('Documents'): get_document_icons() -} +def get_user_path(): + user = os.path.expanduser("~") + path = os.path.join(user, ".icons") + if not os.path.exists(path): + os.mkdir(path) + if os.path.exists(DEFAULT_NAME): + os.remove(DEFAULT_NAME) + shutil.copy(DEFAULT_ICON, os.path.join(path, DEFAULT_NAME)) + return path + + +def get_usericons_icons(): + path = get_user_path() + icons = os.listdir(path) + icons_ = [] + for icon in icons: + if icon.endswith('.svg'): + icons_.append(icon[:-4]) + + return icons_ + + +def get_user_icons(): + home = get_usericons_icons() + documents = get_document_icons() + final = [] + + for x in home: + final.append(x) + + for x in documents: + final.append(x) + + return final class IconDialog(Gtk.Window): @@ -150,49 +138,38 @@ class IconDialog(Gtk.Window): scroll = Gtk.ScrolledWindow() scroll.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) - grid = Gtk.Grid() - current = 0 - for icon in SUGAR_ARTWORK: - expander = self.build_icons(icon) - grid.attach(expander, 0, current, 1, 1) - current += 1 + icons = self.build_icons() scroll.set_size_request(self.x, self.y) - scroll.add_with_viewport(grid) + scroll.add_with_viewport(icons) return scroll - def build_icons(self, category): - icons = SUGAR_ICONS[category] - - if len(icons) < 1: - return Gtk.EventBox() - + def build_icons(self): store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, str) - icon_view = Gtk.IconView.new_with_model(store) icon_view.set_selection_mode(Gtk.SelectionMode.SINGLE) icon_view.connect('selection-changed', self.set_icon, store) icon_view.set_pixbuf_column(0) icon_view.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('#D5D5D5')) - for icon in icons: + for icon in get_user_icons(): info = self.theme.lookup_icon(icon, 55, Gtk.IconLookupFlags.FORCE_SVG) if not info: continue - icon_path = info.get_filename() - if category == _('Documents'): + icon_path = os.path.join(get_user_path(), icon + ".svg") + if not os.path.exists(icon_path): icon_path = os.path.join(get_documents_path(), icon + ".svg") + if not os.path.exists(icon_path): + icon_path = info.get_filename() + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( icon_path, 55, 55) store.insert(-1, [pixbuf, icon, icon_path]) - expand = Gtk.Expander() - expand.set_label(category) - expand.add(icon_view) - return expand + return icon_view def set_icon(self, widget, model): try: @@ -202,7 +179,4 @@ class IconDialog(Gtk.Window): icon_path = model.get(iter_, 2)[0] self._icon = icon_path - self.destroy() - - def get_icon(self): - return self._icon + self.destroy() \ No newline at end of file diff --git a/pippy_app.py b/pippy_app.py index 0b58007..fdbd127 100644 --- a/pippy_app.py +++ b/pippy_app.py @@ -47,8 +47,9 @@ from sugar3.activity.widgets import EditToolbar from sugar3.activity.widgets import StopButton from sugar3.activity.activity import get_bundle_path from sugar3.activity.activity import get_bundle_name -from sugar3.graphics.alert import NotifyAlert from sugar3.graphics.alert import ConfirmationAlert +from sugar3.graphics.alert import Alert +from sugar3.graphics.icon import Icon from sugar3.graphics import style from sugar3.graphics.toggletoolbutton import ToggleToolButton @@ -80,7 +81,7 @@ SIZE_Y = Gdk.Screen.height() groupthink_mimetype = 'pickle/groupthink-pippy' -from Notebook import SourceNotebook, AddNotebook +from Notebook import SourceNotebook class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): @@ -256,7 +257,6 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): root = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data') self.paths.append([_('My examples'), root]) - self.source_tabs = SourceNotebook(self) self.source_tabs.connect("tab-added", self._add_source_cb) @@ -272,7 +272,7 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): Gdk.color_parse('#E7E7E7'), []) self._vte.connect('child_exited', self.child_exited_cb) - + self._child_exited_handler = None self._vte.connect('drag_data_received', self.vte_drop_cb) outbox.pack_start(self._vte, True, True, 0) @@ -344,8 +344,8 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): if text_buffer.get_modified(): alert = ConfirmationAlert() alert.props.title = _('Example selection Warning') - alert.props.msg = _('You have modified the currently selected file. \ - Discard changes?') + alert.props.msg = _('You have modified the currently selected file.' + ' Discard changes?') alert.connect('response', self._discard_changes_cb, path) self.add_alert(alert) return False @@ -463,15 +463,13 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): self.copy() def _create_bundle_cb(self, __): - from shutil import copytree, copy2, rmtree + from shutil import rmtree from tempfile import mkdtemp # get the name of this pippy program. title = self.metadata['title'].replace('.py', '') title = title.replace('-', '') if title == 'Pippy Activity': - from sugar3.graphics.alert import Alert - from sugar3.graphics.icon import Icon alert = Alert() alert.props.title = _('Save as Activity Error') alert.props.msg = _('Please give your activity a meaningful name ' @@ -482,9 +480,11 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): self.add_alert(alert) return - alert_icon = ConfirmationAlert() + alert_icon = Alert() + ok_icon = Icon(icon_name='dialog-ok') + alert_icon.add_button(Gtk.ResponseType.OK, _('Ok'), ok_icon) alert_icon.props.title = _('Activity icon') - alert_icon.props.msg = _('You want to select activity icon?') + alert_icon.props.msg = _('You need select an activity icon.') def internal_callback(window=None, event=None): icon = "%s/activity/activity-default.svg" % (get_bundle_path()) @@ -506,7 +506,8 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): self._write_text_buffer(sourcefile) try: - # FIXME: vte invocation was raising errors. Switched to subprocess + # FIXME: vte invocation was raising errors. + # Switched to subprocess output = subprocess.check_output( ["/usr/bin/python", "%s/pippy_app.py" % get_bundle_path(), @@ -522,12 +523,13 @@ class PippyActivity(ViewSourceActivity, groupthink.sugar_tools.GroupActivity): raise def alert_response(alert, response_id): - if response_id == Gtk.ResponseType.OK: + self.remove_alert(alert) + + def dialog(): dialog = IconDialog() dialog.connect('destroy', internal_callback) - else: - internal_callback() - self.remove_alert(alert) + + GObject.idle_add(dialog) alert_icon.connect('response', alert_response) self.add_alert(alert_icon) @@ -711,7 +713,6 @@ def pippy_activity_extra_files(): for name in files: fn = os.path.join(root, name).replace(bp + '/', '') extra[fn] = open(os.path.join(root, name), 'r').read() - extra['activity/activity-custom.svg'] = PIPPY_CUSTOM_ICON return extra @@ -755,7 +756,6 @@ def main(): from pyclbr import readmodule_ex from tempfile import mkdtemp from shutil import copytree, copy2, rmtree - from sugar3 import profile from sugar3.activity import bundlebuilder import sys -- cgit v0.9.1