3. Fractales
3.3. Essence
A inicialização do visualizador de grafo é feita no método ScratchGraph1Morph>> initialize. Em primeiro lugar as características visuais do painel são definidas tais como a cor e a largura da borda. As características visuais em vigor neste pai- nel e do seu painel auxiliar são as mesmas das do visualizador de listas do Scratch. Este facto faz com que este novo visualizador pareça familiar para utilizadores que já conhecem o ambiente Scratch e assim promove uma melhor integração na interface.
Em seguida são inicializadas todas as variáveis de instancia do Scratch que não serão morphs. São inicializadas então as variáveis: graph, formerNode, fileName, editMode, navigationHistory, edgeMorphs, valueMorphs, indiceMorphs, numb- erMorphs e lastActivityError.
• Na variável graph é inicializado o grafo que vai conter toda informação numa instancia da classe Graph.
• A variável valuesActive é um valor booleano que define se as células que representam os values do nodo atual têm a funcionalidade de botão ativa ou não.
• A variável edgesActive é um valor booleano que define se as células que representam os edges do nodo atual têm a funcionalidade de botão ativa ou não.
• A variável formerNode inicializada a nil tem a função de guardar o nome do último nodo que foi apresentado no visualizador.
• A variável editMode é um valor booleano que representa o modo em que o visualizador se encontra, se em modo de edição ou de execução. O modo por deito do visualizador é o modo de edição e por isso esta variável é inicializada com o valor true.
• Na variável navigationHistory é inicializada uma OrderedCollection que contém ao longo da execução do visualizador o histórico de navegação. • Na variável edgeMorphs é inicializada um OrderedCollection que contém,
ao logo da execução do visualizador, os WatcherReadoutFrameMorphs que representam as células que mostram os diferentes edges do nodo atual que está a ser visualizado.
• Na variável valueMorphs é inicializada um OrderedCollection que contém, ao logo da execução do visualizador, os WatcherReadoutFrameMorphs que representam as células que mostram os diferentes values do nodo atual que está a ser visualizado.
• Na variável indiceMorphs é inicializado um Array que contém, ao logo da execução do visualizador, os StringMorphs que representam os índices de cada value do nodo atual.
• Na variável numberMorphs é inicializado um Array que contém, ao logo da execução do visualizador, os StringMorphs que representam os pesos de ligação do nodo atual a cada um dos seus edges.
• A variável lastActivityError é um valor booleano que representa um erro de alguma operação no visualizador. Quando esta variável tem o valor true a
borda do visualizador torna-se vermelha por alguns momentos. É inicializada com o valor false.
Depois de inicializadas as variáveis é invocado o método ScratchGraph1Morph >>addTitleAndControls. Este método inicializa todos os componentes do visua- lizador excetuando o valuesPane e o edgesPane e seus componentes. Os compo- nentes inicializados neste método, excetuando o auxPane, são todos adicionados ao visualizador introduzindo cada um nos seus submorphs. Isto é feito para cada um dos componentes utilizando o método Morph>>addMorph: aMorph que intro- duz o morph recebido como parâmetro nos submorphs de outro. O auxPane não é adicionado neste momento para que inicialmente esteja fechado.
Em seguida no método initialize são invocados os métodos ScratchGraph1Mor- ph>>addEdgesPanee ScratchGraph1Morph>>addValuesPane que inicializam e adi- cionam aos submorphs do visualizador os dois ScrollFrameMorph2, edgesPane e valuesPane. Na inicialização destes morphs é introduzido no conteúdo de cada um deles um Morph genérico e transparente que irá conter os conteúdos de cada um.
No valuesPane os conteúdos serão as células que representam cada value do nodo atual e também os StringMorphs que representam os índices de cada value, To- das estas células que representam os values do nodo atual estão armazenados na OrderedCollection valueMorphs e os StringMorphs que representa os índices desses values estão armazenados no Array indiceMorphs.
No caso do edgesPane os conteúdos serão as células que representam cada edge do nodo atual e também os StringMorphs que representam os pesos de ligação do nodo atual a cada edge. Todas estas células que representam os edges do nodo atual estão armazenados na OrderedCollection edgeMorphs e os StringMorphs que representa os pesos desses edges estão armazenados no Array numberMorphs. Seguidamente no método initialize o visualizador é dimensionado para o ta-
manho inicial de 150x150 e os seus componentes posicionados através do mé- todo Scratch- Graph1Morph>>extent: aPoint. Este método é um método so- breposto da implementação original Morph>>extent: aPoint que faz o redimen- sionamento de um morph. O método sobreposto invoca o método original de extent: aPoint para dimensionar o visualizador e invoca de seguida o método ScratchGraph1Morph>> fixLayout que posiciona os submorphs do visualizador nos seus locais apropriados.
Em primeiro lugar o método fixLayout invoca o método StringMorph>>fitCont- ents no titleMorph. Este método redimensiona o StringMorph para acomodar o texto que lhe é associado. O titleMorph é posicionado no topo centro do visu- alizador. De seguida é invocado novamente o método fitContents mas no morph titleNodeMorph. Caso o grafo a representar seja vazio, ou o visualizador esteja em modo de execução o titleNodeMorph é representado no centro mesmo por baixo do titleMorph. Caso o grafo não seja vazio e o visualizador esteja em modo de edição o titleNodeMorph é posicionado de maneira a que a sua combina- ção com o nodeMenu e deleteNodeIcon esteja centrada. Em seguida o nodeMenu é posicionado à direita do titleNodeMorph e o deleteNodeIcon à direita deste último. Abaixo destes morphs é posicionado o valuesPane e logo a seguir o edgesPane. Depois o openAuxPaneIcon é colocado no canto inferior esquerdo e o resizeMorphno canto direito. Depois disto o addEdgeMorph é colocado ao lado do openAuxPaneIcon. De seguida é invocado novamente o método fitContents mas para o countMorph e depois é definida a sua posição central no fundo do painel e também o seu conteúdo.
De seguida são invocados os métodos ScratchGraph1Morph>>updateTitleNode, que atualiza o conteúdo do titleNodeMorph, ScratchGraph1Morph>>updateVal- uesque atualiza os conteúdos do valuesPane e ScratchGraph1Morph>>updateEd- ges que atualiza os conteúdos do edgesPane.
Voltando ao método initialize o último método invocado é o ScratchGraph1Mo- rph>>showCurrentNode que mostra o nodo atual no visualizador. Este método também será explicado mais a frente.