diff options
author | Wade Brainerd <wadetb@gmail.com> | 2009-09-14 00:32:43 (GMT) |
---|---|---|
committer | Wade Brainerd <wadetb@gmail.com> | 2009-09-14 00:32:43 (GMT) |
commit | 7ff623023031dae3aa2daf921fad4f71da1c4e8b (patch) | |
tree | 7f2584a6e71e98abd0857a5ad47274c511351a28 | |
parent | 05cb5364230d2d9ab65ac3a77a4a7dec29b8748b (diff) |
Lesson editor UI improvements.
-rw-r--r-- | editlessonlistscreen.py | 93 | ||||
-rw-r--r-- | mainscreen.py | 20 | ||||
-rwxr-xr-x | typingturtle.py | 59 |
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() |