[kupfer: 7/12] +Credentials Dialog: ask users for username and password



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">&#x25CF;</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">&#x25CF;</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]