From bc09b50cded9b8b37daf7a451cdf9e8c3dbb4817 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Wed, 21 Aug 2013 15:33:38 +0000 Subject: clean up coordinate rescale code --- diff --git a/NEWS b/NEWS index d34ad7c..cf2b15e 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ ENHANCEMENTS: * Use icon view for browsing sample projects * New translations * New sample progams +* Save coordinate scale with gconf +* Make scaled coordinates +-20 instead of +-100 BUG FIX: * Fixed more bugs in SVG save diff --git a/TurtleArt/taturtle.py b/TurtleArt/taturtle.py index 12882db..64e172e 100644 --- a/TurtleArt/taturtle.py +++ b/TurtleArt/taturtle.py @@ -555,12 +555,16 @@ class Turtle: int(distance)])) self._turtles.turtle_window.send_event(event) - def set_xy(self, pos, share=True, pendown=True): + def set_xy(self, pos, share=True, pendown=True, dragging=False): old = self.get_xy() try: - xcor = pos[0] * self._turtles.turtle_window.coord_scale - ycor = pos[1] * self._turtles.turtle_window.coord_scale + if dragging: + xcor = pos[0] + ycor = pos[1] + else: + xcor = pos[0] * self._turtles.turtle_window.coord_scale + ycor = pos[1] * self._turtles.turtle_window.coord_scale except (TypeError, ValueError): debug_output('bad value sent to %s' % (__name__), self._turtles.turtle_window.running_sugar) diff --git a/TurtleArt/tawindow.py b/TurtleArt/tawindow.py index e20a1cf..bdaf87f 100644 --- a/TurtleArt/tawindow.py +++ b/TurtleArt/tawindow.py @@ -102,10 +102,12 @@ class TurtleArtWindow(): def __init__(self, canvas_window, path, parent=None, activity=None, mycolors=None, mynick=None, turtle_canvas=None, running_sugar=True, running_turtleart=True): - '''parent -- the GTK Window that TA runs in - activity -- the object that instantiated this TurtleArtWindow (in - GNOME, a TurtleMain instance) - running_turtleart -- are we running TA or exported python code? + ''' + parent: the GTK Window that TA runs in + activity: the object that instantiated this TurtleArtWindow (in + GNOME, a TurtleMain instance, in Sugar, the Activity + instance) + running_turtleart: are we running TA or exported python code? ''' self.parent = parent self.turtle_canvas = turtle_canvas @@ -1410,6 +1412,13 @@ class TurtleArtWindow(): if spr is not None: blk = self.block_list.spr_to_block(spr) if blk is not None: + # Make sure stop button is visible + if self.running_sugar: + self.activity.stop_turtle_button.set_icon("stopiton") + self.activity.stop_turtle_button.set_tooltip( + _('Stop turtle')) + elif self.interactive_mode: + self.toolbar_shapes['stopiton'].set_layer(TAB_LAYER) self.showlabel('status', label=_('Please hit the Stop Button \ before making changes to your Turtle Blocks program')) @@ -2511,10 +2520,10 @@ before making changes to your Turtle Blocks program')) pos = self.turtles.screen_to_turtle_coordinates((dx, dy)) if self.selected_turtle.get_pen_state(): self.selected_turtle.set_pen_state(False) - self.selected_turtle.set_xy(pos, share=False) + self.selected_turtle.set_xy(pos, share=False, dragging=True) self.selected_turtle.set_pen_state(True) else: - self.selected_turtle.set_xy(pos, share=False) + self.selected_turtle.set_xy(pos, share=False, dragging=True) if self.update_counter % 5: self.lc.update_label_value( 'xcor', self.selected_turtle.get_xy()[0] / diff --git a/TurtleArtActivity.py b/TurtleArtActivity.py index f965003..ceb0624 100644 --- a/TurtleArtActivity.py +++ b/TurtleArtActivity.py @@ -62,7 +62,7 @@ except ImportError: from gettext import gettext as _ from TurtleArt.tapalette import (palette_names, help_strings, help_palettes, - help_windows) + help_windows, default_values) from TurtleArt.taconstants import (BLOCK_SCALE, XO1, XO15, XO175, XO4, MIMETYPE) from TurtleArt.taexportlogo import save_logo @@ -78,6 +78,7 @@ if HAS_TOOLBARBOX: class TurtleArtActivity(activity.Activity): ''' Activity subclass for Turtle Art ''' _HOVER_HELP = '/desktop/sugar/activities/turtleart/hoverhelp' + _COORDINATE_SCALE = '/desktop/sugar/activities/turtleart/coordinatescale' def __init__(self, handle): ''' Set up the toolbars, canvas, sharing, etc. ''' @@ -131,6 +132,12 @@ class TurtleArtActivity(activity.Activity): self.client = gconf.client_get_default() if self.client.get_int(self._HOVER_HELP) == 1: self._do_hover_help_toggle(None) + if self.client.get_int(self._COORDINATE_SCALE) != 1: + self.tw.coord_scale = 1 + self.do_rescale_cb(None) + else: + self.tw.coord_scale = 0 + self.do_rescale_cb(None) self._selected_sample = None self._sample_window = None @@ -316,7 +323,8 @@ class TurtleArtActivity(activity.Activity): self.tw.no_help = False self._hover_help_toggle.set_icon('help-off') self._hover_help_toggle.set_tooltip(_('Turn off hover help')) - self.client.set_int(self._HOVER_HELP, 0) + if HAS_GCONF: + self.client.set_int(self._HOVER_HELP, 0) else: self.tw.no_help = True self.tw.last_label = None @@ -324,7 +332,8 @@ class TurtleArtActivity(activity.Activity): self.tw.status_spr.hide() self._hover_help_toggle.set_icon('help-on') self._hover_help_toggle.set_tooltip(_('Turn on hover help')) - self.client.set_int(self._HOVER_HELP, 1) + if HAS_GCONF: + self.client.set_int(self._HOVER_HELP, 1) # These methods are called both from toolbar buttons and blocks. @@ -502,16 +511,23 @@ class TurtleArtActivity(activity.Activity): self.tw.set_metric(True) def do_rescale_cb(self, button): - ''' Rescale coordinate system (100==height/2 or 100 pixels). ''' + ''' Rescale coordinate system (20==height/2 or 100 pixels). ''' if self.tw.coord_scale == 1: - self.tw.coord_scale = self.tw.height / 200 + self.tw.coord_scale = self.tw.height / 40 self.rescale_button.set_icon('contract-coordinates') self.rescale_button.set_tooltip(_('Rescale coordinates down')) + default_values['forward'] = [10] + default_values['back'] = [10] + default_values['arc'] = [90, 10] else: self.tw.coord_scale = 1 self.rescale_button.set_icon('expand-coordinates') self.rescale_button.set_tooltip(_('Rescale coordinates up')) - self.tw.eraser_button() + default_values['forward'] = [100] + default_values['back'] = [100] + default_values['arc'] = [90, 100] + if HAS_GCONF: + self.client.set_int(self._COORDINATE_SCALE, self.tw.coord_scale) # Given the change in how overlays are handled (v123), there is no way # to erase and then redraw the overlays. diff --git a/turtleblocks.py b/turtleblocks.py index 18bc1ac..d00d756 100755 --- a/turtleblocks.py +++ b/turtleblocks.py @@ -54,6 +54,7 @@ from gettext import gettext as _ from TurtleArt.taconstants import (OVERLAY_LAYER, DEFAULT_TURTLE_COLORS, TAB_LAYER, SUFFIX) from TurtleArt.tautils import (data_from_string, get_save_name) +from TurtleArt.tapalette import default_values from TurtleArt.tawindow import TurtleArtWindow from TurtleArt.taexportlogo import save_logo @@ -68,8 +69,10 @@ class TurtleMain(): _ICON_SUBPATH = 'images/turtle.png' _GNOME_PLUGIN_SUBPATH = 'gnome_plugins' _HOVER_HELP = '/desktop/sugar/activities/turtleart/hoverhelp' + _COORDINATE_SCALE = '/desktop/sugar/activities/turtleart/coordinatescale' def __init__(self): + self._setting_gconf_overrides = False self._abspath = os.path.abspath('.') self._execdirname = self._get_execution_dir() if self._execdirname is not None: @@ -187,6 +190,7 @@ return %s(self)" % (p, P, P) else: self.win.get_window().set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH)) gobject.idle_add(self._project_loader, self._ta_file) + self._set_gconf_overrides() gtk.main() def _project_loader(self, file_name): @@ -222,10 +226,26 @@ return %s(self)" % (p, P, P) turtle_canvas=self.turtle_canvas, activity=self, running_sugar=False) self.tw.save_folder = self._abspath # os.path.expanduser('~') - if hasattr(self, 'client') and \ - self.client.get_int(self._HOVER_HELP) == 1: - self.hover.set_active(False) - self._do_hover_help_off_cb(None) + + if hasattr(self, 'client'): + if self.client.get_int(self._HOVER_HELP) == 1: + self.hover.set_active(False) + self._do_hover_help_off_cb(None) + if self.client.get_int(self._COORDINATE_SCALE) != 1: + self.tw.coord_scale = 1 + else: + self.tw.coord_scale = 0 + + def _set_gconf_overrides(self): + if self.tw.coord_scale == 0: + self.tw.coord_scale = 1 + else: + self._do_rescale_cb(None) + print 'set override after', self.tw.coord_scale + if self.tw.coord_scale != 1: + self._setting_gconf_overrides = True + self.coords.set_active(True) + self._setting_gconf_overrides = False def _init_vars(self): ''' If we are invoked to start a project from Gnome, we should make @@ -393,8 +413,9 @@ return %s(self)" % (p, P, P) self._do_cartesian_cb) MenuBuilder.make_menu_item(menu, _('Polar coordinates'), self._do_polar_cb) - MenuBuilder.make_menu_item(menu, _('Rescale coordinates'), - self._do_rescale_cb) + self.coords = MenuBuilder.make_checkmenu_item( + menu, _('Rescale coordinates'), + self._do_rescale_cb, status=False) MenuBuilder.make_menu_item(menu, _('Grow blocks'), self._do_resize_cb, 1.5) MenuBuilder.make_menu_item(menu, _('Shrink blocks'), @@ -553,20 +574,27 @@ Would you like to save before quitting?')) def _do_rescale_cb(self, button): ''' Callback to rescale coordinate space. ''' + if self._setting_gconf_overrides: + return if self.tw.coord_scale == 1: - self.tw.coord_scale = self.tw.height / 200 - self.tw.eraser_button() + self.tw.coord_scale = self.tw.height / 40 if self.tw.cartesian is True: self.tw.overlay_shapes['Cartesian_labeled'].hide() self.tw.overlay_shapes['Cartesian'].set_layer(OVERLAY_LAYER) + default_values['forward'] = [10] + default_values['back'] = [10] + default_values['arc'] = [90, 10] else: self.tw.coord_scale = 1 - self.tw.eraser_button() if self.tw.cartesian is True: self.tw.overlay_shapes['Cartesian'].hide() self.tw.overlay_shapes['Cartesian_labeled'].set_layer( OVERLAY_LAYER) - + default_values['forward'] = [100] + default_values['back'] = [100] + default_values['arc'] = [90, 100] + self.client.set_int(self._COORDINATE_SCALE, int(self.tw.coord_scale)) + def _do_toggle_hover_help_cb(self, button): ''' Toggle hover help on/off ''' self.tw.no_help = not self.tw.no_help @@ -579,7 +607,8 @@ Would you like to save before quitting?')) ''' Turn hover help on ''' self.tw.no_help = False self.hover.set_active(True) - self.client.set_int(self._HOVER_HELP, 0) + if hasattr(self, 'client'): + self.client.set_int(self._HOVER_HELP, 0) def _do_hover_help_off_cb(self, button): ''' Turn hover help off ''' @@ -588,7 +617,8 @@ Would you like to save before quitting?')) if self.tw.status_spr is not None: self.tw.status_spr.hide() self.hover.set_active(False) - self.client.set_int(self._HOVER_HELP, 1) + if hasattr(self, 'client'): + self.client.set_int(self._HOVER_HELP, 1) def _do_palette_cb(self, widget): ''' Callback to show/hide palette of blocks. ''' -- cgit v0.9.1