import gtk 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 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 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): 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 if password.trim() == '': self.show_error_dialog('You must provide a password') return if email.trim() == '': self.show_error_dialog('You must provide a valid email address') return if password != confirmation: self.show_error_dialog('The password and confirmation must be the same') 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 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): gtk.Dialog.__init__(self,"Tutorial Info",None,gtk.DIALOG_MODAL) self.tutorial = tutorial self.controller = controller 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(3,2,False) labels = ["Tutorial Name","Author","Description"] 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.author_entry = gtk.Entry() self.author_entry.set_width_chars(40) self.author_entry.set_text(self.tutorial.author) table.attach(self.author_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) for x in range(0,3): 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.author = self.author_entry.get_text() self.tutorial.name = self.name_entry.get_text() self.tutorial.description = self.desc_entry.get_text() self.controller.save_tutorial_info(self.tutorial) self.response(gtk.RESPONSE_ACCEPT)