SUIT - Simple User Interface Toolkit Maria Alice Grigas Varella Ferreira EP-USP Abril 2003 1 SUIT - Simple User Interface Toolkit Biblioteca de procedimentos que ajuda os programadores a aprenderem a criação de interfaces gráficas (visa o aprendizado) UNIX, DOS e Windows Implementa a habilidade de mover janelas e redimensioná-las em tempo de execução da aplicação Orientação a objeto (porém não é orientada a objetos, realmente) Maria Alice Grigas Varella Ferreira – EP-USP 2 Orientação a objetos Segundo Rambaugh (1991) um objeto é “um elemento que combina estruturação de dados com procedimentos”. Processos Dados métodos (procedimentos) Maria Alice Grigas Varella Ferreira – EP-USP 3 Vantagens da orientação a objetos Encapsulamento de dados – os dados são manipulados somente através dos métodos definidos para eles Processos Dados Métodos (procedimentos) Maria Alice Grigas Varella Ferreira – EP-USP 4 Vantagens da orientação a objetos Abstração – não é necessário conhecer o interior do objeto; é preciso conhecer só o seu funcionamento Processos Maria Alice Grigas Varella Ferreira – EP-USP 5 Vantagens da orientação a objetos Herança - novos objetos podem ser gerados a partir de objetos já existentes, de forma organizada: os programas que usavam os objetos “antigos” continuam usando estes objetos os programas que necessitam dos novos objetos utilizam somente os “novos” objetos - os herdados Hierarquia de objetos - conjunto dos objetos antigos (ancestrais) e novos (descendentes) Maria Alice Grigas Varella Ferreira – EP-USP 6 Hierarquia de objetos RAIZ Tem certeza? Sim Não Caixa de diálogo Botão Finalizar Finalizar Botão Sim Maria Alice Grigas Varella Ferreira – EP-USP Botão Não Mensagem 7 Widgets – objetos de tela Bounded value - potenciômetro Menu - coleção de botões Scrollable list - scroll bar Radio buttons - seleção de apanas uma opção dentro de um conjunto de opções Text editor - padrão Emacs Color chips - para seleção de uma cor atual Type in box - texto de uma linha On / Off switch Buttons – botões Maria Alice Grigas Varella Ferreira – EP-USP 8 Que são widgets Cada widget caracteriza uma classe Cada elemento que aparece na tela, e que é de um determinado tipo de widget é uma instância da classe Cada objeto possui um conjunto de propriedades Tem certeza? Sim Não Duas instâncias da classe Button Maria Alice Grigas Varella Ferreira – EP-USP 9 Quem são os widgets O sistema fornece uma Biblioteca de Objetos já definidos: menus, caixas de diálogo, scroll bars, botões, etc. A Biblioteca contém além dos objetos de interface os elementos gráficos mais comuns em Computação Gráfica bidimensional, tais como linhas, pontos, círculos e ícones, importados da SRGP. Para ser um bom projetista, utilizador de toolkits, deve-se, antes de mais nada, conhecer muito bem a biblioteca de objetos. Maria Alice Grigas Varella Ferreira – EP-USP 10 Maria Alice Grigas Varella Ferreira – EP-USP 11 Maria Alice Grigas Varella Ferreira – EP-USP 12 Como manipular os Widgets Cada classe de objeto apresenta um conjunto de atributos particulares (propriedades) , bem como de métodos, os quais se acham ligados às características de funcionamento de cada classe. Assim, para que o programador possa instanciar um objeto, ele deve antes de mais nada saber como esta classe funciona e quais os atributos do protótipo. Não é fácil conhecer todos os procedimentos e atributos de todas as classes! Maria Alice Grigas Varella Ferreira – EP-USP 13 Como usar os widgets Os objetos que comparecem em um programa podem ter sua aparência e funcionamento definidos através da atribuição de valores conveniente aos seus parâmetros, e da chamada adequada de seus procedimentos. Maria Alice Grigas Varella Ferreira – EP-USP 14 Construção da interface A interface do aplicativo é construída através da colocação dos widgets sobre uma tela. Cada elemento que compõe a tela é criado por meio de uma primitiva de criação; ele é incorporado a um conjunto que caracteriza a interface do programa, e que é armazenado em um arquivo denominado suit.sui. Os objetos podem, então, ser reposicionados e redimensionados dinamicamente na tela, sendo os seus atributos correntes armazenados neste arquivo Maria Alice Grigas Varella Ferreira – EP-USP 15 Construção da interface O programador pode instanciar quantos objetos quiser de cada classe, dentro dos limites impostos pelo ambiente utilizado, e capacidades de sua máquina. Após a instanciação do objeto, o programador deverá "moldá-lo" às necessidades do aplicativo; para isso ele deverá: 1. atribuir valores apropriados aos atributos e 2. utilizar os métodos particulares de cada classe. Maria Alice Grigas Varella Ferreira – EP-USP 16 SUIT Editor Permite alterar as propriedades das widgets Colocando o cursor sobre a widget e teclar SUIT-e, chama este editor As propriedades podem ser do objeto, da classe e globais (!) Globais: para todas as janelas Objeto: “bounded value Grau” Classe: Todos os “bounded values” Como o sistema procura a propriedade Maria Alice Grigas Varella Ferreira – EP-USP 17 Criação de uma interface /* Programa básico para criação de interfaces - o “loop” principal – fornecido na forma de template */ #include "suit.h“ void main (int argc, char *argv[]) { SUIT_init(argv[0]); /* inicializa o sistema */ /* define os objetos de tela */ SUIT_beginStandardApplication(); } Maria Alice Grigas Varella Ferreira – EP-USP 18 Comando SUIT_beginStandardApplication(); Equivale a: SUIT_beginDisplay(); /* cria os objetos na tela, inicia o sistema e desenha todos os objetos na tela */ while (TRUE) { SUIT_checkAndProcessInput(INDEFINITE) /* verifica mouse e teclado e envia os eventos para os “widgets apropriados * } Maria Alice Grigas Varella Ferreira – EP-USP 19 Categorias de Rotinas Inicialização do sistema Finalização e “limpeza” do sistema Funções geométricas Atribuição de valores às propriedades dos objetos Leitura dos valores das propriedades dos objetos Funções de exibição Maria Alice Grigas Varella Ferreira – EP-USP 20 Categorias de Rotinas Tratamento de eventos Funções de criação das widgets Funções de Hierarquização Funções de dragging Manipulação de cadeias Miscelânea Funções gráficas (da SRGP) Biblioteca de widgets Maria Alice Grigas Varella Ferreira – EP-USP 21 Programa 3cell - calculadora GO 34 + num1 34 num2 = 68 result DONE Maria Alice Grigas Varella Ferreira – EP-USP 22 Programa 3cell Ao todo, existem 7 objetos na tela: GO 2 1 34 6 + 34 3 num1 5 = 68 4 num2 result 1 7 Maria Alice Grigas Varella Ferreira – EP-USP DONE 23 Programa 3cell Três objetos possuem nomes (num1, num2 e result); os demais são anônimos. Os objetos anônimos não serão “alterados” pelo programa. 1 e 2 são caixas de texto (Type in the box) 5 é do tipo Label; Label exibe valores na tela, mas não pode ser manipulado pelo usuário. 6 e 7 são botões; 7 é um botão especial: ele encerra o funcionamento do programa. Maria Alice Grigas Varella Ferreira – EP-USP 24 Criação de objetos em 3cell void main (int argc, char *argv[]) { SUIT_init(argv[0]); // criação dos objetos num1 = SUIT_createTypeInBox("num 1",NULL); num2 = SUIT_createTypeInBox("num 2",NULL); SUIT_createLabel("+"); SUIT_createLabel("="); result = SUIT_createLabel("result"); SUIT_createButton("GO", PerformAddition); SUIT_createDoneButton(NULL); caption Rotina de callback Maria Alice Grigas Varella Ferreira – EP-USP 25 Rotina de Callback de 3cell void PerformAddition(SUIT_object button) { Atributo de Type in the Box que double temp1, temp2; recebe o valor fornecido pelo usuário char buffer[100]; temp1 = atof(SUIT_getText(num1,"current value")); temp2 = atof(SUIT_getText(num2,"current value")); sprintf(buffer, "%f", temp1 + temp2); SUIT_setText(result, "label", buffer); } Maria Alice Grigas Varella Ferreira – EP-USP Atributo de Label que recebe o conteúdo de buffer 26 Referências bibliográficas Documentos da SUIT – manual está no site. Há uma cópia para consulta na biblioteca Foley, J. D. et al. Computer Graphics Principles and Practices. Addison-Wesley, Reading, 1990. Cap. 8-10. Maria Alice Grigas Varella Ferreira – EP-USP 27