On 01/25/13 08:46, Moses McKnight wrote:
> On 01/25/2013 09:13 AM, Moses McKnight wrote:
>> Ok, I think I figured it out. The way I create the window is like this
>> in a menu callback function:
>>
>> void gen_license_cb(Fl_Widget *w, void *ptr)
>> {
>> licgen generator;
>> generator.make_window();
>> generator.hub_id_input->type(FL_INT_INPUT);
>> generator.hub_id_input->precision(0);
>> generator.hub_id_input->value(hub_id);
>> generator.window->show();
>> }
>>
>> I think the object is being deleted after the show() even though the
>> window is still there and active.
>>
>> What is the best way to keep the object around until the window is closed?
>
> I looked at the code in fl_ask.cxx and added the following after
> window->show()
>
> while (generator.window->shown()) Fl::wait();
> That worked. If anyone has a better way to do this please let me know.
If this is the only window in your application,
calling Fl::run() is the better thing.
I took your two files and merged them into one, just to make it
easy to compile (and post here). See the *** lines for my changes.
I added a main() function so that the code compiles and runs
as a standalone app, and I added the method called
licgen::generate_license() which just runs:
info_output->value("Testing");
Seems to work fine, didn't crash on close and the Testing message
gets created OK.
Perhaps the problem was just in how you invoke the class..
ie. what I put in main() below.
// generated by Fast Light User Interface Designer (fluid) version 1.0302
#ifndef licensegen_h
#define licensegen_h
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Value_Input.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Button.H>
class licgen {
public:
void generate_license();
Fl_Double_Window* make_window();
Fl_Double_Window *window;
Fl_Value_Input *hub_id_input;
Fl_Output *info_output;
private:
inline void cb_Generate_i(Fl_Button*, void*);
static void cb_Generate(Fl_Button*, void*);
inline void cb_Close_i(Fl_Button*, void*);
static void cb_Close(Fl_Button*, void*);
};
#endif
// *** COMMENTED FOLLOWING TWO LINES OUT TO GET CODE ALL IN ONE FILE ***
// generated by Fast Light User Interface Designer (fluid) version 1.0302
// #include "licensegen.h"
void licgen::cb_Generate_i(Fl_Button*, void*) {
generate_license();
}
void licgen::cb_Generate(Fl_Button* o, void* v) {
((licgen*)(o->parent()->user_data()))->cb_Generate_i(o,v);
}
void licgen::cb_Close_i(Fl_Button*, void*) {
window->hide();
}
void licgen::cb_Close(Fl_Button* o, void* v) {
((licgen*)(o->parent()->user_data()))->cb_Close_i(o,v);
}
Fl_Double_Window* licgen::make_window() {
{ window = new Fl_Double_Window(435, 130, "License Generator");
window->labelsize(12);
window->user_data((void*)(this));
{ hub_id_input = new Fl_Value_Input(5, 30, 275, 25, "ID#");
hub_id_input->labelsize(12);
hub_id_input->textsize(12);
hub_id_input->align(Fl_Align(FL_ALIGN_TOP_LEFT));
} // Fl_Value_Input* hub_id_input
{ info_output = new Fl_Output(5, 63, 420, 25);
info_output->color(FL_BACKGROUND_COLOR);
info_output->labelsize(12);
info_output->textsize(12);
info_output->align(Fl_Align(FL_ALIGN_TOP_LEFT));
} // Fl_Output* info_output
{ Fl_Button* o = new Fl_Button(290, 30, 135, 25, "Generate License...");
o->labelsize(12);
o->callback((Fl_Callback*)cb_Generate);
} // Fl_Button* o
{ Fl_Button* o = new Fl_Button(180, 98, 80, 25, "Close");
o->labelsize(12);
o->callback((Fl_Callback*)cb_Close);
} // Fl_Button* o
window->end();
} // Fl_Double_Window* window
return window;
}
// *** ADDED FOLLOWING THREE LINES AS PER YOUR EMAIL ***
void licgen::generate_license() {
info_output->value("Testing");
}
// *** ADDED A MAIN FUNCTION TO MAKE USE OF YOUR CLASS ***
int main() {
licgen lic;
Fl_Window *win = lic.make_window();
win->show();
return Fl::run();
}
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk