//
// MPPickfieldViewController.m
// MacPass
//
// Created by Michael Starke on 28.11.17.
// Copyright © 2017 HicknHack Software GmbH. All rights reserved.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
//
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#import "MPPickfieldViewController.h"
#import "MPPickfieldTableModel.h"
#import
typedef NS_ENUM(NSUInteger, MPPickfieldTableColumn) {
MPPickfieldNameTableColumn,
MPPIckfieldValueTableColumn
};
@interface MPPickfieldViewController ()
@property (nonatomic, strong, readonly) KPKEntry *representedEntry;
@property (strong) MPPickfieldTableModel *tableModel;
@property (weak) IBOutlet NSTableView *tableView;
@property (copy) NSString *pickedValue;
@end
@implementation MPPickfieldViewController
@dynamic representedEntry;
- (NSString *)nibName {
return @"PickfieldView";
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tableModel = [[MPPickfieldTableModel alloc] initWithEntry:self.representedEntry inDocument:nil];
}
- (KPKEntry *)representedEntry {
if([self.representedObject isKindOfClass:KPKEntry.class]) {
return self.representedObject;
}
return nil;
}
- (void)pickField:(id)sender {
[NSApp stopModalWithCode:NSModalResponseOK];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return self.tableModel.items.count;
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
NSTableCellView *view;
if(tableColumn) {
view = [tableView makeViewWithIdentifier:@"DataCell" owner:self];
}
else {
view = [tableView makeViewWithIdentifier:@"HeaderCell" owner:self];
}
MPPickfieldTableModelRowItem *rowItem = [self.tableModel itemAtIndex:row];
view.textField.stringValue = @"";
if(!rowItem) {
return view;
}
MPPickfieldTableColumn columnIndex = (tableColumn == nil
? MPPickfieldNameTableColumn
: [tableView.tableColumns indexOfObjectIdenticalTo:tableColumn]);
/* group view or first column */
switch (columnIndex) {
case MPPickfieldNameTableColumn:
view.textField.stringValue = rowItem.name;
break;
case MPPIckfieldValueTableColumn:
view.textField.stringValue = rowItem.value;
break;
default:
break;
}
return view;
}
- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row {
MPPickfieldTableModelRowItem *rowItem = [self.tableModel itemAtIndex:row];
return rowItem.isGroup;
}
- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row {
return ![self tableView:tableView isGroupRow:row];
}
- (void)tableViewSelectionDidChange:(NSNotification *)notification {
NSTableView *tableView = notification.object;
if(tableView.selectedRow < 0) {
self.pickedValue = @"";
}
else {
MPPickfieldTableModelRowItem *item = [self.tableModel itemAtIndex:tableView.selectedRow];
self.pickedValue = item ? item.value : @"";
}
}
@end