home *** CD-ROM | disk | FTP | other *** search
/ Aminet 18 / aminetcdnumber181997.iso / Aminet / dev / e / EasyGUI_v33b2.lha / Src / Plugins / password.e < prev    next >
Text File  |  1997-02-02  |  4KB  |  133 lines

  1. OPT MODULE, PREPROCESS
  2.  
  3. MODULE 'intuition/intuition', 'intuition/sghooks', 'intuition/gadgetclass',
  4.        'gadtools',
  5.        'libraries/gadtools',
  6.        'tools/textlen', 'tools/inithook',
  7.        'utility/hooks',
  8.        'tools/EasyGUI'
  9.  
  10. RAISE "MEM" IF String()=NIL
  11.  
  12. CONST NUM_EOS=EO_SPECIAL+1
  13.  
  14. -> Share gadtoolsbase with EasyGUI
  15.  
  16. EXPORT OBJECT password OF plugin
  17.   estr
  18.   disabled
  19. PRIVATE
  20.   password:PTR TO gadget
  21.   label
  22.   over
  23.   relx
  24.   mid
  25.   hook:hook
  26. ENDOBJECT
  27.  
  28. PROC password(estr,label=NIL,over=FALSE,relx=0,disabled=FALSE) OF password
  29.   self.estr:=estr
  30.   self.label:=IF label THEN label ELSE ''
  31.   self.over:=over
  32.   self.relx:=IF relx THEN relx ELSE 5
  33.   self.disabled:=disabled
  34.   inithook(self.hook,{passHookCode},estr)
  35. ENDPROC
  36.  
  37. PROC end() OF password IS EMPTY
  38.  
  39. PROC min_size(ta,fh) OF password
  40.   self.mid:=textlen(self.label,ta)+8
  41. ENDPROC self.relx*fh+self.mid, fh+6
  42.  
  43. PROC will_resize() OF password IS RESIZEX
  44.  
  45. -> Don't need to define this:
  46. ->PROC render(ta,x,y,xs,ys,w) OF password IS EMPTY
  47.  
  48. PROC gtrender(gl,vis,ta,x,y,xs,ys,w) OF password HANDLE
  49.   DEF len, pass=NIL
  50.   pass:=makePass(self.estr)
  51.   len:=textlen(self.label,ta)
  52.   self.password:=CreateGadgetA(STRING_KIND,gl,
  53.                  [x+self.mid,y,xs-self.mid,ys,self.label,ta,0,
  54.                   PLACETEXT_LEFT,vis,NIL]:newgadget,
  55.                  [GTST_STRING,pass, GTST_EDITHOOK,self.hook,
  56.                   GTST_MAXCHARS,StrMax(self.estr), GA_DISABLED,self.disabled,
  57.                   STRINGA_REPLACEMODE,self.over, NIL])
  58.   IF self.password=NIL THEN Raise("pass")
  59. EXCEPT DO
  60.   DisposeLink(pass)
  61.   ReThrow()
  62. ENDPROC self.password
  63.  
  64. -> Don't need to define this:
  65. -> PROC clear_render(win:PTR TO window) OF password IS EMPTY
  66.  
  67. PROC message_test(imsg:PTR TO intuimessage,win:PTR TO window) OF password
  68.   IF imsg.class=IDCMP_GADGETUP THEN RETURN imsg.iaddress=self.password
  69. ENDPROC FALSE
  70.  
  71. PROC message_action(class,qual,code,win:PTR TO window) OF password
  72. ENDPROC TRUE
  73.  
  74. PROC setpass(str) OF password HANDLE
  75.   DEF pass=NIL
  76.   pass:=makePass(str)
  77.   Gt_SetGadgetAttrsA(self.password,self.gh.wnd,NIL,[GTST_STRING,pass,NIL])
  78.   StrCopy(self.estr,str)
  79. EXCEPT DO
  80.   DisposeLink(pass)
  81. ENDPROC
  82.  
  83. PROC setdisabled(disabled=TRUE) OF password
  84.   Gt_SetGadgetAttrsA(self.password,self.gh.wnd,NIL,[GA_DISABLED,disabled,NIL])
  85.   self.disabled:=disabled
  86. ENDPROC
  87.  
  88. PROC makePass(s)
  89.   DEF len, p=NIL
  90.   IF s
  91.     IF len:=StrLen(s)
  92.       SetStr(p:=String(len),len)
  93.       WHILE len DO p[len--]:="*"
  94.     ENDIF
  95.   ENDIF
  96. ENDPROC p
  97.  
  98. PROC passHookCode(hook:PTR TO hook, sgw:PTR TO sgwork, msg:PTR TO LONG)
  99.   DEF realBuff:PTR TO CHAR, bp
  100.   IF msg[]=SGH_KEY
  101.     realBuff:=hook.data
  102.     bp:=sgw.bufferpos
  103.     SELECT NUM_EOS OF sgw.editop
  104.     CASE EO_DELBACKWARD
  105.       IF bp<>sgw.numchars
  106.         sgw.actions:=(sgw.actions OR SGA_BEEP) AND Not(SGA_USE)
  107.       ELSE
  108.         SetStr(realBuff, bp)
  109.       ENDIF
  110.     CASE EO_REPLACECHAR
  111.       realBuff[bp--]:=sgw.code
  112.       sgw.workbuffer[bp]:="*"
  113.     CASE EO_INSERTCHAR
  114.       IF bp<>sgw.numchars
  115.         sgw.actions:=(sgw.actions OR SGA_BEEP) AND Not(SGA_USE)
  116.       ELSE
  117.         SetStr(realBuff, bp)
  118.         realBuff[bp--]:=sgw.code
  119.         sgw.workbuffer[bp]:="*"
  120.       ENDIF
  121.     CASE EO_NOOP, EO_MOVECURSOR, EO_ENTER, EO_BADFORMAT
  122.       -> Safely ignore
  123.     DEFAULT
  124.       -> EO_DELFORWARD, EO_BIGCHANGE, EO_RESET, EO_UNDO, EO_CLEAR, EO_SPECIAL
  125.       -> Disallow
  126.       sgw.actions:=(sgw.actions OR SGA_BEEP) AND Not(SGA_USE)
  127.     ENDSELECT
  128.     RETURN -1
  129.   ENDIF
  130.   -> UNKNOWN COMMAND
  131.   -> Hook should return zero if the command is not supported
  132. ENDPROC 0
  133.