]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Added AskPassword() with same interface as AskString. By Steve Majewski with some...
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 10 Feb 1999 22:38:44 +0000 (22:38 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 10 Feb 1999 22:38:44 +0000 (22:38 +0000)
Mac/Lib/EasyDialogs.py

index 12dbf973ac68e98c283a24dcc7ec3ee351067fcc..d1bf42076c96ff43e251d1b5e9f8d8ae99ddde45 100644 (file)
@@ -16,6 +16,8 @@ Based upon STDWIN dialogs with the same names and functions.
 from Dlg import GetNewDialog, SetDialogItemText, GetDialogItemText, ModalDialog
 import Qd
 import QuickDraw
+import Dialogs
+import Windows
 import Dlg,Win,Evt,Events # sdm7g
 import MacOS
 import string
@@ -86,6 +88,75 @@ def AskString(prompt, default = "", id=257):
                        return cr2lf(GetDialogItemText(h))
                if n == 2: return None
 
+def AskPassword(prompt,         default='', id=257):   
+       """Display a PROMPT string and a text entry field with a DEFAULT string.
+       The string is displayed as bullets only.
+       
+       Return the contents of the text entry field when the user clicks the
+       OK button or presses Return.
+       Return None when the user clicks the Cancel button.
+       
+       If omitted, DEFAULT is empty.
+       
+       The PROMPT and DEFAULT strings, as well as the return value,
+       can be at most 255 characters long.
+       """
+       d = GetNewDialog(id, -1)
+       if not d:
+               print "Can't get DLOG resource with id =", id
+               return
+       tp, h, rect = d.GetDialogItem(3)        # STATIC TEXT ITEM <= prompt 
+       SetDialogItemText(h, lf2cr(prompt))     
+       tp, h, rect = d.GetDialogItem(4)        # EDIT TEXT ITEM 
+       bullets = '\245'*len(default)
+       SetDialogItemText(h, bullets )
+       d.SelectDialogItemText(4, 999, 999)
+       d.SetDialogDefaultItem(Dialogs.ok)
+       d.SetDialogCancelItem(Dialogs.cancel)
+       string = default
+       oldschedparams = MacOS.SchedParams(0,0)
+       while 1:
+               ready,ev = Evt.WaitNextEvent( -1, 6 )
+               if not ready: continue
+               what,msg,when,where,mod = ev
+               if what == 0 : Dlg.DialogSelect(ev)     # for blinking caret
+               elif Dlg.IsDialogEvent(ev):
+                       if what == Events.keyDown:
+                               charcode = msg & Events.charCodeMask
+                               if ( mod & Events.cmdKey ):
+                                       MacOS.SysBeep()
+                                       continue        # don't do cut & paste commands
+                               else:   
+                                       if charcode == Events.kReturnCharCode:
+                                               break
+                                       elif charcode == Events.kEscapeCharCode:
+                                               string = None
+                                               break
+                                       elif charcode in (Events.kLeftArrowCharCode,
+                                                               Events.kBackspaceCharCode):
+                                               string = string[:-1]
+                                       else:
+                                               string = string + chr(charcode)
+                                               msg =  0245   # Octal code for bullet
+                                               ev = (what,msg,when,where,mod)
+                       rs, win, item = Dlg.DialogSelect(ev)
+                       if item == Dialogs.ok :
+                               break   
+                       elif item == Dialogs.cancel :
+                               string = None
+                               break
+               elif what == Events.mouseDown:
+                       part, win = Win.FindWindow(where)
+                       if part == Windows.inDrag and win:
+                               win.DragWindow(where, screenbounds)
+                       elif part == Windows.inMenuBar:
+                               MacOS.HandleEvent(ev)
+                       else:
+                               MacOS.SysBeep()         # Cannot handle selections, unfortunately
+                       
+               elif what == Events.updateEvt: MacOS.HandleEvent(ev)
+       apply(MacOS.SchedParams, oldschedparams)
+       return string
 
 def AskYesNoCancel(question, default = 0, yes=None, no=None, cancel=None, id=258):
 ##     """Display a QUESTION string which can be answered with Yes or No.