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 13.
![]() |
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 2008-12-21