Implement nick name validation
This commit is contained in:
parent
d2059c1baa
commit
dde018a63e
@ -30,44 +30,55 @@ from sugar.graphics.canvasentry import CanvasEntry
|
|||||||
|
|
||||||
import colorpicker
|
import colorpicker
|
||||||
|
|
||||||
class _NamePage(hippo.CanvasBox):
|
_BACKGROUND_COLOR = style.COLOR_PANEL_GREY
|
||||||
|
|
||||||
|
class _Page(hippo.CanvasBox):
|
||||||
|
__gproperties__ = {
|
||||||
|
'valid' : (bool, None, None, False,
|
||||||
|
gobject.PARAM_READABLE)
|
||||||
|
}
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
hippo.CanvasBox.__init__(self, xalign=hippo.ALIGNMENT_CENTER,
|
hippo.CanvasBox.__init__(self, **kwargs)
|
||||||
spacing=style.DEFAULT_SPACING,
|
self.valid = False
|
||||||
orientation=hippo.ORIENTATION_HORIZONTAL,
|
|
||||||
**kwargs)
|
def set_valid(self, valid):
|
||||||
|
self.valid = valid
|
||||||
|
self.notify('valid')
|
||||||
|
|
||||||
|
def do_get_property(self, pspec):
|
||||||
|
if pspec.name == 'valid':
|
||||||
|
return self.valid
|
||||||
|
|
||||||
|
class _NamePage(_Page):
|
||||||
|
def __init__(self):
|
||||||
|
_Page.__init__(self, xalign=hippo.ALIGNMENT_CENTER,
|
||||||
|
background_color=_BACKGROUND_COLOR.get_int(),
|
||||||
|
spacing=style.DEFAULT_SPACING,
|
||||||
|
orientation=hippo.ORIENTATION_HORIZONTAL,)
|
||||||
|
|
||||||
label = hippo.CanvasText(text=_("Name:"))
|
label = hippo.CanvasText(text=_("Name:"))
|
||||||
self.append(label)
|
self.append(label)
|
||||||
|
|
||||||
self._entry = CanvasEntry(box_width=style.zoom(300))
|
self._entry = CanvasEntry(box_width=style.zoom(300))
|
||||||
|
self._entry.set_background(_BACKGROUND_COLOR.get_html())
|
||||||
self._entry.props.widget.set_max_length(45)
|
self._entry.props.widget.set_max_length(45)
|
||||||
|
self._entry.connect('notify::text', self._text_changed_cb)
|
||||||
self.append(self._entry)
|
self.append(self._entry)
|
||||||
|
|
||||||
|
def _text_changed_cb(self, entry, pspec):
|
||||||
|
valid = len(entry.props.text.strip()) > 0
|
||||||
|
self.set_valid(valid)
|
||||||
|
|
||||||
def get_name(self):
|
def get_name(self):
|
||||||
return self._check_nickname(self._entry.props.text)
|
return self._entry.props.text
|
||||||
|
|
||||||
def _check_nickname(self, name):
|
class _ColorPage(_Page):
|
||||||
"""Returns None if a bad nickname, returns the corrected nickname
|
|
||||||
otherwise"""
|
|
||||||
|
|
||||||
if name is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
name = name.strip()
|
|
||||||
|
|
||||||
if len(name) == 0:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return name
|
|
||||||
|
|
||||||
class _ColorPage(hippo.CanvasBox):
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
hippo.CanvasBox.__init__(self, xalign=hippo.ALIGNMENT_CENTER,
|
_Page.__init__(self, xalign=hippo.ALIGNMENT_CENTER,
|
||||||
spacing=style.DEFAULT_SPACING,
|
background_color=_BACKGROUND_COLOR.get_int(),
|
||||||
yalign=hippo.ALIGNMENT_CENTER,
|
spacing=style.DEFAULT_SPACING,
|
||||||
**kwargs)
|
yalign=hippo.ALIGNMENT_CENTER, **kwargs)
|
||||||
self._color = None
|
|
||||||
|
|
||||||
self._label = hippo.CanvasText(text=_("Click to change color:"),
|
self._label = hippo.CanvasText(text=_("Click to change color:"),
|
||||||
xalign=hippo.ALIGNMENT_CENTER)
|
xalign=hippo.ALIGNMENT_CENTER)
|
||||||
@ -78,6 +89,7 @@ class _ColorPage(hippo.CanvasBox):
|
|||||||
self.append(self._cp)
|
self.append(self._cp)
|
||||||
|
|
||||||
self._color = self._cp.get_color()
|
self._color = self._cp.get_color()
|
||||||
|
self.set_valid(True)
|
||||||
|
|
||||||
def _new_color_cb(self, widget, color):
|
def _new_color_cb(self, widget, color):
|
||||||
self._color = color
|
self._color = color
|
||||||
@ -102,10 +114,9 @@ class _IntroBox(hippo.CanvasBox):
|
|||||||
hippo.CanvasBox.__init__(self, padding=style.zoom(30))
|
hippo.CanvasBox.__init__(self, padding=style.zoom(30))
|
||||||
|
|
||||||
self._page = self.PAGE_NAME
|
self._page = self.PAGE_NAME
|
||||||
|
self._name_page = _NamePage()
|
||||||
page_color = style.COLOR_PANEL_GREY.get_int()
|
self._color_page = _ColorPage()
|
||||||
self._name_page = _NamePage(background_color=page_color)
|
self._current_page = None
|
||||||
self._color_page = _ColorPage(background_color=page_color)
|
|
||||||
|
|
||||||
self._setup_page()
|
self._setup_page()
|
||||||
|
|
||||||
@ -113,31 +124,44 @@ class _IntroBox(hippo.CanvasBox):
|
|||||||
self.remove_all()
|
self.remove_all()
|
||||||
|
|
||||||
if self._page == self.PAGE_NAME:
|
if self._page == self.PAGE_NAME:
|
||||||
self.append(self._name_page, hippo.PACK_EXPAND)
|
self._current_page = self._name_page
|
||||||
elif self._page == self.PAGE_COLOR:
|
elif self._page == self.PAGE_COLOR:
|
||||||
self.append(self._color_page, hippo.PACK_EXPAND)
|
self._current_page = self._color_page
|
||||||
|
|
||||||
|
self.append(self._current_page, hippo.PACK_EXPAND)
|
||||||
|
|
||||||
button_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL)
|
button_box = hippo.CanvasBox(orientation=hippo.ORIENTATION_HORIZONTAL)
|
||||||
|
|
||||||
if self._page != self.PAGE_FIRST:
|
if self._page != self.PAGE_FIRST:
|
||||||
back_button = hippo.CanvasButton(text=_('Back'))
|
back_button = hippo.CanvasButton(text=_('Back'))
|
||||||
back_button.connect('activated', self._done_activated_cb)
|
back_button.connect('activated', self._back_activated_cb)
|
||||||
button_box.append(back_button)
|
button_box.append(back_button)
|
||||||
|
|
||||||
spacer = hippo.CanvasBox()
|
spacer = hippo.CanvasBox()
|
||||||
button_box.append(spacer, hippo.PACK_EXPAND)
|
button_box.append(spacer, hippo.PACK_EXPAND)
|
||||||
|
|
||||||
if self._page == self.PAGE_LAST:
|
if self._page == self.PAGE_LAST:
|
||||||
done_button = hippo.CanvasButton(text=_('Done'))
|
self._next_button = hippo.CanvasButton(text=_('Done'))
|
||||||
done_button.connect('activated', self._done_activated_cb)
|
self._next_button.connect('activated', self._done_activated_cb)
|
||||||
button_box.append(done_button)
|
button_box.append(self._next_button)
|
||||||
else:
|
else:
|
||||||
next_button = hippo.CanvasButton(text=_('Next'))
|
self._next_button = hippo.CanvasButton(text=_('Next'))
|
||||||
next_button.connect('activated', self._next_activated_cb)
|
self._next_button.connect('activated', self._next_activated_cb)
|
||||||
button_box.append(next_button)
|
button_box.append(self._next_button)
|
||||||
|
|
||||||
|
self._update_next_button()
|
||||||
|
self._current_page.connect('notify::valid',
|
||||||
|
self._page_valid_changed_cb)
|
||||||
|
|
||||||
self.append(button_box)
|
self.append(button_box)
|
||||||
|
|
||||||
|
def _update_next_button(self):
|
||||||
|
widget = self._next_button.props.widget
|
||||||
|
widget.props.sensitive = self._current_page.props.valid
|
||||||
|
|
||||||
|
def _page_valid_changed_cb(self, page, pspec):
|
||||||
|
self._update_next_button()
|
||||||
|
|
||||||
def _back_activated_cb(self, item):
|
def _back_activated_cb(self, item):
|
||||||
self._page -= 1
|
self._page -= 1
|
||||||
self._setup_page()
|
self._setup_page()
|
||||||
|
Loading…
Reference in New Issue
Block a user