diff options
author | root <root@ghunt-desktop.(none)> | 2010-04-23 17:53:01 (GMT) |
---|---|---|
committer | root <root@ghunt-desktop.(none)> | 2010-04-23 17:53:01 (GMT) |
commit | 91384302ef04ee915a9a80f9efa0215836975473 (patch) | |
tree | 78c330a1091ce2ef82f48f51357790b42fde5a6f /help_pd.py.x11 | |
parent | 0378b3d4fb15f29752431b7477b69091797dfb74 (diff) |
second try to get git to track the files I care about
Diffstat (limited to 'help_pd.py.x11')
-rw-r--r-- | help_pd.py.x11 | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/help_pd.py.x11 b/help_pd.py.x11 new file mode 100644 index 0000000..a33785e --- /dev/null +++ b/help_pd.py.x11 @@ -0,0 +1,274 @@ +# 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 +# +#NOTE: The webview module shipped with FC11 does a get_Main_window.hide() +# which makes it unusable in the PyDebug application. A more recent git version +# toggles the visibility of the gecko engine and is more compatible. +# The browser.py and webview.py modules included are essential for PyDebug +# +import os +from subprocess import Popen, PIPE + +from gettext import gettext as _ + +import gtk +import gobject +#import glib +import wnck +from time import time +from sugar import util + +from sugar.activity import activity +from sugar.graphics.toolbox import Toolbox +from sugar.activity.activityhandle import ActivityHandle +from sugar.graphics.toolbutton import ToolButton +from sugar.graphics.window import Window +from sugar import wm +#from IPython.Debugger import Tracer +from pdb import * + +import hulahop +hulahop.startup(os.path.join(activity.get_activity_root(), 'data/gecko')) +import pytoolbar +import notebook + +#from hulahop.webview import WebView +from browser import Browser +#import xpcom +#from xpcom.components import interfaces + +gobject.threads_init() + +#HOME = os.path.join(activity.get_bundle_path(), 'help/index.html') +#HOME = "http://website.com/something.html" +HELP_PANE = 3 + +# Initialize logging. +import logging +#from sugar import logger +#Get the standard logging directory. +_logger = logging.getLogger('PyDebug') + + +sugar_activity_root = os.environ['SUGAR_ACTIVITY_ROOT'] +help_notebook_pages = [] + +class HelpToolbar(gtk.Toolbar): + def __init__(self, parent): + gtk.Toolbar.__init__(self) + self.help_toolbar_parent = parent + self.child_root = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'],'tmp') + + self._back = ToolButton('go-previous-paired') + self._back.set_tooltip(_('Back')) + self._back.props.sensitive = False + self._back.connect('clicked', self.help_toolbar_parent._go_back_cb) + self.insert(self._back, -1) + self._back.show() + + self._forward = ToolButton('go-next-paired') + self._forward.set_tooltip(_('Forward')) + self._forward.props.sensitive = False + self._forward.connect('clicked', self.help_toolbar_parent._go_forward_cb) + self.insert(self._forward, -1) + self._forward.show() + + home = ToolButton('zoom-home') + home.set_tooltip(_('Home')) + home.connect('clicked', self.help_toolbar_parent._go_home_cb) + self.insert(home, -1) + home.show() + +class Help(Window): + current_url_prefix = '' + file_changed = False + current_web_view = None + web_view_list = [] + pywin = None + def __init__(self, parent): + self.pydebug = parent + self.handle = ActivityHandle() + #self._forward.connect('clicked', self.help_toolbar_parent._go_forward_cb) + self.handle.activity_id = util.unique_id() + Window.__init__(self) + self.parent_x11 = None + self.url_root = 'file://'+ self.pydebug.sugar_bundle_path +"/"+_('help/PyDebug.htm') + + #set up tool box/menu buttonsself.help + self.toolbox = Toolbox() + self.toolbox.connect('current_toolbar_changed',self.goto_cb) + + activitybar = gtk.Toolbar() + self.toolbox.add_toolbar(_('Activity'), activitybar) + activitybar.show_all() + + editbar = gtk.Toolbar() + self.toolbox.add_toolbar(_('Edit'), editbar) + #editbar.connect('current_toolbar_changed', self.goto_cb,1) + editbar.show_all() + + projectbar = gtk.Toolbar() + self.toolbox.add_toolbar(_('Project'), projectbar) + #projectbar.connect('current_toolbar_changed', self.goto_cb,2) + projectbar.show_all() + + self.help_toolbar = HelpToolbar(self) + self.help_toolbar.show() + self.toolbox.add_toolbar(_('Help'), self.help_toolbar) + self.toolbox._notebook.set_current_page(HELP_PANE) + + + self.set_toolbox(self.toolbox) + self.toolbox.show() + + self.first_webview = self.new_tab(self.url_root) + self.web_view_list.append(self.first_webview) + self.current_web_view = self.first_webview + #self.first_webview.load_uri(self.url_root) + self.set_canvas(self._get_help_notebook()) + self.connect('realize',self.realize_cb) + + #self.pywin = self.pydebug.window.window + + + def realize_help(self): + _logger.debug('realize help called') + self.show_all() + return self + + def realize_cb(self, window): + self.help_id = util.unique_id() + wm.set_activity_id(window.window, self.help_id) + + def activate_help(self): + _logger.debug('activate_help called') + window = self.get_wnck_window_from_activity_id(self.help_id) + if window: + window.activate(gtk.get_current_event_time()) + + def command_line(self,cmd): + _logger.debug('command_line cmd:%s'%cmd) + p1 = Popen(cmd,stdout=PIPE, shell=True) + output = p1.communicate() + if p1.returncode != 0: + self.alert(' command returned non zero\n'+output[0]) + return None + return output[0] + + def sugar_version(self): + cmd = '/bin/rpm -q sugar' + reply = self.command_line(cmd) + if reply and reply.find('sugar') > -1: + version = reply.split('-')[1] + version_chunks = version.split('.') + major_minor = version_chunks[0] + '.' + version_chunks[1] + return major_minor + return None + + def get_wnck_window_from_activity_id(self, activity_id): + """Use shell model to look up the wmck window associated with activity_id + --the home_model code changed between .82 and .84 sugar + --so do the lookup differently depending on sugar version + """ + if self.sugar_version() >= .84: + from jarabe.model import shell + home_model = shell.get_model() + activity = home_model.get_activity_by_id(activity_id) + else: + if not '/usr/share/sugar/shell/' in sys.path: + sys.path.append('/usr/share/sugar/shell/') + import shellmodel + instance = shellmodel.get_instance() + home_model = instance.get_home() + activity = home_model._get_activity_by_id(activity_id) + if activity: + return activity.get_window() + else: + _logger.debug('wnck_window was none') + return None + + def goto_cb(self, page, tab): + _logger.debug('current_toolbar_changed event called goto_cb. tab: %s'%tab) + if tab == HELP_PANE: return + self.pydebug.set_toolbar(tab) + self.pywin = self.get_wnck_window_from_activity_id(str(self.pydebug.handle.activity_id)) + if self.pywin: + self.pywin.activate(gtk.get_current_event_time()) + """ + def delay(self, msec): + end = time() + msec / 1000.0 + while time() < end: + glib.MainContext.iteration(may_block=False) + """ + def _get_help_canvas(self): + nb = gtk.Notebook() + nb.show() + nb.append_page(self.first_webview) + return nb + + def _get_help_notebook(self): + nb = notebook.Notebook( can_close_tabs=True) + nb.show() + nb.append_page(self.first_webview) + self.help_notebook = nb + return nb + + def new_tab(self,url = None): + if url == None: + url = self.url_root + self._web_view = Browser() + _logger.debug('loading new tab with url: %s' % url ) + self._web_view.load_uri(url) + self._web_view.connect('destroy',self._web_view.hide) + self.current_url = url + self._web_view.show() + progress_listener = self._web_view.progress + progress_listener.connect('location-changed', + self._location_changed_cb) + progress_listener.connect('loading-stop', self._loading_stop_cb) + + return self._web_view + + def get_help_toolbar(self): + return self.help_toolbar + + def repaint(self): + self._web_view.load_uri(self.current_url) + + def get_first_webview(self): + return self.first_webview + + def _location_changed_cb(self, progress_listener, uri): + self.update_navigation_buttons() + + def _loading_stop_cb(self, progress_listener): + self.update_navigation_buttons() + + def update_navigation_buttons(self): + can_go_back = self.current_web_view.web_navigation.canGoBack + self.help_toolbar._back.props.sensitive = can_go_back + + can_go_forward = self.current_web_view.web_navigation.canGoForward + self.help_toolbar._forward.props.sensitive = can_go_forward + + def _go_back_cb(self, button): + self.current_web_view.web_navigation.goBack() + + def _go_forward_cb(self, button): + self.current_web_view.web_navigation.goForward() + + def _go_home_cb(self, button): + self.current_web_view.load_uri(self.url_root) + + |