Implemented uiEntryOnChanged() on Mac OS X.
This commit is contained in:
parent
180a17a235
commit
01ff7965da
|
@ -37,7 +37,7 @@ struct button {
|
||||||
uipButtonDelegate *delegate;
|
uipButtonDelegate *delegate;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void defaultOnClicked(uiButton *c, void *data)
|
static void defaultOnClicked(uiButton *b, void *data)
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,53 @@
|
||||||
// 9 april 2015
|
// 9 april 2015
|
||||||
#import "uipriv_darwin.h"
|
#import "uipriv_darwin.h"
|
||||||
|
|
||||||
|
@interface entryDelegate : NSObject {
|
||||||
|
uiEntry *e;
|
||||||
|
void (*onChanged)(uiEntry *, void *);
|
||||||
|
void *onChangedData;
|
||||||
|
}
|
||||||
|
- (void)controlTextDidChange:(NSNotification *)note;
|
||||||
|
- (void)setEntry:(uiEntry *)e;
|
||||||
|
- (void)setOnChanged:(void (*)(uiEntry *, void *))f data:(void *)data;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation entryDelegate
|
||||||
|
|
||||||
|
- (void)controlTextDidChange:(NSNotification *)note
|
||||||
|
{
|
||||||
|
(*(self->onChanged))(self->e, self->onChangedData);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setEntry:(uiEntry *)e
|
||||||
|
{
|
||||||
|
self->e = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setOnChanged:(void (*)(uiEntry *, void *))f data:(void *)data
|
||||||
|
{
|
||||||
|
self->onChanged = f;
|
||||||
|
self->onChangedData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
struct entry {
|
struct entry {
|
||||||
uiEntry e;
|
uiEntry e;
|
||||||
NSTextField *textfield;
|
NSTextField *textfield;
|
||||||
|
entryDelegate *delegate;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void defaultOnChanged(uiEntry *e, void *data)
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
static void destroy(void *data)
|
static void destroy(void *data)
|
||||||
{
|
{
|
||||||
struct entry *e = (struct entry *) data;
|
struct entry *e = (struct entry *) data;
|
||||||
|
|
||||||
|
[e->textfield setDelegate:nil];
|
||||||
|
[e->delegate release];
|
||||||
uiFree(e);
|
uiFree(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +65,14 @@ static void entrySetText(uiEntry *ee, const char *text)
|
||||||
[e->textfield setStringValue:toNSString(text)];
|
[e->textfield setStringValue:toNSString(text)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void entryOnChanged(uiEntry *ee, void (*f)(uiEntry *, void *), void *data)
|
||||||
|
{
|
||||||
|
struct entry *e = (struct entry *) ee;
|
||||||
|
|
||||||
|
[e->delegate setOnChanged:f data:data];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// these are based on interface builder defaults; my comments in the old code weren't very good so I don't really know what talked about what, sorry :/
|
// these are based on interface builder defaults; my comments in the old code weren't very good so I don't really know what talked about what, sorry :/
|
||||||
void finishNewTextField(NSTextField *t, BOOL isEntry)
|
void finishNewTextField(NSTextField *t, BOOL isEntry)
|
||||||
{
|
{
|
||||||
|
@ -56,8 +102,14 @@ uiEntry *uiNewEntry(void)
|
||||||
[e->textfield setSelectable:YES]; // otherwise the setting is masked by the editable default of YES
|
[e->textfield setSelectable:YES]; // otherwise the setting is masked by the editable default of YES
|
||||||
finishNewTextField(e->textfield, YES);
|
finishNewTextField(e->textfield, YES);
|
||||||
|
|
||||||
|
e->delegate = [entryDelegate new];
|
||||||
|
[e->textfield setDelegate:e->delegate];
|
||||||
|
[e->delegate setEntry:uiEntry(e)];
|
||||||
|
[e->delegate setOnChanged:defaultOnChanged data:NULL];
|
||||||
|
|
||||||
uiEntry(e)->Text = entryText;
|
uiEntry(e)->Text = entryText;
|
||||||
uiEntry(e)->SetText = entrySetText;
|
uiEntry(e)->SetText = entrySetText;
|
||||||
|
uiEntry(e)->OnChanged = entryOnChanged;
|
||||||
|
|
||||||
return uiEntry(e);
|
return uiEntry(e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue