Files
harbour-core/contrib/gtwvg/tests/_utils.prg
Viktor Szakats 15795f6330 2017-09-12 10:19 UTC Viktor Szakats (vszakats users.noreply.github.com)
* contrib/gtwvg/class.prg
  * contrib/gtwvg/menubar.prg
  * contrib/gtwvg/paint.prg
  * contrib/gtwvg/tests/_activex.prg
  * contrib/gtwvg/tests/_dyndlgs.prg
  * contrib/gtwvg/tests/_modal.prg
  * contrib/gtwvg/tests/_tbrowse.prg
  * contrib/gtwvg/tests/_utils.prg
  * contrib/gtwvg/tests/_wvtcls.prg
  * contrib/gtwvg/tests/_xbp.prg
  * contrib/gtwvg/tests/demowvg.prg
  * contrib/gtwvg/tests/demowvg1.prg
  * contrib/gtwvg/tests/demoxbp.prg
  * contrib/hbhttpd/core.prg
  * contrib/hbhttpd/tests/eshop.prg
  * contrib/hbhttpd/widgets.prg
  * contrib/hbtip/thtml.prg
  * src/debug/dbgtobj.prg
  * src/rdd/hbsix/sxini.prg
  * src/rtl/hbi18n2.prg
  * src/rtl/tbrowse.prg
  * utils/hbtest/rt_array.prg
    * sync with 3.4 fork (no change in functionality)
2017-09-12 10:19:32 +00:00

497 lines
12 KiB
Plaintext

/* Pritpal Bedi <bedipritpal@hotmail.com> */
#include "inkey.ch"
#include "hbgtinfo.ch"
// WvtSetObjects() array structure
#define WVT_OBJ_TYPE 1
#define WVT_OBJ_ID 2
#define WVT_OBJ_ROW 3
#define WVT_OBJ_COL 4
#define WVT_OBJ_ROWTO 5
#define WVT_OBJ_COLTO 6
#define WVT_OBJ_ONDISP 7
#define WVT_OBJ_ONMOUSEOVER 8
#define WVT_OBJ_ONBUTTONDOWN 9
#define WVT_OBJ_ONBUTTONUP 10
#define WVT_OBJ_TOOLTIP 11
#define WVT_OBJ_STATE 12
#define WVT_OBJ_DUMMY 13
#define WVT_OBJ_VRBLS 13
// WVT_OBJ_TYPE Constants
#define OBJ_TYPE_BUTTON 1
// WVT_OBJ_STATE
#define OBJ_STATE_HIDE 0
#define OBJ_STATE_DISP 1
#define OBJ_STATE_MOUSEOVER 2
#define OBJ_STATE_BUTTONDOWN 3
#define OBJ_STATE_BUTTONUP 4
THREAD STATIC t_keys_ := {, , , , , , , , , , , , , , , , , , , }
THREAD STATIC t_pic_ := {, , , , , , , , , , , , , , , , , , , }
PROCEDURE WvtSetKeys( lSet )
IF lSet
t_keys_[ 2 ] := SetKey( K_F2, {|| WvtNextGets() } )
t_keys_[ 3 ] := SetKey( K_F3, {|| WvtWindowExpand( 1 ) } )
t_keys_[ 4 ] := SetKey( K_F4, {|| WvtWindowExpand( -1 ) } )
t_keys_[ 5 ] := SetKey( K_F5, {|| WvtMyBrowse() } )
t_keys_[ 6 ] := SetKey( K_F6, {|| wvt_Minimize() } )
t_keys_[ 7 ] := SetKey( K_F7, {|| WvtPartialScreen() } )
t_keys_[ 8 ] := SetKey( K_F8, {|| WvtLines() } )
t_keys_[ 9 ] := SetKey( K_F9, {|| wvt_ChooseFont() } )
t_keys_[ 10 ] := SetKey( K_F10, {|| wvt_ChooseColor() } )
ELSE
SetKey( K_F2, t_keys_[ 2 ] )
SetKey( K_F3, t_keys_[ 3 ] )
SetKey( K_F4, t_keys_[ 4 ] )
SetKey( K_F5, t_keys_[ 5 ] )
SetKey( K_F6, t_keys_[ 6 ] )
SetKey( K_F7, t_keys_[ 7 ] )
SetKey( K_F8, t_keys_[ 8 ] )
SetKey( K_F9, t_keys_[ 9 ] )
SetKey( K_F10, t_keys_[ 10 ] )
ENDIF
RETURN
// wvt_Paint() must be a FUNCTION in your application
// as it is called when Window gets WIN_WM_PAINT message.
FUNCTION wvt_Paint() /* must be a public function */
LOCAL aBlocks := WvtSetBlocks()
AEval( aBlocks, {| e | Eval( e ) } )
WvtPaintObjects()
RETURN 0
// wvt_SetFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_SETFOCUS message
// received by the window.
#if 0
PROCEDURE wvt_SetFocus() /* must be a public function */
LOCAL nRow := Row()
LOCAL nCol := Col()
hb_DispOutAt( 1, 3, "Focus Gained!", "R/W" )
DevPos( nRow, nCol )
RETURN
#endif
// wvt_KillFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_KILLFOCUS message
// received by the window.
#if 0
PROCEDURE wvt_KillFocus() /* must be a public function */
LOCAL nRow := Row()
LOCAL nCol := Col()
hb_DispOutAt( 1, 3, "Focus Lost...", "B/W" )
DevPos( nRow, nCol )
RETURN
#endif
// wvt_Mouse() must be present if you want to catch and fire
// mouse call back outside of the Inkey() loop.
FUNCTION Wvt_Mouse( nKey, nRow, nCol )
LOCAL nLen, aObjects := WvtSetObjects()
LOCAL nObj
STATIC s_nLastObj := 0
STATIC s_nLastKey := 0
IF ( nLen := Len( aObjects ) ) == 0
RETURN NIL
ENDIF
IF ! SetMouseCheck()
RETURN NIL
ENDIF
IF nKey == -1000001
FOR nObj := 1 TO nLen
DO CASE
CASE aObjects[ nObj ][ WVT_OBJ_STATE ] == OBJ_STATE_DISP
Eval( aObjects[ nObj ][ WVT_OBJ_ONDISP ] )
CASE aObjects[ nObj ][ WVT_OBJ_STATE ] == OBJ_STATE_MOUSEOVER
Eval( aObjects[ nObj ][ WVT_OBJ_ONMOUSEOVER ] )
CASE aObjects[ nObj ][ WVT_OBJ_STATE ] == OBJ_STATE_BUTTONDOWN
Eval( aObjects[ nObj ][ WVT_OBJ_ONBUTTONDOWN ] )
CASE aObjects[ nObj ][ WVT_OBJ_STATE ] == OBJ_STATE_BUTTONUP
Eval( aObjects[ nObj ][ WVT_OBJ_ONDISP ] )
CASE aObjects[ nObj ][ WVT_OBJ_STATE ] == OBJ_STATE_HIDE
ENDCASE
NEXT
RETURN NIL
ENDIF
nObj := AScan( aObjects, {| e_ | e_[ WVT_OBJ_ROW ] <= nRow .AND. ;
e_[ WVT_OBJ_ROWTO ] >= nRow .AND. ;
e_[ WVT_OBJ_COL ] <= nCol .AND. ;
e_[ WVT_OBJ_COLTO ] >= nCol } )
IF nObj == 0
IF s_nLastObj > 0
aObjects[ s_nLastObj ][ WVT_OBJ_STATE ] := OBJ_STATE_DISP
Eval( aObjects[ s_nLastObj ][ WVT_OBJ_ONDISP ] )
s_nLastObj := 0
ENDIF
RETURN NIL
ENDIF
IF s_nLastObj == nObj .AND. s_nLastKey == nKey
RETURN NIL
ENDIF
s_nLastObj := nObj
s_nLastKey := nKey
DO CASE
CASE nKey == K_MOUSEMOVE
IF aObjects[ s_nLastObj ][ WVT_OBJ_STATE ] != OBJ_STATE_MOUSEOVER
aObjects[ s_nLastObj ][ WVT_OBJ_STATE ] := OBJ_STATE_MOUSEOVER
IF aObjects[ nObj ][ WVT_OBJ_ONMOUSEOVER ] != NIL
Eval( aObjects[ nObj ][ WVT_OBJ_ONMOUSEOVER ] )
ENDIF
ENDIF
CASE nKey == K_LBUTTONDOWN
aObjects[ s_nLastObj ][ WVT_OBJ_STATE ] := OBJ_STATE_BUTTONDOWN
IF aObjects[ nObj ][ WVT_OBJ_ONBUTTONDOWN ] != NIL
Eval( aObjects[ nObj ][ WVT_OBJ_ONBUTTONDOWN ] )
ENDIF
CASE nKey == K_LBUTTONUP
aObjects[ s_nLastObj ][ WVT_OBJ_STATE ] := OBJ_STATE_DISP
IF aObjects[ nObj ][ WVT_OBJ_ONBUTTONUP ] != NIL
Eval( aObjects[ nObj ][ WVT_OBJ_ONBUTTONUP ] )
ENDIF
ENDCASE
RETURN NIL
// WvtSetBlocks() is a get/set FUNCTION to be used by Wvt_Paint()
FUNCTION WvtSetBlocks( a_ )
LOCAL o
THREAD STATIC t := {}
o := AClone( t )
IF a_ != NIL
t := AClone( a_ )
ENDIF
RETURN o
// WvtSetObjects() is a get/set FUNCTION to be used by Wvt_Mouse()
FUNCTION WvtSetObjects( aObject )
LOCAL oObjects
THREAD STATIC t_aObjects := {}
oObjects := AClone( t_aObjects )
IF aObject != NIL
IF Empty( aObject )
t_aObjects := {}
ELSE
IF HB_ISARRAY( aObject[ 1 ] )
AEval( aObject, {| e_ | AAdd( t_aObjects, e_ ) } )
ELSE
ASize( aObject, WVT_OBJ_VRBLS )
hb_default( @aObject[ WVT_OBJ_STATE ], OBJ_STATE_DISP )
AAdd( t_aObjects, aObject )
ENDIF
ENDIF
ENDIF
RETURN oObjects
FUNCTION SetMouseCheck( lYes )
LOCAL lOYes
STATIC s_lSYes := .T.
lOYes := s_lSYes
IF lYes != NIL
s_lSYes := lYes
ENDIF
RETURN lOYes
FUNCTION WvtWindowExpand( nUnits )
STATIC s_nUnits := 18
s_nUnits += nUnits
wvt_SetFont( "Courier New", s_nUnits )
RETURN .T.
FUNCTION VouChoice( aChoices )
LOCAL scr, clr, nChoice
hb_default( @aChoices, { "One", "Two", "Three", "Four", "Five", "Six", "Seven" } )
scr := SaveScreen( 7, 48, 13, 55 )
clr := SetColor( "N/W*,GR+/B*,,,GR+/B" )
nChoice := AChoice( 7, 48, 13, 55, aChoices )
SetColor( clr )
RestScreen( 7, 48, 13, 55, scr )
RETURN nChoice
FUNCTION Hb_Clear()
CLS
RETURN .F.
FUNCTION MyMenuProcedure( nID )
SWITCH nID
CASE 101
Alert( "Procedure 101" )
EXIT
CASE 102
Alert( "Procedure 102" )
EXIT
ENDSWITCH
RETURN .T.
FUNCTION BuildWvgToolBar( oDA, nActiveX )
LOCAL oTBar
hb_default( @nActiveX, 0 )
oTBar := WvgToolBar():new( oDA, , { 0, 0 }, { oDA:currentSize()[ 1 ], 30 }, , .T. )
oTBar:style := WVGTOOLBAR_STYLE_FLAT
oTBar:borderStyle := WVGFRAME_RECT
oTBar:buttonWidth := 40 // 28
oTBar:buttonHeight := 26
oTBar:imageWidth := 26
oTBar:imageHeight := 24
oTBar:showToolTips := .T.
// After setting properties, create toolbar.
oTBar:create()
oTBar:addItem( "New" , hb_DirBase() + "v_new.bmp" )
oTBar:addItem( "Select" , hb_DirBase() + "v_selct1.bmp" )
oTBar:addItem( "Calendar" , hb_DirBase() + "v_calend.bmp" )
oTBar:addItem( "Tools" , hb_DirBase() + "v_lock.bmp" )
oTBar:addItem( "Index" , hb_DirBase() + "v_index.bmp" )
oTBar:addItem( "Show" , hb_DirBase() + "v_clclt.bmp" )
oTBar:addItem( "Hide" , hb_DirBase() + "v_notes1.bmp" )
RETURN oTBar
FUNCTION SetGT( nIndex, pGT )
LOCAL oldGT
STATIC s_pGT_ := { NIL, NIL, NIL }
oldGT := s_pGT_[ nIndex ]
IF PCount() == 2
s_pGT_[ nIndex ] := pGT
ENDIF
RETURN oldGT
FUNCTION SetFonts( hFont )
LOCAL oldFont
THREAD STATIC t_ahFonts := {}
oldFont := t_ahFonts
IF ! Empty( hFont )
AAdd( t_ahFonts, hFont )
ENDIF
RETURN oldFont
FUNCTION SetIcons( hIcon )
LOCAL oldIcon
THREAD STATIC t_ahIcons := {}
oldIcon := t_ahIcons
IF ! Empty( hIcon )
AAdd( t_ahIcons, hIcon )
ENDIF
RETURN oldIcon
FUNCTION Popups( nID, lDestroy )
THREAD STATIC t_hPop_ := { , , , , , , , , }
LOCAL hPop, hPop1
LOCAL nPrompt := MF_ENABLED + MF_STRING
IF nID == NIL
wvt_SetPopupMenu()
RETURN NIL
ENDIF
IF lDestroy != NIL
Wvt_DestroyMenu( t_hPop_[ nID ] )
RETURN NIL
ENDIF
hPop := t_hPop_[ nID ]
DO CASE
CASE nID == 1 // Data Entry Module
IF hPop == NIL
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_F2, "Second Get Screen" )
Wvt_AppendMenu( hPop, nPrompt, K_F3, "Expand Window" )
Wvt_AppendMenu( hPop, nPrompt, K_F4, "Shrink Window" )
Wvt_AppendMenu( hPop, nPrompt, K_F5, "Browse" )
Wvt_AppendMenu( hPop, nPrompt, K_F6, "Minimize" )
Wvt_AppendMenu( hPop, nPrompt, K_F7, "Partial Screen" )
Wvt_AppendMenu( hPop, nPrompt, K_F8, "Lines" )
Wvt_AppendMenu( hPop, nPrompt, K_F9, "Choose Font" )
Wvt_AppendMenu( hPop, nPrompt, K_F10, "Choose Color" )
Wvt_AppendMenu( hPop, MF_SEPARATOR )
Wvt_AppendMenu( hPop, nPrompt, K_F5, "Browse" )
ENDIF
CASE nID == 2 // Browser
IF hPop == NIL
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_DOWN , "Down" )
Wvt_AppendMenu( hPop, nPrompt, K_UP , "Up" )
Wvt_AppendMenu( hPop, nPrompt, K_PGDN , "Page Down" )
Wvt_AppendMenu( hPop, nPrompt, K_PGUP , "Page Up" )
Wvt_AppendMenu( hPop, nPrompt, K_CTRL_PGUP, "Top" )
Wvt_AppendMenu( hPop, nPrompt, K_CTRL_PGDN, "Bottom" )
Wvt_AppendMenu( hPop, MF_SEPARATOR )
hPop1 := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop1, nPrompt, K_RIGHT , "Right" )
Wvt_AppendMenu( hPop1, nPrompt, K_LEFT , "Left" )
Wvt_AppendMenu( hPop1, nPrompt, K_END , "End" )
Wvt_AppendMenu( hPop1, nPrompt, K_HOME , "Home" )
Wvt_AppendMenu( hPop, MF_ENABLED + MF_POPUP, hPop1, "Column Movement" )
ENDIF
ENDCASE
t_hPop_[ nID ] := hPop
RETURN wvt_SetPopupMenu( t_hPop_[ nID ] )
FUNCTION DispStatusMsg( cMsg )
wvt_DrawLabel( MaxRow(), 60, cMsg, 6, , 0, RGB( 198, 198, 198 ), "Arial", 18, , 900 )
RETURN .T.
FUNCTION ClearStatusMsg()
LOCAL nRow := Row()
LOCAL nCol := Col()
hb_DispOutAt( MaxRow(), 42, Space( 37 ), "W/W" )
SetPos( nRow, nCol )
RETURN .T.
PROCEDURE WvtPictures( nSlot, cFilePic )
IF nSlot != NIL .AND. nSlot <= 20 .AND. hb_FileExists( cFilePic )
IF !( t_pic_[ nSlot ] == cFilePic )
IF wvt_LoadPicture( cFilePic, nSlot )
t_pic_[ nSlot ] := cFilePic
ENDIF
ENDIF
ENDIF
RETURN
PROCEDURE WvtExePicture( nTop, nLeft, nBottom, nRight, nSlot, aOffset )
IF t_pic_[ nSlot ] != NIL
wvt_DrawPicture( nTop, nLeft, nBottom, nRight, nSlot, aOffSet )
ENDIF
RETURN
FUNCTION GetResource( cName )
RETURN hb_DirBase() + cName
PROCEDURE uiDebug( ... )
LOCAL aP := hb_AParams()
LOCAL s := ""
AEval( aP, {| e | s += hb_ValToStr( e ) + " " } )
wapi_OutputDebugString( s )
RETURN
PROCEDURE MyError( oError )
? oError:description
? oError:operation
? ProcName( 1 ), ProcLine( 1 )
? ProcName( 2 ), ProcLine( 2 )
? ProcName( 3 ), ProcLine( 3 )
? ProcName( 4 ), ProcLine( 4 )
DO WHILE Inkey() != K_ESC
ENDDO
RETURN