> This is a multi-part message in MIME format.
> --------------050308030005070103050700
> Content-Type: text/plain; charset=ISO-8859-15; format=flowed
> Content-Transfer-Encoding: 7bit
>
> On 18.10.2010, at 12:49, Paul R wrote:
>
> > I first got the seg fault calling activate() on the input fields directly 
> > within the callback for the button., i only added the reset function to try 
> > and get around the issue or simply see if any difference.
> > will this seg fault be heirarchy related also do you think ?
>
> Yes, it's the same for both callbacks (BTW. Ian, well-done,
> I overlooked that inheritance issue at the first look).
>
> I append a modified and completetd version of your program,
> with all (I hope) essential changes marked with "***". I tried
> to do only minimal changes w/o rewriting the widget hierarchy,
> as Ian did. You may compare both versions and see what fits
> your intentions better (no competition intended ;-) ).
>
> Mainly I changed parent() to window(), so that you could later
> add intermediate groups w/o needing to change the program. Since
> the window can't be cast to SetupTest, I stored the "this" pointer
> in the window's user_data() member. That's not how I would do it
> in a working program, however, it's just to show how it *could*
> be done. YMMV.
>
> Albrecht
>
> --------------050308030005070103050700
> Content-Type: text/plain;
>  name="test.cxx"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: attachment;
>  filename="test.cxx"
>
> #include <FL/Fl.H>
> #include <FL/Fl_Window.H>
> #include <FL/Fl_Button.H>
> #include <FL/Fl_Int_Input.H>
> #include <stdlib.h>
> #include <stdio.h>
>
> class SetupTest
> {
>     public:
>     Fl_Window* SetupWindow;
>     Fl_Button* ResetButton;   // ***
>     Fl_Int_Input *inputA;
>     Fl_Int_Input *inputB;
>
>     bool state;
>     int valCount;
>     void InputCb_i(Fl_Widget* wgt, void* v);
>     static void InputCb(Fl_Widget* wgt, void* v);
>
>       void ButtonCb_i(Fl_Widget* wgt, void* v);
>     static void ButtonCb(Fl_Widget* wgt, void* v);
>
>       void Reset();
>
>     SetupTest();
> };
>
> SetupTest::SetupTest()
> {
>     SetupWindow = new Fl_Window(300, 200);
>     SetupWindow->user_data(this);     // ***
>     ResetButton = new Fl_Button(226, 20, 64, 20, "Reset"); // ***
>     inputA = new Fl_Int_Input(215, 50, 20, 24, "InputA");
>     inputA->tooltip("enter number A");
>     inputA->type(2);
>     inputA->when(FL_WHEN_RELEASE);
>     inputB = new Fl_Int_Input(215, 80, 20, 24, "InputB");
>     inputB->tooltip("enter number B");
>     inputB->type(2);
>     inputB->when(FL_WHEN_RELEASE);
>
>     valCount = 0;
>     state = false;
>
>     inputA->callback((Fl_Callback*) InputCb);
>     inputB->callback((Fl_Callback*) InputCb);
>     ResetButton->callback((Fl_Callback*) ButtonCb);
>
>     SetupWindow->end ();
>     SetupWindow->show ();
> }
>
> void SetupTest::InputCb_i(Fl_Widget* w, void* v)
> {
>     Fl_Int_Input* inp = (Fl_Int_Input*) w;
>     char* p;
>     long int longI = 0;
>
>     if (inp->changed())
>     {
>         inp->clear_changed();
>         longI = strtol(inp->value(), &p, 10);
>         printf("%s '%s'\n",inp->label(),inp->value());
>
>         printf("%ld\n",longI);
>         inp->deactivate();
>         valCount++;
>     }
>
>     if(valCount == 2)
>     {
>         printf("READY\n");
>         valCount = 0;
>     }
>
> }
> void SetupTest::InputCb(Fl_Widget* wgt, void* v)
> {
>     ((SetupTest*)(wgt->window()->user_data()))->InputCb_i(wgt, v); // ***
> }
> void SetupTest::ButtonCb_i(Fl_Widget* w, void* v)
> {
>     Fl_Button* button = (Fl_Button*) w;
>     if(!state)
>     {
>         Reset();
>         state = true;
>     }
>       else
>               state = false;
> }
> void SetupTest::ButtonCb(Fl_Widget* wgt, void* v)
> {
>     ((SetupTest*)(wgt->window()->user_data()))->ButtonCb_i(wgt, v); // ***
> }
> void SetupTest::Reset()
> {
>       printf("Reset!\n");
>         inputB->activate();
>         inputA->activate();
> }
> int main (int argc, char ** argv)
> {
>     setvbuf (stdout,NULL,_IONBF,0); // stdout unbuffered for Cygwin/MinGW
>     SetupTest testObj;
>
>   return(Fl::run());
> }
>
> --------------050308030005070103050700--

thanks also for taking time out to organise an example, i will fly ahead with 
this now, ta.
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to