Files
harbour-core/contrib/gtwvw/tests/demo.prg
Viktor Szakats e4751cd9e9 2017-09-13 14:32 UTC Viktor Szakats (vszakats users.noreply.github.com)
- extras/guestbk/cgi.ch
  - extras/guestbk/guestbk.hbp
  - extras/guestbk/guestbk.txt
  * .gitattributes
  * contrib/hbgd/tests/counter.prg
  * contrib/hbhttpd/core.prg
  * contrib/hbgd/tests/digits/57chevy.gif -> contrib/hbgd/tests/imgs_in/57chevy.gif
  * contrib/hbgd/tests/digits/7seg.gif -> contrib/hbgd/tests/imgs_in/7seg.gif
  * contrib/hbgd/tests/digits/brsd.gif -> contrib/hbgd/tests/imgs_in/brsd.gif
  * contrib/hbgd/tests/digits/digib.gif -> contrib/hbgd/tests/imgs_in/digib.gif
  * contrib/hbgd/tests/digits/fdb.gif -> contrib/hbgd/tests/imgs_in/fdb.gif
  * contrib/hbgd/tests/digits/jelly.gif -> contrib/hbgd/tests/imgs_in/jelly.gif
  * contrib/hbgd/tests/digits/odb.gif -> contrib/hbgd/tests/imgs_in/odb.gif
  * contrib/hbgd/tests/digits/odw.gif -> contrib/hbgd/tests/imgs_in/odw.gif
  * contrib/hbgd/tests/digits/pdg.gif -> contrib/hbgd/tests/imgs_in/pdg.gif
  * contrib/hbgd/tests/digits/pdw.gif -> contrib/hbgd/tests/imgs_in/pdw.gif
  * contrib/hbhttpd/tests/tpl/_main.tpl -> contrib/hbhttpd/tests/tpl/_main.html
  * contrib/hbhttpd/tests/tpl/app/account/edit.tpl -> contrib/hbhttpd/tests/tpl/app/account/edit.html
  * contrib/hbhttpd/tests/tpl/app/account.tpl -> contrib/hbhttpd/tests/tpl/app/account.html
  * contrib/hbhttpd/tests/tpl/app/cart.tpl -> contrib/hbhttpd/tests/tpl/app/cart.html
  * contrib/hbhttpd/tests/tpl/app/login.tpl -> contrib/hbhttpd/tests/tpl/app/login.html
  * contrib/hbhttpd/tests/tpl/app/logout.tpl -> contrib/hbhttpd/tests/tpl/app/logout.html
  * contrib/hbhttpd/tests/tpl/app/main.tpl -> contrib/hbhttpd/tests/tpl/app/main.html
  * contrib/hbhttpd/tests/tpl/app/register.tpl -> contrib/hbhttpd/tests/tpl/app/register.html
  * contrib/hbhttpd/tests/tpl/app/shopping.tpl -> contrib/hbhttpd/tests/tpl/app/shopping.html
  * extras/gtwvw/docs/funclist.txt -> contrib/gtwvw/doc/funclist.txt
  * extras/gtwvw/docs/gtwvw.txt -> contrib/gtwvw/doc/gtwvw.txt
  * extras/gtwvw/docs/whatsnew.txt -> contrib/gtwvw/doc/ChangeLog.txt
  * extras/gtwvw/gtwvw.hbc -> contrib/gtwvw/gtwvw.hbc
  * extras/gtwvw/gtwvw.hbx -> contrib/gtwvw/gtwvw.hbx
  * extras/gtwvw/gtwvwd.c -> contrib/gtwvw/gtwvwd.c
  * extras/gtwvw/hbgtwvw.h -> contrib/gtwvw/hbgtwvw.h
  * extras/gtwvw/hbole.h -> contrib/gtwvw/hbole.h
  * extras/gtwvw/tests/_wvwmous.prg -> contrib/gtwvw/tests/_wvwmous.prg
  * extras/gtwvw/tests/def2.bmp -> contrib/gtwvw/tests/def2.bmp
  * extras/gtwvw/tests/dia_excl.ico -> contrib/gtwvw/tests/dia_excl.ico
  * extras/gtwvw/tests/drawimg.prg -> contrib/gtwvw/tests/drawimg.prg
  * extras/gtwvw/tests/ebtest7.prg -> contrib/gtwvw/tests/eb7.prg
  * extras/gtwvw/tests/hbmk.hbm -> contrib/gtwvw/tests/hbmk.hbm
  * extras/gtwvw/tests/vouch1.bmp -> contrib/gtwvw/tests/vouch1.bmp
  * extras/gtwvw/tests/vouch1.gif -> contrib/gtwvw/tests/vouch1.gif
  * extras/gtwvw/wvt2wvw.ch -> contrib/gtwvw/wvt2wvw.ch
  * extras/gtwvw/wvwcheck.c -> contrib/gtwvw/checkbox.c
  * extras/gtwvw/wvwdraw.c -> contrib/gtwvw/wvwdraw.c
  * extras/gtwvw/wvwedit.c -> contrib/gtwvw/editbox.c
  * extras/gtwvw/wvwfuncs.c -> contrib/gtwvw/wvwutils.c
  * extras/gtwvw/wvwmenu.c -> contrib/gtwvw/menubar.c
  * extras/gtwvw/wvwpush.c -> contrib/gtwvw/pushbut.c
  * extras/gtwvw/wvwstbar.c -> contrib/gtwvw/statbar.c
  * extras/gtwvw/wvwtbar.c -> contrib/gtwvw/toolbar.c
  * extras/guestbk/guestbk.html -> tests/guestbk.html
  * extras/hbdoc/hbdoc.css -> contrib/hbdoc/hbdoc.css
  * extras/gtwvw/gtwvw.hbp -> contrib/gtwvw/gtwvw.hbp
  * extras/gtwvw/tests/cbtest1.prg -> contrib/gtwvw/tests/cb1.prg
  * extras/gtwvw/tests/cbtest6.prg -> contrib/gtwvw/tests/cb6.prg
  * extras/gtwvw/tests/inpfocus.prg -> contrib/gtwvw/tests/inpfocus.prg
  * extras/gtwvw/tests/maincoor.prg -> contrib/gtwvw/tests/maincoor.prg
  * extras/gtwvw/tests/maximize.prg -> contrib/gtwvw/tests/maximize.prg
  * extras/gtwvw/tests/prog0.prg -> contrib/gtwvw/tests/prog0.prg
  * extras/gtwvw/tests/prog1.prg -> contrib/gtwvw/tests/prog1.prg
  * extras/gtwvw/tests/prog2.prg -> contrib/gtwvw/tests/prog2.prg
  * extras/gtwvw/tests/readme.txt -> contrib/gtwvw/tests/readme.txt
  * extras/gtwvw/tests/wvwtest9.prg -> contrib/gtwvw/tests/demo.prg
  * extras/guestbk/_cgi.prg -> tests/cgi.prg
  * extras/guestbk/_inifile.prg -> tests/inifile.prg
  * extras/guestbk/guestbk.ini -> tests/guestbk.ini
  * extras/guestbk/guestbk.prg -> tests/guestbk.prg
  * extras/hbdoc/_genbase.prg -> contrib/hbdoc/_base.prg
  * extras/hbdoc/_genhtml.prg -> contrib/hbdoc/_html.prg
  * extras/hbdoc/_gentxt.prg -> contrib/hbdoc/_txt.prg
  * extras/hbdoc/_genxml.prg -> contrib/hbdoc/_xml.prg
  * extras/hbdoc/hbdoc.hbp -> contrib/hbdoc/hbdoc.hbp
  * extras/hbdoc/hbdoc.prg -> contrib/hbdoc/hbdoc.prg
    * more file/dir rename sync with 3.4 fork, plus some related file content
2017-09-13 14:33:46 +00:00

1283 lines
37 KiB
Plaintext

// Test/Demo Program for
// GTWVW GUI Interface
// with multiple window support
// a work in progress by
// Budyanto Dj. <budyanto@centrin.net.id>
// based on:
//
// wvtgui.prg,
// GTWVT Console GUI Interface
// by Pritpal Bedi <pritpal@vouchcac.com>
//
// parts of this program are copyrights of their respective owners
#require "gtwvw"
#include "inkey.ch"
#include "setcurs.ch"
#include "hbgtinfo.ch"
#define MF_INSERT 0
#define MF_CHANGE 128
#define MF_APPEND 256
#define MF_DELETE 512
#define MF_REMOVE 4096
#define MF_BYCOMMAND 0
#define MF_BYPOSITION 1024
#define MF_SEPARATOR 2048
#define MF_ENABLED 0
#define MF_GRAYED 1
#define MF_DISABLED 2
#define MF_UNCHECKED 0
#define MF_CHECKED 8
#define MF_USECHECKBITMAPS 512
#define MF_STRING 0
#define MF_BITMAP 4
#define MF_OWNERDRAW 256
#define MF_POPUP 16
#define MF_MENUBARBREAK 32
#define MF_MENUBREAK 64
#define MF_UNHILITE 0
#define MF_HILITE 128
#define MB_OK 0
#define MB_OKCANCEL 1
#define MB_ABORTRETRYIGNORE 2
#define MB_YESNOCANCEL 3
#define MB_YESNO 4
#define MB_RETRYCANCEL 5
#define MB_CANCELTRYCONTINUE 6
#define MB_ICONHAND 16
#define MB_ICONQUESTION 32
#define MB_ICONEXCLAMATION 48
#define MB_ICONASTERISK 64
#define MB_USERICON 128
#define MB_ICONWARNING MB_ICONEXCLAMATION
#define MB_ICONERROR MB_ICONHAND
#define MB_ICONINFORMATION MB_ICONASTERISK
#define MB_ICONSTOP MB_ICONHAND
#define MB_DEFBUTTON1 0
#define MB_DEFBUTTON2 256
#define MB_DEFBUTTON3 512
#define MB_DEFBUTTON4 768
#define MB_APPLMODAL 0
#define MB_SYSTEMMODAL 4096
#define MB_TASKMODAL 8192
#define MB_HELP 16384 // Help Button
#define MB_NOFOCUS 32768
#define MB_SETFOREGROUND 65536
#define MB_DEFAULT_DESKTOP_ONLY 131072
#define MB_TOPMOST 262144
#define MB_RIGHT 524288
#define MB_RTLREADING 1048576
#define IDOK 1
#define IDCANCEL 2
#define IDABORT 3
#define IDRETRY 4
#define IDIGNORE 5
#define IDYES 6
#define IDNO 7
#define IDCLOSE 8
#define IDHELP 9
#define IDTRYAGAIN 10
#define WVW_MAXWINDOWS 20 // ! must match with hbgtwvw.h
#define WVW_DEFAULT_MENUKEYEVENT 1024 // ! must match with hbgtwvw.h
// for Button Types: // 2004-03-03
#define _BUTTON_NORMAL 0 // normal button
#define _BUTTON_FLAT 1 // 'transparent', raised when mouseover
#define _BUTTON_NONE 2 // no sign even when mouseover or clicked
#define _BUTTON_HARD 3 // no recessed when pressed
// menu actions
#define IDM_DEMO_GET 101
#define IDM_DEMO_BROWSE 102
#define IDM_DEMO_CONSOLE 103
// #define IDM_DEMO_COLOR 104
#define IDM_DEMO_EXIT 199
#define IDM_TOOLBAR_RESET 501
#define IDM_TOOLBAR_DELETE 502
#define IDM_TOOLBAR_ENABLE 503
#define IDM_TOOLBAR_DISABLE 504
#define IDM_WINDOW_SPACING_INCREASE 201
#define IDM_WINDOW_SPACING_DECREASE 202
#define IDM_WINDOW_SPACING_DEFAULT 203
#define IDM_HELP_HELP 301
#define IDM_HELP_INFO 302
// menu action from toolbar only:
#define IDM_NETCONNECT 401
#define IDM_NETDISCONNECT 402
#define IDM_BACK 403
#define IDM_FORWARD 404
#define IDM_COPY 405
#define IDM_PASTE 406
STATIC s_amiscobjlist := {} // x misc object list (actually: list of codeblocks)
STATIC s_afontinfo := {} // x current font info
//
PROCEDURE Main()
LOCAL nCurWindow
LOCAL hMenu, hPopupmenu
LOCAL cLabel := "This is the Main Window"
LOCAL nCursor
LOCAL kF1, kF2, kF3
LOCAL kF9, kF10, kF11
LOCAL oMouse
LOCAL ch
#if defined( __HBSCRIPT__HBSHELL ) .AND. defined( __PLATFORM__WINDOWS )
hbshell_gtSelect( "GTWVW" )
#endif
Set( _SET_EVENTMASK, INKEY_ALL )
Set( _SET_DATEFORMAT, "yyyy-mm-dd" )
SET SCOREBOARD OFF
// wvw_SetPaintRefresh( 0 )
wvw_SetVertCaret( .T. )
wvw_pbSetFont( , "Tahoma", 14 )
nCursor := SetCursor( SC_NONE )
IF ! SetDefaultWindowSize()
ldebug( "Cannot setDefaultWindowSize()" )
ELSE
ldebug( "Successfully setDefaultWindowSize()" )
ENDIF
IF wvw_sbCreate() > 0 .AND. ;
wvw_sbAddPart( , "99:99:99" ) > 0
wvw_SetTimer( , 1000 )
ENDIF
s_afontinfo := wvw_GetFontInfo()
hb_gtInfo( HB_GTI_INKEYFILTER, {| nkey | nAfterInkey( nkey ) } )
wvw_SetMouseMove( , .T. ) // required by wvwmouse
kF1 := SetKey( K_F1, {|| xHelp() } )
kF2 := SetKey( K_F2, {|| xDebugInfo() } )
kF3 := SetKey( K_F3, {|| Demo_Console() } )
kF9 := SetKey( K_F9, {|| wvw_SetLineSpacing( NIL, wvw_SetLineSpacing() - 2 ) } )
kF10 := SetKey( K_F10, {|| wvw_SetLineSpacing( NIL, wvw_SetLineSpacing() + 2 ) } )
kF11 := SetKey( K_F11, {|| wvw_SetDefLineSpacing( wvw_SetLineSpacing() ) } )
// start menu definitions *************************************
hMenu := wvw_CreateMenu()
hPopupMenu := wvw_CreateMenu()
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_GET, "~GET demo" )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_BROWSE, "~BROWSE demo" )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_CONSOLE, "~CONSOLE demo (F3)" )
// wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_COLOR, "~COLOR demo" )
wvw_AppendMenu( hPopupMenu, MF_SEPARATOR )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_DEMO_EXIT, "E~xit" )
wvw_AppendMenu( hMenu, MF_ENABLED + MF_POPUP, hPopupMenu, "~Demos", )
hPopupMenu := wvw_CreateMenu()
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_ENABLE, "~Enable Toolbar" )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_DISABLE, "~Disable Toolbar" )
wvw_AppendMenu( hPopupMenu, MF_SEPARATOR )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_RESET, "~Reset Toolbar" )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_TOOLBAR_DELETE, "~Delete Toolbar" )
wvw_AppendMenu( hMenu, MF_ENABLED + MF_POPUP, hPopupMenu, "~Toolbar", )
hPopupMenu := wvw_CreateMenu()
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_DECREASE, "~Decrease Line Spacing (F9)" )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_INCREASE, "~Increase Line Spacing (F10)" )
wvw_AppendMenu( hPopupMenu, MF_SEPARATOR )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_WINDOW_SPACING_DEFAULT, "~Set As Default Line Spacing (F11)" )
wvw_AppendMenu( hMenu, MF_ENABLED + MF_POPUP, hPopupMenu, "~Window", )
hPopupMenu := wvw_CreateMenu()
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_HELP_HELP, "~Help (F1)" )
wvw_AppendMenu( hPopupMenu, MF_SEPARATOR )
wvw_AppendMenu( hPopupMenu, MF_ENABLED + MF_STRING, IDM_HELP_INFO, "~Info (F2)" )
wvw_AppendMenu( hMenu, MF_ENABLED + MF_POPUP, hPopupMenu, "~Help", )
wvw_SetMenu( , hMenu )
// end menu definitions *************************************
nCurWindow := wvw_nNumWindows() - 1 // == 0, Main Window
CreateToolbar( nCurWindow )
ResetMiscObjects( nCurWindow )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawLabel( nWindow, 1, 40, cLabel, 6,, RGB( 255, 255, 255 ), RGB( 198, 198, 198 ), "Arial", s_afontinfo[ 2 ], , , , , .T., .T. ) } )
wvwm_ResetMouseObjects( nCurWindow )
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New( "Info!", MaxRow() - 2, 67, , , {|| xDebugInfo() } ) )
oMouse := WVWMouseButton():New( "Flat", MaxRow() - 2, 67 - 11, , , {|| lboxmessage( "flat" ) }, 1, NIL )
oMouse:cImage := "vouch1.gif"
oMouse:cCaption := ""
wvwm_AddMouseObjects( nCurWindow, oMouse )
oMouse := WVWMouseButton():New( "None", MaxRow() - 2, 67 - 11 - 11, , , {|| lboxmessage( "none" ) }, 2, NIL )
oMouse:Enable( .T. )
wvwm_AddMouseObjects( nCurWindow, oMouse )
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New( "Hard", MaxRow() - 2, 67 - 11 - 11 - 11, , , {|| lboxmessage( "hard" ) }, 3, NIL ) )
oMouse := WVWMouseButton():New( "Disabled", MaxRow() - 2, 67 - 11 - 11 - 11 - 11, , , {|| xDebugInfo() } )
oMouse:Enable( .F. )
wvwm_AddMouseObjects( nCurWindow, oMouse )
oMouse := WVWMouseButton():New( "Tight", MaxRow() - 2, 67 - 11 - 11 - 11 - 11 - 11, , , {|| lboxmessage( "tight" ) } )
oMouse:lTight := .T.
wvwm_AddMouseObjects( nCurWindow, oMouse )
// 20070525 the real pushbutton, easier and better looking. Nothing to do with wvwmouse.prg.
wvw_pbCreate( nCurWindow, MaxRow() - 4, 67 - 11 - 11 - 11 - 11 - 11, MaxRow() - 4, 67 + 9 - 11 - 11 - 11 - 11 - 11, "native", NIL, {|| lboxmessage( "native pushbutton" ) }, NIL )
SetColor( "N/W,N/GR*,,,N/W*" )
CLS
@ 0, 0 SAY "This is line 0"
@ 1, 0 SAY "This is line 1"
@ MaxRow() - 1, 0 SAY "This is line " + hb_ntos( MaxRow() - 1 )
@ MaxRow(), 0 SAY "This is line " + hb_ntos( MaxRow() )
DO WHILE ( ch := Inkey( 0 ) ) != K_ESC
// experiment with different paintrefresh interval:
DO CASE
CASE ch == hb_keyCode( "<" )
wvw_SetPaintRefresh( Int( wvw_SetPaintRefresh() / 2 ) )
Alert( wvw_SetPaintRefresh() )
CASE ch == hb_keyCode( ">" )
wvw_SetPaintRefresh( Int( wvw_SetPaintRefresh() * 2 ) )
Alert( wvw_SetPaintRefresh() )
CASE ch == hb_keyCode( "0" )
wvw_SetPaintRefresh( 0 )
Alert( wvw_SetPaintRefresh() )
OTHERWISE
// do nothing. Inkey() has been handled by nAfterInket()
ENDCASE
ENDDO
lboxmessage( "Thanks for trying this program." + hb_eol() + ;
"Good bye!" )
// restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
SetKey( K_F11, kF11 )
SetKey( K_F10, kF10 )
SetKey( K_F9, kF9 )
// SetKey( K_F4, kF4 )
SetKey( K_F3, kF3 )
SetKey( K_F2, kF2 )
SetKey( K_F1, kF1 )
SetCursor( nCursor )
RETURN // main()
//
STATIC PROCEDURE xDisableMenus( nWinNum, nNumItem )
// disables all Menu Items of window nWinNum
LOCAL i
LOCAL hMenu := wvw_GetMenu( nWinNum )
FOR i := 0 TO nNumItem - 1
wvw_EnableMenuItem( hMenu, i, MF_BYPOSITION + MF_GRAYED )
NEXT
RETURN
// enables all Menu Items of window nWinNum
STATIC PROCEDURE xEnableMenus( nWinNum, nNumItem )
LOCAL i
LOCAL hMenu := wvw_GetMenu( nWinNum )
FOR i := 0 TO nNumItem - 1
wvw_EnableMenuItem( hMenu, i, MF_BYPOSITION + MF_ENABLED )
NEXT
wvw_DrawMenuBar( nWinNum ) // to force redraw of menu
RETURN
//
PROCEDURE Demo_Console( nTop, nLeft, nBottom, nRight )
LOCAL cWinName, nCurWindow
LOCAL nCursor
LOCAL cColor
LOCAL ch
LOCAL lMouseMove
LOCAL lEchoing := .F.
hb_default( @nTop, 2 )
hb_default( @nLeft, 2 )
hb_default( @nBottom, nTop + 10 )
hb_default( @nRight, nLeft + 45 )
cWinName := "Typewriter (Win#" + hb_ntos( wvw_nNumWindows() ) + "); CtrlW: New Window; ESC: Exit"
// x init window
nCurWindow := wvw_nOpenWindow( cWinName, nTop, nLeft, nBottom, nRight )
IF nCurWindow == 0
lboxmessage( "Failed Opening new window!" )
RETURN
ENDIF
nCursor := SetCursor( SC_NORMAL )
cColor := SetColor( "W+/N" )
lMouseMove := wvw_SetMouseMove( , .F. )
ResetMiscObjects( nCurWindow )
wvwm_ResetMouseObjects( nCurWindow )
// *********** begin typewriter mode *************
CLS
?? "Press Ctrl+E to toggle between echoing what you type to previous window"
?
DO WHILE Inkey() != 0; ENDDO // clear typeahead
ch := Inkey( 0 )
DO WHILE ch != K_ESC
IF ch == K_ENTER
?? hb_keyChar( ch ) + Chr( 10 )
IF lEchoing
// write the same thing to previous window
wvw_nSetCurWindow( nCurWindow - 1 )
?? hb_keyChar( ch ) + Chr( 10 )
wvw_nSetCurWindow( nCurWindow )
ENDIF
ELSEIF ch == K_CTRL_W
// Recursively call (another) typewriter, bigger one
Demo_Console( nTop + 2, nLeft + 2, nBottom + 4, nRight + 6 )
ELSEIF ch == K_CTRL_E
// toggle echoing output to prev window
lEchoing := ! lEchoing
ELSE
// any other char goes here
?? hb_keyChar( ch )
IF lEchoing
// write the same thing to previous window
wvw_nSetCurWindow( nCurWindow - 1 )
?? hb_keyChar( ch )
wvw_nSetCurWindow( nCurWindow )
ENDIF
ENDIF
ch := Inkey( 0 )
ENDDO
// *********** end typewriter mode ***************
// epilogue
wvw_lCloseWindow()
// restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
SetCursor( nCursor )
SetColor( cColor )
wvw_SetMouseMove( , lMouseMove )
RETURN // Demo_Console()
//
PROCEDURE Demo_Get()
LOCAL nCurWindow, getlist := {}
LOCAL cLabel := "This is the GET Demo Window"
LOCAL nTop := 4
LOCAL nLeft := 4
LOCAL nBottom := 21
LOCAL nRight := 75
LOCAL nColGet := 8
LOCAL get_1 := hb_SToD()
LOCAL get_2 := PadR( "Pritpal Bedi", 35 )
LOCAL get_3 := PadR( "60, New Professor Colony", 35 )
LOCAL get_4 := PadR( "Ludhiana, INDIA", 35 )
LOCAL get_5 := PadR( "http://www.vouchcac.com", 35 )
LOCAL get_6 := 20000
LOCAL nCursor := SetCursor( SC_NORMAL )
MEMVAR x
// x init window
nCurWindow := wvw_nOpenWindow( "GET Demo", nTop, nLeft, nBottom, nRight )
IF nCurWindow == 0
lboxmessage( "Failed Opening new window!" )
RETURN
ENDIF
wvw_SetIcon( , "vr_1.ico" )
ResetMiscObjects( nCurWindow )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawLabel( nWindow, 1, nRight - nLeft, cLabel, 2,, RGB( 255, 255, 255 ), RGB( 198, 198, 198 ), "Arial", s_afontinfo[ 2 ], , , , , .T., .T. ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawBoxRecessed( nWindow, 7 - nTop, 61 - nLeft, 13 - nTop, 70 - nLeft ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawBoxGroup( nWindow, 15 - nTop, 59 - nLeft, 18 - nTop, 72 - nLeft ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawBoxGroup( nWindow, 5 - nTop, 6 - nLeft, 19 - nTop, 44 - nLeft ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawImage( nWindow, 8 - nTop, 62 - nLeft, 12 - nTop, 69 - nLeft, "vouch1.bmp" ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawBoxRecessed( nWindow, 7 - nTop, 48 - nLeft, 13 - nTop, 55 - nLeft ) } )
AddMiscObjects( nCurWindow, {| nWindow | x := nWindow, AEval( GetList, {| oGet | wvw_DrawBoxGet( x, oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) } )
wvwm_ResetMouseObjects( nCurWindow )
/* we now use native push button
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Info", MaxRow() - 1, MaxCol() - 15, , , {|| xDebugInfo() } ))
*/
wvw_pbCreate( nCurWindow, MaxRow() - 1, MaxCol() - 15, MaxRow() - 1, MaxCol() - 5, "Info", NIL, {|| xDebugInfo() }, NIL )
CLS
@ 6 - nTop, nColGet - nLeft SAY "< Date >"
@ 9 - nTop, nColGet - nLeft SAY "<" + PadC( "Name", 33 ) + ">"
@ 12 - nTop, nColGet - nLeft SAY "<" + PadC( "Address", 33 ) + ">"
@ 16 - nTop, 61 - nLeft SAY "< Salary >"
@ 7 - nTop, nColGet - nLeft GET get_1
@ 10 - nTop, nColGet - nLeft GET get_2 // VALID ( VouChoice() < 7 )
@ 13 - nTop, nColGet - nLeft GET get_3
@ 15 - nTop, nColGet - nLeft GET get_4
@ 17 - nTop, nColGet - nLeft GET get_5
@ 17 - nTop, 61 - nLeft GET get_6 PICTURE "@Z 9999999.99"
READ
// epilogue
// lboxmessage( "Thanks for trying the GET Demo!" )
wvw_lCloseWindow()
// restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
SetCursor( nCursor )
RETURN
//
FUNCTION DEMO_Browse()
LOCAL nKey, bBlock, oBrowse, i
LOCAL lEnd := .F.
LOCAL info_ // wvw_nOpenWindow() has not been performed, so...
LOCAL nTop := 3 // pls notice that this is relative to PARENT window!
LOCAL nLeft := 3 // pls notice that this is relative to PARENT window!
LOCAL nBottom := MaxRow() - 2 // pls notice that this is relative to PARENT window!
LOCAL nRight := MaxCol() - 3 // pls notice that this is relative to PARENT window!
LOCAL cColor
LOCAL nStyle := 0
LOCAL nCurWindow
LOCAL nHScrollBar, nVScrollBar
LOCAL aColumnsSep, tmp
// x init window
nCurWindow := wvw_nOpenWindow( "BROWSE Demo", nTop, nLeft, nBottom, nRight )
IF nCurWindow == 0
lboxmessage( "Failed Opening new window!" )
RETURN NIL
ENDIF
ResetMiscObjects( nCurWindow )
wvwm_ResetMouseObjects( nCurWindow )
cColor := SetColor( "N/W" )
CLS
SetColor( "N/W*,N/GR*,,,N/W* " )
USE "..\..\..\tests\test" NEW
IF NetErr()
wvw_lCloseWindow()
RETURN NIL
ENDIF
INDEX ON FIELD->LAST TO test1 // 20040707
info_ := dbStruct()
oBrowse := TBrowseNew( 3, 2, MaxRow() - 3, MaxCol() - 3 )
oBrowse:ColSep := " "
oBrowse:HeadSep := "__"
oBrowse:GoTopBlock := {|| dbGoTop() }
oBrowse:GoBottomBlock := {|| dbGoBottom() }
oBrowse:SkipBlock := {| nSkip | dbSkipBlock( nSkip, oBrowse ) }
FOR i := 1 TO Len( info_ )
bBlock := VouBlockField( i )
oBrowse:AddColumn( TBColumnNew( info_[ i, 1 ], bBlock ) )
NEXT
oBrowse:configure()
wvw_SetPen( nStyle, 0, RGB( 210, 1210, 210 ) )
wvw_SetIcon( , "dia_excl.ico" )
aColumnsSep := Array( oBrowse:colCount )
FOR EACH tmp IN aColumnsSep
tmp := oBrowse:getColumn( tmp:__enumIndex() ):colSep
NEXT
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawBoxRecessed( nWindow, oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawGridHorz( nWindow, oBrowse:nTop + 3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } )
AddMiscObjects( nCurWindow, {| nWindow | wvw_DrawGridVert( nWindow, oBrowse:nTop, oBrowse:nBottom, aColumnsSep, Len( aColumnsSep ) ) } )
/* we now use native push button
wvwm_AddMouseObjects( nCurWindow, WVWMouseButton():New("Info", MaxRow(), MaxCol() - 15, , , {|| xDebugInfo() } ))
*/
wvw_pbCreate( nCurWindow, MaxRow(), MaxCol() - 15, MaxRow(), MaxCol() - 5, "Info", NIL, {|| xDebugInfo() }, NIL )
nHScrollBar := wvw_xbCreate( nCurWindow, 0, oBrowse:nBottom + 1, oBrowse:nLeft, oBrowse:nRight - oBrowse:nLeft + 1, /*aBlock*/ {| nWinNum, nXBid, nXBmsg, nXBpos | HB_SYMBOL_UNUSED( nXBpos ), HXBscroller( oBrowse, nWinNum, nXBid, nXBmsg ) }, /*aOffset*/ NIL )
nVScrollBar := wvw_xbCreate( nCurWindow, 1, oBrowse:nTop, oBrowse:nRight + 1, oBrowse:nBottom - oBrowse:nTop + 1, /*aBlock*/ {| nWinNum, nXBid, nXBmsg, nXBpos | HB_SYMBOL_UNUSED( nXBpos ), VXBscroller( oBrowse, nWinNum, nXBid, nXBmsg ) }, /*aOffset*/ NIL )
hb_DispOutAt( nTop + 1 - nTop, nleft - nleft, PadC( hb_CurDrive() + ":" + hb_ps() + CurDir() + hb_ps() + "test.dbf", nRight - nLeft + 1 ), "W+/W" )
oBrowse:ForceStable()
RefreshHXB( oBrowse, nCurWindow, nHScrollBar ) // 20040704
RefreshVXB( oBrowse, nCurWindow, nVScrollBar ) // 20040704
WHILE ! lEnd
nKey := Inkey( 0 )
DO CASE
CASE nKey == K_ESC .OR. nKey == K_ENTER
lEnd := .T.
LOOP
CASE nKey == K_DOWN
oBrowse:Down()
CASE nKey == K_MWBACKWARD
oBrowse:Down() // simple scroll down
CASE nKey == K_UP
oBrowse:Up()
CASE nKey == K_MWFORWARD
oBrowse:Up() // simple scroll up
CASE nKey == K_LEFT
IF oBrowse:colPos == 1; loop; ENDIF
oBrowse:Left()
CASE nKey == K_RIGHT
IF oBrowse:colPos == oBrowse:colCount; loop; ENDIF
oBrowse:Right()
CASE nKey == K_PGDN
oBrowse:pageDown()
CASE nKey == K_PGUP
oBrowse:pageUp()
CASE nKey == K_CTRL_PGUP
oBrowse:goTop()
CASE nKey == K_CTRL_PGDN
oBrowse:goBottom()
CASE nKey == K_HOME
oBrowse:home()
CASE nKey == K_END
oBrowse:end()
CASE nKey == K_CTRL_LEFT
oBrowse:panLeft()
CASE nKey == K_CTRL_RIGHT
oBrowse:panRight()
CASE nKey == K_CTRL_HOME
oBrowse:panHome()
CASE nKey == K_CTRL_END
oBrowse:panEnd()
OTHERWISE
// other keys, including mouse events do not need ForceStable
LOOP
ENDCASE
oBrowse:ForceStable()
// refresh the scrollbars due to keyboard navigation
RefreshHXB( oBrowse, nCurWindow, nHScrollBar ) // 20040704
RefreshVXB( oBrowse, nCurWindow, nVScrollBar ) // 20040704
ENDDO
dbCloseArea()
// epilogue
// lboxmessage("Thanks for trying the BROWSE Demo!")
wvw_lCloseWindow()
// restore state
wvwm_ResetMouseObjects( nCurWindow )
ResetMiscObjects( nCurWindow )
wvw_SetPen( 0 )
SetColor( cColor )
// SetCursor( nCursor )
RETURN NIL // DEMO_Browse()
/* generic Vertical Scrollbar handler for tbrowse */
FUNCTION VXBscroller( oBrowse, nWinNum, XBid, XBmsg )
LOCAL nOldWin
LOCAL lNeedStabilize
// if we can't handle non topmost window we must return right away
// IF nWinNum != wvw_nNumWindows() - 1 ; RETURN ; ENDIF
nOldWin := wvw_nSetCurWindow( nWinNum )
lNeedStabilize := .F.
DO WHILE .T. // dummy loop
DO CASE
CASE XBmsg == 0 // SB_LINEUP
IF ordKeyNo() == 1; exit; ENDIF
oBrowse:up()
CASE XBmsg == 1 // SB_LINEDOWN
IF ordKeyNo() == ordKeyCount(); exit; ENDIF
oBrowse:down()
CASE XBmsg == 2 // SB_PAGEUP
IF ordKeyNo() == 1; exit; ENDIF
oBrowse:pageup()
CASE XBmsg == 3 // SB_PAGEDOWN
IF ordKeyNo() == ordKeyCount(); exit; ENDIF
oBrowse:pagedown()
OTHERWISE
// ignore
lNeedStabilize := .F.
EXIT
ENDCASE
lNeedStabilize := .T.
EXIT
ENDDO // dummy loop
IF lNeedStabilize
oBrowse:ForceStable()
RefreshVXB( oBrowse, nWinNum, XBid )
ENDIF
wvw_nSetCurWindow( nOldWin )
RETURN NIL
/* generic Horizontal Scrollbar handler for tbrowse */
FUNCTION HXBscroller( oBrowse, nWinNum, XBid, XBmsg )
LOCAL nOldWin
LOCAL lNeedStabilize
// if we can't handle non topmost window we must return right away
// IF nWinNum != wvw_nNumWindows() - 1 ; RETURN ; ENDIF
nOldWin := wvw_nSetCurWindow( nWinNum )
lNeedStabilize := .F.
DO WHILE .T. // dummy loop
DO CASE
CASE XBmsg == 0 // SB_LINELEFT
IF oBrowse:colPos == 1; exit; ENDIF
oBrowse:Left()
CASE XBmsg == 1 // SB_LINERIGHT
IF oBrowse:colpos == oBrowse:colCount; exit; ENDIF
oBrowse:Right()
CASE XBmsg == 2 // SB_PAGELEFT
IF oBrowse:colPos == 1; exit; ENDIF
oBrowse:panleft()
CASE XBmsg == 3 // SB_PAGERIGHT
IF oBrowse:colpos == oBrowse:colCount; exit; ENDIF
oBrowse:panright()
OTHERWISE
// ignore
lNeedStabilize := .F.
EXIT
ENDCASE
lNeedStabilize := .T.
EXIT
ENDDO // dummy loop
IF lNeedStabilize
oBrowse:ForceStable()
RefreshHXB( oBrowse, nWinNum, XBid )
ENDIF
wvw_nSetCurWindow( nOldWin )
RETURN NIL
/**
20040704 notes:
0 <= nPage <= ( nMax - nMin + 1 )
nPage :: pagesize
nMin <= nPos <= ( nMax - Max( nPage - 1, 0 ) )
**/
STATIC FUNCTION RefreshVXB( oBrowse, nWinNum, XBid )
LOCAL nMin, nMax, nPage, nPos
LOCAL nRatio
// recalc the pos
IF ordKeyCount() < 30000
nMin := 1
nMax := ordKeyCount()
nPage := oBrowse:RowCount // ordKeyCount()
nPos := ordKeyNo() - oBrowse:RowPos + 1 // ordKeyCount()
ELSE
nRatio := ordKeyCount() / 10
DO WHILE nRatio > 30000
nRatio := nRatio / 10
ENDDO
nMin := 1
nMax := Round( ordKeyCount() / nRatio, 0 )
nPage := Round( oBrowse:RowCount / nRatio, 0 ) // ordKeyCount()
nPos := Round( ( ordKeyNo() - oBrowse:RowPos + 1 ) / nRatio, 0 )// ordKeyCount()
ENDIF
wvw_xbUpdate( nWinNum, XBid, nPos, nPage, nMin, nMax )
RETURN NIL
STATIC FUNCTION RefreshHXB( oBrowse, nWinNum, XBid )
LOCAL nMin, nMax, nPage, nPos
// recalc the pos
nMin := 1
nMax := oBrowse:ColCount
nPage := oBrowse:RightVisible - oBrowse:LeftVisible + 1
nPos := iif( oBrowse:RightVisible == oBrowse:ColCount, nMax, oBrowse:LeftVisible )
wvw_xbUpdate( nWinNum, XBid, nPos, nPage, nMin, nMax )
RETURN NIL
//
STATIC FUNCTION DbSkipBlock( n, oTbr )
LOCAL nSkipped := 0
HB_SYMBOL_UNUSED( oTbr )
IF n == 0
dbSkip( 0 )
ELSEIF n > 0
DO WHILE nSkipped != n .AND. TBNext( oTbr )
nSkipped++
ENDDO
ELSE
DO WHILE nSkipped != n .AND. TBPrev( oTbr )
nSkipped--
ENDDO
ENDIF
RETURN nSkipped
//
STATIC FUNCTION TBNext( oTbr )
LOCAL nSaveRecNum := RecNo()
LOCAL lMoved := .T.
HB_SYMBOL_UNUSED( oTbr )
IF Eof()
lMoved := .F.
ELSE
dbSkip( 1 )
IF Eof()
lMoved := .F.
dbGoto( nSaveRecNum )
ENDIF
ENDIF
RETURN lMoved
//
STATIC FUNCTION TBPrev( oTbr )
LOCAL nSaveRecNum := RecNo()
LOCAL lMoved := .T.
HB_SYMBOL_UNUSED( oTbr )
dbSkip( -1 )
IF Bof()
dbGoto( nSaveRecNum )
lMoved := .F.
ENDIF
RETURN lMoved
//
STATIC FUNCTION VouBlockField( i )
RETURN {|| FieldGet( i ) }
//
// WVW_Paint() must be a FUNCTION in your application
// as it is called when Window gets WM_PAINT message.
//
// 20040330,was: FUNCTION WVW_Paint( hWnd, msg, wParam, lParam, nWinNum )
// 20040408,was: FUNCTION WVW_Paint( nWinNum, nrow1, ncol1, nrow2, ncol2 )
FUNCTION WVW_Paint( nWinNum )
// ldebug( "WVW_Paint:" + hb_eol() +;
// "hWnd = " + hb_ntos( hWnd ) + hb_eol() +;
// "nWinNum = " + hb_ntos( nWinNum ) )
IF Len( s_amiscobjlist ) >= nWinNum + 1
AEval( s_amiscobjlist[ nWinNum + 1 ], {| e | Eval( e, nWinNum ) } )
ENDIF
wvwm_paint( nWinNum )
RETURN 0
//
// WVW_SetFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_SETFOCUS message
// received by the window.
//
#if 0
FUNCTION WVW_SetFocus( hWnd, nWinNum )
STATIC s_nGotFocus := 0
IF nWinNum == 0
RETURN NIL
ENDIF
s_nGotFocus++
@ 0, 0 SAY s_nGotFocus
IF s_nGotFocus % 3 == 0
Alert( "Got focus " + Transform( s_nGotFocus, "9999" ) + "th times" )
ENDIF
RETURN NIL
//
// WVW_KillFocus() must be a FUNCTION in your application
// needs to process messages sent through WM_KILLFOCUS message
// received by the window.
FUNCTION WVW_KillFocus( hWnd )
RETURN NIL
#endif
FUNCTION WVW_TIMER( nWinNum, hWnd, message, wParam, lParam )
HB_SYMBOL_UNUSED( nWinNum )
HB_SYMBOL_UNUSED( hWnd )
HB_SYMBOL_UNUSED( message )
HB_SYMBOL_UNUSED( wParam )
HB_SYMBOL_UNUSED( lParam )
// this function is called every certain interval, by GTWVW gtwndproc
wvw_sbSetText( 0, 1, Time() )
RETURN NIL
FUNCTION CreateToolbar( nWinNum )
// for toolbar:
LOCAL nSysBitmap := 1 // 0:none 1:small 2:large
LOCAL lDisplayText := .F. // text will be displayed as tooltip instead
LOCAL hWndTB
LOCAL ldefault
wvw_tbDestroy( nWinNum )
ldefault := lYesNo( "would you like to use default toolbar setting?" )
IF ! ldefault
nSysBitmap := Alert( "Select toolbar button size", { "Small", "Big" } )
nSysBitmap := iif( nSysBitmap == 0, 1, nSysBitmap )
lDisplayText := Alert( "Display text in toolbar?", { "Yes", "No" } ) == 1
ENDIF
hWndTB := wvw_tbCreate( nWinNum, lDisplayText, NIL, nSysBitmap )
IF hWndTB == 0
lboxmessage( "FAILED create toolbar" )
RETURN NIL
ENDIF
/* system bitmaps use constants in commctrl.h */
/* using system view bitmaps */
wvw_tbAddButton( nWinNum, IDM_NETCONNECT, 9 /*VIEW_NETCONNECT*/, "Connect", 2 )
wvw_tbAddButton( nWinNum, IDM_NETDISCONNECT, 10 /*VIEW_NETDISCONNECT*/, "Dis", 2 )
wvw_tbAddButton( nWinNum ) // separator
/* using system history bitmaps */
wvw_tbAddButton( nWinNum, IDM_BACK, 0 /*HIST_BACK*/, "Back", 3 )
wvw_tbAddButton( nWinNum, IDM_FORWARD, 1 /*HIST_FORWARD*/, "Forward", 3 )
wvw_tbAddButton( nWinNum ) // separator
/* using custom bitmaps */
wvw_tbAddButton( nWinNum, IDM_DEMO_BROWSE, "def2.bmp", "Browse", 0 )
wvw_tbAddButton( nWinNum, IDM_DEMO_GET, "vouch1.bmp", "Get", 0 )
wvw_tbAddButton( nWinNum ) // separator
/* using system standard bitmaps */
wvw_tbAddButton( nWinNum, IDM_COPY, 1 /*STD_COPY*/, "Copy", 1 )
wvw_tbAddButton( nWinNum, IDM_PASTE, 2 /*STD_PASTE*/, "Paste", 1 )
wvw_tbAddButton( nWinNum ) // separator
wvw_tbAddButton( nWinNum, IDM_HELP_INFO, 10 /*STD_PROPERTIES*/, "Info", 1 )
wvw_tbAddButton( nWinNum, IDM_HELP_HELP, 11 /*STD_HELP*/, "Help", 1 )
RETURN NIL
FUNCTION xDisableToolbar( nWinNum )
LOCAL i
FOR i := 0 TO wvw_tbButtonCount( nWinNum ) - 1
wvw_tbEnableButton( nWinNum, i, .F. )
NEXT
RETURN NIL
FUNCTION xEnableToolbar( nWinNum )
LOCAL i
FOR i := 0 TO wvw_tbButtonCount( nWinNum ) - 1
wvw_tbEnableButton( nWinNum, i, .T. )
NEXT
RETURN NIL
//
FUNCTION ResetMiscObjects( nWinNum )
DO WHILE Len( s_amiscobjlist ) < nWinNum + 1
AAdd( s_amiscobjlist, {} )
ENDDO
s_amiscobjlist[ nWinNum + 1 ] := {}
RETURN .T.
FUNCTION AddMiscObjects( nWinNum, bAction )
AAdd( s_amiscobjlist[ nWinNum + 1 ], bAction )
RETURN .T.
// Inkey() handler **************************************
/* this is for use with SetInkeyAfterBlock() */
FUNCTION nAfterInkey( nkey )
// check if nkey is:
// (1) menu command, or
// (2) mouse button action
LOCAL bAction
IF nkey == WVW_DEFAULT_MENUKEYEVENT
// MenuKeyEvent
RETURN nMenuChecker( wvw_GetLastMenuEvent() )
// was: elseif AScan({K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE}, nKey) > 0
ELSEIF AScan( { K_LBUTTONDOWN, K_LBUTTONUP, K_MOUSEMOVE, K_MMLEFTDOWN, ;
K_LDBLCLK }, nKey ) > 0
// MouseEvent
RETURN wvwm_nMouseChecker( nkey )
ELSEIF ( bAction := SetKey( nKey ) ) != NIL
Eval( bAction, ProcName(), ProcLine(), ReadVar() )
RETURN 0
ENDIF
RETURN nkey // nAfterInkey(nkey)
// MENU handler **************************************
FUNCTION nMenuChecker( nMenuEvent )
LOCAL nkey := 0
xDisableMenus( 0, 4 )
// xDisableToolbar( 0 )
DO CASE
CASE nMenuEvent == IDM_DEMO_GET
// lboxmessage( "Demo GET" )
Demo_Get()
CASE nMenuEvent == IDM_DEMO_BROWSE
// lboxmessage( "Demo BROWSE" )
Demo_Browse()
CASE nMenuEvent == IDM_DEMO_CONSOLE
// lboxmessage( "Demo CONSOLE" )
Demo_Console()
#if 0
CASE nMenuEvent == IDM_DEMO_COLOR
// lboxmessage( "Demo COLOR" )
Demo_Color()
#endif
CASE nMenuEvent == IDM_DEMO_EXIT
// lboxmessage( "should EXIT!" )
nkey := K_ESC
CASE nMenuEvent == IDM_WINDOW_SPACING_INCREASE
wvw_SetLineSpacing( NIL, wvw_SetLineSpacing() + 2 )
CASE nMenuEvent == IDM_WINDOW_SPACING_DECREASE
wvw_SetLineSpacing( NIL, wvw_SetLineSpacing() - 2 )
CASE nMenuEvent == IDM_WINDOW_SPACING_DEFAULT
wvw_SetDefLineSpacing( wvw_SetLineSpacing() )
CASE nMenuEvent == IDM_TOOLBAR_ENABLE
xEnableToolbar( 0 )
CASE nMenuEvent == IDM_TOOLBAR_DISABLE
xDisableToolbar( 0 )
CASE nMenuEvent == IDM_TOOLBAR_RESET
CreateToolbar( 0 )
CASE nMenuEvent == IDM_TOOLBAR_DELETE
wvw_tbDestroy( 0 )
CASE nMenuEvent == IDM_HELP_HELP
xHelp()
CASE nMenuEvent == IDM_HELP_INFO
xDebugInfo()
OTHERWISE
lboxmessage( "Sorry, unknown menu option" )
ENDCASE
// xEnableToolbar( 0 )
xEnableMenus( 0, 4 )
RETURN nkey // nMenuChecker()
// MISCELLANEOUS *******************************************************
FUNCTION lBoxMessage( cMsg, cTitle )
hb_default( @cTitle, "Info" )
win_MessageBox( wvw_GetWindowHandle(), cMsg, cTitle, MB_OK + MB_ICONINFORMATION + MB_SYSTEMMODAL )
RETURN .T.
FUNCTION lYesNo( cMsg, cTitle )
hb_default( @cTitle, "Konfirmasi" )
RETURN win_MessageBox( wvw_GetWindowHandle(), cMsg, cTitle, MB_YESNO + MB_ICONQUESTION + MB_SYSTEMMODAL ) == IDYES
FUNCTION lDebug( cMsg )
RETURN lBoxMessage( cMsg, "Debug" )
FUNCTION xDebugInfo()
STATIC s_nfh := 0
MSetPos( MaxRow(), MaxCol() )
// SetMouse( .T., MaxRow(), MaxCol() )
// wvw_SetMousePos( wvw_nNumWindows() - 1, MaxRow(), MaxCol() )
lboxmessage( "GTWVW test/demo" + hb_eol() + ;
"Budyanto Dj. <budyanto@centrin.net.id>" + hb_eol() + ;
hb_eol() + ;
"Topmost Window is Window #" + hb_ntos( wvw_nNumWindows() - 1 ) + hb_eol() + ;
"Current Window is Window #" + hb_ntos( wvw_nSetCurWindow() ) + hb_eol() + ;
"MaxRow() = " + hb_ntos( MaxRow() ) + ", MaxCol() = " + hb_ntos( MaxCol() ) + hb_eol() + ;
"Row() = " + hb_ntos( Row() ) + ", Col() = " + hb_ntos( Col() ) + hb_eol() + ;
"WVW_RowOfs() = " + hb_ntos( wvw_nRowOfs() ) + ", WVW_ColOfs() = " + hb_ntos( wvw_nColOfs() ) + hb_eol() + ;
"Line Spacing = " + hb_ntos( wvw_SetLineSpacing() ) + hb_eol() + ;
"Default Line Spacing = " + hb_ntos( wvw_SetDefLineSpacing() ) + hb_eol() + ;
hb_eol() + ;
"Font Face = '" + s_aFontInfo[ 1 ] + "'" + hb_eol() + ;
"Font Height = " + hb_ntos( s_aFontInfo[ 2 ] ) + hb_eol() + ;
"Font Width = " + hb_ntos( s_aFontInfo[ 3 ] ) + hb_eol() + ;
hb_eol() + ;
"BTW, mouse pointer now sits on MaxRow(),MaxCol(), doesn't it?" )
RETURN NIL
FUNCTION xHelp()
lboxmessage( "GTWVW test/demo" + hb_eol() + ;
"Budyanto Dj. <budyanto@centrin.net.id>" + hb_eol() + ;
hb_eol() + ;
"Hotkeys (available in any window):" + hb_eol() + ;
"F1 : Help" + hb_eol() + ;
"F2 : Info on current window" + hb_eol() + ;
"F3 : Open a new window of a pseudo-console typewriter" + hb_eol() + ;
"F9 : Decrease Line Spacing" + hb_eol() + ;
"F10: Increase Line Spacing" + hb_eol() + ;
"F11: Set as Default Line Spacing" + hb_eol() + ;
hb_eol() + ;
"Test/demo available:" + hb_eol() + ;
"GET: a simple GET/READ session" + hb_eol() + ;
"BROWSE: a simple TBROWSE session" + hb_eol() + ;
hb_eol() + ;
"CONSOLE: a simple CONSOLE session" + hb_eol() + ;
"You are interacting in a typewriter mode." + hb_eol() + ;
"Press Ctrl+W to open a new, bigger window." + hb_eol() + ;
"Press ESC to exit)" + hb_eol() + ;
hb_eol() + ;
"Maximum number of windows opened: " + hb_ntos( WVW_MAXWINDOWS ) + hb_eol() + ;
hb_eol() + ;
"Other info:" + hb_eol() + ;
"Window repainting is checked at 100msec interval" )
RETURN NIL
FUNCTION nCeiling( nNumber, nRoundDec )
// WARNING!!! tidak bekerja untuk nRoundDec > 0
// nRoundDec: 0=satuan, -1=puluhan, -2=ratusan, -3=ribuan
LOCAL i
LOCAL nTemp
hb_default( @nRoundDec, 0 ) // SATUAN
IF nRoundDec > 0
nRoundDec := 0
ENDIF
// geser kanan
FOR i := nRoundDec TO -1 // artinya kalau SATUAN gak usah
nNumber := nNumber / 10
NEXT
nTemp := nNumber - Int( nNumber ) // right of dec point
IF nTemp > 0
nNumber := Int( nNumber ) + 1
ELSE
nNumber := Int( nNumber )
ENDIF
// geser kiri
FOR i := nRoundDec TO -1 // artinya kalau SATUAN gak usah
nNumber := nNumber * 10
NEXT
RETURN nNumber
/* Modified from SetDefaultWindowSize() sample from Peter Rees */
/* Note: width < 0 appears better, but mouse caption will look bad */
FUNCTION SetDefaultWindowSize()
// x was: LOCAL Result:= SetMode(32,98), ScreenWidth
LOCAL Result := .T., ScreenWidth
SetMode( 25, 80 )
IF Result
screenWidth := wvw_GetScreenWidth()
DO CASE
CASE screenWidth >= 1024
Result := wvw_SetFont( , "Terminal", 20, 10 )
CASE screenWidth >= 800
IF hb_osIsWinNT()
Result := wvw_SetFont( , "Lucida Console", 16, - 8 )
ELSE
Result := wvw_SetFont( , "System", 16, - 8 )
ENDIF
OTHERWISE
Result := wvw_SetFont( , "Terminal", 12, 6 )
ENDCASE
IF Result
wvw_SetCodepage( , 255 ) // #define OEM_CHARSET 255 - from wingdi.h
CLS
ENDIF
ENDIF
RETURN Result
// ERROR handler *******************************************************
PROCEDURE ErrorSys()
ErrorBlock( {| e | MyError( e ) } )
RETURN
STATIC PROCEDURE MyError( e )
LOCAL i := 1, cErr
cErr := "Runtime error" + hb_eol() + ;
hb_eol() + ;
"Gencode: " + hb_ntos( e:GenCode ) + hb_eol() + ;
"Desc: " + e:Description + + hb_eol() + ;
"Sub-system: " + hb_ntos( e:SubCode ) + hb_eol() + ;
hb_eol() + ;
"Call trace:" + hb_eol() + ;
hb_eol()
DO WHILE ! Empty( ProcName( ++i ) )
cErr += RTrim( ProcName( i ) ) + "(" + hb_ntos( ProcLine( i ) ) + ")" + hb_eol()
ENDDO
// ? cErr // Calls quit
ldebug( cErr )
hb_gtInfo( HB_GTI_INKEYFILTER, NIL )
QUIT
RETURN
PROCEDURE debugging( cMsg, nRow, nCol, nWinNum )
HB_SYMBOL_UNUSED( nWinNum )
? cmsg + hb_ntos( nrow ) + ", " + hb_ntos( ncol )
RETURN
PROCEDURE pause()
Tone( 660, 2 )
Inkey( 0 )
RETURN
SET PROCEDURE TO "_wvwmous.prg"