Continuação da alteração da interface

Feita a implementação da coleta das estatísticas, era necessário terminar de alterar a interface, já que a alteração feita anteriormente não incluia a adição de funcionalidade aos novos componentes.

Como haviam parâmetros que podiam ser configurados em mais de um lugar da interface (o ambiente de difusão, por exemplo), notou-se a necessidade de implementar algum mecanismo de atualização de componentes da interface toda vez que um parâmetro fosse alterado. Para tanto, foi utilizado, novamente, o padrão Observer, desta vez com os componentes da interface registrando-se na classe Configuration para receberem um sinal sempre que um parâmetro fosse alterado. O diagrama de classes do sistema após a implementação dessa funcionalidade pode ser visto na Figura [*].

Figura: Diagrama de classes após a inserção de funcionalidade nos novos componentes da interface e da coleta de estatísticas
Image UML-v2-r48

Um problema enfrentado na implementação desta nova funcionalidade foi o fato de a atualização programática do valor de um certo widget da interface gerar uma chamada de callback da biblioteca GTK - a mesma callback ativada quando o widget tinha seu valor alterado pelo usuário. Ou seja, cada clique do usuário fazia com que o sistema gerasse um clique em todos os widgets da interface. Para corrigir isso, utilizou-se um lock na classe Configuration, acessado pelo método isSynchronizing, que faz com que a callback de um widget não seja executada efetivamente quando o lock está ativo.

Luiz Fernando Oliveira Corte Real 2008-11-28