diff --git a/src/AccAdvancedVC.h b/src/AccAdvancedVC.h index 52216be7ce60e7bca1dc2e5380b47eb441cdcceb..1803d395f5e7070052701d5e910f6bd8f8e5ab05 100644 --- a/src/AccAdvancedVC.h +++ b/src/AccAdvancedVC.h @@ -31,10 +31,6 @@ #import <account.h> -@interface AccAdvancedVC : NSViewController <NSTextFieldDelegate> { - -} - -- (void)loadAccount:(Account *)account; +@interface AccAdvancedVC : NSViewController <NSTextFieldDelegate> @end diff --git a/src/AccAdvancedVC.mm b/src/AccAdvancedVC.mm index 1f42a78cbcbb2331968d75b62103e709a76562eb..4c6be7e48b1add26760316c2d50068e194024999 100644 --- a/src/AccAdvancedVC.mm +++ b/src/AccAdvancedVC.mm @@ -39,9 +39,11 @@ #import "AccAdvancedVC.h" +#import <accountmodel.h> +#import <qitemselectionmodel.h> + @interface AccAdvancedVC () -@property Account* privateAccount; @property (assign) IBOutlet NSTextField *registrationField; @property (assign) IBOutlet NSTextField *localPortField; @property (assign) IBOutlet NSButton *isUsingSTUN; @@ -67,7 +69,6 @@ @end @implementation AccAdvancedVC -@synthesize privateAccount; @synthesize registrationField; @synthesize localPortField; @synthesize isUsingSTUN; @@ -106,12 +107,27 @@ [STUNserverURLField setTag:STUNURL_TAG]; [publishedPortField setTag:PUBLICPORT_TAG]; [publishedAddrField setTag:PUBLICADDR_TAG]; - + + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); + } -- (void)loadAccount:(Account *)account +- (Account*) currentAccount { - privateAccount = account; + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); +} + +- (void)loadAccount +{ + auto account = [self currentAccount]; + [self updateControlsWithTag:REGISTRATION_TAG]; [self updateControlsWithTag:LOCALPORT_TAG]; [self updateControlsWithTag:MINAUDIO_TAG]; @@ -119,20 +135,20 @@ [self updateControlsWithTag:MINVIDEO_TAG]; [self updateControlsWithTag:MAXVIDEO_TAG]; - [STUNserverURLField setStringValue:privateAccount->sipStunServer().toNSString()]; - [isUsingSTUN setState:privateAccount->isSipStunEnabled()?NSOnState:NSOffState]; - [STUNserverURLField setEnabled:privateAccount->isSipStunEnabled()]; + [STUNserverURLField setStringValue:account->sipStunServer().toNSString()]; + [isUsingSTUN setState:account->isSipStunEnabled()?NSOnState:NSOffState]; + [STUNserverURLField setEnabled:account->isSipStunEnabled()]; - if(privateAccount->isPublishedSameAsLocal()) + if(account->isPublishedSameAsLocal()) [publishAddrAndPortRadioGroup selectCellAtRow:0 column:0]; else { [publishAddrAndPortRadioGroup selectCellAtRow:1 column:0]; } - [publishedAddrField setStringValue:privateAccount->publishedAddress().toNSString()]; - [publishedPortField setIntValue:privateAccount->publishedPort()]; - [publishedAddrField setEnabled:!privateAccount->isPublishedSameAsLocal()]; - [publishedPortField setEnabled:!privateAccount->isPublishedSameAsLocal()]; + [publishedAddrField setStringValue:account->publishedAddress().toNSString()]; + [publishedPortField setIntValue:account->publishedPort()]; + [publishedAddrField setEnabled:!account->isPublishedSameAsLocal()]; + [publishedPortField setEnabled:!account->isPublishedSameAsLocal()]; } #pragma mark - NSTextFieldDelegate methods @@ -152,31 +168,31 @@ { switch ([sender tag]) { case REGISTRATION_TAG: - privateAccount->setRegistrationExpire([sender integerValue]); + [self currentAccount]->setRegistrationExpire([sender integerValue]); break; case LOCALPORT_TAG: - privateAccount->setLocalPort([sender integerValue]); + [self currentAccount]->setLocalPort([sender integerValue]); break; case STUNURL_TAG: - privateAccount->setSipStunServer([[sender stringValue] UTF8String]); + [self currentAccount]->setSipStunServer([[sender stringValue] UTF8String]); break; case PUBLICADDR_TAG: - privateAccount->setPublishedAddress([[sender stringValue] UTF8String]); + [self currentAccount]->setPublishedAddress([[sender stringValue] UTF8String]); break; case PUBLICPORT_TAG: - privateAccount->setPublishedPort([sender integerValue]); + [self currentAccount]->setPublishedPort([sender integerValue]); break; case MINAUDIO_TAG: - privateAccount->setAudioPortMin([sender integerValue]); + [self currentAccount]->setAudioPortMin([sender integerValue]); break; case MAXAUDIO_TAG: - privateAccount->setAudioPortMax([sender integerValue]); + [self currentAccount]->setAudioPortMax([sender integerValue]); break; case MINVIDEO_TAG: - privateAccount->setVideoPortMin([sender integerValue]); + [self currentAccount]->setVideoPortMin([sender integerValue]); break; case MAXVIDEO_TAG: - privateAccount->setVideoPortMax([sender integerValue]); + [self currentAccount]->setVideoPortMax([sender integerValue]); break; default: break; @@ -186,20 +202,20 @@ - (IBAction)toggleSTUN:(NSButton *)sender { - privateAccount->setSipStunEnabled([sender state]==NSOnState); - [STUNserverURLField setEnabled:privateAccount->isSipStunEnabled()]; + [self currentAccount]->setSipStunEnabled([sender state]==NSOnState); + [STUNserverURLField setEnabled:[self currentAccount]->isSipStunEnabled()]; } - (IBAction)didSwitchPublishedAddress:(NSMatrix *)matrix { NSInteger row = [matrix selectedRow]; if(row == 0) { - privateAccount->setPublishedSameAsLocal(YES); + [self currentAccount]->setPublishedSameAsLocal(YES); } else { - privateAccount->setPublishedSameAsLocal(NO); + [self currentAccount]->setPublishedSameAsLocal(NO); } - [publishedAddrField setEnabled:!privateAccount->isPublishedSameAsLocal()]; - [publishedPortField setEnabled:!privateAccount->isPublishedSameAsLocal()]; + [publishedAddrField setEnabled:![self currentAccount]->isPublishedSameAsLocal()]; + [publishedPortField setEnabled:![self currentAccount]->isPublishedSameAsLocal()]; } @@ -207,28 +223,28 @@ { switch (tag) { case REGISTRATION_TAG: - [registrationStepper setIntegerValue:privateAccount->registrationExpire()]; - [registrationField setIntegerValue:privateAccount->registrationExpire()]; + [registrationStepper setIntegerValue:[self currentAccount]->registrationExpire()]; + [registrationField setIntegerValue:[self currentAccount]->registrationExpire()]; break; case LOCALPORT_TAG: - [localPortStepper setIntegerValue:privateAccount->localPort()]; - [localPortField setIntegerValue:privateAccount->localPort()]; + [localPortStepper setIntegerValue:[self currentAccount]->localPort()]; + [localPortField setIntegerValue:[self currentAccount]->localPort()]; break; case MINAUDIO_TAG: - [minAudioPortStepper setIntegerValue:privateAccount->audioPortMin()]; - [minAudioRTPRange setIntegerValue:privateAccount->audioPortMin()]; + [minAudioPortStepper setIntegerValue:[self currentAccount]->audioPortMin()]; + [minAudioRTPRange setIntegerValue:[self currentAccount]->audioPortMin()]; break; case MAXAUDIO_TAG: - [maxAudioPortStepper setIntegerValue:privateAccount->audioPortMax()]; - [maxAudioRTPRange setIntegerValue:privateAccount->audioPortMax()]; + [maxAudioPortStepper setIntegerValue:[self currentAccount]->audioPortMax()]; + [maxAudioRTPRange setIntegerValue:[self currentAccount]->audioPortMax()]; break; case MINVIDEO_TAG: - [minVideoPortStepper setIntegerValue:privateAccount->videoPortMin()]; - [minVideoRTPRange setIntegerValue:privateAccount->videoPortMin()]; + [minVideoPortStepper setIntegerValue:[self currentAccount]->videoPortMin()]; + [minVideoRTPRange setIntegerValue:[self currentAccount]->videoPortMin()]; break; case MAXVIDEO_TAG: - [maxVideoPortStepper setIntegerValue:privateAccount->videoPortMax()]; - [maxVideoRTPRange setIntegerValue:privateAccount->videoPortMax()]; + [maxVideoPortStepper setIntegerValue:[self currentAccount]->videoPortMax()]; + [maxVideoRTPRange setIntegerValue:[self currentAccount]->videoPortMax()]; break; default: break; diff --git a/src/AccAudioVC.h b/src/AccAudioVC.h index 38f8283cf4ad275dd86b0b37186c9a0d0ff36583..1434fc85cde7315a86b921b907f4342007ba0576 100644 --- a/src/AccAudioVC.h +++ b/src/AccAudioVC.h @@ -36,11 +36,7 @@ #import "QNSTreeController.h" -@interface AccAudioVC : NSViewController <NSOutlineViewDelegate> { - -} - -- (void)loadAccount:(Account *)account; +@interface AccAudioVC : NSViewController <NSOutlineViewDelegate> @end diff --git a/src/AccAudioVC.mm b/src/AccAudioVC.mm index 704c8cc03fbf2dced06a6ec97a68b8051416635b..1370a38adc85c1f4b52b636c8f8f54f2521dcafa 100644 --- a/src/AccAudioVC.mm +++ b/src/AccAudioVC.mm @@ -37,10 +37,10 @@ #import <QSortFilterProxyModel> #import <audio/codecmodel.h> #import <accountmodel.h> +#import <qitemselectionmodel.h> @interface AccAudioVC () -@property Account* privateAccount; @property QNSTreeController *treeController; @property (assign) IBOutlet NSOutlineView *codecsView; @@ -49,17 +49,29 @@ @implementation AccAudioVC @synthesize treeController; @synthesize codecsView; -@synthesize privateAccount; - (void)awakeFromNib { NSLog(@"INIT Audio VC"); + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); } -- (void)loadAccount:(Account *)account +- (Account*) currentAccount { - privateAccount = account; - treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->codecModel()->audioCodecs()]; + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); +} + +- (void)loadAccount +{ + auto account = [self currentAccount]; + treeController = [[QNSTreeController alloc] initWithQModel:account->codecModel()->audioCodecs()]; [treeController setAvoidsEmptySelection:NO]; [treeController setChildrenKeyPath:@"children"]; @@ -75,8 +87,8 @@ if(!qIdx.isValid()) return; - QMimeData* mime = privateAccount->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx); - privateAccount->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex()); + QMimeData* mime = [self currentAccount]->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx); + [self currentAccount]->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex()); } } @@ -86,8 +98,8 @@ if(!qIdx.isValid()) return; - QMimeData* mime = privateAccount->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx); - privateAccount->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex()); + QMimeData* mime = [self currentAccount]->codecModel()->audioCodecs()->mimeData(QModelIndexList() << qIdx); + [self currentAccount]->codecModel()->audioCodecs()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex()); } } @@ -95,8 +107,8 @@ NSInteger row = [sender clickedRow]; NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE]; NSButtonCell *cell = [col dataCellForRow:row]; - QModelIndex qIdx = privateAccount->codecModel()->audioCodecs()->index(row, 0, QModelIndex()); - privateAccount->codecModel()->audioCodecs()->setData(qIdx, cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole); + QModelIndex qIdx = [self currentAccount]->codecModel()->audioCodecs()->index(row, 0, QModelIndex()); + [self currentAccount]->codecModel()->audioCodecs()->setData(qIdx, cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole); } #pragma mark - NSOutlineViewDelegate methods @@ -157,16 +169,16 @@ if(!qIdx.isValid()) return; if([[tableColumn identifier] isEqualToString:COLUMNID_STATE]) { - [cell setState:privateAccount->codecModel()->audioCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; + [cell setState:[self currentAccount]->codecModel()->audioCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; } else if ([[tableColumn identifier] isEqualToString:COLUMNID_CODECS]) { - cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString(); + cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString(); } else if ([[tableColumn identifier] isEqualToString:COLUMNID_FREQ]) { - cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString(); + cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString(); } else if ([[tableColumn identifier] isEqualToString:COLUMNID_BITRATE]) { - cell.title = privateAccount->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString(); + cell.title = [self currentAccount]->codecModel()->audioCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString(); } } diff --git a/src/AccGeneralVC.h b/src/AccGeneralVC.h index 139fd1b9bcf54dfc02c1804d2b012883fa9c763c..ccde3e4e422bdab95e0862e04c8e40916bbf1110 100644 --- a/src/AccGeneralVC.h +++ b/src/AccGeneralVC.h @@ -38,12 +38,6 @@ } -- (IBAction)toggleUpnp:(NSButton *)sender; -- (IBAction)toggleAutoAnswer:(NSButton *)sender; -- (IBAction)toggleCustomAgent:(NSButton *)sender; - -- (void)loadAccount:(Account *)account; - @end #endif // ACCGENERALVC_H \ No newline at end of file diff --git a/src/AccGeneralVC.mm b/src/AccGeneralVC.mm index a75ad535fc1fe11b4ee02110d9978fac5f52c2d8..a2d33b1ba92f41f79297fc9e8895e5d6a1216e0a 100644 --- a/src/AccGeneralVC.mm +++ b/src/AccGeneralVC.mm @@ -42,8 +42,6 @@ @interface AccGeneralVC () -@property Account* privateAccount; - @property (assign) IBOutlet NSView *boxingAccount; @property (assign) IBOutlet NSView *boxingParameters; @property (assign) IBOutlet NSView *boxingCommon; @@ -79,7 +77,6 @@ @synthesize autoAnswerButton; @synthesize userAgentButton; @synthesize userAgentTextField; -@synthesize privateAccount; - (void)awakeFromNib { @@ -89,25 +86,38 @@ [usernameTextField setTag:USERNAME_TAG]; [passwordTextField setTag:PASSWORD_TAG]; [userAgentTextField setTag:USERAGENT_TAG]; + + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); +} + +- (Account*) currentAccount +{ + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); } - (IBAction)toggleUpnp:(NSButton *)sender { - privateAccount->setUpnpEnabled([sender state] == NSOnState); + [self currentAccount]->setUpnpEnabled([sender state] == NSOnState); } - (IBAction)toggleAutoAnswer:(NSButton *)sender { - privateAccount->setAutoAnswer([sender state] == NSOnState); + [self currentAccount]->setAutoAnswer([sender state] == NSOnState); } - (IBAction)toggleCustomAgent:(NSButton *)sender { [self.userAgentTextField setEnabled:[sender state] == NSOnState]; - privateAccount->setHasCustomUserAgent([sender state] == NSOnState); + [self currentAccount]->setHasCustomUserAgent([sender state] == NSOnState); } -- (void)loadAccount:(Account *)account +- (void)loadAccount { - - privateAccount = account; + auto account = [self currentAccount]; if([account->alias().toNSString() isEqualToString:@"IP2IP"]) { [boxingAccount.subviews setValue:@YES forKeyPath:@"hidden"]; @@ -145,15 +155,15 @@ break; } - [upnpButton setState:privateAccount->isUpnpEnabled()]; - [userAgentButton setState:privateAccount->hasCustomUserAgent()]; - [userAgentTextField setEnabled:privateAccount->hasCustomUserAgent()]; - [self.autoAnswerButton setState:privateAccount->isAutoAnswer()]; + [upnpButton setState:[self currentAccount]->isUpnpEnabled()]; + [userAgentButton setState:[self currentAccount]->hasCustomUserAgent()]; + [userAgentTextField setEnabled:[self currentAccount]->hasCustomUserAgent()]; + [self.autoAnswerButton setState:[self currentAccount]->isAutoAnswer()]; [self.userAgentTextField setStringValue:account->userAgent().toNSString()]; } - (IBAction)tryRegistration:(id)sender { - self.privateAccount << Account::EditAction::SAVE; + [self currentAccount] << Account::EditAction::SAVE; } - (IBAction)showPassword:(NSButton *)sender { @@ -195,19 +205,19 @@ switch ([textField tag]) { case ALIAS_TAG: - privateAccount->setAlias([[textField stringValue] UTF8String]); + [self currentAccount]->setAlias([[textField stringValue] UTF8String]); break; case HOSTNAME_TAG: - privateAccount->setHostname([[textField stringValue] UTF8String]); + [self currentAccount]->setHostname([[textField stringValue] UTF8String]); break; case USERNAME_TAG: - privateAccount->setUsername([[textField stringValue] UTF8String]); + [self currentAccount]->setUsername([[textField stringValue] UTF8String]); break; case PASSWORD_TAG: - privateAccount->setPassword([[textField stringValue] UTF8String]); + [self currentAccount]->setPassword([[textField stringValue] UTF8String]); break; case USERAGENT_TAG: - privateAccount->setUserAgent([[textField stringValue] UTF8String]); + [self currentAccount]->setUserAgent([[textField stringValue] UTF8String]); break; default: break; diff --git a/src/AccRingVC.h b/src/AccRingVC.h index df21709abc506ee7bcb02d61b9dfa2c016bc7501..67f03e0d07939349d17c1366e1170fd70bbc8ddb 100644 --- a/src/AccRingVC.h +++ b/src/AccRingVC.h @@ -34,12 +34,7 @@ #import <account.h> -@interface AccRingVC : NSViewController <NSTextFieldDelegate> { - - NSTextField *hashField; -} - -- (void)loadAccount:(Account *)account; +@interface AccRingVC : NSViewController <NSTextFieldDelegate> @end diff --git a/src/AccRingVC.mm b/src/AccRingVC.mm index 88a5f6a71dcd3bfc0015981b0aa9c0c151584981..f262f4ee2657d45b83eb2686f85bd13b043eb0da 100644 --- a/src/AccRingVC.mm +++ b/src/AccRingVC.mm @@ -35,9 +35,10 @@ #import "AccRingVC.h" -@interface AccRingVC () +#import <accountmodel.h> +#import <qitemselectionmodel.h> -@property Account* privateAccount; +@interface AccRingVC () @property (assign) IBOutlet NSTextField *aliasTextField; @property (assign) IBOutlet NSTextField *typeLabel; @@ -52,7 +53,6 @@ @end @implementation AccRingVC -@synthesize privateAccount; @synthesize typeLabel; @synthesize bootstrapField; @synthesize hashField; @@ -68,14 +68,25 @@ [aliasTextField setTag:ALIAS_TAG]; [userAgentTextField setTag:USERAGENT_TAG]; [bootstrapField setTag:HOSTNAME_TAG]; + + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); } -- (void)loadAccount:(Account *)account +- (Account*) currentAccount { - if(privateAccount == account) - return; + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); +} - privateAccount = account; +- (void)loadAccount +{ + auto account = [self currentAccount]; [self.aliasTextField setStringValue:account->alias().toNSString()]; @@ -94,33 +105,33 @@ break; } - [upnpButton setState:privateAccount->isUpnpEnabled()]; - [userAgentButton setState:privateAccount->hasCustomUserAgent()]; - [userAgentTextField setEnabled:privateAccount->hasCustomUserAgent()]; + [upnpButton setState:[self currentAccount]->isUpnpEnabled()]; + [userAgentButton setState:[self currentAccount]->hasCustomUserAgent()]; + [userAgentTextField setEnabled:[self currentAccount]->hasCustomUserAgent()]; - [autoAnswerButton setState:privateAccount->isAutoAnswer()]; + [autoAnswerButton setState:[self currentAccount]->isAutoAnswer()]; [userAgentTextField setStringValue:account->userAgent().toNSString()]; [bootstrapField setStringValue:account->hostname().toNSString()]; - if([privateAccount->username().toNSString() isEqualToString:@""]) + if([[self currentAccount]->username().toNSString() isEqualToString:@""]) [hashField setStringValue:@"Reopen account to see your hash"]; else - [hashField setStringValue:privateAccount->username().toNSString()]; + [hashField setStringValue:[self currentAccount]->username().toNSString()]; } - (IBAction)toggleUpnp:(NSButton *)sender { - privateAccount->setUpnpEnabled([sender state] == NSOnState); + [self currentAccount]->setUpnpEnabled([sender state] == NSOnState); } - (IBAction)toggleAutoAnswer:(NSButton *)sender { - privateAccount->setAutoAnswer([sender state] == NSOnState); + [self currentAccount]->setAutoAnswer([sender state] == NSOnState); } - (IBAction)toggleCustomAgent:(NSButton *)sender { [self.userAgentTextField setEnabled:[sender state] == NSOnState]; - privateAccount->setHasCustomUserAgent([sender state] == NSOnState); + [self currentAccount]->setHasCustomUserAgent([sender state] == NSOnState); } #pragma mark - NSTextFieldDelegate methods @@ -136,16 +147,16 @@ switch ([textField tag]) { case ALIAS_TAG: - privateAccount->setAlias([[textField stringValue] UTF8String]); + [self currentAccount]->setAlias([[textField stringValue] UTF8String]); break; case HOSTNAME_TAG: - privateAccount->setHostname([[textField stringValue] UTF8String]); + [self currentAccount]->setHostname([[textField stringValue] UTF8String]); break; case PASSWORD_TAG: - privateAccount->setPassword([[textField stringValue] UTF8String]); + [self currentAccount]->setPassword([[textField stringValue] UTF8String]); break; case USERAGENT_TAG: - privateAccount->setUserAgent([[textField stringValue] UTF8String]); + [self currentAccount]->setUserAgent([[textField stringValue] UTF8String]); break; default: break; diff --git a/src/AccSecurityVC.h b/src/AccSecurityVC.h index f967c1f42ffd23188c1a69416c78034465ca107e..96d95066df1bb327e340caffbb3268e760a775cf 100644 --- a/src/AccSecurityVC.h +++ b/src/AccSecurityVC.h @@ -32,13 +32,7 @@ #import <Cocoa/Cocoa.h> -#import <account.h> - -@interface AccSecurityVC : NSViewController<NSMenuDelegate, NSPathControlDelegate, NSOpenSavePanelDelegate> { - -} - -- (void)loadAccount:(Account *)account; +@interface AccSecurityVC : NSViewController<NSMenuDelegate, NSPathControlDelegate, NSOpenSavePanelDelegate> @end diff --git a/src/AccSecurityVC.mm b/src/AccSecurityVC.mm index 22320b1ae3763692a96448b529ff116e3196159d..cb4dda689677631c7a4caedf2815cdb1d7cf002f 100644 --- a/src/AccSecurityVC.mm +++ b/src/AccSecurityVC.mm @@ -34,6 +34,7 @@ #import <tlsmethodmodel.h> #import <qitemselectionmodel.h> #import <ciphermodel.h> +#import <accountmodel.h> #import "QNSTreeController.h" #import "CertificateWC.h" @@ -48,7 +49,6 @@ @interface AccSecurityVC () -@property Account* privateAccount; @property NSTreeController *treeController; @property (unsafe_unretained) IBOutlet NSOutlineView *cipherListView; @property (unsafe_unretained) IBOutlet NSButton *useTLS; @@ -73,7 +73,6 @@ @end @implementation AccSecurityVC -@synthesize privateAccount; @synthesize treeController; @synthesize cipherListView; @synthesize certificateWC; @@ -100,21 +99,34 @@ [tlsNegotiationTimeoutStepper setTag:TLS_NEGOTIATION_TAG]; [tlsNegotiationTimeout setTag:TLS_NEGOTIATION_TAG]; + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); } -- (void)loadAccount:(Account *)account +- (Account*) currentAccount { - privateAccount = account; + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); +} + +- (void)loadAccount +{ + auto account = [self currentAccount]; [self updateControlsWithTag:PVK_PASSWORD_TAG]; [self updateControlsWithTag:OUTGOING_TLS_SRV_NAME]; [self updateControlsWithTag:TLS_NEGOTIATION_TAG]; - QModelIndex qTlsMethodIdx = privateAccount->tlsMethodModel()->selectionModel()->currentIndex(); + QModelIndex qTlsMethodIdx = [self currentAccount]->tlsMethodModel()->selectionModel()->currentIndex(); [self.tlsMethodList removeAllItems]; [self.tlsMethodList addItemWithTitle:qTlsMethodIdx.data(Qt::DisplayRole).toString().toNSString()]; - treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->cipherModel()]; + treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->cipherModel()]; [treeController setAvoidsEmptySelection:NO]; [treeController setAlwaysUsesMultipleValuesMarker:YES]; [treeController setChildrenKeyPath:@"children"]; @@ -123,39 +135,39 @@ [cipherListView bind:@"sortDescriptors" toObject:treeController withKeyPath:@"sortDescriptors" options:nil]; [cipherListView bind:@"selectionIndexPaths" toObject:treeController withKeyPath:@"selectionIndexPaths" options:nil]; - [useTLS setState:privateAccount->isTlsEnabled()]; - [tlsContainer setHidden:!privateAccount->isTlsEnabled()]; + [useTLS setState:[self currentAccount]->isTlsEnabled()]; + [tlsContainer setHidden:![self currentAccount]->isTlsEnabled()]; - [useSRTP setState:privateAccount->isSrtpEnabled()]; - [srtpRTPFallback setState:privateAccount->isSrtpRtpFallback()]; + [useSRTP setState:[self currentAccount]->isSrtpEnabled()]; + [srtpRTPFallback setState:[self currentAccount]->isSrtpRtpFallback()]; [srtpRTPFallback setEnabled:useSRTP.state]; NSArray * pathComponentArray = [self pathComponentArray]; - if(privateAccount->tlsCaListCertificate() != nil) { - NSLog(@"CA ==> %@", privateAccount->tlsCaListCertificate()->path().toNSURL()); - [caListPathControl setURL:privateAccount->tlsCaListCertificate()->path().toNSURL()]; + if([self currentAccount]->tlsCaListCertificate() != nil) { + NSLog(@"CA ==> %@", [self currentAccount]->tlsCaListCertificate()->path().toNSURL()); + [caListPathControl setURL:[self currentAccount]->tlsCaListCertificate()->path().toNSURL()]; } else { [caListPathControl setURL:nil]; } - if(privateAccount->tlsCertificate() != nil) { - NSLog(@" CERT ==> %@", privateAccount->tlsCertificate()->path().toNSURL()); - [certificatePathControl setURL:privateAccount->tlsCertificate()->path().toNSURL()]; + if([self currentAccount]->tlsCertificate() != nil) { + NSLog(@" CERT ==> %@", [self currentAccount]->tlsCertificate()->path().toNSURL()); + [certificatePathControl setURL:[self currentAccount]->tlsCertificate()->path().toNSURL()]; } else { [certificatePathControl setURL:nil]; } - if(privateAccount->tlsPrivateKeyCertificate() != nil) { - NSLog(@" PVK ==> %@", privateAccount->tlsPrivateKeyCertificate()->path().toNSURL()); - [pvkPathControl setURL:privateAccount->tlsPrivateKeyCertificate()->path().toNSURL()]; + if([self currentAccount]->tlsPrivateKeyCertificate() != nil) { + NSLog(@" PVK ==> %@", [self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL()); + [pvkPathControl setURL:[self currentAccount]->tlsPrivateKeyCertificate()->path().toNSURL()]; } else { [pvkPathControl setURL:nil]; } - [verifyCertAsServerButton setState:privateAccount->isTlsVerifyServer()]; - [verifyCertAsClientButton setState:privateAccount->isTlsVerifyClient()]; - [requireCertButton setState:privateAccount->isTlsRequireClientCertificate()]; + [verifyCertAsServerButton setState:[self currentAccount]->isTlsVerifyServer()]; + [verifyCertAsClientButton setState:[self currentAccount]->isTlsVerifyClient()]; + [requireCertButton setState:[self currentAccount]->isTlsRequireClientCertificate()]; } /* @@ -204,40 +216,40 @@ - (IBAction)chooseTlsMethod:(id)sender { int index = [sender indexOfSelectedItem]; - QModelIndex qIdx = privateAccount->tlsMethodModel()->index(index, 0); - privateAccount->tlsMethodModel()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect); + QModelIndex qIdx = [self currentAccount]->tlsMethodModel()->index(index, 0); + [self currentAccount]->tlsMethodModel()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect); } - (IBAction)toggleUseTLS:(id)sender { - privateAccount->setTlsEnabled([sender state]); + [self currentAccount]->setTlsEnabled([sender state]); [tlsContainer setHidden:![sender state]]; } - (IBAction)toggleUseSRTP:(id)sender { - privateAccount->setSrtpEnabled([sender state]); + [self currentAccount]->setSrtpEnabled([sender state]); [srtpRTPFallback setEnabled:[sender state]]; } - (IBAction)toggleRTPFallback:(id)sender { - privateAccount->setSrtpRtpFallback([sender state]); + [self currentAccount]->setSrtpRtpFallback([sender state]); } - (IBAction)toggleVerifyCertAsClient:(id)sender { - privateAccount->setTlsVerifyClient([sender state]); + [self currentAccount]->setTlsVerifyClient([sender state]); } - (IBAction)toggleVerifyCertServer:(id)sender { - privateAccount->setTlsVerifyServer([sender state]); + [self currentAccount]->setTlsVerifyServer([sender state]); } - (IBAction)toggleRequireCert:(id)sender { - privateAccount->setTlsRequireClientCertificate([sender state]); + [self currentAccount]->setTlsRequireClientCertificate([sender state]); } - (IBAction)toggleCipher:(id)sender { NSInteger row = [sender clickedRow]; NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE]; NSButtonCell *cell = [col dataCellForRow:row]; - privateAccount->cipherModel()->setData(privateAccount->cipherModel()->index(row, 0, QModelIndex()), + [self currentAccount]->cipherModel()->setData([self currentAccount]->cipherModel()->index(row, 0, QModelIndex()), cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole); } @@ -245,14 +257,14 @@ { switch (tag) { case PVK_PASSWORD_TAG: - [pvkPasswordField setStringValue:privateAccount->tlsPassword().toNSString()]; + [pvkPasswordField setStringValue:[self currentAccount]->tlsPassword().toNSString()]; break; case OUTGOING_TLS_SRV_NAME: - [outgoingTlsServerName setStringValue:privateAccount->tlsServerName().toNSString()]; + [outgoingTlsServerName setStringValue:[self currentAccount]->tlsServerName().toNSString()]; break; case TLS_NEGOTIATION_TAG: - [tlsNegotiationTimeout setIntegerValue:privateAccount->tlsNegotiationTimeoutSec()]; - [tlsNegotiationTimeoutStepper setIntegerValue:privateAccount->tlsNegotiationTimeoutSec()]; + [tlsNegotiationTimeout setIntegerValue:[self currentAccount]->tlsNegotiationTimeoutSec()]; + [tlsNegotiationTimeoutStepper setIntegerValue:[self currentAccount]->tlsNegotiationTimeoutSec()]; break; default: break; @@ -276,13 +288,13 @@ { switch ([sender tag]) { case PVK_PASSWORD_TAG: - privateAccount->setTlsPassword([[sender stringValue] UTF8String]); + [self currentAccount]->setTlsPassword([[sender stringValue] UTF8String]); break; case OUTGOING_TLS_SRV_NAME: - privateAccount->setTlsServerName([[sender stringValue] UTF8String]); + [self currentAccount]->setTlsServerName([[sender stringValue] UTF8String]); break; case TLS_NEGOTIATION_TAG: - privateAccount->setTlsNegotiationTimeoutSec([sender integerValue]); + [self currentAccount]->setTlsNegotiationTimeoutSec([sender integerValue]); break; default: break; @@ -295,7 +307,7 @@ NSURL* fileURL = [[sender clickedPathComponentCell] URL]; NSLog(@"==> %@", fileURL); [self.caListPathControl setURL:fileURL]; - privateAccount->setTlsCaListCertificate(QUrl::fromNSURL(fileURL).toString()); + [self currentAccount]->setTlsCaListCertificate(QUrl::fromNSURL(fileURL).toString()); } - (IBAction)certificatePathControlSingleClick:(id)sender { @@ -303,30 +315,27 @@ NSURL* fileURL = [[sender clickedPathComponentCell] URL]; NSLog(@"==> %@", fileURL); [self.certificatePathControl setURL:fileURL]; - privateAccount->setTlsCertificate(QUrl::fromNSURL(fileURL).toString()); + [self currentAccount]->setTlsCertificate(QUrl::fromNSURL(fileURL).toString()); } - (IBAction)pvkFilePathControlSingleClick:(id)sender { NSURL* fileURL = [[sender clickedPathComponentCell] URL]; NSLog(@"==> %@", fileURL); [self.pvkPathControl setURL:fileURL]; - privateAccount->setTlsPrivateKeyCertificate(QUrl::fromNSURL(fileURL).toString()); - - - // qDebug() << "TEST" << privateAccount->tlsPrivateKeyCertificate()->hasPrivateKey(); + [self currentAccount]->setTlsPrivateKeyCertificate(QUrl::fromNSURL(fileURL).toString()); } - (IBAction)showCA:(id)sender { certificateWC = [[CertificateWC alloc] initWithWindowNibName:@"CertificateWindow"]; - [certificateWC setCertificate:privateAccount->tlsCaListCertificate()]; + [certificateWC setCertificate:[self currentAccount]->tlsCaListCertificate()]; [self.view.window beginSheet:certificateWC.window completionHandler:nil]; } - (IBAction)showEndpointCertificate:(id)sender { certificateWC = [[CertificateWC alloc] initWithWindowNibName:@"CertificateWindow"]; - [certificateWC setCertificate:privateAccount->tlsCertificate()]; + [certificateWC setCertificate:[self currentAccount]->tlsCertificate()]; [self.view.window beginSheet:certificateWC.window completionHandler:nil];} /* @@ -348,7 +357,6 @@ [openPanel setTitle:NSLocalizedString(@"Choose a private key file", @"Open panel title")]; } - [openPanel setPrompt:NSLocalizedString(@"Choose", @"Open panel prompt for 'Choose a file'")]; [openPanel setDelegate:self]; } @@ -389,7 +397,7 @@ if([menu.title isEqualToString:@"tlsmethodlist"]) { - qIdx = privateAccount->tlsMethodModel()->index(index); + qIdx = [self currentAccount]->tlsMethodModel()->index(index); [item setTitle:qIdx.data(Qt::DisplayRole).toString().toNSString()]; } return YES; @@ -398,7 +406,7 @@ - (NSInteger)numberOfItemsInMenu:(NSMenu *)menu { if([menu.title isEqualToString:@"tlsmethodlist"]) - return privateAccount->tlsMethodModel()->rowCount(); + return [self currentAccount]->tlsMethodModel()->rowCount(); } #pragma mark - NSOutlineViewDelegate methods diff --git a/src/AccVideoVC.h b/src/AccVideoVC.h index b7fa537841f49350e1b4a6cfcbc1ff1121bb90d0..aade71ce76dcf07e64409334162e6c096f4de243 100644 --- a/src/AccVideoVC.h +++ b/src/AccVideoVC.h @@ -34,11 +34,7 @@ #import <account.h> -@interface AccVideoVC : NSViewController <NSOutlineViewDelegate> { - -} - -- (void)loadAccount:(Account *)account; +@interface AccVideoVC : NSViewController <NSOutlineViewDelegate> @end diff --git a/src/AccVideoVC.mm b/src/AccVideoVC.mm index 7d3ebe590301911b60d495785b0f288ea0f23eb6..862e02d028f5408d1a70f311aa6217f467782f81 100644 --- a/src/AccVideoVC.mm +++ b/src/AccVideoVC.mm @@ -37,12 +37,12 @@ #include <QtCore/QSortFilterProxyModel> #import <audio/codecmodel.h> #import <accountmodel.h> +#import <qitemselectionmodel.h> #import "QNSTreeController.h" @interface AccVideoVC () -@property Account* privateAccount; @property QNSTreeController *treeController; @property (assign) IBOutlet NSOutlineView *codecsView; @property (assign) IBOutlet NSView *videoPanelContainer; @@ -53,40 +53,52 @@ @implementation AccVideoVC @synthesize treeController; @synthesize codecsView; -@synthesize privateAccount; @synthesize videoPanelContainer; @synthesize toggleVideoButton; - (void)awakeFromNib { NSLog(@"INIT Video VC"); + QObject::connect(AccountModel::instance()->selectionModel(), + &QItemSelectionModel::currentChanged, + [=](const QModelIndex ¤t, const QModelIndex &previous) { + if(!current.isValid()) + return; + [self loadAccount]; + }); } -- (void)loadAccount:(Account *)account +- (Account*) currentAccount { - privateAccount = account; + auto accIdx = AccountModel::instance()->selectionModel()->currentIndex(); + return AccountModel::instance()->getAccountByModelIndex(accIdx); +} + +- (void)loadAccount +{ + auto account = [self currentAccount]; - treeController = [[QNSTreeController alloc] initWithQModel:privateAccount->codecModel()->videoCodecs()]; + treeController = [[QNSTreeController alloc] initWithQModel:[self currentAccount]->codecModel()->videoCodecs()]; [treeController setAvoidsEmptySelection:NO]; [treeController setChildrenKeyPath:@"children"]; [codecsView bind:@"content" toObject:treeController withKeyPath:@"arrangedObjects" options:nil]; [codecsView bind:@"sortDescriptors" toObject:treeController withKeyPath:@"sortDescriptors" options:nil]; [codecsView bind:@"selectionIndexPaths" toObject:treeController withKeyPath:@"selectionIndexPaths" options:nil]; - [videoPanelContainer setHidden:!privateAccount->isVideoEnabled()]; - [toggleVideoButton setState:privateAccount->isVideoEnabled()?NSOnState:NSOffState]; + [videoPanelContainer setHidden:![self currentAccount]->isVideoEnabled()]; + [toggleVideoButton setState:[self currentAccount]->isVideoEnabled()?NSOnState:NSOffState]; } - (IBAction)toggleVideoEnabled:(id)sender { - privateAccount->setVideoEnabled([sender state] == NSOnState); - [videoPanelContainer setHidden:!privateAccount->isVideoEnabled()]; + [self currentAccount]->setVideoEnabled([sender state] == NSOnState); + [videoPanelContainer setHidden:![self currentAccount]->isVideoEnabled()]; } - (IBAction)toggleCodec:(NSOutlineView*)sender { NSInteger row = [sender clickedRow]; NSTableColumn *col = [sender tableColumnWithIdentifier:COLUMNID_STATE]; NSButtonCell *cell = [col dataCellForRow:row]; - privateAccount->codecModel()->videoCodecs()->setData(privateAccount->codecModel()->videoCodecs()->index(row, 0, QModelIndex()), + [self currentAccount]->codecModel()->videoCodecs()->setData([self currentAccount]->codecModel()->videoCodecs()->index(row, 0, QModelIndex()), cell.state == NSOnState ? Qt::Unchecked : Qt::Checked, Qt::CheckStateRole); } @@ -97,8 +109,8 @@ if(!qIdx.isValid()) return; - QMimeData* mime = privateAccount->codecModel()->mimeData(QModelIndexList() << qIdx); - privateAccount->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex()); + QMimeData* mime = [self currentAccount]->codecModel()->mimeData(QModelIndexList() << qIdx); + [self currentAccount]->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() - 1, 0, QModelIndex()); } } @@ -108,8 +120,8 @@ if(!qIdx.isValid()) return; - QMimeData* mime = privateAccount->codecModel()->mimeData(QModelIndexList() << qIdx); - privateAccount->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex()); + QMimeData* mime = [self currentAccount]->codecModel()->mimeData(QModelIndexList() << qIdx); + [self currentAccount]->codecModel()->dropMimeData(mime, Qt::MoveAction, qIdx.row() + 1, 0, QModelIndex()); } } @@ -171,17 +183,17 @@ return; if([[tableColumn identifier] isEqualToString:COLUMNID_STATE]) { - [cell setState:privateAccount->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; + [cell setState:[self currentAccount]->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; } else if ([[tableColumn identifier] isEqualToString:COLUMNID_CODECS]) { - cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString(); - [cell setState:privateAccount->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; + cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::NAME).toString().toNSString(); + [cell setState:[self currentAccount]->codecModel()->videoCodecs()->data(qIdx, Qt::CheckStateRole).value<BOOL>()?NSOnState:NSOffState]; } else if ([[tableColumn identifier] isEqualToString:COLUMNID_FREQ]) { - cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString(); + cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::SAMPLERATE).toString().toNSString(); } else if ([[tableColumn identifier] isEqualToString:COLUMNID_BITRATE]) { - cell.title = privateAccount->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString(); + cell.title = [self currentAccount]->codecModel()->videoCodecs()->data(qIdx, CodecModel::Role::BITRATE).toString().toNSString(); } } diff --git a/src/AccountsVC.mm b/src/AccountsVC.mm index 42ae01b62fb880d35e6a6d4b02f5bcc66021dd46..a04ddecc0d20999c36cb7b920107cba5162a147e 100644 --- a/src/AccountsVC.mm +++ b/src/AccountsVC.mm @@ -119,9 +119,10 @@ public: [accountsListView reloadDataForRowIndexes: [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(topLeft.row(), bottomRight.row() + 1)] columnIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, accountsListView.tableColumns.count)]]; - }); + AccountModel::instance()->selectionModel()->clearCurrentIndex(); + self.proxyProtocolModel = new ActiveProtocolModel(AccountModel::instance()->protocolModel()); QModelIndex qProtocolIdx = AccountModel::instance()->protocolModel()->selectionModel()->currentIndex(); [self.protocolList addItemWithTitle: @@ -193,10 +194,8 @@ public: } -- (void) setupSIPPanelsForAccount:(Account*) acc +- (void) setupSIPPanels { - NSTabViewItem* selected = [configPanels selectedTabViewItem]; - // Start by removing all tabs for(NSTabViewItem* item in configPanels.tabViewItems) { [configPanels removeTabViewItem:item]; @@ -207,18 +206,10 @@ public: [configPanels insertTabViewItem:videoTabItem atIndex:2]; [configPanels insertTabViewItem:advancedTabItem atIndex:3]; [configPanels insertTabViewItem:securityTabItem atIndex:4]; - - [self.generalVC loadAccount:acc]; - [self.audioVC loadAccount:acc]; - [self.videoVC loadAccount:acc]; - [self.advancedVC loadAccount:acc]; - [self.securityVC loadAccount:acc]; } -- (void) setupIAXPanelsForAccount:(Account*) acc +- (void) setupIAXPanels { - NSTabViewItem* selected = [configPanels selectedTabViewItem]; - // Start by removing all tabs for(NSTabViewItem* item in configPanels.tabViewItems) { [configPanels removeTabViewItem:item]; @@ -227,16 +218,10 @@ public: [configPanels insertTabViewItem:generalTabItem atIndex:0]; [configPanels insertTabViewItem:audioTabItem atIndex:1]; [configPanels insertTabViewItem:videoTabItem atIndex:2]; - - [self.generalVC loadAccount:acc]; - [self.audioVC loadAccount:acc]; - [self.videoVC loadAccount:acc]; } -- (void) setupRINGPanelsForAccount:(Account*) acc +- (void) setupRINGPanels { - NSTabViewItem* selected = [configPanels selectedTabViewItem]; - // Start by removing all tabs for(NSTabViewItem* item in configPanels.tabViewItems) { [configPanels removeTabViewItem:item]; @@ -245,14 +230,6 @@ public: [configPanels insertTabViewItem:ringTabItem atIndex:0]; [configPanels insertTabViewItem:audioTabItem atIndex:1]; [configPanels insertTabViewItem:videoTabItem atIndex:2]; - //[configPanels insertTabViewItem:advancedTabItem atIndex:3]; - //[configPanels insertTabViewItem:securityTabItem atIndex:4]; - - [self.ringVC loadAccount:acc]; - [self.audioVC loadAccount:acc]; - [self.videoVC loadAccount:acc]; - [self.advancedVC loadAccount:acc]; - [self.securityVC loadAccount:acc]; } - (IBAction)toggleAccount:(NSOutlineView*)sender { @@ -375,27 +352,26 @@ public: if([[treeController selectedNodes] count] > 0) { QModelIndex qIdx = [treeController toQIdx:[treeController selectedNodes][0]]; //Update details view - AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect); Account* acc = AccountModel::instance()->getAccountByModelIndex(qIdx); + AccountModel::instance()->selectionModel()->setCurrentIndex(qIdx, QItemSelectionModel::ClearAndSelect); switch (acc->protocol()) { case Account::Protocol::SIP: NSLog(@"SIP"); - [self setupSIPPanelsForAccount:acc]; + [self setupSIPPanels]; break; case Account::Protocol::IAX: NSLog(@"IAX"); - [self setupIAXPanelsForAccount:acc]; + [self setupIAXPanels]; break; case Account::Protocol::RING: - [self setupRINGPanelsForAccount:acc]; + [self setupRINGPanels]; NSLog(@"DRING"); break; default: break; } - [self.accountDetailsView setHidden:NO]; } else { [self.accountDetailsView setHidden:YES];