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:
@@ -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 );
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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
86
harbour/tests/wvtext.prg
Normal 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
|
||||
|
||||
//----------------------------------------------------------------------//
|
||||
|
||||
Reference in New Issue
Block a user