From kde-commits Thu Sep 23 13:49:59 2010 From: =?utf-8?q?Gustavo=20P=2E=20Boiko?= Date: Thu, 23 Sep 2010 13:49:59 +0000 To: kde-commits Subject: playground/network/telepathy-accounts-kcm/src Message-Id: <20100923134959.B1E44AC888 () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=128524948011187 SVN commit 1178681 by boiko: Make the dialogs modal and use a simpler method to set the config pages' title. This commit also makes the editting of accounts a resposibility of the kcm module instead of doing that in the item itself. The sideeffect of this commit is that it also fixes the account list not being refreshed sometimes. BUG: 252053 M +1 -38 account-item.cpp M +0 -4 account-item.h M +9 -21 accounts-list-model.cpp M +1 -1 accounts-list-model.h M +9 -45 add-account-assistant.cpp M +0 -5 add-account-assistant.h M +13 -26 edit-account-dialog.cpp M +1 -6 edit-account-dialog.h M +8 -61 kcm-telepathy-accounts.cpp M +0 -4 kcm-telepathy-accounts.h --- trunk/playground/network/telepathy-accounts-kcm/src/account-item.cpp #1178680:1178681 @@ -36,8 +36,7 @@ AccountItem::AccountItem(const Tp::AccountPtr &account, AccountsListModel *parent) : QObject(parent), m_account(account), - m_icon(new KIcon()), - m_editAccountDialog(0) + m_icon(new KIcon()) { kDebug(); @@ -80,32 +79,6 @@ return m_account; } -void AccountItem::edit() -{ - kDebug(); - - // If the edit dialog already exists, focus it. - if (m_editAccountDialog) { - m_editAccountDialog->focusWidget(); - return; - } - - // FIXME: There should be a driving test for those who want to become parents... :'( - QWidget *p = qobject_cast(parent()->parent()); - m_editAccountDialog = new EditAccountDialog(this, p); // FIXME: Argh I'm going to jump off a bridge - - // Connect to the dialog's signals. - connect(m_editAccountDialog, - SIGNAL(finished()), - SLOT(onAccountEdited())); - connect(m_editAccountDialog, SIGNAL(protocolSelected(QString, QString)), - this, SIGNAL(protocolSelected(QString, QString))); - connect(this, SIGNAL(setTitleForCustomPages(QString, QList)), - m_editAccountDialog, SLOT(onTitleForCustomPages(QString, QList))); - - m_editAccountDialog->show(); -} - void AccountItem::remove() { kDebug() << "Account about to be removed"; @@ -177,16 +150,6 @@ Q_EMIT removed(); } -void AccountItem::onAccountEdited() -{ - kDebug(); - - m_editAccountDialog->deleteLater(); - m_editAccountDialog = 0; - - Q_EMIT updated(); -} - void AccountItem::onTitleForCustomPages(QString mandatoryPage, QList optionalPage) { kDebug(); --- trunk/playground/network/telepathy-accounts-kcm/src/account-item.h #1178680:1178681 @@ -28,7 +28,6 @@ class KIcon; class AccountsListModel; -class EditAccountDialog; namespace Tp { class PendingOperation; @@ -43,7 +42,6 @@ explicit AccountItem(const Tp::AccountPtr &account, AccountsListModel *parent = 0); virtual ~AccountItem(); Tp::AccountPtr account() const; - void edit(); void remove(); const KIcon& icon() const; @@ -61,12 +59,10 @@ void generateIcon(); void onAccountReady(Tp::PendingOperation *op); void onAccountRemoved(Tp::PendingOperation *op); - void onAccountEdited(); private: Tp::AccountPtr m_account; KIcon* m_icon; - EditAccountDialog *m_editAccountDialog; }; --- trunk/playground/network/telepathy-accounts-kcm/src/accounts-list-model.cpp #1178680:1178681 @@ -140,44 +140,32 @@ } } -void AccountsListModel::editAccount(const QModelIndex &index) +void AccountsListModel::removeAccount(const QModelIndex &index) { kDebug(); if(!index.isValid()) { - kWarning() << "Can't edit Account: Invalid index."; + kDebug() << "Can't remove Account: Invalid index"; return; } - AccountItem *accountItem = m_readyAccounts.at(index.row()); - if (!accountItem) { - kWarning() << "Account item is null."; - return; - } + Q_ASSERT(accountItem); - accountItem->disconnect(); - connect(accountItem, SIGNAL(protocolSelected(QString, QString)), - this, SIGNAL(protocolSelected(QString, QString))); - connect(this, SIGNAL(setTitleForCustomPages(QString, QList)), - accountItem, SLOT(onTitleForCustomPages(QString, QList))); - - accountItem->edit(); + accountItem->remove(); } -void AccountsListModel::removeAccount(const QModelIndex &index) +AccountItem* AccountsListModel::itemForIndex(const QModelIndex &index) { kDebug(); if(!index.isValid()) { - kDebug() << "Can't remove Account: Invalid index"; - return; + kWarning() << "Invalid index" << index; + return 0; } - AccountItem *accountItem = m_readyAccounts.at(index.row()); - Q_ASSERT(accountItem); - - accountItem->remove(); + AccountItem *accountItem = m_readyAccounts.at(index.row()); + return accountItem; } void AccountsListModel::onAccountItemReady() --- trunk/playground/network/telepathy-accounts-kcm/src/accounts-list-model.h #1178680:1178681 @@ -40,8 +40,8 @@ virtual Qt::ItemFlags flags(const QModelIndex &index) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); void addAccount(const Tp::AccountPtr &account); - void editAccount(const QModelIndex &index); void removeAccount(const QModelIndex &index); + AccountItem* itemForIndex(const QModelIndex &index); Q_SIGNALS: void protocolSelected(QString, QString); --- trunk/playground/network/telepathy-accounts-kcm/src/add-account-assistant.cpp #1178680:1178681 @@ -61,8 +61,6 @@ QList optionalParametersWidgets; KPageWidgetItem *pageOne; KPageWidgetItem *pageTwo; - QString mandatoryPageDesc; - QList optionalPageDesc; }; AddAccountAssistant::AddAccountAssistant(Tp::AccountManagerPtr accountManager, QWidget *parent) @@ -83,8 +81,7 @@ SLOT(onProtocolSelected(bool))); connect(d->protocolSelectWidget, SIGNAL(protocolDoubleClicked()), - SLOT(onProtocolDoubleClicked()), - Qt::DirectConnection); + SLOT(next())); d->tabWidget = new KTabWidget(this); d->pageTwo = new KPageWidgetItem(d->tabWidget); @@ -206,12 +203,11 @@ item->mandatoryParameters(), QVariantMap(), d->tabWidget); } - if(d->mandatoryPageDesc.isEmpty()) - d->tabWidget->addTab(d->mandatoryParametersWidget, i18n("Mandatory Parameters")); - else - d->tabWidget->addTab(d->mandatoryParametersWidget, d->mandatoryPageDesc); + QString title = d->mandatoryParametersWidget->windowTitle(); + if (title.isEmpty()) + title = i18n("Mandatory Parameters"); - int pageIndex = 0; + d->tabWidget->addTab(d->mandatoryParametersWidget, title); // Check if the AbstractAccountUi exists. If not then we use the autogenerated UI for // everything. @@ -236,13 +232,10 @@ foreach (AbstractAccountParametersWidget *widget, widgets) { d->optionalParametersWidgets.append(widget); - int indexOf = widgets.indexOf(widget); - QString description = i18n("Optional parameter"); - if(indexOf < d->optionalPageDesc.size()) - description = d->optionalPageDesc.at(indexOf); - - d->tabWidget->addTab(widget, description); - pageIndex++; + title = widget->windowTitle(); + if (title.isEmpty()) + title = i18n("Optional Parameters"); + d->tabWidget->addTab(widget, title); } } @@ -253,9 +246,6 @@ QVariantMap(), d->tabWidget); d->optionalParametersWidgets.append(opew); - if(pageIndex < d->optionalPageDesc.size()) - d->tabWidget->addTab(opew, d->optionalPageDesc.at(pageIndex)); - else d->tabWidget->addTab(opew, i18n("Optional Parameters")); } @@ -429,33 +419,7 @@ kDebug(); //if a protocol is selected, enable the next button on the first page setValid(d->pageOne, value); - - if(value) - { - ProtocolItem *item = d->protocolSelectWidget->selectedProtocol(); - emit protocolSelected(item->protocol(), item->localizedName()); } -} -void AddAccountAssistant::onProtocolDoubleClicked() -{ - kDebug(); - - ProtocolItem *item = d->protocolSelectWidget->selectedProtocol(); - emit protocolSelected(item->protocol(), item->localizedName()); - next(); -} - -void AddAccountAssistant::onTitleForCustomPages(QString mandatoryPage, QList optionalPage) -{ - kDebug(); - d->mandatoryPageDesc.clear(); - d->optionalPageDesc.clear(); - - d->mandatoryPageDesc = mandatoryPage; - d->optionalPageDesc = optionalPage; -} - - #include "add-account-assistant.moc" --- trunk/playground/network/telepathy-accounts-kcm/src/add-account-assistant.h #1178680:1178681 @@ -44,16 +44,11 @@ Q_SIGNALS: void cancelled(); - void protocolSelected(QString, QString); -public Q_SLOTS: - void onTitleForCustomPages(QString mandatoryPage, QList optionalPage); - private Q_SLOTS: void onAccountCreated(Tp::PendingOperation *op); void onSetEnabledFinished(Tp::PendingOperation *op); void onProtocolSelected(bool value); - void onProtocolDoubleClicked(); private: class Private; --- trunk/playground/network/telepathy-accounts-kcm/src/edit-account-dialog.cpp #1178680:1178681 @@ -67,14 +67,8 @@ resize(400, 480); d->item = item; -} -void EditAccountDialog::show() -{ - emit protocolSelected(d->item->account()->protocol(), - d->item->account()->cmName()); - - KDialog::show(); + loadPages(); } EditAccountDialog::~EditAccountDialog() @@ -213,10 +207,8 @@ emit finished(); } -void EditAccountDialog::onTitleForCustomPages(QString mandatoryPageDesc, QList optionalPageDesc) +void EditAccountDialog::loadPages() { - kDebug(); - // Get the protocol's parameters. Tp::ProtocolInfo *protocolInfo = d->item->account()->protocolInfo(); Tp::ProtocolParameterList protocolParameters = protocolInfo->parameters(); @@ -283,16 +275,16 @@ d->tabWidget); } - if(mandatoryPageDesc.isEmpty()) - d->tabWidget->addTab(d->mandatoryParametersWidget, i18n("Mandatory Parameters")); - else - d->tabWidget->addTab(d->mandatoryParametersWidget, mandatoryPageDesc); + // Get the custom title for the page, if any + QString title = d->mandatoryParametersWidget->windowTitle(); + if (title.isEmpty()) + title = i18n("Mandatory Parameters"); - // Get the list of parameters + d->tabWidget->addTab(d->mandatoryParametersWidget, title); + + // Get the list of optional parameters Tp::ProtocolParameterList optionalParametersLeft = d->optionalProtocolParameters; - int pageIndex = 0; - // Check if the AbstractAccountUi exists. If not then we use the autogenerated UI for // everything. if (ui) { @@ -318,13 +310,11 @@ foreach (AbstractAccountParametersWidget *widget, widgets) { d->optionalParametersWidgets.append(widget); - int indexOf = widgets.indexOf(widget); - QString description = i18n("Optional parameter"); - if(indexOf < optionalPageDesc.size()) - description = optionalPageDesc.at(indexOf); + title = widget->windowTitle(); + if (title.isEmpty()) + title = i18n("Optional parameters"); - d->tabWidget->addTab(widget, description); - pageIndex++; + d->tabWidget->addTab(widget, title); } } @@ -335,9 +325,6 @@ d->item->account()->parameters(), d->tabWidget); d->optionalParametersWidgets.append(opew); - if(pageIndex < optionalPageDesc.size()) - d->tabWidget->addTab(opew, optionalPageDesc.at(pageIndex)); - else d->tabWidget->addTab(opew, i18n("Optional Parameters")); } } --- trunk/playground/network/telepathy-accounts-kcm/src/edit-account-dialog.h #1178680:1178681 @@ -35,13 +35,7 @@ explicit EditAccountDialog(AccountItem *item, QWidget *parent = 0); virtual ~EditAccountDialog(); -Q_SIGNALS: - void protocolSelected(QString, QString); -public Q_SLOTS: - void onTitleForCustomPages(QString, QList); - void show(); - protected Q_SLOTS: virtual void slotButtonClicked(int button); @@ -51,6 +45,7 @@ private: Q_DISABLE_COPY(EditAccountDialog); + void loadPages(); void accept(); class Private; --- trunk/playground/network/telepathy-accounts-kcm/src/kcm-telepathy-accounts.cpp #1178680:1178681 @@ -22,6 +22,7 @@ #include "accounts-list-model.h" #include "add-account-assistant.h" +#include "edit-account-dialog.h" #include #include @@ -78,9 +79,6 @@ connect(m_accountsListView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), SLOT(onSelectedItemChanged())); - connect(this, SIGNAL(setTitleForCustomPages(QString, QList)), - m_accountsListModel, SLOT(onTitleForCustomPages(QString, QList))); - } KCMTelepathyAccounts::~KCMTelepathyAccounts() @@ -144,31 +142,11 @@ return; } - // Ensure that there is not already an instance of the AddAccountAssistant before we create one."; - if (!m_addAccountAssistant) { - - // Create an AddAccountAssistant instance - m_addAccountAssistant = new AddAccountAssistant(m_accountManager, this); - - // Connect to its completion signals... - connect(m_addAccountAssistant, SIGNAL(cancelled()), - this, SLOT(onAddAccountAssistantClosed())); - connect(m_addAccountAssistant, SIGNAL(accepted()), - this, SLOT(onAddAccountAssistantClosed())); - connect(m_addAccountAssistant, SIGNAL(protocolSelected(QString, QString)), - this, SLOT(onProtocolSelected(QString, QString))); - connect(this, SIGNAL(setTitleForCustomPages(QString, QList)), - m_addAccountAssistant, SLOT(onTitleForCustomPages(QString, QList))); - - // ...and finally show it. - m_addAccountAssistant->show(); - - return; + // ...and finally exec it. + AddAccountAssistant assistant(m_accountManager, this); + assistant.exec(); } - kWarning() << "Cannot create a new AddAccountAssistant. One already exists."; -} - void KCMTelepathyAccounts::onEditAccountClicked() { kDebug(); @@ -179,18 +157,14 @@ } QModelIndex index = m_accountsListView->currentIndex(); + AccountItem *item = m_accountsListModel->itemForIndex(index); - // A valid account must be selected in the list to allow editing - if (!index.isValid()) { + if (!item) return; - } // Item is OK. Edit the item. - m_accountsListModel->disconnect(); - connect(m_accountsListModel, SIGNAL(protocolSelected(QString, QString)), - this, SLOT(onProtocolSelected(QString, QString))); - - m_accountsListModel->editAccount(index); + EditAccountDialog dialog(item, this); + dialog.exec(); } void KCMTelepathyAccounts::onRemoveAccountClicked() @@ -206,32 +180,5 @@ } } -void KCMTelepathyAccounts::onAddAccountAssistantClosed() -{ - kDebug(); - - // Add account assistant has been cancelled. Delete it. - m_addAccountAssistant->deleteLater(); - m_addAccountAssistant = 0; -} - -void KCMTelepathyAccounts::onProtocolSelected(QString protocol, QString localizedName) -{ - kDebug() << protocol << localizedName; - - QString mandatoryPage; - QList optionalPage; - - if(protocol == "jabber") - { - mandatoryPage = i18n("Basic setup"); - optionalPage.push_back(i18n("Account preferences")); - optionalPage.push_back(i18n("Connection settings")); - optionalPage.push_back(i18n("Advanced options")); - } - - emit setTitleForCustomPages(mandatoryPage, optionalPage); -} - #include "kcm-telepathy-accounts.moc" --- trunk/playground/network/telepathy-accounts-kcm/src/kcm-telepathy-accounts.h #1178680:1178681 @@ -44,8 +44,6 @@ const QVariantList& args = QVariantList()); virtual ~KCMTelepathyAccounts(); -Q_SIGNALS: - void setTitleForCustomPages(QString mandatoryPage, QList optionalPage); public Q_SLOTS: virtual void load(); @@ -58,8 +56,6 @@ void onAddAccountClicked(); void onEditAccountClicked(); void onRemoveAccountClicked(); - void onAddAccountAssistantClosed(); - void onProtocolSelected(QString protocol, QString localizedName); private: Tp::AccountManagerPtr m_accountManager;