Biel EA6DD wrote:A la espera de la opinión de Daniel, quizás seria interesante disponer de un array de codeblocks para poder asignar acciones distintas según la pestaña que se cierre. Como comente antes, actualmente suplo esta ausencia colocando el codeblock en el valid del dialogo asociado a la pestaña.
En el additem, creo que no es necesario, con un solo codeblock cumple toda la funcionalidad.
Que os parece, asi?
Las Datas, serian:
DATA bPrevItemAdded // Proceso al añadir una pestaña
DATA bPostItemAdded // Idem
DATA aPrevItemDeleted // Procesos individuales para cada pestaña
DATA aPostItemDeleted // Idem
y el codigo, seria
Method New
.../...
::lTransparent = lTransparent
::bPrevItemAdded := { || .T. } // New
::bPostItemAdded := { || .T. } // New
.../...
::aDialogs = Array( nLen )
::aBitmaps = {}
::aBrightBmp = {}
::LoadBitmaps( aBitmaps )
::aPrevItemDeleted := Array( nLen ) // New
AFill( ::aPrevItemDeleted, { || .T. } )
::aPostItemDeleted := Array( nLen ) // New
AFill( ::aPostItemDeleted, { || .T. } )
.../...
Metodo DelItem
METHOD DelItem( nOption ) CLASS TFolderEx
local nLen := Len( ::aDialogs )
local oDlg
DEFAULT nOption := ::nOption
if Len( ::aPrompts ) > 0
if ValType( ::aPrevItemDeleted[ nOption ] ) == "B" // New
Eval( ::aPrevItemDeleted[ nOption ], Self, nOption, ::nOption )
endif
ADel( ::aPrompts, nOption )
ASize( ::aPrompts, Len( ::aPrompts ) - 1 )
ADel( ::aHelps, nOption )
ASize( ::aHelps, Len( ::aHelps ) - 1 )
ADel( ::aEnable, nOption )
ASize( ::aEnable, Len( ::aEnable ) - 1 )
ADel( ::aVisible, nOption )
ASize( ::aVisible, Len( ::aVisible ) - 1 )
ADel( ::aBitmaps, nOption )
ASize( ::aBitmaps, Len( ::aBitmaps ) - 1 )
ADel( ::aBrightBmp, nOption )
ASize( ::aBrightBmp, Len( ::aBrightBmp ) - 1 )
ADel( ::aAlphaLevel, nOption) //Biel 1404
ASize( ::aAlphaLevel, Len( ::aAlphaLevel ) - 1 )
ADel( ::aHasAlpha, nOption )
ASize( ::aHasAlpha, Len( ::aHasAlpha ) - 1 )
ADel( ::aAlign, nOption )
ASize( ::aAlign, Len( ::aAlign ) - 1 )
ADel( ::aPrevItemDeleted , nOption ) // New
ASize( ::aPrevItemDeleted , Len( ::aPrevItemDeleted ) - 1 )
//::aSizes = ADel( ::aSizes, nOption )
//::aSizes = ASize( ::aSizes, Len( ::aSizes ) - 1 )
//::aPos = ADel( ::aPos, nOption )
//::aPos = ASize( ::aPos, Len( ::aPos ) - 1 )
if nOption < nLen
::CalPos()
//::aDialogs[ nOption ]:bValid = { || .t. }
::aDialogs[ nOption ]:End()
::aDialogs = ADel( ::aDialogs, nOption )
::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
else
::nOption = Min( ::nOption, Len( ::aPrompts ) ) //Biel 1404
::CalPos()
//::aDialogs[ nOption ]:bValid = { || .t. }
::aDialogs[ nOption ]:End()
::aDialogs = ADel( ::aDialogs, nOption )
::aDialogs = ASize( ::aDialogs, Len( ::aDialogs ) - 1 )
endif
if ValType( ::aPostItemDeleted[ nOption ] ) == "B" // New
Eval( ::aPostItemDeleted[ nOption ], Self, nOption, ::nOption )
endif
ADel( ::aPostItemDeleted[ nOption ] , nOption ) // New
ASize( ::aPostItemDeleted , Len( ::aPostItemDeleted ) - 1 )
::Default()
endif
Return nil
Method AddItem
METHOD AddItem( cItem, cResName, bRedefineControls, cnHelpId ) CLASS TFolderEx
local oDlg
local nLen
local n
local oThis := Self
if ValType( ::bPrevItemAdded ) == "B" // New
Eval( ::bPrevItemAdded, Self, ::nOption )
endif
if Empty( cResName )
DEFINE DIALOG oDlg OF oThis STYLE nOR( WS_CHILD, If( ! ::oWnd:IsKindOf( "TDIALOG"), WS_CLIPCHILDREN, 0 ) ) ;
BRUSH ::oBrush
else
DEFINE DIALOG oDlg OF oThis STYLE nOR( WS_CHILD, If( ! ::oWnd:IsKindOf( "TDIALOG"), WS_CLIPCHILDREN, 0 ) ) ;
NAME cResName brush ::oBrush
endif
AAdd( ::aDialogs, oDlg )
AAdd( ::aPrompts, cItem )
AAdd( ::aHelps, cnHelpId )
AAdd( ::aEnable, .t. )
AAdd( ::aVisible, .t. )
AAdd( ::aBitmaps, { 0, 0, 0 } )
AAdd( ::aBrightBmp, 0 )
AAdd( ::aAlphaLevel,255) //Biel 1404
AAdd( ::aHasAlpha, .F. )
AAdd( ::aAlign, AL_LEFT )
AAdd( ::aPrevItemDeleted , { || .T. } )
AAdd( ::aPostItemDeleted , { || .T. } )
if ValType( bRedefineControls ) == "B"
Eval( bRedefineControls, oDlg )
endif
if ValType( ::bPostItemAdded ) == "B" // New
Eval( ::bPostItemAdded, Self, ::nOption )
endif
::Default()
oDlg:Hide()
::SetOption( Len( ::aDialogs ) )
::Refresh()
RETURN NIL
Biel, Daniel, qué os parece?