Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Workshop.activity/dialogs.py
diff options
context:
space:
mode:
Diffstat (limited to 'Workshop.activity/dialogs.py')
-rw-r--r--Workshop.activity/dialogs.py346
1 files changed, 346 insertions, 0 deletions
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 = '<span size="large"> %(text)s: </span>'
+ self.value = '<span size="large"> %(text)s </span>'
+
+ 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()
+