3180 lines
82 KiB
Plaintext
3180 lines
82 KiB
Plaintext
/*
|
|
* Wvt*Classes
|
|
*
|
|
* Copyright 2007-2012 Pritpal Bedi <bedipritpal@hotmail.com>
|
|
* Based On:
|
|
* Video subsystem for Windows using GUI windows instead of Console
|
|
* Copyright 2003 Peter Rees <peter@rees.co.nz>
|
|
* Rees Software and Systems Ltd
|
|
*
|
|
* 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 program; see the file LICENSE.txt. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA (or visit https://www.gnu.org/licenses/).
|
|
*
|
|
* 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.
|
|
*
|
|
*/
|
|
|
|
#include "hbclass.ch"
|
|
#include "hbgtinfo.ch"
|
|
#include "inkey.ch"
|
|
#include "setcurs.ch"
|
|
|
|
#include "wvtwin.ch"
|
|
|
|
#define K_LBUTTONPRESSED 1021
|
|
#define K_RBUTTONPRESSED 1022
|
|
#define K_MBUTTONPRESSED 1023
|
|
|
|
#define K_SBLINEUP 1051
|
|
#define K_SBLINEDOWN 1052
|
|
#define K_SBPAGEUP 1053
|
|
#define K_SBPAGEDOWN 1054
|
|
|
|
#define K_SBLINELEFT 1055
|
|
#define K_SBLINERIGHT 1056
|
|
#define K_SBPAGELEFT 1057
|
|
#define K_SBPAGERIGHT 1058
|
|
|
|
#define K_SBTHUMBTRACKVERT 1059
|
|
#define K_SBTHUMBTRACKHORZ 1060
|
|
|
|
#define OBJ_CHILD_OBJ 1
|
|
#define OBJ_CHILD_EVENTS 2
|
|
#define OBJ_CHILD_DATABLOCK 3
|
|
#define OBJ_CHILD_REFRESHBLOCK 4
|
|
|
|
CREATE CLASS WvtDialog
|
|
|
|
/* To hold previous settings */
|
|
VAR nOldRows
|
|
VAR nOldCols
|
|
VAR aOldFont
|
|
VAR cOldTitle
|
|
VAR cOldColor
|
|
VAR nOldCursor
|
|
VAR aPalette
|
|
VAR cScreen
|
|
VAR aWvtScreen
|
|
VAR aOldPnt
|
|
VAR oldTooltipActive
|
|
VAR oldTooltipWidth
|
|
VAR oldTooltipBkColor
|
|
VAR oldTooltipTextColor
|
|
VAR oldMenuHandle
|
|
VAR oldMenuBlock
|
|
VAR lGui
|
|
|
|
/* Dialog parameters */
|
|
VAR nRows
|
|
VAR nCols
|
|
VAR cFont
|
|
VAR nFontHeight
|
|
VAR nFontWidth
|
|
VAR nFontBold
|
|
VAR nFontQuality
|
|
VAR cTitle
|
|
VAR cColor
|
|
|
|
/* Objects handling */
|
|
VAR aObjects INIT {}
|
|
VAR oCurObj
|
|
VAR oLastObj
|
|
VAR oObjOver
|
|
VAR oLastOver
|
|
VAR nCurObj INIT 1
|
|
VAR nLastObj INIT 0
|
|
VAR nObjOver INIT 0
|
|
VAR nLastOver INIT -1
|
|
VAR nUseObj
|
|
VAR oMenu
|
|
VAR aDialogKeys INIT {}
|
|
VAR cDialogID INIT ""
|
|
|
|
/* Tooltip Management */
|
|
VAR nTooltipWidth
|
|
VAR nTooltipBkColor
|
|
VAR nTooltipTextColor
|
|
|
|
/* Miscellaneous */
|
|
VAR ClassName INIT "WVTDIALOG"
|
|
VAR cPaintBlockID
|
|
VAR nPaintID INIT 1
|
|
VAR nObjID INIT 5000
|
|
VAR nKey
|
|
VAR hFonts INIT {}
|
|
VAR lEventHandled
|
|
VAR lTabStops INIT .F.
|
|
VAR bOnCreate
|
|
|
|
ACCESS nObjects INLINE Len( ::aObjects )
|
|
|
|
METHOD New( nRows, nCols, cTitle, cFont, nFontHeight, nFontWidth, nFontBold, nFontQuality )
|
|
METHOD create()
|
|
METHOD Destroy()
|
|
METHOD Event()
|
|
METHOD Execute()
|
|
METHOD Inkey()
|
|
METHOD MouseOver()
|
|
METHOD Update()
|
|
METHOD CreateObjects()
|
|
METHOD Eval( bBlock, p1, p2, p3, p4, p5 )
|
|
METHOD ActivateMenu()
|
|
|
|
METHOD AddObject( oObject ) INLINE AAdd( ::aObjects, oObject )
|
|
METHOD MaxRow() INLINE ::nRows - 1
|
|
METHOD MaxCol() INLINE ::nCols - 1
|
|
METHOD OnTimer() INLINE AEval( ::aObjects, {| o | o:OnTimer() } )
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtDialog:New( nRows, nCols, cTitle, cFont, nFontHeight, nFontWidth, nFontBold, nFontQuality )
|
|
|
|
LOCAL fnt_ := wvt_GetFontInfo()
|
|
|
|
__defaultNIL( @nRows , 25 )
|
|
__defaultNIL( @nCols , 80 )
|
|
__defaultNIL( @cTitle , wvt_GetTitle() )
|
|
__defaultNIL( @cFont , fnt_[ 1 ] )
|
|
__defaultNIL( @nFontHeight , fnt_[ 2 ] )
|
|
__defaultNIL( @nFontWidth , fnt_[ 3 ] )
|
|
__defaultNIL( @nFontBold , fnt_[ 4 ] )
|
|
__defaultNIL( @nFontQuality , fnt_[ 5 ] )
|
|
|
|
IF Empty( cFont )
|
|
cFont := fnt_[ 1 ]
|
|
ENDIF
|
|
IF Empty( nFontHeight )
|
|
nFontHeight := fnt_[ 2 ]
|
|
ENDIF
|
|
IF Empty( nFontWidth )
|
|
nFontWidth := fnt_[ 3 ]
|
|
ENDIF
|
|
|
|
::nOldRows := MaxRow() + 1
|
|
::nOldCols := MaxCol() + 1
|
|
::aOldFont := wvt_GetFontInfo()
|
|
::cOldTitle := wvt_GetTitle()
|
|
::cOldColor := SetColor()
|
|
::nOldCursor := SetCursor()
|
|
::aPalette := wvt_GetPalette()
|
|
|
|
::oldMenuHandle := wvt_GetMenu()
|
|
::oldMenuBlock := SetKey( wvt_SetMenuKeyEvent() )
|
|
|
|
::oldTooltipWidth := wvt_GetToolTipWidth()
|
|
::oldTooltipBkColor := wvt_GetToolTipBkColor()
|
|
::oldTooltipTextColor := wvt_GetToolTipTextColor()
|
|
|
|
::nRows := nRows
|
|
::nCols := nCols
|
|
::cTitle := cTitle
|
|
::cFont := cFont
|
|
::nFontHeight := nFontHeight
|
|
::nFontWidth := nFontWidth
|
|
::nFontBold := nFontBold
|
|
::nFontQuality := nFontQuality
|
|
|
|
::cPaintBlockID := StrZero( hb_Random( 99999998 ), 8 )
|
|
::nObjOver := 0
|
|
::nKey := 0
|
|
::cColor := "N/W"
|
|
::nUseObj := 0
|
|
::lGui := wvt_SetGUI( .F. )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtDialog:Create()
|
|
|
|
LOCAL aPalette, i, j
|
|
|
|
::oldToolTipActive := wvt_SetToolTipActive( .T. )
|
|
IF ::nTooltipWidth != NIL
|
|
wvt_SetToolTipWidth( ::nTooltipWidth )
|
|
ENDIF
|
|
IF ::nTooltipBkColor != NIL
|
|
wvt_SetToolTipBkColor( ::nTooltipBkColor )
|
|
ENDIF
|
|
IF ::nTooltipTextColor != NIL
|
|
wvt_SetToolTipTextColor( ::nTooltipTextColor )
|
|
ENDIF
|
|
|
|
aPalette := wvt_GetPalette()
|
|
aPalette[ 9 ] := RGB( 175, 175, 175 )
|
|
wvt_SetPalette( aPalette )
|
|
|
|
::cScreen := SaveScreen( 0, 0, MaxRow(), MaxCol() )
|
|
::aWvtScreen := wvt_SaveScreen( 0, 0, MaxRow(), MaxCol() )
|
|
::aOldPnt := WvtSetPaint( {} )
|
|
|
|
SetMode( ::nRows, ::nCols )
|
|
DO WHILE .T.
|
|
IF wvt_SetFont( ::cFont, ::nFontHeight, ::nFontWidth, ::nFontBold, ::nFontQuality )
|
|
EXIT
|
|
ENDIF
|
|
::nFontHeight--
|
|
ENDDO
|
|
#if 0
|
|
wvt_SetFont( ::cFont, ::nFontHeight, ::nFontWidth, ::nFontBold, ::nFontQuality )
|
|
#endif
|
|
SetMode( ::nRows, ::nCols )
|
|
|
|
wvt_SetTitle( ::cTitle )
|
|
|
|
SetColor( ::cColor )
|
|
CLS
|
|
::Eval( ::bOnCreate )
|
|
|
|
::CreateObjects()
|
|
|
|
IF Len( ::aObjects ) > 0
|
|
::oCurObj := ::aObjects[ 1 ]
|
|
ENDIF
|
|
|
|
FOR i := 1 TO Len( ::aObjects )
|
|
IF ! Empty( ::aObjects[ i ]:aPaint )
|
|
FOR j := 1 TO Len( ::aObjects[ i ]:aPaint )
|
|
wvg_SetPaint( ::cPaintBlockID, ::nPaintID++, ;
|
|
::aObjects[ i ]:aPaint[ j ][ 1 ], ::aObjects[ i ]:aPaint[ j ][ 2 ] )
|
|
NEXT
|
|
ENDIF
|
|
NEXT
|
|
WvtSetPaint( wvg_GetPaint( ::cPaintBlockID ) )
|
|
|
|
IF AScan( ::aObjects, {| o | o:lTabStop } ) > 0
|
|
::lTabStops := .T.
|
|
ENDIF
|
|
|
|
::Update()
|
|
|
|
IF HB_ISOBJECT( ::oMenu )
|
|
wvt_SetMenu( ::oMenu:hMenu )
|
|
wvt_DrawMenuBar()
|
|
SetKey( wvt_SetMenuKeyEvent(), {|| ::ActivateMenu( ::oMenu ) } )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD PROCEDURE WvtDialog:Destroy()
|
|
|
|
IF HB_ISOBJECT( ::oMenu )
|
|
::oMenu:Destroy()
|
|
ENDIF
|
|
|
|
AEval( ::aObjects, {| o | o:destroy() } )
|
|
|
|
wvt_SetToolTip( 0, 0, 0, 0, "" )
|
|
wvt_SetToolTipActive( ::oldToolTipActive )
|
|
wvt_SetToolTipWidth( ::oldTooltipWidth )
|
|
wvt_SetToolTipBkColor( ::oldTooltipBkColor )
|
|
wvt_SetToolTipTextColor( ::oldTooltipTextColor )
|
|
|
|
/* Here set mode is before setting the font */
|
|
SetMode( ::nOldRows, ::nOldCols )
|
|
wvt_SetFont( ::aOldFont[ 1 ], ::aOldFont[ 2 ], ::aOldFont[ 3 ], ::aOldFont[ 4 ], ::aOldFont[ 5 ] )
|
|
wvt_SetTitle( ::cOldTitle )
|
|
wvt_SetPalette( ::aPalette )
|
|
wvt_SetPointer( WVT_IDC_ARROW )
|
|
wvt_SetMousePos( MRow(), MCol() )
|
|
|
|
SetColor( ::cOldColor )
|
|
SetCursor( ::nOldCursor )
|
|
|
|
IF ::oldMenuHandle != NIL .AND. ::oldMenuHandle != 0
|
|
wvt_SetMenu( ::oldMenuHandle )
|
|
ENDIF
|
|
SetKey( wvt_SetMenuKeyEvent(), ::oldMenuBlock )
|
|
RestScreen( 0, 0, MaxRow(), MaxCol(), ::cScreen )
|
|
wvt_RestScreen( 0, 0, MaxRow(), MaxCol(), ::aWvtScreen )
|
|
wvg_PurgePaint( ::cPaintBlockID )
|
|
WvtSetPaint( ::aOldPnt )
|
|
wvt_SetGUI( ::lGui )
|
|
|
|
RETURN
|
|
|
|
METHOD WvtDialog:Event()
|
|
|
|
LOCAL nKey
|
|
|
|
IF ( nKey := Inkey( 0.1, INKEY_ALL + HB_INKEY_GTEVENT ) ) == 0
|
|
IF wvt_IsLButtonPressed()
|
|
nKey := K_LBUTTONPRESSED
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN nKey
|
|
|
|
METHOD WvtDialog:Execute()
|
|
|
|
IF ::nObjects == 0
|
|
DO WHILE .T.
|
|
IF Inkey( 0.1, hb_bitOr( INKEY_ALL, HB_INKEY_GTEVENT ) ) == K_ESC
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ELSE
|
|
DO WHILE ::Inkey() != K_ESC
|
|
ENDDO
|
|
ENDIF
|
|
|
|
RETURN ::nKey
|
|
|
|
METHOD WvtDialog:Inkey()
|
|
|
|
LOCAL n, oObj, nID, i
|
|
|
|
::lEventHandled := .F.
|
|
::nUseObj := 0
|
|
|
|
::nKey := ::Event()
|
|
::OnTimer()
|
|
|
|
IF ::nKey != 0
|
|
IF ::nKey == K_ESC .OR. ::nKey == K_CTRL_ENTER
|
|
RETURN K_ESC
|
|
ENDIF
|
|
|
|
DO CASE
|
|
|
|
CASE ::nKey == K_TAB
|
|
IF ::lTabStops
|
|
DO WHILE .T.
|
|
::nCurObj++
|
|
IF ::nCurObj > ::nObjects
|
|
::nCurObj := 1
|
|
ENDIF
|
|
IF ::aObjects[ ::nCurObj ]:lTabStop
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
::lEventHandled := .T.
|
|
|
|
CASE ::nKey == K_SH_TAB
|
|
IF ::lTabStops
|
|
DO WHILE .T.
|
|
::nCurObj--
|
|
IF ::nCurObj < 1
|
|
::nCurObj := ::nObjects
|
|
ENDIF
|
|
IF ::aObjects[ ::nCurObj ]:lTabStop
|
|
EXIT
|
|
ENDIF
|
|
ENDDO
|
|
ENDIF
|
|
|
|
::lEventHandled := .T.
|
|
|
|
CASE ::nKey == K_MOUSEMOVE .OR. ::nKey == K_MMLEFTDOWN
|
|
::MouseOver()
|
|
IF ::nObjOver == 0
|
|
wvt_SetPointer( WVT_IDC_ARROW )
|
|
ELSEIF ::oObjOver:nPointer != NIL .AND. ::oObjOver:lActive
|
|
wvt_SetPointer( ::oObjOver:nPointer )
|
|
ELSE
|
|
wvt_SetPointer( WVT_IDC_ARROW )
|
|
ENDIF
|
|
::lEventHandled := .T.
|
|
|
|
ENDCASE
|
|
|
|
IF ::nKey == K_LBUTTONDOWN .OR. ;
|
|
::nKey == K_LBUTTONUP .OR. ;
|
|
::nKey == K_LDBLCLK .OR. ;
|
|
::nKey == K_MMLEFTDOWN .OR. ;
|
|
::nKey == K_LBUTTONPRESSED .OR. ;
|
|
::nKey == K_RBUTTONDOWN
|
|
|
|
::MouseOver()
|
|
|
|
IF ::nObjOver > 0
|
|
IF ::aObjects[ ::nObjOver ]:nType == DLG_OBJ_BUTTON .OR. ;
|
|
::aObjects[ ::nObjOver ]:nType == DLG_OBJ_TOOLBAR .OR. ;
|
|
::aObjects[ ::nObjOver ]:nType == DLG_OBJ_PUSHBUTTON .OR. ;
|
|
::aObjects[ ::nObjOver ]:nType == DLG_OBJ_SCROLLBAR
|
|
|
|
oObj := ::aObjects[ ::nObjOver ]
|
|
IF oObj:oParent:className() == "WVTBROWSE"
|
|
nID := oObj:oParent:nID
|
|
IF ( n := AScan( ::aObjects, {| o | o:nID == nID } ) ) > 0
|
|
::nCurObj := n
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
::nCurObj := ::nObjOver
|
|
ENDIF
|
|
::nUseObj := ::nObjOver
|
|
ELSE
|
|
::lEventHandled := .T.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nLastOver != ::nObjOver
|
|
IF ::nLastOver > 0
|
|
::aObjects[ ::nLastOver ]:HoverOff()
|
|
ENDIF
|
|
|
|
::nLastOver := ::nObjOver
|
|
|
|
IF ::nObjOver > 0
|
|
::oObjOver:HoverOn()
|
|
ENDIF
|
|
|
|
IF ::nObjOver == 0
|
|
wvt_SetToolTip( 0, 0, 0, 0, "" )
|
|
ELSEIF ::oObjOver:lActive
|
|
::oObjOver:SetTooltip()
|
|
ELSE
|
|
wvt_SetToolTip( 0, 0, 0, 0, "" )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nCurObj != ::nLastObj
|
|
IF ::nLastObj == 0
|
|
::aObjects[ ::nCurObj ]:Hilite()
|
|
ELSE
|
|
::aObjects[ ::nLastObj ]:DeHilite()
|
|
::aObjects[ ::nCurObj ]:Hilite()
|
|
ENDIF
|
|
|
|
::nLastObj := ::nCurObj
|
|
::oCurObj := ::aObjects[ ::nCurObj ]
|
|
::oLastObj := ::aObjects[ ::nCurObj ]
|
|
|
|
IF ::oCurObj:nType == DLG_OBJ_BROWSE
|
|
dbSelectArea( ::oCurObj:cAlias )
|
|
ENDIF
|
|
|
|
::Eval( ::oCurObj:bOnFocus, ::oCurObj )
|
|
ENDIF
|
|
|
|
IF ::nKey == K_LBUTTONDOWN
|
|
IF ::nUseObj > 0
|
|
IF !( ::lEventHandled := ::aObjects[ ::nUseObj ]:LeftDown() )
|
|
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnLeftDown )
|
|
IF ::aObjects[ ::nUseObj ]:className() == "WVTBROWSE"
|
|
::lEventHandled := .F.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nKey == K_LBUTTONUP
|
|
IF ::nUseObj > 0
|
|
IF !( ::lEventHandled := ::aObjects[ ::nUseObj ]:LeftUp() )
|
|
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnLeftUp )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nKey == K_MMLEFTDOWN
|
|
IF ::nUseObj > 0
|
|
IF !( ::lEventHandled := ::aObjects[ ::nUseObj ]:MMLeftDown() )
|
|
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnMMLeftDown )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nKey == K_LBUTTONPRESSED
|
|
IF ::nUseObj > 0
|
|
IF !( ::lEventHandled := ::aObjects[ ::nUseObj ]:LeftPressed() )
|
|
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnLeftPressed )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nKey == K_LDBLCLK
|
|
IF ::nUseObj > 0
|
|
::lEventHandled := ::Eval( ::aObjects[ ::nUseObj ]:bOnSelect )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ::nKey == K_RBUTTONDOWN .AND. ::nUseObj > 0
|
|
::lEventHandled := ::aObjects[ ::nUseObj ]:ShowPopup()
|
|
ENDIF
|
|
|
|
IF ! ::lEventHandled
|
|
IF ::nCurObj > 0
|
|
IF ! Empty( ::aDialogKeys )
|
|
IF ( n := AScan( ::aDialogKeys, {| e_ | e_[ 1 ] == ::nKey } ) ) > 0
|
|
Eval( ::aDialogKeys[ n ][ 2 ], Self, ::oCurObj )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
::lEventHandled := ::oCurObj:HandleEvent( ::nKey )
|
|
|
|
IF ::lEventHandled
|
|
IF ::oCurObj:nChildren > 0
|
|
FOR i := 1 to ::oCurObj:nChildren
|
|
IF AScan( ::oCurObj:aChildren[ i ][ OBJ_CHILD_EVENTS ], ::nKey ) > 0
|
|
::oCurObj:NotifyChild( i, ::nKey, ::oCurObj )
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ! ::lEventHandled
|
|
IF HB_ISBLOCK( SetKey( ::nKey ) )
|
|
Eval( SetKey( ::nKey ) )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN ::nKey
|
|
|
|
METHOD WvtDialog:MouseOver()
|
|
|
|
LOCAL mRow := MRow()
|
|
LOCAL mCol := MCol()
|
|
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 } )
|
|
|
|
::nObjOver := nObj
|
|
::oObjOver := iif( nObj > 0, ::aObjects[ nObj ], NIL )
|
|
IF nObj > 0
|
|
::aObjects[ nObj ]:nmRow := mRow
|
|
::aObjects[ nObj ]:nmCol := mCol
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtDialog:Update()
|
|
|
|
wvt_InvalidateRect( 0, 0, ::MaxRow(), ::MaxCol() )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtDialog:CreateObjects()
|
|
|
|
LOCAL i, nObjs
|
|
|
|
nObjs := Len( ::aObjects )
|
|
|
|
FOR i := 1 TO nObjs
|
|
SWITCH ::aObjects[ i ]:nType
|
|
|
|
CASE DLG_OBJ_BROWSE
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_STATUSBAR
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_LABEL
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_TOOLBAR
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_BUTTON
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_PUSHBUTTON
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_IMAGE
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_STATIC
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
#if 0
|
|
CASE DLG_OBJ_SCROLLBAR
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
#endif
|
|
CASE DLG_OBJ_GETS
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_BANNER
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_TEXTBOX
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
CASE DLG_OBJ_PROGRESSBAR
|
|
::aObjects[ i ]:Create()
|
|
EXIT
|
|
ENDSWITCH
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtDialog:Eval( bBlock, p1, p2, p3, p4, p5 )
|
|
|
|
LOCAL lRet
|
|
|
|
IF ( lRet := HB_ISBLOCK( bBlock ) )
|
|
Eval( bBlock, p1, p2, p3, p4, p5 )
|
|
ENDIF
|
|
|
|
RETURN lRet
|
|
|
|
METHOD WvtDialog:ActivateMenu()
|
|
|
|
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 Self
|
|
|
|
/*
|
|
* Class WvtObject
|
|
*
|
|
* Must never be used directly. It is parent class FOR all other objects!
|
|
*/
|
|
CREATE CLASS WvtObject
|
|
|
|
VAR oParent
|
|
VAR nType
|
|
VAR nId
|
|
|
|
VAR nTop
|
|
VAR nLeft
|
|
VAR nBottom
|
|
VAR nRight
|
|
VAR aPxlTLBR INIT {}
|
|
|
|
VAR aObjects INIT {}
|
|
VAR aParent INIT {}
|
|
VAR aChildren INIT {}
|
|
VAR aPaint INIT {}
|
|
VAR bPaint
|
|
VAR ClassName INIT ""
|
|
|
|
VAR nObjID INIT 900000
|
|
VAR nPointer
|
|
VAR cargo
|
|
VAR xSettings
|
|
VAR cText
|
|
VAR cToolTip
|
|
VAR lActive INIT .T.
|
|
VAR lAnimate INIT .F.
|
|
VAR lTabStop INIT .T.
|
|
VAR hFont
|
|
|
|
VAR aPopup INIT {}
|
|
VAR hPopup INIT NIL
|
|
VAR nPopupItemID INIT 700000
|
|
|
|
VAR nMRow INIT 0
|
|
VAR nMCol INIT 0
|
|
VAR cColorHilite INIT "W+/B*"
|
|
VAR cColorDehilite INIT "W/N*"
|
|
|
|
VAR nTextColor
|
|
VAR nBackColor
|
|
VAR nBackMode INIT 0 /* OPAQUE 1-TRANSPARENT */
|
|
VAR nTextColorHoverOn
|
|
VAR nTextColorHoverOff
|
|
VAR nBackColorHoverOn
|
|
VAR nBackColorHoverOff
|
|
VAR cFont
|
|
VAR nFontHeight
|
|
VAR nFontWidth
|
|
VAR nFontWeight
|
|
VAR nFontQuality
|
|
VAR nCharSet
|
|
VAR lItalic
|
|
VAR lUnderline
|
|
VAR lStrikeOut
|
|
VAR nAlignHorz
|
|
VAR nAlignVert
|
|
VAR nAngle
|
|
|
|
ACCESS ToolTip INLINE iif( ::cTooltip == NIL, "", ::cTooltip )
|
|
ASSIGN ToolTip( cTip ) INLINE ::cToolTip := cTip
|
|
|
|
VAR bHandleEvent
|
|
VAR bOnCreate INIT {|| NIL }
|
|
VAR bOnSelect INIT {|| NIL }
|
|
VAR bOnFocus INIT {|| NIL }
|
|
VAR bOnRefresh INIT {|| NIL }
|
|
VAR bOnLeftUp INIT {|| NIL }
|
|
VAR bOnLeftDown INIT {|| .F. }
|
|
VAR bOnMMLeftDown INIT {|| NIL }
|
|
VAR bOnLeftPressed INIT {|| NIL }
|
|
VAR bTooltip INIT {|| NIL }
|
|
VAR bSaveSettings INIT {|| NIL }
|
|
VAR bRestSettings INIT {|| NIL }
|
|
VAR bOnHilite INIT {|| NIL }
|
|
VAR bOnDeHilite INIT {|| NIL }
|
|
|
|
ACCESS nChildren INLINE Len( ::aChildren )
|
|
VAR nIndexOrder
|
|
|
|
METHOD New( oParent, nType, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Destroy()
|
|
METHOD CreatePopup()
|
|
METHOD ShowPopup()
|
|
|
|
METHOD SetToolTip() INLINE wvt_SetToolTip( ::nTop, ::nLeft, ::nBottom, ::nRight, ::Tooltip )
|
|
METHOD Refresh() INLINE wvt_InvalidateRect( ::nTop, ::nLeft, ::nTop, ::nLeft )
|
|
METHOD Eval( bBlock ) INLINE iif( HB_ISEVALITEM( bBlock ), Eval( bBlock, Self ), NIL )
|
|
METHOD AddChild( aChild ) INLINE AAdd( ::aChildren, aChild )
|
|
METHOD AddParent( aParent ) INLINE AAdd( ::aParent, aParent )
|
|
|
|
METHOD PaintBlock() INLINE NIL
|
|
METHOD Hilite() INLINE NIL
|
|
METHOD DeHilite() INLINE NIL
|
|
METHOD HandleEvent() INLINE .F.
|
|
METHOD LeftDown() INLINE .F.
|
|
METHOD LeftUp() INLINE .F.
|
|
METHOD MMLeftDown() INLINE .F.
|
|
METHOD LeftPressed() INLINE .F.
|
|
METHOD HoverOn() INLINE NIL
|
|
METHOD HoverOff() INLINE NIL
|
|
METHOD OnTimer() INLINE NIL
|
|
METHOD SaveSettings() INLINE NIL
|
|
METHOD RestSettings() INLINE NIL
|
|
METHOD Activate() INLINE NIL
|
|
METHOD DeActivate() INLINE NIL
|
|
METHOD NotifyChild( /* nChild */ ) INLINE NIL
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtObject:New( oParent, nType, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
IF ! HB_ISNUMERIC( nID )
|
|
nID := ++::nObjID
|
|
ENDIF
|
|
|
|
::oParent := oParent
|
|
::nType := nType
|
|
::nId := nID
|
|
::nTop := nTop
|
|
::nLeft := nLeft
|
|
::nBottom := nBottom
|
|
::nRight := nRight
|
|
|
|
SWITCH nType
|
|
|
|
CASE DLG_OBJ_BROWSE
|
|
::ClassName := "WVTBROWSE"
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_STATIC
|
|
::ClassName := "WVTSTATIC"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_GETS
|
|
::ClassName := "WVTGETS"
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_IMAGE
|
|
::ClassName := "WVTIMAGE"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_PUSHBUTTON
|
|
::ClassName := "WVTPUSHBUTTON"
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_BUTTON
|
|
::ClassName := "WVTBUTTON"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_TOOLBAR
|
|
::ClassName := "WVTTOOLBAR"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_LABEL
|
|
::ClassName := "WVTLABEL"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_SCROLLBAR
|
|
::ClassName := "WVTSCROLLBAR"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_STATUSBAR
|
|
::ClassName := "WVTSTATUSBAR"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_BANNER
|
|
::ClassName := "WVTBANNER"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_TEXTBOX
|
|
::ClassName := "WVTTEXTBOX"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
CASE DLG_OBJ_PROGRESSBAR
|
|
::ClassName := "WVTPROGRESSBAR"
|
|
::lTabStop := .F.
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtObject:Create()
|
|
|
|
::Eval( ::bOnCreate )
|
|
::CreatePopup()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtObject:Destroy()
|
|
|
|
IF ::hFont != NIL
|
|
wvg_DeleteObject( ::hFont )
|
|
::hFont := NIL
|
|
ENDIF
|
|
|
|
IF ::hPopup != NIL
|
|
wvt_DestroyMenu( ::hPopup )
|
|
::hPopup := NIL
|
|
ENDIF
|
|
|
|
RETURN NIL
|
|
|
|
METHOD WvtObject:CreatePopup()
|
|
|
|
LOCAL i, nID
|
|
|
|
IF ! Empty( ::aPopup ) .AND. ::hPopup == NIL
|
|
::hPopup := wvt_CreatePopupMenu()
|
|
|
|
FOR i := 1 TO Len( ::aPopup )
|
|
|
|
ASize( ::aPopup[ i ], 3 )
|
|
nID := ::nPopupItemID++
|
|
::aPopup[ i ][ 3 ] := nID
|
|
|
|
wvt_AppendMenu( ::hPopup, MF_ENABLED + MF_STRING, nID, ::aPopup[ i ][ 1 ] )
|
|
NEXT
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtObject:ShowPopup()
|
|
|
|
LOCAL lRet := .F., nRet, n, aPos
|
|
|
|
IF ::hPopup != NIL
|
|
aPos := wvt_GetCursorPos()
|
|
|
|
nRet := wvt_TrackPopupMenu( ::hPopup, TPM_CENTERALIGN + TPM_RETURNCMD, ;
|
|
aPos[ 1 ], aPos[ 2 ], 0, wvt_GetWindowHandle() )
|
|
IF nRet > 0
|
|
IF ( n := AScan( ::aPopup, {| e_ | e_[ 3 ] == nRet } ) ) > 0
|
|
lRet := .T.
|
|
|
|
IF HB_ISBLOCK( ::aPopup[ n ][ 2 ] )
|
|
Eval( ::aPopup[ n ][ 2 ] )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN lRet
|
|
|
|
/* Class WvtBrowse */
|
|
CREATE CLASS WvtBrowse INHERIT WvtObject
|
|
|
|
VAR cAlias
|
|
VAR oBrw
|
|
VAR lHSBar INIT .T.
|
|
VAR lVSBar INIT .T.
|
|
VAR oHBar
|
|
VAR oVBar
|
|
VAR bTotalRecords
|
|
VAR bCurrentRecord
|
|
VAR bTotalColumns
|
|
VAR bCurrentColumn
|
|
|
|
ACCESS cDesc INLINE iif( ::cText == NIL, "", ::cText )
|
|
ASSIGN cDesc( cText ) INLINE ::cText := cText
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD PaintBlock( nPaintObj )
|
|
METHOD Hilite()
|
|
METHOD DeHilite()
|
|
METHOD HandleEvent( nKey )
|
|
METHOD Refresh()
|
|
METHOD SetVBar()
|
|
METHOD SetHBar()
|
|
METHOD SetTooltip()
|
|
METHOD SaveSettings()
|
|
METHOD RestSettings()
|
|
METHOD NotifyChild( nIndex, nKey, oCurObj )
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtBrowse:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_BROWSE, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:Create()
|
|
|
|
dbSelectArea( ::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 )
|
|
::PaintBlock( 4 )
|
|
|
|
::Super:Create()
|
|
|
|
__defaultNIL( @::bTotalRecords, {|| ( ::cAlias )->( ordKeyCount() ) } )
|
|
__defaultNIL( @::bCurrentRecord, {|| ( ::cAlias )->( ordKeyNo() ) } )
|
|
::SetVBar()
|
|
|
|
__defaultNIL( @::bTotalColumns, {|| ::oBrw:ColCount } )
|
|
__defaultNIL( @::bCurrentColumn, {|| ::oBrw:ColPos } )
|
|
::SetHBar()
|
|
|
|
::oBrw:ForceStable()
|
|
::DeHilite()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:SetVBar()
|
|
|
|
IF ::lVSBar
|
|
::oVBar := WvtScrollBar():New( Self, 999991, ;
|
|
::oBrw:nTop, ::oBrw:nRight + 1, ::oBrw:nBottom, ::oBrw:nRight + 2 )
|
|
::oVBar:nBarType := WVT_SCROLLBAR_VERT
|
|
::oVBar:bTotal := ::bTotalRecords
|
|
::oVBar:bCurrent := ::bCurrentRecord
|
|
::oVBar:aPxlBtnTop := { -2, 2, 0, 0 }
|
|
::oVBar:aPxlBtnBtm := { 0, 2, 2, 0 }
|
|
::oVBar:aPxlScroll := { 0, 2, 0, 0 }
|
|
::oVBar:Create()
|
|
|
|
AAdd( ::aPaint, { ::oVBar:bBtnLeftTop, ;
|
|
{ WVT_BLOCK_BUTTON, ::oVBar:nBtn1Top, ::oVBar:nBtn1Left, ;
|
|
::oVBar:nBtn1Bottom, ::oVBar:nBtn1Right } } )
|
|
|
|
AAdd( ::aPaint, { ::oVBar:bBtnRightBottom, ;
|
|
{ WVT_BLOCK_BUTTON, ::oVBar:nBtn2Top, ::oVBar:nBtn2Left, ;
|
|
::oVBar:nBtn2Bottom, ::oVBar:nBtn2Right } } )
|
|
|
|
AAdd( ::aPaint, { ::oVBar:bBtnScroll, ;
|
|
{ WVT_BLOCK_BUTTON, ::oVBar:nSTop, ::oVBar:nSLeft, ;
|
|
::oVBar:nSBottom, ::oVBar:nSRight } } )
|
|
|
|
::oParent:AddObject( ::oVBar )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:SetHBar()
|
|
|
|
IF ::lHSBar
|
|
::oHBar := WvtScrollBar():New( Self, 999990, ;
|
|
::oBrw:nBottom + 1, ::oBrw:nLeft, ::oBrw:nBottom + 1, ::oBrw:nRight )
|
|
::oHBar:nBarType := 2
|
|
::oHBar:bTotal := ::bTotalColumns
|
|
::oHBar:bCurrent := ::bCurrentColumn
|
|
::oHBar:aPxlBtnLft := { 2, -2, 0, 0 }
|
|
::oHBar:aPxlBtnRgt := { 2, 0, 0, 2 }
|
|
::oHBar:aPxlScroll := { 2, 0, 0, 0 }
|
|
::oHBar:Create()
|
|
|
|
AAdd( ::aPaint, { ::oHBar:bBtnLeftTop, ;
|
|
{ WVT_BLOCK_BUTTON, ::oHBar:nBtn1Top, ::oHBar:nBtn1Left, ;
|
|
::oHBar:nBtn1Bottom, ::oHBar:nBtn1Right } } )
|
|
AAdd( ::aPaint, { ::oHBar:bBtnRightBottom, ;
|
|
{ WVT_BLOCK_BUTTON, ::oHBar:nBtn2Top, ::oHBar:nBtn2Left, ;
|
|
::oHBar:nBtn2Bottom, ::oHBar:nBtn2Right } } )
|
|
AAdd( ::aPaint, { ::oHBar:bBtnScroll, ;
|
|
{ WVT_BLOCK_BUTTON, ::oHBar:nSTop, ::oHBar:nSLeft, ;
|
|
::oHBar:nSBottom, ::oHBar:nSRight } } )
|
|
|
|
::oParent:AddObject( ::oHBar )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:Refresh()
|
|
|
|
LOCAL nWorkArea := Select()
|
|
|
|
IF HB_ISBLOCK( ::bOnRefresh )
|
|
Eval( ::bOnRefresh, Self )
|
|
ELSE
|
|
Select( ::cAlias )
|
|
|
|
::oBrw:RefreshAll()
|
|
::oBrw:ForceStable()
|
|
|
|
Select( nWorkArea )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:HandleEvent( nKey )
|
|
|
|
LOCAL lRet := .F.
|
|
|
|
IF HB_ISBLOCK( ::bHandleEvent )
|
|
lRet := Eval( ::bHandleEvent, Self, ::oParent:cPaintBlockID, ::oBrw, nKey )
|
|
ENDIF
|
|
|
|
RETURN lRet
|
|
|
|
METHOD WvtBrowse:NotifyChild( nIndex, nKey, oCurObj )
|
|
|
|
LOCAL xData, i
|
|
|
|
IF nIndex > 0 .AND. nIndex <= Len( ::aChildren )
|
|
IF HB_ISBLOCK( ::aChildren[ nIndex ][ OBJ_CHILD_DATABLOCK ] )
|
|
xData := Eval( ::aChildren[ nIndex ][ OBJ_CHILD_DATABLOCK ] )
|
|
ENDIF
|
|
|
|
Eval( ::aChildren[ nIndex ][ OBJ_CHILD_REFRESHBLOCK ], ;
|
|
::aChildren[ nIndex ][ OBJ_CHILD_OBJ ], ;
|
|
::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:oParent:cPaintBlockID, ;
|
|
::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:oBrw, ;
|
|
nKey, ;
|
|
xData )
|
|
|
|
IF ::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:nChildren > 0
|
|
/* Pretend IF focus is current on this object */
|
|
Eval( ::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:bOnFocus, ::aChildren[ nIndex ][ OBJ_CHILD_OBJ ] )
|
|
|
|
FOR i := 1 to ::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:nChildren
|
|
::aChildren[ nIndex ][ OBJ_CHILD_OBJ ]:NotifyChild( i, nKey, ::aChildren[ nIndex ][ OBJ_CHILD_OBJ ] )
|
|
NEXT
|
|
|
|
/* Restore previous environments */
|
|
Eval( oCurObj:bOnFocus, oCurObj )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:Hilite()
|
|
|
|
LOCAL b := ::oBrw
|
|
|
|
hb_DispOutAt( b:nTop - 2, b:nLeft - 2, PadR( " " + ::cDesc, b:nRight - b:nLeft + 5 ), ::cColorHilite )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:DeHilite()
|
|
|
|
LOCAL b := ::oBrw
|
|
|
|
hb_DispOutAt( b:nTop - 2, b:nLeft - 2, PadR( " " + ::cDesc, b:nRight - b:nLeft + 5 ), ::cColorDeHilite )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:SetTooltip()
|
|
|
|
LOCAL cTip, nArea
|
|
|
|
IF HB_ISBLOCK( ::bTooltip )
|
|
::SaveSettings()
|
|
nArea := Select( ::cAlias )
|
|
|
|
Select( ::cAlias )
|
|
|
|
cTip := Eval( ::bTooltip )
|
|
|
|
Select( nArea )
|
|
|
|
::RestSettings()
|
|
ENDIF
|
|
|
|
IF cTip != NIL
|
|
::Tooltip := cTip
|
|
ENDIF
|
|
|
|
wvt_SetToolTip( ::nTop, ::nLeft, ::nBottom, ::nRight, ::Tooltip )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:SaveSettings()
|
|
|
|
IF HB_ISBLOCK( ::bSaveSettings )
|
|
::xSettings := Eval( ::bSaveSettings, Self )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:RestSettings()
|
|
|
|
IF ::xSettings != NIL .AND. HB_ISBLOCK( ::bRestSettings )
|
|
Eval( ::bRestSettings, Self )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBrowse:PaintBlock( nPaintObj )
|
|
|
|
LOCAL bBlock, b := ::oBrw
|
|
|
|
SWITCH nPaintObj
|
|
|
|
CASE 1
|
|
bBlock := {|| wvt_DrawBoxRaised( b:nTop - 2, b:nLeft - 2, b:nBottom + 1, b:nRight + 2 ) }
|
|
AAdd( ::aPaint, { bBlock, { WVT_BLOCK_BOX, b:nTop - 3, b:nLeft - 3, b:nBottom + 2, b:nRight + 3 } } )
|
|
EXIT
|
|
|
|
CASE 2
|
|
bBlock := {|| wvt_DrawBoxRecessed( b:nTop, b:nLeft, b:nBottom, b:nRight ) }
|
|
AAdd( ::aPaint, { bBlock, { WVT_BLOCK_BOX, b:nTop - 1, b:nLeft - 1, b:nBottom + 1, b:nRight + 1 } } )
|
|
EXIT
|
|
|
|
CASE 3
|
|
bBlock := {|| wvt_DrawGridHorz( b:nTop + 3, b:nLeft, b:nRight, b:nBottom - b:nTop - 2 ) }
|
|
AAdd( ::aPaint, { bBlock, { WVT_BLOCK_GRID_H, b:nTop + 4, b:nLeft + 1, b:nBottom - 1, b:nRight - 1 } } )
|
|
EXIT
|
|
|
|
CASE 4
|
|
bBlock := {|| wvt_DrawGridVert( b:nTop, b:nBottom, b:aColumnsSep, Len( b:aColumnsSep ) ) }
|
|
AAdd( ::aPaint, { bBlock, { WVT_BLOCK_GRID_V, b:nTop + 1, b:nLeft + 1, b:nBottom - 1, b:nRight - 1, b } } )
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN Self
|
|
|
|
/* WvtStatusBar */
|
|
CREATE CLASS WvtStatusBar INHERIT WvtObject
|
|
|
|
VAR aPanels
|
|
VAR cColor
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD SetPanels( aPanels )
|
|
METHOD SetText( nPanel, cText, cColor )
|
|
METHOD SetIcon( nPanel, cIconFile )
|
|
METHOD Update( nPanel, cText, cColor )
|
|
METHOD PaintBlock()
|
|
METHOD Refresh()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtStatusBar:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
__defaultNIL( @nTop, oParent:MaxRow() )
|
|
__defaultNIL( @nLeft, 0 )
|
|
__defaultNIL( @nBottom, oParent:MaxRow() )
|
|
__defaultNIL( @nRight, oParent:MaxCol() )
|
|
|
|
::Super:New( oParent, DLG_OBJ_STATUSBAR, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::cColor := "N/W"
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:Create()
|
|
|
|
::Refresh()
|
|
::PaintBlock( DLG_OBJ_STATUSBAR, Self )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:PaintBlock()
|
|
|
|
LOCAL a_ := {}, nPanels
|
|
|
|
AEval( ::aPanels, {| o | AAdd( a_, o:nTop ), AAdd( a_, o:nLeft ), ;
|
|
AAdd( a_, o:nBottom ), AAdd( a_, o:nRight ) } )
|
|
|
|
a_[ Len( a_ ) ]++
|
|
nPanels := Len( ::aPanels )
|
|
|
|
::bPaint := {|| wvt_DrawStatusBar( nPanels, a_ ) }
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_STATUSBAR, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:SetPanels( aPanels )
|
|
|
|
LOCAL i, oPanel, nID
|
|
LOCAL nLastCol := ::oParent:MaxCol()
|
|
|
|
nID := 200000
|
|
|
|
::aPanels := {}
|
|
|
|
oPanel := WvtPanel():New( ::oParent, ++nID, ::nTop, 0 )
|
|
|
|
AAdd( ::aPanels, oPanel )
|
|
|
|
IF aPanels != NIL
|
|
FOR i := 1 TO Len( aPanels )
|
|
IF ::oParent:MaxCol() > aPanels[ i ]
|
|
oPanel := WvtPanel():New( ::oParent, ++nID, ::nTop, aPanels[ i ] )
|
|
AAdd( ::aPanels, oPanel )
|
|
ENDIF
|
|
NEXT
|
|
ENDIF
|
|
|
|
ATail( ::aPanels ):nRight := nLastCol
|
|
|
|
FOR i := Len( ::aPanels ) - 1 TO 1 STEP -1
|
|
oPanel := ::aPanels[ i ]
|
|
oPanel:nRight := ::aPanels[ i + 1 ]:nLeft
|
|
oPanel:cColor := ::cColor
|
|
NEXT
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:Update( nPanel, cText, cColor )
|
|
|
|
LOCAL oPanel
|
|
|
|
IF nPanel > 0 .AND. nPanel <= Len( ::aPanels )
|
|
oPanel := ::aPanels[ nPanel ]
|
|
oPanel:Text := cText
|
|
oPanel:cColor := iif( cColor == NIL, "N/W", cColor )
|
|
oPanel:Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:SetText( nPanel, cText, cColor )
|
|
|
|
LOCAL oPanel
|
|
|
|
__defaultNIL( @cColor, ::cColor )
|
|
|
|
IF nPanel > 0 .AND. nPanel <= Len( ::aPanels )
|
|
oPanel := ::aPanels[ nPanel ]
|
|
oPanel:Text := cText
|
|
oPanel:cColor := cColor
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:SetIcon( nPanel, cIconFile )
|
|
|
|
IF nPanel > 0 .AND. nPanel <= Len( ::aPanels )
|
|
::aPanels[ nPanel ]:cIconFile := cIconFile
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatusBar:Refresh()
|
|
|
|
LOCAL i
|
|
|
|
FOR i := 1 TO Len( ::aPanels )
|
|
::aPanels[ i ]:Refresh()
|
|
NEXT
|
|
|
|
RETURN NIL
|
|
|
|
/* Class WvtPanel */
|
|
CREATE CLASS WvtPanel INHERIT WvtObject
|
|
|
|
VAR cColor
|
|
VAR cTxt
|
|
VAR cIconFile
|
|
|
|
ACCESS TEXT INLINE ::cTxt
|
|
ASSIGN TEXT( cText ) INLINE ::cTxt := PadR( cText, ::nRight - ::nLeft - 2 )
|
|
|
|
METHOD New( oParent, nId, nTop, nLeft )
|
|
METHOD Refresh()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtPanel:New( oParent, nId, nTop, nLeft )
|
|
|
|
::Super:New( oParent, DLG_OBJ_PANEL, nId, nTop, nLeft, nTop )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtPanel:Refresh()
|
|
|
|
IF ::Text != NIL
|
|
hb_DispOutAt( ::nTop, ::nLeft + 1, ::Text, ::cColor )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtLabel */
|
|
CREATE CLASS WvtLabel INHERIT WvtObject
|
|
|
|
ACCESS TEXT INLINE iif( ::cText == NIL, "", ::cText )
|
|
ASSIGN TEXT( cTxt ) INLINE ::cText := iif( cTxt == NIL, "", cTxt )
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create( lConfg )
|
|
METHOD Configure()
|
|
METHOD Refresh()
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
METHOD SetText( ctxt )
|
|
METHOD SetTextColor( nRGB )
|
|
METHOD SetBackColor( nRGB )
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtLabel:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_LABEL, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:Create( lConfg )
|
|
|
|
__defaultNIL( @lConfg, .F. )
|
|
|
|
__defaultNIL( @::nBottom, ::nTop )
|
|
__defaultNIL( @::nRight, ::nLeft + Len( ::Text ) )
|
|
__defaultNIL( @::nTextColor, RGB( 0, 0, 0 ) )
|
|
|
|
::nTextColorHoverOff := ::nTextColor
|
|
::nBackColorHoverOff := ::nBackColor
|
|
|
|
::hFont := wvt_CreateFont( ::cFont, ::nFontHeight, ::nFontWidth, ::nFontWeight, ::lItalic, ;
|
|
::lUnderline, ::lStrikeout, ::nCharSet, ::nFontQuality, ::nAngle )
|
|
IF ::hFont != 0
|
|
IF ! lConfg
|
|
::bPaint := {|| wvt_DrawLabelObj( ::nTop, ::nLeft, ::nBottom, ::nRight, ;
|
|
::Text, ::nAlignHorz, ::nAlignVert, ::nTextColor, ::nBackColor, ::hFont ) }
|
|
AAdd( ::aPaint, { ::bPaint, { WVT_BLOCK_LABEL, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:Refresh()
|
|
|
|
Eval( ::bPaint )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:SetText( cTxt )
|
|
|
|
IF HB_ISSTRING( cTxt )
|
|
::Text := cTxt
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:SetTextColor( nRGB )
|
|
|
|
IF HB_ISNUMERIC( nRGB )
|
|
::nTextColor := nRGB
|
|
::nTextColorHoverOff := nRGB
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:SetBackColor( nRGB )
|
|
|
|
IF HB_ISNUMERIC( nRGB )
|
|
::nBackColor := nRGB
|
|
::nBackColorHoverOff := nRGB
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:Configure()
|
|
|
|
::nTextColorHoverOff := ::nTextColor
|
|
::nBackColorHoverOff := ::nBackColor
|
|
|
|
IF ::hFont != 0
|
|
wvg_DeleteObject( ::hFont )
|
|
ENDIF
|
|
|
|
::hFont := wvt_CreateFont( ::cFont, ::nFontHeight, ::nFontWidth, ::nFontWeight, ::lItalic, ;
|
|
::lUnderline, ::lStrikeout, ::nCharSet, ::nFontQuality, ::nAngle )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:HoverOn()
|
|
|
|
LOCAL lOn := .F.
|
|
|
|
IF ::nTextColorHoverOn != NIL
|
|
lOn := .T.
|
|
::nTextColor := ::nTextColorHoverOn
|
|
ENDIF
|
|
IF ::nBackColorHoverOn != NIL
|
|
lOn := .T.
|
|
::nBackColor := ::nBackColorHoverOn
|
|
ENDIF
|
|
|
|
IF lOn
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtLabel:HoverOff()
|
|
|
|
LOCAL lOn := .F.
|
|
|
|
IF ::nTextColorHoverOn != NIL
|
|
lOn := .T.
|
|
::nTextColor := ::nTextColorHoverOff
|
|
ENDIF
|
|
IF ::nBackColorHoverOn != NIL
|
|
lOn := .T.
|
|
::nBackColor := ::nBackColorHoverOff
|
|
ENDIF
|
|
|
|
IF lOn
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtToolBar */
|
|
CREATE CLASS WvtToolBar INHERIT WvtObject
|
|
|
|
VAR nPaintID
|
|
VAR aObjects INIT {}
|
|
VAR lHidden INIT .F.
|
|
VAR nCurButton INIT 0
|
|
VAR lActive
|
|
VAR lFloating
|
|
VAR wScreen
|
|
VAR cScreen
|
|
VAR nBtnLeft INIT 0
|
|
VAR nRGBSep INIT RGB( 150, 150, 150 )
|
|
|
|
ACCESS nButtons INLINE Len( ::aButtons )
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Refresh()
|
|
METHOD AddButton( cFileImage, bBlock, cTooltip )
|
|
METHOD PaintToolBar()
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtToolBar:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
nTop := 0
|
|
nLeft := 0
|
|
__defaultNIL( @nBottom, 1 )
|
|
nRight := oParent:MaxCol()
|
|
|
|
::Super:New( oParent, DLG_OBJ_TOOLBAR, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::lActive := .T.
|
|
::lFloating := .F.
|
|
::nPaintID := ::oParent:nPaintID++
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:Create()
|
|
|
|
IF ::lFloating
|
|
::lActive := .F.
|
|
::lHidden := .T.
|
|
ENDIF
|
|
|
|
AEval( ::aObjects, {| o | o:lActive := ::lActive } )
|
|
|
|
::bPaint := {|| ::PaintToolBar() }
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_TOOLBAR, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:Refresh()
|
|
|
|
IF ::lFloating
|
|
hb_DispBox( ::nTop, ::nLeft, ::nBottom, ::nRight, " ", "n/w" )
|
|
ELSE
|
|
wvt_InvalidateRect( ::nTop, ::nLeft, ::nTop, ::nLeft )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:PaintToolBar()
|
|
|
|
IF ::lActive
|
|
wvt_DrawLine( ::nTop, ::nLeft, ::nBottom, ::nRight, 0, 1, 2, , , ::nRGBSep )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:AddButton( cFileImage, bBlock, cTooltip )
|
|
|
|
LOCAL oObj, nCol
|
|
|
|
nCol := ( ::nBottom - ::nTop + 1 ) * 2
|
|
|
|
oObj := WvtToolButton():New( Self )
|
|
|
|
oObj:lActive := ::lActive
|
|
oObj:nTop := ::nTop
|
|
oObj:nLeft := ::nBtnLeft + 1
|
|
oObj:nBottom := ::nBottom
|
|
|
|
IF HB_ISSTRING( cFileImage )
|
|
oObj:nBtnType := TLB_BUTTON_TYPE_IMAGE
|
|
oObj:nRight := oObj:nLeft + nCol - 1
|
|
oObj:cFileImage := cFileImage
|
|
oObj:bOnLeftUp := bBlock
|
|
oObj:Tooltip := cTooltip
|
|
ELSE
|
|
oObj:nBtnType := TLB_BUTTON_TYPE_SEPARATOR
|
|
oObj:nRight := oObj:nLeft
|
|
ENDIF
|
|
|
|
AAdd( ::aObjects, oObj )
|
|
|
|
::nBtnLeft := oObj:nRight + 1
|
|
::nCurButton++
|
|
|
|
::oParent:AddObject( oObj )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:HoverOn()
|
|
|
|
IF ::lFloating .AND. ::lHidden
|
|
::lHidden := .F.
|
|
::lActive := .T.
|
|
#if 0
|
|
::cScreen := SaveScreen( ::nTop, ::nLeft, ::nBottom, ::nRight )
|
|
::wScreen := wvt_SaveScreen( ::nTop, ::nLeft, ::nBottom, ::nRight )
|
|
#endif
|
|
AEval( ::aObjects, {| o | o:lActive := ::lActive } )
|
|
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolBar:HoverOff()
|
|
|
|
IF ::lFloating .AND. ! ::lHidden
|
|
::lHidden := .T.
|
|
::lActive := .F.
|
|
AEval( ::aObjects, {| o | o:lActive := ::lActive } )
|
|
#if 0
|
|
RestScreen( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cScreen )
|
|
wvt_RestScreen( ::nTop, ::nLeft, ::nBottom, ::nRight, ::wScreen, .F. )
|
|
#endif
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtToolButton */
|
|
CREATE CLASS WvtToolButton INHERIT WvtObject
|
|
|
|
VAR cFileImage
|
|
VAR nCurState INIT 0
|
|
VAR nBtnType INIT TLB_BUTTON_TYPE_IMAGE
|
|
VAR aPxlOffSet INIT { 0, -1, -3, 1 }
|
|
|
|
METHOD New( oParent )
|
|
METHOD create()
|
|
METHOD Refresh()
|
|
METHOD LeftDown()
|
|
METHOD LeftUp()
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
METHOD PaintButton()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtToolButton:New( oParent )
|
|
|
|
::Super:New( oParent, DLG_OBJ_BUTTON )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolButton:Create()
|
|
|
|
::bPaint := {|| ::PaintButton() }
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_BUTTON, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolButton:Refresh()
|
|
|
|
IF ::lActive
|
|
Eval( ::bPaint )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolButton:PaintButton()
|
|
|
|
IF ::lActive
|
|
IF ::nBtnType == TLB_BUTTON_TYPE_IMAGE
|
|
wvt_DrawImage( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cFileImage, { 4, 4, -6, -4 } )
|
|
ELSE
|
|
wvt_DrawLine( ::nTop, ::nLeft, ::nBottom, ::nRight, 1, 1, , , , ::oParent:nRGBSep )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolButton:LeftDown()
|
|
|
|
LOCAL lRet := .F.
|
|
|
|
IF ::lActive .AND. ::nBtnType == TLB_BUTTON_TYPE_IMAGE
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet, 2 )
|
|
lRet := .T.
|
|
ENDIF
|
|
|
|
RETURN lRet
|
|
|
|
METHOD WvtToolButton:LeftUp()
|
|
|
|
LOCAL lRet := .F.
|
|
|
|
IF ::lActive .AND. ::nBtnType == TLB_BUTTON_TYPE_IMAGE
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet, 1 )
|
|
Eval( ::bOnLeftUp )
|
|
lRet := .T.
|
|
ENDIF
|
|
|
|
RETURN lRet
|
|
|
|
METHOD WvtToolButton:HoverOn()
|
|
|
|
::oParent:HoverOn()
|
|
|
|
IF ::lActive .AND. ::nBtnType == TLB_BUTTON_TYPE_IMAGE
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet, 1 )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtToolButton:HoverOff()
|
|
|
|
::oParent:HoverOff()
|
|
|
|
IF ::lActive .AND. ::nBtnType == TLB_BUTTON_TYPE_IMAGE
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet, 0 )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtImage */
|
|
CREATE CLASS WvtImage INHERIT WvtObject
|
|
|
|
VAR cImageFile
|
|
|
|
ACCESS cImage INLINE ::cImageFile
|
|
ASSIGN cImage( cImg ) INLINE ::cImageFile := cImg
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD SetImage( cImage )
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtImage:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_IMAGE, nId, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtImage:Create()
|
|
|
|
::bPaint := {|| iif( hb_FileExists( ::cImage ), ;
|
|
wvt_DrawImage( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cImage ), "" ) }
|
|
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_IMAGE, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtImage:SetImage( cImage )
|
|
|
|
IF cImage != NIL .AND. hb_FileExists( cImage )
|
|
::cImageFile := cImage
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtStatic */
|
|
CREATE CLASS WvtStatic INHERIT WvtObject
|
|
|
|
VAR nStatic
|
|
VAR nOrient
|
|
VAR nFormat
|
|
VAR nAlign
|
|
VAR nStyle
|
|
VAR nThick
|
|
VAR nColor
|
|
|
|
VAR nfTop
|
|
VAR nfLeft
|
|
VAR nfBottom
|
|
VAR nfRight
|
|
|
|
VAR nHorzVert INIT 0
|
|
VAR aRGBb
|
|
VAR aRGBe
|
|
|
|
VAR aPxlOffSet INIT {}
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Refresh()
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtStatic:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_STATIC, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatic:Create()
|
|
|
|
LOCAL lInside := .F.
|
|
|
|
SWITCH ::nStatic
|
|
|
|
CASE WVT_STATIC_LINE
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawLine( ::nTop, ::nLeft, ::nBottom, ::nRight, ;
|
|
::nOrient, ::nFormat, ::nAlign, ::nStyle, ::nThick, ::nColor ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_BOXRAISED
|
|
::bPaint := {|| wvt_DrawBoxRaised( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_BOXRECESSED
|
|
::bPaint := {|| wvt_DrawBoxRecessed( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_BOXGROUP
|
|
::bPaint := {|| wvt_DrawBoxGroup( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_BOXGROUPRAISED
|
|
::bPaint := {|| wvt_DrawBoxGroupRaised( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_OUTLINE
|
|
::bPaint := {|| wvt_DrawOutline( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_RECTANGLE
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawRectangle( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_ROUNDRECT
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawRoundRect( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_FOCUSRECT
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawFocusRect( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_ELLIPSE
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawEllipse( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlOffSet ) }
|
|
EXIT
|
|
|
|
CASE WVT_STATIC_SHADEDRECT
|
|
lInside := .T.
|
|
::bPaint := {|| wvt_DrawShadedRect( ::nTop, ::nLeft, ::nBottom, ::nRight, ;
|
|
::aPxlOffSet, ::nHorzVert, ::aRGBb, ::aRGBe ) }
|
|
EXIT
|
|
|
|
ENDSWITCH
|
|
|
|
IF lInside
|
|
::nfTop := ::nTop
|
|
::nfLeft := ::nLeft
|
|
::nfBottom := ::nBottom
|
|
::nfRight := ::nRight
|
|
ELSE
|
|
::nfTop := ::nTop - 1
|
|
::nfLeft := ::nLeft - 1
|
|
::nfBottom := ::nBottom + 1
|
|
::nfRight := ::nRight + 1
|
|
ENDIF
|
|
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_STATIC, ::nfTop, ::nfLeft, ::nfBottom, ::nfRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtStatic:HoverOn()
|
|
RETURN Self
|
|
|
|
METHOD WvtStatic:HoverOff()
|
|
RETURN Self
|
|
|
|
METHOD WvtStatic:Refresh()
|
|
|
|
Eval( ::bPaint )
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtPushButton */
|
|
CREATE CLASS WvtPushButton INHERIT WvtObject
|
|
|
|
VAR cCaption
|
|
VAR cFileImage
|
|
|
|
ACCESS block INLINE ::bOnLeftUp
|
|
ASSIGN block( bBlock ) INLINE ::bOnLeftUp := bBlock
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD LeftDown()
|
|
METHOD LeftUp()
|
|
METHOD PaintButton()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtPushButton:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_PUSHBUTTON, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtPushButton:Create()
|
|
|
|
::bPaint := {|| ::PaintButton() }
|
|
|
|
AAdd( ::aPaint, { ::bPaint, ;
|
|
{ WVT_BLOCK_BUTTON, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtPushButton:PaintButton()
|
|
|
|
IF ::cCaption == NIL
|
|
wvt_DrawImage( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cFileImage, { 4, 4, -4, -4 } )
|
|
ELSE
|
|
wvt_DrawButton( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cCaption, , 4 )
|
|
ENDIF
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, { 0, 0, 0, 0 }, 1 )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtPushButton:LeftDown()
|
|
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, { 0, 0, 0, 0 }, 2 )
|
|
|
|
RETURN .T.
|
|
|
|
METHOD WvtPushButton:LeftUp()
|
|
|
|
wvt_DrawToolButtonState( ::nTop, ::nLeft, ::nBottom, ::nRight, { 0, 0, 0, 0 }, 1 )
|
|
::Eval( ::bOnLeftUp )
|
|
|
|
RETURN .T.
|
|
|
|
/* Class WvtGets */
|
|
CREATE CLASS WvtGets INHERIT WvtObject
|
|
|
|
VAR aGetList INIT {}
|
|
VAR nLastGet INIT 1
|
|
VAR nCurGet INIT 1
|
|
VAR GetList INIT {}
|
|
VAR cDesc INIT ""
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD KillFocus()
|
|
METHOD SetFocus()
|
|
METHOD HandleEvent( nKey )
|
|
METHOD AddGets( nRow, nCol, xVar, cPic, cColor, bValid, bWhen )
|
|
METHOD PaintBlock( nIndex )
|
|
METHOD READ()
|
|
METHOD Hilite()
|
|
METHOD DeHilite()
|
|
METHOD GetData()
|
|
METHOD SetData()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtGets:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_GETS, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:Create()
|
|
|
|
LOCAL i
|
|
LOCAL nCurRow := Row()
|
|
LOCAL nCurCol := Col()
|
|
|
|
FOR i := 1 TO Len( ::aGetList )
|
|
|
|
__defaultNIL( @::aGetList[ i ][ 7 ], "N/W*,N/W*,,,N/GR*" )
|
|
__defaultNIL( @::aGetList[ i ][ 5 ], {|| .T. } )
|
|
__defaultNIL( @::aGetList[ i ][ 6 ], {|| .T. } )
|
|
|
|
AAdd( ::GetList, Get():New( ::aGetList[ i ][ 1 ], ::aGetList[ i ][ 2 ], {| v | iif( PCount() == 0, ::aGetList[ i ][ 3 ], ::aGetList[ i ][ 3 ] := v ) }, "::aGetList[ i ][ 3 ]", ::aGetList[ i ][ 7 ] ) )
|
|
|
|
::GetList[ i ]:Display()
|
|
::PaintBlock( i )
|
|
NEXT
|
|
SetPos( nCurRow, nCurCol )
|
|
|
|
::Super:Create()
|
|
::Dehilite()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:PaintBlock( nIndex )
|
|
|
|
LOCAL nLen, bPaint
|
|
|
|
nLen := Len( Transform( ::aGetList[ nIndex ][ 3 ], ::aGetList[ nIndex ][ 4 ] ) )
|
|
|
|
bPaint := {|| wvt_DrawBoxGet( ::aGetList[ nIndex ][ 1 ], ::aGetList[ nIndex ][ 2 ], nLen ) }
|
|
|
|
AAdd( ::aPaint, { bPaint, ;
|
|
{ WVT_BLOCK_GETS, ::aGetList[ nIndex ][ 1 ] - 1, ::aGetList[ nIndex ][ 2 ] - 1, ;
|
|
::aGetList[ nIndex ][ 1 ] - 1, ::aGetList[ nIndex ][ 2 ] + nLen } } )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:SetFocus()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:KillFocus()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:AddGets( nRow, nCol, xVar, cPic, cColor, bValid, bWhen )
|
|
|
|
AAdd( ::aGetList, { nRow, nCol, xVar, cPic, bValid, bWhen, cColor } )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:HandleEvent( nKey )
|
|
|
|
LOCAL lRet := .F.
|
|
|
|
DO CASE
|
|
CASE nKey == K_LDBLCLK
|
|
::Read()
|
|
lRet := .T.
|
|
ENDCASE
|
|
|
|
RETURN lRet
|
|
|
|
METHOD WvtGets:Read()
|
|
|
|
ReadModal( ::GetList, ::nCurGet )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:GetData()
|
|
RETURN NIL
|
|
|
|
METHOD WvtGets:SetData( /* aData */ )
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:Hilite()
|
|
|
|
hb_DispOutAt( ::nTop, ::nLeft, PadR( " " + ::cDesc, ::nRight - ::nLeft + 1 ), ::cColorHilite )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtGets:DeHilite()
|
|
|
|
hb_DispOutAt( ::nTop, ::nLeft, PadR( " " + ::cDesc, ::nRight - ::nLeft + 1 ), ::cColorDeHilite )
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtScrollBar */
|
|
CREATE CLASS WvtScrollBar INHERIT WvtObject
|
|
|
|
VAR nBarType INIT WVT_SCROLLBAR_VERT
|
|
|
|
VAR nTotal INIT 100
|
|
VAR nCurrent INIT 1
|
|
VAR nThumbPos INIT 0
|
|
VAR nBlockNo INIT 1
|
|
|
|
VAR nSTop
|
|
VAR nSLeft
|
|
VAR nSBottom
|
|
VAR nSRight
|
|
|
|
VAR nBtn1Top
|
|
VAR nBtn1Left
|
|
VAR nBtn1Bottom
|
|
VAR nBtn1Right
|
|
|
|
VAR nBtn2Top
|
|
VAR nBtn2Left
|
|
VAR nBtn2Bottom
|
|
VAR nBtn2Right
|
|
VAR bBtnLeftTop
|
|
VAR bBtnLeftTopDep
|
|
VAR bBtnRightBottom
|
|
VAR bBtnRightBottomDep
|
|
VAR bBtnScroll
|
|
VAR bTotal
|
|
VAR bCurrent
|
|
VAR lHidden INIT .T.
|
|
|
|
VAR aPxlBtnTop INIT { 0, 0, 0, 0 }
|
|
VAR aPxlBtnLft INIT { 0, 0, 0, 0 }
|
|
VAR aPxlBtnBtm INIT { 0, 0, 0, 0 }
|
|
VAR aPxlBtnRgt INIT { 0, 0, 0, 0 }
|
|
VAR aPxlScroll INIT { 0, 0, 0, 0 }
|
|
|
|
VAR lLeftDown INIT .F.
|
|
VAR lOnThumb INIT .F.
|
|
VAR lAnchored INIT .F.
|
|
VAR lOnLeftDown INIT .F.
|
|
|
|
VAR nScrollUnits INIT 0
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Configure( nTop, nLeft, nBottom, nRight )
|
|
METHOD Refresh()
|
|
METHOD HandleEvent( nKey )
|
|
METHOD SetPos( nTotal, nCurrent )
|
|
METHOD GetPos()
|
|
METHOD ThumbPos()
|
|
METHOD SetTooltip()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD wvtScrollbar:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_SCROLLBAR, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:Create()
|
|
|
|
IF ::nTop == NIL .OR. ::nLeft == NIL
|
|
RETURN NIL
|
|
ENDIF
|
|
|
|
IF ::nBarType == WVT_SCROLLBAR_VERT
|
|
__defaultNIL( @::nBottom, ::nTop + 5 )
|
|
__defaultNIL( @::nRight, ::nLeft + 1 )
|
|
|
|
::nRight := ::nLeft + 1
|
|
::nBottom := Max( 7, ::nBottom )
|
|
|
|
::nBtn1Top := ::nTop
|
|
::nBtn1Left := ::nLeft
|
|
::nBtn1Bottom := ::nTop
|
|
::nBtn1Right := ::nRight
|
|
|
|
::nBtn2Top := ::nBottom
|
|
::nBtn2Left := ::nLeft
|
|
::nBtn2Bottom := ::nBottom
|
|
::nBtn2Right := ::nRight
|
|
|
|
::nSTop := ::nTop + 1
|
|
::nSLeft := ::nLeft
|
|
::nSBottom := ::nBottom - 1
|
|
::nSRight := ::nRight
|
|
|
|
::nScrollUnits := ::nSBottom - ::nSTop + 1
|
|
|
|
::nTotal := Eval( ::bTotal )
|
|
::nCurrent := Eval( ::bCurrent )
|
|
::ThumbPos()
|
|
|
|
::bBtnLeftTop := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn1Top, ::nBtn1Left, ::nBtn1Bottom, ::nBtn1Right, ::aPxlBtnTop, 1 ) }
|
|
::bBtnRightBottom := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn2Top, ::nBtn2Left, ::nBtn2Bottom, ::nBtn2Right, ::aPxlBtnBtm, 3 ) }
|
|
::bBtnScroll := ;
|
|
{|| wvt_DrawScrollThumbVert( ::nSTop, ::nSLeft, ::nSBottom, ::nSRight, ::aPxlScroll, ;
|
|
::nThumbPos ) }
|
|
::bBtnLeftTopDep := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn1Top, ::nBtn1Left, ::nBtn1Bottom, ::nBtn1Right, ::aPxlBtnTop, 1, .T. ) }
|
|
::bBtnRightBottomDep := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn2Top, ::nBtn2Left, ::nBtn2Bottom, ::nBtn2Right, ::aPxlBtnBtm, 3, .T. ) }
|
|
|
|
ELSE
|
|
__defaultNIL( @::nBottom, ::nTop )
|
|
__defaultNIL( @::nRight, ::nLeft + 11 )
|
|
|
|
::nBottom := ::nTop
|
|
::nRight := Max( 11, ::nRight )
|
|
|
|
::nBtn1Top := ::nTop
|
|
::nBtn1Left := ::nLeft
|
|
::nBtn1Bottom := ::nBottom
|
|
::nBtn1Right := ::nLeft + 1
|
|
|
|
::nBtn2Top := ::nTop
|
|
::nBtn2Left := ::nRight - 1
|
|
::nBtn2Bottom := ::nBottom
|
|
::nBtn2Right := ::nRight
|
|
|
|
::nSTop := ::nTop
|
|
::nSLeft := ::nLeft + 2
|
|
::nSBottom := ::nBottom
|
|
::nSRight := ::nRight - 2
|
|
|
|
::nScrollUnits := ::nSRight - ::nSLeft + 1
|
|
|
|
::nTotal := Eval( ::bTotal )
|
|
::nCurrent := Eval( ::bCurrent )
|
|
|
|
::ThumbPos()
|
|
|
|
::bBtnLeftTop := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn1Top, ::nBtn1Left, ::nBtn1Bottom, ::nBtn1Right, ::aPxlBtnLft, 2 ) }
|
|
::bBtnRightBottom := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn2Top, ::nBtn2Left, ::nBtn2Bottom, ::nBtn2Right, ::aPxlBtnRgt, 4 ) }
|
|
::bBtnScroll := ;
|
|
{|| wvt_DrawScrollThumbHorz( ::nSTop, ::nSLeft, ::nSBottom, ::nSRight, ::aPxlScroll, ::nThumbPos ) }
|
|
::bBtnLeftTopDep := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn1Top, ::nBtn1Left, ::nBtn1Bottom, ::nBtn1Right, ::aPxlBtnLft, 2, .T. ) }
|
|
::bBtnRightBottomDep := ;
|
|
{|| wvt_DrawScrollButton( ::nBtn2Top, ::nBtn2Left, ::nBtn2Bottom, ::nBtn2Right, ::aPxlBtnRgt, 4, .T. ) }
|
|
|
|
ENDIF
|
|
|
|
::bOnLeftUp := {|| ::HandleEvent( K_LBUTTONUP ) }
|
|
::bOnLeftDown := {|| ::HandleEvent( K_LBUTTONDOWN ), .F. }
|
|
::bOnMMLeftDown := {|| ::HandleEvent( K_MMLEFTDOWN ) }
|
|
::bOnLeftPressed := {|| ::HandleEvent( K_LBUTTONPRESSED ) }
|
|
|
|
Eval( ::bBtnLeftTop )
|
|
Eval( ::bBtnRightBottom )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:Configure( nTop, nLeft, nBottom, nRight )
|
|
|
|
::nTop := nTop
|
|
::nLeft := nLeft
|
|
::nBottom := nBottom
|
|
::nRight := nRight
|
|
|
|
IF ::nBarType == WVT_SCROLLBAR_VERT
|
|
::nRight := ::nLeft + 1
|
|
::nBottom := Max( 7, ::nBottom )
|
|
|
|
::nBtn1Top := ::nTop
|
|
::nBtn1Left := ::nLeft
|
|
::nBtn1Bottom := ::nTop
|
|
::nBtn1Right := ::nRight
|
|
|
|
::nBtn2Top := ::nBottom
|
|
::nBtn2Left := ::nLeft
|
|
::nBtn2Bottom := ::nBottom
|
|
::nBtn2Right := ::nRight
|
|
|
|
::nSTop := ::nTop + 1
|
|
::nSLeft := ::nLeft
|
|
::nSBottom := ::nBottom - 1
|
|
::nSRight := ::nRight
|
|
|
|
::nScrollUnits := ::nSBottom - ::nSTop + 1
|
|
|
|
::nTotal := Eval( ::bTotal )
|
|
::nCurrent := Eval( ::bCurrent )
|
|
::ThumbPos()
|
|
ELSE
|
|
::nBottom := ::nTop
|
|
::nRight := Max( 11, ::nRight )
|
|
|
|
::nBtn1Top := ::nTop
|
|
::nBtn1Left := ::nLeft
|
|
::nBtn1Bottom := ::nBottom
|
|
::nBtn1Right := ::nLeft + 1
|
|
|
|
::nBtn2Top := ::nTop
|
|
::nBtn2Left := ::nRight - 1
|
|
::nBtn2Bottom := ::nBottom
|
|
::nBtn2Right := ::nRight
|
|
|
|
::nSTop := ::nTop
|
|
::nSLeft := ::nLeft + 2
|
|
::nSBottom := ::nBottom
|
|
::nSRight := ::nRight - 2
|
|
|
|
::nScrollUnits := ::nSRight - ::nSLeft + 1
|
|
|
|
::nTotal := Eval( ::bTotal )
|
|
::nCurrent := Eval( ::bCurrent )
|
|
|
|
::ThumbPos()
|
|
ENDIF
|
|
|
|
::Refresh()
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:Refresh()
|
|
|
|
Eval( ::bBtnScroll )
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:SetPos( nTotal, nCurrent )
|
|
|
|
__defaultNIL( @nTotal, Eval( ::bTotal ) )
|
|
__defaultNIL( @nCurrent, Eval( ::bCurrent ) )
|
|
|
|
::nTotal := nTotal
|
|
::nCurrent := nCurrent
|
|
|
|
::ThumbPos()
|
|
::Refresh()
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:ThumbPos()
|
|
|
|
LOCAL nNewPos, nRecPerUnit, nCurUnit
|
|
|
|
IF ::nBarType == WVT_SCROLLBAR_VERT
|
|
nRecPerUnit := ::nTotal / ::nScrollUnits
|
|
nCurUnit := Int( ::nCurrent / nRecPerUnit )
|
|
|
|
DO CASE
|
|
CASE ::nCurrent == 1
|
|
nCurUnit := 0
|
|
CASE ::nCurrent == ::nTotal
|
|
nCurUnit := ::nScrollUnits
|
|
ENDCASE
|
|
nNewPos := ::nSTop + nCurUnit
|
|
|
|
DO CASE
|
|
CASE nNewPos < ::nSTop
|
|
nNewPos := ::nSTop
|
|
CASE nNewPos > ::nSBottom
|
|
nNewPos := ::nSBottom
|
|
ENDCASE
|
|
|
|
ELSE
|
|
IF ::nTotal < ::nScrollUnits
|
|
nCurUnit := ::nCurrent * Int( ::nScrollUnits / ::nTotal )
|
|
ELSE
|
|
nRecPerUnit := ::nTotal / ::nScrollUnits
|
|
nCurUnit := Int( ::nCurrent / nRecPerUnit )
|
|
ENDIF
|
|
|
|
DO CASE
|
|
CASE ::nCurrent == 1
|
|
nCurUnit := 0
|
|
CASE ::nCurrent == ::nTotal
|
|
nCurUnit := ::nScrollUnits
|
|
ENDCASE
|
|
|
|
nNewPos := ::nSLeft + nCurUnit
|
|
|
|
DO CASE
|
|
CASE nNewPos < ::nSLeft
|
|
nNewPos := ::nSLeft
|
|
CASE nNewPos > ::nSRight - 1
|
|
nNewPos := ::nSRight - 1
|
|
ENDCASE
|
|
|
|
ENDIF
|
|
|
|
::nThumbPos := nNewPos
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:GetPos()
|
|
RETURN ::nCurrent
|
|
|
|
METHOD wvtScrollbar:SetTooltip()
|
|
|
|
::Tooltip := hb_ntos( Int( ::nCurrent ) ) + " / " + hb_ntos( Int( ::nTotal ) )
|
|
|
|
wvt_SetToolTip( ::nTop, ::nLeft, ::nBottom, ::nRight, ::Tooltip )
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtScrollbar:HandleEvent( nKey )
|
|
|
|
LOCAL nmRow, nmCol, nOff
|
|
LOCAL lHit := .F.
|
|
LOCAL mKeys_ := { K_LBUTTONDOWN, K_LBUTTONUP, K_MMLEFTDOWN, K_LBUTTONPRESSED }
|
|
|
|
IF AScan( mKeys_, nKey ) == 0
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
nmRow := MRow()
|
|
nmCol := MCol()
|
|
|
|
DO CASE
|
|
CASE ::nBarType == WVT_SCROLLBAR_VERT
|
|
lHit := .T.
|
|
|
|
DO CASE
|
|
CASE ::lAnchored .AND. nKey == K_MMLEFTDOWN
|
|
IF nmRow != ::nThumbPos
|
|
nOff := ::nThumbPos - nmRow
|
|
IF nOff > 0
|
|
::nThumbPos := Max( ::nTop + 1, nmRow )
|
|
ELSE
|
|
::nThumbPos := Min( ::nBottom - 1, nmRow )
|
|
ENDIF
|
|
::nCurrent := ( ::nTotal * ( ::nThumbPos - ::nTop ) / ::nScrollUnits )
|
|
|
|
IF ::nCurrent > ::nTotal
|
|
::nCurrent := ::nTotal
|
|
ENDIF
|
|
IF ::nCurrent < 1
|
|
::nCurrent := 1
|
|
ENDIF
|
|
|
|
::SetPos( ::nTotal, ::nCurrent )
|
|
|
|
::SetTooltip()
|
|
wvt_Keyboard( K_SBTHUMBTRACKVERT )
|
|
ELSE
|
|
lHit := .F.
|
|
ENDIF
|
|
|
|
CASE ::lAnchored .AND. nKey == K_LBUTTONUP
|
|
::lAnchored := .F.
|
|
|
|
OTHERWISE
|
|
lHit := .F.
|
|
|
|
IF nmCol >= ::nLeft .AND. nmCol <= ::nRight
|
|
lHit := .T.
|
|
|
|
DO CASE
|
|
CASE nmRow == ::nThumbPos .AND. nKey == K_LBUTTONDOWN
|
|
::lAnchored := .T.
|
|
|
|
CASE nKey == K_LBUTTONUP
|
|
IF ( lHit := ::lOnLeftDown )
|
|
DO CASE
|
|
CASE nmRow == ::nTop
|
|
Eval( ::bBtnLeftTop )
|
|
CASE nmRow == ::nBottom
|
|
Eval( ::bBtnRightBottom )
|
|
CASE nmRow < ::nThumbPos .AND. nmRow > ::nTop
|
|
CASE nmRow > ::nThumbPos .AND. nmRow < ::nBottom
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
IF lHit
|
|
::lOnLeftDown := .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE nKey == K_LBUTTONPRESSED
|
|
IF ( lHit := ::lOnLeftDown )
|
|
DO CASE
|
|
CASE nmRow == ::nTop
|
|
wvt_Keyboard( K_SBLINEUP )
|
|
CASE nmRow == ::nBottom
|
|
wvt_Keyboard( K_SBLINEDOWN )
|
|
CASE nmRow < ::nThumbPos .AND. nmRow > ::nTop
|
|
wvt_Keyboard( K_SBPAGEUP )
|
|
CASE nmRow > ::nThumbPos .AND. nmRow < ::nBottom
|
|
wvt_Keyboard( K_SBPAGEDOWN )
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
ENDIF
|
|
|
|
CASE nKey == K_LBUTTONDOWN
|
|
DO CASE
|
|
CASE nmRow == ::nTop
|
|
Eval( ::bBtnLeftTopDep )
|
|
wvt_Keyboard( K_SBLINEUP )
|
|
CASE nmRow == ::nBottom
|
|
Eval( ::bBtnRightBottomDep )
|
|
wvt_Keyboard( K_SBLINEDOWN )
|
|
CASE nmRow < ::nThumbPos .AND. nmRow > ::nTop
|
|
wvt_Keyboard( K_SBPAGEUP )
|
|
CASE nmRow > ::nThumbPos .AND. nmRow < ::nBottom
|
|
wvt_Keyboard( K_SBPAGEDOWN )
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
IF lHit
|
|
::lOnLeftDown := .T.
|
|
ENDIF
|
|
ENDCASE
|
|
ENDIF
|
|
|
|
ENDCASE
|
|
|
|
CASE ::nBarType == WVT_SCROLLBAR_HORZ
|
|
DO CASE
|
|
CASE ::lAnchored .AND. nKey == K_MMLEFTDOWN
|
|
IF ( lHit := ( nmCol < ::nThumbPos .OR. nmCol > ::nThumbPos + 1 ) )
|
|
|
|
nOff := ::nThumbPos - nmCol
|
|
IF nOff > 0
|
|
::nThumbPos := Max( ::nLeft + 2, nmCol )
|
|
ELSE
|
|
::nThumbPos := Min( ::nRight - 2, nmCol )
|
|
ENDIF
|
|
|
|
::nCurrent := ( ::nTotal * ( ::nThumbPos - ::nLeft + 1 ) / ::nScrollUnits )
|
|
|
|
IF ::nCurrent > ::nTotal
|
|
::nCurrent := ::nTotal
|
|
ENDIF
|
|
IF ::nCurrent < 1
|
|
::nCurrent := 1
|
|
ENDIF
|
|
|
|
::SetPos( ::nTotal, ::nCurrent )
|
|
|
|
wvt_Keyboard( K_SBTHUMBTRACKHORZ )
|
|
ENDIF
|
|
|
|
CASE ::lAnchored .AND. nKey == K_LBUTTONUP
|
|
::lAnchored := .F.
|
|
lHit := .T.
|
|
|
|
OTHERWISE
|
|
|
|
IF ( lHit := nmRow == ::nTop .AND. nmCol >= ::nLeft .AND. nmCol <= ::nRight )
|
|
|
|
DO CASE
|
|
CASE nKey == K_LBUTTONDOWN .AND. nmCol >= ::nThumbPos .AND. nmCol <= ::nThumbPos + 1
|
|
::lAnchored := .T.
|
|
|
|
CASE nKey == K_LBUTTONUP
|
|
|
|
IF ( lHit := ::lOnLeftDown )
|
|
DO CASE
|
|
CASE nmCol >= ::nLeft .AND. nmCol <= ::nLeft + 1
|
|
Eval( ::bBtnLeftTop )
|
|
CASE nmCol >= ::nRight - 1 .AND. nmCol <= ::nRight
|
|
Eval( ::bBtnRightBottom )
|
|
CASE nmCol < ::nThumbPos
|
|
CASE nmCol > ::nThumbPos + 1
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
IF lHit
|
|
::lOnLeftDown := .F.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CASE nKey == K_LBUTTONPRESSED
|
|
IF ( lHit := ::lOnLeftDown )
|
|
DO CASE
|
|
CASE nmCol == ::nLeft .OR. nmCol == ::nLeft + 1
|
|
wvt_Keyboard( K_SBLINELEFT )
|
|
CASE nmCol == ::nRight .OR. nmCol == ::nRight - 1
|
|
wvt_Keyboard( K_SBLINERIGHT )
|
|
CASE nmCol < ::nThumbPos
|
|
wvt_Keyboard( K_SBPAGELEFT )
|
|
CASE nmCol > ::nThumbPos + 1
|
|
wvt_Keyboard( K_SBPAGERIGHT )
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
ENDIF
|
|
|
|
CASE nKey == K_LBUTTONDOWN
|
|
DO CASE
|
|
CASE nmCol == ::nLeft .OR. nmCol == ::nLeft + 1
|
|
Eval( ::bBtnLeftTopDep )
|
|
wvt_Keyboard( K_SBLINELEFT )
|
|
CASE nmCol == ::nRight .OR. nmCol == ::nRight - 1
|
|
Eval( ::bBtnRightBottomDep )
|
|
wvt_Keyboard( K_SBLINERIGHT )
|
|
CASE nmCol < ::nThumbPos
|
|
wvt_Keyboard( K_SBPAGELEFT )
|
|
CASE nmCol > ::nThumbPos + 1
|
|
wvt_Keyboard( K_SBPAGERIGHT )
|
|
OTHERWISE
|
|
lHit := .F.
|
|
ENDCASE
|
|
IF lHit
|
|
::lOnLeftDown := .T.
|
|
ENDIF
|
|
ENDCASE
|
|
ENDIF
|
|
ENDCASE
|
|
ENDCASE
|
|
|
|
RETURN lHit
|
|
|
|
/* CLASS WvtBanner */
|
|
CREATE CLASS WvtBanner INHERIT WvtObject
|
|
|
|
VAR nTimeDelay INIT 0.5 /* One-half Second */
|
|
VAR nDirection INIT 0 /* LEFT 1-RIGHT */
|
|
VAR nCharToSkip INIT 1
|
|
VAR cText INIT ""
|
|
VAR cDispText INIT ""
|
|
VAR nTextLen INIT 0
|
|
VAR nTextIndex INIT 0
|
|
|
|
VAR oLabel
|
|
|
|
VAR nAlignVert INIT 2 /* Center */
|
|
|
|
VAR nCurSeconds INIT 0
|
|
VAR nCurAlign
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Configure()
|
|
METHOD Refresh()
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
METHOD OnTimer()
|
|
METHOD SetText( cText )
|
|
METHOD Destroy()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtBanner:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_BANNER, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:Create()
|
|
|
|
::cDispText := ::cText
|
|
|
|
::oLabel := WvtLabel():New( ::oParent, , ::nTop, ::nLeft, ::nBottom, ::nRight )
|
|
::oLabel:Text := ::cDispText
|
|
::oLabel:cFont := ::cFont
|
|
::oLabel:nFontHeight := ::nFontHeight
|
|
::oLabel:nFontWidth := ::nFontWidth
|
|
::oLabel:nFontWeight := ::nFontWeight
|
|
::oLabel:nFontQuality := ::nFontQuality
|
|
::oLabel:lItalic := ::lItalic
|
|
::oLabel:lStrikeout := ::lStrikeout
|
|
::oLabel:lUnderline := ::lUnderline
|
|
::oLabel:nAlignVert := ::nAlignVert
|
|
::oLabel:nAlignHorz := iif( ::nDirection == 0, 0, 1 )
|
|
::oLabel:nTextColor := ::nTextColor
|
|
::oLabel:nBackColor := ::nBackColor
|
|
::oLabel:nTextColorHoverOn := ::nTextColorHoverOn
|
|
::oLabel:nBackColorHoverOn := ::nBackColorHoverOn
|
|
|
|
::oLabel:Create()
|
|
|
|
::nCurSeconds := Seconds()
|
|
::nTextLen := Len( ::cText )
|
|
::nTextIndex := iif( ::nDirection == 0, 1, ::nTextLen )
|
|
::nCurAlign := ::nDirection
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:Destroy()
|
|
|
|
wvg_DeleteObject( ::oLabel:hFont )
|
|
|
|
RETURN NIL
|
|
|
|
METHOD WvtBanner:Configure()
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:OnTimer()
|
|
|
|
::Refresh()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:SetText( cText )
|
|
|
|
IF cText != NIL
|
|
::cText := cText
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:Refresh()
|
|
|
|
LOCAL nNewTime
|
|
|
|
IF Abs( ( nNewTime := Seconds() ) - ::nCurSeconds ) >= ::nTimeDelay
|
|
::nCurSeconds := nNewTime
|
|
|
|
IF ::nDirection == 0
|
|
::nTextIndex++
|
|
IF ::nTextIndex > ::nTextLen
|
|
::nTextIndex := 1
|
|
::nCurAlign := iif( ::nCurAlign == 0, 1, 0 )
|
|
ENDIF
|
|
|
|
IF ::nCurAlign == 0 /* Left */
|
|
::cDispText := SubStr( ::cText, ::nTextIndex )
|
|
ELSE /* Right */
|
|
::cDispText := SubStr( ::cText, 1, ::nTextIndex )
|
|
ENDIF
|
|
ELSE
|
|
::nTextIndex--
|
|
IF ::nTextIndex < 0
|
|
::nTextIndex := ::nTextLen
|
|
::nCurAlign := iif( ::nCurAlign == 0, 1, 0 )
|
|
ENDIF
|
|
|
|
IF ::nCurAlign == 0 /* Left */
|
|
::cDispText := SubStr( ::cText, ::nTextIndex )
|
|
ELSE /* Right */
|
|
::cDispText := SubStr( ::cText, 1, ::nTextIndex )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
::oLabel:nAlignHorz := ::nCurAlign
|
|
::oLabel:SetText( ::cDispText )
|
|
::oLabel:Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:HoverOn()
|
|
|
|
::oLabel:HoverOn()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtBanner:HoverOff()
|
|
|
|
::oLabel:HoverOff()
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtTextBox */
|
|
CREATE CLASS WvtTextBox INHERIT WvtObject
|
|
|
|
VAR cText INIT ""
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD Configure()
|
|
METHOD Refresh()
|
|
METHOD SetText( cText )
|
|
METHOD HoverOn()
|
|
METHOD HoverOff()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtTextBox:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_TEXTBOX, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:Create()
|
|
|
|
::nTextColorHoverOff := ::nTextColor
|
|
|
|
::hFont := wvt_CreateFont( ::cFont, ::nFontHeight, ::nFontWidth, ;
|
|
::nFontWeight, ::lItalic, ::lUnderline, ::lStrikeout, ;
|
|
::nCharSet, ::nFontQuality, 0 )
|
|
|
|
IF ::hFont != 0
|
|
::bPaint := {|| wvt_DrawTextBox( ::nTop, ::nLeft, ::nBottom, ::nRight, ;
|
|
::aPxlTLBR, ::cText, ::nAlignHorz, ::nAlignVert, ;
|
|
::nTextColor, ::nBackColor, ::nBackMode, ::hFont ) }
|
|
|
|
AAdd( ::aPaint, { ::bPaint, { WVT_BLOCK_LABEL, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
ENDIF
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:Refresh()
|
|
|
|
Eval( ::bPaint )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:Configure()
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:SetText( cText )
|
|
|
|
IF cText != NIL
|
|
::cText := cText
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:HoverOn( /* cText */ )
|
|
|
|
IF ::nTextColorHoverOn != NIL
|
|
::nTextColor := ::nTextColorHoverOn
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtTextBox:HoverOff( /* cText */ )
|
|
|
|
IF ::nTextColorHoverOn != NIL
|
|
::nTextColor := ::nTextColorHoverOff
|
|
::Refresh()
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtProgressBar */
|
|
CREATE CLASS WvtProgressBar INHERIT WvtObject
|
|
|
|
VAR cImage
|
|
VAR nDirection INIT 0 /* 0-Left-Right,Top-Bottom 1-Right-Left,Bottom-Top */
|
|
VAR nStyle INIT 0
|
|
VAR lVertical INIT .F.
|
|
VAR lActive INIT .F.
|
|
|
|
VAR nBarColor INIT RGB( 0, 0, 128 )
|
|
VAR nCurrent INIT 0
|
|
VAR nTotal INIT 1
|
|
VAR nPercent INIT 0
|
|
VAR cBackColor INIT "W/W"
|
|
|
|
VAR cScreen
|
|
|
|
METHOD New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
METHOD create()
|
|
METHOD display( nCurrent, nTotal )
|
|
METHOD Activate()
|
|
METHOD DeActivate()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtProgressBar:New( oParent, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
::Super:New( oParent, DLG_OBJ_PROGRESSBAR, nID, nTop, nLeft, nBottom, nRight )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtProgressBar:Create()
|
|
|
|
__defaultNIL( @::nTop, 0 )
|
|
__defaultNIL( @::nLeft, 0 )
|
|
__defaultNIL( @::nBottom, iif( ::lVertical, ::nTop + 9, ::nTop ) )
|
|
__defaultNIL( @::nRight, iif( ::lVertical, ::nLeft + 1, ::nLeft + 19 ) )
|
|
__defaultNIL( @::nTextColor, RGB( 255, 255, 255 ) )
|
|
__defaultNIL( @::nBackColor, RGB( 198, 198, 198 ) )
|
|
|
|
::bPaint := {|| ::Display() }
|
|
AAdd( ::aPaint, { ::bPaint, { WVT_BLOCK_LABEL, ::nTop, ::nLeft, ::nBottom, ::nRight } } )
|
|
|
|
::Super:Create()
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtProgressBar:Display( nCurrent, nTotal )
|
|
|
|
IF ! ::lActive
|
|
RETURN Self
|
|
ENDIF
|
|
|
|
__defaultNIL( @nCurrent, ::nCurrent )
|
|
__defaultNIL( @nTotal, ::nTotal )
|
|
|
|
::nCurrent := nCurrent
|
|
::nTotal := nTotal
|
|
|
|
IF ::nCurrent > ::nTotal
|
|
::nCurrent := ::nTotal
|
|
ENDIF
|
|
|
|
::nPercent := Int( ::nCurrent / ::nTotal * 100 )
|
|
|
|
wvt_DrawProgressBar( ::nTop, ::nLeft, ::nBottom, ::nRight, ::aPxlTLBR, ::nPercent, ;
|
|
::nBackColor, ::nBarColor, ::cImage, ::lVertical, ::nDirection )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtProgressBar:Activate()
|
|
|
|
::cScreen := SaveScreen( ::nTop, ::nLeft, ::nBottom, ::nRight )
|
|
hb_DispBox( ::nTop, ::nLeft, ::nBottom, ::nRight, " ", ::cBackColor )
|
|
::lActive := .T.
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtProgressBar:DeActivate()
|
|
|
|
::lActive := .F.
|
|
::nCurrent := 0
|
|
::nTotal := 1
|
|
RestScreen( ::nTop, ::nLeft, ::nBottom, ::nRight, ::cScreen )
|
|
::cScreen := NIL
|
|
|
|
RETURN Self
|
|
|
|
/* Class WvtMenu [Peter Rees] */
|
|
CREATE CLASS wvtMenu
|
|
|
|
METHOD create( cCaption )
|
|
METHOD AddItem( cCaption, bAction )
|
|
METHOD DelAllItems()
|
|
METHOD DelItem( nItemNum )
|
|
METHOD EnableItem( nItemNum )
|
|
METHOD DisableItem( nItemNum )
|
|
METHOD NumItems()
|
|
METHOD Destroy()
|
|
METHOD GetItem( nItemNum )
|
|
METHOD FindMenuItemById( nId )
|
|
METHOD DrawMenuBar()
|
|
|
|
CLASS VAR MenuItemId INIT 1
|
|
|
|
VAR aItems
|
|
VAR hMenu
|
|
VAR Caption
|
|
VAR IdNumber
|
|
|
|
ENDCLASS
|
|
|
|
METHOD wvtMenu:Create( cCaption )
|
|
|
|
::aItems := {}
|
|
|
|
IF Empty( ::hMenu := wvt_CreateMenu() )
|
|
#if 0
|
|
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:Init()", "Create Menu Error", { cCaption, cCaption } ) )
|
|
#endif
|
|
ENDIF
|
|
::Caption := iif( cCaption == NIL, "", cCaption )
|
|
|
|
RETURN Self
|
|
|
|
METHOD wvtMenu:Destroy()
|
|
|
|
IF ! Empty( ::hMenu )
|
|
::DelAllItems()
|
|
|
|
IF ! wvt_DestroyMenu( ::hMenu )
|
|
#if 0
|
|
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:Destroy()", "Destroy menu FAILED", {} ) )
|
|
#endif
|
|
ENDIF
|
|
::hMenu := 0
|
|
ENDIF
|
|
|
|
RETURN .T.
|
|
|
|
METHOD wvtMenu:AddItem( cCaption, bAction )
|
|
|
|
LOCAL lResult := .F., aItem
|
|
|
|
IF ! Empty( ::hMenu ) .AND. ( ! Empty( cCaption ) .OR. ! Empty( bAction ) )
|
|
IF HB_ISOBJECT( bAction )
|
|
cCaption := iif( ! Empty( cCaption ), cCaption, bAction:Caption )
|
|
aItem := { MF_POPUP, bAction:hMenu, cCaption, bAction } /* bAction is a wvtMenu object reference */
|
|
ELSEIF HB_ISBLOCK( bAction )
|
|
aItem := { MF_STRING, ::MenuItemId++, cCaption, bAction } /* bAction is a code block to execute */
|
|
ELSEIF Left( cCaption, 1 ) == "-"
|
|
aItem := { MF_SEPARATOR, 0, 0, NIL }
|
|
ELSE
|
|
#if 0
|
|
Throw( ErrorNew( "wvtMenu", 3101, "wvtMenu:AddItem()", "Argument Error", { cCaption, bAction } ) )
|
|
#endif
|
|
ENDIF
|
|
|
|
IF ! wvt_AppendMenu( ::hMenu, aItem[ WVT_MENU_TYPE ], aItem[ WVT_MENU_IDENTIFIER ], aItem[ WVT_MENU_CAPTION ] )
|
|
#if 0
|
|
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:AddItem()", "Add menu item", { cCaption, bAction } ) )
|
|
#endif
|
|
ENDIF
|
|
|
|
AAdd( ::aItems, aItem )
|
|
|
|
lResult := .T.
|
|
ENDIF
|
|
|
|
RETURN lResult
|
|
|
|
METHOD wvtMenu:DelAllItems()
|
|
|
|
LOCAL lResult := .T., nItems
|
|
|
|
nItems := ::NumItems()
|
|
DO WHILE nItems > 0 .AND. lResult
|
|
lResult := ::DelItem( nItems )
|
|
nItems--
|
|
ENDDO
|
|
|
|
RETURN lResult
|
|
|
|
METHOD wvtMenu:DelItem( nItemNum )
|
|
|
|
LOCAL lResult := .F.
|
|
|
|
IF nItemNum > 0 .AND. nItemNum <= ::NumItems()
|
|
IF ::aItems[ nItemNum ][ WVT_MENU_TYPE ] == MF_POPUP
|
|
::aItems[ nItemNum ][ WVT_MENU_MENUOBJ ]:Destroy()
|
|
ENDIF
|
|
|
|
IF ( lResult := wvt_DeleteMenu( ::hMenu, nItemNum - 1, MF_BYPOSITION ) ) /* Remember ZERO base */
|
|
hb_ADel( ::aItems, nItemNum, .T. )
|
|
ELSE
|
|
#if 0
|
|
Throw( ErrorNew( "wvtMenu", 1000, "wvtMenu:DelItem()", "Delete menu item FAILED", { nItemNum } ) )
|
|
#endif
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN lResult
|
|
|
|
METHOD wvtMenu:EnableItem( nItemNum )
|
|
|
|
LOCAL nPrevious := -1
|
|
|
|
IF ! Empty( ::hMenu ) .AND. ! Empty( nItemNum )
|
|
nPrevious := wvt_EnableMenuItem( ::hMenu, nItemNum - 1, MF_BYPOSITION + MF_ENABLED )
|
|
ENDIF
|
|
|
|
RETURN nPrevious
|
|
|
|
METHOD wvtMenu:DisableItem( nItemNum )
|
|
|
|
LOCAL nPrevious := -1
|
|
|
|
IF ! Empty( ::hMenu ) .AND. ! Empty( nItemNum )
|
|
nPrevious := wvt_EnableMenuItem( ::hMenu, nItemNum - 1, MF_BYPOSITION + MF_GRAYED )
|
|
ENDIF
|
|
|
|
RETURN nPrevious
|
|
|
|
METHOD wvtMenu:NumItems()
|
|
RETURN Len( ::aItems )
|
|
|
|
METHOD wvtMenu:GetItem( nItemNum )
|
|
|
|
LOCAL nItems := ::NumItems(), aResult := NIL
|
|
|
|
IF nItemNum > 0 .AND. nItemNum <= nItems
|
|
aResult := ::aItems[ nItemNum ]
|
|
ENDIF
|
|
|
|
RETURN aResult
|
|
|
|
METHOD wvtMenu:FindMenuItemById( nId )
|
|
|
|
LOCAL x, aResult := {}
|
|
|
|
IF ! Empty( nId )
|
|
x := ::NumItems()
|
|
DO WHILE x > 0 .AND. Empty( aResult )
|
|
IF ::aItems[ x ][ WVT_MENU_TYPE ] == MF_POPUP
|
|
aResult := ::aItems[ x ][ WVT_MENU_MENUOBJ ]:FindMenuItemById( nId )
|
|
ELSEIF ::aItems[ x ][ WVT_MENU_IDENTIFIER ] == nId
|
|
aResult := ::aItems[ x ]
|
|
ENDIF
|
|
x--
|
|
ENDDO
|
|
ENDIF
|
|
|
|
RETURN aResult
|
|
|
|
METHOD PROCEDURE wvtMenu:DrawMenuBar()
|
|
|
|
wvt_DrawMenuBar()
|
|
|
|
RETURN
|
|
|
|
/* Class WvtConsole */
|
|
CREATE CLASS WvtConsole INHERIT WvtObject
|
|
|
|
METHOD New( oParent )
|
|
METHOD Say( nRow, nCol, xExp, cColor )
|
|
METHOD Box( nRow, nCol, n2Row, n2Col, cBoxChars, cColor )
|
|
|
|
ENDCLASS
|
|
|
|
METHOD WvtConsole:New( oParent )
|
|
|
|
::Super:New( oParent, DLG_OBJ_CONSOLE, , -1, -1, -1, -1 )
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtConsole:Say( nRow, nCol, xExp, cColor )
|
|
|
|
LOCAL nCRow, nCCol, nCursor
|
|
|
|
IF nRow >= 0 .AND. nCol >= 0 .AND. xExp != NIL
|
|
nCursor := SetCursor( SC_NONE )
|
|
nCRow := Row()
|
|
nCCol := Col()
|
|
hb_DispOutAt( nRow, nCol, xExp, cColor )
|
|
SetPos( nCRow, nCCol )
|
|
SetCursor( nCursor )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
METHOD WvtConsole:Box( nRow, nCol, n2Row, n2Col, cBoxChars, cColor )
|
|
|
|
LOCAL nCRow, nCCol, nCursor
|
|
|
|
IF nRow >= 0 .AND. nCol >= 0
|
|
nCursor := SetCursor( SC_NONE )
|
|
nCRow := Row()
|
|
nCCol := Col()
|
|
hb_DispBox( nRow, nCol, n2Row, n2Col, cBoxChars, cColor )
|
|
SetPos( nCRow, nCCol )
|
|
SetCursor( nCursor )
|
|
ENDIF
|
|
|
|
RETURN Self
|
|
|
|
/* TBrowseWvg From TBrowse */
|
|
#define _TBCI_COLOBJECT 1 /* column object */
|
|
#define _TBCI_COLWIDTH 2 /* width of the column */
|
|
#define _TBCI_COLPOS 3 /* column position on screen */
|
|
#define _TBCI_CELLWIDTH 4 /* width of the cell */
|
|
#define _TBCI_CELLPOS 5 /* cell position in column */
|
|
#define _TBCI_COLSEP 6 /* column separator */
|
|
#define _TBCI_SEPWIDTH 7 /* width of the separator */
|
|
#define _TBCI_HEADING 8 /* column heading */
|
|
#define _TBCI_FOOTING 9 /* column footing */
|
|
#define _TBCI_HEADSEP 10 /* heading separator */
|
|
#define _TBCI_FOOTSEP 11 /* footing separator */
|
|
#define _TBCI_DEFCOLOR 12 /* default color */
|
|
#define _TBCI_FROZENSPACE 13 /* space after frozen columns */
|
|
#define _TBCI_LASTSPACE 14 /* space after last visible column */
|
|
#define _TBCI_SIZE 14 /* size of array with TBrowse column data */
|
|
|
|
CREATE CLASS TBrowseWvg INHERIT TBrowse
|
|
|
|
VAR aColumnsSep INIT {}
|
|
|
|
METHOD SetVisible()
|
|
|
|
ENDCLASS
|
|
|
|
METHOD TBrowseWvg:SetVisible()
|
|
|
|
LOCAL lFirst, aCol, nColPos
|
|
|
|
::Super:SetVisible()
|
|
::aColumnsSep := {}
|
|
|
|
lFirst := .T.
|
|
FOR EACH aCol IN ::aColData
|
|
IF aCol[ _TBCI_COLPOS ] != NIL
|
|
IF lFirst
|
|
lFirst := .F.
|
|
|
|
ELSE
|
|
nColPos := aCol[ _TBCI_COLPOS ]
|
|
|
|
IF aCol[ _TBCI_SEPWIDTH ] > 0
|
|
nColPos += Int( aCol[ _TBCI_SEPWIDTH ] / 2 )
|
|
ENDIF
|
|
|
|
AAdd( ::aColumnsSep, nColPos )
|
|
ENDIF
|
|
ENDIF
|
|
NEXT
|
|
|
|
RETURN Self
|