home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / CLIPPER / OBJECTS / CONTROL.PRG < prev    next >
Text File  |  1992-12-04  |  3KB  |  112 lines

  1. #include "Objects.ch"
  2. #include "GetExit.ch"
  3. #include "Inkey.ch"
  4. #include "Set.ch"
  5.  
  6. //----------------------------------------------------------------------------//
  7.  
  8. CLASS TControl
  9.  
  10.    DATA ExitState, Name, SubScript, Reader, cColorSpec
  11.    DATA bBlock, bPreBlock, bPostBlock, bAction
  12.    DATA HasFocus
  13.  
  14.    METHOD New()
  15.    METHOD Display() VIRTUAL
  16.    METHOD SetFocus( lOnOff )
  17.    METHOD KeyApply( nKey )
  18.    METHOD UnDo() VIRTUAL
  19.    METHOD CtrReader( oControl )
  20.  
  21. ENDCLASS
  22.  
  23. //----------------------------------------------------------------------------//
  24.  
  25. METHOD TControl::New()
  26.  
  27.    ::Name       = ""
  28.    ::Reader     = { | oControl |  oControl:CtrReader( oControl ) }
  29.    ::bPreBlock    = { || .t. }
  30.    ::bPostBlock = { || .t. }
  31.    ::HasFocus    = .f.
  32.    ::bAction    = { || nil }
  33.  
  34. return Self
  35.  
  36. //----------------------------------------------------------------------------//
  37.  
  38. METHOD TControl::SetFocus( lOnOff )
  39.  
  40.    ::HasFocus = lOnOff
  41.    SetCursor( If( ::HasFocus, 0, 1 ) )
  42.    ::Display()
  43.  
  44. return
  45.  
  46. //----------------------------------------------------------------------------//
  47.  
  48. METHOD TControl::KeyApply( nKey )
  49.  
  50.    if SetKey( nKey ) != nil
  51.       Eval( SetKey( nKey ) )    // , ProcName(), ProcLine, ReadVar() )
  52.    else
  53.       do case
  54.          case nKey == K_ESC
  55.               if Set( _SET_ESCAPE )
  56.                  ::UnDo()
  57.                  ::ExitState = GE_ESCAPE
  58.               endif
  59.  
  60.          case nKey == K_ENTER
  61.               ::ExitState = GE_ENTER
  62.  
  63.          case nKey == K_CTRL_W
  64.               ::ExitState = GE_WRITE
  65.  
  66.          case nKey == K_UP
  67.               ::ExitState = GE_UP
  68.  
  69.          case nKey == K_SH_TAB
  70.               ::ExitState = GE_UP
  71.  
  72.          case nKey == K_DOWN
  73.               ::ExitState = GE_DOWN
  74.  
  75.          case nKey == K_TAB
  76.               ::ExitState = GE_DOWN
  77.  
  78.          case nKey == K_RIGHT
  79.               ::ExitState = GE_DOWN
  80.  
  81.          case nKey == K_LEFT
  82.               ::ExitState = GE_UP
  83.       endcase
  84.    endif
  85.  
  86. return
  87.  
  88. //----------------------------------------------------------------------------//
  89.  
  90. METHOD TControl::CtrReader( oControl )
  91.  
  92.    if Eval( ::bPreBlock )
  93.       ::ExitState = GE_NOEXIT
  94.       ::SetFocus( .t. )
  95.  
  96.       do while ::ExitState == GE_NOEXIT
  97.          ::KeyApply( InKey( 0 ) )
  98.  
  99.          if ! Eval( ::bPostBlock ) .and. ;
  100.             ::ExitState != GE_ESCAPE
  101.             ::ExitState = GE_NOEXIT
  102.          endif
  103.       enddo
  104.  
  105.       ::SetFocus( .f. )
  106.  
  107.    endif
  108.  
  109. return
  110.  
  111. //----------------------------------------------------------------------------//
  112.