# Copyright 2009 Simon Schampijer # # 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 USA """Web Activity: A case study for developing a web activity.""" from gi.repository import Gtk import logging import os from gettext import gettext as _ from sugar3.activity import activity from sugar3.graphics.toolbarbox import ToolbarBox from sugar3.activity.widgets import ActivityButton from sugar3.activity.widgets import TitleEntry from sugar3.activity.widgets import StopButton from sugar3.activity.widgets import ShareButton from sugar3.activity.widgets import DescriptionItem from gi.repository import WebKit class WebActivity(activity.Activity): """WebActivity class as specified in activity.info""" def __init__(self, handle): """Set up the Web activity.""" activity.Activity.__init__(self, handle) # we do not have collaboration features, make the share option # insensitive self.max_participants = 1 self.make_toolbar() self.make_webview() def make_toolbar(self): # toolbar with the new toolbar redesign toolbar_box = ToolbarBox() activity_button = ActivityButton(self) toolbar_box.toolbar.insert(activity_button, 0) activity_button.show() title_entry = TitleEntry(self) toolbar_box.toolbar.insert(title_entry, -1) title_entry.show() description_item = DescriptionItem(self) toolbar_box.toolbar.insert(description_item, -1) description_item.show() share_button = ShareButton(self) toolbar_box.toolbar.insert(share_button, -1) share_button.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() def make_webview(self): scrolled_window = Gtk.ScrolledWindow() webview = WebKit.WebView() scrolled_window.add(webview) webview.show() web_settings = webview.get_settings() # Change font size based in the GtkSettings font size. The # gtk-font-name property is a string with format '[font name] # [font size]' like 'Sans Serif 10'. gtk_settings = Gtk.Settings.get_default() gtk_font_name = gtk_settings.get_property('gtk-font-name') gtk_font_size = float(gtk_font_name.split()[-1]) web_settings.props.default_font_size = gtk_font_size * 1.2 web_settings.props.default_monospace_font_size = \ gtk_font_size * 1.2 - 2 webview.set_settings(web_settings) # Scale text and graphics: webview.set_full_content_zoom(True) # Load web app: web_app_page = os.path.join(activity.get_bundle_path(), "data/index.html") webview.load_uri('file://' + web_app_page) self.set_canvas(scrolled_window) scrolled_window.show()