[ rj444 @ 15.04.2005. 19:23 ] @
Molim nekog ko zna da mi objasni sto detaljnije kako funkcionise rad dogadjaja u C++ programu koji koristi FLTK klase. Npr. zanima me kako da povezem sa nekim dugmetom dogadjaj na klik levim tasterom... i kako funkcionise handler dogadjaja. I da kako da povezem taj dogadjaj sa nekom metodom ili funkcijom.
Hvala svima unapred....
Naravno korisitm DEV Cpp 4.9.9.2
[ NeznamTkoSam @ 15.04.2005. 19:32 ] @
Ovo ce paliti kada kliknes gumb:
Code:
void klik(Fl_Widget* object, void* userdata) {
    fl_alert("Kliknuo si gumb");
}

int main() {
    // ...
    
    Fl_Button *gumb = new Fl_Button(10, 10, 100, 25, "Klikni me");
    gumb->callback(klik);
    
    // ...
}
Ako zelis hvatati i druge evente:
Code:
class MojGumb : public Fl_Button {
    // ...
    
    int handle(int event) {
        switch event {
            case FL_PUSH:
                fl_alert("Pritisnuo si me");
            case FL_RELEASE:
                fl_alert("Otpustio si me");
            
            // ...
        }
    }
    
    // ...
};

int main() {
    // ...
    
    MojGumb *gumb = new MojGumb(10, 10, 100, 25, "Klikni me");
    
    // ...
}
Za detaljnije procitaj FLTK dokumentaciju.
[ rj444 @ 16.04.2005. 14:37 ] @
Citao sam dokumentaciju za FLTK ali nisam nasao objasnjenje kako da ovo izvedem.
Da li mozda neko zna odakle mogu da skinem neki drugi tutorial za Fltk, sem zvanicnog?
[ NeznamTkoSam @ 16.04.2005. 15:58 ] @
Imas onaj pdf.
[ Buffy @ 16.04.2005. 18:23 ] @
Citat:
NeznamTkoSam: Imas onaj pdf.

pdf,koliko ja znam postoji samo za FLTK 1.
Bolje potrazi tutorijale za FLTK 2,jer je noviji,a samim tim i bolji!
Zasto se vracati na staro.
[ rj444 @ 16.04.2005. 21:20 ] @
Mislite na pdf sa njihovog sajta (fltk.org)? On je isti kao HTML tutorijal.
Jeste li dokumentacija za fltk2 bolja?
[ Dejan Lozanovic @ 16.04.2005. 21:56 ] @
Citat:
rj444: Molim nekog ko zna da mi objasni sto detaljnije kako funkcionise rad dogadjaja u C++ programu koji koristi FLTK klase. Npr. zanima me kako da povezem sa nekim dugmetom dogadjaj na klik levim tasterom... i kako funkcionise handler dogadjaja. I da kako da povezem taj dogadjaj sa nekom metodom ili funkcijom.
Hvala svima unapred....
Naravno korisitm DEV Cpp 4.9.9.2


Kada su dogadjaji u pitanju tu se vrte tri funkcije NeznamThoSam je spomenuo dve :) ono sto nije spomenuo jeste when() :) tj u zavisnosti od eventa koji dogadjaj da bude pozvan.

FLTK je zamisljen da ima samo jedan callback method za svaki widget, i da unutar tog callback metoda obradjujes sve dogadjaje.

Osnova svega jeste Widget::handle metod, znaci kada se dogadjaj desi fltk protrci kroz widgete koji se nalaze u listi widgeta( recimo desio se klik misemm tada se event salje prozoru pa svim mogucim grupama koje se nalaze u kordinati gde je mis, pa tek nakraju dugmetu)

e sada ako handle vrati 0 smatra se da ga ta vrsta eventova ne zanima, i event se salje sledecem na listi sve dok neki widget ne prihvati i obradi event.

Ono sto default handle metod radi jeste da proveri da li se trenutni event nalazi u flagu koji se setuje when metodom i ako se taj dogadjaj nalazi u toj skupini onda poziva funkciju koju je dobio callback metodom.

Citat:
Buffy: pdf,koliko ja znam postoji samo za FLTK 1.
Bolje potrazi tutorijale za FLTK 2,jer je noviji,a samim tim i bolji!
Zasto se vracati na staro.


Dokumentacija za FLTK2 je vecim delom prebacena na doxygen, a doxygen moze pored html-a da generise i tex, a iz tex-a je lako dobiti pdf.

A sto se tice FLTK 2 on jos uvek zvanicno nije dostigao stable fazu, ali je dovoljno stabilan, koristi namespace i native utf8 podrsku. Dok se 1.1.x smatra i dalje za stable.
[ Dejan Lozanovic @ 16.04.2005. 21:59 ] @
Citat:
rj444: Mislite na pdf sa njihovog sajta (fltk.org)? On je isti kao HTML tutorijal.
Jeste li dokumentacija za fltk2 bolja?


Dejan Lekic odrzava
www.fltk.net

I tamo imas http://www.fltk.net/files/fltk-doc-reference-chm-2.0.1.zip u chm formatu ili http://www.fltk.net/f2doc/ ako hoces html gde imas pretragu.
[ NeznamTkoSam @ 16.04.2005. 22:35 ] @
FLTK2 je još uvijek dosta nestabilan...
[ Dejan Lozanovic @ 17.04.2005. 09:27 ] @
Citat:
NeznamTkoSam: FLTK2 je još uvijek dosta nestabilan... :(


Mozes li da das neki konkretan primer ? Ja aktivno koristim fltk2 i do sada nisam naisao na neke probleme.
[ Alef @ 17.04.2005. 12:19 ] @
Meni su programi pucali na potpuno nebulozne stvari tipa: nisam definisao font na labeli ili dugmetu… Ubi se tražeći šta nije u redu, jer svaki put dobijem Segmentation fault, i onda slučajno dodam font style i proradi… I slične stvari…
[ NeznamTkoSam @ 17.04.2005. 19:36 ] @
Problem je klasa Rectangle. :(
[ leka @ 18.04.2005. 09:25 ] @
Stjepane (NeZnamTkoSam), nije problem klasa fltk::Rectangle, vec je TVOJ problem sto ne znas da je iskoristis!
[ NeznamTkoSam @ 18.04.2005. 09:53 ] @
Leka, daj pogledaj http://www.elitesecurity.org/tema/95193-FLTK-crtanje-linije
Procitaj sto si napisao o klasi Rectangle.
[ NeznamTkoSam @ 18.04.2005. 10:26 ] @
LOL
Koji sam ja idiot!
Leka, nije problem "sto je ne znam iskoristiti" nego to što ja imam staru verziju FLTK dvojke gdje jos nema klase Rectangle
Ali svejedno, i sam si rekao da jos nije za komercijalne programe jer je nestabilan...
[ rj444 @ 18.04.2005. 14:15 ] @
Ljudi hvala Vam na objasnjenjima. Polako ucim kako se radi. Medjutim, citajuci tutorijal sa sajta (sa onog na kom ima i video zapis), pokusao sam da kompajliram sledeci primer:

Code:

#include <FL/Fl.H> 
#include <FL/Fl_Window.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Output.H>
using namespace std;

//---------------------------------------------------
 
class SimpleWindow : public Fl_Window{
 
   public:
      SimpleWindow(int w, int h, const char* title );
      ~SimpleWindow();
      Fl_Button* copy;
      Fl_Button* quit;
      Fl_Input* inp;
      Fl_Output* out;
    
   private:
      static void cb_copy(Fl_Widget*, void*);
      inline void cb_copy_i();
  
      static void cb_quit(Fl_Widget*, void*);
      inline void cb_quit_i();
};

//----------------------------------------------------

int main (){
  
   SimpleWindow win(300,200,"SimpleWindow");
   return Fl::run();
}

//----------------------------------------------------

SimpleWindow::SimpleWindow(int w, int h, const char* title):Fl_Window(w,h,title){
    
   begin();
      copy = new Fl_Button( 10, 150, 70, 30, "C&opy");
      copy->callback( cb_copy, this );
     
      quit = new Fl_Button(100, 150, 70, 30, "&Quit");
      quit->callback(cb_quit, this);
   
      inp = new Fl_Input(50, 50, 140, 30, "Input:");
      out = new Fl_Output(50, 100, 140, 30, "Output:");
   end();
   resizable(this);
   show();
}

//----------------------------------------------------

SimpleWindow::~SimpleWindow(){}

//----------------------------------------------------

void SimpleWindow::cb_copy(Fl_Widget* o, void* v) { 
 
   //SimpleWindow* T=(SimpleWindow*)v;
   //T->cb_copy_i();
    
   // or just the one line below
    ( (SimpleWindow*)v )->cb_copy_i();
}


void SimpleWindow::cb_copy_i() {

   out->value(inp->value());  
}

//----------------------------------------------------

void SimpleWindow::cb_quit(Fl_Widget* , void* v) {

   ( (SimpleWindow*)v )->cb_quit_i();
}


void SimpleWindow::cb_quit_i() {

    hide();
}

//----------------------------------------------------


Tada dobijam sledecu gresku:
Code:

multiple definition of 'typeinfo for Fl_Widget'
first defined here
.
.
.


I tako za sve headere koje sam ukljucio na pocetku koda.
U cemu je problem?
[ leka @ 20.04.2005. 08:15 ] @
Nadam se da nisi pokusao taj kod da kompajliras sa FLTK 2.0, jer ako jesi onda si silno pogresio - taj kod je FLTK 1.x kod. :)
Kod mene se ovaj kod koji si naveo kompajlira bez greske, sa FLTK 1.x . Evo snimka: http://gnu.nu6.org:8000/ss/snimak134.png .
Dakle, ne pokusavaj da kompajliras to sa FLTK 2.0 . FLTK 2.0 primere imas recimo na http://www.nu6.org/_/src/cpp/ ...
[ rj444 @ 20.04.2005. 11:32 ] @
Imam Fltk 1.1.6, koji je instaliran preko DEV Cpp 4.9.9.2 WebUpdate Tool-a i u njemu sam pokusao da ga kompajliram. Da li je to problem? Mozda treba da se kompajlira iz komandne linije.
Takodje mi se ova greska javljala i sa drugim primerima, sto onim koje sam skinuo sa neta, sto onim koje sam sam napisao. Obicno mi se ova greska javlja kada napravim posebnu klasu nekakvog prozora sa widgetima.
Molim Vas pomagajte ljudi, bas mi se dopada rad sa FLTK ali ne mogu da provalim ovu gresku.
[ leka @ 20.04.2005. 14:34 ] @
Moj predlog je da skines FLTK 1.x (ako vec zelis) sa www.fltk.net . Napomena, treba da skines i libpthread DevPak u tom slucaju.
[ rj444 @ 21.04.2005. 23:49 ] @
Vec sam skinuo FLTK2 i dokumentaciju za isti. Mogu ti reci da mi se onakve greske vise ne javljaju (da kucnem u drvo), ali cu verovatno nailaziti na jos problema koje cu ovde izneti. Nadam se da cu uz pomoc Vas iskusnih programera i ja nauciti dosta toga. Hvala na savetima, veoma cenim kada ljudi imaju vremena da odgovaraju na pitanja onih kojima treba pomoc.
Pozdrav