ui: add account screen management

    - ability to create SIP/IAX/RING accounts
    - add configuration panels: security panel needs to be discussed
    - some settings may change

    Refs #67077

Change-Id: I17afbcbbd067bf75f381492997ad40a72703cf0f
diff --git a/AccRingVC.mm b/AccRingVC.mm
new file mode 100644
index 0000000..88a5f6a
--- /dev/null
+++ b/AccRingVC.mm
@@ -0,0 +1,155 @@
+/*
+ *  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.
+ */
+#define ALIAS_TAG 0
+#define HOSTNAME_TAG 1
+#define USERNAME_TAG 2
+#define PASSWORD_TAG 3
+#define USERAGENT_TAG 4
+
+#import "AccRingVC.h"
+
+@interface AccRingVC ()
+
+@property Account* privateAccount;
+
+@property (assign) IBOutlet NSTextField *aliasTextField;
+@property (assign) IBOutlet NSTextField *typeLabel;
+@property (assign) IBOutlet NSTextField *bootstrapField;
+@property (assign) IBOutlet NSTextField *hashField;
+
+@property (assign) IBOutlet NSButton *upnpButton;
+@property (assign) IBOutlet NSButton *autoAnswerButton;
+@property (assign) IBOutlet NSButton *userAgentButton;
+@property (assign) IBOutlet NSTextField *userAgentTextField;
+
+@end
+
+@implementation AccRingVC
+@synthesize privateAccount;
+@synthesize typeLabel;
+@synthesize bootstrapField;
+@synthesize hashField;
+@synthesize aliasTextField;
+@synthesize upnpButton;
+@synthesize autoAnswerButton;
+@synthesize userAgentButton;
+@synthesize userAgentTextField;
+
+- (void)awakeFromNib
+{
+    NSLog(@"INIT Ring VC");
+    [aliasTextField setTag:ALIAS_TAG];
+    [userAgentTextField setTag:USERAGENT_TAG];
+    [bootstrapField setTag:HOSTNAME_TAG];
+}
+
+- (void)loadAccount:(Account *)account
+{
+    if(privateAccount == account)
+        return;
+
+    privateAccount = account;
+
+    [self.aliasTextField setStringValue:account->alias().toNSString()];
+
+    switch (account->protocol()) {
+        case Account::Protocol::SIP:
+            [typeLabel setStringValue:@"SIP"];
+            break;
+        case Account::Protocol::IAX:
+            [typeLabel setStringValue:@"IAX"];
+            break;
+        case Account::Protocol::RING:
+            [typeLabel setStringValue:@"RING"];
+            break;
+
+        default:
+            break;
+    }
+
+    [upnpButton setState:privateAccount->isUpnpEnabled()];
+    [userAgentButton setState:privateAccount->hasCustomUserAgent()];
+    [userAgentTextField setEnabled:privateAccount->hasCustomUserAgent()];
+
+    [autoAnswerButton setState:privateAccount->isAutoAnswer()];
+    [userAgentTextField setStringValue:account->userAgent().toNSString()];
+
+    [bootstrapField setStringValue:account->hostname().toNSString()];
+
+    if([privateAccount->username().toNSString() isEqualToString:@""])
+        [hashField setStringValue:@"Reopen account to see your hash"];
+    else
+        [hashField setStringValue:privateAccount->username().toNSString()];
+
+}
+
+- (IBAction)toggleUpnp:(NSButton *)sender {
+    privateAccount->setUpnpEnabled([sender state] == NSOnState);
+}
+
+- (IBAction)toggleAutoAnswer:(NSButton *)sender {
+    privateAccount->setAutoAnswer([sender state] == NSOnState);
+}
+
+- (IBAction)toggleCustomAgent:(NSButton *)sender {
+    [self.userAgentTextField setEnabled:[sender state] == NSOnState];
+    privateAccount->setHasCustomUserAgent([sender state] == NSOnState);
+}
+
+#pragma mark - NSTextFieldDelegate methods
+
+- (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor
+{
+    return YES;
+}
+
+-(void)controlTextDidChange:(NSNotification *)notif
+{
+    NSTextField *textField = [notif object];
+
+    switch ([textField tag]) {
+        case ALIAS_TAG:
+            privateAccount->setAlias([[textField stringValue] UTF8String]);
+            break;
+        case HOSTNAME_TAG:
+            privateAccount->setHostname([[textField stringValue] UTF8String]);
+            break;
+        case PASSWORD_TAG:
+            privateAccount->setPassword([[textField stringValue] UTF8String]);
+            break;
+        case USERAGENT_TAG:
+            privateAccount->setUserAgent([[textField stringValue] UTF8String]);
+            break;
+        default:
+            break;
+    }
+}
+
+@end