Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--TurtleArt/taturtle.py10
-rw-r--r--TurtleArt/tawindow.py21
-rw-r--r--TurtleArtActivity.py28
-rwxr-xr-xturtleblocks.py54
5 files changed, 88 insertions, 27 deletions
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. '''