From ff833a6ec7ef917422589df57169a87a05bf17b5 Mon Sep 17 00:00:00 2001 From: Charlie Date: Thu, 03 Dec 2009 12:10:02 +0000 Subject: The workshop --- (limited to 'Workshop.activity/dialogs.py') diff --git a/Workshop.activity/dialogs.py b/Workshop.activity/dialogs.py new file mode 100644 index 0000000..3d5f04a --- /dev/null +++ b/Workshop.activity/dialogs.py @@ -0,0 +1,346 @@ +# Copyright (C) 2009, Tutorius.org +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +import gtk +import logging +import threading + +class ErrorDialog(gtk.Dialog): + def __init__(self,text): + gtk.Dialog.__init__(self,"Error",None,gtk.DIALOG_MODAL,(gtk.STOCK_OK,gtk.RESPONSE_ACCEPT)) + self.label = gtk.Label(text) + self.vbox.pack_start(self.label,padding = 10) + self.vbox.show_all() + +class WaitingDialog(gtk.Dialog): + def __init__(self,callback,kwargs): + self.callback = callback + self.kwargs = kwargs + gtk.Dialog.__init__(self,"Please wait...",None,gtk.DIALOG_MODAL) + self.label = gtk.Label("Please wait while getting information from the store") + self.vbox.pack_start(self.label, padding = 10) + self.vbox.show_all() + + def operation_complete(self): + self.label.set_text("Operation complete") + self.ok_button = gtk.Button("Ok") + self.add_button(gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) + + + +class LoginDialog(gtk.Dialog): + def __init__(self): + gtk.Dialog.__init__(self,"Login",None,gtk.DIALOG_MODAL) + ok_button = gtk.Button("Login") + ok_button.connect("clicked",self.ok_clicked,None) + ok_button.show() + self.action_area.pack_start(ok_button) + self.add_button("Cancel",gtk.RESPONSE_REJECT) + self.set_resizable(False) + self.prepare_dialog() + + def set_model(self,model): + self.model = model + + def get_model(self): + return self.model + + def prepare_dialog(self): + self.user_line = gtk.HBox(False,10) + self.pass_line = gtk.HBox(False,10) + self.register_line = gtk.HBox(False) + self.remember_line = gtk.HBox(False) + + self.username_lbl = gtk.Label("Email:") + self.username_entry = gtk.Entry() + self.username_entry.set_width_chars(40) + + self.password_lbl = gtk.Label("Password:") + self.password_entry = gtk.Entry() + self.password_entry.set_visibility(False) + self.password_entry.set_width_chars(40) + + self.register_me = gtk.LinkButton("","Register Now!") + self.not_registered = gtk.Label("Not Registered? ") + + self.remember_user = gtk.CheckButton("Remember my username",False) + + self.register_me.connect("clicked",self.click_link,None) + + self.user_line.pack_start(self.username_lbl,False) + self.user_line.pack_end(self.username_entry,False) + + self.pass_line.pack_start(self.password_lbl,False) + self.pass_line.pack_end(self.password_entry,False) + + self.register_line.pack_end(self.register_me,False) + self.register_line.pack_end(self.not_registered,False) + + self.remember_line.pack_start(self.remember_user,False,padding=80) + + self.vbox.pack_start(self.register_line,False) + self.vbox.pack_start(self.user_line,False,padding=10) + self.vbox.pack_start(self.pass_line,False,padding=10) + self.vbox.pack_start(self.remember_line,False) + + self.vbox.show() + self.user_line.show() + self.pass_line.show() + self.register_line.show() + self.remember_line.show() + + self.username_lbl.show() + self.username_entry.show() + + self.password_lbl.show() + self.password_entry.show() + + self.register_me.show() + self.not_registered.show() + + self.remember_user.show() + + def ok_clicked(self,widget,data=None): + success = self.model.login(self.username_entry.get_text(), self.password_entry.get_text()) + if success: + self.response(gtk.RESPONSE_ACCEPT) + else: + errorDialog = ErrorDialog("The password or the email address is wrong") + errorDialog.run() + errorDialog.destroy() + + + def click_link(self,widget,data=None): + self.register_dialog = RegisterDialog(self.model) + self.register_dialog.run() + self.register_dialog.destroy() + +class RegisterDialog(gtk.Dialog): + def __init__(self,model): + gtk.Dialog.__init__(self,"Register",None,gtk.DIALOG_MODAL) + self.model = model + ok_button = gtk.Button("Register") + ok_button.connect("clicked",self.ok_clicked,None) + ok_button.show() + self.action_area.pack_start(ok_button) + self.add_button("Cancel",gtk.RESPONSE_REJECT) + self.set_resizable(False) + self.create_content() + + def ok_clicked(self,widget,data=None): + if not self.data_validation(): + return + success = self.model.register(self.entries[2].get_text(),self.entries[3].get_text(),self.entries[0].get_text()) + if success : + self.response(gtk.RESPONSE_ACCEPT) + else: + self.show_error_dialog("An error occured while registering the user") + + def data_validation(self): + username = self.entries[2].get_text() + password = self.entries[3].get_text() + confirmation = self.entries[4].get_text() + email = self.entries[0].get_text() + + if username.trim() == "": + self.show_error_dialog('You must choose a username') + return False + if password.trim() == '': + self.show_error_dialog('You must provide a password') + return False + if email.trim() == '': + self.show_error_dialog('You must provide a valid email address') + return False + if password != confirmation: + self.show_error_dialog('The password and confirmation must be the same') + return False + + return True + + def show_error_dialog(self,error_message): + errorDialog = ErrorDialog("An error occured while registering a user") + errorDialog.run() + errorDialog.destroy() + + def create_content(self): + entry_length = 40 + table = gtk.Table(10,4,False) + self.entries = [] + labels = ["Email address","Name","Username","Password","Confirmation","Location","Web Site"] + required=[True,True,True,True,True,False,False] + hidden=[False,False,False,True,True,False,False] + for x in range(6): + lbl = gtk.Label(labels[x]+":") + entry = gtk.Entry() + self.entries.append(entry) + entry.set_width_chars(entry_length) + table.attach(lbl,0,1,x,x+1,xpadding=10) + table.attach(entry,1,2,x,x+1,ypadding=10) + if hidden[x]: + entry.set_visibility(False) + if required[x]: + required_lbl = gtk.Label("*") + table.attach(required_lbl,2,3,x,x+1) + required_lbl.show() + lbl.set_alignment(0.0,0.5) + lbl.show() + entry.show() + + + if_required = gtk.Label(" * Required Field") + table.attach(if_required,3,4,0,1) + + under_13 = gtk.CheckButton("I am 13 years old or younger",False) + legal = gtk.CheckButton("I have read the",False) + legal_notices=gtk.LinkButton('',"legal notices") + and_lbl = gtk.Label("and") + privacy = gtk.LinkButton('',"privacy statement") + hbox = gtk.HBox(False,0) + hbox.pack_start(legal) + hbox.pack_start(legal_notices) + hbox.pack_start(and_lbl) + hbox.pack_start(privacy) + + table.attach(under_13,1,2,7,8) + table.attach(hbox,1,2,8,9) + under_13.show() + legal.show() + legal_notices.show() + and_lbl.show() + privacy.show() + hbox.show() + if_required.show() + table.show() + self.vbox.pack_start(table) + +class InfoDialog(gtk.Dialog): + def __init__(self,tutorial,controller,categories): + gtk.Dialog.__init__(self,"Tutorial Info",None,gtk.DIALOG_MODAL) + self.tutorial = tutorial + self.controller = controller + self.categories = categories + ok_button = gtk.Button("Save") + ok_button.connect("clicked",self.ok_clicked,None) + ok_button.show() + self.action_area.pack_start(ok_button) + self.add_button("Cancel",gtk.RESPONSE_REJECT) + self.set_resizable(False) + self.prepare_content() + + def prepare_content(self): + table = gtk.Table(4,2,False) + labels = ["Tutorial Name","Version","Description","Category"] + entry_length = [40,40,40] + self.entries = [] + + self.name_entry = gtk.Entry() + self.name_entry.set_width_chars(40) + self.name_entry.set_text(self.tutorial.name) + table.attach(self.name_entry,1,2,0,1,ypadding=10) + + + self.version_entry = gtk.Entry() + self.version_entry.set_width_chars(40) + self.version_entry.set_text(str(self.tutorial.version)) + table.attach(self.version_entry,1,2,1,2,ypadding=10) + + self.desc_entry = gtk.Entry() + self.desc_entry.set_width_chars(40) + self.desc_entry.set_text(self.tutorial.description) + table.attach(self.desc_entry,1,2,2,3,ypadding=10) + + self.category_entry = gtk.combo_box_new_text() + logging.info(len(self.categories)) + logging.info(self.categories) + for cat in range(0,len(self.categories)): + self.category_entry.append_text(self.categories[cat]) + logging.info(self.tutorial.category) + logging.info(self.categories[cat]) + if self.tutorial.category != '' and self.tutorial.category == str(self.categories[cat]): + self.category_entry.set_active(cat) + table.attach(self.category_entry,1,2,3,4,ypadding=10) + + for x in range(0,4): + label = gtk.Label(labels[x]) + table.attach(label,0,1,x,x+1,xpadding=10) + label.set_alignment(0.0,0.5) + table.show_all() + self.vbox.pack_start(table) + + def ok_clicked(self,widget,data): + self.tutorial.version = int(self.version_entry.get_text()) + self.tutorial.name = self.name_entry.get_text() + self.tutorial.description = self.desc_entry.get_text() + self.tutorial.category = self.category_entry.get_active_text() + + self.controller.save_tutorial_info(self.tutorial) + self.response(gtk.RESPONSE_ACCEPT) + +class StoreInformationDialog(gtk.Dialog): + def __init__(self,tutorial): + self.text = ' %(text)s: ' + self.value = ' %(text)s ' + + gtk.Dialog.__init__(self,"Tutorial Information",None,gtk.DIALOG_MODAL,(gtk.STOCK_OK,gtk.RESPONSE_ACCEPT)) + + self.table = gtk.Table(6,2,False) + self.tut_name = gtk.Label("") + self.tut_name.set_markup(self.text % {"text":"Name"}) + self.tut_name_value = gtk.Label() + self.tut_name_value.set_markup(self.value % {"text":tutorial.name}) + + self.author = gtk.Label() + self.author.set_markup(self.text % {"text":"Author"}) + self.author_value = gtk.Label() + self.author_value.set_markup(self.value % {"text":tutorial.author}) + + + self.desc = gtk.Label() + self.desc.set_markup(self.text % {"text":"Description"}) + self.desc_value = gtk.Label() + self.desc_value.set_markup(self.value % {"text":tutorial.description}) + + + self.version = gtk.Label() + self.version_value = gtk.Label() + self.version.set_markup(self.text % {"text":"Version"}) + self.version_value.set_markup(self.value % {"text":str(tutorial.version)}) + + self.rating = gtk.Label() + self.rating_value = gtk.Label() + self.rating.set_markup(self.text % {"text":"Rating"}) + self.rating_value.set_markup(self.value % {"text":str(tutorial.rating)}) + + self.category = gtk.Label() + self.category_value = gtk.Label() + self.category.set_markup(self.text % {"text":"Category"}) + self.category_value.set_markup(self.value % {"text":tutorial.category}) + + self.table.attach(self.tut_name,0,1,0,1,ypadding=5) + self.table.attach(self.tut_name_value,1,2,0,1,ypadding=5) + self.table.attach(self.author,0,1,1,2,ypadding=5) + self.table.attach(self.author_value,1,2,1,2,ypadding=5) + self.table.attach(self.desc,0,1,2,3,ypadding=5) + self.table.attach(self.desc_value,1,2,2,3,ypadding=5) + self.table.attach(self.version,0,1,3,4,ypadding=5) + self.table.attach(self.version_value,1,2,3,4,ypadding=5) + self.table.attach(self.rating,0,1,4,5,ypadding=5) + self.table.attach(self.rating_value,1,2,4,5,ypadding=5) + self.table.attach(self.category,0,1,5,6,ypadding=5) + self.table.attach(self.category_value,1,2,5,6,ypadding=5) + + self.vbox.pack_start(self.table) + self.table.show_all() + -- cgit v0.9.1