2011-04-11 13:13 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com)

* contrib/hbxbp/xbpparthandler.prg
  * contrib/hbxbp/xbpwindow.prg
    + Implemented: Xbase++ compatible :moveWithOwner feature.
      Any dialog with :moveWithOwner set to TRUE will move together
      with its owner if user moves the window which owns them.
This commit is contained in:
Pritpal Bedi
2011-04-11 21:18:17 +00:00
parent c2ec29da60
commit 94ce0bf09b
2 changed files with 36 additions and 4 deletions

View File

@@ -87,16 +87,19 @@ CLASS XbpPartHandler
METHOD addChild( oXbp )
METHOD addAsChild()
METHOD addAsOwned( oXbp )
METHOD childFromName( nNameId )
METHOD childList()
METHOD delChild( oXbp )
METHOD setName( nNameId )
METHOD setOwner( oXbp )
METHOD setOwner( oOwner )
METHOD setParent( oParent )
METHOD moveOwned( nOffSetX, nOffSetY )
METHOD notifier()
DATA aChildren INIT {}
DATA aOwned INIT {}
DATA nNameId
DATA oParent
DATA oOwner
@@ -124,6 +127,10 @@ METHOD create( oParent, oOwner ) CLASS XbpPartHandler
::oParent := oParent
::oOwner := oOwner
IF hb_isObject( ::oOwner )
::oOwner:addAsOwned( Self )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
@@ -196,6 +203,16 @@ METHOD addAsChild() CLASS XbpPartHandler
/*----------------------------------------------------------------------*/
METHOD addAsOwned( oXbp ) CLASS XbpPartHandler
IF ! empty( oXbp )
aadd( ::aOwned, oXbp )
ENDIF
RETURN Self
/*----------------------------------------------------------------------*/
METHOD childFromName( nNameId ) CLASS XbpPartHandler
LOCAL i
@@ -240,11 +257,11 @@ METHOD setName( nNameId ) CLASS XbpPartHandler
/*----------------------------------------------------------------------*/
METHOD setOwner( oXbp ) CLASS XbpPartHandler
METHOD setOwner( oOwner ) CLASS XbpPartHandler
LOCAL oOldXbp := ::oOwner
IF valtype( oXbp ) == "O"
::oOwner := oXbp
IF valtype( oOwner ) == "O"
::oOwner := oOwner
ENDIF
RETURN oOldXbp
@@ -281,3 +298,17 @@ METHOD notifier() CLASS XbpPartHandler
RETURN self
/*----------------------------------------------------------------------*/
METHOD moveOwned( nOffSetX, nOffSetY ) CLASS XbpPartHandler
LOCAL oXbp, oPos
FOR EACH oXbp IN ::aOwned
IF oXbp:moveWithOwner
oPos := oXbp:oWidget:pos()
oXbp:oWidget:move( oPos:x() + nOffSetX, oPos:y() + nOffSetY )
ENDIF
NEXT
RETURN Self
/*----------------------------------------------------------------------*/

View File

@@ -611,6 +611,7 @@ METHOD XbpWindow:grabEvent( nEvent, oEvent )
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 )
lRet := .f.
EXIT