home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 113 / EnigmaAmiga113CD.iso / software / sviluppo / easygui_os12 / source / plugins / password_os12.e next >
Encoding:
Text File  |  2000-06-11  |  3.9 KB  |  156 lines

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