Remove the internal activities. They are now splitted to their own module.
This commit is contained in:
parent
86770c93fd
commit
594613aa6b
@ -1,4 +1,4 @@
|
||||
SUBDIRS = activities lib po shell sugar services tools
|
||||
SUBDIRS = lib po shell sugar services tools
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
SUBDIRS = chat terminal web
|
@ -1,6 +0,0 @@
|
||||
sugardir = $(pkgdatadir)/activities/chat
|
||||
sugar_PYTHON = \
|
||||
__init__.py \
|
||||
chatactivity.py
|
||||
|
||||
EXTRA_DIST = chat.activity
|
@ -1,6 +0,0 @@
|
||||
[Activity]
|
||||
name = GroupChat
|
||||
icon = activity-chat
|
||||
id = org.laptop.ChatActivity
|
||||
python_module = chat.chatactivity.ChatActivity
|
||||
show_launcher = yes
|
@ -1,49 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
from gettext import gettext as _
|
||||
|
||||
from sugar.activity.Activity import Activity
|
||||
from sugar.chat.Chat import Chat
|
||||
from sugar.p2p.Stream import Stream
|
||||
|
||||
class ChatActivity(Activity):
|
||||
def __init__(self):
|
||||
Activity.__init__(self)
|
||||
|
||||
self._group_stream = None
|
||||
|
||||
self.set_title(_('Group chat'))
|
||||
|
||||
self._chat = Chat()
|
||||
self.add(self._chat)
|
||||
self._chat.show()
|
||||
|
||||
def join(self, activity_ps):
|
||||
Activity.join(self, activity_ps)
|
||||
self._setup_stream()
|
||||
|
||||
def share(self):
|
||||
Activity.share(self)
|
||||
self._setup_stream()
|
||||
|
||||
def _setup_stream(self):
|
||||
self._group_stream = Stream.new_from_service(self._service)
|
||||
self._group_stream.set_data_listener(self._group_recv_message)
|
||||
self._chat.set_stream_writer(self._group_stream.new_writer())
|
||||
|
||||
def _group_recv_message(self, address, msg):
|
||||
self._chat.recv_message(msg)
|
@ -1,6 +0,0 @@
|
||||
sugardir = $(pkgdatadir)/activities/terminal
|
||||
sugar_PYTHON = \
|
||||
__init__.py \
|
||||
TerminalActivity.py
|
||||
|
||||
EXTRA_DIST = terminal.activity
|
@ -1,82 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gtk
|
||||
import vte
|
||||
import pango
|
||||
|
||||
from sugar.activity.Activity import Activity
|
||||
|
||||
_TERMINAL_ACTIVITY_TYPE = "_terminal._tcp"
|
||||
|
||||
class Terminal(gtk.HBox):
|
||||
def __init__(self):
|
||||
gtk.HBox.__init__(self, False, 4)
|
||||
|
||||
self._vte = vte.Terminal()
|
||||
self._configure_vte()
|
||||
self._vte.set_size(30, 5)
|
||||
self._vte.set_size_request(200, 50)
|
||||
self._vte.show()
|
||||
self.pack_start(self._vte)
|
||||
|
||||
self._scrollbar = gtk.VScrollbar(self._vte.get_adjustment())
|
||||
self._scrollbar.show()
|
||||
self.pack_start(self._scrollbar, False, False, 0)
|
||||
|
||||
self._vte.connect("child-exited", lambda term: term.fork_command())
|
||||
|
||||
self._vte.fork_command()
|
||||
|
||||
def _configure_vte(self):
|
||||
self._vte.set_font(pango.FontDescription('Monospace 10'))
|
||||
self._vte.set_colors(gtk.gdk.color_parse ('#AAAAAA'),
|
||||
gtk.gdk.color_parse ('#000000'),
|
||||
[])
|
||||
self._vte.set_cursor_blinks(False)
|
||||
self._vte.set_audible_bell(False)
|
||||
self._vte.set_scrollback_lines(100)
|
||||
self._vte.set_allow_bold(True)
|
||||
self._vte.set_scroll_on_keystroke(False)
|
||||
self._vte.set_scroll_on_output(False)
|
||||
self._vte.set_emulation('xterm')
|
||||
self._vte.set_visible_bell(False)
|
||||
|
||||
def on_gconf_notification(self, client, cnxn_id, entry, what):
|
||||
self.reconfigure_vte()
|
||||
|
||||
def on_vte_button_press(self, term, event):
|
||||
if event.button == 3:
|
||||
self.do_popup(event)
|
||||
return True
|
||||
|
||||
def on_vte_popup_menu(self, term):
|
||||
pass
|
||||
|
||||
def grab_focus(self):
|
||||
self._vte.grab_focus()
|
||||
|
||||
class TerminalActivity(Activity):
|
||||
def __init__(self):
|
||||
Activity.__init__(self)
|
||||
|
||||
self.set_title("Terminal")
|
||||
|
||||
terminal = Terminal()
|
||||
self.add(terminal)
|
||||
terminal.show()
|
||||
|
||||
terminal.grab_focus()
|
@ -1,5 +0,0 @@
|
||||
[Activity]
|
||||
name = Terminal
|
||||
icon = activity-terminal
|
||||
id = org.sugar.Terminal
|
||||
python_module = terminal.TerminalActivity.TerminalActivity
|
@ -1,12 +0,0 @@
|
||||
sugardir = $(pkgdatadir)/activities/web
|
||||
sugar_PYTHON = \
|
||||
__init__.py \
|
||||
linkscontroller.py \
|
||||
linksmodel.py \
|
||||
linksview.py \
|
||||
stylesheet.py \
|
||||
toolbar.py \
|
||||
webactivity.py \
|
||||
webbrowser.py
|
||||
|
||||
EXTRA_DIST = web.activity
|
@ -1,60 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
from sugar.p2p.Stream import Stream
|
||||
from sugar.presence import PresenceService
|
||||
|
||||
class _Marshaller(object):
|
||||
def __init__(self, title, address):
|
||||
pservice = PresenceService.get_instance()
|
||||
name = pservice.get_owner().get_name()
|
||||
self._message = name + '\n' + title + '\n' + address
|
||||
|
||||
def get_message(self):
|
||||
return self._message
|
||||
|
||||
class _Demarshaller(object):
|
||||
def __init__(self, message):
|
||||
self._pservice = PresenceService.get_instance()
|
||||
self._split_msg = message.split('\n')
|
||||
|
||||
def get_buddy(self):
|
||||
return self._pservice.get_buddy_by_name(self._split_msg[0])
|
||||
|
||||
def get_title(self):
|
||||
return self._split_msg[1]
|
||||
|
||||
def get_address(self):
|
||||
return self._split_msg[2]
|
||||
|
||||
class LinksController(object):
|
||||
def __init__(self, service, model):
|
||||
self._model = model
|
||||
|
||||
self._stream = Stream.new_from_service(service)
|
||||
self._stream.set_data_listener(self._recv_message)
|
||||
self._stream_writer = self._stream.new_writer()
|
||||
|
||||
def post_link(self, title, address):
|
||||
marshaller = _Marshaller(title, address)
|
||||
self._stream_writer.write(marshaller.get_message())
|
||||
|
||||
def _recv_message(self, address, msg):
|
||||
demarshaller = _Demarshaller(msg)
|
||||
buddy = demarshaller.get_buddy()
|
||||
if buddy:
|
||||
self._model.add_link(buddy, demarshaller.get_title(),
|
||||
demarshaller.get_address())
|
@ -1,51 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gobject
|
||||
|
||||
class Link(object):
|
||||
def __init__(self, buddy, title, url):
|
||||
self.buddy = buddy
|
||||
self.title = title
|
||||
self.url = url
|
||||
|
||||
class LinksModel(gobject.GObject):
|
||||
__gsignals__ = {
|
||||
'link-added': (gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
|
||||
'link-removed': (gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])),
|
||||
}
|
||||
|
||||
def __init__(self):
|
||||
gobject.GObject.__init__(self)
|
||||
self._links = {}
|
||||
|
||||
def add_link(self, buddy, title, url):
|
||||
link = Link(buddy, title, url)
|
||||
self._links[(buddy.get_name(), url)] = link
|
||||
|
||||
self.emit('link-added', link)
|
||||
|
||||
def remove_link(self, buddy, url):
|
||||
key = (buddy.get_name(), url)
|
||||
if self._links.haskey(key):
|
||||
link = self._links[key]
|
||||
del self._links[key]
|
||||
self.emit('link-removed', link)
|
||||
|
||||
def __iter__(self):
|
||||
return self._links.values().__iter__()
|
@ -1,83 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gtk
|
||||
import hippo
|
||||
|
||||
from sugar.graphics.menu import Menu
|
||||
from sugar.graphics.menushell import MenuShell
|
||||
from sugar.graphics.menuicon import MenuIcon
|
||||
from sugar.graphics.iconcolor import IconColor
|
||||
from sugar.graphics import style
|
||||
|
||||
class LinkIcon(MenuIcon):
|
||||
def __init__(self, menu_shell, link):
|
||||
color = IconColor(link.buddy.get_color())
|
||||
MenuIcon.__init__(self, menu_shell, color=color,
|
||||
icon_name='activity-web')
|
||||
|
||||
self._link = link
|
||||
|
||||
def create_menu(self):
|
||||
menu = Menu(self._link.title)
|
||||
return menu
|
||||
|
||||
class LinksView(hippo.Canvas):
|
||||
def __init__(self, model, browser):
|
||||
hippo.Canvas.__init__(self)
|
||||
|
||||
self._icons = {}
|
||||
self._browser = browser
|
||||
self._menu_shell = MenuShell(self)
|
||||
|
||||
self._box = hippo.CanvasBox()
|
||||
style.apply_stylesheet(self._box, 'links.Box')
|
||||
self.set_root(self._box)
|
||||
|
||||
for link in model:
|
||||
self._add_link(link)
|
||||
|
||||
model.connect('link_added', self._link_added_cb)
|
||||
model.connect('link_removed', self._link_removed_cb)
|
||||
|
||||
def _add_link(self, link):
|
||||
if len(self._icons) == 0:
|
||||
self.show()
|
||||
|
||||
icon = LinkIcon(self._menu_shell, link)
|
||||
icon.connect('activated', self._link_activated_cb, link)
|
||||
style.apply_stylesheet(icon, 'links.Icon')
|
||||
self._box.append(icon)
|
||||
|
||||
self._icons[link] = icon
|
||||
|
||||
def _remove_link(self, link):
|
||||
icon = self._icons[link]
|
||||
self._box.remove(icon)
|
||||
|
||||
del self._icons[link]
|
||||
|
||||
if len(self._icons) == 0:
|
||||
self.hide()
|
||||
|
||||
def _link_added_cb(self, model, link):
|
||||
self._add_link(link)
|
||||
|
||||
def _link_removed_cb(self, model, link):
|
||||
self._remove_link(link)
|
||||
|
||||
def _link_activated_cb(self, link_item, link):
|
||||
self._browser.load_url(link.url)
|
@ -1,27 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gtk
|
||||
|
||||
from sugar.graphics import style
|
||||
|
||||
links_Icon = {
|
||||
'size' : style.standard_icon_size
|
||||
}
|
||||
|
||||
links_Box = {
|
||||
'background_color' : 0x414141ff,
|
||||
}
|
@ -1,148 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gtk
|
||||
|
||||
from _sugar import AddressEntry
|
||||
|
||||
class Toolbar(gtk.Toolbar):
|
||||
def __init__(self, embed):
|
||||
gtk.Toolbar.__init__(self)
|
||||
|
||||
self.set_style(gtk.TOOLBAR_BOTH_HORIZ)
|
||||
|
||||
self._insert_spring()
|
||||
|
||||
self._back = gtk.ToolButton()
|
||||
self._back.props.sensitive = False
|
||||
self._back.set_icon_name('stock-back')
|
||||
self._back.connect("clicked", self._go_back_cb)
|
||||
self.insert(self._back, -1)
|
||||
self._back.show()
|
||||
|
||||
self._forward = gtk.ToolButton()
|
||||
self._forward.props.sensitive = False
|
||||
self._forward.set_icon_name('stock-forward')
|
||||
self._forward.connect("clicked", self._go_forward_cb)
|
||||
self.insert(self._forward, -1)
|
||||
self._forward.show()
|
||||
|
||||
self._stop_and_reload = gtk.ToolButton()
|
||||
self._forward.props.sensitive = False
|
||||
self._stop_and_reload.connect("clicked", self._stop_and_reload_cb)
|
||||
self.insert(self._stop_and_reload, -1)
|
||||
self._stop_and_reload.show()
|
||||
|
||||
separator = gtk.SeparatorToolItem()
|
||||
separator.set_draw(False)
|
||||
self.insert(separator, -1)
|
||||
separator.show()
|
||||
|
||||
address_item = gtk.ToolItem()
|
||||
|
||||
self._entry = AddressEntry()
|
||||
self._entry.connect("activate", self._entry_activate_cb)
|
||||
|
||||
width = int(gtk.gdk.screen_width() / 1.8)
|
||||
self._entry.set_size_request(width, -1)
|
||||
|
||||
address_item.add(self._entry)
|
||||
self._entry.show()
|
||||
|
||||
self.insert(address_item, -1)
|
||||
address_item.show()
|
||||
|
||||
separator = gtk.SeparatorToolItem()
|
||||
separator.set_draw(False)
|
||||
self.insert(separator, -1)
|
||||
separator.show()
|
||||
|
||||
self._post = gtk.ToolButton()
|
||||
self._post.props.sensitive = False
|
||||
self._post.set_icon_name('stock-add')
|
||||
self._post.connect("clicked", self._post_cb)
|
||||
self.insert(self._post, -1)
|
||||
self._post.show()
|
||||
|
||||
self._insert_spring()
|
||||
|
||||
self._embed = embed
|
||||
self._embed.connect("notify::progress", self._progress_changed_cb)
|
||||
self._embed.connect("notify::loading", self._loading_changed_cb)
|
||||
self._embed.connect("notify::address", self._address_changed_cb)
|
||||
self._embed.connect("notify::title", self._title_changed_cb)
|
||||
self._embed.connect("notify::can-go-back",
|
||||
self._can_go_back_changed_cb)
|
||||
self._embed.connect("notify::can-go-forward",
|
||||
self._can_go_forward_changed_cb)
|
||||
|
||||
self._update_stop_and_reload_icon()
|
||||
|
||||
def set_links_controller(self, links_controller):
|
||||
self._links_controller = links_controller
|
||||
self._post.props.sensitive = True
|
||||
|
||||
def _update_stop_and_reload_icon(self):
|
||||
if self._embed.props.loading:
|
||||
self._stop_and_reload.set_icon_name('stock-close')
|
||||
else:
|
||||
self._stop_and_reload.set_icon_name('stock-continue')
|
||||
|
||||
def _progress_changed_cb(self, embed, spec):
|
||||
self._entry.props.progress = embed.props.progress
|
||||
|
||||
def _loading_changed_cb(self, embed, spec):
|
||||
self._update_stop_and_reload_icon()
|
||||
|
||||
def _address_changed_cb(self, embed, spec):
|
||||
self._entry.props.address = embed.props.address
|
||||
|
||||
def _title_changed_cb(self, embed, spec):
|
||||
self._entry.props.title = embed.props.title
|
||||
|
||||
def _can_go_back_changed_cb(self, embed, spec):
|
||||
self._back.props.sensitive = embed.props.can_go_back
|
||||
|
||||
def _can_go_forward_changed_cb(self, embed, spec):
|
||||
self._forward.props.sensitive = embed.props.can_go_forward
|
||||
|
||||
def _entry_activate_cb(self, entry):
|
||||
self._embed.load_url(entry.get_text())
|
||||
self._embed.grab_focus()
|
||||
|
||||
def _go_back_cb(self, button):
|
||||
self._embed.go_back()
|
||||
|
||||
def _go_forward_cb(self, button):
|
||||
self._embed.go_forward()
|
||||
|
||||
def _stop_and_reload_cb(self, button):
|
||||
if self._embed.props.loading:
|
||||
self._embed.stop_load()
|
||||
else:
|
||||
self._embed.reload(0)
|
||||
|
||||
def _post_cb(self, button):
|
||||
title = self._embed.get_title()
|
||||
address = self._embed.get_location()
|
||||
self._links_controller.post_link(title, address)
|
||||
|
||||
def _insert_spring(self):
|
||||
separator = gtk.SeparatorToolItem()
|
||||
separator.set_draw(False)
|
||||
separator.set_expand(True)
|
||||
self.insert(separator, -1)
|
||||
separator.show()
|
@ -1,6 +0,0 @@
|
||||
[Activity]
|
||||
name = Web
|
||||
id = org.laptop.WebActivity
|
||||
icon = activity-web
|
||||
python_module = web.webactivity.WebActivity
|
||||
show_launcher = yes
|
@ -1,138 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
from gettext import gettext as _
|
||||
import gtk
|
||||
import gtkmozembed
|
||||
import logging
|
||||
import dbus
|
||||
|
||||
import _sugar
|
||||
from sugar.activity import ActivityFactory
|
||||
from sugar.activity.Activity import Activity
|
||||
from sugar.clipboard import ClipboardService
|
||||
from sugar import env
|
||||
from sugar.graphics import style
|
||||
import web.stylesheet
|
||||
from webbrowser import WebBrowser
|
||||
from toolbar import Toolbar
|
||||
from linksmodel import LinksModel
|
||||
from linksview import LinksView
|
||||
from linkscontroller import LinksController
|
||||
|
||||
_HOMEPAGE = 'http://www.google.com'
|
||||
|
||||
class WebActivity(Activity):
|
||||
def __init__(self, browser=None):
|
||||
Activity.__init__(self)
|
||||
|
||||
logging.debug('Starting the web activity')
|
||||
|
||||
self.set_title(_('Web Activity'))
|
||||
|
||||
vbox = gtk.VBox()
|
||||
|
||||
if browser:
|
||||
self._browser = browser
|
||||
else:
|
||||
self._browser = WebBrowser()
|
||||
self._browser.connect('notify::title', self._title_changed_cb)
|
||||
|
||||
self._links_model = LinksModel()
|
||||
links_view = LinksView(self._links_model, self._browser)
|
||||
|
||||
self._toolbar = Toolbar(self._browser)
|
||||
vbox.pack_start(self._toolbar, False)
|
||||
self._toolbar.show()
|
||||
|
||||
hbox = gtk.HBox()
|
||||
|
||||
hbox.pack_start(links_view, False)
|
||||
hbox.pack_start(self._browser)
|
||||
self._browser.show()
|
||||
|
||||
vbox.pack_start(hbox)
|
||||
hbox.show()
|
||||
|
||||
self.add(vbox)
|
||||
vbox.show()
|
||||
|
||||
self._browser.load_url(_HOMEPAGE)
|
||||
|
||||
def _setup_links_controller(self):
|
||||
links_controller = LinksController(self._service, self._links_model)
|
||||
self._toolbar.set_links_controller(links_controller)
|
||||
|
||||
def join(self, activity_ps):
|
||||
Activity.join(self, activity_ps)
|
||||
|
||||
self._setup_links_controller()
|
||||
|
||||
url = self._service.get_published_value('URL')
|
||||
if url:
|
||||
self._browser.load_url(url)
|
||||
|
||||
def share(self):
|
||||
Activity.share(self)
|
||||
|
||||
self._setup_links_controller()
|
||||
|
||||
url = self._browser.get_location()
|
||||
if url:
|
||||
self._service.set_published_value('URL', url)
|
||||
|
||||
def _title_changed_cb(self, embed, pspec):
|
||||
self.set_title(embed.props.title)
|
||||
|
||||
def start():
|
||||
gtkmozembed.set_profile_path(env.get_profile_path(), 'gecko')
|
||||
|
||||
gtkmozembed.push_startup()
|
||||
if not _sugar.startup_browser():
|
||||
raise "Error when initializising the web activity."
|
||||
|
||||
style.load_stylesheet(web.stylesheet)
|
||||
|
||||
download_manager = _sugar.get_download_manager()
|
||||
download_manager.connect('download-started', download_started_cb)
|
||||
download_manager.connect('download-completed', download_completed_cb)
|
||||
download_manager.connect('download-cancelled', download_started_cb)
|
||||
download_manager.connect('download-progress', download_progress_cb)
|
||||
|
||||
def stop():
|
||||
gtkmozembed.pop_startup()
|
||||
|
||||
def download_started_cb(download_manager, download):
|
||||
name = download.get_url().rsplit('/', 1)[1]
|
||||
|
||||
cbService = ClipboardService.get_instance()
|
||||
cbService.add_object(name,
|
||||
download.get_mime_type(),
|
||||
download.get_file_name())
|
||||
|
||||
def download_completed_cb(download_manager, download):
|
||||
cbService = ClipboardService.get_instance()
|
||||
cbService.set_object_state(download.get_file_name(), 100)
|
||||
|
||||
def download_cancelled_cb(download_manager, download):
|
||||
#FIXME: Needs to update the state of the object to 'download stopped'.
|
||||
#FIXME: Will do it when we complete progress on the definition of the
|
||||
#FIXME: clipboard API.
|
||||
raise "Cancelling downloads still not implemented."
|
||||
|
||||
def download_progress_cb(download_manager, download):
|
||||
cbService = ClipboardService.get_instance()
|
||||
cbService.set_object_state(download.get_file_name(), download.get_percent())
|
@ -1,97 +0,0 @@
|
||||
# Copyright (C) 2006, Red Hat, Inc.
|
||||
#
|
||||
# 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
|
||||
|
||||
import gobject
|
||||
import gtk
|
||||
import logging
|
||||
|
||||
from _sugar import Browser
|
||||
from _sugar import PushScroller
|
||||
|
||||
class _PopupCreator(gobject.GObject):
|
||||
__gsignals__ = {
|
||||
'popup-created': (gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE, ([])),
|
||||
}
|
||||
|
||||
def __init__(self, parent_window):
|
||||
gobject.GObject.__init__(self)
|
||||
|
||||
logging.debug('Creating the popup widget')
|
||||
|
||||
self._sized_popup = False
|
||||
self._parent_window = parent_window
|
||||
|
||||
self._dialog = gtk.Window()
|
||||
self._dialog.set_resizable(True)
|
||||
|
||||
self._dialog.realize()
|
||||
self._dialog.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG)
|
||||
|
||||
self._embed = Browser()
|
||||
self._size_to_sid = self._embed.connect('size_to', self._size_to_cb)
|
||||
self._vis_sid = self._embed.connect('visibility', self._visibility_cb)
|
||||
|
||||
self._dialog.add(self._embed)
|
||||
|
||||
def _size_to_cb(self, embed, width, height):
|
||||
logging.debug('Resize the popup to %d %d' % (width, height))
|
||||
self._sized_popup = True
|
||||
self._dialog.resize(width, height)
|
||||
|
||||
def _visibility_cb(self, embed, visible):
|
||||
if visible:
|
||||
if self._sized_popup:
|
||||
logging.debug('Show the popup')
|
||||
self._embed.show()
|
||||
self._dialog.set_transient_for(self._parent_window)
|
||||
self._dialog.show()
|
||||
else:
|
||||
logging.debug('Open a new activity for the popup')
|
||||
self._dialog.remove(self._embed)
|
||||
|
||||
# FIXME We need a better way to handle this.
|
||||
# It seem like a pretty special case though, I doubt
|
||||
# other activities will need something similar.
|
||||
from web.webactivity import WebActivity
|
||||
activity = WebActivity(self._embed)
|
||||
activity.set_type('org.laptop.WebActivity')
|
||||
|
||||
self._embed.disconnect(self._size_to_sid)
|
||||
self._embed.disconnect(self._vis_sid)
|
||||
|
||||
self.emit('popup-created')
|
||||
|
||||
def get_embed(self):
|
||||
return self._embed
|
||||
|
||||
class WebBrowser(Browser):
|
||||
__gtype_name__ = "SugarWebBrowser"
|
||||
|
||||
def __init__(self):
|
||||
Browser.__init__(self)
|
||||
self._popup_creators = []
|
||||
|
||||
def do_create_window(self):
|
||||
popup_creator = _PopupCreator(self.get_toplevel())
|
||||
popup_creator.connect('popup-created', self._popup_created_cb)
|
||||
|
||||
self._popup_creators.append(popup_creator)
|
||||
|
||||
return popup_creator.get_embed()
|
||||
|
||||
def _popup_created_cb(self, creator):
|
||||
self._popup_creators.remove(creator)
|
@ -51,10 +51,6 @@ AM_GLIB_GNU_GETTEXT
|
||||
AC_OUTPUT([
|
||||
Makefile
|
||||
dbus-installed.conf
|
||||
activities/Makefile
|
||||
activities/web/Makefile
|
||||
activities/chat/Makefile
|
||||
activities/terminal/Makefile
|
||||
lib/Makefile
|
||||
lib/data/Makefile
|
||||
lib/src/Makefile
|
||||
|
Loading…
Reference in New Issue
Block a user