[OLPC library] [Sugar-devel] [PATCH Help] Migrated to Gtk3 and WebKit.WebView SL #3466
Chris Leonard
cjlhomeaddress at gmail.com
Tue Apr 24 21:52:26 EDT 2012
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 <humitos at 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 <humitos at 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 at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel
More information about the Library
mailing list