This repository has been archived by the owner on Mar 5, 2023. It is now read-only.
/
ApplicationDelegate.m
70 lines (53 loc) · 1.83 KB
/
ApplicationDelegate.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
#import "ApplicationDelegate.h"
@implementation ApplicationDelegate
@synthesize panelController = _panelController;
@synthesize menubarController = _menubarController;
#pragma mark -
- (void)dealloc
{
[_panelController removeObserver:self forKeyPath:@"hasActivePanel"];
}
#pragma mark -
void *kContextActivePanel = &kContextActivePanel;
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == kContextActivePanel) {
self.menubarController.hasActiveIcon = self.panelController.hasActivePanel;
}
else {
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
#pragma mark - NSApplicationDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
// Install icon into the menu bar
self.menubarController = [[MenubarController alloc] init];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
// Explicitly remove the icon from the menu bar
self.menubarController = nil;
return NSTerminateNow;
}
#pragma mark - Actions
- (IBAction)togglePanel:(id)sender
{
self.menubarController.hasActiveIcon = !self.menubarController.hasActiveIcon;
self.panelController.hasActivePanel = self.menubarController.hasActiveIcon;
}
#pragma mark - Public accessors
- (PanelController *)panelController
{
if (_panelController == nil) {
_panelController = [[PanelController alloc] initWithDelegate:self];
[_panelController addObserver:self forKeyPath:@"hasActivePanel" options:0 context:kContextActivePanel];
}
return _panelController;
}
#pragma mark - PanelControllerDelegate
- (StatusItemView *)statusItemViewForPanelController:(PanelController *)controller
{
return self.menubarController.statusItemView;
}
@end