home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / CLIPPER / NCCLIB.ZIP / NCCVIEW.ZIP / G_EVENT.PRG < prev    next >
Text File  |  1993-11-10  |  16KB  |  475 lines

  1. //═══════════════════════════════════════════════════════╕
  2. //  Program .....: G_Event                               │
  3. //  CopyRight ...: 1993 National Computer Consultants    │
  4. //                 All rights are reserved.              │
  5. //  Author ......: Greg Rice                             │
  6. //═══════════════════════════════════════════════════════╛
  7.  
  8. #include "g_event.ch"
  9. #include "g_menu.ch"
  10. #include "inkey.ch"
  11. #include "mouse.ch"
  12.  
  13. #define TO_SAVE  1
  14. #define TO_OPEN  2
  15.  
  16. //──────────────────────────┐
  17. //  Mouse Event Translation │
  18. //──────────────────────────┘
  19. Function MouseEvent()
  20.  
  21.     LOCAL Event  := 0                                   , ;
  22.           Mouse  := MouseSys()                          , ;
  23.           x      := Current_Window()                    , ;
  24.           Window := WinObj()                            , ;
  25.           nRow                                          , ;
  26.           nCol                                          , ;
  27.           xwin                                          , ;
  28.           i                                             , ;
  29.           p
  30.  
  31.  
  32.     nRow   := Mouse:Row
  33.     nCol   := Mouse:Column
  34.  
  35.     if Mouse:Button == RIGHT_BUTTON
  36.       Return( Event )
  37.     endif
  38.  
  39.     if ! Window_Active()
  40.       Return( Event )
  41.     endif
  42.  
  43.     Do Case
  44.  
  45.       Case ( nRow == Window:TopRow - 1 .and. ;
  46.            (nCol >= Window:RightColumn + 1 .and. ;
  47.             nCol <= Window:RightColumn + 1))
  48.  
  49.            Event := ev_Up
  50.  
  51.       Case ( nRow == Window:BottomRow .and. ;
  52.            (nCol >= Window:RightColumn + 1 .and. ;
  53.             nCol <= Window:RightColumn + 1 ))
  54.  
  55.            Event := ev_Down
  56.  
  57. /*
  58.       Case ( nRow == Window:BottomRow +1.and. ;
  59.             ( nCol >= Window:LeftColumn .and. ;
  60.               nCol <= Window:LeftColumn ;
  61.             ) ;
  62.            )
  63.  
  64.            Event := ev_Left
  65.       Case  ( nRow == Window:BottomRow +1 .and. ;
  66.            ( nCol >= Window:RightColumn .and. ;
  67.             nCol <= Window:RightColumn ))
  68.  
  69.            Event := ev_Right
  70. */
  71.  
  72.       Case ( nRow == Window:TopRow - 1 .and. ;
  73.             ( nCol >= Window:LeftColumn .and. ;
  74.               nCol <= Window:LeftColumn+1 ;
  75.             ) ;
  76.            )
  77.  
  78.            Event := ev_Left
  79.  
  80.       Case  ( nRow == Window:TopRow - 1 .and. ;
  81.            ( nCol >= Window:RightColumn -1 .and. ;
  82.             nCol <= Window:RightColumn ))
  83.  
  84.            Event := ev_Right
  85.  
  86.       Case ( nRow == Window:TopRow -4 .and. ;
  87.             ( nCol >= Window:LeftColumn .and. ;
  88.               nCol <= Window:LeftColumn ))
  89.  
  90.            Event := ev_DataClose
  91.  
  92.       Case ( nRow == Window:TopRow -4 .and. ;
  93.             ( nCol >= Window:LeftColumn -1 .and. ;
  94.               nCol <= Window:RightColumn +1 ))
  95.  
  96.            Event := ev_WindowMoveResize
  97.  
  98.       Case ( nRow == Window:BottomRow +1 .and. ;
  99.             ( nCol == Window:LeftColumn -1 .or. ;
  100.               nCol == Window:RightColumn +1 ;
  101.             ) ;
  102.            )
  103.           Event := ev_WindowMoveResize
  104.  
  105.       Case (  nRow >= Window:TopRow-4 .and. ;
  106.                     nRow <= Window:BottomRow+1 .and. ;
  107.                     nCol >= Window:LeftColumn-1 .and. ;
  108.                     nCol <= Window:RightColumn+1 ;
  109.            ) .and. Mouse:Button == BOTH_BUTTONS
  110.  
  111.           Event := ev_WindowZoom
  112.  
  113.       Case (  nRow >= Window:TopRow .and. ;
  114.                     nRow <= Window:BottomRow .and. ;
  115.                     nCol >= Window:LeftColumn .and. ;
  116.                     nCol <= Window:RightColumn ;
  117.            ) .and. Mouse:Button == LEFT_BUTTON
  118.  
  119.          if Window:CurrentRow > nRow
  120.            Window:Up(Window:CurrentRow - nRow)
  121.            WinVSBar()
  122.          else
  123.            Window:Down(nRow - Window:CurrentRow)
  124.            WinVSBar()
  125.          endif
  126.  
  127.       Otherwise
  128.  
  129.          xwin := x
  130.          p := len(win_stack())
  131.          for i = 1 to Len(windows())
  132.            if ! empty(WinFilename(xWin)).and.;
  133.               (  nRow >= WinObj(xWin):TopRow-4 .and. ;
  134.                  nRow <= WinObj(xWin):BottomRow+1 .and. ;
  135.                  nCol >= WinObj(xWin):LeftColumn-1 .and. ;
  136.                  nCol <= WinObj(xWin):RightColumn+1 ;
  137.               )
  138.               if xWin # x
  139.                 if ! empty(WinFilename(xWin))
  140.                   DeHighLightWindow(x)
  141.                 else
  142.                   loop
  143.                 endif
  144.                 HighLightWindow(xWin)
  145.               endif
  146.              exit
  147.            Endif
  148.  
  149.            if p # 1
  150.              xwin := win_stack()[--p]
  151.            endif
  152.  
  153.          next
  154.  
  155.     EndCase
  156.  
  157. Return( Event )
  158.  
  159.  
  160. //─────────────────────────────┐
  161. //  Menu Bar Event Translation │
  162. //─────────────────────────────┘
  163. Function MenuEvent( x )
  164.  
  165.     local Event := 0
  166.  
  167.     x := if( x == NIL, 0, x )
  168.  
  169.     Do Case
  170.  
  171.       Case x == ABOUT_ABOUT       ; Event := ev_About
  172.  
  173.       Case x == DATABASE_NEW      ; Event := ev_DataNew
  174.       Case x == DATABASE_OPEN     ; Event := ev_DataOpen
  175.       Case x == DATABASE_CLOSE    ; Event := ev_DataClose
  176.       Case x == TEXTFILE_OPEN     ; Event := ev_TextView
  177.       Case x == STRUCTURE_DISPLAY ; Event := ev_DataStructure
  178.       Case x == DATABASE_MODIFY   ; Event := ev_DataModify
  179.       Case x == ENV_SUMMARY       ; Event := ev_EnvSummary
  180.  
  181.       Case x == PRINT_FILE       ; Event := ev_PrintFile
  182.       Case x == PRINT_STRUCTURE  ; Event := ev_PrintStructure
  183.  
  184.       Case x == INDEX_NEW        ; Event := ev_IndexNew
  185.       Case x == INDEX_OPEN       ; Event := ev_IndexOpen
  186.       Case x == INDEX_CLOSE      ; Event := ev_IndexClose
  187.       Case x == INDEX_MODIFY     ; Event := ev_IndexModify
  188.       Case x == INDEX_REORDER    ; Event := ev_IndexReorder
  189.       Case x == INDEX_REINDEX    ; Event := ev_IndexReindex
  190.       Case x == INDEX_RELATION   ; Event := ev_IndexRelation
  191.  
  192.       Case x == VIEW_MODIFY       ; Event := ev_ViewModify
  193.  
  194.       Case x == SYS_EXIT          ; Event := ev_SysExit
  195.  
  196.       Case x == CHANGE_RECORD     ; Event := ev_ChangeRecord
  197.       Case x == ADD_RECORD        ; Event := ev_AddRecord
  198.       Case x == DUPE_RECORD       ; Event := ev_DupeRecord
  199.       Case x == INS_BLANK         ; Event := ev_InsertBlank
  200.       Case x == DELE_RECORD       ; Event := ev_DeleRecord
  201.       Case x == REPLACE_REC       ; Event := ev_ReplRecord
  202.       Case x == PACK_FILE         ; Event := ev_PackFile
  203.       Case x == ZAP_FILE          ; Event := ev_ZapFile
  204.  
  205.       Case x == GO_REC            ; Event := ev_GoToRec
  206.       Case x == LOCA_REC          ; Event := ev_LocateRec
  207.       Case x == SEEK_REC          ; Event := ev_SeekRec
  208.  
  209.       Case x == WIN_NEXT          ; Event := ev_WindowNext
  210.       Case x == WIN_PREV          ; Event := ev_WindowPrev
  211.       Case x == WIN_MOVE          ; Event := ev_WindowMoveResize
  212.       Case x == WIN_ZOOM          ; Event := ev_WindowZoom
  213.       Case x == VIEW_VERT         ; Event := ev_WindowVertical
  214.       Case x == VIEW_HORI         ; Event := ev_WindowHorizontal
  215.  
  216.       Case x == HELP_GEN          ; Event := ev_GenHelp
  217.       Case x == HELP_KEY          ; Event := ev_KeyHelp
  218.  
  219.     EndCase
  220.  
  221. Return( Event )
  222.  
  223.  
  224.  
  225. //────────────────────────────┐
  226. // KeyBoard Event Translation │
  227. //────────────────────────────┘
  228. Function KeyBoardEvent(x)
  229.  
  230.     LOCAL Event := 0, msColor := SetColor()
  231.  
  232.     x := if( x == NIL, 0, x )
  233.  
  234.     Do Case
  235.       Case x == K_TAB            ;    Event := ev_WindowNext
  236.       Case x == K_SH_TAB         ;    Event := ev_WindowPrev
  237.       Case x == K_UP             ;    Event := ev_Up
  238.       Case x == K_DOWN           ;    Event := ev_Down
  239.       Case x == K_LEFT           ;    Event := ev_Left
  240.       Case x == K_RIGHT          ;    Event := ev_Right
  241.       Case x == K_CTRL_LEFT      ;    Event := ev_Left
  242.       Case x == K_CTRL_RIGHT     ;    Event := ev_Right
  243.       Case x == K_HOME           ;    Event := ev_Home
  244.       Case x == K_END            ;    Event := ev_End
  245.       Case x == K_CTRL_PGUP      ;    Event := ev_GoTop
  246.       Case x == K_CTRL_PGDN      ;    Event := ev_GoBottom
  247.       Case x == K_PGUP           ;    Event := ev_PageUp
  248.       Case x == K_PGDN           ;    Event := ev_PageDown
  249.       Case x == K_CTRL_HOME      ;    Event := ev_PanHome
  250.       Case x == K_CTRL_END       ;    Event := ev_PanEnd
  251.       Case x == K_INS            ;    Event := ev_QuickInsertBlank
  252.       Case x == K_DEL            ;    Event := ev_QuickDelete
  253.  
  254.       Case x == K_ALT_1          ;    Event := x
  255.       Case x == K_ALT_2          ;    Event := x
  256.       Case x == K_ALT_3          ;    Event := x
  257.       Case x == K_ALT_4          ;    Event := x
  258.       Case x == K_ALT_5          ;    Event := x
  259.       Case x == K_ALT_6          ;    Event := x
  260.       Case x == K_ALT_7          ;    Event := x
  261.       Case x == K_ALT_8          ;    Event := x
  262.       Case x == K_ALT_9          ;    Event := x
  263.  
  264.       Case uppe(chr(x)) == 'F'   ;    Event := ev_DataOpen
  265.       Case uppe(chr(x)) == 'I'   ;    Event := ev_IndexOpen
  266.       Case uppe(chr(x)) == 'A'   ;    Event := ev_AddRecord
  267.       Case uppe(chr(x)) == 'D'   ;    Event := ev_DeleRecord
  268.       Case uppe(chr(x)) == 'R'   ;    Event := ev_ReplRecord
  269.       Case uppe(chr(x)) == 'P'   ;    Event := ev_PackFile
  270.       Case uppe(chr(x)) == 'Z'   ;    Event := ev_ZapFile
  271.       Case uppe(chr(x)) == 'G'   ;    Event := ev_GoToRec
  272.       Case uppe(chr(x)) == 'L'   ;    Event := ev_LocateRec
  273.       Case uppe(chr(x)) == 'S'   ;    Event := ev_SeekRec
  274.  
  275.       Case x == K_F1             ;    Event := ev_KeyHelp
  276.       Case x == K_ALT_U          ;    Event := ev_EnvSummary
  277.  
  278.       Case x == K_ALT_F1         ;    Event := x
  279.  
  280.         SetColor("W+/R")
  281.         WinBox( 8, 15, 16, 64,,5, .t. )
  282.         @  9,18 say 'Garbage Collection..............:' + str(memory( -1  )) + "K"
  283.         @ 10,18 say 'Fixed Head......................:' + str(memory( 101 )) + "K"
  284.         @ 11,18 say 'Character Space.................:' + str(memory( 0 )) + "K"
  285.         @ 12,18 say 'Largest Block...................:' + str(memory( 1 )) + "K"
  286.         @ 13,18 say '................................:' + str(memory( 2 )) + "K"
  287.         @ 14,18 say 'EMS Available to VMM............:' + str(memory( 3 )) + "K"
  288.         @ 15,18 say 'EMS and Disk Available to VMM...:' + str(memory( 4 )) + "K"
  289.         inkey(0)
  290.         SetColor(msColor)
  291.         ShowDeskTop()
  292.  
  293.     EndCase
  294.  
  295. Return( Event )
  296.  
  297.  
  298. //────────────────────┐
  299. //   Event Processing │
  300. //────────────────────┘
  301. Function EventProcess( Event )
  302.  
  303.     local Window := WinObj(), Mouse := MouseSys(), mHelp := .t., mNew := .f.
  304.  
  305.     Event := if( Event == NIL, 0, Event )
  306.  
  307.     Mouse:Hide()
  308.     Do Case
  309.       Case Event == ev_About
  310.         GrayBar()
  311.         g_about()
  312.         UnGrayBar()
  313.  
  314.       Case Event == ev_DataNew
  315.         mNew := .t.
  316.         GrayBar()
  317. //        g_DataNew( mNew )
  318.         UnGrayBar()
  319.  
  320.       Case Event == ev_DataOpen
  321.         DehighlightWindow()
  322.         GrayBar()
  323.         g_DataOpen()
  324.         UnGrayBar()
  325.         OpenWindow()
  326.  
  327.       Case Event == ev_DataClose
  328.         g_Dataclose()
  329.         UnGrayBar()
  330.  
  331.       Case Event == ev_KeyHelp
  332.         GrayBar()
  333.         gen_Help()
  334.         UnGrayBar()
  335.  
  336.       Case Event == ev_GenHelp
  337.         GrayBar()
  338.         gen_Help( "" )
  339.         UnGrayBar()
  340.  
  341.       Case Event == ev_TextView
  342.         mHelp := .f.
  343.         GrayBar()
  344.         g_FView( "","" ,"512" ,"10" , ,mHelp )
  345.         UnGrayBar()
  346.  
  347.     EndCase
  348.  
  349.     if ! Window_Active()
  350.       Mouse:Hide()
  351.       Return( Event )
  352.     endif
  353.  
  354.     Do Case
  355.  
  356.       Case Event == ev_DataModify
  357.         mNew := .f.
  358.         GrayBar()
  359.         g_DataNew( mNew )
  360.         UnGrayBar()
  361.  
  362.       Case Event == ev_WindowNext        ;       WinNext()
  363.       Case Event == ev_WindowPrev        ;       WinPrev()
  364.       Case Event == ev_WindowZoom        ;       WinZoom()
  365.  
  366.       Case Event == ev_WindowMoveResize
  367.         WinResize()
  368.  
  369.       Case Event == ev_ViewModify
  370.         GrayBar()
  371.         g_ViewCreate()
  372.         UnGrayBar()
  373.         OpenWindow()
  374.  
  375.       Case Event == ev_WindowVertical    ;  g_Record()
  376.  
  377.       Case Event == ev_WindowHorizontal  ;  g_Browse()
  378.  
  379.  
  380.       Case Event == ev_Left
  381.         if Window:UserSlot[2] == NIL
  382.           Window:Left()
  383.         endif
  384.  
  385.       Case Event == ev_Right     
  386.         if Window:UserSlot[2] == NIL
  387.           Window:Right()
  388.         endif
  389.  
  390.       Case Event == ev_PanHome
  391.         if Window:UserSlot[2] == NIL
  392.           Window:PanHome()
  393.         endif
  394.  
  395.       Case Event == ev_PanEnd
  396.         if Window:UserSlot[2] == NIL
  397.           Window:PanEnd()
  398.         endif
  399.  
  400.       Case Event == ev_Up        ;  Window:Up()       ; WinVSBar()
  401.       Case Event == ev_Down      ;  Window:Down()     ; WinVSBar()
  402.       Case Event == ev_Home      ;  Window:Home()     ; WinVSBar()
  403.       Case Event == ev_End       ;  Window:End()      ; WinVSBar()
  404.       Case Event == ev_GoTop     ;  Window:GoTop()    ; WinVSBar()
  405.       Case Event == ev_GoBottom  ;  Window:GoBottom() ; WinVSBar()
  406.       Case Event == ev_PageUp    ;  Window:PageUp()   ; WinVSBar()
  407.       Case Event == ev_PageDown  ;  Window:PageDown() ; WinVSBar()
  408.  
  409.       Case Event == K_ALT_1    ;  GotoWin(1)
  410.       Case Event == K_ALT_2    ;  GotoWin(2)
  411.       Case Event == K_ALT_3    ;  GotoWin(3)
  412.       Case Event == K_ALT_4    ;  GotoWin(4)
  413.       Case Event == K_ALT_5    ;  GotoWin(5)
  414.       Case Event == K_ALT_6    ;  GotoWin(6)
  415.       Case Event == K_ALT_7    ;  GotoWin(7)
  416.       Case Event == K_ALT_8    ;  GotoWin(8)
  417.       Case Event == K_ALT_9    ;  GotoWin(9)
  418.  
  419.       Case Event == ev_DataStructure      ; GrayBar() ; g_DispStrue()   ; UnGrayBar()
  420.       Case Event == ev_PrintStructure     ; GrayBar() ; g_PrintStru()   ; UnGrayBar()
  421.       Case Event == ev_PrintFile          ; GrayBar() ; g_PrintFile()   ; UnGrayBar()
  422.       Case Event == ev_IndexNew           ; GrayBar() ; g_indexcreate() ; UnGrayBar()
  423.       Case Event == ev_IndexOpen          ; GrayBar() ; g_indexopen()   ; UnGrayBar()
  424.       Case Event == ev_IndexReorder       ; GrayBar() ; g_indexorder()  ; UnGrayBar()
  425.       Case Event == ev_IndexClose         ; GrayBar() ; g_indexClose()  ; UnGrayBar()
  426.       Case Event == ev_IndexReindex       ; GrayBar() ; g_reindex()     ; UnGrayBar()
  427.       Case Event == ev_IndexRelation
  428.       Case Event == ev_IndexModify        ; GrayBar() ; g_indexOne()    ; UnGrayBar()
  429.       Case Event == ev_QuickInsertBlank   ; GrayBar() ; g_insert()      ; UnGrayBar()
  430.       Case Event == ev_DupeRecord         ; GrayBar() ; g_duplicate()   ; UnGrayBar()
  431.       Case Event == ev_QuickDelete        ; GrayBar() ; g_quickdelete() ; UnGrayBar()
  432.       Case Event == ev_DeleRecord         ; GrayBar() ; g_delete()      ; UnGrayBar()
  433.       Case Event == ev_EnvSummary         ; GrayBar() ; g_summary()     ; UnGrayBar()
  434.       Case Event == ev_InsertBlank        ; GrayBar() ; g_insert()      ; UnGrayBar()
  435.       Case Event == ev_ChangeRecord       ; GrayBar() ; g_editRec()     ; UnGrayBar()
  436.       Case Event == ev_AddRecord          ; GrayBar() ; g_add()         ; UnGrayBar()
  437.       Case Event == ev_ReplRecord         ; GrayBar() ; g_replace()     ; UnGrayBar()
  438.       Case Event == ev_PackFile           ; GrayBar() ; g_pack()        ; UnGrayBar()
  439.       Case Event == ev_ZapFile            ; GrayBar() ; g_zap()         ; UnGrayBar()
  440.  
  441.       Case Event == ev_GoToRec
  442.          GrayBar()
  443.          g_Goto()
  444.          WinVSBar()
  445.          UnGrayBar()
  446.       Case Event == ev_LocateRec
  447.          GrayBar()
  448.          g_Locate()
  449.          WinVSBar()
  450.          UnGrayBar()
  451.       Case Event == ev_SeekRec
  452.          GrayBar()
  453.          g_seek()
  454.          WinVSBar()
  455.          UnGrayBar()
  456.  
  457.  
  458.     EndCase
  459.  
  460.     Mouse:Show()
  461.     Window_Active( ! Empty(alias()) )
  462.  
  463. Return( NIL )
  464.  
  465.  
  466. static function GotoWin( x )
  467.  
  468.     if ! Empty(Winfilename(x))
  469.       DeHighLightWindow()
  470.       Current_Window(x)
  471.       HighLightWindow()
  472.     endif
  473.  
  474. Return( NIL )
  475.