commit-gnue
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]