Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@ghunt-desktop.(none)>2010-11-15 04:40:21 (GMT)
committer root <root@ghunt-desktop.(none)>2010-11-15 04:40:21 (GMT)
commit0b27ac481cdd8695e87908baf538350b28229376 (patch)
treef26a40ba016fe04862bf327ca869758aaf760d15
parent8e4465bd5598173eaccf228b95450a1c156834b7 (diff)
navigation buttons in help on earlier builds work, fixes for build 802,767
-rw-r--r--bin/continue_debug.py2
-rw-r--r--bin/start_debug.py27
-rw-r--r--editor_gui.py18
-rw-r--r--filetree.py28
-rw-r--r--help.py85
-rw-r--r--page.py39
-rw-r--r--progresslistener.py1
-rw-r--r--project_gui.py38
-rw-r--r--pydebug.py14
-rw-r--r--terminal.py7
-rw-r--r--terminal_gui.py3
11 files changed, 208 insertions, 54 deletions
diff --git a/bin/continue_debug.py b/bin/continue_debug.py
index 8dbb2f2..0a887d8 100644
--- a/bin/continue_debug.py
+++ b/bin/continue_debug.py
@@ -133,7 +133,7 @@ _logger.debug('xmode set to %s'%xmode)
#put module in top level namespace so it can be dreload()-ed
exec 'import ' + debugee_module
-exec 'reload(%s)'%debugee_module
+#exec 'reload(%s)'%debugee_module
""" if this were to work properly we should set go equal to object Macro
go_cmd = 'run -d -b %s %s'%(os.path.join(db.pydebug_path,'bin','start_debug.py'),child_path)
diff --git a/bin/start_debug.py b/bin/start_debug.py
index c5c067c..36385f0 100644
--- a/bin/start_debug.py
+++ b/bin/start_debug.py
@@ -17,25 +17,27 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import os
+from gettext import gettext as _
# Initialize logging.
import logging
_logger = logging.getLogger('PyDebug')
-_logger.setLevel(logging.DEBUG)
+_logger.setLevel(logging.INFO)
#establish a remote procedure call pipe connection with the PyDebug process
from Rpyc import SocketConnection
try:
c = SocketConnection('localhost')
db = c.modules.pydebug.pydebug_instance
-except AttributeError:
- _logger.error('cannot connect to localhost')
+#except AttributeError:
+# _logger.error('cannot connect to localhost')
except Exception, e:
+ _logger.exception('cannot connect to localhost')
print 'Rpyc connection failed'
print(str(e))
assert False
pydebug_path = db.pydebug_path
-print('./bin/start_debug.py established connectioon. pydebug path: %s'%pydebug_path)
+_logger.debug('./bin/start_debug.py established connectioon. pydebug path: %s'%pydebug_path)
#these alternative definitions are required for ipython v0.11 and greater
#define interface with the command line ipython instance
@@ -49,12 +51,14 @@ from IPython.macro import Macro
ip = ipapi.get()
#define macros, one which sets pdb on, the other off
-if not ip.user_ns.has_key('gb'):
+trace_cmd = _('trace')
+if not ip.user_ns.has_key(trace_cmd):
cmd = 'run -b 242 -d %s\n'% os.path.join(pydebug_path,'bin','continue_debug.py')
- ip.user_ns['gb'] = Macro(cmd)
-if not ip.user_ns.has_key('go'):
+ ip.user_ns[trace_cmd] = Macro(cmd)
+go_cmd = _('go')
+if not ip.user_ns.has_key(go_cmd):
cmd = 'run %s\n'% os.path.join(pydebug_path,'bin','continue_debug.py')
- ip.user_ns['go'] = Macro(cmd)
+ ip.user_ns[go_cmd] = Macro(cmd)
if not ip.user_ns.has_key('pi'):
cmd = 'for k in _margv[0].__dict__.keys(): print "_margv[0]",k,"=",_margv[0].__dict__[k]\n'
ip.user_ns['pi'] = Macro(cmd)
@@ -63,4 +67,9 @@ if not ip.user_ns.has_key('ps'):
ip.user_ns['ps'] = Macro(cmd)
#change the directory to the child_path
-os.chdir(db.child_path) \ No newline at end of file
+child_path = db.child_path
+if child_path:
+ os.chdir(child_path)
+else:
+ os.chdir(db.activity_playpen)
+ \ No newline at end of file
diff --git a/editor_gui.py b/editor_gui.py
index 9bba2a0..86625c4 100644
--- a/editor_gui.py
+++ b/editor_gui.py
@@ -151,12 +151,12 @@ class EditorGui(GtkSourceview2Editor):
#editpaste.props.accelerator = '<Ctrl>V'
editpaste.show()
self.editbar.insert(editpaste, -1)
-
+ """
separator = gtk.SeparatorToolItem()
separator.set_draw(True)
separator.show()
self.editbar.insert(separator, -1)
-
+ """
editfind = ToolButton('viewmag1')
editfind.set_tooltip(_('Find and Replace'))
editfind.connect('clicked', self.show_find)
@@ -164,12 +164,12 @@ class EditorGui(GtkSourceview2Editor):
#editfind.props.accelerator = '<Ctrl>F'
editfind.show()
self.editbar.insert(editfind, -1)
-
+ """
separator = gtk.SeparatorToolItem()
separator.set_draw(True)
separator.show()
self.editbar.insert(separator, -1)
-
+ """
self.zoomout = ToolButton('zoom-out')
self.zoomout.set_tooltip(_('Zoom out'))
self.zoomout.connect('clicked', self.__zoomout_clicked_cb)
@@ -182,8 +182,18 @@ class EditorGui(GtkSourceview2Editor):
self.editbar.insert(self.zoomin, -1)
self.zoomin.show()
+ stop_button = ToolButton('activity-stop')
+ stop_button.set_tooltip(_('Stop'))
+ #stop_button.props.accelerator = '<Ctrl>Q'
+ stop_button.connect('clicked', self.__stop_clicked_cb)
+ self.editbar.insert(stop_button, -1)
+ stop_button.show()
+
self.editbar.show_all()
+ def __stop_clicked_cb(self, button):
+ self._activity.py_stop()
+
def get_editbar(self):
"""return reference for placing on the Sugar main menu notebook"""
diff --git a/filetree.py b/filetree.py
index c02f329..e0d31f3 100644
--- a/filetree.py
+++ b/filetree.py
@@ -25,7 +25,7 @@ import gtk.glade
#import pydebug
#from pydebug import pydebug_instance
-class FileTree():
+class FileTree:
column_names = [_('Name'), _('Size'), _('Last Changed')]
def __init__(self,parent,widget=None,wTree=None):
@@ -55,8 +55,32 @@ class FileTree():
self.treeview = gtk.TreeView()
self.treeview.set_model(self.ft_model)
self.treeview.show()
- #self.treeview.set_tooltip_column(4)
+ #the following line was probably disabled for compatibility with earlier sugar
+ #search for TOOLTIP to find problem areas
+ if self.parent.sugar_minor >= 82:
+ self.treeview.set_tooltip_column(4)
+ else:
+ # assign the tooltip
+ tips = gtk.Tooltips()
+ tips.set_tip(self.treeview, "")
+ self.treeview.connect("motion-notify-event",self.show_tooltip, tips, 4) # <---
+ self.treeview.set_events( gtk.gdk.POINTER_MOTION_MASK )
self.show_hidden = False
+
+ def show_tooltip(self, widget, event, tooltips, cell, emptytext='no information'):
+ """
+ If emptyText is None, the cursor has to enter widget from a side
+ that contains an item, otherwise no tooltip will be displayed. """
+
+ try:
+ (path,col,x,y) = widget.get_path_at_pos( int(event.x), int(event.y) )
+ it = widget.get_model().get_iter(path)
+ value = widget.get_model().get_value(it,cell)
+ tooltips.set_tip(widget, value)
+ tooltips.enable()
+ except:
+ _logger.exception('show_tooltip exception')
+ tooltips.set_tip(widget, emptytext)
def init_columns(self):
col = gtk.TreeViewColumn()
diff --git a/help.py b/help.py
index cd6a5fc..d078657 100644
--- a/help.py
+++ b/help.py
@@ -34,6 +34,13 @@ from sugar import wm, env
from pdb import *
from sugar.graphics.toolbutton import ToolButton
import hulahop
+hulahop.startup(os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data/gecko'))
+import xpcom
+from xpcom.nsError import *
+#from xpcom import components
+#from xpcom.components import interfaces
+from browser import Browser
+from xpcom.components import interfaces
gobject.threads_init()
@@ -46,10 +53,12 @@ _logger = logging.getLogger('PyDebug')
class Help(Window):
def __init__(self, parent):
self.pydebug = parent
- hulahop.startup(os.path.join(parent.debugger_home, 'gecko'))
- from browser import Browser
- import xpcom
- from xpcom.components import interfaces
+
+ if version < 0.838:
+ from hulahop.webview import WebView as Browser
+ else:
+ from browser import Browser
+
self.help_id = None
self.handle = ActivityHandle()
self.handle.activity_id = util.unique_id()
@@ -114,9 +123,9 @@ class Help(Window):
def activate_help(self):
_logger.debug('activate_help called')
self.help_window.show()
+ self.toolbox._notebook.set_current_page(HELP_PANE)
if version < 0.838: return
window = self.get_wnck_window_from_activity_id(self.help_id)
- self.toolbox._notebook.set_current_page(HELP_PANE)
if window:
window.activate(gtk.get_current_event_time())
else:
@@ -175,7 +184,7 @@ class Toolbar(gtk.Toolbar):
def __init__(self, parent, web_view):
gobject.GObject.__init__(self)
- self._activity = parent
+ self._help = parent
self._web_view = web_view
self._back = ToolButton('go-previous-paired')
@@ -198,13 +207,42 @@ class Toolbar(gtk.Toolbar):
self.insert(home, -1)
home.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)
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ separator.set_expand(True)
+ self.insert(separator, -1)
+ separator.show()
+
+ stop_button = ToolButton('activity-stop')
+ stop_button.set_tooltip(_('Stop'))
+ #stop_button.props.accelerator = '<Ctrl>Q'
+ stop_button.connect('clicked', self.__stop_clicked_cb)
+ self.insert(stop_button, -1)
+ stop_button.show()
+
+ if version < 0.838:
+ self._listener = xpcom.server.WrapObject(EarlyListener(self),
+ interfaces.nsIWebProgressListener)
+ weak_ref = xpcom.client.WeakReference(self._listener)
+
+ mask = interfaces.nsIWebProgress.NOTIFY_STATE_NETWORK | \
+ interfaces.nsIWebProgress.NOTIFY_LOCATION
+ self._web_view.web_progress.addProgressListener(self._listener, mask)
+ else:
+
+ progress_listener = self._web_view.progress
+ progress_listener.connect('location-changed',
+ self._location_changed_cb)
+ progress_listener.connect('loading-stop', self._loading_stop_cb)
+
+
+ def __stop_clicked_cb(self, button):
+ self._help.pydebug.py_stop()
+
def _location_changed_cb(self, progress_listener, uri):
self.update_navigation_buttons()
+ _logger.debug('location change cb')
def _loading_stop_cb(self, progress_listener):
self.update_navigation_buttons()
@@ -223,8 +261,33 @@ class Toolbar(gtk.Toolbar):
self._web_view.web_navigation.goForward()
def _go_home_cb(self, button):
- self._web_view.load_uri(self._activity.HOME)
+ self._web_view.load_uri(self._help.HOME)
+
+class EarlyListener(object):
+ #from xpcom.components import interfaces
+
+ _com_interfaces_ = interfaces.nsIWebProgressListener
+
+ def __init__(self, toolbar):
+ self._toolbar = toolbar
+
+ def onLocationChange(self, webProgress, request, location):
+ self._toolbar.update_navigation_buttons()
+
+ 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_NETWORK:
+ self._toolbar.update_navigation_buttons()
+ def onStatusChange(self, webProgress, request, status, message):
+ pass
+
def command_line(cmd):
_logger.debug('command_line cmd:%s'%cmd)
p1 = Popen(cmd,stdout=PIPE, shell=True)
diff --git a/page.py b/page.py
index d1d5188..7298466 100644
--- a/page.py
+++ b/page.py
@@ -596,10 +596,11 @@ class GtkSourceview2Page(SearchablePage):
return current_line
def left_button_click_on_code_line(self, start_iter, line_end):
- current_line_marks_list = self.get_marks_in_region_in_category(start_iter, line_end, BREAKPOINT_CAT)
+ start = start_iter.copy()
+ current_line_marks_list = self.get_marks_in_region_in_category(start, line_end, BREAKPOINT_CAT)
self._activity.breakpoints_changed = True
for m in current_line_marks_list:
- if self._activity.sugar_minor < 84:
+ if self._activity.sugar_minor < 82:
self.text_buffer.delete_marker(m)
else:
self.text_buffer.delete_mark(m)
@@ -609,15 +610,18 @@ class GtkSourceview2Page(SearchablePage):
self.text_buffer.apply_tag_by_name(BREAKPOINT_CAT, start_iter, line_end)
mark = self.create_mark_universal(BREAKPOINT_CAT, start_iter)
self.breakpoints[self.clicked_line_num] = ''
- _logger.debug('set breakpoint')
+ if mark:
+ _logger.debug('set breakpoint')
+ else:
+ _logger.debug('failed to create mark and set breakpoint')
def create_mark_universal(self, category, start_iter):
- """early sourcview2 has both mark and marker (early)"""
- _logger.debug('created mark at line: %s in category: %s'%(start_iter.get_line() + 1,category,))
- if self._activity.sugar_minor < 84:
- mark = self.text_buffer.create_marker(self.create_category(category), category, start_iter)
+ """early sourcview2 has both mark and marker, very confusing!"""
+ name = self.create_category(category)
+ if self._activity.sugar_minor < 82:
+ mark = self.text_buffer.create_marker(name, category, start_iter)
else:
- mark = self.text_buffer.create_mark(None, category, start_iter)
+ mark = self.text_buffer.create_source_mark(name, category, start_iter)
return mark
@@ -630,13 +634,12 @@ class GtkSourceview2Page(SearchablePage):
#_logger.debug('mark name:%s'%(mark_str,))
return mark_str
- def get_marks_in_region_in_category(self, start_iter, end_iter, category = None):
- """ return marks_list regardless of which version of sugar we have"""
+ def get_marks_in_region_in_category(self, start, end_iter, category = None):
+ """ return marks_list regardless of which version of sugar we have. """
mark_list = []
- if self._activity.sugar_minor < 84:
+ start_iter = start.copy()
+ if self._activity.sugar_minor < 82:
mark_list = self.text_buffer.get_markers_in_region(start_iter, end_iter)
- _logger.debug('len of marks list: %s start line:%s end:%s'%(len(mark_list),\
- start_iter.get_line(),end_iter.get_line()))
if not category:
return mark_list
new_list = []
@@ -646,9 +649,13 @@ class GtkSourceview2Page(SearchablePage):
new_list.append(m)
mark_list = new_list
else:
+ mark_list += self.text_buffer.get_source_marks_at_iter(start_iter, category)
while self.text_buffer.forward_iter_to_source_mark(start_iter, category):
- marks = self.text_buffer.get_marks_at_iter(start_iter, category)
+ if start_iter.get_offset() > end_iter.get_offset():
+ break
+ marks = self.text_buffer.get_source_marks_at_iter(start_iter, category)
mark_list += marks
+ _logger.debug('number of marks found in buffer in region:%s'%(len(mark_list),))
return mark_list
@@ -665,7 +672,7 @@ class GtkSourceview2Page(SearchablePage):
current_state = SHELL_CAT
self.text_buffer.remove_tag_by_name(SHELL_CAT, line_start,line_end)
#delete the marker
- if self._activity.sugar_minor < 84 and current_state:
+ if self._activity.sugar_minor < 82 and current_state:
self.text_buffer.delete_marker(m)
else:
self.text_buffer.delete_mark(m)
@@ -703,7 +710,7 @@ class GtkSourceview2Page(SearchablePage):
self.text_buffer.remove_tag_by_name(current_state, line_start, line_end)
marker_list = self.get_marks_in_region_in_category(line_start, line_end)
for m in marker_list:
- if self._activity.sugar_minor < 84:
+ if self._activity.sugar_minor < 82:
self.text_buffer.delete_marker(m)
else:
self.text_buffer.delete_mark(m)
diff --git a/progresslistener.py b/progresslistener.py
index cf3cb43..038ce3d 100644
--- a/progresslistener.py
+++ b/progresslistener.py
@@ -55,6 +55,7 @@ class ProgressListener(gobject.GObject):
def onLocationChange(self, webProgress, request, location):
self.emit('location-changed', location)
+ print('on location change call back executed')
def onProgressChange(self, webProgress, request, curSelfProgress,
maxSelfProgress, curTotalProgress, maxTotalProgress):
diff --git a/project_gui.py b/project_gui.py
index 18ae66d..68f65e5 100644
--- a/project_gui.py
+++ b/project_gui.py
@@ -72,14 +72,23 @@ class ProjectGui(ProjectFunctions):
separator.set_expand(True)
separator.show()
+ stop_button = ToolButton('activity-stop')
+ stop_button.set_tooltip(_('Stop'))
+ #stop_button.props.accelerator = '<Ctrl>Q'
+ stop_button.connect('clicked', self.__stop_clicked_cb)
+ stop_button.show()
+
projectbar = gtk.Toolbar()
projectbar.show_all()
projectbar.insert(project_run, -1)
projectbar.insert(separator, -1)
- #projectbar.insert(self.keep,-1)
+ projectbar.insert(stop_button, -1)
self.projectbar = projectbar
+ def __stop_clicked_cb(self, button):
+ self._activity.py_stop()
+
#########################################################################################
def get_editor(self):
@@ -778,11 +787,34 @@ class DataStoreTree():
self.treeview = gtk.TreeView()
self.treeview.set_model(self.journal_model)
self.treeview.show()
- #self.treeview.has_tooltip = True
- #self.treeview.set_tooltip_column(10)
+ #the following 3 lines were probably disabled because earlier sugar complained
+ #search for TOOLTIP to find problem areas
#self.treeview.connect('query-tooltip',self.display_tooltip)
+ if self._activity.sugar_minor >= 82:
+ self.treeview.set_tooltip_column(10)
+ self.treeview.has_tooltip = True
+ else:
+ tips = gtk.Tooltips()
+ tips.set_tip(self.treeview, "")
+ self.treeview.connect("motion-notify-event",self.show_tooltip, tips, 10) # <---
+ self.treeview.set_events( gtk.gdk.POINTER_MOTION_MASK )
self.show_hidden = False
+ def show_tooltip(self, widget, event, tooltips, cell, emptytext='no information'):
+ """
+ If emptyText is None, the cursor has to enter widget from a side
+ that contains an item, otherwise no tooltip will be displayed. """
+
+ try:
+ (path,col,x,y) = widget.get_path_at_pos( int(event.x), int(event.y) )
+ it = widget.get_model().get_iter(path)
+ value = widget.get_model().get_value(it,cell)
+ tooltips.set_tip(widget, value)
+ tooltips.enable()
+ except:
+ _logger.exception('show_tooltip exception')
+ tooltips.set_tip(widget, emptytext)
+
def init_columns(self):
col = gtk.TreeViewColumn()
col.set_title(self.column_names[0])
diff --git a/pydebug.py b/pydebug.py
index b3e7dac..a7e0ba4 100644
--- a/pydebug.py
+++ b/pydebug.py
@@ -179,6 +179,10 @@ class PyDebugActivity(Activity, TerminalGui, EditorGui, ProjectGui):
#get the persistent data across all debug sessions and start using it
self.get_config ()
+ #give the server a chance to get started so terminal can connect to it
+ self.non_blocking_server()
+ #glib.idle_add(self.non_blocking_server)
+
if self.request_new_jobject and self.debug_dict.get('jobject_id','') != '':
self.request_new_jobject = False
@@ -279,9 +283,6 @@ class PyDebugActivity(Activity, TerminalGui, EditorGui, ProjectGui):
self.set_visible_canvas(self.panes['PROJECT'])
self.set_toolbar(self.panes['PROJECT'])
- self.non_blocking_server()
- #glib.idle_add(self.non_blocking_server)
-
_logger.debug('about to setup_project_page. Elapsed time: %f'%(time.clock()-start_clock))
self.setup_project_page()
_logger.debug('about Returned from setup_project_page. Elapsed time: %f'%(time.clock()-start_clock))
@@ -312,8 +313,11 @@ class PyDebugActivity(Activity, TerminalGui, EditorGui, ProjectGui):
def realize_cb(self):
_logger.debug('about total time to realize event: %f'%(time.clock()-start_clock))
+ def py_stop(self):
+ self.__stop_clicked_cb(None)
+
def __stop_clicked_cb(self,button):
- _logger('caught stop clicked call back')
+ _logger.debug('caught stop clicked call back')
self.close(skip_save = True)
@@ -567,6 +571,8 @@ class PyDebugActivity(Activity, TerminalGui, EditorGui, ProjectGui):
def init_activity_dict(self):
self.activity_dict['version'] = '1'
+ #try to disable the annoying save panel asking for new title
+ self.activity_dict['title_set_by_user'] = '1'
self.activity_dict['name'] = 'untitled'
self.activity_dict['bundle_id'] = ''
self.activity_dict['command'] = ''
diff --git a/terminal.py b/terminal.py
index 697037d..773d430 100644
--- a/terminal.py
+++ b/terminal.py
@@ -41,7 +41,7 @@ MASKED_ENVIRONMENT = [
]
-class Terminal():
+class Terminal:
def __init__(self,activity):
self.terminal_notebook = gtk.Notebook()
@@ -50,11 +50,12 @@ class Terminal():
#start the debugger user interface
#alias_cmd = 'alias go="%s/bin/ipython.py -gthread"\n'%(self.sugar_bundle_path,)
- alias_cmd = 'alias go="%s/bin/ipython.py "\n'%(self.sugar_bundle_path,)
+ go_cmd = _('go')
+ alias_cmd = 'alias %s="%s/bin/ipython.py "\n'%(go_cmd,self.sugar_bundle_path,)
self.feed_virtual_terminal(0,alias_cmd)
#self.feed_virtual_terminal(0,'%s/bin/ipython.py -gthread\n'%self.sugar_bundle_path)
- self.feed_virtual_terminal(0,'%s/bin/ipython.py \n'%self.sugar_bundle_path)
+ self.feed_virtual_terminal(0,'clear\n%s/bin/ipython.py \n'%self.sugar_bundle_path)
#the following become obsolete when start_debug starts automatically via ipython_config.py
#cmd = 'run ' + os.path.join(self.sugar_bundle_path,'bin','start_debug.py') + '\n'
diff --git a/terminal_gui.py b/terminal_gui.py
index ffdb22d..2d80806 100644
--- a/terminal_gui.py
+++ b/terminal_gui.py
@@ -135,6 +135,7 @@ class TerminalGui(Terminal):
ip.user_ns['go'] = arg_str
_logger.debug('about to use "%s" to start ipython debugger\n'%(arg_str))
"""
- self.feed_virtual_terminal(0,'go\n')
+ go_cmd = _('go')
+ self.feed_virtual_terminal(0,'%s\n'%(go_cmd,))
pass
\ No newline at end of file