FLTK Summer Course - Part III - Third Impact
-
Upload
michel-alves -
Category
Education
-
view
342 -
download
7
description
Transcript of FLTK Summer Course - Part III - Third Impact
1 de 15INTRODUÇÃO AO FAST LIGHT TOOLKIT - FLTK
The Fast Light ToolKit
Curso de Verão – Instituto de Computação & CA ComputaçãoMichel Alves dos Santos - UFALBolsista do Centro de Pesquisa em Matemática Computacional
3º Impacto
2 de 15
Componentes oferecidos pelo FLUID
[Paleta de componentes da ferramenta FLUID]
FLUID E SUA PALETA DE COMPONENTES
• Componentes de codificação: Code, Class, …• “Containers” : Group, Window, Pack, Tile, Tabs, …• “Buttons”: Button, Return_Button, Light_Button, …• “Valuators” : Slider, Adjuster, Spinner, Dial, …• “Text” : Input, Output, Text_Editor, …• “Menus” : Menu_Bar, MenuButton, Choice, …• “Browsers” : Browser, Check_Browser, …
3 de 15
Mas antes ...
MAS ANTES VAMOS CODIFICAR UM POUCO MANUALMENTE
4 de 15
Codificação do exemplo “Alô, Mundo !”#include <FL/Fl.H>#include <FL/Fl_Box.H>#include <FL/Fl_Window.H>int main(int argc, char* argv[]){ Fl_Window *window = new Fl_Window(300,180); Fl_Box *box = new Fl_Box(20,40,260,100,“Alô, Mundo!"); box->box(FL_UP_BOX); box->labelsize(36); box->labelfont(FL_BOLD+FL_ITALIC); box->labeltype(FL_SHADOW_LABEL); window->end(); window->show(argc, argv); return Fl::run();}
O CLÁSSICO EXEMPLO HELLO WORLD !
5 de 15
Uso de Callbacks - Exemplo
COMO RESPONDER A EVENTOS DENTRO DO FLTK – USO DE CALLBACKS - EXEMPLO
#include <cstdlib>#include <FL/Fl.H>#include <FL/Fl_ask.H>#include <FL/Fl_Window.H>void MyCallback(Fl_Widget* mywidget, void* userdata){ fl_message(“Saindo …"); exit(0);} int main(int argc, char* argv[]){ Fl_Window *window = new Fl_Window(300,180); window->callback(MyCallback,0); window->show(argc, argv); return Fl::run();}
6 de 15
Mudando o Scheme
COMO MUDAR O ESQUEMA DAS APLICAÇÕES EM FLTK
Implemente uma classe que herde de Fl_Window e possua a seguinte aparência :
A janela deve possuir um grupo [Fl_Group] e 3 botões do tipo Fl_Button [com os rótulos visualizados acima].
#include <FL/Fl.H>#include <FL/Fl_Group.H>#include <FL/Fl_Button.H>#include <FL/Fl_Window.H>
[Cabeçalhos necessários]
7 de 15
class WindowChangeSchema : public Fl_Window{ public: WindowChangeSchema(const char *L = 0); WindowChangeSchema(int W, int H, const char *L = 0); Fl_Group *grpGrupo; Fl_Button *btnSchemaNativo; Fl_Button *btnSchemaPlastic; Fl_Button *btnSchemaGtk;private: /*Método que auxilia no desenho da janela*/ void _WindowChangeSchema(); /*Métodos para callback*/ void cb_btnSchemaNativo_i(Fl_Button*, void*); static void cb_btnSchemaNativo(Fl_Button*, void*); void cb_btnSchemaPlastic_i(Fl_Button*, void*); static void cb_btnSchemaPlastic(Fl_Button*, void*); void cb_btnSchemaGtk_i(Fl_Button*, void*); static void cb_btnSchemaGtk(Fl_Button*, void*); };
CÓDIGO DA CLASSE WINDOWCHANGESCHEMA
8 de 15CÓDIGO DO MÉTODO QUE DESENHA A INTERFACE
void WindowChangeSchema::_WindowChangeSchema(){ grpGrupo = new Fl_Group(25, 15, 300, 50, “GRUPO"); grpGrupo->box(FL_ENGRAVED_FRAME); grpGrupo->labelsize(20); grpGrupo->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE); grpGrupo->end(); btnSchemaNativo = new Fl_Button(25, 83, 80, 50, “&Nativo"); btnSchemaNativo->callback((Fl_Callback*)cb_btnSchemaNativo, (void*)(this)); btnSchemaPlastic = new Fl_Button(135, 83, 80, 50, “&Plastic"); btnSchemaPlastic->callback((Fl_Callback*)cb_btnSchemaPlastic, (void*)(this)); btnSchemaGtk = new Fl_Button(245, 83, 80, 50, “>K+"); btnSchemaGtk->callback((Fl_Callback*)cb_btnSchemaGtk, (void*)(this)); end();}
Construindo a interface manualmente
9 de 15
Construtores da classe
CONSTRUTORES DA CLASSE
WindowChangeSchema::WindowChangeSchema(const char *L):Fl_Window(0, 0, 350, 150, L){ clear_flag(16); _WindowChangeSchema();}WindowChangeSchema::WindowChangeSchema(int W, int H, const char *L):Fl_Window(0, 0, W, H, L){ clear_flag(16); _WindowChangeSchema();}
10 de 15
void WindowChangeSchema::cb_btnSchemaNativo_i(Fl_Button* o, void*){ Fl::scheme("none");}void WindowChangeSchema::cb_btnSchemaPlastic_i(Fl_Button* o, void*){ Fl::scheme("plastic");}void WindowChangeSchema::cb_btnSchemaGtk_i(Fl_Button* o, void*){ Fl::scheme("gtk+");}
Callbacks internos
CALLBACKS INTERNOS A CLASSE
11 de 15
Callbacks “estáticos”
CALLBACKS “ESTÁTICOS” – MANIPULADOS DIRETAMENTE NOS EVENTOS
void WindowChangeSchema::cb_btnSchemaNativo(Fl_Button* o, void* v) { ((WindowChangeSchema*)(v))->cb_btnSchemaNativo_i(o,v);}void WindowChangeSchema::cb_btnSchemaPlastic(Fl_Button* o, void* v) { ((WindowChangeSchema*)(v))->cb_btnSchemaPlastic_i(o,v);}void WindowChangeSchema::cb_btnSchemaGtk(Fl_Button* o, void* v){ ((WindowChangeSchema*)(v))->cb_btnSchemaGtk_i(o,v);}
12 de 15
int main(int argc, char** argv){ WindowChangeSchema win("Muda Schema !!!"); win.show(argc,argv); return Fl::run();}
Função Principal
FUNÇÃO PRINCIPAL DO PROGRAMA
[Os três schemes suportados pelo pacote FLTK – None (Nativo), Plastic e GTK+]
13 de 15DÚVIDAS ?
Dúvidas ?
14 de 15PENSAMENTO DO DIA !
Provérbio japonês
“É um grande erro não fazer nada, quando se pode fazer pouco...”
15 de 15FIM !!!