Implemented uiCheckbox and uiEntry on Haiku. Still no event handling.

This commit is contained in:
Pietro Gagliardi 2015-11-19 17:26:40 -05:00
parent 278c973ae5
commit b23de8794e
2 changed files with 50 additions and 19 deletions

View File

@ -1,42 +1,61 @@
// 18 november 2015
#include "uipriv_haiku.hpp"
// TODOs
// - checkbox text isn't aligned with the checkbox
struct uiCheckbox {
uiHaikuControl c;
BStringView *dummy;
BCheckBox *checkbox;
void (*onToggled)(uiCheckbox *, void *);
void *onToggledData;
};
uiHaikuDefineControl(
uiCheckbox, // type name
uiCheckboxType, // type function
dummy // handle
checkbox // handle
)
#define mCheckboxToggled 0x4E714E71
static void defaultOnToggled(uiCheckbox *c, void *data)
{
// do nothing
}
char *uiCheckboxText(uiCheckbox *c)
{
// TODO
return NULL;
// TODO not on api.haiku-os.org? or is this not right?
return uiHaikuStrdupText(c->checkbox->Label());
}
void uiCheckboxSetText(uiCheckbox *c, const char *text)
{
// TODO
// TODO not on api.haiku-os.org? or is this not right?
c->checkbox->SetLabel(text);
}
void uiCheckboxOnToggled(uiCheckbox *c, void (*f)(uiCheckbox *c, void *data), void *data)
{
// TODO
c->onToggled = f;
c->onToggledData = data;
}
int uiCheckboxChecked(uiCheckbox *c)
{
// TODO
return 0;
return c->checkbox->Value() != B_CONTROL_OFF;
}
void uiCheckboxSetChecked(uiCheckbox *c, int checked)
{
// TODO
int32 value;
value = B_CONTROL_OFF;
if (checked)
value = B_CONTROL_ON;
// TODO does this trigger an event?
c->checkbox->SetValue(value);
}
uiCheckbox *uiNewCheckbox(const char *text)
@ -45,8 +64,9 @@ uiCheckbox *uiNewCheckbox(const char *text)
c = (uiCheckbox *) uiNewControl(uiCheckboxType());
c->dummy = new BStringView(BRect(0, 0, 1, 1), NULL,
"TODO uiCheckbox not implemented");
c->checkbox = new BCheckBox(text, new BMessage(mCheckboxToggled));
uiCheckboxOnToggled(c, defaultOnToggled, NULL);
uiHaikuFinishNewControl(c, uiCheckbox);

View File

@ -3,29 +3,39 @@
struct uiEntry {
uiHaikuControl c;
BStringView *dummy;
BTextControl *tc;
void (*onChanged)(uiEntry *, void *);
void *onChangedData;
};
uiHaikuDefineControl(
uiEntry, // type name
uiEntryType, // type function
dummy // handle
tc // handle
)
#define mEntryChanged 0x60FE60FE
static void defaultOnChanged(uiEntry *e, void *data)
{
// do nothing
}
char *uiEntryText(uiEntry *e)
{
// TODO
return NULL;
return uiHaikuStrdupText(e->tc->Text());
}
void uiEntrySetText(uiEntry *e, const char *text)
{
// TODO
// TODO does this send a message?
e->tc->SetText(text);
}
void uiEntryOnChanged(uiEntry *e, void (*f)(uiEntry *e, void *data), void *data)
{
// TODO
e->onChanged = f;
e->onChangedData = data;
}
int uiEntryReadOnly(uiEntry *e)
@ -45,8 +55,9 @@ uiEntry *uiNewEntry(void)
e = (uiEntry *) uiNewControl(uiEntryType());
e->dummy = new BStringView(BRect(0, 0, 1, 1), NULL,
"TODO uiEntry not implemented");
e->tc = new BTextControl(NULL, "", new BMessage(mEntryChanged));
uiEntryOnChanged(e, defaultOnChanged, NULL);
uiHaikuFinishNewControl(e, uiEntry);