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