2011-12-06 23:28 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/gtwvg/gtwvg.hbp
    + Added: wvggenrc.prg

  * contrib/gtwvg/gtwvg.h
    + Added: structure member - PHB_ITEM pNotifierGUI

  * contrib/gtwvg/gtwvg.c
  * contrib/gtwvg/wvgwin.c
  * contrib/gtwvg/wvgwing.c

  * contrib/gtwvg/hbgtwvg.ch
    + Added: event notification - HB_GTE_ANY

  * contrib/gtwvg/wvg3stat.prg
  * contrib/gtwvg/wvgax.prg
  * contrib/gtwvg/wvgcheck.prg
  * contrib/gtwvg/wvgclass.prg
  * contrib/gtwvg/wvgcombo.prg
  * contrib/gtwvg/wvgcrt.prg
  * contrib/gtwvg/wvgcuig.c
  * contrib/gtwvg/wvgdarea.prg
  * contrib/gtwvg/wvgdatar.prg
  * contrib/gtwvg/wvgdlg.prg
  + contrib/gtwvg/wvggenrc.prg
    + Implemented: Xbase++ compliant SetAppWindow() function.
        The function simulates a WvgCRT() window from current 
        thread specific GT console if the function is called 
        without parameters and current thread has not posted 
        any application window. This facilitates hosting 
        WVG*Gui controls on pure GT invoked console.

  * contrib/gtwvg/wvghtmlv.prg
  * contrib/gtwvg/wvglistb.prg
  * contrib/gtwvg/wvgmenub.prg
  * contrib/gtwvg/wvgmle.prg
  * contrib/gtwvg/wvgpaint.prg
    + Added: WVT_GetRGBColorByString( cClipperColorString, nForeBack )
        Retrieves RGB color given the clipper color string from 
        active GT palette:
          WVT_GetRGBColorByString( "W+/GR", 0 ) => nRGBForeColor
          WVT_GetRGBColorByString( "W+/GR", 1 ) => nRGBBackColor

  * contrib/gtwvg/wvgphdlr.prg
  * contrib/gtwvg/wvgpushb.prg
  * contrib/gtwvg/wvgradio.prg
  * contrib/gtwvg/wvgscrlb.prg
  * contrib/gtwvg/wvgsle.prg
  * contrib/gtwvg/wvgstatb.prg
  * contrib/gtwvg/wvgstatc.prg
  * contrib/gtwvg/wvgsysw.prg
  * contrib/gtwvg/wvgtoolb.prg
  * contrib/gtwvg/wvgtreev.prg
  * contrib/gtwvg/wvgwnd.prg
    + Restructured: GTWVG at GUI space.
        Xbase++ compatible controls can be hosted on CUI console.
        The only requirement is that the parent of such GUI 
        controls is an object created with WvgCRT(). If there 
        is no object of type WvgCRT() is in sight, in case of a 
        pure GT invoked console, a WvgCRT() object is created and 
        current console window handle is assigned to it. This is 
        achieved through SetAppWindow() function which is called
        if a control's parent is supplied as NIL, in accordance 
        with Xbase++ documentation.


        The events assigned and executed by such controls are not 
        posted to inkey() processing, instead, are executed directly.
        Just before executing an assigned event, focus is imposed 
        on GT console and returned to GUI control after processing 
        the execution. This ensures that GT is always in focus while 
        GUI control executes an assignment.

    + Introduced: In accordance with console coordinate system, the 
        positioning and size parameters supplied at the time of 
        construction of GUI objects now support 
          aPos == { nRow, nColumn } and aSize == { nRows, nColumns } 
        protocol. This has been achieved by supplying all four values
        in negative. Thus WVG engine checks for negativity of position 
        and size values and determines that coordinate system be 
        interpreted as row/column instead of x/y(s). For example,
          WvgPushButton( , , { -10, -2 }, { -3, -10 } )
        call will render the push button at 10,2,13,12 console area
        in terms of rows and columns. These coordinates will be 
        maintained with resizing of console, etc.

        To extend this coordinate system a step further, the pos 
        and size arrays can be populated with code blocks evaluating 
        to a negative numeric value. This implimentation facilitates
        to ancor any GUI control to a specific postion always. Thus,
          WvgPushButton( , , { {|| -( maxrow()-3 ) }, -2 }, { -10, -3 } )
        will always position push button on last row-3 of the console
        no matter how many rows the console is resized to.

    + Introduced: oWVG:SetColorFG/BG() now accept clipper color string 
        and renders the corresponding RGB color of active GT palette.
        This facilitates the embedding of GUI controls on Clipper 
        complaint screen colors. Thus,
          oStatic:setColorBG( "GR*" ) 
        will render the background of text label as yellow.

      IMPORTANT: The above concepts are on the top of existing ones 
                 so no current functionality is lost.
 
  * contrib/gtwvg/tests/demowvg.prg
  * contrib/gtwvg/tests/wvgtbrowser.prg
  * contrib/gtwvg/tests/wvgutilities.prg
  * contrib/gtwvg/tests/wvgxbp.prg
    + Restructured: the code parts to demonstrate newly introduced 
        GTWVG concepts. Specialy look at main window's menu system, 
        push buttons at the bottom. Also look at 
          <Main Menu><Traditional><Browser - GTWVG - Threaded>.
        This example is reworked entirely and is a testimony to 
        GTWVG power.

        NOTE: more changes and code shifting and simplifying is 
              on the drawing board. Hopefully code will get an 
              an overhaul in coming days.
This commit is contained in:
Pritpal Bedi
2011-12-07 09:16:14 +00:00
parent 8f7e9eda97
commit 9f4f656178
38 changed files with 1802 additions and 794 deletions

View File

@@ -16,6 +16,125 @@
The license applies to all entries newer than 2009-04-28.
*/
2011-12-06 23:28 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)
* contrib/gtwvg/gtwvg.hbp
+ Added: wvggenrc.prg
* contrib/gtwvg/gtwvg.h
+ Added: structure member - PHB_ITEM pNotifierGUI
* contrib/gtwvg/gtwvg.c
* contrib/gtwvg/wvgwin.c
* contrib/gtwvg/wvgwing.c
* contrib/gtwvg/hbgtwvg.ch
+ Added: event notification - HB_GTE_ANY
* contrib/gtwvg/wvg3stat.prg
* contrib/gtwvg/wvgax.prg
* contrib/gtwvg/wvgcheck.prg
* contrib/gtwvg/wvgclass.prg
* contrib/gtwvg/wvgcombo.prg
* contrib/gtwvg/wvgcrt.prg
* contrib/gtwvg/wvgcuig.c
* contrib/gtwvg/wvgdarea.prg
* contrib/gtwvg/wvgdatar.prg
* contrib/gtwvg/wvgdlg.prg
+ contrib/gtwvg/wvggenrc.prg
+ Implemented: Xbase++ compliant SetAppWindow() function.
The function simulates a WvgCRT() window from current
thread specific GT console if the function is called
without parameters and current thread has not posted
any application window. This facilitates hosting
WVG*Gui controls on pure GT invoked console.
* contrib/gtwvg/wvghtmlv.prg
* contrib/gtwvg/wvglistb.prg
* contrib/gtwvg/wvgmenub.prg
* contrib/gtwvg/wvgmle.prg
* contrib/gtwvg/wvgpaint.prg
+ Added: WVT_GetRGBColorByString( cClipperColorString, nForeBack )
Retrieves RGB color given the clipper color string from
active GT palette:
WVT_GetRGBColorByString( "W+/GR", 0 ) => nRGBForeColor
WVT_GetRGBColorByString( "W+/GR", 1 ) => nRGBBackColor
* contrib/gtwvg/wvgphdlr.prg
* contrib/gtwvg/wvgpushb.prg
* contrib/gtwvg/wvgradio.prg
* contrib/gtwvg/wvgscrlb.prg
* contrib/gtwvg/wvgsle.prg
* contrib/gtwvg/wvgstatb.prg
* contrib/gtwvg/wvgstatc.prg
* contrib/gtwvg/wvgsysw.prg
* contrib/gtwvg/wvgtoolb.prg
* contrib/gtwvg/wvgtreev.prg
* contrib/gtwvg/wvgwnd.prg
+ Restructured: GTWVG at GUI space.
Xbase++ compatible controls can be hosted on CUI console.
The only requirement is that the parent of such GUI
controls is an object created with WvgCRT(). If there
is no object of type WvgCRT() is in sight, in case of a
pure GT invoked console, a WvgCRT() object is created and
current console window handle is assigned to it. This is
achieved through SetAppWindow() function which is called
if a control's parent is supplied as NIL, in accordance
with Xbase++ documentation.
The events assigned and executed by such controls are not
posted to inkey() processing, instead, are executed directly.
Just before executing an assigned event, focus is imposed
on GT console and returned to GUI control after processing
the execution. This ensures that GT is always in focus while
GUI control executes an assignment.
+ Introduced: In accordance with console coordinate system, the
positioning and size parameters supplied at the time of
construction of GUI objects now support
aPos == { nRow, nColumn } and aSize == { nRows, nColumns }
protocol. This has been achieved by supplying all four values
in negative. Thus WVG engine checks for negativity of position
and size values and determines that coordinate system be
interpreted as row/column instead of x/y(s). For example,
WvgPushButton( , , { -10, -2 }, { -3, -10 } )
call will render the push button at 10,2,13,12 console area
in terms of rows and columns. These coordinates will be
maintained with resizing of console, etc.
To extend this coordinate system a step further, the pos
and size arrays can be populated with code blocks evaluating
to a negative numeric value. This implimentation facilitates
to ancor any GUI control to a specific postion always. Thus,
WvgPushButton( , , { {|| -( maxrow()-3 ) }, -2 }, { -10, -3 } )
will always position push button on last row-3 of the console
no matter how many rows the console is resized to.
+ Introduced: oWVG:SetColorFG/BG() now accept clipper color string
and renders the corresponding RGB color of active GT palette.
This facilitates the embedding of GUI controls on Clipper
complaint screen colors. Thus,
oStatic:setColorBG( "GR*" )
will render the background of text label as yellow.
IMPORTANT: The above concepts are on the top of existing ones
so no current functionality is lost.
* contrib/gtwvg/tests/demowvg.prg
* contrib/gtwvg/tests/wvgtbrowser.prg
* contrib/gtwvg/tests/wvgutilities.prg
* contrib/gtwvg/tests/wvgxbp.prg
+ Restructured: the code parts to demonstrate newly introduced
GTWVG concepts. Specialy look at main window's menu system,
push buttons at the bottom. Also look at
<Main Menu><Traditional><Browser - GTWVG - Threaded>.
This example is reworked entirely and is a testimony to
GTWVG power.
NOTE: more changes and code shifting and simplifying is
on the drawing board. Hopefully code will get an
an overhaul in coming days.
2011-12-06 11:42 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbrdddbf.h
* modified DB_DBFLOCK_HB64 locking scheme

View File

@@ -257,7 +257,12 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
if( pWVT->hInstance )
UnregisterClass( s_szClassName, pWVT->hInstance );
}
HB_WVT_UNLOCK
if( pWVT->pNotifierGUI )
{
hb_itemRelease( pWVT->pNotifierGUI );
pWVT->pNotifierGUI = NULL;
}
if( pWVT->pszSelectCopy )
hb_xfree( pWVT->pszSelectCopy );
@@ -266,7 +271,7 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
if( pWVT->hFontBox && pWVT->hFontBox != pWVT->hFont )
DeleteObject( pWVT->hFontBox );
#endif
#if 0
#if 1
if( pWVT->hFont )
DeleteObject( pWVT->hFont );
#endif
@@ -304,39 +309,41 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
while( pWVT->gObjs )
{
gObj = pWVT->gObjs->gObjNext;
gObj = pWVT->gObjs->gObjNext;
if( pWVT->gObjs->lpText != NULL )
if( pWVT->gObjs->lpText != NULL )
#if defined( UNICODE )
HB_TCHAR_FREE( pWVT->gObjs->lpText );
HB_TCHAR_FREE( pWVT->gObjs->lpText );
#else
hb_xfree( pWVT->gObjs->lpText );
hb_xfree( pWVT->gObjs->lpText );
#endif
if( pWVT->gObjs->hFont )
if( pWVT->gObjs->bDestroyFont )
DeleteObject( pWVT->gObjs->hFont );
if( pWVT->gObjs->hPen )
if( pWVT->gObjs->bDestroyPen )
DeleteObject( pWVT->gObjs->hPen );
if( pWVT->gObjs->hBrush )
if( pWVT->gObjs->bDestroyBrush )
DeleteObject( pWVT->gObjs->hBrush );
if( pWVT->gObjs->bBlock )
hb_itemRelease( pWVT->gObjs->bBlock );
if( pWVT->gObjs->hFont )
if( pWVT->gObjs->bDestroyFont )
DeleteObject( pWVT->gObjs->hFont );
if( pWVT->gObjs->hPen )
if( pWVT->gObjs->bDestroyPen )
DeleteObject( pWVT->gObjs->hPen );
if( pWVT->gObjs->hBrush )
if( pWVT->gObjs->bDestroyBrush )
DeleteObject( pWVT->gObjs->hBrush );
if( pWVT->gObjs->bBlock )
hb_itemRelease( pWVT->gObjs->bBlock );
#if ! defined( HB_OS_WIN_CE )
if( pWVT->gObjs->iPicture )
if( pWVT->gObjs->bDestroyPicture )
HB_VTBL( pWVT->gObjs->iPicture )->Release( HB_THIS( pWVT->gObjs->iPicture ) );
if( pWVT->gObjs->iPicture )
if( pWVT->gObjs->bDestroyPicture )
HB_VTBL( pWVT->gObjs->iPicture )->Release( HB_THIS( pWVT->gObjs->iPicture ) );
#endif
hb_xfree( pWVT->gObjs );
pWVT->gObjs = gObj;
}
hb_xfree( pWVT->gObjs );
pWVT->gObjs = gObj;
}
}
if( pWVT->hWnd )
DestroyWindow( pWVT->hWnd );
hb_xfree( pWVT );
HB_WVT_UNLOCK
}
static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
@@ -458,6 +465,8 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, HINSTANCE hInstance, int iCmdShow )
pWVT->gObjs = NULL;
pWVT->hWndParent = NULL;
pWVT->pNotifierGUI = NULL;
return pWVT;
}
@@ -465,16 +474,22 @@ static int hb_gt_wvt_FireEvent( PHB_GTWVT pWVT, int nEvent, PHB_ITEM pParams )
{
int nResult = 0; /* Unhandled */
if( pWVT->pGT->pNotifierBlock )
if( pWVT->pGT->pNotifierBlock || pWVT->pNotifierGUI )
{
if( hb_vmRequestReenter() )
{
PHB_ITEM pEvent = hb_itemPutNI( NULL, nEvent );
nResult = hb_itemGetNI( hb_vmEvalBlockV( pWVT->pGT->pNotifierBlock, 2, pEvent, pParams ) );
if( pWVT->pGT->pNotifierBlock )
nResult = hb_itemGetNI( hb_vmEvalBlockV( pWVT->pGT->pNotifierBlock, 2, pEvent, pParams ) );
if( pWVT->pNotifierGUI )
{
//OutputDebugString( L"if( pWVT->pNotifierGUI )" );
nResult = hb_itemGetNI( hb_vmEvalBlockV( pWVT->pNotifierGUI, 2, pEvent, pParams ) );
}
hb_itemRelease( pEvent );
hb_vmRequestRestore();
}
}
@@ -668,7 +683,6 @@ static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey )
PHB_ITEM pEvParams = hb_itemNew( NULL );
hb_itemPutNI( pEvParams, iKey );
hb_gt_wvt_FireEvent( pWVT, HB_GTE_KEYBOARD, pEvParams );
/* hb_itemRelease( pEvParams ); */ /* Under situations it GPF's */
}
}
@@ -2117,18 +2131,19 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
}
return 0;
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_CHAR:
case WM_SYSCHAR:
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
case WM_CHAR:
return hb_gt_wvt_KeyEvent( pWVT, message, wParam, lParam );
case WM_LBUTTONUP:
SetFocus( hWnd );
case WM_RBUTTONDOWN:
case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONUP:
case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONDBLCLK:
@@ -2318,7 +2333,7 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
PHB_ITEM pEvParams = hb_itemNew( NULL );
hb_arrayNew( pEvParams, 2 );
HB_TRACE( HB_TR_ALWAYS, ( "lParam %d", ( int ) lParam ) );
hb_arraySetNI( pEvParams , 1, ( int ) wParam );
hb_arraySetNInt( pEvParams, 2, ( HB_PTRDIFF ) lParam );
@@ -3037,8 +3052,17 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
pWVT->CodePage );
if( hFont )
{
pInfo->pResult = hb_itemPutL( pInfo->pResult, HB_TRUE );
hb_strncpy( pWVT->fontFace, hb_arrayGetCPtr( pInfo->pNewVal, 1 ), sizeof( pWVT->fontFace ) - 1 );
pWVT->fontHeight = hb_arrayGetNI( pInfo->pNewVal, 2 );
pWVT->fontWidth = hb_arrayGetNI( pInfo->pNewVal, 3 );
pWVT->fontWeight = hb_arrayGetNI( pInfo->pNewVal, 4 );
pWVT->fontQuality = hb_arrayGetNI( pInfo->pNewVal, 5 );
if( hb_gt_wvt_ValidWindowSize( pWVT->hWnd, pWVT->ROWS, pWVT->COLS, hFont, hb_arrayGetNI( pInfo->pNewVal, 3 ) ) )
{
#if 0
pInfo->pResult = hb_itemPutL( pInfo->pResult, HB_TRUE );
hb_strncpy( pWVT->fontFace, hb_arrayGetCPtr( pInfo->pNewVal, 1 ), sizeof( pWVT->fontFace ) - 1 );
@@ -3046,6 +3070,7 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
pWVT->fontWidth = hb_arrayGetNI( pInfo->pNewVal, 3 );
pWVT->fontWeight = hb_arrayGetNI( pInfo->pNewVal, 4 );
pWVT->fontQuality = hb_arrayGetNI( pInfo->pNewVal, 5 );
#endif
if( pWVT->hWnd )
{
hb_gt_wvt_ResetWindowSize( pWVT );
@@ -3941,7 +3966,23 @@ static HB_BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
case HB_GTI_REFRESH:
{
if( pWVT->hWnd )
{
InvalidateRect( pWVT->hWnd, NULL, FALSE );
}
break;
}
case HB_GTI_NOTIFIERBLOCKGUI:
{
if( pWVT->pNotifierGUI )
{
hb_itemRelease( pWVT->pNotifierGUI );
pWVT->pNotifierGUI = NULL;
}
if( hb_itemType( pInfo->pNewVal ) & HB_IT_BLOCK )
{
pWVT->pNotifierGUI = hb_itemNew( pInfo->pNewVal );
}
break;
}
default:
return HB_GTSUPER_INFO( pGT, iType, pInfo );
@@ -4478,6 +4519,7 @@ static void hb_wvt_gtCreateObjects( PHB_GTWVT pWVT )
static void hb_wvt_gtExitGui( PHB_GTWVT pWVT )
{
int i;
#if ! defined( HB_OS_WIN_CE )
HMENU hMenu = GetMenu( pWVT->hWnd );
if( hMenu )
@@ -4567,6 +4609,8 @@ static void hb_wvt_gtSaveGuiState( PHB_GTWVT pWVT )
SetTextCharacterExtra( pWVT->hGuiDC,0 );
SelectObject( pWVT->hGuiDC, pWVT->hFont );
if( pWVT->hGuiBmp )
DeleteObject( pWVT->hGuiBmp );
}
static void hb_wvt_gtHandleMenuSelection( PHB_GTWVT pWVT, int menuIndex )

View File

@@ -115,7 +115,7 @@ HB_EXTERN_BEGIN
# define WVT_DEFAULT_ROWS 25
# define WVT_DEFAULT_COLS 80
# define WVT_DEFAULT_FONT_HEIGHT 16
# define WVT_DEFAULT_FONT_WIDTH 8
# define WVT_DEFAULT_FONT_WIDTH 10
#endif
#define WVT_DEFAULT_FONT_NAME "Courier New"
@@ -470,6 +470,8 @@ typedef struct
HWND hWndParent; /* Parent Window Handle, if any */
PHB_ITEM pNotifierGUI; /* Notifier to Wvg*Parts if embedded into a GT Window */
} HB_GTWVT, * PHB_GTWVT;
/*----------------------------------------------------------------------*/

View File

@@ -9,6 +9,8 @@
-w3 -es2
-DUNICODE
-stop{!win|hbdyn}
../hbwin/hbwin.hbc
@@ -55,3 +57,5 @@ wvgtabpg.prg
wvgtoolb.prg
wvgtreev.prg
wvgwnd.prg
wvggenrc.prg

View File

@@ -74,6 +74,7 @@
#define HB_GTE_GUIPARTS 14
#define HB_GTE_HSCROLL 15
#define HB_GTE_VSCROLL 16
#define HB_GTE_ANY 17
#define HB_GTI_SETFONT 71
#define HB_GTI_PRESPARAMS 72
@@ -84,6 +85,7 @@
#define HB_GTI_ACTIVATESELECTCOPY 77
#define HB_GTI_SETPOSANDSIZE 78
#define HB_GTI_REFRESH 79
#define HB_GTI_NOTIFIERBLOCKGUI 80
/* Presentation Parameters | HB_GTI_PRESPARAMS */
#define HB_GTI_PP_EXSTYLE 1

View File

@@ -60,10 +60,10 @@ MEMVAR cCdxExp, First, Last, City
//-------------------------------------------------------------------//
thread static t_wvtScreen := {}
THREAD STATIC t_wvtScreen := {}
#ifdef __XCC__
static s_paint_:= { { "", {} } }
STATIC s_paint_:= { { "", {} } }
#endif
/*----------------------------------------------------------------------*/
@@ -75,18 +75,18 @@ EXIT PROCEDURE CleanHandles()
WVG_DeleteObject( obj )
obj := NIL
NEXT
FOR EACH obj IN SetIcons()
WVG_DeleteObject( obj )
obj := NIL
NEXT
RETURN
//-------------------------------------------------------------------//
PROCEDURE Main()
LOCAL aLastPaint, clr, scr, pGT
LOCAL hPopup, oMenu
LOCAL hPopup
LOCAL dDate := ctod( "" )
LOCAL cName := Pad( "Pritpal Bedi", 35 )
LOCAL cAdd1 := Pad( "60, New Professor Colony", 35 )
@@ -100,11 +100,11 @@ PROCEDURE Main()
LOCAL nLft := 4
LOCAL nBtm := 20
LOCAL nRgt := 75
LOCAL nMaxRows := MaxRow()
LOCAL nBtnRow := nMaxRows - 1
LOCAL cLabel := "Harbour simulated GUI."
LOCAL aObjects := WvtSetObjects( {} )
LOCAL oError := ErrorBlock( {|o| MyError( o ) } )
SET DATE BRITISH
SET( _SET_EVENTMASK, INKEY_ALL + HB_INKEY_GTEVENT )
@@ -118,17 +118,19 @@ PROCEDURE Main()
CLS
Wvt_ShowWindow( SW_RESTORE )
/* Xbase++ compatible menu protocol */
BuildMainMenu()
SetMode( maxrow()+1, maxcol()+1 ) /* Needed to accomodate attached menu */
SetKey( K_F12 , {|| hb_gtInfo( HB_GTI_ACTIVATESELECTCOPY ) } )
SetKey( K_CTRL_V , {|| __KeyBoard( hb_gtInfo( HB_GTI_CLIPBOARDDATA ) ) } )
SetKey( K_RBUTTONDOWN, {|| __KeyBoard( hb_gtInfo( HB_GTI_CLIPBOARDDATA ) ) } )
hPopup := Wvt_SetPopupMenu()
oMenu := CreateMainMenu()
pGT := SetGT( 1, hb_gtSelect() )
// Force mouse pointer right below the Harbour label
//
/* Force mouse pointer right below the Harbour label */
Wvt_SetMousePos( 2,40 )
aAdd( aBlocks, {|| Wvt_SetIcon( GetResource( "vr_1.ico" ) ) } )
@@ -141,86 +143,21 @@ PROCEDURE Main()
aAdd( aBlocks, {|| Wvt_DrawImage( 8,62,12,69, IMAGE_VOUCH ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( 7, 48, 13, 55 ) } )
aAdd( aBlocks, {|| Wvt_DrawLine( maxrow()-2,0,maxrow()-2,maxcol(),WVT_LINE_HORZ,WVT_LINE_RECESSED,WVT_LINE_BOTTOM ) } )
aAdd( aBlocks, {|| Wvt_DrawLine( maxrow()-1, 4,maxrow(), 4,WVT_LINE_VERT,WVT_LINE_RECESSED,WVT_LINE_CENTER ) } )
aAdd( aBlocks, {|| Wvt_DrawLine( maxrow()-1,41,maxrow(),41,WVT_LINE_VERT,WVT_LINE_RECESSED,WVT_LINE_CENTER ) } )
aAdd( aBlocks, {|| aEval( GetList, {|oGet| Wvt_DrawBoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) } )
#define btnFDisp WVT_BTN_FORMAT_FLAT
#define btnFMOver WVT_BTN_FORMAT_RAISED
#define btnFBDown WVT_BTN_FORMAT_RECESSED
#define btnFBUp WVT_BTN_FORMAT_FLAT
WvtSetObjects( { OBJ_TYPE_BUTTON, 1, nBtnRow, 6, nBtnRow+1, 9, ;
{|| Wvt_DrawButton( nBtnRow, 6,nBtnRow+1, 9, ,IMAGE_VOUCH, btnFDisp ) },;
{|| Wvt_DrawButton( nBtnRow, 6,nBtnRow+1, 9, ,IMAGE_VOUCH, btnFMOver ) },;
{|| Wvt_DrawButton( nBtnRow, 6,nBtnRow+1, 9, ,IMAGE_VOUCH, btnFBDown ) },;
{|| Wvt_DrawButton( nBtnRow, 6,nBtnRow+1, 9, ,IMAGE_VOUCH, btnFBUp ) ,;
eval( SetKey( K_F2 ) ) } ;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 2, nBtnRow,11, nBtnRow+1,14, ;
{|| Wvt_DrawButton( nBtnRow,11,nBtnRow+1,14, ,IMAGE_BROWSE, btnFDisp ) },;
{|| Wvt_DrawButton( nBtnRow,11,nBtnRow+1,14, ,IMAGE_BROWSE, btnFMOver ) },;
{|| Wvt_DrawButton( nBtnRow,11,nBtnRow+1,14, ,IMAGE_BROWSE, btnFBDown ) },;
{|| Wvt_DrawButton( nBtnRow,11,nBtnRow+1,14, ,IMAGE_BROWSE, btnFBUp ) ,;
eval( SetKey( K_F5 ) ) } ;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 3, nBtnRow,16, nBtnRow+1,19, ;
{|| Wvt_DrawButton( nBtnRow,16,nBtnRow+1,19,"Expand",IMAGE_NOTES,btnFDisp ) },;
{|| Wvt_DrawButton( nBtnRow,16,nBtnRow+1,19,"Expand",IMAGE_NOTES,btnFMOver ) },;
{|| Wvt_DrawButton( nBtnRow,16,nBtnRow+1,19,"Expand",IMAGE_NOTES,btnFBDown ) },;
{|| Wvt_DrawButton( nBtnRow,16,nBtnRow+1,19,"Expand",IMAGE_NOTES,btnFBUp ) ,;
eval( SetKey( K_F3 ) ) } ;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 4, nBtnRow,21, nBtnRow+1,24, ;
{|| Wvt_DrawButton( nBtnRow,21,nBtnRow+1,24,"Shrink", , btnFDisp , rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,21,nBtnRow+1,24,"Shrink", , btnFMOver, rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,21,nBtnRow+1,24,"Shrink", , btnFBDown, rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,21,nBtnRow+1,24,"Shrink", , btnFBUp , rgb( 100,22,241 ), rgb( 0,100,0 ) ) ,;
eval( SetKey( K_F4 ) ) } ;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 5, nBtnRow,26, nBtnRow+1,29, ;
{|| Wvt_DrawButton( nBtnRow,26,nBtnRow+1,29,"Minimize",IMAGE_TOOLS, btnFDisp ) },;
{|| Wvt_DrawButton( nBtnRow,26,nBtnRow+1,29,"Minimize",IMAGE_TOOLS, btnFMOver ) },;
{|| Wvt_DrawButton( nBtnRow,26,nBtnRow+1,29,"Minimize",IMAGE_TOOLS, btnFBDown ) },;
{|| Wvt_DrawButton( nBtnRow,26,nBtnRow+1,29,"Minimize",IMAGE_TOOLS, btnFBUp ) ,;
eval( SetKey( K_F6 ) ) },;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 6, nBtnRow,31, nBtnRow+1,34, ;
{|| Wvt_DrawButton( nBtnRow,31,nBtnRow+1,34,"Partial",IMAGE_HELP, btnFDisp ) },;
{|| Wvt_DrawButton( nBtnRow,31,nBtnRow+1,34,"Partial",IMAGE_HELP, btnFMOver ) },;
{|| Wvt_DrawButton( nBtnRow,31,nBtnRow+1,34,"Partial",IMAGE_HELP, btnFBDown ) },;
{|| Wvt_DrawButton( nBtnRow,31,nBtnRow+1,34,"Partial",IMAGE_HELP, btnFBUp ) ,;
eval( SetKey( K_F7 ) ) },;
} )
WvtSetObjects( { OBJ_TYPE_BUTTON, 7, nBtnRow,36,nBtnRow+1,39, ;
{|| Wvt_DrawButton( nBtnRow,36,nBtnRow+1,39,"Lines",IMAGE_VR, btnFDisp , rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,36,nBtnRow+1,39,"Lines",IMAGE_VR, btnFMOver, rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,36,nBtnRow+1,39,"Lines",IMAGE_VR, btnFBDown, rgb( 100,22,241 ), rgb( 0,100,0 ) ) },;
{|| Wvt_DrawButton( nBtnRow,36,nBtnRow+1,39,"Lines",IMAGE_VR, btnFBUp , rgb( 100,22,241 ), rgb( 0,100,0 ) ) ,;
eval( SetKey( K_F8 ) ) } ;
} )
aAdd( aBlocks, {|| Wvt_Mouse( -1000001 ) } )
aLastPaint := WvtSetBlocks( aBlocks )
/* XBase++ compatible pure GUI controls onto CUI console */
BuildButtons()
scr := SaveScreen( 0,0,maxrow(),maxcol() )
clr := SetColor( "N/W" )
CLS
SetColor( "N/W,N/GR*,,,N/W*" )
Wvt_SetMenu( oMenu:hMenu )
SetKey( Wvt_SetMenuKeyEvent(), { || ActivateMenu( oMenu ) } )
@ 6, nColGet SAY "< Date >"
@ 9, nColGet SAY "<" + PadC( "Name", 33 ) + ">"
@ 12, nColGet SAY "<" + PadC( "Address", 33 ) + ">"
@@ -228,15 +165,18 @@ PROCEDURE Main()
dDate := ctod( "04/01/04" )
@ 7, nColGet GET dDate WHEN DispStatusMsg( "Date must be Valid" );
VALID ClearStatusMsg()
@ 10, nColGet GET cName WHEN DispStatusMsg( "Must be one of the list!" );
VALID ( VouChoice() < 7 .and. ClearStatusMsg() )
@ 7, nColGet GET dDate WHEN DispStatusMsg( "Date must be valid" ) VALID ClearStatusMsg()
@ 10, nColGet GET cName WHEN DispStatusMsg( "Must be one of the list!" ) VALID ( VouChoice() < 7 .and. ClearStatusMsg() )
@ 13, nColGet GET cAdd1
@ 15, nColGet GET cAdd2
@ 17, nColGet GET cAdd3
@ 17, 61 GET nSlry PICTURE "@Z 9999999.99"
#if 0 /* Suitable when whole window is subject to this protocol */
aEval( GetList, {|oGet| Wvg_BoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } )
SetAppWindow():refresh()
#endif
READ
// Restore Environment
@@ -251,14 +191,17 @@ PROCEDURE Main()
Popups( 1, .t. )
SetGT( 1, pGT )
ErrorBlock( oError )
RETURN
//-------------------------------------------------------------------//
Function HB_GTSYS()
REQUEST HB_GT_WVG_DEFAULT
REQUEST HB_GT_WVT
REQUEST HB_GT_WGU
Return NIL
RETURN NIL
//------------------------------------------------------------------//
@@ -269,9 +212,8 @@ PROCEDURE WvtConsoleGets( nMode )
IF hb_mtvm()
Hb_ThreadStart( {|oCrt| hb_gtReload( 'WVT' ) , ;
oCrt := hb_gtSelect(), ;
IF( nMode == 0, WvtNextGetsConsole(), GoogleMap() ) , ;
oCrt := NIL ;
} )
iif( nMode == 0, WvtNextGetsConsole(), GoogleMap() ) , ;
oCrt := NIL } )
ENDIF
RETURN
@@ -310,13 +252,14 @@ PROCEDURE WvtNextGetsConsole()
READ
RETURN
//-------------------------------------------------------------------//
PROCEDURE WvtNextGets()
IF hb_mtvm()
Hb_ThreadStart( {|| Hb_gtReload( 'WVG' ), Wvt_setFont( 'Terminal',20 ), ;
hb_clear(), Wvt_ShowWindow( SW_RESTORE ), WvtNextGets_X() } )
ELSE
WvtNextGets_X()
ENDIF
@@ -344,7 +287,7 @@ PROCEDURE WvtNextGets_X()
LOCAL scr := SaveScreen( 0,0,maxrow(),maxcol() )
LOCAL wvtScr := Wvt_SaveScreen( 0,0,maxrow(),maxcol() )
Static nPalletMultiplier := 0
STATIC nPalletMultiplier := 0
// Change the values of pallatte arbitrarily though yu can fine tune
// these values with realistic values.
@@ -422,8 +365,8 @@ FUNCTION WvtPartialScreen()
wvtScr1 := Wvt_SaveScreen( 7,20,15,60 )
do while inkey( 0 ) != K_ESC
enddo
DO WHILE inkey( 0 ) != K_ESC
ENDDO
DispBox( 7, 20, 15, 60, " ", "W/B*" )
@ 10,25 SAY "Wvt_SaveScreen()" COLOR "N/B*"
@@ -431,13 +374,13 @@ FUNCTION WvtPartialScreen()
@ 13,25 SAY "Press Esc " COLOR "N/B*"
Wvt_DrawBoxRecessed( 8,22,14,58 )
do while inkey( 0 ) != K_ESC
enddo
DO WHILE inkey( 0 ) != K_ESC
ENDDO
Wvt_RestScreen( 7,20,15,60, wvtScr1 )
do while inkey( 0 ) != K_ESC
enddo
DO WHILE inkey( 0 ) != K_ESC
ENDDO
RestScreen( 7,20,15,60,scr )
Wvt_RestScreen( 0, 0, MaxRow(), MaxCol(), wvtScr )
@@ -492,8 +435,8 @@ function WvtLines()
@ 15,8 Say "D"
@ 16,9 Say "E"
do while ( inkey(0) != K_ESC )
enddo
DO WHILE ( inkey(0) != K_ESC )
ENDDO
// Restore Environments
//
@@ -509,11 +452,11 @@ function WvtLines()
//-------------------------------------------------------------------//
FUNCTION CreateMainMenu()
FUNCTION BuildMainMenu()
LOCAL oMenu
LOCAL g_oMenuBar := wvtMenu():new():create()
LOCAL g_oMenuBar := SetAppWindow():menuBar()
oMenu := WvtMenu():new():create()
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption:= "Wvt*Classes"
oMenu:AddItem( "Dialog One . New Window . Threaded" , {|| DialogWvgClassesOne( 1 ) } )
oMenu:AddItem( "Dialog One . Main Window . Primary Thread", {|| DialogWvgClassesOne( 2 ) } )
@@ -521,10 +464,10 @@ FUNCTION CreateMainMenu()
oMenu:AddItem( "Dialog Two" , {|| DialogWvgClassesTwo() } )
oMenu:AddItem( "-" )
oMenu:AddItem( "Exit" , {|| __keyboard( K_ESC ) } )
g_oMenuBar:addItem( "",oMenu )
g_oMenuBar:addItem( { oMenu, "Wvt*Classes" } )
oMenu := wvtMenu():new():create()
oMenu:Caption := "Traditional"
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:caption := "Traditional"
oMenu:AddItem( "Gets . GTWVG . Threaded" , {|| WvtNextGets() } )
oMenu:AddItem( "-")
oMenu:AddItem( "Gets . GTWVT . Threaded" , {|| WvtConsoleGets( 0 ) } )
@@ -540,34 +483,34 @@ FUNCTION CreateMainMenu()
oMenu:AddItem( "Wvg Console with GCUI" , {|| ExecGCUI() } )
oMenu:AddItem( "-")
oMenu:AddItem( "Modal Window" , {|| DoModalWindow() } )
g_oMenuBar:addItem( "",oMenu )
g_oMenuBar:addItem( { oMenu, "Traditional" } )
oMenu := wvtMenu():new():create()
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption:= "Common Dialogs"
oMenu:AddItem( "Fonts" , {|| Wvt_ChooseFont() } )
oMenu:AddItem( "-")
oMenu:AddItem( "Colors" , {|| Wvt_ChooseColor() } )
g_oMenuBar:addItem( "",oMenu)
g_oMenuBar:addItem( { oMenu, "Common Dialogs" } )
oMenu := wvtMenu():new():create()
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption:= "Functionality"
oMenu:AddItem( "Expand" , {|| WvtWindowExpand( 1 ) } )
oMenu:AddItem( "Shrink" , {|| WvtWindowExpand( -1 ) } )
oMenu:AddItem( "-")
oMenu:AddItem( "Minimize" , {|| Wvt_Minimize() } )
oMenu:AddItem( "Maximize" , {|| hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED ) } )
g_oMenuBar:addItem( "",oMenu)
g_oMenuBar:addItem( { oMenu, "Functionality" } )
oMenu := wvtMenu():new():create()
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption:= "Modeless Dialogs"
oMenu:AddItem( "Dynamic Dialog . Modeless" , {|| DynWinDialog( 1 ) } )
oMenu:AddItem( "Dynamic Dialog . Modal " , {|| DynWinDialog( 2 ) } )
oMenu:AddItem( "-")
oMenu:AddItem( "Slide Show . Modeless" , {|| DlgSlideShow() } )
g_oMenuBar:addItem( "",oMenu)
g_oMenuBar:addItem( { oMenu, "Modeless Dialogs" } )
oMenu := wvtMenu():new():create()
oMenu:Caption:= "~XbpDialog()s"
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption := "~XbpDialog()s"
oMenu:AddItem( "Pure Xbase++" , {|| Hb_ThreadStart( {|| demoXbp() } ) } )
oMenu:AddItem( "-")
oMenu:AddItem( "ActiveX - Internet Explorer" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 1 ) } ) } )
@@ -581,40 +524,21 @@ FUNCTION CreateMainMenu()
oMenu:AddItem( "ActiveX - Analog Clock" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 2 ) } ) } )
oMenu:AddItem( "-")
oMenu:AddItem( "ActiveX - Image Viewer" , {|| Hb_ThreadStart( {|| ExecuteActiveX( 5 ) } ) } )
g_oMenuBar:addItem( "",oMenu)
g_oMenuBar:addItem( { oMenu, "~XbpDialog()s" } )
#ifdef __QT__
oMenu := wvtMenu():new():create()
oMenu := WvgMenu():new( g_oMenuBar, , .t. ):create()
oMenu:Caption:= "~QT"
oMenu:AddItem( "All Widgets" , {|| Hb_ThreadStart( {|| ExeQTWidgets() } ) } )
#endif
RETURN g_oMenuBar
//-------------------------------------------------------------------//
STATIC FUNCTION ActivateMenu( oMenu )
LOCAL nMenu := Wvt_GetLastMenuEvent()
LOCAL aMenuItem
IF !EMPTY( nMenu )
IF HB_ISOBJECT( oMenu )
IF !EMPTY( aMenuItem := oMenu:FindMenuItemById( nMenu ) )
IF HB_ISBLOCK( aMenuItem[ WVT_MENU_ACTION ] )
EVAL( aMenuItem[ WVT_MENU_ACTION ] )
ENDIF
ENDIF
ENDIF
ENDIF
RETURN NIL
//-------------------------------------------------------------------//
STATIC FUNCTION GoogleMap()
Local mfrom1, mto1, mfrom2, mto2, mfrom3, mto3, mweb
Local nCursor := setcursor()
LOCAL mfrom1, mto1, mfrom2, mto2, mfrom3, mto3, mweb
LOCAL nCursor := setcursor()
LOCAL getlist := {}
SetMode( 22,65 )
@@ -626,8 +550,7 @@ STATIC FUNCTION GoogleMap()
mfrom2 := mto2 := space(40)
mfrom3 := mto3 := space(50)
while .T.
WHILE .T.
@ 05, 01 say "FROM :"
@ 07, 01 say "State ...:" get mfrom1 picture "@!"
@ 08, 01 say "City ....:" get mfrom2 picture "@!"
@@ -639,9 +562,9 @@ STATIC FUNCTION GoogleMap()
setcursor(1); read; setcursor(nCursor)
if lastkey() == K_ESC
exit
endif
IF lastkey() == K_ESC
EXIT
ENDIF
mweb := "http://maps.google.com/maps?q=from " +;
alltrim( mfrom3 ) +" "+ alltrim( mfrom2 ) +" "+ alltrim( mfrom1 ) + " to " +;
@@ -653,3 +576,53 @@ STATIC FUNCTION GoogleMap()
RETURN NIL
//----------------------------------------------------------------------//
FUNCTION BuildButtons()
LOCAL oXbp
oXbp := WvgPushButton():new()
oXbp:caption := "Hi"
oXbp:create( , , { {|| -( maxrow()-1 ) }, -1 }, { -2, -4 } )
oXbp:activate := {|| Wvg_MessageBox( , "Harbour!" ) }
oXbp:toolTipText := "Harbour CUI/GUI Console"
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_VOUCH
oXbp:create( , , { {|| -( maxrow()-1 ) }, -6 }, { -2, -4 } )
oXbp:activate := {|| Wvt_Keyboard( K_F2 ) }
oXbp:toolTipText := "Open Another GET Screen"
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_BROWSE
oXbp:create( , , { {|| -( maxrow()-1 ) }, -11 }, { -2, -4 } )
oXbp:activate := {|| Wvt_Keyboard( K_F5 ) }
oXbp:toolTipText := "TBrowse + GUI Controls"
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_NOTES
oXbp:create( , , { {|| -( maxrow()-1 ) }, -16 }, { -2, -4 } )
oXbp:activate := {|| Wvt_Keyboard( K_F3 ) }
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_TOOLS
oXbp:create( , , { {|| -( maxrow()-1 ) }, -21 }, { -2, -4 } )
oXbp:activate := {|| Wvt_Keyboard( K_F6 ) }
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_HELP
oXbp:create( , , { {|| -( maxrow()-1 ) }, -26 }, { -2, -4 } )
oXbp:activate := {|| Wvt_Keyboard( K_F7 ) }
oXbp := WvgPushButton():new()
oXbp:caption := IMAGE_VR
oXbp:border := .f.
oXbp:create( , , { {|| -( maxrow()-1 ) }, -31 }, { -2, -4 } )
oXbp:activate := {|| Hb_ThreadStart( {|| demoXbp() } ) } // {|| Wvt_Keyboard( K_F8 ) }
oXbp:toolTipText := "Flat Button . Lines: press ESC when finished."
RETURN NIL
/*----------------------------------------------------------------------*/

View File

@@ -42,7 +42,7 @@
FUNCTION WvtMyBrowse()
IF hb_mtvm()
Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():New( , , { -1,-2 }, { 34,69 }, , .T. ), ;
Hb_ThreadStart( {|oCrt| oCrt := WvgCrt():new( , , { -1,-2 }, { 34,69 }, , .T. ), ;
oCrt:resizeMode := HB_GTI_RESIZEMODE_ROWS,;
oCrt:icon := GetResource( "dia_excl.ico" ),;
oCrt:create(),;
@@ -55,13 +55,13 @@ FUNCTION WvtMyBrowse()
ExecBrowser()
ENDIF
Return NIL
RETURN NIL
//----------------------------------------------------------------------//
FUNCTION ExecBrowser( oCrt )
LOCAL nKey, bBlock, oBrowse , aLastPaint, i, pGT, oVBar, oHBar
LOCAL cFileIndex, cFileDbf, cRDD, nIndex, oTBar, cScr, info_
LOCAL cFileIndex, cFileDbf, cRDD, nIndex, oTBar, cScr, info_ //, oLB
LOCAL lEnd := .f.
LOCAL aBlocks := {}
LOCAL nTop := 4
@@ -79,11 +79,12 @@ FUNCTION ExecBrowser( oCrt )
THREAD STATIC nFactor := 200
IF oCrt == NIL
cScr := SaveScreen( 0,0,maxrow(),maxcol() )
cScr := SaveScreen( 0,0,maxrow(),maxcol() )
ENDIF
BrwBuildMenu( oCrt )
oTBar := BuildWvgToolBar( oCrt )
oTBar := BrwBuildToolBar( oCrt )
SetMode( maxrow()+1, maxCol()+1 ) /* Neccessary because adding menu has reduced the overall size of window */
pGT := SetGT( 2, hb_gtSelect() )
@@ -92,15 +93,15 @@ FUNCTION ExecBrowser( oCrt )
cFileIndex := "test.z01"
USE ( cFileDbf ) NEW SHARED VIA ( cRDD )
if NetErr()
return nil
endif
if fLock()
IF NetErr()
RETURN NIL
ENDIF
IF fLock()
INDEX ON Test->FIRST TAG "001" TO ( cFileIndex )
INDEX ON Test->LAST TAG "002" TO ( cFileIndex )
INDEX ON Test->CITY TAG "003" TO ( cFileIndex )
dbUnlock()
endif
ENDIF
SET INDEX TO
SET INDEX TO ( cFileIndex )
SET ORDER TO 1
@@ -110,7 +111,7 @@ FUNCTION ExecBrowser( oCrt )
Popups( 2 )
oBrowse := TBrowseWVG():New( nTop + 3, nLeft + 2, nBottom - 1, nRight - 2 )
oBrowse := TBrowseWVG():New( nTop + 3, nLeft + 12, nBottom - 1, nRight - 2 )
oBrowse:ColSep := " "
oBrowse:HeadSep := "__"
@@ -122,94 +123,94 @@ FUNCTION ExecBrowser( oCrt )
bBlock := VouBlockField( i )
oBrowse:AddColumn( TBColumnNew( info_[ i,1 ], bBlock ) )
next
oBrowse:configure()
if nStyle > 5
nStyle := 0
endif
Wvt_SetPen( nStyle, 0, rgb( 210,1210,210 ) )
nStyle++
//hb_gtInfo( HB_GTI_ICONFILE, "dia_excl.ico" )
hb_gtInfo( HB_GTI_WINTITLE, "WVT Gui TBrowse()" )
aAdd( aBlocks, {|| Wvt_DrawBoxRaised( oBrowse:nTop-3, oBrowse:nLeft-2, oBrowse:nBottom+1, oBrowse:nRight+2 ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRaised( oBrowse:nTop-2, oBrowse:nLeft-2, oBrowse:nBottom+1, oBrowse:nRight+2 ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( oBrowse:nTop, oBrowse:nLeft, oBrowse:nBottom, oBrowse:nRight ) } )
aAdd( aBlocks, {|| Wvt_DrawGridHorz( oBrowse:nTop+3, oBrowse:nLeft, oBrowse:nRight, oBrowse:nBottom - oBrowse:nTop - 2 ) } )
aAdd( aBlocks, {|| Wvt_DrawGridVert( oBrowse:nTop, oBrowse:nBottom, oBrowse:aColumnsSep, len( oBrowse:aColumnsSep ) ) } )
Vou_BrwAddScrollBars( oCrt, oBrowse, @oVBar, @oHBar )
aLastPaint := WvtSetBlocks( aBlocks )
BrwBuildCheckBox( oCrt, oBrowse )
BrwBuildSLE( oCrt, oBrowse )
BrwBuildListBox( oCrt, oBrowse )
BrwBuildMLE( oCrt, oBrowse )
BrwBuildButtons( oCrt, oBrowse )
BrwBuildTree( oCrt, oBrowse )
DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight-oBrowse:nLeft+1 ), "W+/W" )
DispOutAt( maxrow(), 0, padc( '<F3 Modal Window> <F4 Maximize> <F11 Transp++> <F12 Transp--> <Thread'+str(Hb_ThreadID(),3)+'>',maxcol()+1), 'B/W' )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft-2, padc( cFileDbf, oBrowse:nRight-oBrowse:nLeft+5 ), "W+/B*" )
oTBar:buttonClick := {|oBtn| Vou_ExecTBarAction( oBtn ) }
WHILE ! lEnd
dispbegin()
DO WHILE ( ( nKey := inkey( , INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0 .or. nKey == K_MOVING ) .and. ! oBrowse:stabilize()
ENDDO
ENDDO
dispend()
IF nKey == 0
oVBar:setData( OrdKeyNo() )
oHBar:setData( oBrowse:colPos )
DO WHILE ( ( nKey := inkey( , INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0 .or. nKey == K_MOVING )
ENDDO
ENDIF
ENDDO
ENDIF
do CASE
case nKey == K_F12
DO CASE
CASE nKey == K_F12
nFactor--
hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor )
case nKey == K_F11
CASE nKey == K_F11
nFactor++
hb_gtInfo( HB_GTI_SPEC, HB_GTS_FACTOR, nFactor )
case nKey == K_F6
CASE nKey == K_F6
hb_gtInfo( HB_GTI_RESIZABLE, .f. )
case nKey == K_F7
CASE nKey == K_F7
hb_gtInfo( HB_GTI_RESIZABLE, .t. )
case nKey == K_F2
CASE nKey == K_F2
nIndex := IndexOrd()
nIndex++
if nIndex > 3
IF nIndex > 3
nIndex := 1
endif
Set Order To ( nIndex )
ENDIF
SET ORDER TO ( nIndex )
oBrowse:RefreshAll()
oBrowse:ForceStable()
case nKey == K_F3
CASE nKey == K_F3
DoModalWindow()
case nKey == K_F4
CASE nKey == K_F4
hb_gtInfo( HB_GTI_SPEC, HB_GTS_WNDSTATE, HB_GTS_WS_MAXIMIZED )
case BrwHandleKey( oBrowse, nKey, @lEnd )
CASE BrwHandleKey( oBrowse, nKey, @lEnd )
case nKey == HB_K_RESIZE
CASE nKey == HB_K_RESIZE
oBrowse:nBottom := maxrow() - 3
oBrowse:nRight := maxcol() - 5
Vou_BrwResetScrollBars( oBrowse, oVBar, oHBar )
BrwReposButtons( oCrt ) /* Because we are repositioning at the center of console width */
DispBox( 0, 0, maxrow(), maxcol(), " ", "N/W" )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 1 ), "W+/W" )
DispOutAt( maxrow(), 0, padc( '<F3 Modal Window> <F4 Maximize> <F11 Transp++> <F12 Transp--> <Thread'+str(Hb_ThreadID(),3)+'>',maxcol()+1), 'B/W' )
DispOutAt( oBrowse:nTop-2, oBrowse:nleft-2, padc( cFileDbf, oBrowse:nRight - oBrowse:nLeft + 5 ), "W+/B*" )
oBrowse:configure()
endcase
end
ENDCASE
END
Wvt_SetPen( 0 )
WvtSetBlocks( aLastPaint )
@@ -230,12 +231,200 @@ FUNCTION ExecBrowser( oCrt )
//-------------------------------------------------------------------//
STATIC FUNCTION BrwShowColumn( oBrw, cHeading )
LOCAL i, j, nCur
nCur := oBrw:colPos
FOR i := 1 TO oBrw:colCount
IF oBrw:getColumn( i ):heading == cHeading
EXIT
ENDIF
NEXT
IF i < nCur
FOR j := nCur-1 TO i STEP -1
oBrw:left()
oBrw:refreshCurrent()
oBrw:forceStable()
NEXT
ELSEIF i > nCur
FOR j := nCur+1 TO i
oBrw:right()
oBrw:refreshCurrent()
oBrw:forceStable()
NEXT
ENDIF
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildTree( oCrt /*, oBrw*/ )
LOCAL oTree, oItem1, oItem2
oTree := WvgTreeView():new( oCrt )
oTree:hasLines := .T.
oTree:hasButtons := .T.
oTree:alwaysShowSelection := .T.
oTree:create( , , { -25, -1 }, { -8, -10 } )
oTree:setColorFG( "W+" )
oTree:setColorBG( "R*" )
oTree:itemSelected := {|oItem| WVG_MessageBox( , iif( oItem <> NIL, oItem:caption, "Some Problem" ) ) }
oItem1 := oTree:rootItem:addItem( "First level A" )
oTree:rootItem:addItem( "First level B" )
oItem2 := oItem1:addItem( "Second level 1" )
oItem1:addItem( "Second level 2" )
oItem2:addItem( "Third level x" )
oItem2:addItem( "Third level y" )
oItem2:addItem( "Third level z" )
oTree:showExpanded( .t., 2 )
oTree:setData( oItem2 )
oTree:tooltipText := "Treeview embedded onto CUI window"
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildMLE( oCrt /*, oBrw*/ )
LOCAL oXbp
oXbp := WvgMLE():new( oCrt )
oXbp:create( , , { -16,-1 }, { -8, -10 }, , .t. )
oXbp:setColorFG( "B" )
oXbp:setData( "Harbour's implementation of GUI controls onto CUI console." )
oXbp:tooltipText := "Multi-line Edit Control"
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildSLE( oCrt, oBrw )
LOCAL oXbp
oXbp := WvgStatic():new( oCrt )
oXbp:type := WVGSTATIC_TYPE_TEXT
oXbp:options := WVGSTATIC_TEXT_LEFT
oXbp:caption := "Field Name:"
oXbp:create( , , { -3, -13 }, { -1, -7 } )
oXbp:setColorFG( "W+" )
oXbp:setColorBG( "BG" )
oXbp := WvgSLE():new( oCrt )
oXbp:create( , , { -3, -21 }, { -1, -20 } )
oXbp:setColorFG( "N" )
oXbp:setColorBG( "BG+" )
oXbp:returnPressed := {|m1,m2,o| m1:=m1, m2:=m2, BrwShowColumn( oBrw, upper( trim( o:getData() ) ) ) }
oXbp:tooltipText := "Typein a FieldName to focus it!"
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildListBox( oCrt, oBrw )
LOCAL oXbp, i
oXbp := WvgListBox():new( oCrt )
oXbp:create( , , { -5,-1 }, { -10, -10 }, , .t. )
oXbp:setColorFG( "W+" )
oXbp:setColorBG( "B*" )
oXbp:itemMarked := {|m1,m2,o| m1 := m1, m2 := m2, BrwShowColumn( oBrw, o:getCurItem() ) }
FOR i := 1 TO oBrw:colCount
oXbp:addItem( oBrw:getColumn( i ):heading )
NEXT
oXbp:setData( 3 )
oXbp:tooltipText := "Click on a FieldName to make it active!"
RETURN oXbp
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildCheckBox( oCrt, oBrw )
LOCAL oXbp
oXbp := WvgCheckBox():new( oCrt )
oXbp:caption := "Navigate"
oXbp:selected := {|x,y,o| x := x, y := y, iif( o:getData(), oBrw:goTop():forceStable(), oBrw:goBottom():forceStable() ) }
oXbp:selection := .t.
oXbp:create( , , { -3,-1 }, { -1,-7 } )
oXbp:setColorFG( "R+" )
oXbp:setColorBG( "W" )
oXbp:tooltipText := "Checked: GoBottom, Unchecked: GoTop"
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwReposButtons( oCrt )
LOCAL oXbp, nOff, nTtl, nG, i
LOCAL aW := { 10, 10, 10, 10, 10 }
nG := 2
nTtl := 0
aeval( aW, {|e| nTtl += e } )
nTtl += ( len( aW ) - 1 ) * nG
nOff := ( ( maxcol()+1 ) - nTtl ) / 2
i := 0
FOR EACH oXbp IN oCrt:childList()
IF __ObjGetClsName( oXbp ) == "WVGPUSHBUTTON"
i++
oXbp:setPosAndSize( { -maxrow(), -nOff }, { -1, -aW[ i ] } )
nOff += aW[ i ] + nG
ENDIF
NEXT
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwBuildButtons( oCrt, oBrw )
LOCAL oPB, nOff, nTtl, nG, i
LOCAL aPmt := { "Modal Window", "Maximize", "Go Top", "Go Bottom", "Right Most" }
LOCAL aAct := { {|| Wvt_Keyboard( K_F3 ) }, ;
{|| Wvt_Keyboard( K_F4 ) }, ;
{|| oBrw:goTop(), oBrw:forceStable() }, ;
{|| oBrw:goBottom(), oBrw:forceStable() }, ;
{|| oBrw:panEnd(), oBrw:forceStable() } }
LOCAL aW := { 10, 10, 10, 10, 10 }
nG := 2
nTtl := 0
aeval( aW, {|e| nTtl += e } )
nTtl += ( len( aW ) - 1 ) * nG
nOff := ( ( maxcol()+1 ) - nTtl ) / 2
FOR i := 1 TO len( aPmt )
oPB := WvgPushButton():new( oCrt )
IF i == len( aPmt )
oPB:caption := hb_dirBase() + "\" + "v_lock.bmp"
oPB:create( , , { {|| -maxrow() }, -nOff }, { -1,-aW[ i ] } )
ELSE
oPB:caption := aPmt[ i ]
oPB:create( , , { {|| -maxrow() }, -nOff }, { -1,-aW[ i ] } )
ENDIF
oPB:activate := aAct[ i ]
oPB:setColorFG( RGB( 0,255,0 ) )
oPB:tooltipText := aPmt[ i ]
nOff += aW[ i ] + nG
NEXT
RETURN NIL
/*----------------------------------------------------------------------*/
STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd )
LOCAL lVMove := .f.
LOCAL lHMove := .f.
LOCAL lRet := .t.
DO CASE
DO CASE
CASE nKey == K_ESC
lEnd := .t.
@@ -246,7 +435,7 @@ STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd )
lVMove := .t.
oBrowse:Down()
case nKey == K_UP
CASE nKey == K_UP
lVMove := .t.
oBrowse:Up()
@@ -305,57 +494,55 @@ STATIC FUNCTION BrwHandleKey( oBrowse, nKey, lEnd )
CASE nKey == K_MWFORWARD
lVMove := .t.
oBrowse:up()
CASE Vou_NavigateToCell( oBrowse, nKey )
OTHERWISE
OTHERWISE
lRet := .f.
ENDCASE
ENDCASE
IF lHMove .or. lVMove
oBrowse:forceStable()
ENDIF
ENDIF
RETURN lRet
/*----------------------------------------------------------------------*/
STATIC FUNCTION DbSkipBlock( n )
LOCAL nSkipped := 0
if n == 0
IF n == 0
DBSkip( 0 )
elseif n > 0
do while nSkipped != n .and. TBNext()
ELSEIF n > 0
DO WHILE nSkipped != n .AND. TBNext()
nSkipped++
enddo
else
do while nSkipped != n .and. TBPrev()
DO WHILE nSkipped != n .AND. TBPrev()
nSkipped--
enddo
endif
ENDDO
ENDIF
RETURN nSkipped
//-------------------------------------------------------------------//
STATIC FUNCTION TBNext()
LOCAL nSaveRecNum := recno()
LOCAL lMoved := .T.
if Eof()
IF Eof()
lMoved := .F.
else
ELSE
DBSkip( 1 )
if Eof()
IF Eof()
lMoved := .F.
DBGoTo( nSaveRecNum )
endif
endif
ENDIF
ENDIF
RETURN lMoved
@@ -367,10 +554,10 @@ STATIC FUNCTION TBPrev()
DBSkip( -1 )
if Bof()
IF Bof()
DBGoTo( nSaveRecNum )
lMoved := .F.
endif
ENDIF
RETURN lMoved
@@ -380,28 +567,28 @@ STATIC FUNCTION VouBlockField( i )
RETURN {|| fieldget( i ) }
/*----------------------------------------------------------------------*/
STATIC FUNCTION Vou_ExecTBarAction( oBtn )
SWITCH oBtn:caption
CASE "New"
Wvt_Keyboard( K_DOWN ); EXIT
CASE "Select"
CASE "Select"
Wvt_Keyboard( K_UP ); EXIT
CASE "Calendar"
CASE "Calendar"
Wvt_Keyboard( K_RIGHT ); EXIT
CASE "Tools"
CASE "Tools"
Wvt_Keyboard( K_LEFT ); EXIT
CASE "Index"
CASE "Index"
Wvt_Keyboard( K_PGDN ); EXIT
CASE "Show"
CASE "Show"
Wvt_Keyboard( K_PGUP ); EXIT
CASE "Hide"
Wvt_Keyboard( K_CTRL_HOME ); EXIT
ENDSWITCH
ENDSWITCH
RETURN NIL
/*----------------------------------------------------------------------*/
FUNCTION Vou_NavigateToCell( oBrowse )
@@ -416,70 +603,48 @@ FUNCTION Vou_NavigateToCell( oBrowse )
oBrowse:Up()
oBrowse:ForceStable()
ENDDO
WHILE ( nCount > 0 )
nCount --
oBrowse:Down()
oBrowse:ForceStable()
ENDDO
nCount := oBrowse:mColPos - oBrowse:ColPos
WHILE ( nCount < 0 )
nCount++
oBrowse:Left()
ENDDO
WHILE ( nCount > 0 )
nCount--
oBrowse:Right()
ENDDO
DispEnd()
RETURN .t.
ENDIF
ENDIF
RETURN .f.
/*----------------------------------------------------------------------*/
#include 'wvgparts.ch'
FUNCTION Vou_BrwAddScrollBars( oCrt, oBrowse, oVBar, oHBar )
LOCAL aXY, aXY1
aXY := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nLeft )
aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+2, oBrowse:nRight+1 )
//
oHBar := WvgScrollBar():new( oCrt, , { aXY[ 1 ], aXY[ 2 ]+2 }, { aXY1[ 1 ]-aXY[ 1 ], aXY1[ 2 ]-aXY[ 2 ]-2 }, , .t. )
oHBar := WvgScrollBar():new( oCrt, , { {|| -( maxrow()-2 ) }, {|| -( oBrowse:nLeft ) } }, ;
{ -1, {|| -( maxcol() - 5 - oBrowse:nLeft + 1 ) } } )
oHBar:range := { 1, oBrowse:colCount }
oHBar:type := WVGSCROLL_HORIZONTAL
oHBar:create()
oHBar:scroll := {|mp1| oBrowse:colPos := mp1[ 1 ], oBrowse:refreshAll(), oBrowse:forceStable() }
aXY := Wvt_GetXYFromRowCol( oBrowse:nTop , oBrowse:nRight+1 )
aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nRight+3 )
//
oVBar := WvgScrollBar():new( oCrt, , { aXY[ 1 ]+2,aXY[ 2 ] }, { aXY1[ 1 ]-aXY[ 1 ]-2, aXY1[ 2 ]-aXY[ 2 ] }, , .t. )
oVBar := WvgScrollBar():new( oCrt, , { {|| -( oBrowse:nTop ) }, {|| -( maxcol()-4 ) } }, ;
{ {|| -( maxrow()-3-oBrowse:nTop+1 ) }, {|| -( 2 ) } } )
oVBar:range := { 1, LastRec() }
oVBar:type := WVGSCROLL_VERTICAL
oVBar:create()
oVBar:scroll := {|mp1| Vou_BrwSetVScroll( mp1, oBrowse ) }
RETURN nil
/*----------------------------------------------------------------------*/
FUNCTION Vou_BrwResetScrollBars( oBrowse, oVBar, oHBar )
LOCAL aXY, aXY1
aXY := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nLeft )
aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+2, oBrowse:nRight+1 )
oHBar:setPosAndSize( {aXY[1],aXY[2]+2}, { aXY1[1]-aXY[1], aXY1[2]-aXY[2]-2 }, .t. )
aXY := Wvt_GetXYFromRowCol( oBrowse:nTop , oBrowse:nRight+1 )
aXY1 := Wvt_GetXYFromRowCol( oBrowse:nBottom+1, oBrowse:nRight+3 )
oVBar:setPosAndSize( {aXY[1]+2,aXY[2]}, { aXY1[1]-aXY[1]-2, aXY1[2]-aXY[2] }, .t. )
RETURN nil
RETURN NIL
/*----------------------------------------------------------------------*/
@@ -527,104 +692,104 @@ STATIC FUNCTION BrwOnEvent( oWvtBrw, cPaintID, oBrowse, nKey )
HB_SYMBOL_UNUSED( cPaintID )
do case
case nKey == K_DOWN
DO CASE
CASE nKey == K_DOWN
oBrowse:Down()
case nKey == K_UP
CASE nKey == K_UP
oBrowse:Up()
case nKey == K_LEFT
CASE nKey == K_LEFT
oBrowse:Left()
case nKey == K_RIGHT
CASE nKey == K_RIGHT
oBrowse:Right()
case nKey == K_PGDN
CASE nKey == K_PGDN
oBrowse:pageDown()
lRefAll := .t.
case nKey == K_PGUP
CASE nKey == K_PGUP
oBrowse:pageUp()
lRefAll := .t.
case nKey == K_CTRL_PGUP
CASE nKey == K_CTRL_PGUP
oBrowse:goTop()
lRefAll := .t.
case nKey == K_CTRL_PGDN
CASE nKey == K_CTRL_PGDN
oBrowse:goBottom()
lRefAll := .t.
case nKey == K_HOME
CASE nKey == K_HOME
oBrowse:home()
case nKey == K_END
CASE nKey == K_END
oBrowse:end()
case nKey == K_CTRL_LEFT
CASE nKey == K_CTRL_LEFT
oBrowse:panLeft()
case nKey == K_CTRL_RIGHT
CASE nKey == K_CTRL_RIGHT
oBrowse:panRight()
case nKey == K_CTRL_HOME
CASE nKey == K_CTRL_HOME
oBrowse:panHome()
case nKey == K_CTRL_END
CASE nKey == K_CTRL_END
oBrowse:panEnd()
case nKey == K_MWBACKWARD
CASE nKey == K_MWBACKWARD
oBrowse:down()
case nKey == K_MWFORWARD
CASE nKey == K_MWFORWARD
oBrowse:up()
case nKey == K_SBTHUMBTRACKVERT
CASE nKey == K_SBTHUMBTRACKVERT
OrdKeyGoTo( oWvtBrw:oVBar:GetPos() )
lRefAll := .t.
case nKey == K_SBTHUMBTRACKHORZ
CASE nKey == K_SBTHUMBTRACKHORZ
oBrowse:ColPos := oWvtBrw:oHBar:GetPos()
case nKey == K_SBLINEUP
CASE nKey == K_SBLINEUP
oBrowse:up()
case nKey == K_SBLINEDOWN
CASE nKey == K_SBLINEDOWN
oBrowse:down()
case nKey == K_SBPAGEUP
CASE nKey == K_SBPAGEUP
oBrowse:pageUp()
case nKey == K_SBPAGEDOWN
CASE nKey == K_SBPAGEDOWN
oBrowse:pageDown()
case nKey == K_SBLINELEFT
CASE nKey == K_SBLINELEFT
oBrowse:left()
case nKey == K_SBLINERIGHT
CASE nKey == K_SBLINERIGHT
oBrowse:right()
case nKey == K_SBPAGELEFT
CASE nKey == K_SBPAGELEFT
oBrowse:left()
case nKey == K_SBPAGERIGHT
CASE nKey == K_SBPAGERIGHT
oBrowse:right()
otherwise
OTHERWISE
lRet := .f.
endcase
ENDCASE
if lRet
if lRefAll
IF lRet
IF lRefAll
oBrowse:refreshAll()
endif
ENDIF
oBrowse:forceStable()
oWvtBrw:oVBar:setPos( OrdKeyCount(),OrdKeyNo() )
oWvtBrw:oHBar:setPos( oBrowse:ColCount, oBrowse:ColPos )
endif
ENDIF
RETURN lRet
@@ -644,7 +809,6 @@ FUNCTION ConfigBrowser( aFields, cUseAlias, aTLBR, cDesc, oParent, cColorSpec, n
Select( cUseAlias )
info_:= DbStruct()
//oBrowse := TBrowseNew( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] )
oBrowse := TBrowseWVG():New( aTLBR[ 1 ], aTLBR[ 2 ], aTLBR[ 3 ], aTLBR[ 4 ] )
oBrowse:ColSep := " "
@@ -654,10 +818,10 @@ FUNCTION ConfigBrowser( aFields, cUseAlias, aTLBR, cDesc, oParent, cColorSpec, n
oBrowse:GoBottomBlock := { || dbGoBottom() }
oBrowse:SkipBlock := { | nSkip | dbSkipBlock( nSkip,oBrowse ) }
for i := 1 to len( aFields )
FOR i := 1 TO len( aFields )
bBlock := VouBlockField( aFields[ i ] )
oBrowse:AddColumn( TBColumnNew( info_[ aFields[ i ],1 ], bBlock ) )
next
NEXT
oBrowse:configure()
@@ -682,9 +846,9 @@ FUNCTION ConfigBrowser( aFields, cUseAlias, aTLBR, cDesc, oParent, cColorSpec, n
//-------------------------------------------------------------------//
STATIC FUNCTION BrwBuildMenu( oCrt )
Local oMenu, oSMenu
LOCAL oMenu, oSMenu
oMenu := WvgMenuBar():new( oCrt, , .t. ):create()
oMenu := oCrt:menubar()
oSMenu := WvgMenu():new( oMenu ):create()
oSMenu:addItem( { '~First' , {|| alert( 'First' ) } } )
@@ -706,9 +870,40 @@ STATIC FUNCTION BrwBuildMenu( oCrt )
oSMenu:addItem( { "Procedure ~2", } )
oSMenu:itemSelected := {|mp1| MyMenuProcedure( 100+mp1 ) }
oSMenu:checkItem( 2 )
oMenu:addItem( { oSMenu, NIL } )
Return oMenu
RETURN oMenu
//----------------------------------------------------------------------//
STATIC FUNCTION BrwBuildToolBar( oCrt )
LOCAL oTBar
oTBar := WvgToolBar():new( oCrt, , { -0.1,-0.1 }, { -3, {|| -( maxcol()+1 ) } } )
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
//----------------------------------------------------------------------//

View File

@@ -48,14 +48,14 @@
/*----------------------------------------------------------------------*/
thread static t_keys_:= { , , , , , , , , , , , , , , , , , , , }
thread static t_pic_ := { , , , , , , , , , , , , , , , , , , , }
THREAD STATIC t_keys_:= { , , , , , , , , , , , , , , , , , , , }
THREAD STATIC t_pic_ := { , , , , , , , , , , , , , , , , , , , }
/*----------------------------------------------------------------------*/
FUNCTION WvtSetKeys( lSet )
if 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 ) } )
@@ -65,7 +65,7 @@ FUNCTION WvtSetKeys( lSet )
t_keys_[ 8 ] := SetKey( K_F8, {|| WvtLines() } )
t_keys_[ 9 ] := SetKey( K_F9, {|| Wvt_ChooseFont() } )
t_keys_[ 10] := SetKey( K_F10,{|| Wvt_ChooseColor() } )
else
ELSE
SetKey( K_F2, t_keys_[ 2 ] )
SetKey( K_F3, t_keys_[ 3 ] )
SetKey( K_F4, t_keys_[ 4 ] )
@@ -75,7 +75,7 @@ FUNCTION WvtSetKeys( lSet )
SetKey( K_F8, t_keys_[ 8 ] )
SetKey( K_F9, t_keys_[ 9 ] )
SetKey( K_F10, t_keys_[ 10] )
endif
ENDIF
RETURN Nil
//-------------------------------------------------------------------//
@@ -114,7 +114,6 @@ FUNCTION Wvt_SetFocus()
//-------------------------------------------------------------------//
#if 0
FUNCTION Wvt_KillFocus()
LOCAL nRow := row()
LOCAL nCol := col()
@@ -122,7 +121,7 @@ FUNCTION Wvt_KillFocus()
DevPos( nRow, nCol )
RETURN nil
RETURN NIL
#endif
//-------------------------------------------------------------------//
@@ -139,16 +138,16 @@ FUNCTION Wvt_Mouse( nKey, nRow, nCol )
STATIC nLastObj := 0
STATIC nLastKey := 0
if ( nLen := len( aObjects ) ) == 0
return nil
endif
IF ( nLen := len( aObjects ) ) == 0
RETURN NIL
ENDIF
if !SetMouseCheck()
return nil
endif
IF ! SetMouseCheck()
RETURN NIL
ENDIF
if nKey == -1000001
for nObj := 1 to nLen
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 ] )
@@ -161,50 +160,50 @@ FUNCTION Wvt_Mouse( nKey, nRow, nCol )
CASE aObjects[ nObj, WVT_OBJ_STATE ] == OBJ_STATE_HIDE
ENDCASE
next
return nil
endif
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. ;
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 nLastObj > 0
IF nObj == 0
IF nLastObj > 0
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_DISP
eval( aObjects[ nLastObj, WVT_OBJ_ONDISP ] )
nLastObj := 0
endif
return nil
endif
ENDIF
RETURN NIL
ENDIF
if nLastObj == nObj .and. nLastKey == nKey
return nil
endif
IF nLastObj == nObj .and. nLastKey == nKey
RETURN NIL
ENDIF
nLastObj := nObj
nLastKey := nKey
DO CASE
CASE nKey == K_MOUSEMOVE
if aObjects[ nLastObj, WVT_OBJ_STATE ] != OBJ_STATE_MOUSEOVER
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_MOUSEOVER
if aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] != nil
IF aObjects[ nLastObj, WVT_OBJ_STATE ] != OBJ_STATE_MOUSEOVER
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_MOUSEOVER
IF aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONMOUSEOVER ] )
endif
endif
ENDIF
ENDIF
CASE nKey == K_LBUTTONDOWN
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_BUTTONDOWN
if aObjects[ nObj, WVT_OBJ_ONBUTTONDOWN ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONDOWN ] )
endif
aObjects[ 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[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_DISP
if aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] )
endif
aObjects[ nLastObj, WVT_OBJ_STATE ] := OBJ_STATE_DISP
IF aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] != nil
eval( aObjects[ nObj, WVT_OBJ_ONBUTTONUP ] )
ENDIF
ENDCASE
@@ -215,7 +214,6 @@ FUNCTION Wvt_Mouse( nKey, nRow, nCol )
//-------------------------------------------------------------------//
FUNCTION WvtSetBlocks( a_ )
LOCAL o
THREAD STATIC t := {}
@@ -232,27 +230,27 @@ FUNCTION WvtSetBlocks( a_ )
//-------------------------------------------------------------------//
FUNCTION WvtSetObjects( aObject )
LOCAL oObjects
THREAD STATIC aObjects := {}
oObjects := aclone( aObjects )
if aObject != nil
if empty( aObject )
IF aObject != NIL
IF empty( aObject )
aObjects := {}
else
if valtype( aObject[ 1 ] ) == "A"
ELSE
IF valtype( aObject[ 1 ] ) == "A"
aeval( aObject, {|e_| aadd( aObjects, e_ ) } )
else
ELSE
aSize( aObject, WVT_OBJ_VRBLS )
DEFAULT aObject[ WVT_OBJ_STATE ] TO OBJ_STATE_DISP
aadd( aObjects, aObject )
endif
endif
endif
ENDIF
ENDIF
ENDIF
RETURN oObjects
@@ -261,12 +259,10 @@ FUNCTION WvtSetObjects( aObject )
FUNCTION SetMouseCheck( lYes )
LOCAL lOYes
STATIC lSYes := .t.
lOYes := lSYes
if lYes != nil
IF lYes != NIL
lSYes := lYes
endif
ENDIF
RETURN lOYes
//-------------------------------------------------------------------//
@@ -312,13 +308,13 @@ FUNCTION Hb_Clear()
//----------------------------------------------------------------------//
FUNCTION MyMenuProcedure( nID )
do case
case nID == 101
DO CASE
CASE nID == 101
alert( 'Procedure 101' )
case nID == 102
CASE nID == 102
alert( 'Procedure 102' )
endcase
Return .t.
ENDCASE
RETURN .t.
//----------------------------------------------------------------------//
@@ -368,7 +364,7 @@ FUNCTION SetGT( nIndex, pGT )
FUNCTION SetFonts( hFont )
LOCAL oldFont
thread STATIC t_ahFonts := {}
THREAD STATIC t_ahFonts := {}
oldFont := t_ahFonts
IF !empty( hFont )
aadd( t_ahFonts, hFont )
@@ -379,7 +375,7 @@ FUNCTION SetFonts( hFont )
FUNCTION SetIcons( hIcon )
LOCAL oldIcon
thread STATIC t_ahIcons := {}
THREAD STATIC t_ahIcons := {}
oldIcon := t_ahIcons
IF !empty( hIcon )
aadd( t_ahIcons, hIcon )
@@ -394,22 +390,22 @@ FUNCTION Popups( nID, lDestroy )
THREAD STATIC hPop_:= { , , , , , , , , }
if nID == nil
IF nID == NIL
Wvt_SetPopupMenu()
return nil
endif
RETURN NIL
ENDIF
if lDestroy != nil
IF lDestroy != NIL
Wvt_DestroyMenu( hPop_[ nID ] )
return nil
endif
RETURN NIL
ENDIF
hPop := hPop_[ nID ]
do case
case nID == 1 // Data Entry Module
DO CASE
CASE nID == 1 // Data Entry Module
if hPop == nil
IF hPop == nil
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_F2, "Second Get Screen" )
Wvt_AppendMenu( hPop, nPrompt, K_F3, "Expand Window" )
@@ -425,11 +421,11 @@ FUNCTION Popups( nID, lDestroy )
Wvt_AppendMenu( hPop, nPrompt, K_F5, "Browse" )
endif
ENDIF
case nID == 2 // Browser
CASE nID == 2 // Browser
if hPop == nil
IF hPop == NIL
hPop := Wvt_CreatePopupMenu()
Wvt_AppendMenu( hPop, nPrompt, K_DOWN , "Down" )
Wvt_AppendMenu( hPop, nPrompt, K_UP , "Up" )
@@ -448,9 +444,9 @@ FUNCTION Popups( nID, lDestroy )
Wvt_AppendMenu( hPop, MF_ENABLED+MF_POPUP, hPop1, "Column Movement" )
endif
ENDIF
endcase
ENDCASE
hPop_[ nID ] := hPop
@@ -480,13 +476,13 @@ FUNCTION ClearStatusMsg()
FUNCTION WvtPictures( nSlot,cFilePic )
if nSlot != nil .and. nSlot <= 20 .and. file( cFilePic )
if t_pic_[ nSlot ] != cFilePic
if Wvt_LoadPicture( cFilePic, nSlot )
IF nSlot != NIL .AND. nSlot <= 20 .AND. file( cFilePic )
IF t_pic_[ nSlot ] != cFilePic
IF Wvt_LoadPicture( cFilePic, nSlot )
t_pic_[ nSlot ] := cFilePic
endif
endif
endif
ENDIF
ENDIF
ENDIF
RETURN NIL
@@ -494,9 +490,9 @@ FUNCTION WvtPictures( nSlot,cFilePic )
FUNCTION WvtExePicture( nTop, nLeft, nBottom, nRight, nSlot, aOffset )
if t_pic_[ nSlot ] != nil
IF t_pic_[ nSlot ] != NIL
Wvt_DrawPicture( nTop, nLeft, nBottom, nRight, nSlot, aOffSet )
endif
ENDIF
RETURN NIL
@@ -510,12 +506,27 @@ FUNCTION GetResource( cName )
FUNCTION uiDebug( ... )
LOCAL aP := hb_aParams()
LOCAL s := ""
aeval( aP, {|e| s += hb_valTOstr( e ) + " " } )
WAPI_OutputDebugString( s )
RETURN NIL
/*----------------------------------------------------------------------*/
FUNCTION 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() != 27; ENDDO
RETURN NIL
/*----------------------------------------------------------------------*/

View File

@@ -1,8 +1,8 @@
/*
* $Id$
*/
/*
/*
* Pritpal Bedi <bedipritpal@hotmail.com>
*/
@@ -13,12 +13,12 @@
#include "wvtwin.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "wvgparts.ch"
/*----------------------------------------------------------------------*/
#define MUSIC_WAITON {800, 1600}
/*----------------------------------------------------------------------*/
//
// A Pure Xbase++ Implementation
@@ -143,11 +143,11 @@ FUNCTION demoxbp()
//--------------------------- Active-X ---------------------------\\
hb_gtInfo( HB_GTI_WINTITLE, 'http://www.harbour.vouch.info' )
#if 0
#if 0
oCom := WvgActiveXControl():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. )
oCom:CLSID := 'Shell.Explorer.2'
oCom:mapEvent( 269, {|| QOut( ' E X P L O R E R - 2 6 9' ) } )
#else
#else
oCom := WvgHTMLViewer():New( oDA, , { 0, 0 }, { 100, 100 }, , .t. )
oCom:beforeNavigate := {|cURL, x, oHTML| x := x, oHTML := oHTML, oPanel:caption := cURL }
oCom:statusTextChange := {|cText| oPanel:caption := cText }
@@ -333,7 +333,7 @@ STATIC FUNCTION ActiveXBuildMenuXbp( oCrt, oStatic, oStatic2 )
oMenuBar:addItem( { oSubMenu, NIL } )
RETURN NIL
RETURN NIL
//----------------------------------------------------------------------//
STATIC FUNCTION ActiveXBuildToolBarXbp( oCrt )

View File

@@ -106,7 +106,7 @@ CLASS Wvg3State INHERIT WvgWindow, DataRef
METHOD Wvg3State:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + BS_AUTO3STATE
::className := "BUTTON"

View File

@@ -117,6 +117,7 @@ CLASS WvgActiveXControl FROM WvgWindow
METHOD mouseUp()
METHOD mouseMove()
METHOD activate()
ERROR HANDLER OnError
ENDCLASS
@@ -125,7 +126,7 @@ CLASS WvgActiveXControl FROM WvgWindow
METHOD WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + WS_VISIBLE + WS_CLIPCHILDREN + WS_CLIPSIBLINGS
::objType := objTypeActiveX
@@ -185,6 +186,7 @@ PROCEDURE execEvent( nEvent, ... ) CLASS WvgActiveXControl
#if 0
LOCAL cEvents := HB_ValToStr( nEvent ) + ", "
LOCAL aEvents := { ... }
aEval( aEvents, { | xEvent | cEvents += HB_ValToStr( xEvent ) + ", " } )
WAPI_OutputDebugString( cEvents )
#endif
@@ -209,7 +211,8 @@ METHOD WvgActiveXControl:handleEvent( nEvent, aInfo )
eval( ::sl_resize, NIL, NIL, self )
ENDIF
EXIT
END
ENDSWITCH
RETURN nHandled

View File

@@ -110,7 +110,7 @@ CLASS WvgCheckBox INHERIT WvgWindow, DataRef
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCheckBox
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + BS_PUSHBUTTON + BS_AUTOCHECKBOX /*+ BS_NOTIFY */
::className := "BUTTON"
@@ -122,24 +122,25 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCheck
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCheckBox
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::oParent:AddChild( SELF )
::createControl()
::SetWindowProcCallback()
IF ::isParentCrt()
::SetWindowProcCallback()
ENDIF
IF ::visible
::show()
ENDIF
::setPosAndSize()
::setCaption( ::caption )
IF ::selection
::sendMessage( BM_SETCHECK, BST_CHECKED, 0 )
ENDIF
::editBuffer := ( WVG_Button_GetCheck( ::hWnd ) == BST_CHECKED )
RETURN Self
@@ -147,36 +148,54 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCh
/*----------------------------------------------------------------------*/
METHOD handleEvent( nMessage, aNM ) CLASS WvgCheckBox
LOCAL hDC
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
DO CASE
CASE nMessage == HB_GTE_RESIZED
::sendMessage( WM_SIZE, 0, 0 )
IF ::isParentCrt()
::rePosition()
ENDIF
CASE nMessage == HB_GTE_COMMAND
IF aNM[ NMH_code ] == BN_CLICKED
::editBuffer := ( WVG_Button_GetCheck( ::hWnd ) == BST_CHECKED )
IF hb_isBlock( ::sl_lbClick )
eval( ::sl_lbClick, ::editBuffer, NIL, self )
RETURN 0
ENDIF
ENDIF
CASE nMessage == HB_GTE_CTLCOLOR
CASE nMessage == HB_GTE_CTLCOLOR
hDC := aNM[ 1 ]
IF hb_isNumeric( ::clr_FG )
WVG_SetTextColor( aNM[ 1 ], ::clr_FG )
WVG_SetTextColor( hDC, ::clr_FG )
ENDIF
IF hb_isNumeric( ::hBrushBG )
WVG_SetBkMode( aNM[ 1 ], 1 )
WVG_SetBkMode( hDC, 1 )
RETURN ::hBrushBG
ELSE
RETURN WVG_GetCurrentBrush( aNM[ 1 ] )
RETURN WVG_GetCurrentBrush( hDC )
ENDIF
CASE nMessage == HB_GTE_ANY
IF ::isParentCrt()
IF aNM[ 1 ] == WM_LBUTTONUP
IF hb_isBlock( ::sl_lbClick )
::oParent:setFocus()
::sendMessage( BM_SETCHECK, iif( WVG_Button_GetCheck( ::hWnd ) == BST_CHECKED, BST_UNCHECKED, BST_CHECKED ), 0 )
::editBuffer := ( WVG_Button_GetCheck( ::hWnd ) == BST_CHECKED )
eval( ::sl_lbClick, NIL, NIL, Self )
ENDIF
ENDIF
ENDIF
ENDCASE
RETURN 1
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/

View File

@@ -361,11 +361,9 @@ METHOD wvtDialog:Destroy()
METHOD wvtDialog:Event()
LOCAL nKey
IF ( nKey := inkey( 0.1, INKEY_ALL ) ) == 0
IF ( nKey := inkey( 0.1, INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0
IF Wvt_IsLButtonPressed()
nKey := K_LBUTTONPRESSED
ENDIF
ENDIF
@@ -376,14 +374,14 @@ METHOD wvtDialog:Event()
METHOD wvtDialog:Execute()
IF ::nObjects == 0
do while .t.
IF inkey( 0.1 ) == K_ESC
DO WHILE .t.
IF inkey( 0.1, INKEY_ALL + HB_INKEY_GTEVENT ) == K_ESC
EXIT
ENDIF
enddo
ENDDO
ELSE
do while ( ::Inkey() <> K_ESC )
enddo
DO WHILE ( ::Inkey() <> K_ESC )
ENDDO
ENDIF
RETURN ::nKey
@@ -401,14 +399,14 @@ METHOD wvtDialog:Inkey()
IF ::nKey <> 0
IF ::nKey == K_ESC .or. ::nKey == K_CTRL_ENTER
return K_ESC
RETURN K_ESC
ENDIF
DO CASE
CASE ::nKey == K_TAB
IF ::lTabStops
do while .t.
DO WHILE .t.
::nCurObj++
IF ::nCurObj > ::nObjects
::nCurObj := 1
@@ -416,14 +414,14 @@ METHOD wvtDialog:Inkey()
IF ::aObjects[ ::nCurObj ]:lTabStop
EXIT
ENDIF
enddo
ENDDO
ENDIF
::lEventHandled := .t.
CASE ::nKey == K_SH_TAB
IF ::lTabStops
do while .t.
DO WHILE .t.
::nCurObj--
IF ::nCurObj < 1
::nCurObj := ::nObjects
@@ -431,7 +429,7 @@ METHOD wvtDialog:Inkey()
IF ::aObjects[ ::nCurObj ]:lTabStop
EXIT
ENDIF
enddo
ENDDO
ENDIF
::lEventHandled := .t.
@@ -531,7 +529,9 @@ METHOD wvtDialog:Inkey()
IF ::nUseObj > 0
IF !( ::lEventHandled := ::aObjects[ ::nUseObj ]:LeftDown() )
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnLeftDown )
IF ::aObjects[ ::nUseObj ]:className == "WVTBROWSE"
::lEventHandled := .f.
ENDIF
ENDIF
ENDIF
ENDIF
@@ -613,10 +613,10 @@ METHOD wvtDialog:MouseOver()
LOCAL nObj
nObj := ascan( ::aObjects, ;
{|o| o:nType <> DLG_OBJ_STATIC .and. ;
o:nType <> DLG_OBJ_TOOLBAR .and. ;
mRow >= o:nTop .and. mRow <= o:nBottom .and. ;
mCol >= o:nLeft .and. mCol <= o:nRight } )
{|o| o:nType <> DLG_OBJ_STATIC .AND. ;
o:nType <> DLG_OBJ_TOOLBAR .AND. ;
mRow >= o:nTop .AND. mRow <= o:nBottom .AND. ;
mCol >= o:nLeft .AND. mCol <= o:nRight } )
::nObjOver := nObj
::oObjOver := iif( nObj > 0, ::aObjects[ nObj ], nil )
@@ -801,7 +801,7 @@ CLASS WvtObject
DATA bOnFocus INIT {|| NIL }
DATA bOnRefresh INIT {|| NIL }
DATA bOnLeftUp INIT {|| NIL }
DATA bOnLeftDown INIT {|| NIL }
DATA bOnLeftDown INIT {|| .f. }
DATA bOnMMLeftDown INIT {|| NIL }
DATA bOnLeftPressed INIT {|| NIL }
DATA bTooltip INIT {|| NIL }
@@ -1049,12 +1049,17 @@ METHOD WvtBrowse:New( oParent, nID, nTop, nLeft, nBottom, nRight )
METHOD WvtBrowse:Create()
Select( ::cAlias )
#if 0
::nTop := ::oBrw:nTop-2
::nLeft := ::oBrw:nLeft-2
::nBottom := iif( ::lHSBar, ::oBrw:nBottom, ::oBrw:nBottom+1 )
::nRight := iif( ::lVSBar, ::oBrw:nRight , ::oBrw:nRight+2 )
#else
::nTop := ::oBrw:nTop
::nLeft := ::oBrw:nLeft
::nBottom := ::oBrw:nBottom
::nRight := ::oBrw:nRight
#endif
::PaintBlock( 1 )
::PaintBlock( 2 )
::PaintBlock( 3 )
@@ -2531,7 +2536,7 @@ METHOD wvtScrollbar:Create()
ENDIF
::bOnLeftUp := {|| ::HandleEvent( K_LBUTTONUP ) }
::bOnLeftDown := {|| ::HandleEvent( K_LBUTTONDOWN ) }
::bOnLeftDown := {|| ::HandleEvent( K_LBUTTONDOWN ), .f. }
::bOnMMLeftDown := {|| ::HandleEvent( K_MMLEFTDOWN ) }
::bOnLeftPressed := {|| ::HandleEvent( K_LBUTTONPRESSED ) }
@@ -2601,7 +2606,7 @@ METHOD wvtScrollbar:Configure( nTop, nLeft, nBottom, nRight )
::ThumbPos()
ENDIF
::Refresh()
RETURN Self

View File

@@ -89,7 +89,7 @@ CLASS WvgComboBox INHERIT WvgListBox /* WvgSLE */
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgComboBox
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -103,7 +103,7 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgCombo
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgComboBox
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::oParent:AddChild( SELF )

View File

@@ -86,8 +86,8 @@ CLASS WvgCrt INHERIT WvgWindow, WvgPartHandler
DATA clipChildren INIT .F.
DATA closable INIT .T.
DATA fontHeight INIT 16
DATA fontWidth INIT 10
DATA fontName INIT "Courier New"
DATA fontWidth INIT 8
DATA gridMove INIT .F.
DATA icon INIT 0
DATA minMax INIT .T.
@@ -172,17 +172,18 @@ CLASS WvgCrt INHERIT WvgWindow, WvgPartHandler
DATA lHasInputFocus INIT .F.
DATA nFrameState INIT 0 /* normal */
DATA isGT INIT .F.
METHOD setTitle( cTitle ) INLINE ::title := cTitle, hb_gtInfo( HB_GTI_WINTITLE, cTitle )
METHOD getTitle() INLINE hb_gtInfo( HB_GTI_WINTITLE )
METHOD showWindow() INLINE ::show()
METHOD refresh() INLINE ::invalidateRect()
/* LIFE CYCLE */
METHOD init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
METHOD setFocus()
/* METHODS */
METHOD currentPos()
@@ -259,22 +260,25 @@ CLASS WvgCrt INHERIT WvgWindow, WvgPartHandler
* Instance Initiation
/*----------------------------------------------------------------------*/
METHOD WvgCrt:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD WvgCrt:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
if hb_isArray( aPos )
IF hb_isArray( aPos )
::aPos := aPos
endif
if hb_isArray( aSize )
ENDIF
IF hb_isArray( aSize )
::aSize := aSize
endif
if hb_isArray( aPresParams )
ENDIF
IF hb_isArray( aPresParams )
::aPresParams := aPresParams
endif
if hb_isLogical( lVisible )
ENDIF
IF hb_isLogical( lVisible )
::visible := lVisible
endif
ENDIF
/* Drawing Area of oCrt will point to itself */
::drawingArea := Self
RETURN Self
@@ -304,13 +308,13 @@ METHOD WvgCrt:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
if ::lModal
IF ::lModal
::pGT := hb_gtCreate( "WVG" )
::pGTp := hb_gtSelect( ::pGT )
else
ELSE
hb_gtReload( "WVG" )
::pGT := hb_gtSelect()
endif
ENDIF
IF ::lModal
::style := WS_POPUP + WS_CAPTION + WS_SYSMENU
@@ -337,6 +341,7 @@ METHOD WvgCrt:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
/* CreateWindow() be forced to execute */
? " "
::hWnd := hb_gtInfo( HB_GTI_SPEC, HB_GTS_WINDOWHANDLE )
::setFocus()
Hb_GtInfo( HB_GTI_CLOSABLE , ::closable )
hb_gtInfo( HB_GTI_WINTITLE , ::title )
@@ -352,15 +357,7 @@ METHOD WvgCrt:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::lHasInputFocus := .t.
ENDIF
/* Drawing Area of oCrt will point to itself */
::drawingArea := self
HB_GtInfo( HB_GTI_NOTIFIERBLOCK, {|nEvent, ...| ::notifier( nEvent, ... ) } )
/* Not working yet. need to investigate how I have implemented it. */
if !empty( ::toolTipText )
Wvt_SetTooltip( ::toolTipText )
endif
HB_GtInfo( HB_GTI_NOTIFIERBLOCKGUI, {|nEvent, ...| ::notifier( nEvent, ... ) } )
RETURN Self
@@ -396,15 +393,16 @@ METHOD WvgCrt:destroy()
aeval( ::aChildren, {|o| o:destroy() } )
ENDIF
if ::lModal
hb_gtInfo( HB_GTI_ENABLE , ::pGTp )
hb_gtSelect( ::pGTp )
hb_gtInfo( HB_GTI_SETFOCUS, ::pGTp )
IF ! ::isGT
IF ::lModal
hb_gtInfo( HB_GTI_ENABLE , ::pGTp )
hb_gtSelect( ::pGTp )
hb_gtInfo( HB_GTI_SETFOCUS, ::pGTp )
ENDIF
::pGT := NIL
::pGTp := NIL
ENDIF
::pGT := NIL
::pGTp := NIL
RETURN Self
/*----------------------------------------------------------------------*/
@@ -1158,12 +1156,3 @@ METHOD WvgCrt:dragDrop( xParam, xParam1 )
RETURN Self
/*----------------------------------------------------------------------*/
* HARBOUR SPECIFIC
/*----------------------------------------------------------------------*/
METHOD WvgCrt:SetFocus()
::sendMessage( WM_ACTIVATE, 1, 0 )
/* ::sendMessage( WM_SETFOCUS, 0, 0 ) */
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -619,7 +619,7 @@ HB_FUNC( WVG_LABEL )
gObj->aOffset.iRight = hb_parvni( 3, 4 );
#if defined( UNICODE )
gObj->lpText = hb_mbtowc( hb_parcx( 4 ) );
gObj->lpText = HB_TCHAR_CONVTO( hb_parc( 4 ) ); //hb_mbtowc( hb_parcx( 4 ) );
#else
gObj->lpText = hb_strdup( hb_parcx( 4 ) );
#endif

View File

@@ -96,9 +96,9 @@ CLASS WvgDrawingArea INHERIT WvgWindow
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgDrawingArea
METHOD WvgDrawingArea:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD
::exStyle := 0
@@ -110,27 +110,26 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgDrawi
/*----------------------------------------------------------------------*/
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgDrawingArea
METHOD WvgDrawingArea:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
HB_SYMBOL_UNUSED( lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, .t. )
::oParent:addChild( SELF )
::oParent:addChild( Self )
Wvg_RegisterClass_ByName( ::className )
::createControl()
::SetWindowProcCallback()
::show()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD handleEvent( nMessage, aNM ) CLASS WvgDrawingArea
METHOD WvgDrawingArea:handleEvent( nMessage, aNM )
LOCAL hDC
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
@@ -142,7 +141,7 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgDrawingArea
eval( ::sl_resize, NIL, NIL, self )
ENDIF
aeval( ::aChildren, {|o| o:handleEvent( HB_GTE_RESIZED, { 0, 0, 0, 0, 0 } ) } )
RETURN 0
RETURN EVENT_HANDELLED
CASE nMessage == HB_GTE_CTLCOLOR
hDC := aNM[ 1 ]
@@ -153,13 +152,13 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgDrawingArea
IF hb_isNumeric( ::hBrushBG )
WVG_SetBkMode( hDC, 1 )
Wvg_FillRect( hDC, { 0,0,::currentSize()[1],::currentSize()[1]}, ::hBrushBG )
RETURN 0
WVG_FillRect( hDC, { 0,0,::currentSize()[1],::currentSize()[2]}, ::hBrushBG )
RETURN EVENT_HANDELLED
ENDIF
ENDCASE
RETURN 1
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/

View File

@@ -109,13 +109,13 @@ CLASS DataRef
/*----------------------------------------------------------------------*/
METHOD new() CLASS DataRef
METHOD DataRef:new()
RETURN self
/*----------------------------------------------------------------------*/
METHOD getData() CLASS DataRef
METHOD DataRef:getData()
DO CASE
CASE ::className == "EDIT"
@@ -130,7 +130,7 @@ METHOD getData() CLASS DataRef
/*----------------------------------------------------------------------*/
METHOD setData( xValue, mp2 ) CLASS DataRef
METHOD DataRef:setData( xValue, mp2 )
HB_SYMBOL_UNUSED( mp2 )
@@ -174,13 +174,13 @@ METHOD setData( xValue, mp2 ) CLASS DataRef
/*----------------------------------------------------------------------*/
METHOD undo() CLASS DataRef
METHOD DataRef:undo()
RETURN .f.
/*----------------------------------------------------------------------*/
METHOD validate( xParam ) CLASS DataRef
METHOD DataRef:validate( xParam )
IF PCount() == 0 .and. hb_isBlock( ::sl_validate )
RETURN eval( ::sl_validate, self )

View File

@@ -83,7 +83,7 @@ CLASS WvgDialog FROM WvgWindow
DATA drawingArea
DATA tasklist INIT .t.
METHOD init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
@@ -103,16 +103,16 @@ CLASS WvgDialog FROM WvgWindow
/*----------------------------------------------------------------------*/
METHOD WvgDialog:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD WvgDialog:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::className := "WVGDIALOG"
::resizeMode := 0
::mouseMode := 0
::objType := objTypeDialog
::style := WS_THICKFRAME+WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX;
::style := WS_THICKFRAME+WS_OVERLAPPED+WS_CAPTION+WS_SYSMENU+WS_MINIMIZEBOX+WS_MAXIMIZEBOX
RETURN Self
@@ -162,10 +162,10 @@ METHOD WvgDialog:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
if ::visible
::lHasInputFocus := .t.
endif
ENDIF
oW := WvgDrawingArea():new( self ):create( , , {0,0}, self:currentSize(), , .f. )
IF !empty( oW:hWnd )
oW := WvgDrawingArea():new( Self ):create( , , {0,0}, Self:currentSize(), , .f. )
IF ! empty( oW:hWnd )
::drawingArea := oW
ELSE
::drawingArea := Self

View File

@@ -0,0 +1,117 @@
/*
* $Id$
*/
/*
* Harbour Project source code:
* Source file for the Wvg*Classes
*
* Copyright 2011 Pritpal Bedi <bedipritpal@hotmail.com>
* http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
*
* EkOnkar
* ( The LORD is ONE )
*
* Xbase++ Parts Compatible functions
*
* Pritpal Bedi <bedipritpal@hotmail.com>
* 03Dec2011
*
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbclass.ch"
#include "common.ch"
#include "inkey.ch"
#include "hbgtinfo.ch"
#include "hbgtwvg.ch"
#include "wvtwin.ch"
#include "wvgparts.ch"
/*----------------------------------------------------------------------*/
THREAD STATIC s_oCrt := NIL
/*----------------------------------------------------------------------*/
EXIT PROCEDURE KillGTChildren()
LOCAL aChilds, oXbp
IF hb_isObject( s_oCrt ) .AND. __objGetClsName( s_oCrt ) == "WVGCRT" .AND. s_oCrt:isGT
IF ! empty( aChilds := s_oCrt:childList() )
FOR EACH oXbp IN aChilds
oXbp:destroy()
oXbp := NIL
NEXT
ENDIF
ENDIF
RETURN
/*----------------------------------------------------------------------*/
FUNCTION SetAppWindow( oCrt )
LOCAL ooCrt := s_oCrt
IF empty( oCrt )
IF empty( s_oCrt )
s_oCrt := WvgCrt():new()
s_oCrt:hWnd := Wvt_GetWindowHandle()
s_oCrt:pWnd := Win_N2P( s_oCrt:hWnd )
HB_GtInfo( HB_GTI_NOTIFIERBLOCKGUI, {|nEvent, ...| s_oCrt:notifier( nEvent, ... ) } )
s_oCrt:isGT := .T.
RETURN s_oCrt
ENDIF
ELSE
s_oCrt := oCrt
ENDIF
RETURN ooCrt
/*----------------------------------------------------------------------*/

View File

@@ -145,7 +145,7 @@ CLASS WvgHTMLViewer INHERIT WvgActiveXControl
METHOD WvgHTMLViewer:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgActiveXControl:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -155,7 +155,7 @@ METHOD WvgHTMLViewer:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD WvgHTMLViewer:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::mapEvent( evBeforeNavigate, {| cURL, Flags, TFName, PData, Headers | ;
::xBeforeNavigate( cURL, Flags, TFName, PData, Headers ) } )

View File

@@ -148,9 +148,9 @@ CLASS WvgListBox INHERIT WvgWindow, DataRef
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgListBox
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + WS_OVERLAPPED + WS_TABSTOP + LBS_NOTIFY
::style := WS_CHILD + WS_OVERLAPPED + WS_TABSTOP
::exStyle := WS_EX_CLIENTEDGE + WS_EX_LEFT + WS_EX_LTRREADING + WS_EX_RIGHTSCROLLBAR
::className := "LISTBOX"
::objType := objTypeListBox
@@ -182,6 +182,7 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgLi
IF ::visible
::show()
ENDIF
::setPosAndSize()
RETURN Self
@@ -189,30 +190,28 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgLi
METHOD handleEvent( nMessage, aNM ) CLASS WvgListBox
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
CASE nMessage == HB_GTE_COMMAND
IF aNM[ 1 ] == LBN_SELCHANGE
::nCurSelected := WVG_LBGetCurSel( ::hWnd )+ 1
IF hb_isBlock( ::sl_itemMarked )
eval( ::sl_itemMarked, NIL, NIL, self )
ENDIF
ELSEIF aNM[ 1 ] == LBN_DBLCLK
::editBuffer := ::nCurSelected
IF hb_isBlock( ::sl_itemSelected )
eval( ::sl_itemSelected, NIL, NIL, self )
ENDIF
ENDIF
CASE nMessage == HB_GTE_RESIZED
::sendMessage( WM_SIZE, 0, 0 )
RETURN 0
CASE nMessage == HB_GTE_CTLCOLOR
IF hb_isNumeric( ::clr_FG )
WVG_SetTextColor( aNM[ 1 ], ::clr_FG )
@@ -224,26 +223,61 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgListBox
RETURN WVG_GetCurrentBrush( aNM[ 1 ] )
ENDIF
CASE nMessage == HB_GTE_ANY
IF aNM[ 1 ] == WM_LBUTTONUP
::nCurSelected := WVG_LBGetCurSel( ::hWnd ) + 1
IF hb_isBlock( ::sl_itemMarked )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
eval( ::sl_itemMarked, NIL, NIL, self )
IF ::isParentCrt()
::setFocus()
ENDIF
ENDIF
ELSEIF aNM[ 1 ] == WM_LBUTTONDBLCLK
::editBuffer := ::nCurSelected
IF hb_isBlock( ::sl_itemSelected )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
eval( ::sl_itemSelected, NIL, NIL, self )
IF ::isParentCrt()
::setFocus()
ENDIF
RETURN EVENT_HANDELLED
ENDIF
ELSEIF aNM[ 1 ] == WM_KEYUP
IF ::nCurSelected != WVG_LBGetCurSel( ::hWnd ) + 1
::nCurSelected := WVG_LBGetCurSel( ::hWnd ) + 1
IF hb_isBlock( ::sl_itemMarked )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
eval( ::sl_itemMarked, NIL, NIL, self )
IF ::isParentCrt()
::setFocus()
ENDIF
ENDIF
ENDIF
ENDIF
ENDCASE
RETURN 0
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgListBox
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgListBox
hb_traceLog( " %s:destroy()", __objGetClsName() )
::WvgWindow:destroy()
RETURN NIL
/*----------------------------------------------------------------------*/

View File

@@ -165,7 +165,7 @@ METHOD WvgMenuBar:create( oParent, aPresParams, lVisible )
::hMenu := WVG_CreateMenu()
if ::hMenu <> 0
IF ::hMenu <> 0
/* check for if the parent already has a menu
we need to destroy that first
TO DO
@@ -176,15 +176,15 @@ METHOD WvgMenuBar:create( oParent, aPresParams, lVisible )
#endif
/* how to make menu invisible ? */
if ( ::visible )
IF ( ::visible )
#if 0
WVG_ShowWindow( ::oParent:getHWND(), SW_MINIMIZE )
WVG_ShowWindow( ::oParent:getHWND(), SW_NORMAL )
#endif
endif
ENDIF
::oParent:oMenu := Self
endif
ENDIF
RETURN Self

View File

@@ -92,7 +92,6 @@ CLASS WvgMLE INHERIT WvgWindow, DataRef
DATA ignoreTab INIT .F.
DATA bufferLength INIT 32000
DATA changed INIT .F.
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -100,9 +99,9 @@ CLASS WvgMLE INHERIT WvgWindow, DataRef
METHOD destroy()
METHOD handleEvent( nMessage, aNM )
METHOD clear() VIRTUAL
METHOD copyMarked() VIRTUAL
METHOD cutMarked() VIRTUAL
METHOD clear()
METHOD copyMarked()
METHOD cutMarked()
METHOD deleteMarked() VIRTUAL
METHOD delete() VIRTUAL
METHOD pasteMarked() VIRTUAL
@@ -111,7 +110,7 @@ CLASS WvgMLE INHERIT WvgWindow, DataRef
METHOD setFirstChar() VIRTUAL
METHOD setMarked() VIRTUAL
METHOD insert() VIRTUAL
METHOD charFromLine() VIRTUAL
METHOD charFromLine( nLine ) VIRTUAL
METHOD lineFromChar() VIRTUAL
METHOD pos() VIRTUAL
@@ -130,13 +129,15 @@ CLASS WvgMLE INHERIT WvgWindow, DataRef
ACCESS vScroll INLINE ::sl_vScroll
ASSIGN vScroll( bBlock ) INLINE ::sl_vScroll := bBlock
METHOD changed( lChanged ) SETGET
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgMLE
METHOD WvgMLE:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + ES_MULTILINE + ES_WANTRETURN
::exStyle := WS_EX_CLIENTEDGE
@@ -147,7 +148,7 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgMLE
/*----------------------------------------------------------------------*/
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgMLE
METHOD WvgMLE:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -182,25 +183,20 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgML
IF ::visible
::show()
ENDIF
::setPosAndSize()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD handleEvent( nMessage, aNM ) CLASS WvgMLE
METHOD WvgMLE:handleEvent( nMessage, aNM )
hb_traceLog( " %s:handleEvent( %i )", __objGetClsName( self ), nMessage )
DO CASE
CASE nMessage == HB_GTE_COMMAND
DO CASE
CASE aNM[ NMH_code ] == EN_CHANGE
::changed := .t.
CASE aNM[ NMH_code ] == EN_UPDATE
CASE aNM[ NMH_code ] == EN_MAXTEXT
CASE aNM[ NMH_code ] == EN_KILLFOCUS
IF hb_isBlock( ::sl_killInputFocus )
eval( ::sl_killInputFocus, NIL, NIL, Self )
@@ -221,6 +217,10 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgMLE
eval( ::sl_vScroll, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == EN_CHANGE
CASE aNM[ NMH_code ] == EN_UPDATE
CASE aNM[ NMH_code ] == EN_MAXTEXT
ENDCASE
CASE nMessage == HB_GTE_CTLCOLOR
@@ -234,13 +234,46 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgMLE
RETURN WVG_GetCurrentBrush( aNM[ 1 ] )
ENDIF
CASE nMessage == HB_GTE_ANY
IF ::isParentCrt()
DO CASE
CASE aNM[ NMH_code ] == WM_KEYDOWN
IF aNM[ 2 ] == VK_TAB
::oParent:setFocus()
RETURN EVENT_HANDELLED
ENDIF
CASE aNM[ NMH_code ] == WM_KILLFOCUS
IF hb_isBlock( ::sl_killInputFocus )
eval( ::sl_killInputFocus, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == WM_SETFOCUS
IF hb_isBlock( ::sl_setInputFocus )
eval( ::sl_setInputFocus, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == WM_HSCROLL
IF hb_isBlock( ::sl_hScroll )
eval( ::sl_hScroll, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == WM_VSCROLL
IF hb_isBlock( ::sl_vScroll )
eval( ::sl_vScroll, NIL, NIL, Self )
ENDIF
ENDCASE
ENDIF
ENDCASE
RETURN 0
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgMLE
METHOD WvgMLE:destroy()
hb_traceLog( " %s:destroy()", __objGetClsName( self ) )
@@ -249,3 +282,56 @@ METHOD destroy() CLASS WvgMLE
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD WvgMLE:changed( lChanged )
LOCAL lChg := ::sendMessage( EM_GETMODIFY, 0, 0 )
IF hb_isLogical( lChanged )
::sendMessage( EM_SETMODIFY, iif( lChanged, 0, 1 ), 0 )
ENDIF
RETURN lChg
/*----------------------------------------------------------------------*/
METHOD WvgMLE:clear()
LOCAL cText := ::getData()
::setData( "" )
RETURN len( cText )
/*----------------------------------------------------------------------*/
METHOD WvgMLE:copyMarked()
LOCAL n, nB, nE
n := ::sendMessage( EM_GETSEL )
nB := WVG_LOWORD( n )
nE := WVG_HIWORD( n )
IF ( n := nE - nB ) > 0
Wvt_SetClipboard( substr( ::getData(), nB, n ) )
ENDIF
RETURN n
/*----------------------------------------------------------------------*/
METHOD WvgMLE:cutMarked()
LOCAL n, nB, nE, cText
n := ::sendMessage( EM_GETSEL )
nB := WVG_LOWORD( n )
nE := WVG_HIWORD( n )
IF ( n := nE - nB ) > 0
cText := ::getData()
::setData( substr( cText, 1, nB-1 ) + substr( cText, nE ) )
ENDIF
RETURN n
/*----------------------------------------------------------------------*/

View File

@@ -258,18 +258,18 @@ function InsertPaint( cID, aPaint, lSet )
/* nMode : 0 == Rows/cols - DEFAULT 1 == DlagUnits as from any standard dialog definition */
FUNCTION Wvt_SetDlgCoMode( nMode )
LOCAL nOldMode
STATIC sMode := 0
nOldMode := sMode
IF hb_isNumeric( nMode ) .and. nMode <= 1 .and. nMode >= 0
IF hb_isNumeric( nMode ) .and. nMode <= 1 .and. nMode >= 0
sMode := nMode
ENDIF
ENDIF
RETURN nOldMode
/*----------------------------------------------------------------------*/
FUNCTION Wvt_MakeDlgTemplate( nTop, nLeft, nRows, nCols, aOffSet, cTitle, nStyle, ;
cFaceName, nPointSize, nWeight, lItalic, nHelpId, nExStyle )
@@ -279,7 +279,7 @@ FUNCTION Wvt_MakeDlgTemplate( nTop, nLeft, nRows, nCols, aOffSet, cTitle, nStyle
LOCAL nBaseUnits, nBaseUnitsX, nBaseUnitsY
LOCAL aFont
LOCAL nMode := Wvt_SetDlgCoMode()
aFont := Wvt_GetFontInfo()
IF nMode == 0
@@ -293,16 +293,16 @@ FUNCTION Wvt_MakeDlgTemplate( nTop, nLeft, nRows, nCols, aOffSet, cTitle, nStyle
nBaseUnits := WVG_GetDialogBaseUnits()
nBaseUnitsX := WVG_LOWORD( nBaseUnits )
nBaseUnitsY := WVG_HIWORD( nBaseUnits )
nW := aFont[ 7 ] * nCols + aOffSet[ 4 ]
nH := aFont[ 6 ] * nRows + aOffSet[ 3 ]
/* Position it exactly where user has requested */
aXY := Wvt_ClientToScreen( nTop,nLeft )
nX := aXY[ 1 ] + aOffSet[ 2 ]
nY := aXY[ 2 ] + aOffSet[ 1 ]
/* MSDN says DlgBaseUnits and Screen Coordinates has multiplier of 4,8 for x & Y.
* But in my practice, the values below are 99% accurate.
* I have tested it on many fonts but on 1280/800 resolution.
@@ -310,17 +310,17 @@ FUNCTION Wvt_MakeDlgTemplate( nTop, nLeft, nRows, nCols, aOffSet, cTitle, nStyle
*/
nXM := 5.25
nYM := 10.25
nX := ( nX * nXM / nBaseUnitsX )
nY := ( nY * nYM / nBaseUnitsY )
nW := ( nW * nXM / nBaseUnitsX )
nH := ( nH * nYM / nBaseUnitsY )
ELSE
ELSE
nX := nLeft
nY := nTop
nW := nCols
nH := nRows
ENDIF
ENDIF
If !ISNUMBER( nStyle )
nStyle := + WS_CAPTION + WS_SYSMENU ;
@@ -359,44 +359,44 @@ Function Wvt_AddDlgItem( aDlg, nTop, nLeft, nRows, nCols, aOffSet,;
LOCAL nBottom, nRight
LOCAL nMode := Wvt_SetDlgCoMode()
IF nMode == 0
IF nMode == 0
nBottom := nTop + nRows - 1
nRight := nLeft + nCols - 1
DEFAULT aOffSet TO {}
aSize( aOffSet,4 )
DEFAULT aOffSet[ 1 ] TO 0
DEFAULT aOffSet[ 2 ] TO 0
DEFAULT aOffSet[ 3 ] TO 0
DEFAULT aOffSet[ 4 ] TO 0
nBaseUnits := WVG_GetDialogBaseUnits()
nBaseUnitsX := WVG_LOWORD( nBaseUnits )
nBaseUnitsY := WVG_HIWORD( nBaseUnits )
aXY := Wvt_GetXYFromRowCol( nTop, nLeft )
nX := aXY[ 1 ] + aOffSet[ 2 ]
nY := aXY[ 2 ] + aOffSet[ 1 ]
aXY := Wvt_GetXYFromRowCol( nBottom+1, nRight+1 )
nW := aXY[ 1 ] + aOffSet[ 4 ] - nX
nH := aXY[ 2 ] + aOffSet[ 3 ] - nY
nXM := 5.25
nYM := 10.25
nX := ( nX * nXM / nBaseUnitsX )
nY := ( nY * nYM / nBaseUnitsY )
nW := ( nW * nXM / nBaseUnitsX )
nH := ( nH * nYM / nBaseUnitsY )
ELSE
ELSE
nX := nLeft
nY := nTop
nW := nCols
nH := nRows
ENDIF
ENDIF
aDlg[ 1,4 ]++ /* item count */
@@ -479,7 +479,7 @@ Function Wvt_DialogBox( acnDlg, cbDlgProc, hWndParent )
nResult := Wvt_CreateDialogModal( xTemplate, .f., cbDlgProc, nDlgMode, hWndParent )
Wvg_SetFocus( hWndParent )
Return nResult
/*----------------------------------------------------------------------*/
@@ -500,32 +500,32 @@ Returns: If OFN_ALLOWMULTISELECT ? Array of files selected : FileName.
*/
FUNCTION WVT_GetOpenFileName( hWnd, cPath, cTitle, acFilter, nFlags, cInitDir, cDefExt, nFilterIndex, cDefName )
LOCAL cRet, aTmp, xRet, i
HB_SYMBOL_UNUSED( hWnd )
DEFAULT cPath TO ""
DEFAULT nFlags TO OFN_EXPLORER + OFN_NOCHANGEDIR
/* WIN_GETOPENFILENAME( [[@]<nFlags>], [<cTitle>], [<cInitDir>], [<cDefExt>],;
* [<acFilter>], [[@]<nFilterIndex>], [<nBufferSize>], [<cDefName>] )
* -> <cFilePath> | <cPath> + e"\0" + <cFile1> [ + e"\0" + <cFileN> ] | ""
*/
cRet := WIN_GetOpenFileName( @nFlags, cTitle, cInitDir, cDefExt, acFilter, @nFilterIndex, /*nBufferSize*/, cDefName )
IF WVG_And( nFlags, OFN_ALLOWMULTISELECT ) > 0
IF WVG_And( nFlags, OFN_ALLOWMULTISELECT ) > 0
xRet := {}
IF ! empty( aTmp := hb_aTokens( cRet, chr( 0 ) ) )
cPath := aTmp[ 1 ]
FOR i := 2 TO len( aTmp )
aadd( xRet, cPath + "\" + aTmp[ i ] )
NEXT
ENDIF
ELSE
xRet := cRet
ENDIF
RETURN xRet
NEXT
ENDIF
ELSE
xRet := cRet
ENDIF
RETURN xRet
/*----------------------------------------------------------------------*/
/*
Wvt_GetSaveFileName( hWnd, cDefFile, cTitle, acFilter, nFlags, cInitDir, cDefExt, @nFilterIndex )
@@ -546,28 +546,28 @@ FUNCTION WVT_GetSaveFileName( hWnd, cDefName, cTitle, acFilter, nFlags, cInitDir
LOCAL cRet, aTmp, xRet, i, cPath
HB_SYMBOL_UNUSED( hWnd )
DEFAULT nFlags TO OFN_EXPLORER + OFN_NOCHANGEDIR
/* WIN_GETSAVEFILENAME( [[@]<nFlags>], [<cTitle>], [<cInitDir>], [<cDefExt>],;
* [<acFilter>], [[@]<nFilterIndex>], [<nBufferSize>], [<cDefName>] )
* -> <cFilePath> | <cPath> + e"\0" + <cFile1> [ + e"\0" + <cFileN> ] | ""
*/
cRet := WIN_GetSaveFileName( @nFlags, cTitle, cInitDir, cDefExt, acFilter, @nFilterIndex, /*nBufferSize*/, cDefName )
IF WVG_And( nFlags, OFN_ALLOWMULTISELECT ) > 0
IF WVG_And( nFlags, OFN_ALLOWMULTISELECT ) > 0
xRet := {}
IF ! empty( aTmp := hb_aTokens( cRet, chr( 0 ) ) )
cPath := aTmp[ 1 ]
FOR i := 2 TO len( aTmp )
aadd( xRet, cPath + "\" + aTmp[ i ] )
NEXT
ENDIF
ELSE
xRet := cRet
ENDIF
RETURN xRet
NEXT
ENDIF
ELSE
xRet := cRet
ENDIF
RETURN xRet
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
@@ -647,6 +647,58 @@ FUNCTION Wvt_GetRGBColor( nIndex )
RETURN Hb_GtInfo( HB_GTI_PALETTE, nIndex )
/*----------------------------------------------------------------------*/
#define BLACK RGB( 0x0 ,0x0 ,0x0 )
#define BLUE RGB( 0x0 ,0x0 ,0x85 )
#define GREEN RGB( 0x0 ,0x85,0x0 )
#define CYAN RGB( 0x0 ,0x85,0x85 )
#define RED RGB( 0x85,0x0 ,0x0 )
#define MAGENTA RGB( 0x85,0x0 ,0x85 )
#define BROWN RGB( 0x85,0x85,0x0 )
#define LIGHT_GRAY RGB( 0xC6,0xC6,0xC6 )
#define GRAY RGB( 0x60,0x60,0x60 )
#define BRIGHT_BLUE RGB( 0x00,0x00,0xFF )
#define BRIGHT_GREEN RGB( 0x60,0xFF,0x60 )
#define BRIGHT_CYAN RGB( 0x60,0xFF,0xFF )
#define BRIGHT_RED RGB( 0xF8,0x00,0x26 )
#define BRIGHT_MAGENTA RGB( 0xFF,0x60,0xFF )
#define YELLOW RGB( 0xFF,0xFF,0x00 )
#define WHITE RGB( 0xFF,0xFF,0xFF )
FUNCTION Wvt_GetRGBColorByString( cColor, nForeBack )
LOCAL s, n, lEnh
LOCAL nIndex := 0
LOCAL a_:= { "N", "B", "G", "BG", "R", "RB", "GR", "W" }
nForeBack := iif( hb_isNumeric( nForeBack ), nForeBack, 0 )
IF hb_isChar( cColor )
IF ( n := at( cColor, "/" ) ) > 0
IF nForeBack == 0
s := substr( cColor, 1, n-1 )
ELSE
s := substr( cColor, n+1 )
ENDIF
ELSE
s := cColor
ENDIF
s := upper( s )
lEnh := ( "*" $ s ) .OR. ( "+" $ s )
IF lEnh
s := strtran( s, "*" )
s := strtran( s, "+" )
ENDIF
nIndex := ascan( a_, {|e| e == s } )
IF nIndex > 0
IF lEnh
nIndex += 8
ENDIF
nIndex--
ENDIF
ENDIF
RETURN Hb_GtInfo( HB_GTI_PALETTE, nIndex )
/*----------------------------------------------------------------------*/
FUNCTION Wvt_SetAltF4Close( lSetClose )

View File

@@ -80,7 +80,7 @@ CLASS WvgPartHandler
DATA cargo
METHOD init( oParent, oOwner )
METHOD new( oParent, oOwner )
METHOD create( oParent, oOwner )
METHOD configure( oParent, oOwner )
METHOD destroy()
@@ -107,7 +107,7 @@ CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD init( oParent, oOwner ) CLASS WvgPartHandler
METHOD WvgPartHandler:new( oParent, oOwner )
::oParent := oParent
::oOwner := oOwner
@@ -116,7 +116,7 @@ METHOD init( oParent, oOwner ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD create( oParent, oOwner ) CLASS WvgPartHandler
METHOD WvgPartHandler:create( oParent, oOwner )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
@@ -128,7 +128,7 @@ METHOD create( oParent, oOwner ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD configure( oParent, oOwner ) CLASS WvgPartHandler
METHOD WvgPartHandler:configure( oParent, oOwner )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
@@ -140,7 +140,7 @@ METHOD configure( oParent, oOwner ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgPartHandler
METHOD WvgPartHandler:destroy()
::hChildren := NIL
::nNameId := NIL
@@ -151,7 +151,7 @@ METHOD destroy() CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD handleEvent( hEvent, mp1, mp2 ) CLASS WvgPartHandler
METHOD WvgPartHandler:handleEvent( hEvent, mp1, mp2 )
HB_SYMBOL_UNUSED( hEvent )
HB_SYMBOL_UNUSED( mp1 )
@@ -161,13 +161,13 @@ METHOD handleEvent( hEvent, mp1, mp2 ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD status() CLASS WvgPartHandler
METHOD WvgPartHandler:status()
RETURN ::nStatus
/*----------------------------------------------------------------------*/
METHOD addChild( oWvg ) CLASS WvgPartHandler
METHOD WvgPartHandler:addChild( oWvg )
oWvg:nNameID := oWvg:nID
aadd( ::aChildren, oWvg )
@@ -176,7 +176,7 @@ METHOD addChild( oWvg ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD childFromName( nNameId ) CLASS WvgPartHandler
METHOD WvgPartHandler:childFromName( nNameId )
LOCAL i, oWvg
FOR i := 1 TO len( ::aChildren )
@@ -189,13 +189,13 @@ METHOD childFromName( nNameId ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD childList() CLASS WvgPartHandler
METHOD WvgPartHandler:childList()
RETURN ::aChildren
/*----------------------------------------------------------------------*/
METHOD delChild( oWvg ) CLASS WvgPartHandler
METHOD WvgPartHandler:delChild( oWvg )
LOCAL n
n := ascan( ::aChildren, {|o| o == oWvg } )
@@ -209,7 +209,7 @@ METHOD delChild( oWvg ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD setName( nNameId ) CLASS WvgPartHandler
METHOD WvgPartHandler:setName( nNameId )
LOCAL nOldNameId := ::nNameId
IF Valtype( nNameId ) == "N"
@@ -220,7 +220,7 @@ METHOD setName( nNameId ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD setOwner( oWvg ) CLASS WvgPartHandler
METHOD WvgPartHandler:setOwner( oWvg )
LOCAL oOldXbp := ::oOwner
IF valtype( oWvg ) == "O"
@@ -231,7 +231,7 @@ METHOD setOwner( oWvg ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD setParent( oWvg ) CLASS WvgPartHandler
METHOD WvgPartHandler:setParent( oWvg )
LOCAL oOldXbp := ::oParent
IF valtype( oWvg ) == "O"
@@ -242,7 +242,7 @@ METHOD setParent( oWvg ) CLASS WvgPartHandler
/*----------------------------------------------------------------------*/
METHOD notifier( nEvent, xParams ) CLASS WvgPartHandler
METHOD WvgPartHandler:notifier( nEvent, xParams )
Local aPos, aMenuItem, nIndex, nCtrlID, oObj
LOCAL nReturn := 0

View File

@@ -86,7 +86,7 @@ CLASS WvgPushButton INHERIT WvgWindow
DATA autosize INIT .F.
DATA border INIT .T.
DATA caption INIT ""
DATA caption INIT NIL
DATA pointerFocus INIT .T.
DATA preSelect INIT .F.
DATA drawMode INIT WVG_DRAW_NORMAL
@@ -110,11 +110,11 @@ CLASS WvgPushButton INHERIT WvgWindow
/*----------------------------------------------------------------------*/
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
METHOD WvgPushButton:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + BS_PUSHBUTTON /*+ BS_NOTIFY + BS_PUSHLIKE */
::style := WS_CHILD + BS_PUSHBUTTON /* + BS_NOTIFY + BS_PUSHLIKE */
::className := "BUTTON"
::objType := objTypePushButton
@@ -122,19 +122,35 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushB
/*----------------------------------------------------------------------*/
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
METHOD WvgPushButton:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
IF hb_isNumeric( ::caption )
::style += BS_BITMAP
ELSEIF hb_isChar( ::caption )
IF ".ICO" == upper( right( ::caption, 4 ) )
::style += BS_ICON
ELSEIF ".BMP" == upper( right( ::caption, 4 ) )
::style += BS_BITMAP
ENDIF
ENDIF
IF ! ::border
::style += BS_FLAT
ENDIF
::oParent:AddChild( SELF )
::createControl()
::SetWindowProcCallback()
// IF ::isParentCrt()
::SetWindowProcCallback()
// ENDIF
IF ::visible
::show()
ENDIF
::setPosAndSize()
::setCaption( ::caption )
@@ -142,25 +158,26 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPu
/*----------------------------------------------------------------------*/
METHOD handleEvent( nMessage, aNM ) CLASS WvgPushButton
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
METHOD WvgPushButton:handleEvent( nMessage, aNM )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
IF hb_isBlock( ::sl_resize )
eval( ::sl_resize, NIL, NIL, self )
RETURN EVENT_HANDELLED
ENDIF
CASE nMessage == HB_GTE_COMMAND
IF hb_isBlock( ::sl_lbClick )
eval( ::sl_lbClick, NIL, NIL, self )
RETURN EVENT_HANDELLED
ENDIF
CASE nMessage == HB_GTE_NOTIFY
// Will never be issued because pushbutton sends WM_COMMAND
CASE nMessage == HB_GTE_CTLCOLOR
IF hb_isNumeric( ::clr_FG )
@@ -171,44 +188,60 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgPushButton
RETURN ::hBrushBG
ENDIF
CASE nMessage == HB_GTE_ANY
IF aNM[ 1 ] == WM_LBUTTONUP
IF hb_isBlock( ::sl_lbClick )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
eval( ::sl_lbClick, NIL, NIL, Self )
ENDIF
ENDIF
ENDCASE
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgPushButton
hb_traceLog( " %s:destroy()", __objGetClsName() )
METHOD WvgPushButton:destroy()
::wvgWindow:destroy()
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgPushButton
METHOD WvgPushButton:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD setCaption( xCaption, cDll ) CLASS WvgPushButton
METHOD WvgPushButton:setCaption( xCaption, cDll )
DEFAULT xCaption TO ::caption
HB_SYMBOL_UNUSED( cDll )
IF hb_isChar( xCaption )
::caption := xCaption
WVG_SendMessageText( ::hWnd, WM_SETTEXT, 0, ::caption )
IF ".ICO" == upper( right( ::caption, 4 ) )
WVG_SendMessage( ::hWnd, BM_SETIMAGE, IMAGE_ICON, WVG_LoadImage( ::caption, 2, IMAGE_ICON ) )
ELSEIF ".BMP" == upper( right( ::caption, 4 ) )
WVG_SendMessage( ::hWnd, BM_SETIMAGE, IMAGE_BITMAP, WVG_LoadImage( ::caption, 2, IMAGE_BITMAP ) )
ELSE
WVG_SendMessageText( ::hWnd, WM_SETTEXT, 0, ::caption )
ENDIF
ELSEIF hb_isNumeric( xCaption ) /* Handle to the bitmap */
::caption := xCaption
WVG_SendMessage( ::hWnd, BM_SETIMAGE, IMAGE_BITMAP, ::caption )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD activate( xParam ) CLASS WvgPushButton
METHOD WvgPushButton:activate( xParam )
IF hb_isBlock( xParam ) .OR. ( xParam == NIL )
::sl_lbClick := xParam
@@ -218,7 +251,7 @@ METHOD activate( xParam ) CLASS WvgPushButton
/*----------------------------------------------------------------------*/
METHOD draw( xParam ) CLASS WvgPushButton
METHOD WvgPushButton:draw( xParam )
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
::sl_paint := xParam

View File

@@ -106,7 +106,7 @@ CLASS WvgRadioButton INHERIT WvgWindow, DataRef
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgRadioButton
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + BS_AUTORADIOBUTTON
::className := "BUTTON"

View File

@@ -151,7 +151,7 @@ CLASS WvgScrollBar INHERIT WvgWindow, DataRef
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgScrollBar
::WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::WvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD /* + SBS_SIZEBOX + SBS_SIZEGRIP */
::className := "SCROLLBAR"
@@ -175,13 +175,16 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSc
::createControl()
::SetWindowProcCallback()
IF ::isParentCrt()
::SetWindowProcCallback()
ENDIF
::setRange( ::range )
IF ::visible
::show()
ENDIF
::setPosAndSize()
#if 0
si IS SCROLLINFO
@@ -189,9 +192,9 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSc
cSI := si:value
IF WAPI_GetScrollInfo( ::pWnd, SB_CTL, @cSI )
si:buffer( cSI )
hb_traceLog( "scrollinfo nMin=%i nMax=%i", si:nMin, si:nMax )
ENDIF
#endif
RETURN Self
/*----------------------------------------------------------------------*/
@@ -203,6 +206,12 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgScrollBar
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
CASE nMessage == HB_GTE_CTLCOLOR
IF hb_isNumeric( ::hBrushBG )
WVG_SetBkMode( aNM[ 1 ], 1 )

View File

@@ -6,7 +6,7 @@
* Harbour Project source code:
* Source file for the Wvg*Classes
*
* Copyright 2008 Pritpal Bedi <pritpal@vouchcac.com>
* Copyright 2008-2011 Pritpal Bedi <bedipritpal@hotmail.com>
* http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
@@ -58,7 +58,7 @@
*
* Xbase++ xbpSLE compatible Class
*
* Pritpal Bedi <pritpal@vouchcac.com>
* Pritpal Bedi <bedipritpal@hotmail.com>
* 07Dec2008
*/
/*----------------------------------------------------------------------*/
@@ -93,17 +93,15 @@ CLASS WvgSLE INHERIT WvgWindow, DataRef
DATA editable INIT .T.
DATA unReadable INIT .F.
DATA changed INIT .F.
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) VIRTUAL
METHOD destroy()
METHOD handleEvent( nMessage, aNM )
METHOD clear() VIRTUAL
METHOD copyMarked() VIRTUAL
METHOD cutMarked() VIRTUAL
METHOD clear()
METHOD copyMarked()
METHOD cutMarked()
METHOD delMarked() VIRTUAL
METHOD editBuffer() VIRTUAL
METHOD pasteMarked() VIRTUAL
@@ -122,13 +120,18 @@ CLASS WvgSLE INHERIT WvgWindow, DataRef
ACCESS typeOut INLINE ::sl_typeOut
ASSIGN typeOut( bBlock ) INLINE ::sl_typeOut := bBlock
METHOD changed( lChanged ) SETGET
DATA sl_returnPressed
METHOD returnPressed( ... ) SETGET
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSLE
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD
::className := "EDIT"
@@ -171,6 +174,7 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSL
IF ::visible
::show()
ENDIF
::setPosAndSize()
IF hb_isObject( ::datalink )
eval( ::datalink )
@@ -187,10 +191,16 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgSLE
hb_traceLog( " %s:handleEvent( %i )", __objGetClsName( self ), nMessage )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
::oParent:sendMessage( WM_SETFOCUS, 0, 0 )
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
CASE nMessage == HB_GTE_COMMAND
DO CASE
CASE aNM[ NMH_code ] == EN_CHANGE
::changed := .t.
CASE aNM[ NMH_code ] == EN_UPDATE
@@ -219,9 +229,36 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgSLE
RETURN WVG_GetCurrentBrush( aNM[ 1 ] )
ENDIF
CASE nMessage == HB_GTE_ANY
IF ::IsParentCrt()
DO CASE
CASE aNM[ NMH_code ] == WM_KILLFOCUS
IF hb_isBlock( ::sl_killInputFocus )
eval( ::sl_killInputFocus, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == WM_SETFOCUS
IF hb_isBlock( ::sl_setInputFocus )
eval( ::sl_setInputFocus, NIL, NIL, Self )
ENDIF
CASE aNM[ NMH_code ] == WM_KEYDOWN
IF aNM[ 2 ] == K_ENTER
::oParent:setFocus()
IF hb_isBlock( ::sl_returnPressed )
eval( ::sl_returnPressed, NIL, NIL, Self )
ENDIF
ELSEIF aNM[ 2 ] == VK_TAB
::oParent:setFocus()
RETURN EVENT_HANDELLED
ENDIF
ENDCASE
ENDIF
ENDCASE
RETURN 1
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
@@ -234,3 +271,66 @@ METHOD destroy() CLASS WvgSLE
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD WvgSLE:changed( lChanged )
LOCAL lChg := ::sendMessage( EM_GETMODIFY, 0, 0 )
IF hb_isLogical( lChanged )
::sendMessage( EM_SETMODIFY, iif( lChanged, 0, 1 ), 0 )
ENDIF
RETURN lChg
/*----------------------------------------------------------------------*/
METHOD WvgSLE:clear()
LOCAL cText := ::getData()
::setData( "" )
RETURN len( cText )
/*----------------------------------------------------------------------*/
METHOD WvgSLE:copyMarked()
LOCAL n, nB, nE
n := ::sendMessage( EM_GETSEL )
nB := WVG_LOWORD( n )
nE := WVG_HIWORD( n )
IF ( n := nE - nB ) > 0
Wvt_SetClipboard( substr( ::getData(), nB, n ) )
ENDIF
RETURN n
/*----------------------------------------------------------------------*/
METHOD WvgSLE:cutMarked()
LOCAL n, nB, nE, cText
n := ::sendMessage( EM_GETSEL )
nB := WVG_LOWORD( n )
nE := WVG_HIWORD( n )
IF ( n := nE - nB ) > 0
cText := ::getData()
::setData( substr( cText, 1, nB-1 ) + substr( cText, nE ) )
ENDIF
RETURN n
/*----------------------------------------------------------------------*/
METHOD WvgSLE:returnPressed( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. hb_isBlock( a_[ 1 ] )
::sl_returnPressed := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. hb_isBlock( ::sl_returnPressed )
eval( ::sl_returnPressed, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -110,7 +110,7 @@ CLASS WvgStatusBar INHERIT WvgWindow /* WvgActiveXControl */
METHOD WvgStatusBar:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + WS_BORDER + SBARS_TOOLTIPS
::className := STATUSCLASSNAME

View File

@@ -107,7 +107,7 @@ CLASS WvgStatic INHERIT WvgWindow
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatic
::wvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
/* SS_NOTIFY SS_ETCHEDFRAME SS_SUNKEN SS_WHITERECT */
@@ -205,7 +205,7 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSt
EXIT
CASE WVGSTATIC_TYPE_RECESSEDLINE
EXIT
END /* ::type */
ENDSWITCH /* ::type */
#if 1
/* Options */
@@ -233,11 +233,12 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSt
::createControl()
::SetWindowProcCallback()
::SetWindowProcCallback() /* Static must not be subject to GT dependent */
IF ::visible
::show()
ENDIF
::setPosAndSize()
::setCaption( ::caption )
@@ -247,15 +248,16 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgSt
METHOD handleEvent( nMessage, aNM ) CLASS WvgStatic
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
DO CASE
CASE nMessage == HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
IF hb_isBlock( ::sl_resize )
eval( ::sl_resize, NIL, NIL, self )
aeval( ::aChildren, {|o| o:handleEvent( HB_GTE_RESIZED, { 0, 0, 0, 0, 0 } ) } )
RETURN 0
RETURN EVENT_HANDELLED
ENDIF
CASE nMessage == HB_GTE_CTLCOLOR
@@ -269,20 +271,22 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgStatic
RETURN WVG_GetCurrentBrush( aNM[ 1 ] )
ENDIF
CASE nMessage == HB_GTE_ANY
IF ::IsParentCrt()
ENDIF
ENDCASE
RETURN 1
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgStatic
hb_traceLog( " %s:destroy()", __objGetClsName() )
IF ::hBitmap <> nil
WVG_DeleteObject( ::hBitmap )
ENDIF
::wvgWindow:destroy()
RETURN NIL
@@ -290,9 +294,7 @@ METHOD destroy() CLASS WvgStatic
/*----------------------------------------------------------------------*/
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgStatic
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -126,7 +126,7 @@ METHOD WvgSysWindow:new( oParent, oOwner, aPos )
::oOwner := oOwner
::aPos := aPos
::WvgPartHandler:INIT( oParent, oOwner )
::WvgPartHandler:new( oParent, oOwner )
RETURN Self

View File

@@ -135,7 +135,7 @@ METHOD WvgToolBar:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
#if 0
+ TBSTYLE_LIST caption to the right, otherwise caption to the bottom
::style := WS_CHILD + TBSTYLE_FLAT + CCS_ADJUSTABLE + CCS_NODIVIDER +CCS_VERT
::style := WS_CHILD + TBSTYLE_FLAT + CCS_ADJUSTABLE + CCS_NODIVIDER + CCS_VERT
#endif
::exStyle := TBSTYLE_EX_DOUBLEBUFFER + TBSTYLE_EX_MIXEDBUTTONS
@@ -182,7 +182,7 @@ METHOD WvgToolBar:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
* so the parent of toolbar will process them anyway
* All other functionality should be default until ownerdraw is introduced.
*/
::SetWindowProcCallback()
::SetWindowProcCallback()
#endif
IF !empty( ::hWnd )
@@ -209,18 +209,18 @@ METHOD WvgToolBar:handleEvent( nMessage, aNM )
SWITCH nMessage
CASE HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
RETURN 0
RETURN EVENT_HANDELLED
CASE HB_GTE_COMMAND
EXIT
CASE HB_GTE_NOTIFY
aNMMouse := Wvg_GetNMMouseInfo( aNM[ 2 ] )
#if 0
hb_traceLog( " %s:handleEvent( %i ) %i %i", __ObjGetClsName( self ), nMessage,;
aNMMouse[ NMH_code ], TBN_GETINFOTIPA )
#endif
DO CASE
CASE aNMMouse[ NMH_code ] == NM_CLICK
@@ -232,14 +232,6 @@ METHOD WvgToolBar:handleEvent( nMessage, aNM )
ENDIF
RETURN EVENT_HANDELLED
#if 0
CASE aNMMouse[ NMH_code ] == TBN_GETINFOTIPA
IF ( nObj := ascan( ::aItems, {|e_| e_[ 1 ] == aNMMouse[ NMH_dwItemSpec ] } ) ) > 0
Wvg_SetToolbarButtonTip( aNM[ 2 ], "This is grand tooltip" )
RETURN EVENT_HANDELLED
ENDIF
#endif
OTHERWISE
RETURN EVENT_UNHANDELLED

View File

@@ -119,8 +119,9 @@ CLASS WvgTreeView INHERIT WvgWindow, DataRef
DATA textParentSelected INIT ""
DATA textItemSelected INIT ""
METHOD setColorFG( nRGB ) INLINE WVG_TreeView_SetTextColor( ::hWnd, nRGB )
METHOD setColorBG( nRGB ) INLINE WVG_TreeView_SetBkColor( ::hWnd, nRGB )
METHOD getSelectionInfo( nlParam )
METHOD setColorFG( nRGB ) INLINE WVG_TreeView_SetTextColor( ::hWnd, iif( hb_isChar( nRGB ), Wvt_GetRGBColorByString( nRGB, 0 ), nRGB ) )
METHOD setColorBG( nRGB ) INLINE WVG_TreeView_SetBkColor( ::hWnd, iif( hb_isChar( nRGB ), Wvt_GetRGBColorByString( nRGB, 1 ), nRGB ) )
METHOD setColorLines( nRGB ) INLINE WVG_TreeView_SetLineColor( ::hWnd, nRGB )
METHOD showExpanded( lExpanded, nLevels ) INLINE Wvg_TreeView_ShowExpanded( ::hWnd, ;
iif( hb_isNil( lExpanded ), .f., lExpanded ), nLevels )
@@ -129,12 +130,12 @@ CLASS WvgTreeView INHERIT WvgWindow, DataRef
/*----------------------------------------------------------------------*/
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTreeView
METHOD WvgTreeView:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::style := WS_CHILD + WS_TABSTOP + WS_CLIPSIBLINGS
::exStyle := WS_EX_STATICEDGE /*+ TVS_EX_FADEINOUTEXPANDOS */
::exStyle := WS_EX_CLIENTEDGE // WS_EX_STATICEDGE /*+ TVS_EX_FADEINOUTEXPANDOS */
::className := "SysTreeView32"
::objType := objTypeTreeView
@@ -143,7 +144,7 @@ METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTreeV
/*----------------------------------------------------------------------*/
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTreeView
METHOD WvgTreeView:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::wvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -161,24 +162,43 @@ METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTr
::createControl()
::SetWindowProcCallback()
IF ::visible
::show()
ENDIF
// ::SetWindowProcCallback() /* Let parent control the events */
::oRootItem := WvgTreeViewItem():New()
::oRootItem:hTree := ::hWnd
::oRootItem:oWnd := Self
IF ::visible
::show()
ENDIF
::setPosAndSize( ::aPos, ::aSize )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD handleEvent( nMessage, aNM ) CLASS WvgTreeView
LOCAL hItemSelected, hParentOfSelected, n, aNMHdr
METHOD WvgTreeView:getSelectionInfo( nlParam )
LOCAL hItemSelected, hParentOfSelected
LOCAL cParent := space( 20 )
LOCAL cText := space( 20 )
LOCAL n
Wvg_TreeView_GetSelectionInfo( ::hWnd, nlParam, @cParent, @cText, @hParentOfSelected, @hItemSelected )
::hParentSelected := hParentOfSelected
::hItemSelected := hItemSelected
::textParentSelected := trim( cParent )
::textItemSelected := trim( cText )
IF ( n := ascan( ::aItems, {|o| o:hItem == hItemSelected } ) ) > 0
::oItemSelected := ::aItems[ n ]
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgTreeView:handleEvent( nMessage, aNM )
LOCAL aHdr
hb_traceLog( " %s:handleEvent( %i )", __ObjGetClsName( self ), nMessage )
@@ -186,8 +206,10 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgTreeView
SWITCH nMessage
CASE HB_GTE_RESIZED
IF ::isParentCrt()
::rePosition()
ENDIF
::sendMessage( WM_SIZE, 0, 0 )
RETURN EVENT_HANDELLED
CASE HB_GTE_COMMAND
IF hb_isBlock( ::sl_lbClick )
@@ -197,52 +219,68 @@ METHOD handleEvent( nMessage, aNM ) CLASS WvgTreeView
EXIT
CASE HB_GTE_NOTIFY
aHdr := Wvg_GetNMHdrInfo( aNM[ 2 ] )
aNMHdr := Wvg_GetNMTreeViewInfo( aNM[ 2 ] )
aHdr := Wvg_GetNMTreeViewInfo( aNM[ 2 ] )
DO CASE
CASE aHdr[ NMH_code ] == NM_DBLCLK .OR. aHdr[ NMH_code ] == NM_RETURN
::editBuffer := ::oItemSelected
IF hb_isBlock( ::sl_itemSelected )
IF ::isParentCrt()
::oParent:setFocus()
ENDIF
Eval( ::sl_itemSelected, ::oItemSelected, { 0,0,0,0 }, Self )
IF ::isParentCrt()
::setFocus()
ENDIF
ENDIF
RETURN .f.
RETURN .t.
CASE aNMHdr[ NMH_code ] == TVN_SELCHANGED
Wvg_TreeView_GetSelectionInfo( ::hWnd, aNM[ 2 ], @cParent, @cText, @hParentOfSelected, @hItemSelected )
::hParentSelected := hParentOfSelected
::hItemSelected := hItemSelected
::textParentSelected := trim( cParent )
::textItemSelected := trim( cText )
IF ( n := ascan( ::aItems, {|o| o:hItem == hItemSelected } ) ) > 0
::oItemSelected := ::aItems[ n ]
ELSE
::oItemSelected := NIL
ENDIF
CASE aHdr[ NMH_code ] == TVN_SELCHANGED
::getSelectionInfo( aNM[ 2 ] )
IF hb_isBlock( ::sl_itemMarked )
Eval( ::sl_itemMarked, ::oItemSelected, { 0,0,0,0 }, Self )
ENDIF
RETURN .t.
OTHERWISE
RETURN .f.
ENDCASE
EXIT
END
CASE HB_GTE_ANY
IF ::isParentCrt()
IF aNM[ 1 ] == WM_LBUTTONUP
::getSelectionInfo( aNM[ 2 ] )
IF hb_isBlock( ::sl_lbClick )
::oParent:setFocus()
eval( ::sl_lbClick, NIL, NIL, Self )
::setFocus()
ENDIF
ELSEIF aNM[ 1 ] == WM_LBUTTONDBLCLK
::editBuffer := ::oItemSelected
IF hb_isBlock( ::sl_itemSelected )
::oParent:setFocus()
Eval( ::sl_itemSelected, ::oItemSelected, { 0,0,0,0 }, Self )
::setFocus()
ENDIF
ELSEIF aNM[ 1 ] == WM_KEYDOWN .AND. aNM[ 2 ] == K_ENTER
::getSelectionInfo( aNM[ 2 ] )
ENDIF
ENDIF
EXIT
ENDSWITCH
RETURN EVENT_UNHANDELLED
/*----------------------------------------------------------------------*/
METHOD destroy() CLASS WvgTreeView
METHOD WvgTreeView:destroy()
hb_traceLog( " %s:destroy()", __objGetClsName() )
@@ -252,7 +290,7 @@ METHOD destroy() CLASS WvgTreeView
/*----------------------------------------------------------------------*/
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS WvgTreeView
METHOD WvgTreeView:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
@@ -260,7 +298,7 @@ METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible ) CLASS Wv
/*----------------------------------------------------------------------*/
METHOD itemFromPos( aPos ) CLASS WvgTreeView
METHOD WvgTreeView:itemFromPos( aPos )
HB_SYMBOL_UNUSED( aPos )
@@ -268,7 +306,7 @@ METHOD itemFromPos( aPos ) CLASS WvgTreeView
/*----------------------------------------------------------------------*/
METHOD itemCollapsed( xParam ) CLASS WvgTreeView
METHOD WvgTreeView:itemCollapsed( xParam )
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
::sl_paint := xParam
@@ -278,7 +316,7 @@ METHOD itemCollapsed( xParam ) CLASS WvgTreeView
/*----------------------------------------------------------------------*/
METHOD itemExpanded( xParam ) CLASS WvgTreeView
METHOD WvgTreeView:itemExpanded( xParam )
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
::sl_itemExpanded := xParam
@@ -288,7 +326,7 @@ METHOD itemExpanded( xParam ) CLASS WvgTreeView
/*----------------------------------------------------------------------*/
METHOD itemMarked( xParam ) CLASS WvgTreeView
METHOD WvgTreeView:itemMarked( xParam )
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
::sl_itemMarked := xParam
@@ -298,7 +336,7 @@ METHOD itemMarked( xParam ) CLASS WvgTreeView
/*----------------------------------------------------------------------*/
#if 0
METHOD itemSelected( xParam ) CLASS WvgTreeView
METHOD WvgTreeView:itemSelected( xParam )
IF hb_isBlock( xParam ) .or. ( xParam == NIL )
::sl_itemSelected := xParam

View File

@@ -383,7 +383,7 @@ HB_FUNC( WVG_LOADICON )
*/
HB_FUNC( WVG_LOADIMAGE )
{
HBITMAP hImage = 0;
HANDLE hImage = 0;
LPTSTR lpBuffer = HB_TCHAR_CONVTO( hb_parcx( 1 ) );
int iSource = hb_parni( 2 );
@@ -398,7 +398,10 @@ HB_FUNC( WVG_LOADIMAGE )
break;
case 2:
hImage = ( HBITMAP ) LoadImage( ( HINSTANCE ) NULL, lpBuffer, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
if( HB_ISNUM( 3 ) && hb_parni( 3 ) == IMAGE_ICON )
hImage = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpBuffer, IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
else
hImage = ( HBITMAP ) LoadImage( ( HINSTANCE ) NULL, lpBuffer, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
break;
}
@@ -1135,7 +1138,7 @@ HB_FUNC( WVG_SETWINDOWPOSANDSIZE )
{
hb_retl( SetWindowPos( wvg_parhwnd( 1 ), NULL, hb_parni( 2 ), hb_parni( 3 ),
hb_parni( 4 ), hb_parni( 5 ),
( hb_parl( 6 ) ? 0 : SWP_NOREDRAW ) | SWP_NOZORDER | SWP_NOACTIVATE ) );
( hb_parl( 6 ) ? 0 : SWP_NOREDRAW ) | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED ) );
}
/*----------------------------------------------------------------------*/
@@ -1345,3 +1348,24 @@ HB_FUNC( WVG_SENDTOOLBARMESSAGE )
}
/* #endif */
}
/*----------------------------------------------------------------------*/
HB_FUNC( WVG_SENDEDITCONTROLMESSAGE )
{
HWND hED = hbwapi_par_raw_HWND( 1 );
int msg = hbwapi_par_INT( 2 );
switch( msg )
{
case EM_GETSEL:
{
DWORD min = 0;
DWORD max = 0;
SendMessage( hED, EM_GETSEL, ( WPARAM ) &min, ( LPARAM ) &max );
break;
}
}
}
/*----------------------------------------------------------------------*/

View File

@@ -660,7 +660,6 @@ HB_FUNC( WVG_GETNMTREEVIEWINFO )
hb_itemReturnRelease( pEvParams );
}
/*----------------------------------------------------------------------*/
/*
* Wvg_TreeView_GetSelectionInfo( ::hWnd, nlParam, @cParent, @cText, @hParentOfSelected, @hItemSelected )
*/
@@ -1263,3 +1262,55 @@ HB_FUNC( WVG_RELEASEWINDOWPROCBLOCK )
}
/*----------------------------------------------------------------------*/
/*
WVG_CreateTooltipWindow( hControl ) -> hWndTT
*/
HB_FUNC( WVG_CREATETOOLTIPWINDOW )
{
HWND hwndTip;
TOOLINFO toolInfo;
LPTSTR pszText = HB_TCHAR_CONVTO( "" );
hwndTip = CreateWindowEx( ( DWORD ) NULL, TOOLTIPS_CLASS, NULL,
WS_POPUP |TTS_ALWAYSTIP, // | TTS_BALLOON,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
wvg_parhwnd( 1 ), NULL,
wvg_hInstance(), NULL);
if ( ! hwndTip )
return;
toolInfo.cbSize = sizeof( toolInfo );
toolInfo.hwnd = ( HWND ) wvg_parhwnd( 1 );
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = ( UINT_PTR ) ( HWND ) wvg_parhwnd( 1 );
toolInfo.lpszText = pszText;
if( SendMessage( hwndTip, TTM_ADDTOOL, 0, ( LPARAM ) &toolInfo ) )
wvg_rethandle( hwndTip );
else
wvg_rethandle( NULL );
HB_TCHAR_FREE( pszText );
}
/*----------------------------------------------------------------------*/
HB_FUNC( WVG_SETTOOLTIPTEXT )
{
TOOLINFO toolInfo;
LPTSTR pszText = HB_TCHAR_CONVTO( hb_parcx( 3 ) );
toolInfo.cbSize = sizeof( toolInfo );
toolInfo.hwnd = ( HWND ) wvg_parhwnd( 1 );
toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
toolInfo.uId = ( UINT_PTR ) ( HWND ) wvg_parhwnd( 1 );
toolInfo.lpszText = pszText;
SendMessage( wvg_parhwnd( 2 ), TTM_SETTOOLINFO, ( WPARAM ) 0, ( LPARAM ) &toolInfo );
HB_TCHAR_FREE( pszText );
}
/*----------------------------------------------------------------------*/

View File

@@ -104,7 +104,8 @@ CLASS WvgWindow INHERIT WvgPartHandler
/* RUNTIME DATA */
DATA dropZone INIT .F.
DATA helpLink
DATA tooltipText INIT ""
DATA s_tooltipText INIT ""
METHOD tooltipText SETGET
DATA clr_FG
DATA clr_BG
@@ -180,7 +181,14 @@ CLASS WvgWindow INHERIT WvgPartHandler
DATA oMenu
METHOD init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
DATA nTop
DATA nLeft
DATA nBottom
DATA nRight
DATA hWndTT
METHOD new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD destroy()
@@ -219,14 +227,12 @@ CLASS WvgWindow INHERIT WvgPartHandler
METHOD setFocus()
METHOD sendMessage( nMessage, nlParam, nwParam )
METHOD findObjectByHandle( hWnd )
METHOD createControl()
METHOD ControlWndProc( hWnd, nMessage, nwParam, nlParam )
METHOD getControlID() INLINE ++::nControlID
METHOD HandleEvent() INLINE ( 1 )
METHOD HandleEvent() INLINE EVENT_UNHANDELLED
METHOD isEnabled() INLINE ::is_enabled
METHOD isVisible() INLINE !( ::is_hidden )
METHOD setColorFG( nRGB ) INLINE ::clr_FG := nRGB, ::invalidateRect()
METHOD isVisible() INLINE ! ::is_hidden
METHOD setColorFG( nRGB ) INLINE ::clr_FG := iif( hb_isChar( nRGB ), Wvt_GetRGBColorByString( nRGB, 0 ), nRGB ), ::invalidateRect()
METHOD enter( xParam ) SETGET
METHOD leave( xParam ) SETGET
@@ -259,12 +265,18 @@ CLASS WvgWindow INHERIT WvgPartHandler
METHOD dragMotion( xParam ) SETGET
METHOD dragLeave( xParam ) SETGET
METHOD dragDrop( xParam, xParam1 ) SETGET
METHOD getPosAndSize( aPs, aSz )
METHOD isParentCrt() INLINE ( __objGetClsName( ::oParent ) == "WVGCRT" )
METHOD rePosition()
#if 1
METHOD createControl()
METHOD controlWndProc( hWnd, nMessage, nwParam, nlParam )
#endif
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD WvgWindow:new( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
@@ -280,7 +292,7 @@ METHOD WvgWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::aPresParams := aPresParams
::visible := lVisible
::WvgPartHandler:init( oParent, oOwner )
::WvgPartHandler:new( oParent, oOwner )
RETURN Self
@@ -302,6 +314,12 @@ METHOD WvgWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
::aPresParams := aPresParams
::visible := lVisible
IF empty( ::oParent )
IF ! ( __objGetClsName( Self ) $ "WVGCRT,WVGDIALOG" )
::oParent := SetAppWindow()
ENDIF
ENDIF
::WvgPartHandler:create( oParent, oOwner )
RETURN Self
@@ -317,7 +335,6 @@ METHOD WvgWindow:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
RETURN Self
/*----------------------------------------------------------------------*/
@@ -334,6 +351,9 @@ METHOD WvgWindow:destroy()
WVG_ReleaseWindowProcBlock( ::pWnd )
IF WVG_IsWindow( ::hWndTT )
WVG_DestroyWindow( ::hWndTT )
ENDIF
IF WVG_IsWindow( ::hWnd )
WVG_DestroyWindow( ::hWnd )
ENDIF
@@ -343,6 +363,7 @@ METHOD WvgWindow:destroy()
ENDIF
::hWnd := NIL
::hWndTT := NIL
::pWnd := NIL
::aPos := NIL
::aSize := NIL
@@ -408,15 +429,12 @@ METHOD WvgWindow:destroy()
/*----------------------------------------------------------------------*/
METHOD WvgWindow:SetWindowProcCallback()
::nOldProc := WVG_SetWindowProcBlock( ::pWnd, {|h,m,w,l| ::ControlWndProc( h,m,w,l ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgWindow:captureMouse()
RETURN Self
/*----------------------------------------------------------------------*/
@@ -475,13 +493,16 @@ METHOD WvgWindow:lockUpdate()
METHOD WvgWindow:setColorBG( nRGB )
LOCAL hBrush
IF hb_isChar( nRGB )
nRGB := Wvt_GetRGBColorByString( nRGB, 1 )
ENDIF
IF hb_isNumeric( nRGB )
hBrush := WVG_CreateBrush( BS_SOLID, nRGB, 0 )
IF hBrush <> 0
::clr_BG := nRGB
::hBrushBG := hBrush
IF ::className == "WVGDIALOG"
IF ::className == "WVGDIALOG" .OR. __ObjGetClsName( Self ) == "WVGCHECKBOX"
Wvg_SetCurrentBrush( ::hWnd, ::hBrushBG )
ENDIF
ENDIF
@@ -510,6 +531,7 @@ METHOD WvgWindow:setTrackPointer()
/*----------------------------------------------------------------------*/
METHOD WvgWindow:setPos( aPos, lPaint )
LOCAL aPosSz
IF hb_isArray( aPos )
DEFAULT lPaint TO .T.
@@ -517,10 +539,11 @@ METHOD WvgWindow:setPos( aPos, lPaint )
SWITCH ::objType
CASE objTypeCrt
exit
EXIT
OTHERWISE
WVG_SetWindowPosition( ::hWnd, aPos[ 1 ], aPos[ 2 ], lPaint )
aPosSz := ::getPosAndSize( aPos )
WVG_SetWindowPosition( ::hWnd, aPosSz[ 1 ], aPosSz[ 2 ], lPaint )
EXIT
END
@@ -529,21 +552,32 @@ METHOD WvgWindow:setPos( aPos, lPaint )
RETURN Self
/*----------------------------------------------------------------------*/
/* This will always be called from HB_GTE_RESIZED message of WVG engine */
METHOD WvgWindow:rePosition()
RETURN ::setPosAndSize( ::aPos, ::aSize )
/*----------------------------------------------------------------------*/
METHOD WvgWindow:setPosAndSize( aPos, aSize, lPaint )
LOCAL aPosSz
IF hb_isArray( aPos ) .and. hb_isArray( aSize )
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
IF hb_isArray( aPos ) .AND. hb_isArray( aSize )
DEFAULT lPaint TO .T.
SWITCH ::objType
CASE objTypeCrt
exit
EXIT
OTHERWISE
/*WVG_MoveWindow( ::hWnd, aPos[ 1 ], aPos[ 2 ], aSize[ 1 ], aSize[ 2 ], lPaint ) */
WVG_SetWindowPosAndSize( ::hWnd, aPos[ 1 ], aPos[ 2 ], aSize[ 1 ], aSize[ 2 ], lPaint )
aPosSz := ::getPosAndSize( aPos, aSize )
WVG_SetWindowPosAndSize( ::hWnd, aPosSz[ 1 ], aPosSz[ 2 ], aPosSz[ 3 ], aPosSz[ 4 ], lPaint )
EXIT
END
@@ -554,15 +588,19 @@ METHOD WvgWindow:setPosAndSize( aPos, aSize, lPaint )
/*----------------------------------------------------------------------*/
METHOD WvgWindow:setSize( aSize, lPaint )
LOCAL aPosSz
IF hb_isArray( aSize )
DEFAULT lPaint TO .T.
SWITCH ::objType
CASE objTypeDialog
/*WVG_MoveWindow( ::hWnd, 0, 0, aSize[ 1 ], aSize[ 2 ], lPaint ) */
WVG_SetWindowSize( ::hWnd, aSize[ 1 ], aSize[ 2 ], lPaint )
CASE objTypeCrt
EXIT
OTHERWISE
aPosSz := ::getPosAndSize( , aSize )
WVG_SetWindowSize( ::hWnd, aPosSz[ 3 ], aPosSz[ 4 ], lPaint )
EXIT
END
@@ -680,9 +718,7 @@ METHOD WvgWindow:setPresParam()
/*----------------------------------------------------------------------*/
METHOD WvgWindow:currentPos()
LOCAL aRect
aRect := WVG_GetWindowRect( ::hWnd )
LOCAL aRect := WVG_GetWindowRect( ::hWnd )
RETURN { aRect[ 1 ], aRect[ 2 ] }
@@ -1237,15 +1273,12 @@ METHOD WvgWindow:Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible
/*----------------------------------------------------------------------*/
METHOD WvgWindow:setFocus()
::sendMessage( WM_ACTIVATE, 1, 0 )
WVG_SetFocus( ::hWnd )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgWindow:sendMessage( nMessage, nlParam, nwParam )
RETURN WVG_SendMessage( ::hWnd, nMessage, nlParam, nwParam )
/*----------------------------------------------------------------------*/
@@ -1263,43 +1296,108 @@ METHOD WvgWindow:findObjectByHandle( hWnd )
/*----------------------------------------------------------------------*/
METHOD WvgWindow:getPosAndSize( aPs, aSz )
LOCAL nX, nY, nW, nH, aXY
LOCAL aPos, aSize
LOCAL nFH, nFW
DEFAULT aPs TO aclone( ::aPos )
DEFAULT aSz TO aclone( ::aSize )
aPos := aclone( aPs )
aSize := aclone( aSz )
IF ::isParentCrt()
IF hb_isBlock( aPos[ 1 ] )
aPos[ 1 ] := eval( aPos[ 1 ] )
ENDIF
IF hb_isBlock( aPos[ 2 ] )
aPos[ 2 ] := eval( aPos[ 2 ] )
ENDIF
IF hb_isBlock( aSize[ 1 ] )
aSize[ 1 ] := eval( aSize[ 1 ] )
ENDIF
IF hb_isBlock( aSize[ 2 ] )
aSize[ 2 ] := eval( aSize[ 2 ] )
ENDIF
IF aPos[ 1 ] < 0 .AND. aPos[ 2 ] < 0 .AND. aSize[ 1 ] < 0 .AND. aSize[ 2 ] < 0
nX := abs( aPos[ 2 ] )
IF nX < 1
nX := 0
ENDIF
nY := abs( aPos[ 1 ] )
IF nY < 1
nY := 0
ENDIF
nW := abs( aSize[ 2 ] )
IF nW < 1
nW := 0
ENDIF
nH := abs( aSize[ 1 ] )
IF nH < 1
nH := 0
ENDIF
aXY := Wvt_GetXYFromRowCol( nY, nX )
nFH := Wvt_GetFontInfo()[ 6 ]
nFW := Wvt_GetFontInfo()[ 7 ]
RETURN { aXY[ 1 ], aXY[ 2 ], nW * nFW, nH * nFH }
ENDIF
ENDIF
RETURN { aPos[ 1 ], aPos[ 2 ], aSize[ 1 ], aSize[ 2 ] }
/*----------------------------------------------------------------------*/
METHOD WvgWindow:toolTipText( cText )
IF hb_isChar( cText )
::s_toolTipText := cText
IF WVG_IsWindow( ::hWndTT )
WVG_SetTooltipText( ::hWnd, ::hWndTT, ::s_toolTipText )
ENDIF
ENDIF
RETURN ::s_toolTipText
/*----------------------------------------------------------------------*/
METHOD WvgWindow:createControl()
LOCAL hWnd
LOCAL hWnd, aPosSz
::nID := ::oParent:GetControlId()
aPosSz := ::getPosAndSize( ::aPos, ::aSize )
hWnd := WVG_CreateWindowEx( ::exStyle, ;
::className, ;
"", ; /* window name */
::style, ;
::aPos[ 1 ], ::aPos[ 2 ],;
::aSize[ 1 ], ::aSize[ 2 ],;
::oParent:hWnd,;
::nID,; /* hMenu */
NIL,; /* hInstance */
aPosSz[ 1 ], aPosSz[ 2 ], ;
aPosSz[ 3 ], aPosSz[ 4 ], ;
::oParent:hWnd, ;
::nID, ; /* hMenu */
NIL, ; /* hInstance */
NIL ) /* lParam */
IF ( hWnd <> 0 )
IF WVG_IsWindow( hWnd )
::hWnd := hWnd
::pWnd := WIN_N2P( hWnd )
::sendMessage( WM_SETFONT, WVG_GetStockObject( DEFAULT_GUI_FONT ), 1 )
::hWndTT := WVG_CreateTooltipWindow( ::hWnd )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
METHOD WvgWindow:controlWndProc( hWnd, nMessage, nwParam, nlParam )
LOCAL nCtrlID, nNotifctn, hWndCtrl, nObj, aMenuItem, oObj, nReturn
#if 1
hb_traceLog( "%s:wndProc( %i %i %i %i )", __ObjGetClsName( self ), hWnd, nMessage, nwParam, nlParam )
#endif
SWITCH nMessage
CASE WM_ERASEBKGND
IF ::objType == objTypeDA .and. !empty( ::hBrushBG )
IF ::objType == objTypeDA .AND. ! empty( ::hBrushBG )
::handleEvent( HB_GTE_CTLCOLOR, { nwParam, nlParam } )
ENDIF
EXIT
@@ -1325,7 +1423,7 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
ELSE
IF ( nObj := ascan( ::aChildren, {|o| o:nID == nCtrlID } ) ) > 0
nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_COMMAND, { nNotifctn, nCtrlID, hWndCtrl } )
IF hb_isNumeric( nReturn ) .and. nReturn == 0
IF hb_isNumeric( nReturn ) .AND. nReturn == 0
RETURN 0
ENDIF
ENDIF
@@ -1335,8 +1433,10 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
CASE WM_NOTIFY
IF ( nObj := ascan( ::aChildren, {| o | o:nID == nwParam } ) ) > 0
nReturn := ::aChildren[ nObj ]:handleEvent( HB_GTE_NOTIFY, { nwParam, nlParam } )
IF hb_isNumeric( nReturn ) .and. nReturn == EVENT_HANDELLED
RETURN EVENT_HANDELLED
IF hb_isNumeric( nReturn ) .AND. nReturn == EVENT_HANDELLED
RETURN 0
ELSEIF hb_isLogical( nReturn )
RETURN nReturn
ENDIF
ENDIF
EXIT
@@ -1348,12 +1448,10 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
CASE WM_CTLCOLORDLG
CASE WM_CTLCOLORSCROLLBAR
CASE WM_CTLCOLORSTATIC
oObj := ::findObjectByHandle( nlParam )
IF hb_isObject( oObj )
nReturn := oObj:handleEvent( HB_GTE_CTLCOLOR, { nwParam, nlParam } )
IF nReturn == 1
IF nReturn == EVENT_UNHANDELLED
RETURN WVG_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
ELSE
RETURN nReturn
@@ -1366,8 +1464,7 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
RETURN 0
CASE WM_VSCROLL
nReturn := ::handleEvent( HB_GTE_VSCROLL, { WVG_LOWORD( nwParam ), WVG_HIWORD( nwParam ), nlParam } )
IF nReturn == EVENT_HANDELLED
IF ::handleEvent( HB_GTE_VSCROLL, { WVG_LOWORD( nwParam ), WVG_HIWORD( nwParam ), nlParam } ) == EVENT_HANDELLED
RETURN 0
ENDIF
EXIT
@@ -1377,7 +1474,7 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
#if 0
CASE WM_MOUSEMOVE
IF ::objType == objTypeScrollBar
IF !( ::lTracking )
IF ! ::lTracking
::lTracking := Wvg_BeginMouseTracking( ::hWnd )
ENDIF
ENDIF
@@ -1401,8 +1498,16 @@ METHOD WvgWindow:ControlWndProc( hWnd, nMessage, nwParam, nlParam )
ENDIF
EXIT
#endif
END
OTHERWISE
IF ::handleEvent( HB_GTE_ANY, { nMessage, nwParam, nlParam } ) == EVENT_HANDELLED
RETURN 0
ENDIF
EXIT
ENDSWITCH
RETURN WVG_CallWindowProc( ::nOldProc, hWnd, nMessage, nwParam, nlParam )
/*----------------------------------------------------------------------*/