ui: add call screen interface

- in/out animation
- switch calls in conversation tree
- basic controls over call: accept/hangup/hold
- video

Refs #67611

Change-Id: I1d302d2539cb473e27ea469781b72f44963eb0a0
diff --git a/RingWindowController.mm b/RingWindowController.mm
index e48ad6f..4ad23cf 100644
--- a/RingWindowController.mm
+++ b/RingWindowController.mm
@@ -37,28 +37,20 @@
 
 @interface RingWindowController ()
 
+@property NSSearchField* callField;
 
 @end
 
 @implementation RingWindowController
+@synthesize callField;
+static NSString* const kSearchViewIdentifier = @"SearchViewIdentifier";
+static NSString* const kPreferencesIdentifier = @"PreferencesIdentifier";
+static NSString* const kCallButtonIdentifer = @"CallButtonIdentifier";
+
 
 - (void)windowDidLoad {
     [super windowDidLoad];
-    [self connectSlots];
-}
-
-
-- (void) connectSlots
-{
-    CallModel* callModel_ = CallModel::instance();
-    QObject::connect(callModel_, &CallModel::callStateChanged, [](Call*, Call::State) {
-        NSLog(@"callStateChanged");
-    });
-    
-    QObject::connect(callModel_, &CallModel::incomingCall, [] (Call*) {
-        NSLog(@"incomingCall");
-    });
-    
+    [self displayMainToolBar];
 }
 
 - (IBAction)openPreferences:(id)sender
@@ -122,11 +114,19 @@
     if(self.myCurrentViewController != nil)
     {
         [self.preferencesViewController close];
-        [self.window setToolbar:nil];
+        [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];
@@ -149,4 +149,82 @@
 }
 
 
+#pragma NSToolbar Delegate
+
+-(NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag
+{
+    NSToolbarItem* item = nil;
+
+    if ([itemIdentifier isEqualToString: kSearchViewIdentifier]) {
+        item = [[NSToolbarItem alloc] initWithItemIdentifier: kSearchViewIdentifier];
+        callField = [[NSSearchField alloc] initWithFrame:NSMakeRect(0,0,400,21)];
+        [[callField cell] setSearchButtonCell:nil];
+        [callField setToolTip:@"Call"];
+        //[callField setAlignment:NSCenterTextAlignment];
+
+        [item setView:callField];
+    }
+
+    if ([itemIdentifier isEqualToString: kCallButtonIdentifer]) {
+        item = [[NSToolbarItem alloc] initWithItemIdentifier: kCallButtonIdentifer];
+
+        NSButton *callButton = [[NSButton alloc] initWithFrame:NSMakeRect(0,0,80,30)];
+
+        [callButton setButtonType:NSMomentaryLightButton]; //Set what type button You want
+        [callButton setBezelStyle:NSRoundedBezelStyle]; //Set what style You want]
+        [callButton setBordered:YES];
+        [callButton setTitle:@"Call"];
+        [item setView:callButton];
+        [item setAction:@selector(placeCall:)];
+    }
+
+    if ([itemIdentifier isEqualToString: kPreferencesIdentifier]) {
+        item = [[NSToolbarItem alloc] initWithItemIdentifier: kPreferencesIdentifier];
+        [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
+        [item setLabel: @"Settings"];
+        [item setAction:@selector(openPreferences:)];
+    }
+
+    return item;
+
+}
+
+
+- (IBAction)placeCall:(id)sender
+{
+    Call* c = CallModel::instance()->dialingCall();
+    c->setDialNumber(QString::fromNSString([callField stringValue]));
+    c << Call::Action::ACCEPT;
+}
+
+-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar*)toolbar
+{
+    return [NSArray arrayWithObjects:
+            NSToolbarSpaceItemIdentifier,
+            NSToolbarFlexibleSpaceItemIdentifier,
+            NSToolbarSpaceItemIdentifier,
+            NSToolbarSpaceItemIdentifier,
+            kSearchViewIdentifier,
+            kCallButtonIdentifer,
+            NSToolbarFlexibleSpaceItemIdentifier,
+            kPreferencesIdentifier,
+            nil];
+}
+
+-(NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar
+{
+    return [NSArray arrayWithObjects:
+            kSearchViewIdentifier,
+            kCallButtonIdentifer,
+            kPreferencesIdentifier,
+            nil];
+}
+
+-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar*)toolbar
+{
+    return nil;
+}
+
+
+
 @end