Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgnacio Rodriguez <ignacio@sugarlabs.org>2013-12-23 15:31:18 (GMT)
committer Ignacio Rodriguez <ignacio@sugarlabs.org>2013-12-23 15:31:18 (GMT)
commit01f57375dfebeceff9c1ab49d840068b6774b383 (patch)
tree84b597252915def70bc5d4d206f64d47a00386b4
parent1e066f5535bf6eaf13cdc79215d1640faf1c73c9 (diff)
fixesgtk3
-rw-r--r--IconDialog.py124
-rw-r--r--pippy_app.py36
2 files changed, 67 insertions, 93 deletions
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