Hey Doc Sprinters, Manuel (humitos) Kaufman has recently been patching the old Help Activity to work with GTK3+
Seeing as he has recently been through the activity code line-by-line, someone should offer him the FOSS-standard bribe of beers to be delivered at a future time and place to help you guys turn your new content into a new version o Help. Just a thought. cjl On Tue, Apr 24, 2012 at 9:26 PM, Manuel Kaufmann <humi...@gmail.com> wrote: > - All the code was migrated to Gtk3 following this guide[1] > - Toolbar View's icon was changed from "camera" to the right one: > "toolbar-view" > > [1] http://wiki.sugarlabs.org/go/Features/GTK3/Porting > > Signed-off-by: Manuel Kaufmann <humi...@gmail.com> > --- > browser.py | 45 ++------------ > helpactivity.py | 165 > ++++++++++++++++++++++----------------------------- > mybutton.py | 53 ----------------- > progresslistener.py | 27 +++++---- > setup.py | 2 +- > viewtoolbar.py | 12 ++-- > 6 files changed, 97 insertions(+), 207 deletions(-) > delete mode 100644 mybutton.py > > diff --git a/browser.py b/browser.py > index 4d89715..ab24d1d 100644 > --- a/browser.py > +++ b/browser.py > @@ -12,53 +12,18 @@ > # along with this program; if not, write to the Free Software > # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > -import os > -import time > -import logging > -from gettext import gettext as _ > - > -import gobject > -import gtk > -import hulahop > -import xpcom > -from xpcom.nsError import * > -from xpcom import components > -from xpcom.components import interfaces > -from hulahop.webview import WebView > - > -from sugar.datastore import datastore > -from sugar import profile > -from sugar import env > -from sugar.activity import activity > -from sugar.graphics import style > - > +from gi.repository import WebKit > from progresslistener import ProgressListener > > _ZOOM_AMOUNT = 0.1 > > -class Browser(WebView): > + > +class Browser(WebKit.WebView): > def __init__(self): > - WebView.__init__(self) > + WebKit.WebView.__init__(self) > > self.progress = ProgressListener() > > def do_setup(self): > - WebView.do_setup(self) > + WebKit.WebView.do_setup(self) > self.progress.setup(self) > - > - def zoom_in(self): > - contentViewer = self.doc_shell.queryInterface( \ > - interfaces.nsIDocShell).contentViewer > - if contentViewer is not None: > - markupDocumentViewer = contentViewer.queryInterface( \ > - interfaces.nsIMarkupDocumentViewer) > - markupDocumentViewer.fullZoom += _ZOOM_AMOUNT > - > - def zoom_out(self): > - contentViewer = self.doc_shell.queryInterface( \ > - interfaces.nsIDocShell).contentViewer > - if contentViewer is not None: > - markupDocumentViewer = contentViewer.queryInterface( \ > - interfaces.nsIMarkupDocumentViewer) > - markupDocumentViewer.fullZoom -= _ZOOM_AMOUNT > - > diff --git a/helpactivity.py b/helpactivity.py > index 210c423..84e1688 100755 > --- a/helpactivity.py > +++ b/helpactivity.py > @@ -15,25 +15,20 @@ > import os > from gettext import gettext as _ > > -import gtk > -import gobject > +from gi.repository import Gtk > +from gi.repository import GObject > > -from sugar.activity import activity > -from sugar.graphics.toolbutton import ToolButton > -from sugar.graphics.toolcombobox import ToolComboBox > +from sugar3.activity import activity > +from sugar3.graphics.toolbutton import ToolButton > +from sugar3.graphics.toolbarbox import ToolbarBox, ToolbarButton > +from sugar3.activity.widgets import StopButton > > -import hulahop > -hulahop.startup(os.path.join(activity.get_activity_root(), 'data/gecko')) > - > -#from hulahop.webview import WebView > from browser import Browser > -import xpcom > -from xpcom.components import interfaces > from viewtoolbar import ViewToolbar > -gobject.threads_init() > > -HOME = os.path.join(activity.get_bundle_path(), 'help/XO_Introduction.html') > -#HOME = "http://website.com/something.html" > +HOME = 'file://' + os.path.join(activity.get_bundle_path(), > + 'help/XO_Introduction.html') > + > > class HelpActivity(activity.Activity): > def __init__(self, handle): > @@ -41,91 +36,72 @@ class HelpActivity(activity.Activity): > > self.props.max_participants = 1 > > + # we do not have collaboration features > + # make the share option insensitive > + self.max_participants = 1 > + > self._web_view = Browser() > + self._scrolled_window = Gtk.ScrolledWindow() > + self._scrolled_window.add(self._web_view) > + self._scrolled_window.show() > + > + toolbar_box = ToolbarBox() > + > + viewtoolbar = ViewToolbar(self) > + viewbutton = ToolbarButton(page=viewtoolbar, > + icon_name='toolbar-view') > + toolbar_box.toolbar.insert(viewbutton, -1) > + viewbutton.show() > + > + separator = Gtk.SeparatorToolItem() > + #separator.props.draw = False > + #separator.set_expand(True) > + toolbar_box.toolbar.insert(separator, -1) > + separator.show() > + > + #lets reuse the code below > + navtoolbar = Toolbar(self._web_view) > + > + toolitem = Gtk.ToolItem() > + navtoolbar._home.reparent(toolitem) > + toolbar_box.toolbar.insert(toolitem, -1) > + navtoolbar._home.show() > + toolitem.show() > + > + toolitem = Gtk.ToolItem() > + navtoolbar._back.reparent(toolitem) > + toolbar_box.toolbar.insert(toolitem, -1) > + navtoolbar._back.show() > + toolitem.show() > + > + toolitem = Gtk.ToolItem() > + navtoolbar._forward.reparent(toolitem) > + toolbar_box.toolbar.insert(toolitem, -1) > + navtoolbar._forward.show() > + toolitem.show() > + > + separator = Gtk.SeparatorToolItem() > + separator.props.draw = False > + separator.set_expand(True) > + toolbar_box.toolbar.insert(separator, -1) > + separator.show() > + > + stop_button = StopButton(self) > + toolbar_box.toolbar.insert(stop_button, -1) > + stop_button.show() > + > + self.set_toolbar_box(toolbar_box) > + toolbar_box.show() > + > + self.set_canvas(self._scrolled_window) > > - try: > - from sugar.graphics.toolbarbox import ToolbarBox, ToolbarButton > - from sugar.activity.widgets import ActivityToolbarButton, > StopButton, \ > - ShareButton > - from mybutton import MyActivityToolbarButton > - > - toolbar_box = ToolbarBox() > - activity_button = MyActivityToolbarButton(self) > - toolbar_box.toolbar.insert(activity_button, 0) > - activity_button.show() > - > - viewtoolbar = ViewToolbar(self) > - viewbutton = ToolbarButton(page=viewtoolbar, \ > - icon_name='camera') > - toolbar_box.toolbar.insert(viewbutton, -1) > - viewbutton.show() > - > - separator = gtk.SeparatorToolItem() > - #separator.props.draw = False > - #separator.set_expand(True) > - toolbar_box.toolbar.insert(separator, -1) > - separator.show() > - > - #lets reuse the code below > - navtoolbar = Toolbar(self._web_view) > - > - toolitem = gtk.ToolItem() > - navtoolbar._home.reparent(toolitem) > - toolbar_box.toolbar.insert(toolitem, -1) > - navtoolbar._home.show() > - toolitem.show() > - > - toolitem = gtk.ToolItem() > - navtoolbar._back.reparent(toolitem) > - toolbar_box.toolbar.insert(toolitem, -1) > - navtoolbar._back.show() > - toolitem.show() > - > - toolitem = gtk.ToolItem() > - navtoolbar._forward.reparent(toolitem) > - toolbar_box.toolbar.insert(toolitem, -1) > - navtoolbar._forward.show() > - toolitem.show() > - > - # we do not have collaboration features > - # make the share option insensitive > - self.max_participants = 1 > - > - separator = gtk.SeparatorToolItem() > - separator.props.draw = False > - separator.set_expand(True) > - toolbar_box.toolbar.insert(separator, -1) > - separator.show() > - > - stop_button = StopButton(self) > - toolbar_box.toolbar.insert(stop_button, -1) > - stop_button.show() > - > - self.set_toolbar_box(toolbar_box) > - toolbar_box.show() > - > - except ImportError: > - toolbox = activity.ActivityToolbox(self) > - self.set_toolbox(toolbox) > - toolbox.show() > - > - toolbar = Toolbar(self._web_view) > - toolbox.add_toolbar(_('Navigation'), toolbar) > - toolbar.show() > - viewtoolbar = ViewToolbar(self) > - toolbox.add_toolbar(_('View'),viewtoolbar) > - viewtoolbar.show() > - > - toolbox.set_current_toolbar(1) > - > - self.set_canvas(self._web_view) > self._web_view.show() > - > self._web_view.load_uri(HOME) > > -class Toolbar(gtk.Toolbar): > + > +class Toolbar(Gtk.Toolbar): > def __init__(self, web_view): > - gobject.GObject.__init__(self) > + GObject.GObject.__init__(self) > > self._web_view = web_view > > @@ -169,10 +145,9 @@ class Toolbar(gtk.Toolbar): > > def _go_back_cb(self, button): > self._web_view.web_navigation.goBack() > - > + > def _go_forward_cb(self, button): > self._web_view.web_navigation.goForward() > > def _go_home_cb(self, button): > self._web_view.load_uri(HOME) > - > diff --git a/mybutton.py b/mybutton.py > deleted file mode 100644 > index b1f1f84..0000000 > --- a/mybutton.py > +++ /dev/null > @@ -1,53 +0,0 @@ > -# mybutton.py A version of ActivityToolbarButton that hides the "Keep" > -# button. > - > -# Copyright (C) 2010 James D. Simmons > -# > -# 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 St, Fifth Floor, Boston, MA 02110-1301 US > -import gtk > -import gconf > - > -from sugar.graphics.toolbarbox import ToolbarButton > -from sugar.activity.widgets import ActivityToolbar > -from sugar.graphics.xocolor import XoColor > -from sugar.graphics.icon import Icon > -from sugar.bundle.activitybundle import ActivityBundle > - > -def _create_activity_icon(metadata): > - if metadata.get('icon-color', ''): > - color = XoColor(metadata['icon-color']) > - else: > - client = gconf.client_get_default() > - color = XoColor(client.get_string('/desktop/sugar/user/color')) > - > - from sugar.activity.activity import get_bundle_path > - bundle = ActivityBundle(get_bundle_path()) > - icon = Icon(file=bundle.get_icon(), xo_color=color) > - > - return icon > - > -class MyActivityToolbarButton(ToolbarButton): > - > - def __init__(self, activity, **kwargs): > - toolbar = ActivityToolbar(activity, orientation_left=True) > - toolbar.stop.hide() > - toolbar.keep.hide() > - toolbar.title.unset_flags(gtk.CAN_FOCUS) > - > - ToolbarButton.__init__(self, page=toolbar, **kwargs) > - > - icon = _create_activity_icon(activity.metadata) > - self.set_icon_widget(icon) > - icon.show() > diff --git a/progresslistener.py b/progresslistener.py > index cf3cb43..c098843 100644 > --- a/progresslistener.py > +++ b/progresslistener.py > @@ -12,26 +12,27 @@ > # along with this program; if not, write to the Free Software > # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > -import gobject > import xpcom > from xpcom.components import interfaces > +from gi.repository import GObject > > -class ProgressListener(gobject.GObject): > + > +class ProgressListener(GObject.GObject): > _com_interfaces_ = interfaces.nsIWebProgressListener > > __gsignals__ = { > - 'location-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, > + 'location-changed': (GObject.SignalFlags.RUN_FIRST, None, > ([object])), > - 'loading-start': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, > + 'loading-start': (GObject.SignalFlags.RUN_FIRST, None, > ([])), > - 'loading-stop': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, > + 'loading-stop': (GObject.SignalFlags.RUN_FIRST, None, > ([])), > - 'loading-progress': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, > + 'loading-progress': (GObject.SignalFlags.RUN_FIRST, None, > ([float])) > } > > def __init__(self): > - gobject.GObject.__init__(self) > + GObject.GObject.__init__(self) > > self.total_requests = 0 > self.completed_requests = 0 > @@ -48,21 +49,21 @@ class ProgressListener(gobject.GObject): > interfaces.nsIWebProgress.NOTIFY_LOCATION > > browser.web_progress.addProgressListener(self._wrapped_self, mask) > - > + > def _reset_requests_count(self): > self.total_requests = 0 > self.completed_requests = 0 > - > + > def onLocationChange(self, webProgress, request, location): > self.emit('location-changed', location) > - > + > def onProgressChange(self, webProgress, request, curSelfProgress, > maxSelfProgress, curTotalProgress, maxTotalProgress): > pass > - > + > def onSecurityChange(self, webProgress, request, state): > pass > - > + > def onStateChange(self, webProgress, request, stateFlags, status): > if stateFlags & interfaces.nsIWebProgressListener.STATE_IS_REQUEST: > if stateFlags & interfaces.nsIWebProgressListener.STATE_START: > @@ -73,7 +74,7 @@ class ProgressListener(gobject.GObject): > if stateFlags & interfaces.nsIWebProgressListener.STATE_IS_NETWORK: > if stateFlags & interfaces.nsIWebProgressListener.STATE_START: > self.emit('loading-start') > - self._reset_requests_count() > + self._reset_requests_count() > elif stateFlags & interfaces.nsIWebProgressListener.STATE_STOP: > self.emit('loading-stop') > > diff --git a/setup.py b/setup.py > index 8c17051..653d383 100755 > --- a/setup.py > +++ b/setup.py > @@ -14,6 +14,6 @@ > # along with this program; if not, write to the Free Software > # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA > > -from sugar.activity import bundlebuilder > +from sugar3.activity import bundlebuilder > > bundlebuilder.start() > diff --git a/viewtoolbar.py b/viewtoolbar.py > index c5dc990..13a1ce5 100644 > --- a/viewtoolbar.py > +++ b/viewtoolbar.py > @@ -16,13 +16,15 @@ > > from gettext import gettext as _ > > -import gtk > +from gi.repository import Gtk > +from gi.repository import GObject > > -from sugar.graphics.toolbutton import ToolButton > +from sugar3.graphics.toolbutton import ToolButton > > -class ViewToolbar(gtk.Toolbar): > + > +class ViewToolbar(Gtk.Toolbar): > def __init__(self, activity): > - gtk.Toolbar.__init__(self) > + GObject.GObject.__init__(self) > > self._activity = activity > > @@ -40,7 +42,7 @@ class ViewToolbar(gtk.Toolbar): > self.insert(self.zoomin, -1) > self.zoomin.show() > > - self.separator = gtk.SeparatorToolItem() > + self.separator = Gtk.SeparatorToolItem() > self.separator.set_draw(True) > self.insert(self.separator, -1) > self.separator.show() > -- > 1.7.10 > > _______________________________________________ > Sugar-devel mailing list > Sugar-devel@lists.sugarlabs.org > http://lists.sugarlabs.org/listinfo/sugar-devel _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel