def _setup_age(self): 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 = 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=_(label)) label_age.modify_fg(Gtk.StateType.NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) 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() 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) grid.show() self.pack_start(center_in_panel, False, False, 0) center_in_panel.show()
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) self._model = model self.restart_alerts = alerts if alerts else set() self.props.is_deferrable = False self._nick_sid = 0 self._color_valid = True self._nick_valid = True self._color = None self._gender = '' self._age = None self.set_border_width(style.DEFAULT_SPACING * 2) self.set_spacing(style.DEFAULT_SPACING) self._color = XoColor(self._model.get_color()) self._original_nick = self._model.get_nick() self._setup_color() self._setup_nick() self._setup_gender() self._setup_age() self._update_pickers(self._color) self._nick_entry.set_text(self._original_nick) self._color_valid = True self._nick_valid = True self.needs_restart = False self._nick_entry.connect('changed', self.__nick_changed_cb) for picker in self._pickers.values(): picker.connect('color-changed', self.__color_changed_cb) self._gender_pickers.connect('gender-changed', self.__gender_changed_cb) self._age_pickers.connect('age-changed', self.__age_changed_cb) def _setup_nick(self): grid = Gtk.Grid() grid.set_row_spacing(style.DEFAULT_SPACING) grid.set_column_spacing(style.DEFAULT_SPACING) self._nick_entry = Gtk.Entry() self._nick_entry.set_width_chars(25) grid.attach(self._nick_entry, 0, 0, 1, 1) self._nick_entry.show() alert_grid = Gtk.Grid() self._nick_alert = InlineAlert() alert_grid.attach(self._nick_alert, 0, 0, 1, 1) if 'nick' in self.restart_alerts: self._nick_alert.props.msg = self.restart_msg self._nick_alert.show() center_in_panel = Gtk.Alignment.new(0.5, 0, 0, 0) center_in_panel.add(grid) grid.show() center_alert = Gtk.Alignment.new(0.5, 0, 0, 0) center_alert.add(alert_grid) alert_grid.show() self.pack_start(center_in_panel, False, False, 0) self.pack_start(center_alert, False, False, 0) center_in_panel.show() center_alert.show() def _setup_color(self): grid = Gtk.Grid() grid.set_row_spacing(style.DEFAULT_SPACING) grid.set_column_spacing(style.DEFAULT_SPACING) self._color_alert = None self._pickers = { _PREVIOUS_FILL_COLOR: ColorPicker(_PREVIOUS_FILL_COLOR), _NEXT_FILL_COLOR: ColorPicker(_NEXT_FILL_COLOR), _CURRENT_COLOR: ColorPicker(_CURRENT_COLOR), _NEXT_STROKE_COLOR: ColorPicker(_NEXT_STROKE_COLOR), _PREVIOUS_STROKE_COLOR: ColorPicker(_PREVIOUS_STROKE_COLOR), } label_color = Gtk.Label(label=_('Click to change your color:')) label_color.modify_fg(Gtk.StateType.NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) grid.attach(label_color, 0, 0, 3, 1) label_color.show() current = 0 for picker_index in sorted(self._pickers.keys()): if picker_index == _CURRENT_COLOR: left_separator = Gtk.SeparatorToolItem() grid.attach(left_separator, current, 1, 1, 1) left_separator.show() current += 1 picker = self._pickers[picker_index] picker.show() grid.attach(picker, current, 1, 1, 1) current += 1 if picker_index == _CURRENT_COLOR: right_separator = Gtk.SeparatorToolItem() right_separator.show() grid.attach(right_separator, current, 1, 1, 1) current += 1 label_color_error = Gtk.Label() grid.attach(label_color_error, 0, 2, 3, 1) label_color_error.show() self._color_alert = InlineAlert() grid.attach(self._color_alert, 0, 3, 3, 1) if 'color' in self.restart_alerts: self._color_alert.props.msg = self.restart_msg self._color_alert.show() center_in_panel = Gtk.Alignment.new(0.5, 0, 0, 0) center_in_panel.add(grid) grid.show() self.pack_start(center_in_panel, False, False, 0) center_in_panel.show() def _setup_gender(self): self._saved_gender = load_gender() self._gender_pickers = GenderPicker() grid = Gtk.Grid() grid.set_row_spacing(style.DEFAULT_SPACING) grid.set_column_spacing(style.DEFAULT_SPACING) label_gender = Gtk.Label(label=_('Select gender:')) label_gender.modify_fg(Gtk.StateType.NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) grid.attach(label_gender, 0, 0, 1, 1) label_gender.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) grid.show() self.pack_start(center_in_panel, False, False, 0) center_in_panel.show() def _setup_age(self): 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 = 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=_(label)) label_age.modify_fg(Gtk.StateType.NORMAL, style.COLOR_SELECTION_GREY.get_gdk_color()) 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() 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) grid.show() self.pack_start(center_in_panel, False, False, 0) center_in_panel.show() def setup(self): pass def undo(self): self._model.undo() self._nick_alert.hide() self._color_alert.hide() # 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._gender_pickers.update_color(color) self._age_pickers.update_color(color) def _validate(self): if self._nick_valid and self._color_valid: self.props.is_valid = True else: self.props.is_valid = False def __nick_changed_cb(self, widget, data=None): if self._nick_sid: GLib.source_remove(self._nick_sid) self._nick_sid = GLib.timeout_add(self._APPLY_TIMEOUT, self.__nick_timeout_cb, widget) def __nick_timeout_cb(self, widget): self._nick_sid = 0 if widget.get_text() == self._model.get_nick(): self.restart_alerts.remove('nick') if not self.restart_alerts: self.needs_restart = False self._nick_alert.hide() return False try: self._model.set_nick(widget.get_text()) except ValueError, detail: self._nick_alert.props.msg = detail self._nick_valid = False self._nick_alert.show() else: