CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent) : SettingsPage(tr("Remote Cores"), QString(), parent), _lastAccountId(0), _lastAutoConnectId(0), _standalone(false) { ui.setupUi(this); initAutoWidgets(); ui.addAccountButton->setIcon(SmallIcon("list-add")); ui.editAccountButton->setIcon(SmallIcon("document-edit")); ui.deleteAccountButton->setIcon(SmallIcon("edit-delete")); _model = new CoreAccountModel(Client::coreAccountModel(), this); _filteredModel = new FilteredCoreAccountModel(_model, this); ui.accountView->setModel(filteredModel()); ui.autoConnectAccount->setModel(filteredModel()); connect(filteredModel(), SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), SLOT(rowsAboutToBeRemoved(QModelIndex, int, int))); connect(filteredModel(), SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(rowsInserted(QModelIndex, int, int))); connect(ui.accountView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)), SLOT(setWidgetStates())); connect(ui.autoConnectAccount, SIGNAL(currentIndexChanged(int)), SLOT(widgetHasChanged())); setWidgetStates(); }
void CoreAccountSettingsPage::load() { model()->update(Client::coreAccountModel()); SettingsPage::load(); CoreAccountSettings s; if (Quassel::runMode() != Quassel::Monolithic) { // make sure we don't have selected the internal account as autoconnect account if (s.autoConnectOnStartup() && s.autoConnectToFixedAccount()) { CoreAccount acc = model()->account(s.autoConnectAccount()); if (acc.isInternal()) ui.autoConnectOnStartup->setChecked(false); } } ui.accountView->setCurrentIndex(filteredModel()->index(0, 0)); ui.accountView->selectionModel()->select(filteredModel()->index(0, 0), QItemSelectionModel::Select); QModelIndex idx = filteredModel()->mapFromSource(model()->accountIndex(s.autoConnectAccount())); ui.autoConnectAccount->setCurrentIndex(idx.isValid() ? idx.row() : 0); ui.autoConnectAccount->setProperty("storedValue", ui.autoConnectAccount->currentIndex()); setWidgetStates(); // Mark as no changes made, we just loaded settings setChangedState(false); }
void CoreAccountSettingsPage::editAccount(const QModelIndex &index) { if(!index.isValid()) return; CoreAccountEditDlg dlg(model()->account(filteredModel()->mapToSource(index)), this); if(dlg.exec() == QDialog::Accepted) { AccountId id = model()->createOrUpdateAccount(dlg.account()); ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } }
void CoreAccountSettingsPage::rowsInserted(const QModelIndex &index, int start, int end) { if(index.isValid() || start != end) return; // check if the inserted index was just removed and select it in that case AccountId id = filteredModel()->index(start, 0).data(CoreAccountModel::AccountIdRole).value<AccountId>(); if(id == _lastAccountId) ui.accountView->setCurrentIndex(filteredModel()->index(start, 0)); if(id == _lastAutoConnectId) ui.autoConnectAccount->setCurrentIndex(start); _lastAccountId = _lastAutoConnectId = 0; }
void CoreAccountSettingsPage::on_addAccountButton_clicked() { CoreAccountEditDlg dlg(CoreAccount(), this); if(dlg.exec() == QDialog::Accepted) { AccountId id =model()->createOrUpdateAccount(dlg.account()); ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } }
void CoreAccountSettingsPage::save() { SettingsPage::save(); Client::coreAccountModel()->update(model()); Client::coreAccountModel()->save(); CoreAccountSettings s; AccountId id = filteredModel()->index(ui.autoConnectAccount->currentIndex(), 0).data(CoreAccountModel::AccountIdRole).value<AccountId>(); s.setAutoConnectAccount(id); ui.autoConnectAccount->setProperty("storedValue", ui.autoConnectAccount->currentIndex()); }
// TODO: Qt 4.6 - replace by proper rowsMoved() semantics // NOTE: This is the filtered model void CoreAccountSettingsPage::rowsAboutToBeRemoved(const QModelIndex &index, int start, int end) { _lastAutoConnectId = _lastAccountId = 0; if(index.isValid() || start != end) return; // the current index is removed, so remember it in case it's reinserted immediately afterwards AccountId id = filteredModel()->index(start, 0).data(CoreAccountModel::AccountIdRole).value<AccountId>(); if(start == ui.accountView->currentIndex().row()) _lastAccountId = id; if(start == ui.autoConnectAccount->currentIndex()) _lastAutoConnectId = id; }
void CoreAccountSettingsPage::setSelectedAccount(AccountId accId) { QModelIndex index = filteredModel()->mapFromSource(model()->accountIndex(accId)); if (index.isValid()) ui.accountView->setCurrentIndex(index); }