Есть ли пользовательский элемент управления, похожий на NSLevelIndicator с обратным окрашиванием?

Мне нужен контроль, похожий на NSLevelIndicator в NSContinuousCapacityLevelIndicatorStyle, но с обратной окраской. С NSLevelIndicatorцвета выглядят следующим образом: зеленый до уровня предупреждения, желтый от предупреждения до критического уровня, красный от критического уровня и далее. Это хорошо для, скажем, регулятора громкости. Но у меня есть значение, которое соответствует заполнению бензобака: я хочу зеленый для полного бака, желтый для предупреждения и красный для пустого. Я не нашел никаких средств, чтобы изменить цвета NSLevelIndicator,

Итак, прежде чем я начну писать свой собственный элемент управления, есть ли NSControl доступно где-то, что уже делает то, что я хочу (конечно, я погуглил, прежде чем спрашивать, но безрезультатно)?

Спасибо за прочтение.

2 ответа

Решение

NSLevelIndicator (по крайней мере, в настоящее время) делает это автоматически для вас, если вы установите уровень предупреждения выше критического уровня!

Подкласс NSLevelIndicator и написать свой - (void)drawRect:(NSRect)theRect

#import <Cocoa/Cocoa.h>


@interface PBLevelIndicator : NSLevelIndicator {

    unsigned int mPercent;
}


@end  

#import "PBLevelIndicator.h"


@implementation PBLevelIndicator
- (void)drawRect:(NSRect)theRect
{
    NSRect fillingRect = theRect;
    fillingRect.size.width = theRect.size.width*mPercent/100;   
    NSColor *indicatorColor;

    if( mPercent >= 99 )
    {
        indicatorColor = [NSColor greenColor];
    }
    else if (mPercent >50) 
    {
        indicatorColor = [NSColor yellowColor];
    }
    else
    {
        indicatorColor = [NSColor redColor];
    }
    [indicatorColor set];
    NSRectFill(fillingRect);
}

-(void) setPercentage:(unsigned int) inPercent
{
    mPercent = inPercent;
    [self setNeedsDisplay:YES];
}
@end
Другие вопросы по тегам