Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/PortfolioActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'PortfolioActivity.py')
-rw-r--r--PortfolioActivity.py219
1 files changed, 91 insertions, 128 deletions
diff --git a/PortfolioActivity.py b/PortfolioActivity.py
index 193c4f0..0291992 100644
--- a/PortfolioActivity.py
+++ b/PortfolioActivity.py
@@ -11,8 +11,9 @@
# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA
-import gtk
-import gobject
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GObject
import subprocess
import os
import time
@@ -21,28 +22,23 @@ from shutil import copyfile
from math import sqrt, ceil
-from sugar.activity import activity
-from sugar import profile
-try:
- from sugar.graphics.toolbarbox import ToolbarBox
- HAVE_TOOLBOX = True
-except ImportError:
- HAVE_TOOLBOX = False
+from sugar3.activity import activity
+from sugar3 import profile
-if HAVE_TOOLBOX:
- from sugar.activity.widgets import ActivityToolbarButton
- from sugar.activity.widgets import StopButton
- from sugar.graphics.toolbarbox import ToolbarButton
+from sugar3.graphics.toolbarbox import ToolbarBox
+from sugar3.activity.widgets import ActivityToolbarButton
+from sugar3.activity.widgets import StopButton
+from sugar3.graphics.toolbarbox import ToolbarButton
-from sugar.datastore import datastore
-from sugar.graphics.alert import Alert
+from sugar3.datastore import datastore
+from sugar3.graphics.alert import Alert
from sprites import Sprites, Sprite
from exportpdf import save_pdf
from utils import get_path, lighter_color, svg_str_to_pixbuf, svg_rectangle, \
play_audio_from_file, get_pixbuf_from_journal, genblank, get_hardware, \
pixbuf_to_base64, base64_to_pixbuf, get_pixbuf_from_file
-
+
from toolbar_utils import radio_factory, button_factory, separator_factory, \
combo_factory, label_factory
from grecord import Grecord
@@ -53,35 +49,26 @@ import logging
_logger = logging.getLogger("portfolio-activity")
try:
- from sugar.graphics import style
+ from sugar3.graphics import style
GRID_CELL_SIZE = style.GRID_CELL_SIZE
except ImportError:
GRID_CELL_SIZE = 0
-try:
- _OLD_SUGAR_SYSTEM = False
- import json
- from json import load as jload
- from json import dump as jdump
-except(ImportError, AttributeError):
- try:
- import simplejson as json
- from simplejson import load as jload
- from simplejson import dump as jdump
- except ImportError:
- _OLD_SUGAR_SYSTEM = True
+import json
+from json import load as jload
+from json import dump as jdump
from StringIO import StringIO
import telepathy
from dbus.service import signal
from dbus.gobject_service import ExportedGObject
-from sugar.presence import presenceservice
-from sugar.presence.tubeconn import TubeConnection
+from sugar3.presence import presenceservice
+from sugar3.presence.tubeconn import TubeConnection
-SERVICE = 'org.sugarlabs.PortfolioActivity'
+SERVICE = 'org.sugar3labs.PortfolioActivity'
IFACE = SERVICE
-PATH = '/org/sugarlabs/PortfolioActivity'
+PATH = '/org/sugar3labs/PortfolioActivity'
# Size and position of title, preview image, and description
PREVIEWW = 600
@@ -177,9 +164,9 @@ class PortfolioActivity(activity.Activity):
self._playing = False
self._first_time = True
- self._width = gtk.gdk.screen_width()
- self._height = gtk.gdk.screen_height()
- self._scale = gtk.gdk.screen_height() / 900.
+ self._width = Gdk.Screen.width()
+ self._height = Gdk.Screen.height()
+ self._scale = Gdk.Screen.height() / 900.
self._titlewh = [self._width, TITLEH * self._scale]
self._titlexy = [0, 0]
@@ -223,19 +210,19 @@ class PortfolioActivity(activity.Activity):
def _setup_canvas(self):
''' Create a canvas '''
- self._canvas = gtk.DrawingArea()
- self._canvas.set_size_request(int(gtk.gdk.screen_width()),
- int(gtk.gdk.screen_height()))
+ self._canvas = Gtk.DrawingArea()
+ self._canvas.set_size_request(int(Gdk.Screen.width()),
+ int(Gdk.Screen.height()))
self._canvas.show()
self.set_canvas(self._canvas)
self.show_all()
- self._canvas.set_flags(gtk.CAN_FOCUS)
- self._canvas.add_events(gtk.gdk.BUTTON_PRESS_MASK)
- self._canvas.add_events(gtk.gdk.POINTER_MOTION_MASK)
- self._canvas.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
- self._canvas.add_events(gtk.gdk.KEY_PRESS_MASK)
- self._canvas.add_events(gtk.gdk.CONFIGURE)
+ self._canvas.set_flags(Gtk.CAN_FOCUS)
+ self._canvas.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
+ self._canvas.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
+ self._canvas.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK)
+ self._canvas.add_events(Gdk.EventMask.KEY_PRESS_MASK)
+ self._canvas.add_events(Gdk.CONFIGURE)
self._canvas.connect('expose-event', self._expose_cb)
self._canvas.connect('button-press-event', self._button_press_cb)
self._canvas.connect('button-release-event', self._button_release_cb)
@@ -247,12 +234,12 @@ class PortfolioActivity(activity.Activity):
def _configure_cb(self, win, event):
# landscape or portrait?
- self._width = gtk.gdk.screen_width()
- self._height = gtk.gdk.screen_height()
+ self._width = Gdk.Screen.width()
+ self._height = Gdk.Screen.height()
if self._width > self._height:
- self._scale = gtk.gdk.screen_height() / 900.
+ self._scale = Gdk.Screen.height() / 900.
else:
- self._scale = gtk.gdk.screen_width() / 1200.
+ self._scale = Gdk.Screen.width() / 1200.
self._my_canvas.hide()
self._title.hide()
@@ -282,7 +269,7 @@ class PortfolioActivity(activity.Activity):
self._colors[0] = self._colors[1]
self._colors[1] = tmp
- if not HAVE_TOOLBOX and self._hw[0:2] == 'xo':
+ if self._hw[0:2] == 'xo':
self._titlef = 18
self._descriptionf = 12
else:
@@ -296,23 +283,23 @@ class PortfolioActivity(activity.Activity):
star_size = 55
else:
star_size = int(150. / int(ceil(sqrt(self._nobjects))))
- self._fav_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self._fav_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'favorite-on.svg'), star_size, star_size)
- self._unfav_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self._unfav_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'favorite-off.svg'), star_size, star_size)
- self.record_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.record_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'media-audio.svg'), 55, 55)
- self.recording_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.recording_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'media-audio-recording.svg'), 55, 55)
- self.playback_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.playback_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'speaker-100.svg'), 55, 55)
- self.playing_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.playing_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'speaker-0.svg'), 55, 55)
@@ -325,16 +312,16 @@ class PortfolioActivity(activity.Activity):
self._playback_button.type = 'noplay'
self._playback_button.hide()
- self.prev_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.prev_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'go-previous.svg'), 55, 55)
- self.next_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.next_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'go-next.svg'), 55, 55)
- self.prev_off_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.prev_off_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'go-previous-inactive.svg'), 55, 55)
- self.next_off_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(
+ self.next_off_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'icons',
'go-next-inactive.svg'), 55, 55)
@@ -348,7 +335,7 @@ class PortfolioActivity(activity.Activity):
self._help = Sprite(self._sprites,
0, 0,
- gtk.gdk.pixbuf_new_from_file_at_size(
+ GdkPixbuf.Pixbuf.new_from_file_at_size(
os.path.join(activity.get_bundle_path(), 'help.png'),
int(self._previewwh[0]),
int(self._previewwh[1])))
@@ -415,41 +402,27 @@ class PortfolioActivity(activity.Activity):
self.max_participants = 5 # sharing
- if HAVE_TOOLBOX:
- toolbox = ToolbarBox()
+ toolbox = ToolbarBox()
- # Activity toolbar
- activity_button_toolbar = ActivityToolbarButton(self)
+ # Activity toolbar
+ activity_button_toolbar = ActivityToolbarButton(self)
- toolbox.toolbar.insert(activity_button_toolbar, 0)
- activity_button_toolbar.show()
+ toolbox.toolbar.insert(activity_button_toolbar, 0)
+ activity_button_toolbar.show()
- self.set_toolbar_box(toolbox)
- toolbox.show()
- self.toolbar = toolbox.toolbar
+ self.set_toolbar_box(toolbox)
+ toolbox.show()
+ self.toolbar = toolbox.toolbar
- adjust_toolbar = gtk.Toolbar()
- adjust_toolbar_button = ToolbarButton(
- label=_('Adjust'),
- page=adjust_toolbar,
- icon_name='preferences-system')
- adjust_toolbar.show_all()
- adjust_toolbar_button.show()
- else:
- # Use pre-0.86 toolbar design
- primary_toolbar = gtk.Toolbar()
- toolbox = activity.ActivityToolbox(self)
- self.set_toolbox(toolbox)
- toolbox.add_toolbar(_('Page'), primary_toolbar)
- adjust_toolbar = gtk.Toolbar()
- toolbox.add_toolbar(_('Adjust'), adjust_toolbar)
- toolbox.show()
- toolbox.set_current_toolbar(1)
- self.toolbar = primary_toolbar
-
- if HAVE_TOOLBOX:
- # toolbox.toolbar.insert(record_toolbar_button, -1)
- toolbox.toolbar.insert(adjust_toolbar_button, -1)
+ adjust_toolbar = Gtk.Toolbar()
+ adjust_toolbar_button = ToolbarButton(
+ label=_('Adjust'),
+ page=adjust_toolbar,
+ icon_name='preferences-system')
+ adjust_toolbar.show_all()
+ adjust_toolbar_button.show()
+
+ toolbox.toolbar.insert(adjust_toolbar_button, -1)
button_factory('view-fullscreen', self.toolbar,
self.do_fullscreen_cb, tooltip=_('Fullscreen'),
@@ -498,17 +471,16 @@ class PortfolioActivity(activity.Activity):
self._save_as_pdf_cb,
tooltip=_('Save as PDF'))
- if HAVE_TOOLBOX:
- separator_factory(toolbox.toolbar, True, False)
+ separator_factory(toolbox.toolbar, True, False)
- stop_button = StopButton(self)
- stop_button.props.accelerator = '<Ctrl>q'
- toolbox.toolbar.insert(stop_button, -1)
- stop_button.show()
+ stop_button = StopButton(self)
+ stop_button.props.accelerator = '<Ctrl>q'
+ toolbox.toolbar.insert(stop_button, -1)
+ stop_button.show()
def _destroy_cb(self, win, event):
''' Clean up on the way out. '''
- gtk.main_quit()
+ Gtk.main_quit()
def _thumb_to_slide(self, spr):
if spr is None:
@@ -639,7 +611,7 @@ class PortfolioActivity(activity.Activity):
self._playing = False
self._auto_button.set_icon('media-playback-start')
if hasattr(self, '_timeout_id') and self._timeout_id is not None:
- gobject.source_remove(self._timeout_id)
+ GObject.source_remove(self._timeout_id)
def _loop(self):
''' Show a slide and then call oneself with a timeout. '''
@@ -647,7 +619,7 @@ class PortfolioActivity(activity.Activity):
if self.i == self._nobjects:
self.i = 0
self._show_slide()
- self._timeout_id = gobject.timeout_add(int(self._rate * 1000),
+ self._timeout_id = GObject.timeout_add(int(self._rate * 1000),
self._loop)
def _save_as_pdf_cb(self, button=None):
@@ -668,7 +640,7 @@ class PortfolioActivity(activity.Activity):
dsobject.metadata['icon-color'] = profile.get_color().to_string()
dsobject.metadata['mime_type'] = 'application/pdf'
dsobject.set_file_path(tmp_file)
- dsobject.metadata['activity'] = 'org.laptop.sugar.ReadActivity'
+ dsobject.metadata['activity'] = 'org.laptop.sugar3.ReadActivity'
datastore.write(dsobject)
dsobject.destroy()
return
@@ -720,7 +692,7 @@ class PortfolioActivity(activity.Activity):
return
slide = self._slides[self.i]
- if self.i == 0:
+ if self.i == 0:
self._prev.set_image(self.prev_off_pixbuf)
else:
self._prev.set_image(self.prev_pixbuf)
@@ -735,7 +707,7 @@ class PortfolioActivity(activity.Activity):
self._preview.set_shape(pixbuf.scale_simple(
int(PREVIEWW * self._scale),
int(PREVIEWH * self._scale),
- gtk.gdk.INTERP_NEAREST))
+ GdkPixbuf.InterpType.NEAREST))
self._preview.set_layer(MIDDLE)
else:
if self._preview is not None:
@@ -753,7 +725,7 @@ class PortfolioActivity(activity.Activity):
if slide.sound is not None:
if self._playing:
_logger.debug('Playing audio note')
- gobject.idle_add(play_audio_from_file,
+ GObject.idle_add(play_audio_from_file,
slide.sound.file_path)
self._playback_button.set_image(self.playback_pixbuf)
self._playback_button.type = 'play'
@@ -834,7 +806,7 @@ class PortfolioActivity(activity.Activity):
if slide.thumb is None:
if slide.preview is not None:
pixbuf_thumb = slide.preview.scale_simple(int(w), int(h),
- gtk.gdk.INTERP_TILES)
+ GdkPixbuf.InterpType.TILES)
else:
pixbuf_thumb = svg_str_to_pixbuf(genblank(int(w), int(h),
self._colors))
@@ -878,13 +850,13 @@ class PortfolioActivity(activity.Activity):
os.remove(os.path.join(self.datapath, 'output.ogg'))
def do_fullscreen_cb(self, button):
- ''' Hide the Sugar toolbars. '''
+ ''' Hide the sugar3 toolbars. '''
self.fullscreen()
def invalt(self, x, y, w, h):
''' Mark a region for refresh '''
self._canvas.window.invalidate_rect(
- gtk.gdk.Rectangle(int(x), int(y), int(w), int(h)), False)
+ (int(x), int(y), int(w), int(h)), False)
def _button_press_cb(self, win, event):
''' The mouse button was pressed. Is it on a thumbnail sprite? '''
@@ -1084,7 +1056,7 @@ class PortfolioActivity(activity.Activity):
slide = self._slides[self.i]
_logger.debug('Autosaving recording')
self._notify_successful_save(title=_('Save recording'))
- gobject.timeout_add(100, self._wait_for_transcoding_to_finish)
+ GObject.timeout_add(100, self._wait_for_transcoding_to_finish)
else: # Wasn't recording, so start
_logger.debug('recording...False. Start recording.')
self._record_button.set_image(self.recording_pixbuf)
@@ -1107,8 +1079,8 @@ class PortfolioActivity(activity.Activity):
self._playback_button.set_image(self.playing_pixbuf)
self._playback_button.set_layer(DRAG)
self._playback_button.type = 'playing'
- gobject.timeout_add(1000, self._playback_button_reset)
- gobject.idle_add(play_audio_from_file,
+ GObject.timeout_add(1000, self._playback_button_reset)
+ GObject.idle_add(play_audio_from_file,
self._slides[self.i].sound.file_path)
def _playback_button_reset(self):
@@ -1191,9 +1163,9 @@ class PortfolioActivity(activity.Activity):
def _keypress_cb(self, area, event):
''' Keyboard '''
- keyname = gtk.gdk.keyval_name(event.keyval)
- keyunicode = gtk.gdk.keyval_to_unicode(event.keyval)
- if event.get_state() & gtk.gdk.MOD1_MASK:
+ keyname = Gdk.keyval_name(event.keyval)
+ keyunicode = Gdk.keyval_to_unicode(event.keyval)
+ if event.get_state() & Gdk.ModifierType.MOD1_MASK:
alt_mask = True
alt_flag = 'T'
else:
@@ -1338,7 +1310,7 @@ class PortfolioActivity(activity.Activity):
if hasattr(self.get_window(), 'get_cursor'):
self.get_window().set_cursor(self.old_cursor)
else:
- self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.LEFT_PTR))
+ self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR))
def _waiting_cursor(self):
''' Waiting, so set watch cursor. '''
@@ -1346,7 +1318,7 @@ class PortfolioActivity(activity.Activity):
return
if hasattr(self.get_window(), 'get_cursor'):
self.old_cursor = self.get_window().get_cursor()
- self.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
+ self.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH))
# Serialize
@@ -1363,12 +1335,7 @@ class PortfolioActivity(activity.Activity):
return self._data_dumper(data)
def _data_dumper(self, data):
- if _OLD_SUGAR_SYSTEM:
- return json.write(data)
- else:
- io = StringIO()
- jdump(data, io)
- return io.getvalue()
+ return json.write(data)
def _load(self, data):
''' Load slide data from a sharer. '''
@@ -1407,11 +1374,7 @@ class PortfolioActivity(activity.Activity):
self._show_thumbs()
def _data_loader(self, data):
- if _OLD_SUGAR_SYSTEM:
- return json.read(data)
- else:
- io = StringIO(data)
- return jload(io)
+ return json.read(data)
# When portfolio is shared, only sharer sends out slides, joiners
# send back comments.
@@ -1607,7 +1570,7 @@ class PortfolioActivity(activity.Activity):
for slide in self._slides:
if slide.active and slide.fav:
_logger.debug('sharing %s' % (slide.uid))
- gobject.idle_add(self._send_event, 's:%s' % (
+ GObject.idle_add(self._send_event, 's:%s' % (
str(self._dump(slide))))
def _send_star(self, uid, status):