Suponha que tenhamos duas árvores de dados A e B visualizadas na interface do usuário ao longo destas linhas:
O usuário deseja copiar os nós de subárvore destacados de A para B. As duas árvores têm alguns nós compartilhados, conforme indicado pelos IDs.
Como você projetaria a interação para esse cenário? Uma abordagem possível seria colocar caixas de seleção próximas aos nós não compartilhados e um botão "executar"/"copiar" entre as duas árvores, mas essa é a melhor solução ao optar por arrastar e soltar?
Você tem alguma idéia para projetos alternativos?
É natural que as árvores permitam arrastar e soltar para reorganizar nós; no entanto, parece que você deseja manter a hierarquia e apenas mesclar os resultados ...
Portanto, pode ser útil para o aplicativo apenas identificar as diferenças e permitir ao usuário selecionar/confirmar cada alteração (inserir, atualizar ou excluir).
A menos que eu esteja perdendo alguma restrição, eu usaria arrastar e soltar.
Uma sintaxe de ação de seleção de objeto, como você sugere, é uma abordagem GUI padrão comum que é boa de usar se você a estender a outros comandos além de copiar (por exemplo, excluir, mover, propriedades). Isso cria uma interface do usuário simples, consistente e poderosa. Não tenho tanta certeza de recomendar caixas de seleção para seleção, no entanto. Supondo que os usuários normalmente copiem apenas um nó de nível superior por vez, eu imitaria o comportamento em gerenciadores de arquivos como o Windows Explorer e usaria ícones que são selecionados por padrão por padrão, mas suportam a seleção múltipla por metakeys (Shift e Ctrl) e seleção de arrasto. A seleção de um nó deve destacar esse nó e todos os seus subnós para ajudar a esclarecer o que o usuário está selecionando. OTOH, as caixas de seleção podem ser preferidas se os usuários geralmente precisarem copiar vários nós não associados, especialmente se você não tiver certeza de que eles estão familiarizados com os métodos padrão de seleção múltipla.
A alternativa à sintaxe de ação de seleção de objeto é a abordagem de controle dedicado a objeto em que você inclui um pequeno controle de cópia para cada nó. Um clique e é copiado. Isso pode ser preferido se copiar é a única coisa que o usuário pode fazer com os nós. Por outro lado, ter controles separados de Copiar, Mover, Excluir, Propriedades etc. para cada nó provavelmente seria muito confuso. Se você optar pelo controle dedicado a objetos, poderá apresentar um controle de cópia apenas para os nós em A que compartilharam nós em B, fornecendo uma indicação clara sobre o que pode ser copiado.
No seu exemplo, parece que o recurso Copiar está limitado a copiar para nós compartilhados entre as árvores. Isso é realmente tudo o que pode ser permitido? Sempre há mais de uma árvore de destino? Nesse caso, seu único botão Copiar é provavelmente o melhor, e você tem razão em ficar longe de arrastar e soltar. Arrastar e soltar tem pouca capacidade de descoberta e é mais difícil do que simplesmente clicar no botão Copiar. Arrastar e soltar também podem fazer com que os usuários pensem que podem executar cópias arbitrárias (por exemplo, coloque Node 4 na Árvore A em Node 18 na Árvore B ou mova os nós dentro Árvore B).
Se, no entanto, for possível e vantajoso oferecer suporte a cópias arbitrárias, considere ter dois botões para empregar o idioma Copiar e Colar (adicione um terceiro botão Recortar para apoiar a movimentação). Se você suporta cópias arbitrárias, vale a pena considerar também arrastar e soltar como atalho especializado para Copiar e colar.