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

View File

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