/
WGRootController.m
104 lines (81 loc) · 3.17 KB
/
WGRootController.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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
Copyright (C) 2010-2011 Peter Hajas, Dustin Howett
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 <http://www.gnu.org/licenses/>.
*/
#import "WGRootController.h"
#define WIDGET_PATH @"/Library/Application Support/Widge/Widgets/"
@implementation WGRootController
-(id)init
{
self = [super init];
if(self)
{
widgetViewControllers = [[NSMutableArray alloc] init];
widgetObjects = [[NSMutableArray alloc] init];
CGRect screenBounds = [[UIScreen mainScreen] bounds];
widgetView = [[UIView alloc] initWithFrame:CGRectMake(0, 20, bounds.width, bounds.height)];
}
return self;
}
-(void)loadWidgetBundles
{
//Load all paths for the widget bundles
NSArray *bundleNames = [[NSFileManager defaultManager]
contentsOfDirectoryAtPath:WIDGET_PATH
error:nil];
NSMutableArray *paths = [[[NSMutableArray alloc] init] autorelease];
for(NSString *bundleName in bundleNames)
{
NSString *bundlePath = [WIDGET_PATH stringByAppendingPathComponent:bundleName];
[paths addObject:bundlePath];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
[widgetViewControllers addObject:[bundle principalClass]];
}
}
-(void)layOutWidgets
{
// Iterate through the widgets, laying them out in our view
int xCrosshair = 0;
int yCrosshair = 0;
for(WGWidgetViewController* widgetViewController in widgetViewControllers)
{
// Allocate the widget
WGWidgetViewController* widget = [[widgetViewController alloc] init];
[widgetObjects addObject:widget];
// If there's enough room for the widget to the right of our crosshair, put it there
if((kDeviceWidgetWidth - xCrosshair) <= [widget iconColumnsWide])
{
widget.view.origin = CGPointMake(xCrosshair * kIconPixelDimensions, yCrosshair * kIconPixelDimensions);
xCrosshair += [widget iconColumnsWide];
}
//If there's not enough room, let's put it below
else
{
xCrosshair = 0;
yCrosshair += 1; // This is not good
widget.view.origin = CGPointMake(xCrosshair * kIconPixelDimensions, yCrosshair * kIconPixelDimensions);
}
[widgetView addSubview: widget.view];
}
}
//This is for demo purposes only:
-(WGWidgetViewController *)initDemoWidget
{
if([widgetViewControllers count] != 0)
{
WGWidgetViewController* widget = [[[widgetViewControllers objectAtIndex:0] alloc] init];
[widget.view setFrame:CGRectMake(0,0,160,110)];
return widget;
}
return nil;
}
@end