Files
cappuccino/Tools/XcodeCapp/XcodeCapp/XCCCappuccinoProjectControllerDataView.m
T

167 lines
8.6 KiB
Objective-C

//
// CappuccinoProjectCellView.m
// XcodeCapp
//
// Created by Alexandre Wilhelm on 5/11/15.
// Copyright (c) 2015 cappuccino-project. All rights reserved.
//
#import "XCCCappuccinoProjectControllerDataView.h"
#import "XCCCappuccinoProject.h"
static NSColor * XCCCappuccinoProjectDataViewColorLoading;
static NSColor * XCCCappuccinoProjectDataViewColorStopped;
static NSColor * XCCCappuccinoProjectDataViewColorListening;
static NSColor * XCCCappuccinoProjectDataViewColorProcessing;
static NSColor * XCCCappuccinoProjectDataViewColorError;
@implementation XCCCappuccinoProjectControllerDataView
@synthesize controller = _controller;
+ (void)initialize
{
XCCCappuccinoProjectDataViewColorLoading = [NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0];
XCCCappuccinoProjectDataViewColorStopped = [NSColor colorWithCalibratedRed:138.0/255.0 green:138.0/255.0 blue:138.0/255.0 alpha:1.0];
XCCCappuccinoProjectDataViewColorListening = [NSColor colorWithCalibratedRed:179.0/255.0 green:214.0/255.0 blue:69.0/255.0 alpha:1.0];
XCCCappuccinoProjectDataViewColorProcessing = [NSColor colorWithCalibratedRed:107.0/255.0 green:148.0/255.0 blue:236.0/255.0 alpha:1.0];
XCCCappuccinoProjectDataViewColorError = [NSColor colorWithCalibratedRed:247.0/255.0 green:97.0/255.0 blue:89.0/255.0 alpha:1.0];
}
- (void)viewWillMoveToWindow:(NSWindow *)newWindow
{
if (newWindow)
{
[self->buttonSwitchStatus setTarget:self.controller];
[self->buttonSwitchStatus setAction:@selector(switchProjectListeningStatus:)];
[self->buttonOpenXcodeProject setTarget:self.controller];
[self->buttonOpenXcodeProject setAction:@selector(openProjectInXcode:)];
[self->buttonResetProject setTarget:self.controller];
[self->buttonResetProject setAction:@selector(resetProject:)];
[self->buttonOpenInEditor setTarget:self.controller];
[self->buttonOpenInEditor setAction:@selector(openProjectInEditor:)];
[self->buttonOpenInFinder setTarget:self.controller];
[self->buttonOpenInFinder setAction:@selector(openProjectInFinder:)];
[self->buttonOpenInTerminal setTarget:self.controller];
[self->buttonOpenInTerminal setAction:@selector(openProjectInTerminal:)];
self->boxStatus.borderColor = [NSColor clearColor];
self->boxStatus.fillColor = [NSColor colorWithCalibratedRed:217.0/255.0 green:217.0/255.0 blue:217.0/255.0 alpha:1.0];
[self.controller.cappuccinoProject addObserver:self forKeyPath:@"status" options:NSKeyValueObservingOptionNew context:nil];
[self.controller addObserver:self forKeyPath:@"errors" options:NSKeyValueObservingOptionNew context:nil];
[self.controller.cappuccinoProject addObserver:self forKeyPath:@"processing" options:NSKeyValueObservingOptionNew context:nil];
[self.controller addObserver:self forKeyPath:@"operationsTotal" options:NSKeyValueObservingOptionNew context:nil];
[self.controller addObserver:self forKeyPath:@"operationsProgress" options:NSKeyValueObservingOptionNew context:nil];
[self->fieldNickname bind:NSValueBinding toObject:self.controller.cappuccinoProject withKeyPath:@"nickname" options:nil];
[self->fieldPath bind:NSValueBinding toObject:self.controller.cappuccinoProject withKeyPath:@"projectPath" options:nil];
[self->operationsProgressIndicator startAnimation:self];
self->operationsProgressIndicator.maxValue = 1.0;
}
else
{
[self.controller.cappuccinoProject removeObserver:self forKeyPath:@"status"];
[self.controller removeObserver:self forKeyPath:@"errors"];
[self.controller.cappuccinoProject removeObserver:self forKeyPath:@"processing"];
[self.controller removeObserver:self forKeyPath:@"operationsTotal"];
[self.controller removeObserver:self forKeyPath:@"operationsProgress"];
[self->fieldNickname unbind:NSValueBinding];
[self->fieldPath unbind:NSValueBinding];
[self->operationsProgressIndicator stopAnimation:self];
}
[self _updateDataView];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
dispatch_async(dispatch_get_main_queue(), ^{
[self _updateDataView];
});
}
- (void)_updateDataView
{
switch (self.controller.cappuccinoProject.status)
{
case XCCCappuccinoProjectStatusStopped:
self->boxStatus.fillColor = XCCCappuccinoProjectDataViewColorStopped;
self->buttonSwitchStatus.image = self.backgroundStyle == NSBackgroundStyleDark ? [NSImage imageNamed:@"run-white"] : [NSImage imageNamed:@"run"];
self->operationsProgressIndicator.hidden = YES;
[self->operationsProgressIndicator stopAnimation:self];
break;
case XCCCappuccinoProjectStatusListening:
self->boxStatus.fillColor = [self.controller.errors count] ? XCCCappuccinoProjectDataViewColorError : XCCCappuccinoProjectDataViewColorListening;
self->buttonSwitchStatus.image = self.backgroundStyle == NSBackgroundStyleDark ? [NSImage imageNamed:@"stop-white"] : [NSImage imageNamed:@"stop"];
if (self.controller.operationsTotal == 0)
{
self->operationsProgressIndicator.hidden = YES;
[self->operationsProgressIndicator setNeedsDisplay:YES];
[self->operationsProgressIndicator stopAnimation:self];
}
else if (self.controller.operationsTotal <= 4)
{
self->operationsProgressIndicator.hidden = NO;
self->operationsProgressIndicator.indeterminate = YES;
[self->operationsProgressIndicator startAnimation:self];
}
else if (self.controller.operationsTotal > 4)
{
self->operationsProgressIndicator.hidden = NO;
self->operationsProgressIndicator.indeterminate = NO;
self->operationsProgressIndicator.currentValue = self.controller.operationsProgress;
[self->operationsProgressIndicator startAnimation:self];
[self->operationsProgressIndicator setNeedsDisplay:YES];
}
break;
}
}
- (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle
{
BOOL isStopped = self.controller.cappuccinoProject.status == XCCCappuccinoProjectStatusStopped;
if (backgroundStyle == NSBackgroundStyleDark)
{
self->lineBottom.hidden = YES;
self->operationsProgressIndicator.backgroundColor = [NSColor whiteColor];
self->operationsProgressIndicator.color = [NSColor whiteColor];
self->fieldNickname.textColor = [NSColor whiteColor];
self->fieldPath.textColor = [NSColor whiteColor];
self->buttonSwitchStatus.image = isStopped ? [NSImage imageNamed:@"run-white"] : [NSImage imageNamed:@"stop-white"];
self->buttonOpenInFinder.image = [NSImage imageNamed:@"open-in-finder-white"];
self->buttonOpenInEditor.image = [NSImage imageNamed:@"open-in-editor-white"];
self->buttonOpenInTerminal.image = [NSImage imageNamed:@"open-in-terminal-white"];
self->buttonOpenXcodeProject.image = [NSImage imageNamed:@"open-in-xcode-white"];
self->buttonResetProject.image = [NSImage imageNamed:@"resync-white"];
}
else
{
self->lineBottom.hidden = NO;
self->operationsProgressIndicator.backgroundColor = [NSColor secondaryLabelColor];
self->operationsProgressIndicator.color = [NSColor secondaryLabelColor];
self->fieldNickname.textColor = [NSColor controlTextColor];
self->fieldPath.textColor = [NSColor secondaryLabelColor];
self->buttonSwitchStatus.image = isStopped ? [NSImage imageNamed:@"run"] : [NSImage imageNamed:@"stop"];
self->buttonOpenInFinder.image = [NSImage imageNamed:@"open-in-finder"];
self->buttonOpenInEditor.image = [NSImage imageNamed:@"open-in-editor"];
self->buttonOpenInTerminal.image = [NSImage imageNamed:@"open-in-terminal"];
self->buttonOpenXcodeProject.image = [NSImage imageNamed:@"open-in-xcode"];
self->buttonResetProject.image = [NSImage imageNamed:@"resync"];
}
[super setBackgroundStyle:backgroundStyle];
}
@end