#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 ExFWTemporaryTableExFWBreadCrumb()
Local oDlg
Local oBreadCrumb
Local aFieldsaLevel := {}
Local oTempTableoHeader
Local oMainPanel
Local nIoSay
Local cAlias := "MEUALIAS"
Local cQuery
oButton
DEFINE MSDIALOG oDlg FROM 000,000 TO 600,800 PIXEL
//-------------------
//Criação do objetopaineis
//-------------------
oTempTable oHeader := FWTemporaryTabletPanel():New( cAlias )
//-----01,01,,oDlg,,,,,,100,20)
oHeader:Align := CONTROL_ALIGN_TOP
oMainPanel := tPanel():New(01,01,,oDlg,,,,,,100,20)
oMainPanel:Align := CONTROL_ALIGN_ALLCLIENT
//---------------------
//MontaCriação os campos da tabela
do BreadCrumb
//--------------------------
aadd(aFields,{"DESCR","C",30,0})
aadd(aFields,{"CONTR","N",3,1})
aadd(aFields,{"ALIAS","C",3,0})
oTemptable:SetFields( aFields )
oTempTable:AddIndex("indice1", {"DESCR"} )
oTempTable:AddIndex("indice2", {"CONTR", "ALIAS"} )
//
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
//-------------------------------------------------
//Criação da tabela
//------------------
oTempTable:Create()
conout("Executando a cópia dos registros da tabela: " + RetSqlName("CT0") )
//-------
/*/{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
/*/
//-------------------------------------------------------------------
//CasoStatic oFunction INSERTSetLevel( INTOcID SELECT, preencha todos os campos, este será um método facilitador
//Caso contrário deverá ser chamado o InsertIntoSelect():
// oTempTable:InsertIntoSelect( {"DESCR", "CONTR" } , RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR" } )
//aLevel, oSay, oButton)
Local nPos := AScan( aLevel , { |aItem| aItem[1] == cID } )
//--------------------------------------------------
//Redimensiona o array de acordo com o item clicado
//--------------------------------------------------
oTempTable:InsertSelect( RetSqlName("CT0") , { "CT0_DESC", "CT0_CONTR", "CT0_ALIAS" } )
//
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
//-------------------------------------------------------------------
//Executa query para leitura da tabela
//*/{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
/*/
//-------------------------------------------------------------------
cQuery := "select * from "+ oTempTable:GetRealName()
MPSysOpenQuery( cQuery, 'QRYTMP' )
DbSelectArea('QRYTMP')
while !eof()
for nI := 1 to fcount()
varinfo(fieldname(nI),fieldget(ni))
next
dbskip()
Enddo
//Static Function nextLevel( oSay , oBreadCrumb , aLevel , oButton )
Local cLevel := cValToChar(Len(aLevel))
//------------------------------------
//Exclui a tabela Definido um nível para ser o máximo
//------------------------------------
oTempTable:Delete()
return
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 |