diff --git a/harbour/source/tools/stringp.prg b/harbour/source/tools/stringp.prg index fb7e695b09..c954c2360c 100644 --- a/harbour/source/tools/stringp.prg +++ b/harbour/source/tools/stringp.prg @@ -118,156 +118,4 @@ function Debug( xItem ) return xItem -/* $Doc$ - * $FuncName$ TForm() - * $Description$ Returns TForm object - * $End$ */ -function TForm() - - static oClass - - if oClass == nil - oClass = TClass():New( "TFORM" ) // starts a new class definition - - oClass:AddData( "cName" ) // define this class objects datas - oClass:AddData( "nTop" ) - oClass:AddData( "nLeft" ) - oClass:AddData( "nBottom" ) - oClass:AddData( "nRight" ) - - oClass:AddVirtual( "aExcept" ) // Export exceptions - - oClass:AddMethod( "New", @New() ) // define this class objects methods - oClass:AddMethod( "Show", @Show() ) - oClass:AddMethod( "Transfer", @Transfer() ) - - oClass:Create() // builds this class - endif - -return oClass:Instance() // builds an object of this class - - -/* $Doc$ - * $FuncName$ TForm:New() - * $Description$ Constructor - * $End$ */ -static function New() - - local Self := QSelf() - - ::nTop = 10 - ::nLeft = 10 - ::nBottom = 20 - ::nRight = 40 - -return Self - - -/* $Doc$ - * $FuncName$ TForm:Show() - * $Description$ Show a form - * $End$ */ -static function Show() - - local Self := QSelf() - - QOut( "lets show a form from here :-)" ) - -return nil - - -// -// TForm:Transfer( [] ) -// -// Generic object import and export function -// -// is present. -// -// Maximum number of arguments passed is limited to 10 ! -// -// An argument can be one of the following : -// -// { , } Set DATA to -// { { , }, { , }, ... } -// Set a whole list symbols to value -// Normal way of set objects from external -// sources, like memo files. -// Set self according to the DATA -// contained in -// Can be used to transfer info from -// one class to another -// -// If is not present, the current object will be returned as an array -// for description see aoSet / aoGet. -// -// The method aExcept() is called to determine the DATA which should not -// be returned. Eg. hWnd ( do not copy this DATA from external source ) -// -// Say we want to copy oSource into oTarget we say : -// -// oTarget:Transfer( oSource ) -// -// If we do not want 'cName' duplicated we have to use aoGet : -// -// aNewExcept := aClone( oSource:aExcept() ) -// aAdd( aNewExcept, "cName" ) /* Add cName to exception list */ -// oTarget:Transfer( aoGet( oSource, aNewExcept ) ) -// /* Get DATA from oSource with new exceptions */ -// /* Transfer DATA to oTarget */ -// -// To set two DATA of oTarget : -// -// oTarget:Transfer( { "nLeft", 10 }, { "nRight", 5 } ) -// -// or : -// -// aCollect := {} -// aAdd( aCollect, { "nLeft" , 10 } ) -// aAdd( aCollect, { "nRight", 5 } ) -// oTarget:Transfer( aCollect ) -// -// Copy oSource to a memo field : -// -// DbObject->Memo := oSource:Transfer() -// -// (Re)create oTarget from the memo field : -// -// oTarget := TTarget():New() -// oTarget:Transfer( DbObject->Memo ) -// -static function Transfer( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 /* etc */ ) - - local self := QSelf() - local aParam := __aParam() - local nLen := PCount() - local xRet - local xData - local n - - if nLen == 0 - xRet := aOGet( self, ::aExcept() ) - else - for n := 1 to nLen - - xData := aParam[ n ] - if ValType( xData ) == "A" - - if ValType( xData[1] ) == "A" // 2D array passed - xRet := aOSet( self, xData ) - else // 1D array passed - xRet := aOSet( self, {xData} ) - endif - - elseif ValType( xData ) == "O" // Object passed - xRet := ::Transfer( xData:Transfer() ) - elseif ValType( xData ) != "U" - QOut( "TRANSFER: Incorrect argument(", n, ") ", xData ) - endif - - next n - endif - -return xRet - - diff --git a/harbour/tests/working/debugtst.prg b/harbour/tests/working/debugtst.prg index a6413956f2..738ba8eb1d 100644 --- a/harbour/tests/working/debugtst.prg +++ b/harbour/tests/working/debugtst.prg @@ -95,4 +95,156 @@ function FuncSecond( nParam, cParam, uParam ) return nil +/* $Doc$ + * $FuncName$ TForm() + * $Description$ Returns TForm object + * $End$ */ +function TForm() + + static oClass + + if oClass == nil + oClass = TClass():New( "TFORM" ) // starts a new class definition + + oClass:AddData( "cName" ) // define this class objects datas + oClass:AddData( "nTop" ) + oClass:AddData( "nLeft" ) + oClass:AddData( "nBottom" ) + oClass:AddData( "nRight" ) + + oClass:AddVirtual( "aExcept" ) // Export exceptions + + oClass:AddMethod( "New", @New() ) // define this class objects methods + oClass:AddMethod( "Show", @Show() ) + oClass:AddMethod( "Transfer", @Transfer() ) + + oClass:Create() // builds this class + endif + +return oClass:Instance() // builds an object of this class + + +/* $Doc$ + * $FuncName$ TForm:New() + * $Description$ Constructor + * $End$ */ +static function New() + + local Self := QSelf() + + ::nTop = 10 + ::nLeft = 10 + ::nBottom = 20 + ::nRight = 40 + +return Self + + +/* $Doc$ + * $FuncName$ TForm:Show() + * $Description$ Show a form + * $End$ */ +static function Show() + + local Self := QSelf() + + QOut( "lets show a form from here :-)" ) + +return nil + + +// +// TForm:Transfer( [] ) +// +// Generic object import and export function +// +// is present. +// +// Maximum number of arguments passed is limited to 10 ! +// +// An argument can be one of the following : +// +// { , } Set DATA to +// { { , }, { , }, ... } +// Set a whole list symbols to value +// Normal way of set objects from external +// sources, like memo files. +// Set self according to the DATA +// contained in +// Can be used to transfer info from +// one class to another +// +// If is not present, the current object will be returned as an array +// for description see aoSet / aoGet. +// +// The method aExcept() is called to determine the DATA which should not +// be returned. Eg. hWnd ( do not copy this DATA from external source ) +// +// Say we want to copy oSource into oTarget we say : +// +// oTarget:Transfer( oSource ) +// +// If we do not want 'cName' duplicated we have to use aoGet : +// +// aNewExcept := aClone( oSource:aExcept() ) +// aAdd( aNewExcept, "cName" ) /* Add cName to exception list */ +// oTarget:Transfer( aoGet( oSource, aNewExcept ) ) +// /* Get DATA from oSource with new exceptions */ +// /* Transfer DATA to oTarget */ +// +// To set two DATA of oTarget : +// +// oTarget:Transfer( { "nLeft", 10 }, { "nRight", 5 } ) +// +// or : +// +// aCollect := {} +// aAdd( aCollect, { "nLeft" , 10 } ) +// aAdd( aCollect, { "nRight", 5 } ) +// oTarget:Transfer( aCollect ) +// +// Copy oSource to a memo field : +// +// DbObject->Memo := oSource:Transfer() +// +// (Re)create oTarget from the memo field : +// +// oTarget := TTarget():New() +// oTarget:Transfer( DbObject->Memo ) +// +static function Transfer( x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 /* etc */ ) + + local self := QSelf() + local aParam := __aParam() + local nLen := PCount() + local xRet + local xData + local n + + if nLen == 0 + xRet := aOGet( self, ::aExcept() ) + else + for n := 1 to nLen + + xData := aParam[ n ] + if ValType( xData ) == "A" + + if ValType( xData[1] ) == "A" // 2D array passed + xRet := aOSet( self, xData ) + else // 1D array passed + xRet := aOSet( self, {xData} ) + endif + + elseif ValType( xData ) == "O" // Object passed + xRet := ::Transfer( xData:Transfer() ) + elseif ValType( xData ) != "U" + QOut( "TRANSFER: Incorrect argument(", n, ") ", xData ) + endif + + next n + endif + +return xRet + +