Em MVC fiz alguma coisa similar, cria no modelo e na view um campo para ser a legenda (exemplo bem resumido, só tem detalhes sobre o campo de legenda)
Static Function ModelDef()
Local oModel
Local oStrU33 := FWFormStruct(1,'U33')
oStrU33:AddField(;
AllTrim('') , ; // [01] C Titulo do campo
AllTrim('') , ; // [02] C ToolTip do campo
'U33_LEGEND' , ; // [03] C identificador (ID) do Field
'C' , ; // [04] C Tipo do campo
50 , ; // [05] N Tamanho do campo
0 , ; // [06] N Decimal do campo
NIL , ; // [07] B Code-block de validação do campo
NIL , ; // [08] B Code-block de validação When do campo
NIL , ; // [09] A Lista de valores permitido do campo
NIL , ; // [10] L Indica se o campo tem preenchimento obrigatório
{ || U_LWMNT14L(U33->U33_STATUS) },; // [11] B Code-block de inicializacao do campo
NIL , ; // [12] L Indica se trata de um campo chave
NIL , ; // [13] L Indica se o campo pode receber valor em uma operação de update.
.T. )
aAux := FwStruTrigger("U33_STATUS","U33_LEGEND",'U_LWMNT14L(M->U33_STATUS)',.F., , , , ) oStrU33:AddTrigger( aAux[1],aAux[2],aAux[3],aAux[4])
Return oModel
Static Function ViewDef()
Local oView
Local oModel := FWLoadModel( 'LOWMNT14' )
Local oStrU33:= FWFormStruct(2, 'U33')
oStrU33:AddField( ; // Ord. Tipo Desc.
'U33_LEGEND' , ; // [01] C Nome do Campo
"00" , ; // [02] C Ordem
AllTrim( '' ) , ; // [03] C Titulo do campo
AllTrim( '' ) , ; // [04] C Descricao do campo
{ 'Legenda' } , ; // [05] A Array com Help
'C' , ; // [06] C Tipo do campo
'@BMP' , ; // [07] C Picture
NIL , ; // [08] B Bloco de Picture Var
'' , ; // [09] C Consulta F3
.T. , ; // [10] L Indica se o campo é alteravel
NIL , ; // [11] C Pasta do campo
NIL , ; // [12] C Agrupamento do campo
NIL , ; // [13] A Lista de valores permitido do campo (Combo)
NIL , ; // [14] N Tamanho maximo da maior opção do combo
NIL , ; // [15] C Inicializador de Browse
.T. , ; // [16] L Indica se o campo é virtual
NIL , ; // [17] C Picture Variavel
NIL ) // [18] L Indica pulo de linha após o campo
oView:CreateFolder( 'PASTAS' )
// Cria pastas nas folders
oView:AddSheet( 'PASTAS', 'ABA01', 'Dados' )
aLegenDet := {{"BR_VERMELHO","Finalizado"},{"BR_AMARELO","Andamento"},{"BR_PINK","Atrasada"},{"BR_LARANJA","Atenção"},{"BR_AZUL","Agendamento"},{"BR_CINZA","Não definida"}}
oView:AddOtherObject("VIEW_L", {|oPanel| legdet(oPanel,aLegenDet)})
// Relaciona o identificador (ID) da View com o "box" para exibição
oView:SetOwnerView( 'VIEW_M', 'MASTER' )
oView:SetOwnerView( 'VIEW_D', 'DETALHES' )
oView:SetOwnerView( 'VIEW_L', 'LEGENDA' )
//oView:SetOwnerView("OTHER_PANEL",'CALENDARIO')
oView:SetOwnerView("PANEL_RESULT",'RESULTADOS')
//oView:SetOwnerView("PANEL_ORDSERV",'ATIVOS_OS')
oView:SetOwnerView("DASHBORD_MNT",'KPI')
Return oView