forked from ViennaRSS/vienna-rss
/
SplitViewExtensions.m
75 lines (68 loc) · 1.93 KB
/
SplitViewExtensions.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//
// SplitViewExtensions.m
// Vienna
//
// Created by Steve on 6/15/05.
// Copyright (c) 2004-2005 Steve Palmer. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "SplitViewExtensions.h"
/* Code borrowed from http://www.cocoadev.com/index.pl?SavingNSSplitViewPosition
* but I don't see any author associated so I'm unable to credit. Feel free to
* edit and accredit as appropriate.
*/
@implementation NSSplitView (SplitViewExtensions)
/* layout
* Returns an NSArray of the splitview layouts.
*/
-(NSArray *)layout
{
NSMutableArray * viewRects = [NSMutableArray array];
NSEnumerator * viewEnum = [[self subviews] objectEnumerator];
NSView * view;
NSRect frame;
while ((view = [viewEnum nextObject]) != nil)
{
if ([self isSubviewCollapsed:view])
frame = NSZeroRect;
else
frame = [view frame];
[viewRects addObject:NSStringFromRect(frame)];
}
return viewRects;
}
/* setLayout
* Sets the splitview layout from the specified array
*/
-(void)setLayout:(NSArray *)viewRects
{
NSArray * views = [self subviews];
int i, count;
NSRect frame;
count = MIN([viewRects count], [views count]);
for (i = 0; i < count; i++)
{
frame = NSRectFromString([viewRects objectAtIndex: i]);
if (NSIsEmptyRect(frame))
{
frame = [[views objectAtIndex:i] frame];
if( [self isVertical] )
frame.size.width = 0;
else
frame.size.height = 0;
}
[[views objectAtIndex:i] setFrame:frame];
}
}
@end