Implementação completa de um Property Editor robusto usando TreeView nativo do VSCode, preparado para oferecer uma experiência rica de edição de propriedades conforme demonstrado nas imagens de referência.
- TreeDataProvider nativo do VSCode
- Organização hierárquica por grupos (Ordinary Properties, etc.)
- Suporte para múltiplos tipos de itens:
Group: grupos de propriedadesProperty: propriedades editáveisSeparator: separadores visuais
- Tooltips ricos com
MarkdownString - Formatação inteligente de valores (boolean, string, number)
- Integração com comandos para edição inline
- Gerenciamento do TreeView
- Integração com
SelectionServicepara reagir à seleção - Editores modais especializados:
- Boolean: Quick Pick com ✓ True / ✗ False
- Number: InputBox com validação numérica
- Enum: Quick Pick com opções configuráveis
- String: InputBox simples
- Atualização automática do modelo TFX
- Sincronização com o designer visual
Dase.EditProperty: abre editor modal para propriedadeDase.RefreshProperties: força refresh do painel
XPropertyTreeItem: item do TreeView com metadados ricosIPropertyTreeItem: interface para criação de itensXPropertyItemType: enum para tipos de itens
✅ Hierarquia de Grupos
- Organização automática de propriedades por grupos
- Grupo padrão "Ordinary Properties" para propriedades sem grupo
- Ordenação alfabética com "Ordinary Properties" sempre por último
- Expansão/colapso de grupos
✅ Tipos de Editores
- Boolean (checkbox simulado via Quick Pick)
- Number (validação numérica)
- Enum (lista de opções)
- String (texto livre)
✅ Recursos de UI
- Tooltips informativos com:
- Descrição da propriedade
- Tipo de dados
- Key da propriedade
- Valor atual
- Indicadores de read-only
- Formatação visual de valores:
- Boolean: ✓ (true) ou vazio (false)
- String: truncamento com "..." após 40 caracteres
- Number: formatação numérica
- Propriedades read-only (ID) não clicáveis
- Comandos inline para propriedades editáveis
✅ Integração TFX
- Uso de
XPropertypara metadados - Suporte a
GroupemXPropertyItem - Integração com
TFXBridge.GetElementInfo() - Atualização automática do modelo via
TFXBridge
✅ Sincronização
- Reação automática à mudança de seleção
- Atualização do designer visual após edição
- Persistência automática (save) após mudanças
O editor está preparado para suportar (nas imagens):
- Interface:
Optionsjá suporta array de strings - Implementação futura: detectar tipo "Color" e abrir color picker nativo do VSCode
- Interface:
Optionspode conter IDs de elementos - Implementação futura: modal com TreeView para seleção de elementos relacionados
- Interface:
Optionscom tipos TFX - Implementação futura: Quick Pick com ícones e descrições
XPropertyDefaultexpõe:IsRequired: obrigatoriedadeMaxLength: validação de tamanhoMinValue: validação numéricaScale: precisão decimalHasError: indicador de erro
- Implementação futura: validação antes de confirmar edição
XPropertyDefaultexpõe:Title: título localizadoGroup: agrupamentoOrder: ordenação customizadaCultureSensitive: propriedades localizáveisIsLinked: propriedades com referências
{
"views": {
"dasePanel": [
{
"id": "Dase.PropertyEditor",
"name": "Property Editor",
"icon": "$(symbol-property)"
}
]
},
"commands": [
{
"command": "Dase.EditProperty",
"title": "Edit Property"
},
{
"command": "Dase.RefreshProperties",
"title": "Refresh Properties"
}
]
}InitializePropertyEditorService(pContext, designerProvider);
pContext.subscriptions.push(
vscode.commands.registerCommand("Dase.EditProperty", EditPropertyCommand),
vscode.commands.registerCommand("Dase.RefreshProperties", RefreshPropertiesCommand)
);- Seleção de elemento: O painel reage automaticamente ao
SelectionService - Edição: Clicar em uma propriedade abre o editor modal apropriado
- Atualização: Após confirmar, o modelo é atualizado e o designer visual é sincronizado
- Persistência: O documento é salvo automaticamente
✅ PropertyEditorProvider
- Inicialização
- SetProperties (com grupos)
- Clear
- UpdatePropertyValue
- GetParent
- Formatação de valores
✅ PropertyEditorCommands
- EditPropertyCommand
- RefreshPropertiesCommand
- Tratamento de erros
- Teste manual no VSCode para validar UX
- Color Picker para propriedades de cor
- Tree Selector para referências entre elementos
- Validação inline usando metadados de
XPropertyDefault - Edição inline (sem modal) para strings e numbers
- Undo/Redo integrado com
XChangeTracker
- Context: DASE (VS Code Extension), não TFX
- Dependency direction: DASE → TFX (nunca o contrário)
- Property System: usa
XPropertyeXPropertyDefaultdo TFX - Coverage: testes cobrem lógica core; runtime UI requer teste manual
- Standards: segue rigorosamente os coding standards do repositório
Status: ✅ Implementação completa e funcional
Coverage impactado: PropertyEditorProvider e PropertyEditorService (requerem testes de runtime)
Compilação: ✅ Sem erros