Hello,

I would use fluid to generate a simple UI:

//------------------------------------------------------------------------------
//Header file:

#ifndef Buttons_h
#define Buttons_h
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Value_Input.H>
#include <FL/Fl_Value_Output.H>
#include <FL/Fl_Button.H>
extern void My_Calc_Callback(Fl_Button*, const char*);

class CButtonsWindow {
public:
  CButtonsWindow();
  Fl_Double_Window *m_pkWindow;
private:
  void cb_m_pkWindow_i(Fl_Double_Window*, void*);
  static void cb_m_pkWindow(Fl_Double_Window*, void*);
public:
  Fl_Value_Input *m_pkValue_Input_A;
  Fl_Value_Input *m_pkValue_Input_B;
  Fl_Value_Output *m_pkResultValueOutput;
  void show();
};
#endif

//------------------------------------------------------------------------------
//Source file:

#include "Buttons.h"
#include "CApplication.h"
#include "CCallback.h"

void CButtonsWindow::cb_m_pkWindow_i(Fl_Double_Window* o, void*) {
  o->hide();
}
void CButtonsWindow::cb_m_pkWindow(Fl_Double_Window* o, void* v) {
  ((CButtonsWindow*)(o->user_data()))->cb_m_pkWindow_i(o,v);
}

CButtonsWindow::CButtonsWindow() {
  { m_pkWindow = new Fl_Double_Window(327, 235, "Aduna");
    m_pkWindow->color(FL_DARK1);
    m_pkWindow->callback((Fl_Callback*)cb_m_pkWindow, (void*)(this));
    { m_pkValue_Input_A = new Fl_Value_Input(65, 25, 80, 20, "value A:");
      m_pkValue_Input_A->minimum(-2e+07);
      m_pkValue_Input_A->maximum(2e+07);
    } // Fl_Value_Input* m_pkValue_Input_A
    { m_pkValue_Input_B = new Fl_Value_Input(209, 25, 80, 20, "value B:");
      m_pkValue_Input_B->minimum(-2e+07);
      m_pkValue_Input_B->maximum(2e+07);
    } // Fl_Value_Input* m_pkValue_Input_B
    { Fl_Value_Output* o = new Fl_Value_Output(134, 178, 80, 20, "result:");
      o->minimum(-2e+07);
      o->maximum(2e+07);
    } // Fl_Value_Output* o
    { Fl_Button* o = new Fl_Button(134, 65, 80, 20, "Add");
      o->callback((Fl_Callback*)My_Calc_Callback, (void*)("Add"));
      o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    } // Fl_Button* o
    { Fl_Button* o = new Fl_Button(134, 92, 80, 20, "Subtract");
      o->callback((Fl_Callback*)My_Calc_Callback, (void*)("Subtract"));
      o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    } // Fl_Button* o
    { Fl_Button* o = new Fl_Button(134, 119, 80, 20, "Multiply");
      o->callback((Fl_Callback*)My_Calc_Callback, (void*)("Multiply"));
      o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    } // Fl_Button* o
    { Fl_Button* o = new Fl_Button(134, 146, 80, 20, "Divide");
      o->callback((Fl_Callback*)My_Calc_Callback, (void*)("Divide"));
      o->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE);
    } // Fl_Button* o
    m_pkWindow->end();
  } // Fl_Double_Window* m_pkWindow
}

void CButtonsWindow::show() {
  mWindow->show();
}
//------------------------------------------------------------------------------

// Then your callback can be something like this:


void My_Calc_Callback(Fl_Button* o, const char* userData);

void My_Calc_Callback(Fl_Button* o, const char* userData)
{
    std::string str = userData;

    if (str == "Add")
    {
        double dValA = m_pkValue_Input_A->value();
        double dValB = m_pkValue_Input_B->value();
        double dResult = dValA + dValB;
        m_pkResultValueOutput->value(dResult);
    }
    else if (str == "Subtract")
    {
        double dValA = m_pkValue_Input_A->value();
        double dValB = m_pkValue_Input_B->value();
        double dResult = dValA - dValB;
        m_pkResultValueOutput->value(dResult);
    }
    else if (str == "Multiply")
    {
        double dValA = m_pkValue_Input_A->value();
        double dValB = m_pkValue_Input_B->value();
        double dResult = dValA * dValB;
        m_pkResultValueOutput->value(dResult);
    }
    else if (str == "Divide")
    {
        double dValA = m_pkValue_Input_A->value();
        double dValB = m_pkValue_Input_B->value();
        double dResult = dValA / dValB;
        m_pkResultValueOutput->value(dResult);
    }

    m_pkResultValueOutput->redraw();
}
//------------------------------------------------------------------------------
(Obviously I have coded this sample for clarity; but study the test samples 
that come with FLTK. Fluid is your friend).
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to