#include 'protheus.ch'
//-------------------------------------------------------------------
/*/{Protheus.doc} ExFWBreadCrumb
Função de exemplo para o componente FWBreadCrumb
@see FWBreadCrumb
@author arthur.fucher
@since 29/12/2015
@version 1.0
/*/
//-------------------------------------------------------------------
User Function ExFWBreadCrumb()
Local oDlg
Local oBreadCrumb
Local aLevel := {}
Local oHeader
Local oMainPanel
Local oSay
Local oButton
DEFINE MSDIALOG oDlg FROM 000,000 TO 600,800 PIXEL
//-------------------
//Criação do paineis
//-------------------
oHeader := tPanel():New(01,01,,oDlg,,,,,,100,20)
oHeader:Align := CONTROL_ALIGN_TOP
oMainPanel := tPanel():New(01,01,,oDlg,,,,,,100,20)
oMainPanel:Align := CONTROL_ALIGN_ALLCLIENT
//---------------------
//Criação do BreadCrumb
//---------------------
oBreadCrumb := FWBreadCrumb():New(oHeader)
oBreadcrumb:SetAction( {|x| SetLevel( x , aLevel , oSay , oButton) } )
oBreadcrumb:Activate()
//Criação de conteúdo
oSay:= TSay():New(01,01,{||'Texto para exibição I'},oMainPanel,,,,,,.T.,,,200,20)
oButton := TButton():New( 20, 20, "Next",oMainPanel,{| x | nextLevel( oSay , oBreadCrumb , aLevel, oButton)}, 40,10,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} SetLevel
Função auxiliar para tratamento quando o clique do BreadCrumb é disparado
@param cID ID do item do BreadCrumb
@param aLevel Array com itens do path do BreadCrumb
@param oSay Objeto TSay da tela
@param oButton Objeto TButton da tela
@author arthur.fucher
@since 29/12/2015
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function SetLevel( cID , aLevel, oSay, oButton)
Local nPos := AScan( aLevel , { |aItem| aItem[1] == cID } )
//--------------------------------------------------
//Redimensiona o array de acordo com o item clicado
//--------------------------------------------------
If nPos > 0
aLevel := ASize( aLevel , nPos )
ElseIf cID == "HOME" //DEFAULT do BREADCRUMB
aLevel := ASize( aLevel , 0 )
EndIf
//Altera o texto do TSay para o contexto
oSay:SetText( cID )
//Apresenta o botão novamente
oButton:Show()
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} nextLevel
Função auxiliar para ir para o próximo nível do BreadCrumb
@param oSay Objeto TSay da tela
@param oBreadCrumb Objeto FWBreadCrumb da tela
@param aLevel Array com itens do path do BreadCrumb
@param oButton Objeto TButton da tela
@author arthur.fucher
@since 29/12/2015
@version 1.0
/*/
//-------------------------------------------------------------------
Static Function nextLevel( oSay , oBreadCrumb , aLevel , oButton )
Local cLevel := cValToChar(Len(aLevel))
//------------------------------------
//Definido um nível para ser o máximo
//------------------------------------
If cLevel == "7"
oButton:Hide()
Else
//Adiciona o novo nível no Array
AAdd( aLevel , { cLevel , "Titulo" + cLevel } )
//Altera o path do BreadCrumb
oBreadcrumb:SetPath( aLevel )
//Altera o texto do TSay para o contexto
oSay:SetText(cLevel)
EndIf
Return