Skip to content

Commit

Permalink
Make MainWindowController a real NSWindowController, extract Preferen…
Browse files Browse the repository at this point in the history
…cesWindowController, integrate stelle's background
  • Loading branch information
andreyvit committed Jul 18, 2011
1 parent d916f7e commit b9921b3
Show file tree
Hide file tree
Showing 17 changed files with 3,037 additions and 1,806 deletions.
18 changes: 14 additions & 4 deletions LiveReload/Classes/Application/LiveReloadAppDelegate.h
Expand Up @@ -3,13 +3,23 @@

@class StatusItemController;
@class MainWindowController;
@class PreferencesWindowController;

@interface LiveReloadAppDelegate : NSObject <NSApplicationDelegate> {
StatusItemController *_statusItemController;
MainWindowController *_mainWindowController;
StatusItemController *_statusItemController;
MainWindowController *_mainWindowController;
PreferencesWindowController *_preferencesWindowController;
}

@property(nonatomic, retain) IBOutlet StatusItemController *statusItemController;
@property(nonatomic, retain) IBOutlet MainWindowController *mainWindowController;
@property(nonatomic, retain) StatusItemController *statusItemController;
@property(nonatomic, retain) MainWindowController *mainWindowController;
@property(nonatomic, retain) PreferencesWindowController *preferencesWindowController;

@property(nonatomic, getter=isWindowVisible, readonly) BOOL windowVisible;
- (IBAction)toggleWindow:sender;
- (IBAction)displayWindow:sender;
- (IBAction)hideWindow:sender;
- (IBAction)displayMainWindow:sender;
- (IBAction)displayPreferencesWindow:sender;

@end
113 changes: 106 additions & 7 deletions LiveReload/Classes/Application/LiveReloadAppDelegate.m
Expand Up @@ -3,14 +3,18 @@
#import "Workspace.h"
#import "StatusItemController.h"
#import "MainWindowController.h"
#import "PreferencesWindowController.h"
#import "CommunicationController.h"
#import "LoginItemController.h"
#import "PluginManager.h"

#import "NSWindowFlipper.h"


@interface LiveReloadAppDelegate ()

- (void)pingServer;
- (void)considerShowingWindowOnAppStartup;

@end

Expand All @@ -19,6 +23,7 @@ @implementation LiveReloadAppDelegate

@synthesize statusItemController=_statusItemController;
@synthesize mainWindowController=_mainWindowController;
@synthesize preferencesWindowController = _preferencesWindowController;

// just to make XDry happy; won't ever be deallocated
- (void)dealloc {
Expand Down Expand Up @@ -47,18 +52,24 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
}

[[PluginManager sharedPluginManager] reloadPlugins];
[self.mainWindowController startUp];

[self pingServer];
[NSTimer scheduledTimerWithTimeInterval:60*60*24 target:self selector:@selector(pingServer) userInfo:nil repeats:YES];

_statusItemController = [[StatusItemController alloc] init];
[self.statusItemController showStatusBarIcon];
[[CommunicationController sharedCommunicationController] startServer];
[self.mainWindowController performSelector:@selector(considerShowingOnAppStartup) withObject:nil afterDelay:0.15];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
_mainWindowController = [[MainWindowController alloc] init];
_preferencesWindowController = [[PreferencesWindowController alloc] init];

[[CommunicationController sharedCommunicationController] startServer];

[self considerShowingWindowOnAppStartup];

[self pingServer];
[NSTimer scheduledTimerWithTimeInterval:60*60*24 target:self selector:@selector(pingServer) userInfo:nil repeats:YES];
});
}

- (void)applicationDidResignActive:(NSNotification *)notification {
[self.mainWindowController hideOnAppDeactivation];
}

- (void)pingServer {
Expand All @@ -73,4 +84,92 @@ - (void)pingServerInBackground {
[pool drain];
}


#pragma mark -

- (void)positionWindow:(NSWindow *)window {
NSRect frame = window.frame;
NSPoint itemPos = self.statusItemController.statusItemPosition;
frame.origin.x = itemPos.x - frame.size.width / 2;
frame.origin.y = itemPos.y - frame.size.height;
[window setFrame:frame display:YES];
}

- (BOOL)isMainWindowVisible {
return [self.mainWindowController.window isVisible];
}

- (BOOL)isPreferencesWindowVisible {
return [self.preferencesWindowController.window isVisible];
}

- (BOOL)isWindowVisible {
return [self isMainWindowVisible] || [self isPreferencesWindowVisible];
}

- (IBAction)displayMainWindow:sender {
[self positionWindow:self.mainWindowController.window];
[self.mainWindowController willShow];
if ([self isPreferencesWindowVisible]) {
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:PreferencesDoneKey];
[[NSUserDefaults standardUserDefaults] synchronize];

[self.preferencesWindowController.window flipToWindow:self.mainWindowController.window withDuration:0.5 shadowed:NO];
} else {
[NSApp activateIgnoringOtherApps:YES];
[self.mainWindowController.window makeKeyAndOrderFront:nil];
}
}

- (IBAction)displayPreferencesWindow:sender {
[self positionWindow:self.preferencesWindowController.window];
[self.preferencesWindowController willShow];
if ([self isMainWindowVisible]) {
[self.mainWindowController.window flipToWindow:self.preferencesWindowController.window withDuration:0.5 shadowed:NO];
} else {
[NSApp activateIgnoringOtherApps:YES];
[self.preferencesWindowController.window makeKeyAndOrderFront:nil];
}
}

- (void)hideMainWindow {
[self.mainWindowController.window orderOut:nil];
}

- (void)hidePreferencesWindow {
[self.preferencesWindowController.window orderOut:nil];
}

- (IBAction)toggleWindow:sender {
if ([self isWindowVisible])
[self hideWindow:sender];
else
[self displayWindow:sender];
}

- (IBAction)displayWindow:sender {
if (![[NSUserDefaults standardUserDefaults] boolForKey:PreferencesDoneKey]) {
[self displayPreferencesWindow:sender];
} else {
[self displayMainWindow:sender];
}
}

- (IBAction)hideWindow:sender {
if ([self isMainWindowVisible])
[self hideMainWindow];
if ([self isPreferencesWindowVisible])
[self hidePreferencesWindow];
}


#pragma mark -

- (void)considerShowingWindowOnAppStartup {
if (![[NSUserDefaults standardUserDefaults] boolForKey:PreferencesDoneKey]) {
[self displayPreferencesWindow:nil];
}
}


@end
47 changes: 2 additions & 45 deletions LiveReload/Classes/Controllers/MainWindowController.h
Expand Up @@ -3,80 +3,37 @@
#import "PXListView.h"


@class MAAttachedWindow;
@class StatusItemController;
@class ProjectOptionsSheetController;
@class Project;


@interface MainWindowController : NSObject <PXListViewDelegate> {
NSButton *_startAtLoginCheckbox;
NSButton *_installSafariExtensionButton;
NSButton *_installChromeExtensionButton;
NSButton *_installFirefoxExtensionButton;
NSTextField *_versionLabel;
NSTextField *_webSiteLabel;
NSButton *_backToMainWindowButton;
@interface MainWindowController : NSWindowController <PXListViewDelegate> {
NSTextField *_connectionStateLabel;
BOOL _inSettingsMode;
BOOL _inProjectEditorMode;
BOOL _windowVisible;
NSTextField *_clickToAddFolderLabel;

ProjectOptionsSheetController *projectEditorController;

NSView *_mainView;
NSView *_settingsView;
PXListView *_listView;
StatusItemController *_statusItemController;
NSWindow *_window;
NSButton *_addProjectButton;
NSButton *_removeProjectButton;

NSInteger _sheetRow;
}


@property(nonatomic, retain) NSWindow *window;

@property(nonatomic, retain) IBOutlet StatusItemController *statusItemController;

@property(nonatomic, retain) IBOutlet NSView *mainView;

@property(nonatomic, retain) IBOutlet NSView *settingsView;

@property(nonatomic, retain) IBOutlet PXListView *listView;

@property(nonatomic, retain) IBOutlet NSButton *addProjectButton;

@property(nonatomic, retain) IBOutlet NSButton *removeProjectButton;
@property (assign) IBOutlet NSTextField *clickToAddFolderLabel;

@property(nonatomic, readonly) BOOL windowVisible;

- (void)startUp;

- (void)toggleMainWindow;
- (void)showMainWindow;

- (void)considerShowingOnAppStartup;
- (void)hideOnAppDeactivation;
- (void)willShow;

- (IBAction)addProjectClicked:(id)sender;
- (IBAction)removeProjectClicked:(id)sender;

- (IBAction)showSettings:(id)sender;
- (IBAction)doneWithSettings:(id)sender;

- (IBAction)quit:(id)sender;

@property (assign) IBOutlet NSButton *startAtLoginCheckbox;
@property (assign) IBOutlet NSButton *installSafariExtensionButton;
@property (assign) IBOutlet NSButton *installChromeExtensionButton;
@property (assign) IBOutlet NSButton *installFirefoxExtensionButton;
@property (assign) IBOutlet NSTextField *versionLabel;
@property (assign) IBOutlet NSTextField *webSiteLabel;
@property (assign) IBOutlet NSButton *backToMainWindowButton;
@property (assign) IBOutlet NSTextField *connectionStateLabel;

- (void)projectAdded:(Project *)project;
Expand Down

0 comments on commit b9921b3

Please sign in to comment.