Skip to content

Commit

Permalink
Merge branch 'tchx84-configurable-groups'
Browse files Browse the repository at this point in the history
  • Loading branch information
walterbender committed Nov 24, 2014
2 parents 4a4bc30 + 497f426 commit d7c30c7
Show file tree
Hide file tree
Showing 12 changed files with 402 additions and 273 deletions.
4 changes: 4 additions & 0 deletions bin/sugar.in
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ if test -z "$SUGAR_SCALING"; then
export SUGAR_SCALING=72
fi

if test -z "$SUGAR_GROUP_LABELS"; then
export SUGAR_GROUP_LABELS="$sugardatadir/group-labels.defaults"
fi

if test -z "$SUGAR_MIME_DEFAULTS"; then
export SUGAR_MIME_DEFAULTS="$sugardatadir/mime.defaults"
fi
Expand Down
1 change: 1 addition & 0 deletions data/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ sugar-100.gtkrc: gtkrc.em
sugardir = $(pkgdatadir)/data
sugar_DATA = \
activities.defaults \
group-labels.defaults \
ISO-639-2_utf-8.txt \
kbdconfig \
mime.defaults \
Expand Down
1 change: 1 addition & 0 deletions data/group-labels.defaults
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"group-label": "Select grade:", "group-items": [{"female-icon": "female-1", "male-icon": "male-1", "label": "Preschool", "age": 4}, {"female-icon": "female-1", "male-icon": "male-1", "label": "Kindergarten", "age": 5}, {"female-icon": "female-2", "male-icon": "male-2", "label": "1st Grade", "age": 6}, {"female-icon": "female-3", "male-icon": "male-3", "label": "2nd Grade", "age": 7}, {"female-icon": "female-4", "male-icon": "male-4", "label": "3rd Grade", "age": 8}, {"female-icon": "female-5", "male-icon": "male-5", "label": "4th Grade", "age": 9}, {"female-icon": "female-5", "male-icon": "male-5", "label": "5th Grade", "age": 10}, {"female-icon": "female-6", "male-icon": "male-6", "label": "6th Grade", "age": 11}, {"female-icon": "female-6", "male-icon": "male-6", "label": "7th Grade", "age": 12}, {"female-icon": "female-7", "male-icon": "male-7", "label": "High School", "age": 13}, {"female-icon": "female-7", "male-icon": "male-7", "label": "Adult", "age": 25}]}
5 changes: 5 additions & 0 deletions data/org.sugarlabs.gschema.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@
<summary>User Birth Timestamp</summary>
<description>Birth timestamp (seconds since the epoch)</description>
</key>
<key name="group-label" type="s">
<default>''</default>
<summary>Group Label</summary>
<description>Label associated with age, e.g., '2nd Grade'</description>
</key>
<child name="background" schema="org.sugarlabs.user.background" />
</schema>
<schema id="org.sugarlabs.user.background" path="/org/sugarlabs/user/background/">
Expand Down
71 changes: 0 additions & 71 deletions extensions/cpsection/aboutme/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@

from sugar3 import profile

from jarabe.intro.window import calculate_birth_timestamp, calculate_age
from jarabe.intro.agepicker import AGES

_COLORS = {
'red': {'dark': '#b20008', 'medium': '#e6000a', 'light': '#ffadce'},
'orange': {'dark': '#9a5200', 'medium': '#c97e00', 'light': '#ffc169'},
Expand Down Expand Up @@ -145,71 +142,3 @@ def set_color_xo(color):
client = GConf.Client.get_default()
client.set_string('/desktop/sugar/user/color', color)
return 1


def get_gender():
settings = Gio.Settings('org.sugarlabs.user')
return settings.get_string('gender')


def print_gender():
print get_gender()


def set_gender(gender):
"""Set the gender, e.g. 'female'
"""
if not gender:
gender = '' # default value in gsettings indicates no gender selected
elif gender not in ['male', 'female', '']:
raise ValueError(_('Gender must be male or female.'))

settings = Gio.Settings('org.sugarlabs.user')
settings.set_string('gender', gender)
return


def get_age():
settings = Gio.Settings('org.sugarlabs.user')
birth_timestamp = settings.get_int('birth-timestamp')

if birth_timestamp == 0:
return None

birth_age = calculate_age(birth_timestamp)

age = (AGES[-2] + AGES[-1]) / 2.
if birth_age >= age:
return AGES[-1]

for i in range(len(AGES) - 1):
age = (AGES[i] + AGES[i + 1]) / 2.
if birth_age < age:
return AGES[i]

return None


def print_age():
print get_age()


def set_age(age):
"""Set the age and an approximate birth timestamp
age: e.g. 8
birth_timestamp: time - age * #seconds per year
"""
try:
i = int(age)
except ValueError, e:
logging.error('set_age: %s' % (e))
i = None

if i is None or i < 1:
raise ValueError(_('Age must be a positive integer.'))

birth_timestamp = calculate_birth_timestamp(age)

settings = Gio.Settings('org.sugarlabs.user')
settings.set_int('birth-timestamp', birth_timestamp)
return
166 changes: 38 additions & 128 deletions extensions/cpsection/aboutme/view.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA

from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GObject
from gettext import gettext as _
import logging

from sugar3.graphics import style
from sugar3.graphics.xocolor import XoColor, colors
from sugar3.graphics.icon import EventIcon

from jarabe.controlpanel.sectionview import SectionView
from jarabe.controlpanel.inlinealert import InlineAlert
from jarabe.intro.agepicker import AGES, AGE_LABELS
from jarabe.intro.agepicker import AgePicker, save_age, load_age
from jarabe.intro.genderpicker import GenderPicker, save_gender, load_gender


_STROKE_COLOR = 0
Expand Down Expand Up @@ -149,94 +152,11 @@ def __pressed_cb(self, button, event, picker):
self.color_changed_signal.emit(self._color)


class GenderPicker(EventIcon):
gender_changed_signal = GObject.Signal('gender-changed',
arg_types=([str]))

def __init__(self, color, gender):
EventIcon.__init__(self, icon_name='%s-6' % (gender),
pixel_size=style.XLARGE_ICON_SIZE)
self._gender = gender
self._color = color

self.set_gender()

self.connect('button_press_event', self.__pressed_cb)

def set_color(self, color, gender):
self._color = color
self.set_gender(gender)

def set_gender(self, gender=''):
if gender is not '' and self._gender == gender:
self.props.xo_color = self._color
else:
self.props.xo_color = _NOCOLOR

gender = GObject.property(type=object, setter=set_gender)

def __pressed_cb(self, button, event):
self.gender_changed_signal.emit(self._gender)


class AgePicker(Gtk.Grid):

age_changed_signal = GObject.Signal('age-changed',
arg_types=([int]))

def __init__(self, color, gender, age):
Gtk.Grid.__init__(self)
self._color = color
self._gender = gender
self._age = age

if self._gender is '':
# Used for graphic only; does not set user's gender preference.
self._gender = 'female'

self._icon = EventIcon(icon_name='%s-%d' % (self._gender, self._age),
pixel_size=style.LARGE_ICON_SIZE)
self._icon.connect('button-press-event', self.__pressed_cb)
self.attach(self._icon, 0, 0, 1, 1)
self._icon.show()

label = Gtk.Label()
label.set_text(AGE_LABELS[self._age])
self.attach(label, 0, 1, 1, 1)
label.show()

self.set_age()

def set_color(self, color, age):
self._color = color
self.set_age(age)

def set_age(self, age=None):
if age in AGES:
age_index = AGES.index(age)
else:
age_index = None

if age_index == self._age:
self._icon.props.xo_color = self._color
else:
self._icon.props.xo_color = _NOCOLOR
self._icon.show()

age = GObject.property(type=object, setter=set_age)

def set_gender(self, gender):
self._icon.set_icon_name('%s-%d' % (gender, self._age))
self._icon.show()

gender = GObject.property(type=object, setter=set_gender)

def __pressed_cb(self, button, event):
self.age_changed_signal.emit(self._age)


class AboutMe(SectionView):

age_changed_signal = GObject.Signal('age-changed', arg_types=([int]))
gender_changed_signal = GObject.Signal('gender-changed', arg_types=([str]))

def __init__(self, model, alerts):
SectionView.__init__(self)

Expand Down Expand Up @@ -272,11 +192,10 @@ def __init__(self, model, alerts):
for picker in self._pickers.values():
picker.connect('color-changed', self.__color_changed_cb)

self._female_picker.connect('gender-changed', self.__gender_changed_cb)
self._male_picker.connect('gender-changed', self.__gender_changed_cb)
self._gender_pickers.connect('gender-changed',
self.__gender_changed_cb)
self._age_pickers.connect('age-changed', self.__age_changed_cb)

for picker in self._age_pickers:
picker.connect('age-changed', self.__age_changed_cb)

def _setup_nick(self):
grid = Gtk.Grid()
Expand Down Expand Up @@ -366,7 +285,9 @@ def _setup_color(self):
center_in_panel.show()

def _setup_gender(self):
self._gender = self._model.get_gender()
self._saved_gender = load_gender()

self._gender_pickers = GenderPicker()

grid = Gtk.Grid()
grid.set_row_spacing(style.DEFAULT_SPACING)
Expand All @@ -378,15 +299,8 @@ def _setup_gender(self):
grid.attach(label_gender, 0, 0, 1, 1)
label_gender.show()

self._female_picker = GenderPicker(self._color, 'female')
grid.attach(self._female_picker, 0, 1, 1, 1)
self._female_picker.props.gender = self._gender
self._female_picker.show()

self._male_picker = GenderPicker(self._color, 'male')
grid.attach(self._male_picker, 1, 1, 1, 1)
self._male_picker.props.gender = self._gender
self._male_picker.show()
grid.attach(self._gender_pickers, 0, 1, 1, 1)
self._gender_pickers.show()

center_in_panel = Gtk.Alignment.new(0.5, 0, 0, 0)
center_in_panel.add(grid)
Expand All @@ -396,26 +310,30 @@ def _setup_gender(self):
center_in_panel.show()

def _setup_age(self):
self._age = self._model.get_age()
self._saved_age = load_age()

grid = Gtk.Grid()
grid.set_row_spacing(style.DEFAULT_SPACING)
grid.set_column_spacing(style.DEFAULT_SPACING)

self._age_pickers = []
for i in range(len(AGES)):
self._age_pickers.append(AgePicker(self._color, self._gender, i))
self._age_pickers = AgePicker(self._saved_gender)
center_in_panel = Gtk.Alignment.new(0.5, 0, 0, 0)
center_in_panel.add(self._age_pickers)
self._age_pickers.show()

label = self._age_pickers.get_label()

label_age = Gtk.Label(label=_('Select age:'))
label_age = Gtk.Label(label=_(label))
label_age.modify_fg(Gtk.StateType.NORMAL,
style.COLOR_SELECTION_GREY.get_gdk_color())
grid.attach(label_age, 0, 0, 1, 1)
left_align = Gtk.Alignment.new(0, 0, 0, 0)
left_align.add(label_age)
label_age.show()
grid.attach(left_align, 0, 0, 1, 1)
left_align.show()

for i in range(len(AGES)):
grid.attach(self._age_pickers[i], i, 1, 1, 1)
self._age_pickers[i].set_age(self._age)
self._age_pickers[i].show()
grid.attach(center_in_panel, 0, 1, 1, 1)
center_in_panel.show()

center_in_panel = Gtk.Alignment.new(0.5, 0, 0, 0)
center_in_panel.add(grid)
Expand All @@ -431,16 +349,15 @@ def undo(self):
self._nick_alert.hide()
self._color_alert.hide()

self._model.set_gender(self._gender)
self._model.set_age(self._age)
# Undo gender or age changes
save_gender(self._saved_gender)
save_age(self._saved_age)

def _update_pickers(self, color):
for picker in self._pickers.values():
picker.props.color = color
self._female_picker.set_color(color, self._gender)
self._male_picker.set_color(color, self._gender)
for i in range(len(AGES)):
self._age_pickers[i].set_color(color, self._age)
self._gender_pickers.update_color(color)
self._age_pickers.update_color(color)

def _validate(self):
if self._nick_valid and self._color_valid:
Expand Down Expand Up @@ -498,16 +415,9 @@ def __color_changed_cb(self, colorpicker, color):
return False

def __gender_changed_cb(self, genderpicker, gender):
self._model.set_gender(gender)
self._female_picker.props.gender = gender
self._female_picker.props.gender = gender
self._male_picker.props.gender = gender
for i in range(len(AGES)):
self._age_pickers[i].props.gender = gender
save_gender(gender)
self._age_pickers.update_gender(gender)
return False

def __age_changed_cb(self, agepicker, age):
self._model.set_age(AGES[age])
for i in range(len(AGES)):
self._age_pickers[i].props.age = AGES[age]
return False
def __age_changed_cb(self, event, age):
save_age(age)
13 changes: 13 additions & 0 deletions src/jarabe/intro/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import os

from gi.repository import Gio

from sugar3 import env
from sugar3.profile import get_profile

Expand All @@ -12,3 +14,14 @@ def check_profile():
profile.convert_profile()

return profile.is_valid()


def check_group_label():
settings = Gio.Settings('org.sugarlabs.user')
if len(settings.get_string('group-label')) > 0:
return True

# DEPRECATED
from gi.repository import GConf
client = GConf.Client.get_default()
return client.get_string('/desktop/sugar/user/group') is not None
Loading

0 comments on commit d7c30c7

Please sign in to comment.