Implemented the uiSlider and uiProgressBar functions and events. More TODOs. Some build warnings fixed.
This commit is contained in:
parent
478f5d2504
commit
6544e76d5f
|
@ -23,7 +23,7 @@ void initAlloc(void)
|
||||||
void uninitAlloc(void)
|
void uninitAlloc(void)
|
||||||
{
|
{
|
||||||
if ([allocations count] == 0) {
|
if ([allocations count] == 0) {
|
||||||
NSInteger i;
|
NSUInteger i;
|
||||||
|
|
||||||
for (i = 0; i < [delegates count]; i++)
|
for (i = 0; i < [delegates count]; i++)
|
||||||
[[delegates objectAtIndex:i] release];
|
[[delegates objectAtIndex:i] release];
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
// 14 august 2015
|
// 14 august 2015
|
||||||
#import "uipriv_darwin.h"
|
#import "uipriv_darwin.h"
|
||||||
|
|
||||||
|
// TODOs:
|
||||||
|
// - 10.8: left/right side of progress bar clipped
|
||||||
|
// - 10.8: increasing value animates just like with Aero
|
||||||
|
|
||||||
struct uiProgressBar {
|
struct uiProgressBar {
|
||||||
uiDarwinControl c;
|
uiDarwinControl c;
|
||||||
NSProgressIndicator *pi;
|
NSProgressIndicator *pi;
|
||||||
|
@ -16,7 +20,7 @@ void uiProgressBarSetValue(uiProgressBar *p, int value)
|
||||||
{
|
{
|
||||||
if (value < 0 || value > 100)
|
if (value < 0 || value > 100)
|
||||||
complain("value %d out of range in progressbarSetValue()", value);
|
complain("value %d out of range in progressbarSetValue()", value);
|
||||||
// TODO
|
[p->pi setDoubleValue:((double) value)];
|
||||||
}
|
}
|
||||||
|
|
||||||
uiProgressBar *uiNewProgressBar(void)
|
uiProgressBar *uiNewProgressBar(void)
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
// 14 august 2015
|
// 14 august 2015
|
||||||
#import "uipriv_darwin.h"
|
#import "uipriv_darwin.h"
|
||||||
|
|
||||||
// TODO events
|
|
||||||
|
|
||||||
struct uiSlider {
|
struct uiSlider {
|
||||||
uiDarwinControl c;
|
uiDarwinControl c;
|
||||||
NSSlider *slider;
|
NSSlider *slider;
|
||||||
|
@ -10,20 +8,73 @@ struct uiSlider {
|
||||||
void *onChangedData;
|
void *onChangedData;
|
||||||
};
|
};
|
||||||
|
|
||||||
uiDarwinDefineControl(
|
@interface sliderDelegateClass : NSObject {
|
||||||
|
NSMapTable *sliders;
|
||||||
|
}
|
||||||
|
- (IBAction)onChanged:(id)sender;
|
||||||
|
- (void)registerSlider:(uiSlider *)b;
|
||||||
|
- (void)unregisterSlider:(uiSlider *)b;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation sliderDelegateClass
|
||||||
|
|
||||||
|
- (id)init
|
||||||
|
{
|
||||||
|
self = [super init];
|
||||||
|
if (self)
|
||||||
|
self->sliders = newMap();
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)dealloc
|
||||||
|
{
|
||||||
|
if ([self->sliders count] != 0)
|
||||||
|
complain("attempt to destroy shared slider delegate but sliders are still registered to it");
|
||||||
|
[self->sliders release];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (IBAction)onChanged:(id)sender
|
||||||
|
{
|
||||||
|
uiSlider *s;
|
||||||
|
|
||||||
|
s = (uiSlider *) mapGet(self->sliders, sender);
|
||||||
|
(*(s->onChanged))(s, s->onChangedData);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)registerSlider:(uiSlider *)s
|
||||||
|
{
|
||||||
|
mapSet(self->sliders, s->slider, s);
|
||||||
|
[s->slider setTarget:self];
|
||||||
|
[s->slider setAction:@selector(onChanged:)];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)unregisterSlider:(uiSlider *)s
|
||||||
|
{
|
||||||
|
[s->slider setTarget:nil];
|
||||||
|
[self->sliders removeObjectForKey:s->slider];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
static sliderDelegateClass *sliderDelegate = nil;
|
||||||
|
|
||||||
|
uiDarwinDefineControlWithOnDestroy(
|
||||||
uiSlider, // type name
|
uiSlider, // type name
|
||||||
uiSliderType, // type function
|
uiSliderType, // type function
|
||||||
slider // handle
|
slider, // handle
|
||||||
|
[sliderDelegate unregisterSlider:this]; // on destroy
|
||||||
)
|
)
|
||||||
|
|
||||||
intmax_t uiSliderValue(uiSlider *s)
|
intmax_t uiSliderValue(uiSlider *s)
|
||||||
{
|
{
|
||||||
return PUT_CODE_HERE;
|
// NSInteger is the most similar to intmax_t
|
||||||
|
return [s->slider integerValue];
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiSliderSetValue(uiSlider *s, intmax_t value)
|
void uiSliderSetValue(uiSlider *s, intmax_t value)
|
||||||
{
|
{
|
||||||
// TODO
|
[s->slider setIntegerValue:value];
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiSliderOnChanged(uiSlider *s, void (*f)(uiSlider *, void *), void *data)
|
void uiSliderOnChanged(uiSlider *s, void (*f)(uiSlider *, void *), void *data)
|
||||||
|
@ -55,6 +106,11 @@ uiSlider *uiNewSlider(intmax_t min, intmax_t max)
|
||||||
cell = (NSSliderCell *) [s->slider cell];
|
cell = (NSSliderCell *) [s->slider cell];
|
||||||
[cell setSliderType:NSLinearSlider];
|
[cell setSliderType:NSLinearSlider];
|
||||||
|
|
||||||
|
if (sliderDelegate == nil) {
|
||||||
|
sliderDelegate = [sliderDelegateClass new];
|
||||||
|
[delegates addObject:sliderDelegate];
|
||||||
|
}
|
||||||
|
[sliderDelegate registerSlider:s];
|
||||||
uiSliderOnChanged(s, defaultOnChanged, NULL);
|
uiSliderOnChanged(s, defaultOnChanged, NULL);
|
||||||
|
|
||||||
uiDarwinFinishNewControl(s, uiSlider);
|
uiDarwinFinishNewControl(s, uiSlider);
|
||||||
|
|
Loading…
Reference in New Issue