ui: refactor preferences

- use a different window to display preferences. This allows proper window
resizing when switching between panels.
- remove the Setting button from the main interface (and the toolbar).

Issue: #80238
Change-Id: I220bfb3e92cdd426c721b3b5b1b44014a399fb48
diff --git a/src/RingWindowController.mm b/src/RingWindowController.mm
index 8b4036d..b6a0166 100644
--- a/src/RingWindowController.mm
+++ b/src/RingWindowController.mm
@@ -28,32 +28,29 @@
 #import "Constants.h"
 #import "CurrentCallVC.h"
 
+#import "PreferencesWC.h"
+#import "views/NSColor+RingTheme.h"
 
-@interface RingWindowController ()
+@implementation RingWindowController {
 
-@property CurrentCallVC* currentVC;
-@property (unsafe_unretained) IBOutlet NSView *callView;
-@property (unsafe_unretained) IBOutlet NSTextField *ringIDLabel;
+    __unsafe_unretained IBOutlet NSView *callView;
+    __unsafe_unretained IBOutlet NSTextField *ringIDLabel;
 
-
-@end
-
-@implementation RingWindowController
-@synthesize currentVC;
-@synthesize callView, ringIDLabel;
+    PreferencesWC *preferencesWC;
+    CurrentCallVC* currentVC;
+}
 
 static NSString* const kPreferencesIdentifier = @"PreferencesIdentifier";
 
 - (void)windowDidLoad {
     [super windowDidLoad];
     [self.window setMovableByWindowBackground:YES];
-    [self displayMainToolBar];
 
     currentVC = [[CurrentCallVC alloc] initWithNibName:@"CurrentCall" bundle:nil];
     [callView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
     [[currentVC view] setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
 
-    [callView addSubview:[self.currentVC view] positioned:NSWindowAbove relativeTo:nil];
+    [callView addSubview:[currentVC view] positioned:NSWindowAbove relativeTo:nil];
 
     [currentVC initFrame];
 
@@ -99,149 +96,8 @@
 
 - (IBAction)openPreferences:(id)sender
 {
-    if(self.preferencesViewController != nil) {
-        [self closePreferences:nil];
-        return;
-    }
-    NSToolbar* tb = [[NSToolbar alloc] initWithIdentifier: @"PreferencesToolbar"];
-
-    self.preferencesViewController = [[PreferencesVC alloc] initWithNibName:@"PreferencesScreen" bundle:nil];
-    self.myCurrentViewController = self.preferencesViewController;
-
-    NSLayoutConstraint* test = [NSLayoutConstraint constraintWithItem:self.preferencesViewController.view
-                                                            attribute:NSLayoutAttributeWidth
-                                                            relatedBy:NSLayoutRelationEqual
-                                                               toItem:currentView
-                                                            attribute:NSLayoutAttributeWidth
-                                                           multiplier:1.0f
-                                                             constant:0.0f];
-
-    NSLayoutConstraint* test2 = [NSLayoutConstraint constraintWithItem:self.preferencesViewController.view
-                                                             attribute:NSLayoutAttributeHeight
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:currentView
-                                                             attribute:NSLayoutAttributeHeight
-                                                            multiplier:1.0f
-                                                              constant:0.0f];
-
-    NSLayoutConstraint* test3 = [NSLayoutConstraint constraintWithItem:self.preferencesViewController.view
-                                                             attribute:NSLayoutAttributeCenterX
-                                                             relatedBy:NSLayoutRelationEqual
-                                                                toItem:currentView
-                                                             attribute:NSLayoutAttributeCenterX
-                                                            multiplier:1.0f
-                                                              constant:0.0f];
-
-
-    [currentView addSubview:[self.preferencesViewController view]];
-
-    [tb setDelegate: self.preferencesViewController];
-    [self.window setToolbar: tb];
-
-    [self.window.toolbar setSelectedItemIdentifier:@"GeneralPrefsIdentifier"];
-
-    [currentView addConstraint:test];
-    [currentView addConstraint:test2];
-    [currentView addConstraint:test3];
-    // make sure we automatically resize the controller's view to the current window size
-    [[self.myCurrentViewController view] setFrame:[currentView bounds]];
-
-    // set the view controller's represented object to the number of subviews in that controller
-    // (our NSTextField's value binding will reflect this value)
-    [self.myCurrentViewController setRepresentedObject:[NSNumber numberWithUnsignedInteger:[[[self.myCurrentViewController view] subviews] count]]];
-    
+    preferencesWC = [[PreferencesWC alloc] initWithWindowNibName:@"PreferencesWindow"];
+    [preferencesWC.window makeKeyAndOrderFront:preferencesWC.window];
 }
 
-- (IBAction) closePreferences:(NSToolbarItem *)sender {
-    if(self.myCurrentViewController != nil)
-    {
-        [self.preferencesViewController close];
-        [self displayMainToolBar];
-        self.preferencesViewController = nil;
-    }
-}
-
--(void) displayMainToolBar
-{
-    NSToolbar* tb = [[NSToolbar alloc] initWithIdentifier: @"MainToolbar"];
-    [tb setDisplayMode:NSToolbarDisplayModeIconAndLabel];
-    [tb setDelegate: self];
-    [self.window setToolbar: tb];
-}
-
-// FIXME: This is sick, NSWindowController is catching my selectors
-- (void)displayGeneral:(NSToolbarItem *)sender {
-    [self.preferencesViewController displayGeneral:sender];
-}
-
-- (void)displayAudio:(NSToolbarItem *)sender {
-    [self.preferencesViewController displayAudio:sender];
-}
-
-- (void)displayAncrage:(NSToolbarItem *)sender {
-    [self.preferencesViewController displayAncrage:sender];
-}
-
-- (void)displayVideo:(NSToolbarItem *)sender {
-    [self.preferencesViewController displayVideo:sender];
-}
-
-- (void)displayAccounts:(NSToolbarItem *)sender {
-    [self.preferencesViewController displayAccounts:sender];
-}
-
-- (void)togglePowerSettings:(id)sender
-{
-    BOOL advanced = [[NSUserDefaults standardUserDefaults] boolForKey:Preferences::ShowAdvanced];
-    [[NSUserDefaults standardUserDefaults] setBool:!advanced forKey:Preferences::ShowAdvanced];
-    [[NSUserDefaults standardUserDefaults] synchronize];
-
-    NSToolbar* tb = [[NSToolbar alloc] initWithIdentifier: @"PreferencesToolbar"];
-    [tb setDelegate: self.preferencesViewController];
-    [self.preferencesViewController displayGeneral:nil];
-    [self.window setToolbar:tb];
-}
-
-#pragma mark - NSToolbar Delegate
-
--(NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
-{
-    NSToolbarItem* item = nil;
-
-    if ([itemIdentifier isEqualToString: kPreferencesIdentifier]) {
-        item = [[NSToolbarItem alloc] initWithItemIdentifier: kPreferencesIdentifier];
-        [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
-        [item setLabel: @"Settings"];
-        [item setAction:@selector(openPreferences:)];
-    }
-
-    return item;
-}
-
-
--(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
-{
-    return [NSArray arrayWithObjects:
-            NSToolbarSpaceItemIdentifier,
-            NSToolbarFlexibleSpaceItemIdentifier,
-            NSToolbarSpaceItemIdentifier,
-            NSToolbarSpaceItemIdentifier,
-            NSToolbarFlexibleSpaceItemIdentifier,
-            kPreferencesIdentifier,
-            nil];
-}
-
--(NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
-{
-    return [NSArray arrayWithObjects:
-            kPreferencesIdentifier,
-            nil];
-}
-
--(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
-{
-    return nil;
-}
-
-
 @end