| /* |
| * Copyright (C) 2004-2015 Savoir-Faire Linux Inc. |
| * Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com> |
| * |
| * 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, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Additional permission under GNU GPL version 3 section 7: |
| * |
| * If you modify this program, or any covered work, by linking or |
| * combining it with the OpenSSL project's OpenSSL library (or a |
| * modified version of that library), containing parts covered by the |
| * terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc. |
| * grants you additional permission to convey the resulting work. |
| * Corresponding Source for a non-source form of such a combination |
| * shall include the source code for the parts of OpenSSL used as well |
| * as that of the covered work. |
| */ |
| #import "PreferencesVC.h" |
| |
| #import <QuartzCore/QuartzCore.h> |
| |
| #import <accountmodel.h> |
| #import <audio/codecmodel.h> |
| |
| #import "AccountsVC.h" |
| #import "GeneralPrefsVC.h" |
| #import "AudioPrefsVC.h" |
| #import "VideoPrefsVC.h" |
| #import "Constants.h" |
| |
| @interface PreferencesVC () |
| |
| @property NSButton* toggleAdvancedSettings; |
| |
| @end |
| |
| @implementation PreferencesVC |
| @synthesize toggleAdvancedSettings; |
| |
| static NSString* const kProfilePrefsIdentifier = @"ProfilesPrefsIdentifier"; |
| static NSString* const kGeneralPrefsIdentifier = @"GeneralPrefsIdentifier"; |
| static NSString* const kAudioPrefsIdentifer = @"AudioPrefsIdentifer"; |
| static NSString* const kAncragePrefsIdentifer = @"AncragePrefsIdentifer"; |
| static NSString* const kVideoPrefsIdentifer = @"VideoPrefsIdentifer"; |
| static NSString* const kDonePrefsIdentifer = @"DonePrefsIdentifer"; |
| static NSString* const kPowerSettingsIdentifer = @"PowerSettingsIdentifer"; |
| |
| -(void)loadView |
| { |
| [super loadView]; |
| |
| [self displayGeneral:nil]; |
| |
| [self.view setWantsLayer:YES]; |
| self.view.layer.backgroundColor = [NSColor windowBackgroundColor].CGColor; |
| |
| // Set the layer redraw policy. This would be better done in |
| // the initialization method of a NSView subclass instead of here. |
| self.view.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay; |
| |
| [self.view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; |
| |
| CGRect frame = CGRectOffset(self.view.frame, 0, -self.view.frame.size.height); |
| |
| [CATransaction begin]; |
| CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; |
| animation.fromValue = @(frame.origin.y); |
| animation.toValue = @(self.view.frame.origin.y); |
| animation.duration = 0.3f; |
| |
| [animation setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:.7 :0.9 :1 :1]]; |
| [self.view.layer addAnimation:animation forKey:animation.keyPath]; |
| [CATransaction commit]; |
| } |
| |
| - (void) close |
| { |
| AccountModel::instance()->save(); |
| |
| CGRect frame = CGRectOffset(self.view.frame, 0, -self.view.frame.size.height); |
| |
| [CATransaction begin]; |
| CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position.y"]; |
| animation.fromValue = @(self.view.frame.origin.y); |
| animation.toValue = @(frame.origin.y); |
| animation.duration = 0.3f; |
| [animation setTimingFunction:[CAMediaTimingFunction functionWithControlPoints:.7 :0.9 :1 :1]]; |
| |
| [CATransaction setCompletionBlock:^{ |
| [self.view removeFromSuperview]; |
| }]; |
| |
| [self.view.layer addAnimation:animation forKey:animation.keyPath]; |
| |
| // set final layer position to prevent glitching back to original one |
| [self.view.layer setPosition:frame.origin];; |
| [CATransaction commit]; |
| } |
| |
| - (void)displayGeneral:(NSToolbarItem *)sender { |
| if (self.currentVC != nil) { |
| [self.currentVC.view removeFromSuperview]; |
| } |
| self.generalPrefsVC = [[GeneralPrefsVC alloc] initWithNibName:@"GeneralPrefs" bundle:nil]; |
| [self.view addSubview:self.generalPrefsVC.view]; |
| [self.generalPrefsVC.view setFrame:[self.view bounds]]; |
| self.currentVC = self.generalPrefsVC; |
| } |
| |
| - (void)displayAudio:(NSToolbarItem *)sender { |
| if (self.currentVC != nil) { |
| [self.currentVC.view removeFromSuperview]; |
| } |
| self.audioPrefsVC = [[AudioPrefsVC alloc] initWithNibName:@"AudioPrefs" bundle:nil]; |
| [self.view addSubview:self.audioPrefsVC.view]; |
| [self.audioPrefsVC.view setFrame:[self.view bounds]]; |
| self.currentVC = self.audioPrefsVC; |
| } |
| |
| - (void)displayAncrage:(NSToolbarItem *)sender { |
| |
| } |
| |
| - (void)displayVideo:(NSToolbarItem *)sender { |
| if (self.currentVC != nil) { |
| [self.currentVC.view removeFromSuperview]; |
| } |
| self.videoPrefsVC = [[VideoPrefsVC alloc] initWithNibName:@"VideoPrefs" bundle:nil]; |
| [self.view addSubview:self.videoPrefsVC.view]; |
| [self.videoPrefsVC.view setFrame:[self.view bounds]]; |
| self.currentVC = self.videoPrefsVC; |
| } |
| |
| - (void) displayAccounts:(NSToolbarItem *) sender { |
| if (self.currentVC != nil) { |
| [self.currentVC.view removeFromSuperview]; |
| } |
| self.accountsPrefsVC = [[AccountsVC alloc] initWithNibName:@"Accounts" bundle:nil]; |
| [self.view addSubview:self.accountsPrefsVC.view]; |
| [self.accountsPrefsVC.view setFrame:[self.view bounds]]; |
| self.currentVC = self.accountsPrefsVC; |
| } |
| |
| |
| #pragma NSToolbar Delegate |
| |
| -(NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag |
| { |
| NSToolbarItem* item = nil; |
| |
| if ([itemIdentifier isEqualToString: kProfilePrefsIdentifier]) { |
| |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kProfilePrefsIdentifier]; |
| [item setImage: [NSImage imageNamed: @"NSUserAccounts"]]; |
| [item setLabel: @"Accounts"]; |
| [item setAction:@selector(displayAccounts:)]; |
| } |
| |
| if ([itemIdentifier isEqualToString: kGeneralPrefsIdentifier]) { |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kGeneralPrefsIdentifier]; |
| [item setImage: [NSImage imageNamed: @"general"]]; |
| [item setLabel: @"General"]; |
| [item setAction:@selector(displayGeneral:)]; |
| } |
| |
| if ([itemIdentifier isEqualToString: kAudioPrefsIdentifer]) { |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kAudioPrefsIdentifer]; |
| [item setImage: [NSImage imageNamed: @"audio"]]; |
| [item setLabel: @"Audio"]; |
| [item setAction:@selector(displayAudio:)]; |
| } |
| |
| if ([itemIdentifier isEqualToString: kPowerSettingsIdentifer]) { |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kPowerSettingsIdentifer]; |
| toggleAdvancedSettings = [[NSButton alloc] initWithFrame:NSMakeRect(0,0,20,20)]; |
| [toggleAdvancedSettings setButtonType:NSSwitchButton]; |
| [toggleAdvancedSettings setTitle:@""]; |
| [toggleAdvancedSettings setState:[[NSUserDefaults standardUserDefaults] boolForKey:Preferences::ShowAdvanced]]; |
| [item setLabel:@"Show Advanced"]; |
| [item setView:toggleAdvancedSettings]; |
| [item setAction:@selector(togglePowerSettings:)]; |
| } |
| |
| if ([itemIdentifier isEqualToString: kDonePrefsIdentifer]) { |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kDonePrefsIdentifer]; |
| [item setImage: [NSImage imageNamed: @"ic_action_cancel"]]; |
| [item setLabel: @"Done"]; |
| [item setAction:@selector(closePreferences:)]; |
| } |
| |
| if ([itemIdentifier isEqualToString: kVideoPrefsIdentifer]) { |
| item = [[NSToolbarItem alloc] initWithItemIdentifier: kVideoPrefsIdentifer]; |
| [item setImage: [NSImage imageNamed: @"video"]]; |
| [item setLabel: @"Video"]; |
| [item setAction:@selector(displayVideo:)]; |
| } |
| |
| return item; |
| } |
| |
| -(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar |
| { |
| |
| NSMutableArray* items = [NSMutableArray arrayWithObjects: |
| kPowerSettingsIdentifer, |
| NSToolbarFlexibleSpaceItemIdentifier, |
| kGeneralPrefsIdentifier, |
| kAudioPrefsIdentifer, |
| kVideoPrefsIdentifer, |
| // kAncragePrefsIdentifer, |
| NSToolbarFlexibleSpaceItemIdentifier, |
| kDonePrefsIdentifer, |
| nil]; |
| |
| if([[NSUserDefaults standardUserDefaults] boolForKey:Preferences::ShowAdvanced]) { |
| [items insertObject:NSToolbarSpaceItemIdentifier atIndex:5]; |
| [items insertObject:kProfilePrefsIdentifier atIndex:2]; |
| } else |
| [items insertObject:NSToolbarSpaceItemIdentifier atIndex:5]; |
| |
| return items; |
| } |
| |
| -(NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar |
| { |
| NSMutableArray* items = [NSMutableArray arrayWithObjects: |
| kPowerSettingsIdentifer, |
| kGeneralPrefsIdentifier, |
| kAudioPrefsIdentifer, |
| kVideoPrefsIdentifer, |
| nil]; |
| |
| if([[NSUserDefaults standardUserDefaults] boolForKey:Preferences::ShowAdvanced]) |
| [items insertObject:kProfilePrefsIdentifier atIndex:1]; |
| |
| |
| return items; |
| } |
| |
| -(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar |
| { |
| return nil; |
| } |
| |
| |
| |
| |
| |
| @end |