É um DataGrid? É uma Tree? É um TreeGrid? Não! É um Canvas com um DividedBox e três Trees!
Eu precisava de um TreeGrid, componente de Interface um tanto comum mas que não faz parte do SDK do Flex 2. E como sempre acontece em desenvolvimento de Software eu tinha pouquíssimo tempo para desenvolver o componente. Então eu percebi que poderia usar três Trees, desde que eu disfarçasse todas elas exceto a da primeira coluna. O resultado é o que eu considero o meu POG mais criativo (que mostrei na apresentação que eu fiz sábado no Treina Tom).
Botão Direito -> View Source, para ver e baixar o código dos exemplos.
Ministério do Desenvolvimento de Software adverte: O código fonte deste componente é prejudicial aos programadores iniciantes.
O segredo deste componente é manter as Trees sincronizadas. Uma ação em uma Tree provoca a mesma ação nas demais. Por exemplo, quando um item é selecionado em uma Tree o mesmo item é selecionado nas demais, dando a impressão que a linha inteira foi selecionada; ou quando uma linha é expandida na primeira Tree as mesmas linhas são expandidas nas demais. Um HDividedBox serve para permitir ao usuário aumentar e diminuir o tamanho das colunas e um Repeater dá o toque final para tornar o componente mais dinâmico permitindo um número variável de colunas.
Este é um belo exemplo de como NÃO SE DEVE desenvolver um componente. Primeiro porque deveria ser feito em ActionScript e não MXML. Além disso, a Herança foi usada de maneira indiscriminada, (não faz o menor sentido estender de Canvas) o código não está lá essas coisas e a performance provavelmente não é das melhores . Mas apesar dos pesares, seja sincero, foi ou não foi uma solução criativa?
9 comentários para “É um DataGrid? É uma Tree? É um TreeGrid? Não! É um Canvas com um DividedBox e três Trees!”
Meu Deus….
Hheeh….
Que atire a primeira pedra quem nunca fez um POG!
+)
Você tem toda razão Rodrigo. Realmente não há quem nunca tenha usado POG. Mas existe uma grande diferença entre usar POG por motivos adversos e usar porque é a única coisa que se sabe fazer. E a melhor coisa que a popularização deste termo traz são algumas noções do que pode ou não ser considerado uma gambiarra. O problema é quando o programador ou não sabe que está usando POG ou não dá a mínima para isso.
Blz Beck,
vc pode me passar (se é q tem) o link da apresentação do Elly Greenfield que vc citou na sua apresentação.
[]!
ps: o blog dele ta fora do ar? (http://www.quietlyschering.com/blog)
Já achei…
Ficou bem legal.
Agora no Flex3 teremos o AdvancedDataGrid aí vc vai poder aposentar o teu POG. Hehehe.
Vc comentou que o certo seria fazer em AS? Pq? Em mxml fica mais prático.
Aproveitando.
Num HDividedBox ou VDividedBox qd o mouse muda para o de redimensionamento teria algum evento para interceptar um duplo-clique, arrastar, soltar, etc?
A minha intenção é ao mudar o mouse se o usuário desse duplo clique eu via código colocaria a coluna no seu menor tamanho liberando espaço para o conteúdo que o usuário deseja.
Obrigado.
Olá Fabio,
Estender componentes com MXML é mais prático mas nem sempre é o que deve ser feito. Quando você quer criar um componente bem customizado geralmente você estende a classe UIComponent e uma das vantagens de se fazer isso é que você não terá na API publica do seu componente nada mais do que é necessário. Veja o caso deste TreeGrid por exemplo: olhando para o componente você diria que ele é um Container ou um Controle? Era para ser um Controle, mas como ele estende de Canvas ele é um Container. Estender de UIComponente talvez fosse o mais correto e neste caso deveria ser feito em AS. A discussão não se resume a apenas isto… mas este é um bom exemplo.
Cara so tem um bug nesse componente, vc clica e navaga com o teclado.
as linhas não ficam corretas.
abraço
Adicionar comentário
Meu Deus….
Hheeh….
Que atire a primeira pedra quem nunca fez um POG!
+)
Você tem toda razão Rodrigo. Realmente não há quem nunca tenha usado POG. Mas existe uma grande diferença entre usar POG por motivos adversos e usar porque é a única coisa que se sabe fazer. E a melhor coisa que a popularização deste termo traz são algumas noções do que pode ou não ser considerado uma gambiarra. O problema é quando o programador ou não sabe que está usando POG ou não dá a mínima para isso.
Blz Beck,
vc pode me passar (se é q tem) o link da apresentação do Elly Greenfield que vc citou na sua apresentação.
[]!
ps: o blog dele ta fora do ar? (http://www.quietlyschering.com/blog)
Já achei…
Ficou bem legal.
Agora no Flex3 teremos o AdvancedDataGrid aí vc vai poder aposentar o teu POG. Hehehe.
Vc comentou que o certo seria fazer em AS? Pq? Em mxml fica mais prático.
Aproveitando.
Num HDividedBox ou VDividedBox qd o mouse muda para o de redimensionamento teria algum evento para interceptar um duplo-clique, arrastar, soltar, etc?
A minha intenção é ao mudar o mouse se o usuário desse duplo clique eu via código colocaria a coluna no seu menor tamanho liberando espaço para o conteúdo que o usuário deseja.
Obrigado.
Olá Fabio,
Estender componentes com MXML é mais prático mas nem sempre é o que deve ser feito. Quando você quer criar um componente bem customizado geralmente você estende a classe UIComponent e uma das vantagens de se fazer isso é que você não terá na API publica do seu componente nada mais do que é necessário. Veja o caso deste TreeGrid por exemplo: olhando para o componente você diria que ele é um Container ou um Controle? Era para ser um Controle, mas como ele estende de Canvas ele é um Container. Estender de UIComponente talvez fosse o mais correto e neste caso deveria ser feito em AS. A discussão não se resume a apenas isto… mas este é um bom exemplo.
Cara so tem um bug nesse componente, vc clica e navaga com o teclado.
as linhas não ficam corretas.
abraço

