smartlist: add more contextual choices

- choose number to call
- copy number

Tuleap: #57
Change-Id: I18317154af9c50cade4ee8b749d10ac54eb77064
diff --git a/src/SmartViewVC.mm b/src/SmartViewVC.mm
index 77cf1eb..b2be8bb 100644
--- a/src/SmartViewVC.mm
+++ b/src/SmartViewVC.mm
@@ -345,6 +345,20 @@
     }
 }
 
+- (void) copyNumberToPasteboard:(id) sender
+{
+    NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
+    [pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
+    [pasteBoard setString:[sender representedObject] forType:NSStringPboardType];
+}
+
+- (void) callNumber:(id) sender
+{
+    Call* c = CallModel::instance().dialingCall();
+    c->setDialNumber(QString::fromNSString([sender representedObject]));
+    c << Call::Action::ACCEPT;
+}
+
 #pragma NSTextFieldDelegate
 
 - (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector
@@ -411,17 +425,49 @@
     if (contactmethods.isEmpty())
         return nil;
 
-    auto cm = contactmethods.first();
-    if (!cm->contact() || cm->contact()->isPlaceHolder()) {
-        NSMenu *theMenu = [[NSMenu alloc]
-                           initWithTitle:@""];
+    NSMenu *theMenu = [[NSMenu alloc] initWithTitle:@""];
+
+    if (contactmethods.size() == 1
+        && !contactmethods.first()->contact()
+        || contactmethods.first()->contact()->isPlaceHolder()) {
+
         [theMenu insertItemWithTitle:NSLocalizedString(@"Add to contacts", @"Contextual menu action")
                               action:@selector(addToContact)
                        keyEquivalent:@"a"
-                             atIndex:0];
-        return theMenu;
+                             atIndex:theMenu.itemArray.count];
     }
-    return nil;
+
+    NSMenu* copySubmenu = [[NSMenu alloc] init];
+    NSMenu* callSubmenu = [[NSMenu alloc] init];
+
+    for(auto cm : contactmethods) {
+        NSMenuItem* tmpCopyItem = [[NSMenuItem alloc] initWithTitle:cm->uri().toNSString()
+                                                             action:@selector(copyNumberToPasteboard:)
+                                                      keyEquivalent:@""];
+
+        [tmpCopyItem setRepresentedObject:cm->uri().toNSString()];
+        [copySubmenu addItem:tmpCopyItem];
+
+        NSMenuItem* tmpCallItem = [[NSMenuItem alloc] initWithTitle:cm->uri().toNSString()
+                                                             action:@selector(callNumber:)
+                                                      keyEquivalent:@""];
+        [tmpCallItem setRepresentedObject:cm->uri().toNSString()];
+        [callSubmenu addItem:tmpCallItem];
+    }
+
+    NSMenuItem* copyItems = [[NSMenuItem alloc] init];
+    [copyItems setTitle:NSLocalizedString(@"Copy number", @"Contextual menu action")];
+    [copyItems setSubmenu:copySubmenu];
+
+    NSMenuItem* callItems = [[NSMenuItem alloc] init];
+    [callItems setTitle:NSLocalizedString(@"Call number", @"Contextual menu action")];
+    [callItems setSubmenu:callSubmenu];
+
+    [theMenu insertItem:copyItems atIndex:theMenu.itemArray.count];
+    [theMenu insertItem:[NSMenuItem separatorItem] atIndex:theMenu.itemArray.count];
+    [theMenu insertItem:callItems atIndex:theMenu.itemArray.count];
+
+    return theMenu;
 }
 
 @end