You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.8 KiB
174 lines
5.8 KiB
// |
|
// CLTableViewDataSource.m |
|
// Clocker |
|
// |
|
// Created by Abhishek Banthia on 7/25/16. |
|
// |
|
// |
|
|
|
#import "CLTableViewDataSource.h" |
|
#import "CLTimezoneCellView.h" |
|
#import "CLTimezoneData.h" |
|
#import "CLTimezoneDataOperations.h" |
|
#import "CommonStrings.h" |
|
#import "CLOneWindowController.h" |
|
|
|
NSString *const CLTimezoneCellViewID = @"timeZoneCell"; |
|
|
|
@interface CLTableViewDataSource() |
|
|
|
|
|
@end |
|
|
|
@implementation CLTableViewDataSource |
|
|
|
-(instancetype)initWithItems:(NSMutableArray *)objects |
|
{ |
|
self = [super init]; |
|
|
|
if (self) { |
|
self.timezoneObjects = objects; |
|
} |
|
|
|
return self; |
|
} |
|
|
|
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView |
|
{ |
|
return self.timezoneObjects.count; |
|
} |
|
-(NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row |
|
{ |
|
CLTimezoneCellView *cell = [tableView makeViewWithIdentifier:CLTimezoneCellViewID owner:self]; |
|
|
|
CLTimezoneData *dataObject = [CLTimezoneData getCustomObject:self.timezoneObjects[row]]; |
|
|
|
CLTimezoneDataOperations *dataOperation = [[CLTimezoneDataOperations alloc] initWithTimezoneData:dataObject]; |
|
|
|
cell.sunriseSetTime.stringValue = [dataOperation getFormattedSunriseOrSunsetTimeAndSliderValue:self.futureSliderValue]; |
|
|
|
cell.relativeDate.stringValue = [dataOperation getDateForTimeZoneWithFutureSliderValue:self.futureSliderValue andDisplayType:CLPanelDisplay]; |
|
|
|
cell.time.stringValue = [dataOperation getTimeForTimeZoneWithFutureSliderValue:self.futureSliderValue]; |
|
|
|
cell.rowNumber = row; |
|
|
|
cell.customName.stringValue = [dataObject getFormattedTimezoneLabel]; |
|
|
|
[self tableView:tableView setupCell:cell forRow:row]; |
|
|
|
return cell; |
|
} |
|
|
|
- (void)tableView:(NSTableView *)tableView setupCell:(CLTimezoneCellView *)cell forRow:(NSInteger)row |
|
{ |
|
|
|
NSNumber *theme = [[NSUserDefaults standardUserDefaults] objectForKey:CLThemeKey]; |
|
|
|
CLTimezoneData *dataObject = [CLTimezoneData getCustomObject:self.timezoneObjects[row]]; |
|
|
|
NSTextView *customLabel = (NSTextView*)[cell.relativeDate.window |
|
fieldEditor:YES |
|
forObject:cell.relativeDate]; |
|
|
|
if (theme.integerValue == 1) |
|
{ |
|
tableView.backgroundColor = [NSColor blackColor]; |
|
customLabel.insertionPointColor = [NSColor whiteColor]; |
|
cell.sunriseSetImage.image = dataObject.sunriseOrSunset ? |
|
[NSImage imageNamed:@"WhiteSunrise"] : [NSImage imageNamed:@"WhiteSunset"]; |
|
} |
|
else |
|
{ |
|
|
|
tableView.backgroundColor = [NSColor whiteColor]; |
|
customLabel.insertionPointColor = [NSColor blackColor]; |
|
cell.sunriseSetImage.image = dataObject.sunriseOrSunset ? |
|
[NSImage imageNamed:@"Sunrise"] : [NSImage imageNamed:@"Sunset"]; |
|
} |
|
|
|
NSNumber *displaySunriseSunsetTime = [[NSUserDefaults standardUserDefaults] objectForKey:CLSunriseSunsetTime]; |
|
|
|
cell.sunriseSetTime.hidden = ([displaySunriseSunsetTime isEqualToNumber:@(0)] && cell.sunriseSetTime.stringValue.length > 0) ? NO : YES; |
|
|
|
cell.sunriseSetImage.hidden = [displaySunriseSunsetTime isEqualToNumber:@(0)] && cell.sunriseSetTime.stringValue.length > 0 ? NO : YES; |
|
|
|
[cell setUpLayout]; |
|
|
|
} |
|
|
|
|
|
|
|
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard |
|
{ |
|
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes]; |
|
[pboard declareTypes:@[CLDragSessionKey] owner:self]; |
|
[pboard setData:data forType:CLDragSessionKey]; |
|
return YES; |
|
} |
|
|
|
-(void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row |
|
{ |
|
if ([object isKindOfClass:[NSString class]]) |
|
{ |
|
CLTimezoneData *dataObject = self.timezoneObjects[row]; |
|
|
|
if ([dataObject.formattedAddress isEqualToString:object]) |
|
{ |
|
return; |
|
} |
|
|
|
[dataObject setLabelForTimezone:object]; |
|
(self.timezoneObjects)[row] = dataObject; |
|
[[NSUserDefaults standardUserDefaults] setObject:self.timezoneObjects forKey:CLDefaultPreferenceKey]; |
|
[tableView reloadData]; |
|
} |
|
} |
|
|
|
-(BOOL)tableView:(NSTableView *)tableView acceptDrop:(id<NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation |
|
{ |
|
|
|
if (row == self.timezoneObjects.count) |
|
{ |
|
row -= 1; |
|
} |
|
|
|
NSPasteboard *pBoard = [info draggingPasteboard]; |
|
|
|
NSData *data = [pBoard dataForType:CLDragSessionKey]; |
|
|
|
NSIndexSet *rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:data]; |
|
|
|
[self.timezoneObjects exchangeObjectAtIndex:rowIndexes.firstIndex |
|
withObjectAtIndex:row]; |
|
|
|
[[NSUserDefaults standardUserDefaults] setObject:self.timezoneObjects |
|
forKey:CLDefaultPreferenceKey]; |
|
|
|
|
|
[[NSApplication sharedApplication].windows enumerateObjectsUsingBlock:^(NSWindow * _Nonnull window, NSUInteger idx, BOOL * _Nonnull stop) { |
|
if ([window.windowController isMemberOfClass:[CLOneWindowController class]]) { |
|
CLOneWindowController *oneWindowController = (CLOneWindowController *) window.windowController; |
|
[oneWindowController.preferencesView refereshTimezoneTableView]; |
|
} |
|
|
|
}]; |
|
|
|
[tableView reloadData]; |
|
|
|
return YES; |
|
} |
|
|
|
-(NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id<NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation |
|
{ |
|
return NSDragOperationEvery; |
|
} |
|
|
|
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row |
|
{ |
|
NSNumber *userFontSize = [[NSUserDefaults standardUserDefaults] objectForKey:CLUserFontSizePreference]; |
|
return 61 + userFontSize.integerValue; |
|
} |
|
|
|
|
|
@end
|
|
|