2008-06-06 20:45 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com)

* harbour/source/rtl/hbgtcore.c
   * harbour/include/hbgtcore.h
   * harbour/include/hbgtinfo.ch
   * harbour/source/rtl/gtwvt/gtwvt.c
   * harbour/source/rtl/gtwvt/gtwvt.h
     + Added building blocks for CallBacks to be set with Hb_GtInfo( GTI_* ).
   * harbour/tests/wvtext.prg
     + Test program to taste few of the callbacks.

     /* This also sets the ground for futuristic multi-window GT 
        I have kept MW GT code out of current implementation.
        This implementation does not interfere nor affects current functionality.

        A work in progress.

        Viktor, I have found a way to implement 'consol shearing, working on it
        and for that to happen these building blocks are a must.

        Przemek, please review the structure of <PHB_PGT>. I have added a few members.
        Please bear with my meagre knowledge if I did something stupid, just correct it.
     */
This commit is contained in:
Pritpal Bedi
2008-06-07 04:31:50 +00:00
parent aea5570528
commit 1e9b0b7f3e
6 changed files with 647 additions and 69 deletions

View File

@@ -51,8 +51,8 @@
*/
/* NOTE: The declaration of hb_gtSetPos(), hb_gtGetPos(), hb_gtWrite(),
hb_gtWriteAt(), hb_gtRepChar(), hb_gtBox(), hb_gtBoxS(), hb_gtBoxD()
hb_gtInit() differs in parameter types from the original CA-Cl*pper
hb_gtWriteAt(), hb_gtRepChar(), hb_gtBox(), hb_gtBoxS(), hb_gtBoxD()
hb_gtInit() differs in parameter types from the original CA-Cl*pper
versions. [vszakats] */
#ifndef HB_GTCORE_H_
@@ -349,6 +349,38 @@ typedef struct _HB_GT_BASE
void * pGTData[HB_GT_MAX_]; /* local GT data */
/* Members holding information to Fire Events */
/* Pritpal Bedi */
int iLocalGTHandle; /* local GT handle - FUTURISTIC */
PHB_DYNS pDynSymINKEY; /* for any key event independant of INKEY Loop - Useful with TCP/IP Terminals */
PHB_ITEM pDynSymINKEYdata;
PHB_DYNS pDynSymCLOSE; /* when close button is pressed */
PHB_ITEM pDynSymCLOSEdata;
PHB_DYNS pDynSymCOMMAND; /* though not being processed currently but FUTURISTIC */
PHB_ITEM pDynSymCOMMANDdata;
PHB_DYNS pDynSymTIMER; /* very useful for many jobs , I use it extensively */
PHB_ITEM pDynSymTIMERdata;
PHB_DYNS pDynSymACTIVATE; /* FUTURISTIC */
PHB_ITEM pDynSymACTIVATEdata;
PHB_DYNS pDynSymSETFOCUS; /* when window gets WM_SETFOCUS message */
PHB_ITEM pDynSymSETFOCUSdata;
PHB_DYNS pDynSymKILLFOCUS; /* when window gets WM_KILLFOCUS message */
PHB_ITEM pDynSymKILLFOCUSdata;
PHB_DYNS pDynSymMOUSE; /* when mouse activity is detected */
PHB_ITEM pDynSymMOUSEdata;
PHB_DYNS pDynSymSIZE; /* after a window is resized by mouse */
PHB_ITEM pDynSymSIZEdata;
} HB_GT_BASE, * PHB_GT_BASE, * PHB_GT;
extern PHB_GT hb_gt_Base( void );

View File

@@ -118,7 +118,13 @@
#define HB_GTI_ISUNICODE 47 /* is Unicode input/output enabled? */
/* Font weights */
/* Additional constants to enhance GT */
#define HB_GTI_CALLBACK 51 /* holds information about callback fired when a key is pressed */
#define HB_GTI_SCREENSIZE 52 /* Get/Set height/width of application window in pixels */
#define HB_GTI_SETTIMER 53 /* Sets the Timer with ID, callback will be defined with GTI_CALLBACK */
#define HB_GTI_KILLTIMER 54 /* Deactivates the Timer set with GTI_SETTIMER */
/* Font weights */
#define HB_GTI_FONTW_THIN 1
#define HB_GTI_FONTW_NORMAL 2
#define HB_GTI_FONTW_BOLD 3
@@ -145,83 +151,110 @@
#define HB_GTI_KBD_ACCENT3 16384
#define HB_GTI_KBD_ACCENT4 32768
/* Callback constants - list has a room for future extensions */
#define HB_GTI_CB_INKEY 1
#define HB_GTI_CB_TIMER 2
#define HB_GTI_CB_ACTIVATE 3
#define HB_GTI_CB_SETFOCUS 4
#define HB_GTI_CB_KILLFOCUS 5
#define HB_GTI_CB_MOUSE 6
#define HB_GTI_CB_CLOSE 7
#define HB_GTI_CB_COMMAND 8
#define HB_GTI_CB_SIZE 9
/* Compatibility #defines */
#ifndef HB_GT_NO_XHB
#define GTI_ISGRAPHIC HB_GTI_ISGRAPHIC
#define GTI_SCREENWIDTH HB_GTI_SCREENWIDTH
#define GTI_SCREENHEIGHT HB_GTI_SCREENHEIGHT
#define GTI_SCREENDEPTH HB_GTI_SCREENDEPTH
#define GTI_FONTSIZE HB_GTI_FONTSIZE
#define GTI_FONTWIDTH HB_GTI_FONTWIDTH
#define GTI_DESKTOPWIDTH HB_GTI_DESKTOPWIDTH
#define GTI_DESKTOPHEIGHT HB_GTI_DESKTOPHEIGHT
#define GTI_DESKTOPDEPTH HB_GTI_DESKTOPDEPTH
#define GTI_COMPATBUFFER HB_GTI_COMPATBUFFER
#define GTI_KBDSHIFTS HB_GTI_KBDSHIFTS
#define GTI_KBDSPECIAL HB_GTI_KBDSPECIAL
#define GTI_KBDALT HB_GTI_KBDALT
#define GTI_FULLSCREEN HB_GTI_FULLSCREEN
#define GTI_KBDSUPPORT HB_GTI_KBDSUPPORT
#define GTI_CLIPBOARDDATA HB_GTI_CLIPBOARDDATA
#define GTI_CLIPBOARDPAST HB_GTI_CLIPBOARDPAST
#define GTI_ISGRAPHIC HB_GTI_ISGRAPHIC
#define GTI_SCREENWIDTH HB_GTI_SCREENWIDTH
#define GTI_SCREENHEIGHT HB_GTI_SCREENHEIGHT
#define GTI_SCREENDEPTH HB_GTI_SCREENDEPTH
#define GTI_FONTSIZE HB_GTI_FONTSIZE
#define GTI_FONTWIDTH HB_GTI_FONTWIDTH
#define GTI_DESKTOPWIDTH HB_GTI_DESKTOPWIDTH
#define GTI_DESKTOPHEIGHT HB_GTI_DESKTOPHEIGHT
#define GTI_DESKTOPDEPTH HB_GTI_DESKTOPDEPTH
#define GTI_COMPATBUFFER HB_GTI_COMPATBUFFER
#define GTI_KBDSHIFTS HB_GTI_KBDSHIFTS
#define GTI_KBDSPECIAL HB_GTI_KBDSPECIAL
#define GTI_KBDALT HB_GTI_KBDALT
#define GTI_FULLSCREEN HB_GTI_FULLSCREEN
#define GTI_KBDSUPPORT HB_GTI_KBDSUPPORT
#define GTI_CLIPBOARDDATA HB_GTI_CLIPBOARDDATA
#define GTI_CLIPBOARDPAST HB_GTI_CLIPBOARDPAST
#define GTI_CURSORBLINKRATE HB_GTI_CURSORBLINKRATE
#define GTI_DESKTOPROWS HB_GTI_DESKTOPROWS
#define GTI_DESKTOPCOLS HB_GTI_DESKTOPCOLS
#define GTI_FONTWEIGHT HB_GTI_FONTWEIGHT
#define GTI_FONTQUALITY HB_GTI_FONTQUALITY
#define GTI_FONTNAME HB_GTI_FONTNAME
#define GTI_CODEPAGE HB_GTI_CODEPAGE
#define GTI_WINTITLE HB_GTI_WINTITLE
#define GTI_ICONFILE HB_GTI_ICONFILE
#define GTI_ICONRES HB_GTI_ICONRES
#define GTI_MOUSESTATUS HB_GTI_MOUSESTATUS
#define GTI_INPUTFD HB_GTI_INPUTFD
#define GTI_OUTPUTFD HB_GTI_OUTPUTFD
#define GTI_ERRORFD HB_GTI_ERRORFD
#define GTI_ESCDELAY HB_GTI_ESCDELAY
#define GTI_VIEWMAXHEIGHT HB_GTI_VIEWMAXHEIGHT
#define GTI_VIEWMAXWIDTH HB_GTI_VIEWMAXWIDTH
#define GTI_VIEWPORTHEIGHT HB_GTI_VIEWPORTHEIGHT
#define GTI_VIEWPORTWIDTH HB_GTI_VIEWPORTWIDTH
#define GTI_STDOUTCON HB_GTI_STDOUTCON
#define GTI_STDERRCON HB_GTI_STDERRCON
#define GTI_ISCTWIN HB_GTI_ISCTWIN
#define GTI_ISMULTIWIN HB_GTI_ISMULTIWIN
#define GTI_GETWIN HB_GTI_GETWIN
#define GTI_SETWIN HB_GTI_SETWIN
#define GTI_NEWWIN HB_GTI_NEWWIN
#define GTI_ADDKEYMAP HB_GTI_ADDKEYMAP
#define GTI_DELKEYMAP HB_GTI_DELKEYMAP
#define GTI_DESKTOPROWS HB_GTI_DESKTOPROWS
#define GTI_DESKTOPCOLS HB_GTI_DESKTOPCOLS
#define GTI_FONTWEIGHT HB_GTI_FONTWEIGHT
#define GTI_FONTQUALITY HB_GTI_FONTQUALITY
#define GTI_FONTNAME HB_GTI_FONTNAME
#define GTI_CODEPAGE HB_GTI_CODEPAGE
#define GTI_WINTITLE HB_GTI_WINTITLE
#define GTI_ICONFILE HB_GTI_ICONFILE
#define GTI_ICONRES HB_GTI_ICONRES
#define GTI_MOUSESTATUS HB_GTI_MOUSESTATUS
#define GTI_INPUTFD HB_GTI_INPUTFD
#define GTI_OUTPUTFD HB_GTI_OUTPUTFD
#define GTI_ERRORFD HB_GTI_ERRORFD
#define GTI_ESCDELAY HB_GTI_ESCDELAY
#define GTI_VIEWMAXHEIGHT HB_GTI_VIEWMAXHEIGHT
#define GTI_VIEWMAXWIDTH HB_GTI_VIEWMAXWIDTH
#define GTI_VIEWPORTHEIGHT HB_GTI_VIEWPORTHEIGHT
#define GTI_VIEWPORTWIDTH HB_GTI_VIEWPORTWIDTH
#define GTI_STDOUTCON HB_GTI_STDOUTCON
#define GTI_STDERRCON HB_GTI_STDERRCON
#define GTI_ISCTWIN HB_GTI_ISCTWIN
#define GTI_ISMULTIWIN HB_GTI_ISMULTIWIN
#define GTI_GETWIN HB_GTI_GETWIN
#define GTI_SETWIN HB_GTI_SETWIN
#define GTI_NEWWIN HB_GTI_NEWWIN
#define GTI_ADDKEYMAP HB_GTI_ADDKEYMAP
#define GTI_DELKEYMAP HB_GTI_DELKEYMAP
#define GTI_ISUNICODE HB_GTI_ISUNICODE
#define GTI_CALLBACK HB_GTI_CALLBACK
#define GTI_SCREENSIZE HB_GTI_SCREENSIZE
#define GTI_SETTIMER HB_GTI_SETTIMER
#define GTI_KILLTIMER HB_GTI_KILLTIMER
/* Font weights */
#define GTI_FONTW_THIN HB_GTI_FONTW_THIN
#define GTI_FONTW_THIN HB_GTI_FONTW_THIN
#define GTI_FONTW_NORMAL HB_GTI_FONTW_NORMAL
#define GTI_FONTW_BOLD HB_GTI_FONTW_BOLD
#define GTI_FONTW_BOLD HB_GTI_FONTW_BOLD
/* Font sizes */
#define GTI_FONTQ_DRAFT HB_GTI_FONTQ_DRAFT
#define GTI_FONTQ_DRAFT HB_GTI_FONTQ_DRAFT
#define GTI_FONTQ_NORMAL HB_GTI_FONTQ_NORMAL
#define GTI_FONTQ_HIGH HB_GTI_FONTQ_HIGH
#define GTI_FONTQ_HIGH HB_GTI_FONTQ_HIGH
/* Keyboard shifts states */
#define GTI_KBD_SHIFT HB_GTI_KBD_SHIFT
#define GTI_KBD_CTRL HB_GTI_KBD_CTRL
#define GTI_KBD_ALT HB_GTI_KBD_ALT
#define GTI_KBD_LWIN HB_GTI_KBD_LWIN
#define GTI_KBD_RWIN HB_GTI_KBD_RWIN
#define GTI_KBD_MENU HB_GTI_KBD_MENU
#define GTI_KBD_INSERT HB_GTI_KBD_INSERT
#define GTI_KBD_SCROLOCK HB_GTI_KBD_SCROLOCK
#define GTI_KBD_NUMLOCK HB_GTI_KBD_NUMLOCK
#define GTI_KBD_CAPSLOCK HB_GTI_KBD_CAPSLOCK
#define GTI_KBD_INALTSEQ HB_GTI_KBD_INALTSEQ
#define GTI_KBD_ACCENT1 HB_GTI_KBD_ACCENT1
#define GTI_KBD_ACCENT2 HB_GTI_KBD_ACCENT2
#define GTI_KBD_ACCENT3 HB_GTI_KBD_ACCENT3
#define GTI_KBD_ACCENT4 HB_GTI_KBD_ACCENT4
#define GTI_KBD_SHIFT HB_GTI_KBD_SHIFT
#define GTI_KBD_CTRL HB_GTI_KBD_CTRL
#define GTI_KBD_ALT HB_GTI_KBD_ALT
#define GTI_KBD_LWIN HB_GTI_KBD_LWIN
#define GTI_KBD_RWIN HB_GTI_KBD_RWIN
#define GTI_KBD_MENU HB_GTI_KBD_MENU
#define GTI_KBD_INSERT HB_GTI_KBD_INSERT
#define GTI_KBD_SCROLOCK HB_GTI_KBD_SCROLOCK
#define GTI_KBD_NUMLOCK HB_GTI_KBD_NUMLOCK
#define GTI_KBD_CAPSLOCK HB_GTI_KBD_CAPSLOCK
#define GTI_KBD_INALTSEQ HB_GTI_KBD_INALTSEQ
#define GTI_KBD_ACCENT1 HB_GTI_KBD_ACCENT1
#define GTI_KBD_ACCENT2 HB_GTI_KBD_ACCENT2
#define GTI_KBD_ACCENT3 HB_GTI_KBD_ACCENT3
#define GTI_KBD_ACCENT4 HB_GTI_KBD_ACCENT4
/* Callback constants - list has a room for future extensions */
#define GTI_CB_INKEY HB_GTI_CB_INKEY
#define GTI_CB_TIMER HB_GTI_CB_TIMER
#define GTI_CB_ACTIVATE HB_GTI_CB_ACTIVATE
#define GTI_CB_SETFOCUS HB_GTI_CB_SETFOCUS
#define GTI_CB_KILLFOCUS HB_GTI_CB_KILLFOCUS
#define GTI_CB_MOUSE HB_GTI_CB_MOUSE
#define GTI_CB_CLOSE HB_GTI_CB_CLOSE
#define GTI_CB_COMMAND HB_GTI_CB_COMMAND
#define GTI_CB_SIZE HB_GTI_CB_SIZE
#endif

View File

@@ -221,9 +221,255 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT )
pWVT->IgnoreWM_SYSCHAR = FALSE;
pWVT->bMaximized = FALSE;
return pWVT;
}
static void hb_gt_wvt_FireEvent( PHB_GTWVT pWVT, int message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case GTI_CB_CLOSE:
{
if( pWVT->pGT->pDynSymCLOSE )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymCLOSE ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymCLOSE );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymCLOSE );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymCLOSEdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymCLOSEdata );
}
else
{
hb_vmPushNil();
}
hb_vmDo( 3 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_INKEY:
{
if( pWVT->pGT->pDynSymINKEY )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymINKEY ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymINKEY );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymINKEY );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymINKEYdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymINKEYdata );
}
else
{
hb_vmPushNil();
}
hb_vmPushNumInt( wParam );
hb_vmDo( 4 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_SIZE:
{
if( pWVT->pGT->pDynSymSIZE )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymSIZE ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymSIZE );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymSIZE );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymSIZEdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymSIZEdata );
}
else
{
hb_vmPushNil();
}
hb_vmPushInteger( (int) wParam );
hb_vmPushInteger( (int) lParam );
hb_vmDo( 5 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_SETFOCUS:
{
if( pWVT->pGT->pDynSymSETFOCUS )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymSETFOCUS ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymSETFOCUS );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymSETFOCUS );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymSETFOCUSdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymSETFOCUSdata );
}
else
{
hb_vmPushNil();
}
hb_vmDo( 3 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_KILLFOCUS:
{
if( pWVT->pGT->pDynSymKILLFOCUS )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymKILLFOCUS ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymKILLFOCUS );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymKILLFOCUS );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymKILLFOCUSdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymKILLFOCUSdata );
}
else
{
hb_vmPushNil();
}
hb_vmDo( 3 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_COMMAND:
{
if( pWVT->pGT->pDynSymCOMMAND )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymCOMMAND ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymCOMMAND );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymCOMMAND );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymCOMMANDdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymCOMMANDdata );
}
else
{
hb_vmPushNil();
}
hb_vmPushNumInt( wParam );
hb_vmPushNumInt( lParam );
hb_vmDo( 5 );
hb_vmRequestRestore();
}
}
break;
}
case GTI_CB_TIMER:
{
if( pWVT->pGT->pDynSymTIMER )
{
if( hb_vmRequestReenter() )
{
if( hb_itemType( pWVT->pGT->pDynSymTIMER ) & HB_IT_BLOCK )
{
hb_vmPushEvalSym();
hb_vmPush( pWVT->pGT->pDynSymTIMER );
}
else
{
hb_vmPushDynSym( pWVT->pGT->pDynSymTIMER );
hb_vmPushNil();
}
hb_vmPushNumInt( message );
hb_vmPushNumInt( pWVT->iHandle );
if ( pWVT->pGT->pDynSymTIMERdata )
{
hb_vmPushItemRef( pWVT->pGT->pDynSymTIMERdata );
}
else
{
hb_vmPushNil();
}
hb_vmPushNumInt( wParam );
hb_vmPushNumInt( lParam );
hb_vmDo( 5 );
hb_vmRequestRestore();
}
}
break;
}
}
}
static BOOL hb_gt_wvt_SetWindowSize( PHB_GTWVT pWVT, int iRow, int iCol )
{
if( HB_GTSELF_RESIZE( pWVT->pGT, iRow, iCol ) )
@@ -453,6 +699,9 @@ static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey )
iPos = 0;
if( iPos != pWVT->keyPointerOut )
pWVT->keyPointerIn = iPos;
/* Pritpal Bedi - 06 Jun 2008 */
hb_gt_wvt_FireEvent( pWVT, GTI_CB_INKEY, iKey, 0 );
}
static BOOL hb_gt_wvt_GetCharFromInputQueue( PHB_GTWVT pWVT, int * iKey )
@@ -1121,6 +1370,10 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
return 0;
case WM_CLOSE: /* Clicked 'X' on system menu */
/* NOTE: this follows more code . will post later as it needs to be cleaned */
/* But it demonstrates the concept */
hb_gt_wvt_FireEvent( pWVT, GTI_CB_CLOSE, wParam, lParam );
if( hb_set.HB_SET_CANCEL )
hb_vmRequestCancel();
return 0;
@@ -1149,6 +1402,46 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara
}
return 0;
*/
/* Pritpal Bedi - 06 Jun 2008 */
case WM_ACTIVATE:
hb_gt_wvt_FireEvent( pWVT, ( LOWORD( wParam ) == WA_INACTIVE ? GTI_CB_KILLFOCUS : GTI_CB_SETFOCUS ), wParam, lParam );
return 0;
case WM_COMMAND:
hb_gt_wvt_FireEvent( pWVT, GTI_CB_COMMAND, wParam, lParam );
return 0;
case WM_SIZE:
if( !pWVT->bMaximized )
{
hb_gt_wvt_FireEvent( pWVT, GTI_CB_SIZE, (WPARAM) LOWORD( lParam ), (LPARAM) HIWORD( lParam ) );
}
else
{
pWVT->bMaximized = FALSE;
}
return 0;
/* NOTE: This message has more powerful features than what I implemented as above commented out */
case WM_TIMER:
hb_gt_wvt_FireEvent( pWVT, GTI_CB_TIMER, wParam, lParam );
return 0;
case WM_SYSCOMMAND:
switch(wParam)
{
case SC_MAXIMIZE:
{
RECT rc = {0,0,0,0};
pWVT->bMaximized = TRUE;
SystemParametersInfo( SPI_GETWORKAREA,0, &rc, 0 );
hb_gt_wvt_FireEvent( pWVT, GTI_CB_SIZE, (WPARAM) (rc.right-rc.left-pWVT->PTEXTSIZE.x),
(LPARAM) (rc.bottom-rc.top-(pWVT->PTEXTSIZE.y*1)) );
return 0;
}
}
break;
}
return DefWindowProc( hWnd, message, wParam, lParam );

View File

@@ -154,6 +154,8 @@ typedef struct
BOOL IgnoreWM_SYSCHAR;
BOOL bMaximized; /* Flag is set when window has been maximized */
} HB_GTWVT, * PHB_GTWVT;
/* xHarbour compatible definitions */

View File

@@ -152,6 +152,52 @@ static void hb_gt_def_Free( PHB_GT pGT )
if( pGT->iColorCount > 0 )
hb_xfree( pGT->pColor );
/* Pritpal Bedi */
if( hb_itemType( pGT->pDynSymINKEY ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymINKEY );
if( pGT->pDynSymINKEYdata )
hb_itemRelease( pGT->pDynSymINKEYdata );
if( hb_itemType( pGT->pDynSymCLOSE ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymCLOSE );
if( pGT->pDynSymCLOSEdata )
hb_itemRelease( pGT->pDynSymCLOSEdata );
if( hb_itemType( pGT->pDynSymCOMMAND ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymCOMMAND );
if( pGT->pDynSymCOMMANDdata )
hb_itemRelease( pGT->pDynSymCOMMANDdata );
if( hb_itemType( pGT->pDynSymTIMER ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymTIMER );
if( pGT->pDynSymTIMERdata )
hb_itemRelease( pGT->pDynSymTIMERdata );
if( hb_itemType( pGT->pDynSymACTIVATE ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymACTIVATE );
if( pGT->pDynSymACTIVATEdata )
hb_itemRelease( pGT->pDynSymACTIVATEdata );
if( hb_itemType( pGT->pDynSymSETFOCUS ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymSETFOCUS );
if( pGT->pDynSymSETFOCUSdata )
hb_itemRelease( pGT->pDynSymSETFOCUSdata );
if( hb_itemType( pGT->pDynSymKILLFOCUS ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymKILLFOCUS );
if( pGT->pDynSymKILLFOCUSdata )
hb_itemRelease( pGT->pDynSymKILLFOCUSdata );
if( hb_itemType( pGT->pDynSymMOUSE ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymMOUSE );
if( pGT->pDynSymMOUSEdata )
hb_itemRelease( pGT->pDynSymMOUSEdata );
if( hb_itemType( pGT->pDynSymSIZE ) & HB_IT_BLOCK )
hb_itemRelease( pGT->pDynSymSIZE );
if( pGT->pDynSymSIZEdata )
hb_itemRelease( pGT->pDynSymSIZEdata );
if( s_curGT == pGT )
s_curGT = NULL;
hb_xfree( pGT );
@@ -1539,6 +1585,92 @@ static BOOL hb_gt_def_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
}
break;
case GTI_CALLBACK:
{
BOOL bSet = TRUE;
int iElems = hb_arrayLen( pInfo->pNewVal );
PHB_DYNS pDynSym;
if( iElems >= 2 )
{
if( hb_itemType( hb_arrayGetItemPtr( pInfo->pNewVal,2 ) ) & HB_IT_STRING )
{
pDynSym = hb_dynsymFind( hb_arrayGetCPtr( pInfo->pNewVal,2 ) );
}
else if( hb_itemType( hb_arrayGetItemPtr( pInfo->pNewVal,2 ) ) & HB_IT_BLOCK )
{
pDynSym = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,2 ) );
}
if ( pDynSym )
{
switch ( hb_arrayGetNI( pInfo->pNewVal,1 ) )
{
case GTI_CB_CLOSE:
pGT->pDynSymCLOSE = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymCLOSEdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_INKEY:
pGT->pDynSymINKEY = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymINKEYdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_TIMER:
pGT->pDynSymTIMER = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymTIMERdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_ACTIVATE:
pGT->pDynSymACTIVATE = pDynSym;
break;
case GTI_CB_SETFOCUS:
pGT->pDynSymSETFOCUS = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymSETFOCUSdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_KILLFOCUS:
pGT->pDynSymKILLFOCUS = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymKILLFOCUSdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_MOUSE:
pGT->pDynSymMOUSE = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymKILLFOCUSdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
case GTI_CB_SIZE:
pGT->pDynSymSIZE = pDynSym;
if ( iElems >= 3 )
{
pGT->pDynSymSIZEdata = hb_itemNew( hb_arrayGetItemPtr( pInfo->pNewVal,3 ) );
}
break;
}
}
}
break;
}
default:
return FALSE;
}
@@ -1868,7 +2000,7 @@ static int hb_gt_def_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions,
}
if( iKey >= 32 && iKey <= 255 )
{
char szVal[2];
char szVal[2];
szVal[ 0 ] = ( char ) iKey;
szVal[ 1 ] = '\0';
HB_GTSELF_WRITECON( pGT, ( BYTE * ) szVal, 1 );
@@ -1999,7 +2131,7 @@ static void hb_gt_def_ColdArea( PHB_GT pGT, int iTop, int iLeft, int iBottom, in
if( iLeft > iRight )
{
i = iLeft;
iLeft = iRight;
iLeft = iRight;
iRight = i;
}
while( iTop <= iBottom )
@@ -2032,7 +2164,7 @@ static void hb_gt_def_ExposeArea( PHB_GT pGT, int iTop, int iLeft, int iBottom,
if( iLeft > iRight )
{
i = iLeft;
iLeft = iRight;
iLeft = iRight;
iRight = i;
}
while( iTop <= iBottom )

86
harbour/tests/wvtext.prg Normal file
View File

@@ -0,0 +1,86 @@
//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
//
// [x]Harbour Extended Features Deno
// .
// Pritpal Bedi <pritpal@vouchcac.com>
//
//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
//----------------------------------------------------------------------//
#include 'HbGtInfo.ch'
//----------------------------------------------------------------------//
FUNCTION Main()
Local nKey
SetMode( 25,80 )
SetCursor( 0 )
SetColor( 'n/w' )
// Any CALLBACK function receive 5 parameters PLUS any additional parameters
// supplied with the CALLBACK Block.
//
HB_GtInfo( GTI_CALLBACK, { GTI_CB_SETFOCUS, {|a,b,c,d,e| MyCallBacks( a,b,c,d,e,'MyParam' ) }, { 'MyCargo' } } )
HB_GtInfo( GTI_CALLBACK, { GTI_CB_CLOSE , {|a,b,c,d,e| MyCallBacks( a,b,c,d,e ) } } )
DispScreen()
DO WHILE .T.
nKey := Inkey()
if nKey == 27
exit
endif
DO CASE
CASE nKey == 13
Alert( '<Enter> Pressed' )
ENDCASE
ENDDO
RETURN NIL
//----------------------------------------------------------------------//
STATIC FUNCTION MyCallBacks( nEvent, iGT, xCargo, wParam, lParam, xSentByMe )
DO CASE
CASE nEvent == GTI_CB_SETFOCUS
DispOutAt( 5,10, xCargo[ 1 ], 'N/W' ) // We have sent { 'MyCargo' }
DispOutAt( 6,10, xSentByMe , 'R/W' ) // We are sending 'MyParam'
CASE nEvent == GTI_CB_CLOSE
DispScreen()
if Alert( 'Close Application', {'Yes','No' } ) == 1
QUIT
endif
ENDCASE
RETURN 0
//----------------------------------------------------------------------//
STATIC FUNCTION DispScreen()
CLS
DispOutAt( 0,0,padc( '[x]Harbour GT - New Features', maxcol()+1 ), 'N/GR*' )
DispOutAt( maxrow(),0,padc( '<Click Other Window> <Click X Button> <ESC Quit>', maxcol()+1 ), 'N/G*' )
RETURN NIL
//----------------------------------------------------------------------//
FUNCTION HB_GTSYS()
REQUEST HB_GT_WVT_DEFAULT
RETURN nil
//----------------------------------------------------------------------//