X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fcoreaccountsettingspage.cpp;h=11188ac2213feeecf7a4dc255e1bc2c92192f49f;hp=0cee736720ae8b88cf590d13747f8e5b63bda69f;hb=2cdbd53254371cd538a1437c39d22422249fea1a;hpb=bf86381e85cd97ef04a9dc45c2b1a063035391fa diff --git a/src/qtui/settingspages/coreaccountsettingspage.cpp b/src/qtui/settingspages/coreaccountsettingspage.cpp index 0cee7367..11188ac2 100644 --- a/src/qtui/settingspages/coreaccountsettingspage.cpp +++ b/src/qtui/settingspages/coreaccountsettingspage.cpp @@ -26,7 +26,7 @@ #include "iconloader.h" CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent) -: SettingsPage(tr("Misc"), tr("Core Accounts"), parent), +: SettingsPage(tr("Remote Cores"), QString(), parent), _lastAccountId(0), _lastAutoConnectId(0), _standalone(false) @@ -38,13 +38,16 @@ _standalone(false) ui.deleteAccountButton->setIcon(SmallIcon("edit-delete")); _model = new CoreAccountModel(Client::coreAccountModel(), this); - ui.accountView->setModel(_model); - ui.autoConnectAccount->setModel(_model); + _filteredModel = new FilteredCoreAccountModel(_model, this); - connect(model(), SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)), SLOT(rowsAboutToBeRemoved(QModelIndex, int, int))); - connect(model(), SIGNAL(rowsInserted(QModelIndex, int, int)), SLOT(rowsInserted(QModelIndex, int, int))); + 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(); } @@ -53,51 +56,48 @@ void CoreAccountSettingsPage::setStandAlone(bool standalone) { } void CoreAccountSettingsPage::load() { - _model->update(Client::coreAccountModel()); - + model()->update(Client::coreAccountModel()); SettingsPage::load(); - ui.accountView->setCurrentIndex(model()->index(0, 0)); - ui.accountView->selectionModel()->select(model()->index(0, 0), QItemSelectionModel::Select); + + 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(); } void CoreAccountSettingsPage::save() { SettingsPage::save(); - Client::coreAccountModel()->update(_model); + Client::coreAccountModel()->update(model()); Client::coreAccountModel()->save(); CoreAccountSettings s; -} - -QVariant CoreAccountSettingsPage::loadAutoWidgetValue(const QString &widgetName) { - if(widgetName == "autoConnectAccount") { - CoreAccountSettings s; - AccountId id = s.autoConnectAccount(); - if(!id.isValid()) - return QVariant(); - ui.autoConnectAccount->setCurrentIndex(model()->accountIndex(id).row()); - return id.toInt(); - } - return SettingsPage::loadAutoWidgetValue(widgetName); -} - -void CoreAccountSettingsPage::saveAutoWidgetValue(const QString &widgetName, const QVariant &v) { - CoreAccountSettings s; - if(widgetName == "autoConnectAccount") { - AccountId id = _model->index(ui.autoConnectAccount->currentIndex(), 0).data(CoreAccountModel::AccountIdRole).value(); - s.setAutoConnectAccount(id); - return; - } - SettingsPage::saveAutoWidgetValue(widgetName, v); + AccountId id = filteredModel()->index(ui.autoConnectAccount->currentIndex(), 0).data(CoreAccountModel::AccountIdRole).value(); + 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 = model()->index(start, 0).data(CoreAccountModel::AccountIdRole).value(); + AccountId id = filteredModel()->index(start, 0).data(CoreAccountModel::AccountIdRole).value(); if(start == ui.accountView->currentIndex().row()) _lastAccountId = id; if(start == ui.autoConnectAccount->currentIndex()) @@ -109,9 +109,9 @@ void CoreAccountSettingsPage::rowsInserted(const QModelIndex &index, int start, return; // check if the inserted index was just removed and select it in that case - AccountId id = model()->index(start, 0).data(CoreAccountModel::AccountIdRole).value(); + AccountId id = filteredModel()->index(start, 0).data(CoreAccountModel::AccountIdRole).value(); if(id == _lastAccountId) - ui.accountView->setCurrentIndex(model()->index(start, 0)); + ui.accountView->setCurrentIndex(filteredModel()->index(start, 0)); if(id == _lastAutoConnectId) ui.autoConnectAccount->setCurrentIndex(start); _lastAccountId = _lastAutoConnectId = 0; @@ -125,7 +125,7 @@ AccountId CoreAccountSettingsPage::selectedAccount() const { } void CoreAccountSettingsPage::setSelectedAccount(AccountId accId) { - QModelIndex index = model()->accountIndex(accId); + QModelIndex index = filteredModel()->mapFromSource(model()->accountIndex(accId)); if(index.isValid()) ui.accountView->setCurrentIndex(index); } @@ -133,8 +133,8 @@ void CoreAccountSettingsPage::setSelectedAccount(AccountId accId) { void CoreAccountSettingsPage::on_addAccountButton_clicked() { CoreAccountEditDlg dlg(CoreAccount(), this); if(dlg.exec() == QDialog::Accepted) { - AccountId id =_model->createOrUpdateAccount(dlg.account()); - ui.accountView->setCurrentIndex(model()->accountIndex(id)); + AccountId id =model()->createOrUpdateAccount(dlg.account()); + ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } } @@ -151,10 +151,10 @@ void CoreAccountSettingsPage::editAccount(const QModelIndex &index) { if(!index.isValid()) return; - CoreAccountEditDlg dlg(_model->account(index), this); + CoreAccountEditDlg dlg(model()->account(filteredModel()->mapToSource(index)), this); if(dlg.exec() == QDialog::Accepted) { - AccountId id = _model->createOrUpdateAccount(dlg.account()); - ui.accountView->setCurrentIndex(model()->accountIndex(id)); + AccountId id = model()->createOrUpdateAccount(dlg.account()); + ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } } @@ -162,6 +162,7 @@ void CoreAccountSettingsPage::editAccount(const QModelIndex &index) { void CoreAccountSettingsPage::on_deleteAccountButton_clicked() { if(!ui.accountView->selectionModel()->selectedIndexes().count()) return; + AccountId id = ui.accountView->selectionModel()->selectedIndexes().at(0).data(CoreAccountModel::AccountIdRole).value(); if(id.isValid()) { model()->removeAccount(id); @@ -180,10 +181,11 @@ void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex &in } void CoreAccountSettingsPage::setWidgetStates() { - bool selected = ui.accountView->selectionModel()->selectedIndexes().count(); + AccountId accId = selectedAccount(); + bool editable = accId.isValid() && accId != model()->internalAccount(); - ui.editAccountButton->setEnabled(selected); - ui.deleteAccountButton->setEnabled(selected); + ui.editAccountButton->setEnabled(editable); + ui.deleteAccountButton->setEnabled(editable); } void CoreAccountSettingsPage::widgetHasChanged() { @@ -192,6 +194,8 @@ void CoreAccountSettingsPage::widgetHasChanged() { } bool CoreAccountSettingsPage::testHasChanged() { + if(ui.autoConnectAccount->currentIndex() != ui.autoConnectAccount->property("storedValue").toInt()) + return true; if(!(*model() == *Client::coreAccountModel())) return true; @@ -264,3 +268,22 @@ void CoreAccountEditDlg::on_user_textChanged(const QString &text) { Q_UNUSED(text) setWidgetStates(); } + +/***************************************************************************************** + * FilteredCoreAccountModel + *****************************************************************************************/ + +FilteredCoreAccountModel::FilteredCoreAccountModel(CoreAccountModel *model, QObject *parent) : QSortFilterProxyModel(parent) { + _internalAccount = model->internalAccount(); + setSourceModel(model); +} + +bool FilteredCoreAccountModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + if(Quassel::runMode() == Quassel::Monolithic) + return true; + + if(!_internalAccount.isValid()) + return true; + + return _internalAccount != sourceModel()->index(source_row, 0, source_parent).data(CoreAccountModel::AccountIdRole).value(); +}