Transcript
Page 1: 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

Page 2: FLTK Summer Course - Part III - Third Impact

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, …

Page 3: FLTK Summer Course - Part III - Third Impact

3 de 15

Mas antes ...

MAS ANTES VAMOS CODIFICAR UM POUCO MANUALMENTE

Page 4: FLTK Summer Course - Part III - Third Impact

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 !

Page 5: FLTK Summer Course - Part III - Third Impact

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();}

Page 6: FLTK Summer Course - Part III - Third Impact

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]

Page 7: FLTK Summer Course - Part III - Third Impact

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

Page 8: FLTK Summer Course - Part III - Third Impact

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, “&GTK+"); btnSchemaGtk->callback((Fl_Callback*)cb_btnSchemaGtk, (void*)(this)); end();}

Construindo a interface manualmente

Page 9: FLTK Summer Course - Part III - Third Impact

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();}

Page 10: FLTK Summer Course - Part III - Third Impact

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

Page 11: FLTK Summer Course - Part III - Third Impact

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);}

Page 12: FLTK Summer Course - Part III - Third Impact

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+]

Page 13: FLTK Summer Course - Part III - Third Impact

13 de 15DÚVIDAS ?

Dúvidas ?

Page 14: FLTK Summer Course - Part III - Third Impact

14 de 15PENSAMENTO DO DIA !

Provérbio japonês

“É um grande erro não fazer nada, quando se pode fazer pouco...”

Page 15: FLTK Summer Course - Part III - Third Impact

15 de 15FIM !!!


Top Related