70 lines
1.3 KiB
C++
70 lines
1.3 KiB
C++
// 18 november 2015
|
|
#include "uipriv_haiku.hpp"
|
|
|
|
struct uiButton {
|
|
uiHaikuControl c;
|
|
BButton *button;
|
|
void (*onClicked)(uiButton *, void *);
|
|
void *onClickedData;
|
|
};
|
|
|
|
uiHaikuDefineControl(
|
|
uiButton, // type name
|
|
uiButtonType, // type function
|
|
button // handle
|
|
)
|
|
|
|
#define mButtonClicked 0x4E754E75
|
|
|
|
static void onClicked(BMessage *msg)
|
|
{
|
|
void *bb;
|
|
uiButton *b;
|
|
|
|
// TODO error check
|
|
msg->FindPointer(mControlField, &bb);
|
|
b = uiButton(bb);
|
|
(*(b->onClicked))(b, b->onClickedData);
|
|
}
|
|
|
|
static void defaultOnClicked(uiButton *b, void *data)
|
|
{
|
|
// do nothing
|
|
}
|
|
|
|
char *uiButtonText(uiButton *b)
|
|
{
|
|
return uiHaikuStrdupText(b->button->Label());
|
|
}
|
|
|
|
void uiButtonSetText(uiButton *b, const char *text)
|
|
{
|
|
b->button->SetLabel(text);
|
|
}
|
|
|
|
void uiButtonOnClicked(uiButton *b, void (*f)(uiButton *b, void *data), void *data)
|
|
{
|
|
b->onClicked = f;
|
|
b->onClickedData = data;
|
|
}
|
|
|
|
uiButton *uiNewButton(const char *text)
|
|
{
|
|
uiButton *b;
|
|
BMessage *msg;
|
|
|
|
b = (uiButton *) uiNewControl(uiButtonType());
|
|
|
|
uiHaikuRegisterEventHandler(mButtonClicked, onClicked);
|
|
msg = new BMessage(mButtonClicked);
|
|
msg->AddPointer(mControlField, b);
|
|
|
|
b->button = new BButton(text, msg);
|
|
|
|
uiButtonOnClicked(b, defaultOnClicked, NULL);
|
|
|
|
uiHaikuFinishNewControl(b, uiButton);
|
|
|
|
return b;
|
|
}
|