Files
harbour-core/harbour/contrib/hbxbp/window.prg
Viktor Szakats c300ba14ee 2012-07-23 17:26 UTC+0200 Viktor Szakats (harbour syenar.net)
+ contrib/gtwvg/3state.prg
  + contrib/gtwvg/activex.prg
  + contrib/gtwvg/bitmap.prg
  + contrib/gtwvg/checkbox.prg
  + contrib/gtwvg/class.prg
  + contrib/gtwvg/combobox.prg
  + contrib/gtwvg/crt.prg
  + contrib/gtwvg/dataref.prg
  + contrib/gtwvg/dialog.prg
  + contrib/gtwvg/drawarea.prg
  + contrib/gtwvg/genrc.prg
  + contrib/gtwvg/htmlview.prg
  + contrib/gtwvg/listbox.prg
  + contrib/gtwvg/menubar.prg
  + contrib/gtwvg/mle.prg
  + contrib/gtwvg/paint.prg
  + contrib/gtwvg/parthdlr.prg
  + contrib/gtwvg/pushbut.prg
  + contrib/gtwvg/radiobut.prg
  + contrib/gtwvg/scrollbr.prg
  + contrib/gtwvg/sle.prg
  + contrib/gtwvg/statbar.prg
  + contrib/gtwvg/static.prg
  + contrib/gtwvg/syswnd.prg
  + contrib/gtwvg/tabpage.prg
  + contrib/gtwvg/toolbar.prg
  + contrib/gtwvg/treeview.prg
  + contrib/gtwvg/wnd.prg
  + contrib/hbxbp/3state.prg
  + contrib/hbxbp/appevent.prg
  + contrib/hbxbp/bitmap.prg
  + contrib/hbxbp/browse.prg
  + contrib/hbxbp/checkbox.prg
  + contrib/hbxbp/clipboard.prg
  + contrib/hbxbp/combobox.prg
  + contrib/hbxbp/crt.prg
  + contrib/hbxbp/dataref.prg
  + contrib/hbxbp/dialog.prg
  + contrib/hbxbp/filedialog.prg
  + contrib/hbxbp/fontdialog.prg
  + contrib/hbxbp/generic.prg
  + contrib/hbxbp/gra.prg
  + contrib/hbxbp/htmlviewer.prg
  + contrib/hbxbp/listbox.prg
  + contrib/hbxbp/menubar.prg
  + contrib/hbxbp/mle.prg
  + contrib/hbxbp/parthandler.prg
  + contrib/hbxbp/presspace.prg
  + contrib/hbxbp/printdialog.prg
  + contrib/hbxbp/printer.prg
  + contrib/hbxbp/pushbutton.prg
  + contrib/hbxbp/radiobutton.prg
  + contrib/hbxbp/rtf.prg
  + contrib/hbxbp/scrollbar.prg
  + contrib/hbxbp/sle.prg
  + contrib/hbxbp/spinbutton.prg
  + contrib/hbxbp/static.prg
  + contrib/hbxbp/statusbar.prg
  + contrib/hbxbp/style.prg
  + contrib/hbxbp/tabpage.prg
  + contrib/hbxbp/toolbar.prg
  + contrib/hbxbp/treeview.prg
  + contrib/hbxbp/window.prg
  - contrib/gtwvg/wvg3stat.prg
  - contrib/gtwvg/wvgax.prg
  - contrib/gtwvg/wvgbitmp.prg
  - contrib/gtwvg/wvgcheck.prg
  - contrib/gtwvg/wvgclass.prg
  - contrib/gtwvg/wvgcombo.prg
  - contrib/gtwvg/wvgcrt.prg
  - contrib/gtwvg/wvgdarea.prg
  - contrib/gtwvg/wvgdatar.prg
  - contrib/gtwvg/wvgdlg.prg
  - contrib/gtwvg/wvggenrc.prg
  - contrib/gtwvg/wvghtmlv.prg
  - contrib/gtwvg/wvglistb.prg
  - contrib/gtwvg/wvgmenub.prg
  - contrib/gtwvg/wvgmle.prg
  - contrib/gtwvg/wvgpaint.prg
  - contrib/gtwvg/wvgphdlr.prg
  - contrib/gtwvg/wvgpushb.prg
  - contrib/gtwvg/wvgradio.prg
  - contrib/gtwvg/wvgscrlb.prg
  - contrib/gtwvg/wvgsle.prg
  - contrib/gtwvg/wvgstatb.prg
  - contrib/gtwvg/wvgstatc.prg
  - contrib/gtwvg/wvgsysw.prg
  - contrib/gtwvg/wvgtabpg.prg
  - contrib/gtwvg/wvgtoolb.prg
  - contrib/gtwvg/wvgtreev.prg
  - contrib/gtwvg/wvgwnd.prg
  - contrib/hbxbp/xbp3state.prg
  - contrib/hbxbp/xbpappevent.prg
  - contrib/hbxbp/xbpbitmap.prg
  - contrib/hbxbp/xbpbrowse.prg
  - contrib/hbxbp/xbpcheckbox.prg
  - contrib/hbxbp/xbpclipboard.prg
  - contrib/hbxbp/xbpcombobox.prg
  - contrib/hbxbp/xbpcrt.prg
  - contrib/hbxbp/xbpdataref.prg
  - contrib/hbxbp/xbpdialog.prg
  - contrib/hbxbp/xbpfiledialog.prg
  - contrib/hbxbp/xbpfontdialog.prg
  - contrib/hbxbp/xbpgeneric.prg
  - contrib/hbxbp/xbpgra.prg
  - contrib/hbxbp/xbphtmlviewer.prg
  - contrib/hbxbp/xbplistbox.prg
  - contrib/hbxbp/xbpmenubar.prg
  - contrib/hbxbp/xbpmle.prg
  - contrib/hbxbp/xbpparthandler.prg
  - contrib/hbxbp/xbppresspace.prg
  - contrib/hbxbp/xbpprintdialog.prg
  - contrib/hbxbp/xbpprinter.prg
  - contrib/hbxbp/xbppushbutton.prg
  - contrib/hbxbp/xbpradiobutton.prg
  - contrib/hbxbp/xbprtf.prg
  - contrib/hbxbp/xbpscrollbar.prg
  - contrib/hbxbp/xbpsle.prg
  - contrib/hbxbp/xbpspinbutton.prg
  - contrib/hbxbp/xbpstatic.prg
  - contrib/hbxbp/xbpstatusbar.prg
  - contrib/hbxbp/xbpstyle.prg
  - contrib/hbxbp/xbptabpage.prg
  - contrib/hbxbp/xbptoolbar.prg
  - contrib/hbxbp/xbptreeview.prg
  - contrib/hbxbp/xbpwindow.prg
  * contrib/gtwvg/gtwvg.hbp
  * contrib/hbxbp/hbxbp.hbp
    % deleted unnecessary prefix from .prg filenames, 
      thus making the much more easily searchable and 
      recognizable and also allowing more room for 
      the real description with much less undecipherable 
      abbreviations.
2012-07-23 15:32:39 +00:00

1928 lines
59 KiB
Plaintext

/*
* $Id$
*/
/*
* Harbour Project source code:
* Source file for the Xbp*Classes
*
* Copyright 2008-2010 Pritpal Bedi <bedipritpal@hotmail.com>
* http://harbour-project.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
*
* As a special exception, the Harbour Project gives permission for
* additional uses of the text contained in its release of Harbour.
*
* The exception is that, if you link the Harbour libraries with other
* files to produce an executable, this does not by itself cause the
* resulting executable to be covered by the GNU General Public License.
* Your use of that executable is in no way restricted on account of
* linking the Harbour library code into it.
*
* This exception does not however invalidate any other reasons why
* the executable file might be covered by the GNU General Public License.
*
* This exception applies only to the code released by the Harbour
* Project under the name Harbour. If you copy code from other
* Harbour Project or Free Software Foundation releases into a copy of
* Harbour, as the General Public License permits, the exception does
* not apply to the code that you add in this way. To avoid misleading
* anyone as to the status of such modified files, you must delete
* this exception notice from them.
*
* If you write modifications of your own for Harbour, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice.
*
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*
* EkOnkar
* ( The LORD is ONE )
*
* Xbase++ Compatible xbpWindow Class
*
* Pritpal Bedi
* 29May2009
*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#include "hbclass.ch"
#include "common.ch"
#include "error.ch"
#include "inkey.ch"
#include "xbp.ch"
#include "appevent.ch"
/*----------------------------------------------------------------------*/
CLASS XbpWindow INHERIT XbpPartHandler
CLASSDATA nProperty INIT 0
DATA qtProperty INIT ""
DATA qtObject
DATA isViaQtObject INIT .f.
/* CONFIGURATION */
DATA animate INIT .F.
DATA clipChildren INIT .F.
DATA clipParent INIT .F.
DATA clipSiblings INIT .T.
DATA group INIT XBP_NO_GROUP
DATA sizeRedraw INIT .F.
DATA tabStop INIT .F.
DATA visible INIT .T.
/* RUNTIME DATA */
DATA dropZone INIT .F.
DATA helpLink
DATA tooltipText INIT ""
/* CALLBACK SLOTS */
DATA sl_enter
DATA sl_leave
DATA sl_lbClick
DATA sl_lbDblClick
DATA sl_lbDown
DATA sl_lbUp
DATA sl_mbClick
DATA sl_mbDblClick
DATA sl_mbDown
DATA sl_mbUp
DATA sl_motion
DATA sl_rbClick
DATA sl_rbDblClick
DATA sl_rbDown
DATA sl_rbUp
DATA sl_wheel
DATA sl_helpRequest
DATA sl_keyboard
DATA sl_killInputFocus
DATA sl_move
DATA sl_paint
DATA sl_quit
DATA sl_resize
DATA sl_setInputFocus
DATA sl_dragEnter
DATA sl_dragMotion
DATA sl_dragLeave
DATA sl_dragDrop
DATA sl_close
DATA sl_setDisplayFocus
DATA sl_killDisplayFocus
DATA hb_contextMenu
DATA hBrushBG
DATA is_hidden INIT .F.
DATA is_enabled INIT .T.
DATA icon INIT 0
DATA closable INIT .T.
DATA resizable INIT .T.
DATA resizeMode INIT 0
DATA lModal INIT .f.
DATA hWnd
DATA pWnd
DATA aPos INIT { 0,0 }
DATA aSize INIT { 0,0 }
DATA aPresParams INIT {}
DATA lHasInputFocus INIT .F.
DATA nFrameState INIT 0 /* normal */
DATA maxCol INIT 79
DATA maxRow INIT 24
DATA mouseMode INIT 1
DATA nID INIT 0
DATA nOldProc INIT 0
DATA nWndProc
DATA oMenu
DATA oWidget
DATA cargo INIT ""
DATA styleSheet INIT ""
DATA oTabWidget
DATA aTabs INIT {}
DATA oPalette
DATA xDummy
DATA aConnections INIT {}
DATA aEConnections INIT {}
DATA lTrack INIT .f.
DATA aPP
DATA qLayout
DATA nLayout
DATA oFont
DATA aCSS INIT { { "", "" } }
METHOD init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD setQtProperty( cProperty )
METHOD configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD grabEvent( nEvent, oEvent )
METHOD handleEvent( nEvent, mp1, mp2 )
METHOD captureMouse( lCapture )
METHOD invalidateRect( aRect )
METHOD setFont( oFont )
METHOD setFontCompoundName( xFont )
METHOD setModalState( nState )
METHOD setPointer( cDllName, xResID, nType )
METHOD setTrackPointer( lTrack )
METHOD setPos( aPos, lPaint )
METHOD setPosAndSize( aPos, aSize, lPaint )
METHOD setSize( aSize, lPaint )
METHOD isDerivedFrom( cClassORoObject )
METHOD setPresParam( aPPNew )
METHOD setCSSAttribute( cAttr, cCSS )
DATA cTitle INIT ""
METHOD title( cTitle ) SETGET
METHOD enter( ... ) SETGET
METHOD leave( ... ) SETGET
METHOD lbClick( ... ) SETGET
METHOD lbDblClick( ... ) SETGET
METHOD lbDown( ... ) SETGET
METHOD lbUp( ... ) SETGET
METHOD mbClick( ... ) SETGET
METHOD mbDblClick( ... ) SETGET
METHOD mbDown( ... ) SETGET
METHOD mbUp( ... ) SETGET
METHOD motion( ... ) SETGET
METHOD rbClick( ... ) SETGET
METHOD rbDblClick( ... ) SETGET
METHOD rbDown( ... ) SETGET
METHOD rbUp( ... ) SETGET
METHOD wheel( ... ) SETGET
METHOD close( ... ) SETGET
METHOD helpRequest( ... ) SETGET
METHOD keyboard( ... ) SETGET
METHOD killDisplayFocus( ... ) SETGET
METHOD killInputFocus( ... ) SETGET
METHOD move( ... ) SETGET
METHOD paint( ... ) SETGET
METHOD quit( ... ) SETGET
METHOD resize( ... ) SETGET
METHOD setDisplayFocus( ... ) SETGET
METHOD setInputFocus( ... ) SETGET
METHOD dragEnter( ... ) SETGET
METHOD dragMotion( ... ) SETGET
METHOD dragLeave( ... ) SETGET
METHOD dragDrop( ... ) SETGET
METHOD hbContextMenu( ... ) SETGET
ERROR HANDLER OnError( ... )
METHOD Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
METHOD isEnabled() INLINE ::is_enabled
METHOD isVisible() INLINE !( ::is_hidden )
METHOD destroy()
METHOD disable()
METHOD enable()
METHOD hide()
METHOD lockPS()
METHOD lockUpdate()
METHOD show()
METHOD toBack()
METHOD toFront()
METHOD unlockPS()
METHOD winDevice()
METHOD setColorBG( nRGB )
METHOD setColorFG( nRGB )
METHOD currentPos()
METHOD currentSize()
METHOD getHWND()
METHOD getModalState()
METHOD hasInputFocus()
METHOD setFocus()
METHOD sendMessage()
METHOD connectWindowEvents()
METHOD disconnectWindowEvents()
METHOD clearSlots()
/* Called in the initializer - Unique in the application */
METHOD getProperty() INLINE "PROP" + hb_ntos( ++::nProperty )
METHOD setStyle() INLINE NIL
METHOD className() INLINE __objGetClsName( Self )
/* Harbour Extension */
METHOD hbLayout( nTypeLayout ) SETGET
METHOD postCreate()
ACCESS pParent INLINE iif( empty( ::oParent ), NIL, ::oParent:oWidget )
PROTECTED:
METHOD setStyleSheet( cAttr, cCSS )
METHOD getCSS( nAttr, xValue )
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD XbpWindow:init( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
DEFAULT aPresParams TO {}
DEFAULT lVisible TO ::visible
::oParent := oParent
::oOwner := oOwner
::aPos := aPos
::aSize := aSize
::aPP := aclone( aPresParams )
::visible := lVisible
::XbpPartHandler:init( oParent, oOwner )
::qtProperty := ::getProperty()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:create( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
LOCAL i, cClass := __objGetClsName( Self )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
DEFAULT lVisible TO ::visible
::oParent := oParent
::oOwner := oOwner
::aPos := aPos
::aSize := aSize
::visible := lVisible
/* Important : 25 Nov 2009 */
// DEFAULT ::oParent TO SetAppWindow()
::XbpPartHandler:create( oParent, oOwner )
IF !empty( aPresParams )
IF !empty( ::aPP )
FOR i := 1 TO len( ::aPP )
::aPP[ i, 1 ] := NIL
::aPP[ i, 2 ] := NIL
::aPP[ i ] := NIL
NEXT
::aPP := NIL
ENDIF
::aPP := aclone( aPresParams )
ENDIF
hbxbp_PresParam( @::aPresParams )
IF !empty( ::aPP )
FOR i := 1 TO len( ::aPP )
hbxbp_SetPresParam( ::aPresParams, ::aPP[ i,1 ], ::aPP[ i,2 ] )
::aPP[ i,1 ] := NIL
::aPP[ i,2 ] := NIL
NEXT
ENDIF
::aPP := NIL
/* Initialize CSS parameters */
IF ( i := ascan( ::aPresParams, {|e_| e_[ 1 ] == XBP_PP_FGCLR } ) ) > 0
IF ! ( ::aPresParams[ i, 2 ] == NIL )
::setCSSAttribute( "XBP_PP_FGCLR", ::getCSS( XBP_PP_FGCLR, ::aPresParams[ i, 2 ] ) )
ENDIF
ENDIF
IF ( i := ascan( ::aPresParams, {|e_| e_[ 1 ] == XBP_PP_BGCLR } ) ) > 0
IF ! ( ::aPresParams[ i, 2 ] == NIL )
::setCSSAttribute( "XBP_PP_BGCLR", ::getCSS( XBP_PP_BGCLR, ::aPresParams[ i, 2 ] ) )
ENDIF
ENDIF
IF ( i := ascan( ::aPresParams, {|e_| e_[ 1 ] == XBP_PP_COMPOUNDNAME } ) ) > 0
IF ! ( ::aPresParams[ i, 2 ] == NIL )
::setCSSAttribute( "XBP_PP_COMPOUNDNAME", ::getCSS( XBP_PP_COMPOUNDNAME, ::aPresParams[ i, 2 ] ) )
ENDIF
ENDIF
DO CASE
CASE cClass $ 'XBPDIALOG,XBPDRAWINGAREA'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_DIALOGBACKGROUND )
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_DISABLED_BGCLR, XBPSYSCLR_DIALOGBACKGROUND )
CASE cClass $ 'XBPPUSHBUTTON'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_FGCLR , XBPSYSCLR_BUTTONTEXT )
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_BUTTONMIDDLE )
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_DISABLED_BGCLR, XBPSYSCLR_BUTTONMIDDLE )
CASE cClass $ 'XBPTABPAGE'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_BUTTONMIDDLE )
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_DISABLED_BGCLR, XBPSYSCLR_BUTTONMIDDLE )
CASE cClass $ 'XBPLISTBOX'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_ENTRYFIELD )
CASE cClass $ 'XBPSCROLLBAR'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_SCROLLBAR )
CASE cClass $ 'XBPSLE,XBPMLE'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_ENTRYFIELD )
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_DISABLED_BGCLR, XBPSYSCLR_3DFACE )
CASE cClass $ 'XBPSPINBUTTON,XBPCOMBOBOX,XBPTREEVIEW'
hbxbp_SetPresParamIfNil( ::aPresParams, XBP_PP_BGCLR , XBPSYSCLR_ENTRYFIELD )
ENDCASE
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:configure( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setQtProperty( cProperty )
HB_SYMBOL_UNUSED( cProperty )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:postCreate()
::status := iif( ! empty( ::oWidget ), XBP_STAT_CREATE, XBP_STAT_FAILURE )
IF ! empty( ::toolTipText ) .AND. HB_ISSTRING( ::toolTipText )
::oWidget:setTooltip( ::toolTipText )
ENDIF
::setStyleSheet()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:connectWindowEvents()
::oWidget:connect( QEvent_MouseButtonPress , {|e| ::grabEvent( QEvent_MouseButtonPress , e ) } )
::oWidget:connect( QEvent_MouseButtonRelease , {|e| ::grabEvent( QEvent_MouseButtonRelease , e ) } )
::oWidget:connect( QEvent_MouseMove , {|e| ::grabEvent( QEvent_MouseMove , e ) } )
::oWidget:connect( QEvent_MouseButtonDblClick, {|e| ::grabEvent( QEvent_MouseButtonDblClick, e ) } )
::oWidget:connect( QEvent_Enter , {|e| ::grabEvent( QEvent_Enter , e ) } )
::oWidget:connect( QEvent_Leave , {|e| ::grabEvent( QEvent_Leave , e ) } )
::oWidget:connect( QEvent_Wheel , {|e| ::grabEvent( QEvent_Wheel , e ) } )
::oWidget:connect( QEvent_FocusIn , {|e| ::grabEvent( QEvent_FocusIn , e ) } )
::oWidget:connect( QEvent_FocusOut , {|e| ::grabEvent( QEvent_FocusOut , e ) } )
::oWidget:connect( QEvent_DragEnter , {|e| ::grabEvent( QEvent_DragEnter , e ) } )
::oWidget:connect( QEvent_DragLeave , {|e| ::grabEvent( QEvent_DragLeave , e ) } )
::oWidget:connect( QEvent_DragMove , {|e| ::grabEvent( QEvent_DragMove , e ) } )
::oWidget:connect( QEvent_Drop , {|e| ::grabEvent( QEvent_Drop , e ) } )
::oWidget:connect( QEvent_WhatsThis , {|e| ::grabEvent( QEvent_WhatsThis , e ) } )
::oWidget:connect( QEvent_KeyPress , {|e| ::grabEvent( QEvent_KeyPress , e ) } )
::oWidget:connect( QEvent_ContextMenu , {|e| ::grabEvent( QEvent_ContextMenu , e ) } )
::oWidget:connect( QEvent_Move , {|e| ::grabEvent( QEvent_Move , e ) } )
* ::oWidget:connect( QEvent_Paint , {|e| ::grabEvent( QEvent_Paint , e ) } )
* ::oWidget:connect( QEvent_Resize , {|e| ::grabEvent( QEvent_Resize , e ) } )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:disconnectWindowEvents()
::oWidget:disconnect( QEvent_MouseButtonPress )
::oWidget:disconnect( QEvent_MouseButtonRelease )
::oWidget:disconnect( QEvent_MouseMove )
::oWidget:disconnect( QEvent_MouseButtonDblClick )
::oWidget:disconnect( QEvent_Enter )
::oWidget:disconnect( QEvent_Leave )
::oWidget:disconnect( QEvent_Wheel )
::oWidget:disconnect( QEvent_FocusIn )
::oWidget:disconnect( QEvent_FocusOut )
::oWidget:disconnect( QEvent_DragEnter )
::oWidget:disconnect( QEvent_DragLeave )
::oWidget:disconnect( QEvent_DragMove )
::oWidget:disconnect( QEvent_Drop )
::oWidget:disconnect( QEvent_WhatsThis )
::oWidget:disconnect( QEvent_KeyPress )
::oWidget:disconnect( QEvent_ContextMenu )
::oWidget:disconnect( QEvent_Move )
* ::oWidget:disconnect( QEvent_Paint )
* ::oWidget:disconnect( QEvent_Resize )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:destroy()
::aPresParams := NIL
IF !empty( ::oOwner )
::oOwner:delOwned( Self ) /* Not a public function */
ENDIF
::oParent := NIL
::oOwner := NIL
IF !empty( ::oTabWidget )
::oTabWidget := NIL
ENDIF
IF ! empty( ::aChildren )
aeval( ::aChildren, {|o| o:destroy() } )
::aChildren := {}
ENDIF
::XbpPartHandler:destroy()
IF !empty( ::qtObject )
::qtObject:destroy()
ENDIF
IF !empty( ::qLayout )
::qLayout := NIL
ENDIF
::oWidget := NIL
HB_TRACE( HB_TR_DEBUG, "DESTROYED", __objGetClsName( Self ) )
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD XbpWindow:clearSlots()
LOCAL i
::sl_enter := NIL
::sl_leave := NIL
::sl_lbClick := NIL
::sl_lbDblClick := NIL
::sl_lbDown := NIL
::sl_lbUp := NIL
::sl_mbClick := NIL
::sl_mbDblClick := NIL
::sl_mbDown := NIL
::sl_mbUp := NIL
::sl_motion := NIL
::sl_rbClick := NIL
::sl_rbDblClick := NIL
::sl_rbDown := NIL
::sl_rbUp := NIL
::sl_wheel := NIL
::sl_helpRequest := NIL
::sl_keyboard := NIL
::sl_killInputFocus := NIL
::sl_move := NIL
::sl_paint := NIL
::sl_quit := NIL
::sl_resize := NIL
::sl_setInputFocus := NIL
::sl_dragEnter := NIL
::sl_dragMotion := NIL
::sl_dragLeave := NIL
::sl_dragDrop := NIL
::sl_close := NIL
::sl_setDisplayFocus := NIL
::sl_killDisplayFocus := NIL
IF !empty( ::aPresParams )
FOR i := 1 TO len( ::aPresParams )
::aPresParams[ i,1 ] := NIL
::aPresParams[ i,2 ] := NIL
::aPresParams[ i ] := NIL
NEXT
ENDIF
::aPresParams := NIL
::aPresParams := NIL
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:grabEvent( nEvent, oEvent )
LOCAL nXbpKey, oP0, oP1, oObj_O, oObj_N
HB_TRACE( HB_TR_DEBUG, nEvent, valtype( oEvent ), __objGetClsName( oEvent ) )
SWITCH ( nEvent )
CASE QEvent_MouseMove // :motion()
SetAppEvent( xbeM_Motion, { oEvent:x(), oEvent:y() }, NIL, self )
RETURN .f.
CASE QEvent_MouseButtonPress // :lbClick() :mbClick() :rbClick()
// :lbDown() :mbDown() :rbDown()
DO CASE
CASE oEvent:button() == Qt_LeftButton
SetAppEvent( xbeM_LbDown, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_MidButton
SetAppEvent( xbeM_MbDown, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_RightButton
SetAppEvent( xbeM_RbDown, { oEvent:x(), oEvent:y() }, NIL, self )
ENDCASE
RETURN .f.
CASE QEvent_MouseButtonRelease // :mbUp() :rbUp() :lbUp()
DO CASE
CASE oEvent:button() == Qt_LeftButton
SetAppEvent( xbeM_LbUp, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_MidButton
SetAppEvent( xbeM_MbUp, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_RightButton
SetAppEvent( xbeM_RbUp, { oEvent:x(), oEvent:y() }, NIL, self )
ENDCASE
RETURN .f.
CASE QEvent_MouseButtonDblClick // :lbDblClick() :mbDblClick() :rbDblClick()
DO CASE
CASE oEvent:button() == Qt_LeftButton
SetAppEvent( xbeM_LbDblClick, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_MidButton
SetAppEvent( xbeM_MbDblClick, { oEvent:x(), oEvent:y() }, NIL, self )
CASE oEvent:button() == Qt_RightButton
SetAppEvent( xbeM_RbDblClick, { oEvent:x(), oEvent:y() }, NIL, self )
ENDCASE
RETURN .f.
CASE QEvent_ContextMenu //
//SetAppEvent( xbeM_Context, { oEvent:globalX(), oEvent:globalY() }, NIL, self )
::hbContextMenu( { oEvent:globalX(), oEvent:globalY() } )
EXIT
CASE QEvent_Enter // :enter()
IF ( ::lTrack )
SetAppEvent( xbeM_Enter, { oEvent:x(), oEvent:y() }, NIL, self )
ENDIF
RETURN .f.
CASE QEvent_Leave // :leave()
IF ( ::lTrack )
SetAppEvent( xbeM_Leave, { oEvent:x(), oEvent:y() }, NIL, self )
ENDIF
RETURN .f.
CASE QEvent_Wheel // :wheel()
SetAppEvent( xbeM_Wheel, { oEvent:x(), oEvent:y() }, { oEvent:buttons(), oEvent:delta() }, self )
RETURN .f.
CASE QEvent_FocusIn // :setInputFocus()
SetAppEvent( xbeP_SetInputFocus, NIL, NIL, Self )
RETURN .f.
CASE QEvent_FocusOut // :killInputFocus()
SetAppEvent( xbeP_KillInputFocus, NIL, NIL, Self )
RETURN .f.
CASE QEvent_Paint // :paint()
oObj_N := oEvent:rect()
SetAppEvent( xbeP_Paint, { oObj_N:left(), oObj_N:top(), oObj_N:right(), oObj_N:bottom() }, NIL, Self )
RETURN .f.
CASE QEvent_Move // :move()
oP0 := oEvent:oldPos()
oP1 := oEvent:pos()
::moveOwned( oP1:x() - oP0:x(), oP1:y() - oP0:y() )
// SetAppEvent( xbeP_Move, { oP0:x(), oP0:y() }, { oP1:x(), oP1:y() }, Self )
RETURN .f.
CASE QEvent_Resize // :resize()
oObj_O := oEvent:oldSize()
oObj_N := oEvent:size()
SetAppEvent( xbeP_Resize, { oObj_O:width(), oObj_O:height() }, { oObj_N:width(), oObj_N:height() }, Self )
RETURN .f.
CASE QEvent_DragEnter // :dragEnter()
oObj_O := oEvent:pos()
SetAppEvent( xbeP_DragEnter, { oEvent:mouseButtons(), { oObj_O:x(), oObj_O:y() } }, /* oDragObj */, Self )
RETURN .f.
CASE QEvent_DragLeave // :dragLeave()
SetAppEvent( xbeP_DragLeave, NIL, NIL, Self )
RETURN .f.
CASE QEvent_DragMove // :dragMotion()
oObj_O := oEvent:pos()
SetAppEvent( xbeP_DragMotion, { oEvent:mouseButtons(), { oObj_O:x(), oObj_O:y() } }, NIL, Self )
RETURN .f.
CASE QEvent_Drop // :dragDrop()
oObj_O := oEvent:pos()
SetAppEvent( xbeP_DragDrop, { oEvent:mouseButtons() , { oObj_O:x(), oObj_O:y() } }, /* oDragObj */, Self )
RETURN .f.
CASE QEvent_WhatsThis // :helpRequest()
SetAppEvent( xbeP_HelpRequest, NIL, NIL, Self )
RETURN .f.
CASE QEvent_KeyPress // :keyBoard()
nXbpkey := hbxbp_QKeyEventToAppEvent( oEvent )
SetAppEvent( xbeP_Keyboard, nXbpKey, NIL, self )
RETURN .t.
END SWITCH
RETURN .f.
/*----------------------------------------------------------------------*/
METHOD XbpWindow:handleEvent( nEvent, mp1, mp2 )
SWITCH ( nEvent )
CASE xbeP_Keyboard
::keyboard( mp1 )
EXIT
CASE xbeM_Motion
::motion( mp1, mp2 )
EXIT
CASE xbeM_Enter
::enter( mp1, mp2 )
EXIT
CASE xbeM_Leave
::leave( mp1, mp2 )
EXIT
CASE xbeM_LbDown
::lbDown( mp1, mp2 )
EXIT
CASE xbeM_MbDown
::mbDown( mp1, mp2 )
EXIT
CASE xbeM_RbDown
::rbDown( mp1, mp2 )
EXIT
CASE xbeM_LbUp
::lbUp( mp1, mp2 )
EXIT
CASE xbeM_MbUp
::mbUp( mp1, mp2 )
EXIT
CASE xbeM_RbUp
::rbUp( mp1, mp2 )
EXIT
CASE xbeM_LbClick
::lbClick( mp1, mp2 )
EXIT
CASE xbeM_MbClick
::mbClick( mp1, mp2 )
EXIT
CASE xbeM_RbClick
::rbClick( mp1, mp2 )
EXIT
CASE xbeM_LbDblClick
::lbDblClick( mp1, mp2 )
EXIT
CASE xbeM_MbDblClick
::mbDblClick( mp1, mp2 )
EXIT
CASE xbeM_RbDblClick
::rbDblClick( mp1, mp2 )
EXIT
CASE xbeM_LbMotion
::lbMotion( mp1, mp2 )
EXIT
CASE xbeM_MbMotion
::mbMotion( mp1, mp2 )
EXIT
CASE xbeM_RbMotion
::rbMotion( mp1, mp2 )
EXIT
CASE xbeM_Wheel
::wheel( mp1, mp2 )
EXIT
CASE xbeP_Move
::move( mp1, mp2 )
EXIT
CASE xbeP_Resize
::resize( mp1, mp2 )
EXIT
CASE xbeP_Paint
::paint( mp1, mp2 )
EXIT
CASE xbeP_HelpRequest
::helpRequest( mp1, mp2 )
EXIT
CASE xbeP_Activate
::activate( mp1, mp2 )
EXIT
CASE xbeP_ItemSelected
::itemSelected( mp1, mp2 )
EXIT
CASE xbeP_SetInputFocus
::setInputFocus( mp1, mp2 )
EXIT
CASE xbeP_KillInputFocus
::killInputFocus( mp1, mp2 )
EXIT
CASE xbeP_SetDisplayFocus
::setDisplayFocus( mp1, mp2 )
EXIT
CASE xbeP_KillDisplayFocus
::killDisplayFocus( mp1, mp2 )
EXIT
CASE xbeP_ClipboardChange
::clipBoardChange( mp1, mp2 )
EXIT
CASE xbeP_Measure
::measure( mp1, mp2 )
EXIT
CASE xbeP_Draw
::draw( mp1, mp2 )
EXIT
CASE xbeP_ItemMarked
::itemMarked( mp1, mp2 )
EXIT
CASE xbeP_MeasureItem
::measureItem( mp1, mp2 )
EXIT
CASE xbeP_DrawItem
::drawItem( mp1, mp2 )
EXIT
CASE xbeP_DragEnter
::dragEnter( mp1, mp2 )
EXIT
CASE xbeP_DragMotion
::dragMotion( mp1, mp2 )
EXIT
CASE xbeP_DragLeave
::dragLeave( mp1, mp2 )
EXIT
CASE xbeP_DragDrop
::dragDrop( mp1, mp2 )
EXIT
END SWITCH
RETURN nil
/*----------------------------------------------------------------------*/
METHOD XbpWindow:onError( ... )
LOCAL cMsg := __GetMessage()
IF SubStr( cMsg, 1, 1 ) == "_"
cMsg := SubStr( cMsg, 2 )
ENDIF
RETURN ::oWidget:&cMsg( ... )
/*----------------------------------------------------------------------*/
METHOD XbpWindow:captureMouse( lCapture )
LOCAL lSuccess := .f.
IF HB_ISLOGICAL( lCapture )
IF lCapture
::oWidget:grabMouse()
ELSE
::oWidget:releaseMouse()
ENDIF
lSuccess := .t. /* QT cannot determine if it succeeded */
ENDIF
RETURN lSuccess
/*----------------------------------------------------------------------*/
METHOD XbpWindow:disable()
::oWidget:setDisabled( .t. )
::is_enabled := ::oWidget:isEnabled()
RETURN ! ::is_enabled
/*----------------------------------------------------------------------*/
METHOD XbpWindow:enable()
::oWidget:setEnabled( .t. )
::is_enabled := ::oWidget:isEnabled()
RETURN ::is_enabled
/*----------------------------------------------------------------------*/
METHOD XbpWindow:hide()
IF HB_ISOBJECT( ::oWidget )
::oWidget:hide()
ENDIF
::is_hidden := ::oWidget:isHidden()
RETURN ::is_hidden
/*----------------------------------------------------------------------*/
METHOD XbpWindow:invalidateRect( aRect )
HB_SYMBOL_UNUSED( aRect )
// TODO:
RETURN self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lockPS()
// TODO:
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lockUpdate()
// TODO:
RETURN Self
/*----------------------------------------------------------------------*/
STATIC FUNCTION Xbp_RgbToName( nRgb )
LOCAL cName := QColor( nRGB ):name()
RETURN '#'+substr( cName,6 ) + substr( cName,4,2 ) + substr( cName,2,2 )
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setStyleSheet( cAttr, cCSS )
LOCAL n, s := ""
IF ! empty( cAttr )
::setCSSAttribute( cAttr, cCSS )
ENDIF
FOR n := 1 TO len( ::aCSS )
s += ::aCSS[ n,2 ] + " "
NEXT
::oWidget:setStyleSheet( "" ) /* Must Enforce It */
::oWidget:setStyleSheet( s )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setCSSAttribute( cAttr, cCSS )
LOCAL n
DEFAULT cCSS TO ""
IF ( n := ascan( ::aCSS, {|e_| e_[ 1 ] == cAttr } ) ) == 0
aadd( ::aCSS, { cAttr, cCSS } )
ELSE
::aCSS[ n, 2 ] := cCSS
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:getCSS( nAttr, xValue )
LOCAL s, n, nPoint, cFont, cFace, cCSS
LOCAL aAttr := { "bolditalic", "italic", "bold" }
LOCAL cAttr := "normal"
LOCAL cWeight := "normal"
SWITCH nAttr
CASE XBP_PP_COMPOUNDNAME
cFont := xValue
s := lower( cFont )
n := ascan( aAttr, {|e| at( e, cFont ) > 0 } )
IF n > 0
cAttr := aAttr[ n ]
n := at( cAttr, s )
cFont := substr( cFont, 1, n-1 )
ENDIF
IF ( n := at( ".", cFont ) ) > 0
nPoint := val( substr( cFont,1,n-1 ) )
cFont := substr( cFont,n+1 )
ELSE
nPoint := 0
ENDIF
cFace := alltrim( cFont )
IF cAttr == "bolditalic"
cAttr := "italic"
cWeight := "bold"
ENDIF
IF cAttr == "bold"
cAttr := "normal"
cWeight := "bold"
ENDIF
cCSS := 'font-family: "'+ cFace + '"; font-style: ' + cAttr + '; font-size: ' + ;
hb_ntos( nPoint ) + 'pt; font-weight: ' + cWeight + ';'
RETURN cCSS
CASE XBP_PP_BGCLR
RETURN "background-color: " + Xbp_RgbToName( xValue ) + ";"
CASE XBP_PP_FGCLR
RETURN "color: " + Xbp_RgbToName( xValue ) + ";"
ENDSWITCH
RETURN ""
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setColorBG( nRGB )
LOCAL oldRGB := hbxbp_SetPresParam( ::aPresParams, XBP_PP_BGCLR )
IF HB_ISNUMERIC( nRGB )
hbxbp_SetPresParam( ::aPresParams, XBP_PP_BGCLR, nRGB )
::setCSSAttribute( "XBP_PP_BGCLR", ::getCSS( XBP_PP_BGCLR, nRGB ) )
::setStyleSheet()
ENDIF
RETURN oldRGB
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setColorFG( nRGB )
LOCAL oldRGB := hbxbp_SetPresParam( ::aPresParams, XBP_PP_FGCLR )
IF HB_ISNUMERIC( nRGB )
hbxbp_SetPresParam( ::aPresParams, XBP_PP_FGCLR, nRGB )
::setCSSAttribute( "XBP_PP_FGCLR", ::getCSS( XBP_PP_FGCLR, nRGB ) )
::setStyleSheet()
ENDIF
RETURN oldRGB
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setFont( oFont )
LOCAL cAttr := ""
IF oFont:bold .and. oFont:italic
cAttr := "bolditalic"
ELSEIF oFont:bold
cAttr := "bold"
ELSEIF oFont:italic
cAttr := "italic"
ENDIF
::setFontCompoundName( oFont:compoundName + " " + cAttr )
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setFontCompoundName( xFont )
LOCAL cOldFont := hbxbp_SetPresParam( ::aPresParams, XBP_PP_COMPOUNDNAME )
IF ! HB_ISNUMERIC( xFont )
IF ! empty( xFont )
::setCSSAttribute( "XBP_PP_COMPOUNDNAME", ::getCSS( XBP_PP_COMPOUNDNAME, xFont ) )
::setStyleSheet()
ENDIF
ENDIF
RETURN cOldFont
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setModalState( nState )
DO CASE
CASE nState == XBP_DISP_MODELESS
::oWidget:setWindowModality( Qt_NonModal )
CASE nState == XBP_DISP_APPMODAL
::oWidget:setWindowModality( Qt_ApplicationModal )
CASE nState == XBP_DISP_SYSMODAL
// TODO:
ENDCASE
::oWidget:hide()
::oWidget:show()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setPointer( cDllName, xResID, nType )
HB_SYMBOL_UNUSED( cDllName )
DEFAULT nType TO XBPWINDOW_POINTERTYPE_POINTER
DO CASE
CASE nType == XBPWINDOW_POINTERTYPE_POINTER
// TODO:
CASE nType == XBPWINDOW_POINTERTYPE_SYSPOINTER
DO CASE
CASE xResID == XBPSTATIC_SYSICON_DEFAULT // Default mouse pointer
CASE xResID == XBPSTATIC_SYSICON_ARROW // Normal arrow
::oWidget:setCursor( QCursor( Qt_ArrowCursor ) )
CASE xResID == XBPSTATIC_SYSICON_WAIT // Hour glass or clock
::oWidget:setCursor( QCursor( Qt_WaitCursor ) )
CASE xResID == XBPSTATIC_SYSICON_MOVE // Move the window
::oWidget:setCursor( QCursor( Qt_OpenHandCursor ) )
CASE xResID == XBPSTATIC_SYSICON_SIZE // Change size (all directions)
::oWidget:setCursor( QCursor( Qt_SizeAllCursor ) )
CASE xResID == XBPSTATIC_SYSICON_SIZENWSE // Change size (North west-South east)
::oWidget:setCursor( QCursor( Qt_SizeFDiagCursor ) )
CASE xResID == XBPSTATIC_SYSICON_SIZENESW // Change size (North east-South west)
::oWidget:setCursor( QCursor( Qt_SizeBDiagCursor ) )
CASE xResID == XBPSTATIC_SYSICON_SIZEWE // Change size (West-East)
::oWidget:setCursor( QCursor( Qt_SizeHorCursor ) )
CASE xResID == XBPSTATIC_SYSICON_SIZENS // Change size (North-South)
::oWidget:setCursor( QCursor( Qt_SizeVerCursor ) )
/* Possible Harbour-QT extensions - #deines yet to be finalized */
CASE xResID == Qt_UpArrowCursor
::oWidget:setCursor( QCursor( Qt_UpArrowCursor ) )
CASE xResID == Qt_CrossCursor
::oWidget:setCursor( QCursor( Qt_CrossCursor ) )
CASE xResID == Qt_IBeamCursor
::oWidget:setCursor( QCursor( Qt_IBeamCursor ) )
CASE xResID == Qt_BlankCursor
::oWidget:setCursor( QCursor( Qt_BlankCursor ) )
CASE xResID == Qt_SplitVCursor
::oWidget:setCursor( QCursor( Qt_SplitVCursor ) )
CASE xResID == Qt_SplitHCursor
::oWidget:setCursor( QCursor( Qt_SplitHCursor ) )
CASE xResID == Qt_PointingHandCursor
::oWidget:setCursor( QCursor( Qt_PointingHandCursor ) )
CASE xResID == Qt_ForbiddenCursor
::oWidget:setCursor( QCursor( Qt_ForbiddenCursor ) )
CASE xResID == Qt_ClosedHandCursor
::oWidget:setCursor( QCursor( Qt_ClosedHandCursor ) )
CASE xResID == Qt_WhatsThisCursor
::oWidget:setCursor( QCursor( Qt_WhatsThisCursor ) )
CASE xResID == Qt_BusyCursor
::oWidget:setCursor( QCursor( Qt_BusyCursor ) )
CASE xResID == Qt_BitmapCursor
::oWidget:setCursor( QCursor( Qt_BitmapCursor ) )
ENDCASE
CASE nType == XBPWINDOW_POINTERTYPE_ICON
IF valtype( xResID ) == "C" // Harbour compatibility
IF file( xResID )
#if 0 /* The original image size - but in practice pointer should be proper sized */
::oWidget:setCursor( QCursor( "QPixmap", QPixmap( xResID ) ) )
#else
::oWidget:setCursor( QCursor( "QPixmap", QPixmap( xResID ):scaled( 24,24 ) ) )
#endif
ENDIF
ENDIF
ENDCASE
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setTrackPointer( lTrack )
LOCAL lRet := .f.
IF HB_ISLOGICAL( lTrack )
::lTrack := lTrack
lRet := .T.
ENDIF
RETURN lRet
/*----------------------------------------------------------------------*/
METHOD XbpWindow:currentPos()
RETURN { ::oWidget:x(), ::oWidget:y() }
/*----------------------------------------------------------------------*/
METHOD XbpWindow:currentSize()
IF ::className() == "HBPAPPDESKTOP"
RETURN { ::width(), ::height() }
ELSE
RETURN { ::oWidget:width(), ::oWidget:height() }
ENDIF
RETURN {}
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setPos( aPos, lPaint )
DEFAULT aPos TO ::aPos
IF HB_ISARRAY( aPos )
DEFAULT lPaint TO .T.
::oWidget:move( aPos[ 1 ], aPos[ 2 ] )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setPosAndSize( aPos, aSize, lPaint )
IF empty( ::qtObject )
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
IF HB_ISARRAY( aPos ) .and. HB_ISARRAY( aSize )
DEFAULT lPaint TO .T.
::oWidget:move( aPos[ 1 ], aPos[ 2 ] )
::oWidget:resize( aSize[ 1 ], aSize[ 2 ] )
ENDIF
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setSize( aSize, lPaint )
DEFAULT aSize TO ::aSize
IF HB_ISARRAY( aSize )
DEFAULT lPaint TO .T.
::oWidget:resize( aSize[ 1 ], aSize[ 2 ] )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:isDerivedFrom( cClassORoObject )
LOCAL lTrue := .f.
LOCAL cCls := __ObjGetClsName( Self )
/* Compares without Xbp or Wvg prefixes */
IF HB_ISSTRING( cClassORoObject )
RETURN __clsParent( Self:classH, cClassORoObject )
ELSEIF HB_ISOBJECT( cClassORoObject )
IF upper( substr( cClassORoObject:className,4 ) ) == upper( substr( cCls,4 ) )
lTrue := .t.
ENDIF
ENDIF
IF !( lTrue )
IF HB_ISOBJECT( ::oParent )
lTrue := ::oParent:isDerivedFrom( cClassORoObject )
ENDIF
ENDIF
RETURN lTrue
/*----------------------------------------------------------------------*/
METHOD XbpWindow:show()
::oWidget:show()
::oWidget:activateWindow()
::is_hidden := .f.
::lHasInputFocus := .t.
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:toBack()
::oWidget:lower()
RETURN self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:toFront()
::oWidget:raise()
RETURN self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:unlockPS()
// TODO:
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:winDevice()
// TODO:
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setPresParam( aPPNew )
LOCAL i
IF HB_ISARRAY( aPPNew )
FOR i := 1 TO len( aPPNew )
hbxbp_SetPresParam( ::aPresParams, aPPNew[ i,1 ], aPPNew[ i,2 ] )
NEXT
ENDIF
RETURN ::aPresParams
/*----------------------------------------------------------------------*/
METHOD XbpWindow:getHWND()
LOCAL oError := ErrorNew()
oError:severity := ES_ERROR
oError:genCode := EG_UNSUPPORTED
oError:subSystem := "HBXBP"
oError:subCode := 7000
oError:canRetry := .F.
oError:canDefault := .F.
oError:Args := hb_AParams()
oError:operation := ProcName()
Eval( ErrorBlock(), oError )
RETURN NIL
/*----------------------------------------------------------------------*/
METHOD XbpWindow:getModalState()
LOCAL nState
nState := ::oWidget:windowModality()
IF hb_bitAnd( nState, Qt_NonModal ) == Qt_NonModal
RETURN XBP_DISP_MODELESS
ELSEIF hb_bitAnd( nState, Qt_ApplicationModal ) == Qt_ApplicationModal
RETURN XBP_DISP_APPMODAL
ELSE
// TODO: XBP_DISP_SYSMODAL
ENDIF
RETURN -1
/*----------------------------------------------------------------------*/
METHOD XbpWindow:hasInputFocus()
RETURN ::oWidget:hasFocus()
/*----------------------------------------------------------------------*/
METHOD XbpWindow:title( cTitle )
LOCAL xTitle := ::cTitle
IF HB_ISSTRING( cTitle )
::cTitle := cTitle
IF HB_ISOBJECT( ::oWidget )
::oWidget:setWindowTitle( ::cTitle )
ENDIF
ENDIF
RETURN xTitle
/*----------------------------------------------------------------------*/
* Callback Methods
/*----------------------------------------------------------------------*/
METHOD XbpWindow:enter( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_enter := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_enter )
eval( ::sl_enter, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:leave( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_leave := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_leave )
eval( ::sl_leave, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lbClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_lbClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_lbClick )
eval( ::sl_lbClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lbDblClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_lbDblClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_lbDblClick )
eval( ::sl_lbDblClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lbDown( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_lbDown := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_lbDown )
eval( ::sl_lbDown, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:lbUp( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_lbUp := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_lbUp )
eval( ::sl_lbUp, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:mbClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_mbClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_mbClick )
eval( ::sl_mbClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:mbDblClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_mbDblClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_mbDblClick )
eval( ::sl_mbDblClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:mbDown( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_mbDown := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_mbDown )
eval( ::sl_mbDown, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:mbUp( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_mbUp := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_mbUp )
eval( ::sl_mbUp, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:motion( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_motion := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_motion )
eval( ::sl_motion, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:rbClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_rbClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_rbClick )
eval( ::sl_rbClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:rbDblClick( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_rbDblClick := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_rbDblClick )
eval( ::sl_rbDblClick, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:rbDown( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_rbDown := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_rbDown )
eval( ::sl_rbDown, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:rbUp( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_rbUp := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_rbUp )
eval( ::sl_rbUp, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:wheel( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_wheel := a_[ 1 ]
ELSEIF len( a_ ) >= 2 .AND. HB_ISBLOCK( ::sl_wheel )
eval( ::sl_wheel, a_[ 1 ], a_[ 2 ], Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
* Other Messages
/*----------------------------------------------------------------------*/
METHOD XbpWindow:close( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_close := a_[ 1 ]
ELSEIF len( a_ ) == 0 .AND. HB_ISBLOCK( ::sl_close )
eval( ::sl_close, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:helpRequest( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_helpRequest := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_helpRequest )
eval( ::sl_helpRequest, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:keyboard( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_keyboard := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_keyboard )
eval( ::sl_keyboard, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:killDisplayFocus( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_killDisplayFocus := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_killDisplayFocus )
eval( ::sl_killDisplayFocus, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:killInputFocus( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_killInputFocus := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_killInputFocus )
eval( ::sl_killInputFocus, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:move( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_move := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_move )
eval( ::sl_move, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:paint( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_paint := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_paint )
eval( ::sl_paint, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:quit( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_quit := a_[ 1 ]
ELSEIF len( a_ ) >= 2 .AND. HB_ISBLOCK( ::sl_quit )
eval( ::sl_quit, a_[ 1 ], a_[ 2 ], Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:resize( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_resize := a_[ 1 ]
ELSEIF len( a_ ) >= 2 .AND. HB_ISBLOCK( ::sl_resize )
eval( ::sl_resize, a_[ 1 ], a_[ 2 ], Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setDisplayFocus( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_setDisplayFocus := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_setDisplayFocus )
eval( ::sl_setDisplayFocus, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setInputFocus( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_setInputFocus := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_setInputFocus )
eval( ::sl_setInputFocus, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:dragEnter( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_dragEnter := a_[ 1 ]
ELSEIF len( a_ ) >= 2 .AND. HB_ISBLOCK( ::sl_dragEnter )
eval( ::sl_dragEnter, a_[ 1 ], a_[ 2 ], Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:dragMotion( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_dragMotion := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::sl_dragMotion )
eval( ::sl_dragMotion, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:dragLeave( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_dragLeave := a_[ 1 ]
ELSEIF len( a_ ) >= 0 .AND. HB_ISBLOCK( ::sl_dragLeave )
eval( ::sl_dragLeave, NIL, NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:dragDrop( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::sl_dragDrop := a_[ 1 ]
ELSEIF len( a_ ) >= 2 .AND. HB_ISBLOCK( ::sl_dragDrop )
eval( ::sl_dragDrop, a_[ 1 ], a_[ 2 ], Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:hbContextMenu( ... )
LOCAL a_:= hb_aParams()
IF len( a_ ) == 1 .AND. HB_ISBLOCK( a_[ 1 ] )
::hb_contextMenu := a_[ 1 ]
ELSEIF len( a_ ) >= 1 .AND. HB_ISBLOCK( ::hb_contextMenu )
eval( ::hb_contextMenu, a_[ 1 ], NIL, Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:Initialize( oParent, oOwner, aPos, aSize, aPresParams, lVisible )
DEFAULT oParent TO ::oParent
DEFAULT oOwner TO ::oOwner
DEFAULT aPos TO ::aPos
DEFAULT aSize TO ::aSize
DEFAULT aPresParams TO ::aPresParams
DEFAULT lVisible TO ::visible
::oParent := oParent
::oOwner := oOwner
::aPos := aPos
::aSize := aSize
::aPresParams := aPresParams
::visible := lVisible
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:setFocus()
::oWidget:setFocus()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:sendMessage()// nMessage, nlParam, nwParam )
RETURN self
/*----------------------------------------------------------------------*/
METHOD XbpWindow:hbLayout( nTypeLayout )
LOCAL lApply := .f.
LOCAL oldLayout, oXbp
oldLayout := ::nLayout
IF HB_ISNUMERIC( nTypeLayout ) .AND. nTypeLayout > 0 .AND. nTypeLayout <= HBPLAYOUT_TYPE_MAX
::nLayout := nTypeLayout
lApply := .t.
ELSEIF !empty( ::nLayout )
lApply := .t.
ENDIF
IF lApply
IF !empty( ::qLayout )
::qLayout := NIL
ENDIF
DO CASE
CASE ::nLayout == HBPLAYOUT_TYPE_HORZBOX
::qLayout := QHBoxLayout()
CASE ::nLayout == HBPLAYOUT_TYPE_VERTBOX
::qLayout := QVBoxLayout()
CASE ::nLayout == HBPLAYOUT_TYPE_GRID
::qLayout := QGridLayout()
CASE ::nLayout == HBPLAYOUT_TYPE_FORM
::qLayout := QFormLayout()
ENDCASE
::oWidget:setLayout( ::qLayout )
FOR EACH oXbp IN ::aChildren
::qLayout:addWidget( oXbp:oWidget )
NEXT
ENDIF
RETURN oldLayout
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
CLASS XbpObject
METHOD INIT
METHOD HandleEvent() INLINE ( HBXBP_EVENT_UNHANDLED )
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD XbpObject:INIT()
RETURN Self
/*----------------------------------------------------------------------*/
#if 0 /* A Template */
METHOD xbpWindow:setStyle()
LOCAL s := "", txt_:={}
aadd( txt_, ' ' )
aadd( txt_, ' ' )
aeval( txt_, {|e| s += e + chr( 13 )+chr( 10 ) } )
::oWidget:setStyleSheet( s )
RETURN self
#endif
/*----------------------------------------------------------------------*/
STATIC FUNCTION hbxbp_PresParam( aPP )
aadd( aPP, { XBP_PP_FGCLR , NIL } )
aadd( aPP, { XBP_PP_BGCLR , NIL } )
aadd( aPP, { XBP_PP_HILITE_FGCLR , NIL } )
aadd( aPP, { XBP_PP_HILITE_BGCLR , NIL } )
aadd( aPP, { XBP_PP_DISABLED_FGCLR , NIL } )
aadd( aPP, { XBP_PP_DISABLED_BGCLR , NIL } )
aadd( aPP, { XBP_PP_BORDER_CLR , NIL } )
aadd( aPP, { XBP_PP_COMPOUNDNAME , NIL } )
aadd( aPP, { XBP_PP_FONT , NIL } )
aadd( aPP, { XBP_PP_ACTIVE_CLR , NIL } )
aadd( aPP, { XBP_PP_INACTIVE_CLR , NIL } )
aadd( aPP, { XBP_PP_ACTIVETEXT_FGCLR , NIL } )
aadd( aPP, { XBP_PP_ACTIVETEXT_BGCLR , NIL } )
aadd( aPP, { XBP_PP_INACTIVETEXT_FGCLR , NIL } )
aadd( aPP, { XBP_PP_INACTIVETEXT_BGCLR , NIL } )
aadd( aPP, { XBP_PP_CAPTION , NIL } )
aadd( aPP, { XBP_PP_ALIGNMENT , NIL } )
aadd( aPP, { XBP_PP_ORIGIN , NIL } )
RETURN NIL
/*----------------------------------------------------------------------*/
FUNCTION hbxbp_SetPresParamIfNil( aPP, nParam, xValue )
LOCAL n
IF xValue != NIL
IF ( n := ascan( aPP, {|e_| e_[ 1 ] == nParam } ) ) > 0
IF aPP[ n,2 ] == NIL
aPP[ n,2 ] := xValue
ENDIF
ENDIF
ELSE
aadd( aPP, { nParam, xValue } )
ENDIF
RETURN nil
/*----------------------------------------------------------------------*/
FUNCTION hbxbp_SetPresParam( aPP, nParam, xValue )
LOCAL oldValue, n
IF ( n := ascan( aPP, {|e_| e_[ 1 ] == nParam } ) ) > 0
oldValue := aPP[ n,2 ]
IF xValue != NIL
aPP[ n,2 ] := xValue
ENDIF
ELSE
aadd( aPP, { nParam, xValue } )
ENDIF
RETURN oldValue
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
CLASS HbpAppDesktop INHERIT XbpWindow
METHOD init()
METHOD create()
METHOD width( nScreen )
METHOD virtualWidth()
METHOD height( nScreen )
METHOD virtualHeight()
ENDCLASS
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:init()
::xbpWindow:init()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:create()
::oWidget := QDesktopWidget()
RETURN Self
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:width( nScreen )
DEFAULT nScreen TO -1
RETURN iif( nScreen == -1, ::oWidget:screenGeometry( ::oWidget:primaryScreen() ):right(), ;
::oWidget:screenGeometry( nScreen ):right() )
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:height( nScreen )
DEFAULT nScreen TO -1
RETURN iif( nScreen == -1, ::oWidget:screenGeometry( ::oWidget:primaryScreen() ):bottom(), ;
::oWidget:screenGeometry( nScreen ):bottom() )
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:virtualWidth()
RETURN ::oWidget:width()
/*----------------------------------------------------------------------*/
METHOD HbpAppDesktop:virtualHeight()
RETURN ::oWidget:height()
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/