[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
r5962 - trunk/gnue-forms/src/uidrivers/gtk2
From: |
johannes |
Subject: |
r5962 - trunk/gnue-forms/src/uidrivers/gtk2 |
Date: |
Sun, 11 Jul 2004 12:35:16 -0500 (CDT) |
Author: johannes
Date: 2004-07-11 12:35:14 -0500 (Sun, 11 Jul 2004)
New Revision: 5962
Modified:
trunk/gnue-forms/src/uidrivers/gtk2/UILoginHandler.py
Log:
Fixed loginhandler for gtk2
Modified: trunk/gnue-forms/src/uidrivers/gtk2/UILoginHandler.py
===================================================================
--- trunk/gnue-forms/src/uidrivers/gtk2/UILoginHandler.py 2004-07-10
23:34:54 UTC (rev 5961)
+++ trunk/gnue-forms/src/uidrivers/gtk2/UILoginHandler.py 2004-07-11
17:35:14 UTC (rev 5962)
@@ -18,154 +18,121 @@
#
# Copyright 2000-2004 Free Software Foundation
#
-# FILE:
-# gtk2/UILoginHandler.py
-#
-# DESCRIPTION:
-# Part of the gtk2 based user interface driver for GNUe forms.
-#
-# NOTES:
-#
+# $Id :$
-import string
+import gtk
import os.path
-import gtk
-
-from gnue.common.datasources import GLoginHandler
from gnue.common.apps import GConfig
+from gnue.common.datasources import GLoginHandler
-# Shortcut
-images_dir = GConfig.getInstalledBase('forms_images','common_images') + '/'
+# =============================================================================
+# This class implements a login handler for GTK2
+# =============================================================================
+class UILoginHandler (GLoginHandler.LoginHandler):
-#####################################################################
-##
-## Login Support
-##
-#####################################################################
+ # ---------------------------------------------------------------------------
+ # Get input for all fields listed in loginData
+ # ---------------------------------------------------------------------------
-class UILoginHandler(GLoginHandler.LoginHandler):
- def __init__(self):
- self.dlg = None
+ def getLogin (self, loginData, error = None):
+ (connection, description, fields) = loginData
- # Hack for McMillan packaging on win32
- # TODO: do we need that?
- def getDummyLogin(self):
- pass
+ self.dialog = gtk.Dialog (u_("GNU Enterprise: Login to %s") % connection,
+ None, gtk.DIALOG_MODAL,
+ (gtk.STOCK_APPLY, gtk.RESPONSE_OK,
+ gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
- def getLogin(self, loginData, errortext=None):
-
- if len(loginData[1]):
- loginMesg = _('Login required for\n"%s"') % (loginData[1])
- else:
- loginMesg = _('Login required for %s') % (loginData[0])
-
- self.dlg = gtk.Dialog(_("GNU Enterprise: Login to %s") % loginData[0],
- None, gtk.DIALOG_MODAL,
- (_("_LOGIN"), gtk.RESPONSE_OK,
- _("_CANCEL"), gtk.RESPONSE_CANCEL))
-
- table1 = gtk.Table(len(loginData[2])+10, 6) # row, column
- table1.set_row_spacings(4)
- table1.set_col_spacings(4)
-
- bmp = gtk.Image()
-
- if os.path.isabs(gConfigForms('loginPNG')):
- imageFile = gConfigForms('loginPNG')
- else:
- imageFile = images_dir+gConfigForms('loginPNG')
-
- bmp.set_from_file(imageFile)
- table1.attach(bmp,1,3,0,1)
-
- messageField = gtk.Label(str(loginMesg))
- table1.attach(messageField,1,3,2,3)
-
- self.textEntryList = []
- labelList = []
+ self.dialog.set_border_width (10)
- for prompt in loginData[2]:
-
- # Build label
- s = gtk.Label('%s:' % prompt[1])
- s.set_use_underline(gtk.TRUE)
- labelList.append(s)
+ imageFile = gConfigForms('loginPNG')
+ if not os.path.exists (imageFile):
+ imageFile = os.path.join (os.path.normpath ( \
+ GConfig.getInstalledBase ('forms_images', 'common_images')),
+ gConfigForms ('loginPNG'))
- # Build entry fields
- t = gtk.Entry()
+ bmp = gtk.Image ()
+ bmp.set_from_file (imageFile)
+ self.dialog.vbox.pack_start (bmp)
+ bmp.show ()
- # set visibility to 0 for password fields
- if prompt[2]:
- t.set_visibility(0)
-
- myID = len(self.textEntryList)
- self.textEntryList.append(t)
- t.connect("key-press-event", self.keyPressHandler, myID)
+ text = u_('Login required for %(newline)s"%(description)s"') \
+ % {'newline': len (description) and '\n' or '',
+ 'description': description or connection}
+ label = gtk.Label (text.encode ('utf-8'))
+ label.set_line_wrap (True)
+ label.set_justify (gtk.JUSTIFY_CENTER)
+ self.dialog.vbox.pack_start (label, True, True, 20)
+ label.show ()
- num_rows=len(loginData[2])
-
- # Add labels and entry fields to layout
+ table = gtk.Table (len (fields), 2)
+ self.textEntries = []
- for i in range(0, len(self.textEntryList)):
- table1.attach(labelList[i],1,2,i+3,i+4)
- table1.attach(self.textEntryList[i],2,3,i+3,i+4)
+ for ix in range (len (fields)):
+ item = fields [ix]
+ text = "%s" % item [1]
+ label = gtk.Label (text.encode ('utf-8'))
+ label.set_alignment (0, label.get_alignment () [1])
+ table.attach (label, 0, 1, ix, ix + 1)
+ label.show ()
- if errortext:
- errorField = gtk.Label(str(errortext))
- errorField.set_line_wrap(gtk.TRUE)
- # Write in errortext in red
- errorField.modify_fg(gtk.STATE_NORMAL,gtk.gdk.color_parse('red'))
-
- t = len(self.textEntryList)
- table1.attach(errorField,1,3,t+4,t+5)
+ entry = gtk.Entry ()
+ if item [2]:
+ entry.set_visibility (0)
+ table.attach (entry, 1, 2, ix, ix + 1)
+ entry.connect ('key-press-event', self._keypress, ix + 1)
+ entry.show ()
+ self.textEntries.append (entry)
+
+ table.show ()
+ self.dialog.vbox.pack_start (table, True, True, 10)
+
+ # Add an error text if given
+ if error is not None:
+ label = gtk.Label (error.encode ('utf-8'))
+ label.set_line_wrap (True)
+ label.modify_fg (gtk.STATE_NORMAL, gtk.gdk.color_parse ('red'))
+ self.dialog.vbox.pack_start (label, True, True, 10)
+ label.show ()
+
# focus first entry
- self.textEntryList[0].grab_focus()
+ self.textEntries [0].grab_focus ()
- self.dlg.vbox.pack_start(table1, gtk.TRUE, gtk.TRUE, 0)
- self.dlg.set_position(1) #for center
- self.dlg.show_all()
+ self.dialog.set_position (1) # for center
+ self.dialog.show_all ()
- response=self.dlg.run()
+ result = self.dialog.run ()
+ self.dialog.destroy ()
- self.dlg.destroy()
-
- if response==gtk.RESPONSE_OK:
- self.loginCompleted(1)
- else:
- self.loginCompleted(0)
+ self._completed = result == gtk.RESPONSE_OK
+ if not self._completed:
raise GLoginHandler.UserCanceledLogin
- # get loginData
- rv = {}
- for i in range(0, len(loginData[2])):
- rv[loginData[2][i][0]] = self.textEntryList[i].get_text()
+ result = {}
+ for ix in range (len (fields)):
+ result [fields [ix][0]] = self.textEntries [ix].get_text ()
- return rv
+ return result
- #
- # Login is completed, for whatever reason
- #
- def loginCompleted(self, successful):
- self._completed = successful
- #
- # Called when user presses a key
- # -- interupts event chain, if ENTER was pressed
- #
- def keyPressHandler(self, widget, event, myID):
- if event.type!=gtk.gdk.KEY_PRESS:
+ # ---------------------------------------------------------------------------
+ # Keypress handler for moving the focus on enter-keys
+ # ---------------------------------------------------------------------------
+
+ def _keypress (self, widget, event, data):
+ if event.type != gtk.gdk.KEY_PRESS:
return
- # Check if ENTER is pressed:
- if event.keyval == gtk.keysyms.Return and \
- not event.state:
+ if event.keyval == gtk.keysyms.Return and not event.state:
+ if data < len (self.textEntries):
+ self.textEntries [data].grab_focus ()
+ else:
+ self.dialog.response(gtk.RESPONSE_OK)
- try:
- # move to next Entry in List
- self.textEntryList[myID+1].grab_focus()
- except IndexError:
- # for the last event in the list, trigger OK button
- self.dlg.response(gtk.RESPONSE_OK)
+
+ # Hack for McMillan packaging on win32
+ # TODO: do we need that?
+ def getDummyLogin (self):
+ pass
Property changes on: trunk/gnue-forms/src/uidrivers/gtk2/UILoginHandler.py
___________________________________________________________________
Name: svn:keywords
+ +Id
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- r5962 - trunk/gnue-forms/src/uidrivers/gtk2,
johannes <=