Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWade Brainerd <wadetb@gmail.com>2009-09-14 00:32:43 (GMT)
committer Wade Brainerd <wadetb@gmail.com>2009-09-14 00:32:43 (GMT)
commit7ff623023031dae3aa2daf921fad4f71da1c4e8b (patch)
tree7f2584a6e71e98abd0857a5ad47274c511351a28
parent05cb5364230d2d9ab65ac3a77a4a7dec29b8748b (diff)
Lesson editor UI improvements.
-rw-r--r--editlessonlistscreen.py93
-rw-r--r--mainscreen.py20
-rwxr-xr-xtypingturtle.py59
3 files changed, 112 insertions, 60 deletions
diff --git a/editlessonlistscreen.py b/editlessonlistscreen.py
index 29d76d7..5a63d1c 100644
--- a/editlessonlistscreen.py
+++ b/editlessonlistscreen.py
@@ -76,39 +76,42 @@ class EditLessonListScreen(gtk.VBox):
col.set_expand(True)
self.treeview.append_column(col)
+ renderer = gtk.CellRendererText()
+ col = gtk.TreeViewColumn(_('Type'), renderer)
+ col.set_cell_data_func(renderer, self.type_render_cb)
+ col.set_expand(False)
+ self.treeview.append_column(col)
+
scroll = gtk.ScrolledWindow()
scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scroll.add(self.treeview)
- addlabel = gtk.Label()
- addlabel.set_markup(_('Add Lesson'))
- addlessonbtn = gtk.Button()
- addlessonbtn.add(addlabel)
- addlessonbtn.connect('clicked', self.add_lesson_clicked_cb)
-
- editlabel = gtk.Label()
- editlabel.set_markup('<span size="x-large"><b>'+_('Edit Lesson')+'</b></span>')
- self.editlessonbtn = gtk.Button()
- self.editlessonbtn.add(editlabel)
- self.editlessonbtn.connect('clicked', self.edit_lesson_clicked_cb)
- self.editlessonbtn.set_sensitive(False)
-
- dellabel = gtk.Label()
- dellabel.set_markup(_('Delete Lesson'))
- self.dellessonbtn = gtk.Button()
- self.dellessonbtn.add(dellabel)
- self.dellessonbtn.connect('clicked', self.del_lesson_clicked_cb)
- self.dellessonbtn.set_sensitive(False)
-
- buttonbox = gtk.HBox()
- buttonbox.pack_start(addlessonbtn, True, False, 10)
- buttonbox.pack_start(self.editlessonbtn, True, False, 10)
- buttonbox.pack_start(self.dellessonbtn, True, False, 10)
+ self.addbtn = gtk.Button()
+ self.addbtn.add(sugar.graphics.icon.Icon(icon_name='list-add'))
+ self.addbtn.connect('clicked', self.add_lesson_clicked_cb)
+ self.delbtn = gtk.Button()
+ self.delbtn.add(sugar.graphics.icon.Icon(icon_name='list-remove'))
+ self.delbtn.connect('clicked', self.del_lesson_clicked_cb)
+ self.delbtn.set_sensitive(False)
+ self.moveupbtn = gtk.Button()
+ self.moveupbtn.add(sugar.graphics.icon.Icon(icon_name='go-up'))
+ self.moveupbtn.connect('clicked', self.move_lesson_up_clicked_cb)
+ self.moveupbtn.set_sensitive(False)
+ self.movedownbtn = gtk.Button()
+ self.movedownbtn.add(sugar.graphics.icon.Icon(icon_name='go-down'))
+ self.movedownbtn.connect('clicked', self.move_lesson_down_clicked_cb)
+ self.movedownbtn.set_sensitive(False)
+
+ btnbox = gtk.HBox()
+ btnbox.pack_end(self.addbtn, False, False)
+ btnbox.pack_end(self.delbtn, False, False)
+ btnbox.pack_end(self.moveupbtn, False, False)
+ btnbox.pack_end(self.movedownbtn, False, False)
self.pack_start(titlebox, False, False, 10)
self.pack_start(gtk.HSeparator(), False, False, 0)
self.pack_start(scroll, True, True, 10)
- self.pack_start(buttonbox, False, False, 10)
+ self.pack_start(btnbox, False, False, 10)
self.build()
@@ -130,6 +133,14 @@ class EditLessonListScreen(gtk.VBox):
t = self.lessons[id]
cell_renderer.set_property('text', t['description'])
+ def type_render_cb(self, column, cell_renderer, model, iter):
+ id = model.get_value(iter, 0)
+ t = self.lessons[id]
+ if t['type'] == 'normal':
+ cell_renderer.set_property('text', _('Text'))
+ if t['type'] == 'balloon':
+ cell_renderer.set_property('text', _('Balloon Game'))
+
def stop_clicked_cb(self, btn):
# Refresh the main screen given the new lesson data.
self.activity.mainscreen.show_lesson(self.activity.mainscreen.lesson_index)
@@ -151,23 +162,35 @@ class EditLessonListScreen(gtk.VBox):
self.lessons.pop(id)
self.build()
- def edit_lesson_clicked_cb(self, btn):
+ def move_lesson_up_clicked_cb(self, btn):
path = self.treeview.get_cursor()[0]
if path:
model = self.liststore
iter = model.get_iter(path)
id = model.get_value(iter, 0)
- lesson = self.lessons[id]
- self.activity.push_screen(editlessonscreen.EditLessonScreen(self.activity, lesson))
-
+ if id > 0:
+ lesson = self.lessons.pop(id)
+ self.lessons.insert(id - 1, lesson)
+ self.build()
+
+ def move_lesson_down_clicked_cb(self, btn):
+ path = self.treeview.get_cursor()[0]
+ if path:
+ model = self.liststore
+ iter = model.get_iter(path)
+ id = model.get_value(iter, 0)
+ if id < len(self.lessons) - 1:
+ lesson = self.lessons.pop(id)
+ self.lessons.insert(id + 1, lesson)
+ self.build()
+
def lesson_selected_cb(self, treeview):
path = treeview.get_cursor()[0]
- if path:
- self.editlessonbtn.set_sensitive(True)
- self.dellessonbtn.set_sensitive(True)
- else:
- self.editlessonbtn.set_sensitive(False)
- self.dellessonbtn.set_sensitive(False)
+ enable = path is not None
+
+ self.delbtn.set_sensitive(True)
+ self.moveupbtn.set_sensitive(True)
+ self.movedownbtn.set_sensitive(True)
def lesson_activated_cb(self, treeview, path, column):
model = treeview.get_model()
diff --git a/mainscreen.py b/mainscreen.py
index 5975ac2..aaff165 100644
--- a/mainscreen.py
+++ b/mainscreen.py
@@ -27,7 +27,7 @@ import sugar.activity.activity
from sugar.graphics import *
# Import activity modules.
-import lessonscreen, medalscreen, editlessonlistscreen
+import lessonscreen, medalscreen
import balloongame
import titlescene
import keyboard
@@ -97,14 +97,6 @@ class MainScreen(gtk.VBox):
self.keyboard_images = keyboard.KeyboardImages(width, height)
self.keyboard_images.load_images()
- # Access lesson editor.
- editbtn = gtk.Button()
- editbtn.add(gtk.Label(_('Edit Lessons')))
- editbtn.connect('clicked', self.edit_lessons_cb)
-
- toolbar = gtk.HBox()
- toolbar.pack_end(editbtn)
-
navbox = gtk.HBox()
navbox.set_spacing(10)
navbox.pack_start(self.prevlessonbtn, True)
@@ -116,12 +108,17 @@ class MainScreen(gtk.VBox):
lessonbox.pack_start(navbox, False)
lessonbox.pack_start(self.lessonbox)
- self.pack_start(toolbar)
self.pack_start(self.titlescene, False, True, 10)
self.pack_start(lessonbox, True)
self.show_next_lesson()
+ def enter(self):
+ self.activity.editorbtn.set_sensitive(True)
+
+ def leave(self):
+ self.activity.editorbtn.set_sensitive(False)
+
def load_lessons(self, path):
# Find all .lesson files in ./lessons/en_US/ for example.
self.lessons = []
@@ -253,6 +250,3 @@ class MainScreen(gtk.VBox):
if self.activity.data['medals'].has_key(self.visible_lesson['name']):
medal = self.activity.data['medals'][self.visible_lesson['name']]
self.activity.push_screen(medalscreen.MedalScreen(medal, self.activity))
-
- def edit_lessons_cb(self, widget):
- self.activity.push_screen(editlessonlistscreen.EditLessonListScreen(self.activity, self.lessons))
diff --git a/typingturtle.py b/typingturtle.py
index a570eb0..dfe4ccb 100755
--- a/typingturtle.py
+++ b/typingturtle.py
@@ -34,6 +34,7 @@ import gobject, pygtk, gtk, pango
# Import Sugar UI modules.
import sugar.activity.activity
from sugar.graphics import *
+from sugar.graphics import toolbutton
from sugar.presence import presenceservice
@@ -47,7 +48,7 @@ bundle_path = sugar.activity.activity.get_bundle_path()
os.chdir(bundle_path)
# Import activity modules.
-import mainscreen, lessonscreen, medalscreen
+import mainscreen, editlessonlistscreen
# This is the main Typing Turtle activity class.
#
@@ -85,55 +86,89 @@ class TypingTurtle(sugar.activity.activity.Activity):
activity_toolbar = self.tbox.get_activity_toolbar()
activity_toolbar.share.props.visible = False
+ self.editorbtn = sugar.graphics.toolbutton.ToolButton('format-justify-left')
+ self.editorbtn.set_tooltip(_("Edit Lessons"))
+ self.editorbtn.connect('clicked', self.editor_clicked_cb)
+
+ share_idx = activity_toolbar.get_item_index(activity_toolbar.share)
+ activity_toolbar.insert(self.editorbtn, share_idx)
+ self.editorbtn.show_all()
+
def build_toolbox(self):
self.tbox = sugar.activity.activity.ActivityToolbox(self)
self.tbox.show_all()
self.set_toolbox(self.tbox)
+ def editor_clicked_cb(self, btn):
+ self.push_screen(editlessonlistscreen.EditLessonListScreen(self, self.mainscreen.lessons))
+
def push_screen(self, screen):
if len(self.screens):
- self.screenbox.remove(self.screens[-1])
+ oldscreen = self.screens[-1]
+
+ try:
+ oldscreen.leave()
+ except:
+ pass
+
+ self.screenbox.remove(oldscreen)
self.screenbox.pack_start(screen, True, True)
self.screens.append(screen)
+
+ try:
+ screen.enter()
+ except:
+ pass
def pop_screen(self):
- self.screenbox.remove(self.screens[-1])
- self.screens.pop()
+ oldscreen = self.screens.pop()
+
+ try:
+ oldscreen.leave()
+ except:
+ pass
+
+ self.screenbox.remove(oldscreen)
+
if len(self.screens):
- self.screenbox.pack_start(self.screens[-1])
-
+ screen = self.screens[-1]
+
+ try:
+ screen.enter()
+ except:
+ pass
+
+ self.screenbox.pack_start(screen)
+
def add_history(self, entry):
self.data['history'].append(entry)
def read_file(self, file_path):
- print 'read_file'
-
if self.metadata['mime_type'] != 'text/plain':
return
fd = open(file_path, 'r')
try:
text = fd.read()
- print "read %s" % text
self.data = json.loads(text)
+ if self.data.has_key('lessons'):
+ self.mainscreen.lessons = self.data['lessons']
finally:
fd.close()
self.mainscreen.show_next_lesson()
def write_file(self, file_path):
- print 'write_file'
-
if not self.metadata['mime_type']:
self.metadata['mime_type'] = 'text/plain'
fd = open(file_path, 'w')
try:
+ self.data['lessons'] = self.mainscreen.lessons
text = json.dumps(self.data)
fd.write(text)
- print "wrote %s" % text
finally:
fd.close()