diff options
Diffstat (limited to 'XOEditorActivity.py~')
-rw-r--r-- | XOEditorActivity.py~ | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/XOEditorActivity.py~ b/XOEditorActivity.py~ new file mode 100644 index 0000000..429c9b9 --- /dev/null +++ b/XOEditorActivity.py~ @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- +#Copyright (c) 2012 Walter Bender + +# 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 3 of the License, or +# (at your option) any later version. +# +# You should have received a copy of the GNU General Public License +# along with this library; if not, write to the Free Software +# Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA + +from gi.repository import Gtk, Gdk, GConf + +from sugar3.activity import activity +from sugar3 import profile +client = GConf.Client.get_default() +try: + from sugar3.graphics.toolbarbox import ToolbarBox + _have_toolbox = True +except ImportError: + _have_toolbox = False + +if _have_toolbox: + from sugar3.activity.widgets import ActivityToolbarButton + from sugar3.activity.widgets import StopButton +from sugar3.graphics.objectchooser import ObjectChooser +from sugar3.graphics.colorbutton import ColorToolButton +from sugar3.graphics.alert import ConfirmationAlert, NotifyAlert +from sugar3.graphics.xocolor import colors + +from toolbar_utils import button_factory, radio_factory, separator_factory + +from gettext import gettext as _ + +from game import Game + +import logging +_logger = logging.getLogger('xo-editor-activity') +def rgb2html(color): + """Returns a html string from a Gdk color""" + red = "%x" % int(color.red / 65535.0 * 255) + if len(red) == 1: + red = "0%s" % red + + green = "%x" % int(color.green / 65535.0 * 255) + + if len(green) == 1: + green = "0%s" % green + + blue = "%x" % int(color.blue / 65535.0 * 255) + + if len(blue) == 1: + blue = "0%s" % blue + + new_color = "#%s%s%s" % (red, green, blue) + + return new_color +class XOEditorActivity(activity.Activity): + """ Change the XO colors """ + + def __init__(self, handle): + """ Initialize the toolbars and the game board """ + try: + super(XOEditorActivity, self).__init__(handle) + except dbus.exceptions.DBusException, e: + _logger.error(str(e)) + + self.nick = profile.get_nick_name() + if profile.get_color() is not None: + self.colors = profile.get_color().to_string().split(',') + else: + self.colors = ['#A0FFA0', '#FF8080'] + + self.level = 0 + + self._setup_toolbars(_have_toolbox) + + # Create a canvas + canvas = Gtk.DrawingArea() + canvas.set_size_request(Gdk.Screen.width(), \ + Gdk.Screen.height()) + self.set_canvas(canvas) + canvas.show() + self.show_all() + + self._game = Game(canvas, parent=self, mycolors=self.colors) + + # Read the dot positions from the Journal + for i in range(len(colors)): + if 'x%d' % (i) in self.metadata and 'y%d' % (i) in self.metadata: + self._game.move_dot(i, int(self.metadata['x%d' % (i)]), + int(self.metadata['y%d' % (i)])) + if 'xox' in self.metadata and 'xoy' in self.metadata: + self._game.move_xo_man(int(self.metadata['xox']), + int(self.metadata['xoy'])) + + + def _change_stroke(self, Boton, pspec): + Stroke_Color_old = Boton.get_color() + Stroke_Color = rgb2html(Stroke_Color_Old) + client.set_string('/desktop/sugar/user/color', '%s,%s' % (Stroke_Color, self._game.colors[1])) + + def _save_colors_cb(self, button=None): + ''' Save the new XO colors. ''' + ''' We warn the user if they are going to save their selection ''' + alert = ConfirmationAlert() + alert.props.title = _('Saving colors') + alert.props.msg = _('Do you want to save these colors?') + def _change_colors_alert_response_cb(alert, response_id, self): + if response_id is Gtk.ResponseType.OK: + _logger.debug('saving colors') + self.remove_alert(alert) + self._confirm_save() + elif response_id is Gtk.ResponseType.CANCEL: + _logger.debug('cancel save') + self.remove_alert(alert) + alert.connect('response', _change_colors_alert_response_cb, self) + self.add_alert(alert) + alert.show() + + def _confirm_save(self): + ''' Called from confirmation alert ''' + + client.set_string('/desktop/sugar/user/color', '%s,%s' % ( + self._game.colors[0], self._game.colors[1])) + alert = NotifyAlert() + alert.props.title = _('Saving colors') + alert.props.msg = _('A restart is required before your new colors will appear.') + + def _notification_alert_response_cb(alert, response_id, self): + self.remove_alert(alert) + alert.connect('response', _notification_alert_response_cb, self) + self.add_alert(alert) + alert.show() + def _rotate_cb(self, button=None): + self._game.rotate() + def write_file(self, file_path): + for i in range(len(colors)): + x, y = self._game.get_dot_xy(i) + self.metadata['x%d' % (i)] = str(x) + self.metadata['y%d' % (i)] = str(y) + + x, y = self._game.get_xo_man_xy() + self.metadata['xox'] = str(x) + self.metadata['xoy'] = str(y) + + + def _setup_toolbars(self, have_toolbox): + """ Setup the toolbars. """ + + self.max_participants = 1 # No sharing + + if have_toolbox: + toolbox = ToolbarBox() + # Activity toolbar + activity_button = ActivityToolbarButton(self) + toolbox.toolbar.insert(activity_button, 0) + activity_button.show() + + self.set_toolbar_box(toolbox) + toolbox.show() + self.toolbar = toolbox.toolbar + else: + # Use pre-0.86 toolbar design + games_toolbar = Gtk.Toolbar() + toolbox = activity.ActivityToolbox(self) + self.set_toolbox(toolbox) + toolbox.add_toolbar(_('Game'), games_toolbar) + toolbox.show() + toolbox.set_current_toolbar(1) + self.toolbar = games_toolbar + + if _have_toolbox: + separator_factory(toolbox.toolbar, True, False) + self._save_colors_button = button_factory( + 'save-colors', self.toolbar, self._save_colors_cb, + tooltip=_('Save colors')) + self._custom_color_button = ColorToolButton() + self._custom_color_button.set_title(_('Custom color stroke')) + self._custom_color_button.connect('notify::color',self._change_stroke) + toolbox.toolbar.insert(self._custom_color_button, -1) + if _have_toolbox: + stop_button = StopButton(self) + stop_button.props.accelerator = '<Ctrl>q' + toolbox.toolbar.insert(stop_button, -1) + stop_button.show() |