Skip to content
Snippets Groups Projects
Commit 60888ea0 authored by George Nachman's avatar George Nachman
Browse files

Add missing files for multiple arrangements

parent 08591bcd
No related branches found
No related tags found
No related merge requests found
//
// ArrangementPreviewView.h
// iTerm
//
// Created by George Nachman on 8/6/11.
// Copyright 2011 Georgetech. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface ArrangementPreviewView : NSView {
NSArray *arrangement_;
}
- (void)setArrangement:(NSArray*)arrangement;
- (void)drawRect:(NSRect)rect;
@end
//
// ArrangementPreviewView.m
// iTerm
//
// Created by George Nachman on 8/6/11.
// Copyright 2011 Georgetech. All rights reserved.
//
#import "ArrangementPreviewView.h"
#import "PseudoTerminal.h"
@implementation ArrangementPreviewView
- (void)dealloc
{
[arrangement_ release];
[super dealloc];
}
- (void)setArrangement:(NSArray*)arrangement
{
[arrangement_ autorelease];
arrangement_ = [arrangement copy];
}
- (void)drawRect:(NSRect)dirtyRect {
[[NSColor lightGrayColor] set];
NSRectFill(dirtyRect);
NSArray *screens = [NSScreen screens];
CGFloat xMax = 0, yMax = 0;
for (NSScreen *screen in screens) {
NSRect frame = [screen frame];
CGFloat x = frame.origin.x + frame.size.width;
CGFloat y = frame.origin.y + frame.size.height;
xMax = MAX(xMax, x);
yMax = MAX(yMax, y);
}
double xScale = [self frame].size.width / xMax;
double yScale = [self frame].size.height / yMax;
double scale = MIN(xScale, yScale);
double yCorrection = MAX(0, ([self frame].size.height - yMax * scale) / 2);
double xCorrection = MAX(0, ([self frame].size.width - xMax * scale) / 2);
NSMutableArray *screenFrames = [NSMutableArray array];
for (NSScreen *screen in screens) {
NSRect frame = [screen frame];
NSRect rect = NSMakeRect(frame.origin.x * scale + xCorrection,
frame.origin.y * scale + yCorrection,
frame.size.width * scale,
frame.size.height * scale);
[[NSColor blackColor] set];
NSFrameRect(rect);
rect.origin.x++;
rect.origin.y++;
rect.size.width -= 2;
rect.size.height -= 2;
[[NSColor colorWithCalibratedRed:0.270 green:0.545 blue:0.811 alpha:1] set];
NSRectFill(rect);
[screenFrames addObject:[NSValue valueWithRect:rect]];
}
for (NSDictionary* terminalArrangement in arrangement_) {
[PseudoTerminal drawArrangementPreview:terminalArrangement screenFrames:screenFrames];
}
}
- (BOOL)isFlipped
{
return YES;
}
@end
//
// ArrangementsDataSource.h
// iTerm
//
// Created by George Nachman on 8/6/11.
// Copyright 2011 Georgetech. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "ArrangementPreviewView.h"
@interface WindowArrangements : NSObject {
IBOutlet NSTableColumn *defaultColumn_;
IBOutlet NSTableColumn *titleColumn_;
IBOutlet NSTableView *tableView_;
IBOutlet ArrangementPreviewView *previewView_;
IBOutlet NSButton *deleteButton_;
IBOutlet NSButton *defaultButton_;
}
+ (WindowArrangements *)sharedInstance;
+ (int)count;
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView;
+ (void)setArrangement:(NSArray *)arrangement withName:(NSString *)name;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex;
+ (BOOL)hasWindowArrangement:(NSString *)name;
+ (NSArray *)arrangementWithName:(NSString *)name;
+ (NSString *)defaultArrangementName;
- (NSArray *)defaultArrangement;
+ (void)makeDefaultArrangement:(NSString *)name;
+ (NSArray *)allNames;
- (IBAction)setDefault:(id)sender;
- (IBAction)deleteSelectedArrangement:(id)sender;
#pragma mark Delegate methods
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification;
@end
//
// ArrangementsDataSource.m
// iTerm
//
// Created by George Nachman on 8/6/11.
// Copyright 2011 Georgetech. All rights reserved.
//
#import "WindowArrangements.h"
#import "PreferencePanel.h"
static NSString* WINDOW_ARRANGEMENTS = @"Window Arrangements";
static NSString* DEFAULT_ARRANGEMENT_KEY = @"Default Arrangement Name";
@implementation WindowArrangements
+ (WindowArrangements *)sharedInstance
{
return [[PreferencePanel sharedInstance] arrangements];
}
- (void)updateActionsEnabled
{
[deleteButton_ setEnabled:([WindowArrangements count] > 0) && ([tableView_ selectedRow] >= 0)];
[defaultButton_ setEnabled:([WindowArrangements count] > 0) && ([tableView_ selectedRow] >= 0)];
}
- (void)awakeFromNib
{
[self updateActionsEnabled];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTableView:)
name:@"iTermSavedArrangementChanged"
object:nil];
}
+ (BOOL)hasWindowArrangement:(NSString *)name;
{
NSDictionary *arrangements = [[NSUserDefaults standardUserDefaults] objectForKey:WINDOW_ARRANGEMENTS];
return [arrangements objectForKey:name] != nil;
}
+ (int)count
{
NSDictionary *arrangements = [[NSUserDefaults standardUserDefaults] objectForKey:WINDOW_ARRANGEMENTS];
return [arrangements count];
}
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
int n = [WindowArrangements count];
return n;
}
+ (NSDictionary *)arrangements
{
return [[NSUserDefaults standardUserDefaults] objectForKey:WINDOW_ARRANGEMENTS];
}
+ (void)postChangeNotification
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"iTermSavedArrangementChanged"
object:nil
userInfo:nil];
}
+ (void)setArrangement:(NSArray *)arrangement withName:(NSString *)name
{
NSMutableDictionary *arrangements = [NSMutableDictionary dictionaryWithDictionary:[WindowArrangements arrangements]];
[arrangements setObject:arrangement forKey:name];
[[NSUserDefaults standardUserDefaults] setObject:arrangements forKey:WINDOW_ARRANGEMENTS];
if ([WindowArrangements count] == 1) {
[WindowArrangements makeDefaultArrangement:name];
}
[WindowArrangements postChangeNotification];
}
- (NSString *)nameAtIndex:(int)rowIndex
{
NSArray *keys = [WindowArrangements allNames];
return [keys objectAtIndex:rowIndex];
}
- (void)updatePreviewView
{
int rowIndex = [tableView_ selectedRow];
if (rowIndex >= 0) {
[previewView_ setArrangement:[WindowArrangements arrangementWithName:[self nameAtIndex:rowIndex]]];
} else {
[previewView_ setArrangement:nil];
}
[previewView_ setNeedsDisplay:YES];
}
- (void)updateTableView:(id)sender
{
[tableView_ reloadData];
[self updateActionsEnabled];
[self updatePreviewView];
}
+ (void)makeDefaultArrangement:(NSString *)name
{
[[NSUserDefaults standardUserDefaults] setObject:name forKey:DEFAULT_ARRANGEMENT_KEY];
[WindowArrangements postChangeNotification];
}
+ (NSString *)defaultArrangementName
{
return [[NSUserDefaults standardUserDefaults] objectForKey:DEFAULT_ARRANGEMENT_KEY];
}
- (NSArray *)defaultArrangement
{
return [[WindowArrangements arrangements] objectForKey:[WindowArrangements defaultArrangementName]];
}
+ (NSArray *)arrangementWithName:(NSString *)name
{
if (!name) {
name = [WindowArrangements defaultArrangementName];
}
return [[WindowArrangements arrangements] objectForKey:name];
}
+ (NSArray *)allNames
{
NSArray *keys = [[WindowArrangements arrangements] allKeys];
return [keys sortedArrayUsingSelector:@selector(compare:)];
}
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
NSString *key = [self nameAtIndex:rowIndex];
if (aTableColumn == defaultColumn_) {
if ([key isEqualToString:[WindowArrangements defaultArrangementName]]) {
return @"✓";
} else {
return @"";
}
} else {
return key;
}
}
- (IBAction)setDefault:(id)sender
{
int rowid = [tableView_ selectedRow];
if (rowid < 0) {
return;
}
[WindowArrangements makeDefaultArrangement:[self nameAtIndex:rowid]];
[tableView_ reloadData];
}
- (void)setDefaultIfNeededAtRow:(int)rowid
{
if ([WindowArrangements count] > 0) {
if ([WindowArrangements arrangementWithName:[WindowArrangements defaultArrangementName]] == nil) {
int newDefault = rowid;
if (newDefault >= [WindowArrangements count]) {
newDefault = [WindowArrangements count] - 1;
}
[WindowArrangements makeDefaultArrangement:[[WindowArrangements allNames] objectAtIndex:newDefault]];
}
}
}
- (IBAction)deleteSelectedArrangement:(id)sender
{
int rowid = [tableView_ selectedRow];
if (rowid < 0) {
return;
}
NSMutableDictionary *temp = [NSMutableDictionary dictionaryWithDictionary:[WindowArrangements arrangements]];
[temp removeObjectForKey:[self nameAtIndex:rowid]];
[[NSUserDefaults standardUserDefaults] setObject:temp forKey:WINDOW_ARRANGEMENTS];
[self setDefaultIfNeededAtRow:rowid];
[tableView_ reloadData];
[WindowArrangements postChangeNotification];
}
#pragma mark Delegate methods
- (void)tableViewSelectionDidChange:(NSNotification *)aNotification
{
[self updatePreviewView];
[self updateActionsEnabled];
}
@end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment