[kupfer: 7/12] +Credentials Dialog: ask users for username and password
- From: Ulrik Sverdrup <usverdrup src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [kupfer: 7/12] +Credentials Dialog: ask users for username and password
- Date: Tue, 9 Feb 2010 21:01:02 +0000 (UTC)
commit 5d5560959dd679b4937842a7b3c92e523f54ec1b
Author: Karol BÄ?dkowski <karol bedkowsk+gh gmail com>
Date: Sat Feb 6 12:38:49 2010 +0100
+Credentials Dialog: ask users for username and password
data/credentials_dialog.ui | 151 +++++++++++++++++++++++++++++++++++++++
kupfer/ui/credentials_dialog.py | 53 ++++++++++++++
2 files changed, 204 insertions(+), 0 deletions(-)
---
diff --git a/data/credentials_dialog.ui b/data/credentials_dialog.ui
new file mode 100644
index 0000000..3d4f286
--- /dev/null
+++ b/data/credentials_dialog.ui
@@ -0,0 +1,151 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkDialog" id="credentials_dialog">
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes">User credentials</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <accelerator key="Return" signal="activate-default"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="grid_main">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-dialog-authentication</property>
+ <property name="icon-size">6</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkTable" id="table_fields">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label_user">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_User:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_username</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_pass">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Password:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry_username">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">●</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="on_button_cancel_clicked"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_ok">
+ <property name="label">_Change</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <signal name="clicked" handler="on_button_ok_clicked"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_cancel</action-widget>
+ <action-widget response="0">button_ok</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/kupfer/ui/credentials_dialog.py b/kupfer/ui/credentials_dialog.py
new file mode 100644
index 0000000..8cc3584
--- /dev/null
+++ b/kupfer/ui/credentials_dialog.py
@@ -0,0 +1,53 @@
+import gtk
+
+from kupfer import version, config, kupferstring
+
+class CredentialsDialogController():
+ def __init__(self, username, password):
+ """Load ui from data file"""
+ builder = gtk.Builder()
+ builder.set_translation_domain(version.PACKAGE_NAME)
+ ui_file = config.get_data_file("credentials_dialog.ui")
+ builder.add_from_file(ui_file)
+ builder.connect_signals(self)
+
+ self.window = builder.get_object("credentials_dialog")
+ self.entry_user = builder.get_object('entry_username')
+ self.entry_pass = builder.get_object('entry_password')
+
+ self.entry_user.set_text(username or '')
+ self.entry_pass.set_text(password or '')
+
+ def on_button_ok_clicked(self, widget):
+ self.window.response(gtk.RESPONSE_ACCEPT)
+ self.window.hide()
+
+ def on_button_cancel_clicked(self, widget):
+ self.window.response(gtk.RESPONSE_CANCEL)
+ self.window.hide()
+
+ def show(self):
+ return self.window.run()
+
+ @property
+ def username(self):
+ return kupferstring.tounicode(self.entry_user.get_text())
+
+ @property
+ def password(self):
+ return kupferstring.tounicode(self.entry_pass.get_text())
+
+
+def ask_user_credentials(user=None, password=None):
+ ''' Ask user for username and password.
+
+ @user, @password - initial values
+ @return:
+ (user, password) when user press "change"
+ None when user press "cancel" button '''
+ dialog = CredentialsDialogController(user, password)
+ result = None
+ if dialog.show() == gtk.RESPONSE_ACCEPT:
+ result = dialog.username, dialog.password
+ return result
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]