X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fcoreaccountsettingspage.cpp;h=11188ac2213feeecf7a4dc255e1bc2c92192f49f;hb=f8275c3b697f1ee43d93bb4e5e688e87ca0405ce;hp=cd488a3abfcbd362bb4d5bd10721ccca6bf834c8;hpb=11d59689fd6e1fe322a18b29c86d24d0803d6a2d;p=quassel.git diff --git a/src/qtui/settingspages/coreaccountsettingspage.cpp b/src/qtui/settingspages/coreaccountsettingspage.cpp index cd488a3a..11188ac2 100644 --- a/src/qtui/settingspages/coreaccountsettingspage.cpp +++ b/src/qtui/settingspages/coreaccountsettingspage.cpp @@ -26,9 +26,10 @@ #include "iconloader.h" CoreAccountSettingsPage::CoreAccountSettingsPage(QWidget *parent) -: SettingsPage(tr("Misc"), tr("Core Accounts"), parent), +: SettingsPage(tr("Remote Cores"), QString(), parent), _lastAccountId(0), -_lastAutoConnectId(0) +_lastAutoConnectId(0), +_standalone(false) { ui.setupUi(this); initAutoWidgets(); @@ -37,62 +38,66 @@ _lastAutoConnectId(0) 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(); } -void CoreAccountSettingsPage::load() { - _model->update(Client::coreAccountModel()); +void CoreAccountSettingsPage::setStandAlone(bool standalone) { + _standalone = standalone; +} +void CoreAccountSettingsPage::load() { + model()->update(Client::coreAccountModel()); SettingsPage::load(); - ui.accountView->setCurrentIndex(model()->index(0, 0)); - ui.accountView->selectionModel()->select(model()->index(0, 0), QItemSelectionModel::Select); - setWidgetStates(); -} -void CoreAccountSettingsPage::save() { - SettingsPage::save(); - 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 <= 0) - return QVariant(); - ui.autoConnectAccount->setCurrentIndex(model()->accountIndex(id).row()); - return id.toInt(); + 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); + } } - return SettingsPage::loadAutoWidgetValue(widgetName); + 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::saveAutoWidgetValue(const QString &widgetName, const QVariant &v) { +void CoreAccountSettingsPage::save() { + SettingsPage::save(); + Client::coreAccountModel()->update(model()); + Client::coreAccountModel()->save(); 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()) @@ -104,19 +109,32 @@ 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; } +AccountId CoreAccountSettingsPage::selectedAccount() const { + QModelIndex index = ui.accountView->currentIndex(); + if(!index.isValid()) + return 0; + return index.data(CoreAccountModel::AccountIdRole).value(); +} + +void CoreAccountSettingsPage::setSelectedAccount(AccountId accId) { + QModelIndex index = filteredModel()->mapFromSource(model()->accountIndex(accId)); + if(index.isValid()) + ui.accountView->setCurrentIndex(index); +} + 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(); } } @@ -126,10 +144,17 @@ void CoreAccountSettingsPage::on_editAccountButton_clicked() { if(!idx.isValid()) return; - CoreAccountEditDlg dlg(_model->account(idx), this); + editAccount(idx); +} + +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(model()->accountIndex(id)); + AccountId id = model()->createOrUpdateAccount(dlg.account()); + ui.accountView->setCurrentIndex(filteredModel()->mapFromSource(model()->accountIndex(id))); widgetHasChanged(); } } @@ -137,6 +162,7 @@ void CoreAccountSettingsPage::on_editAccountButton_clicked() { 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); @@ -144,11 +170,22 @@ void CoreAccountSettingsPage::on_deleteAccountButton_clicked() { } } +void CoreAccountSettingsPage::on_accountView_doubleClicked(const QModelIndex &index) { + if(!index.isValid()) + return; + + if(isStandAlone()) + emit connectToCore(index.data(CoreAccountModel::AccountIdRole).value()); + else + editAccount(index); +} + 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() { @@ -157,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; @@ -229,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(); +}