X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fbufferviewsettingspage.cpp;h=a3308f9b569e2ab36312a49e3c3e46a94a591127;hp=40f636be33ddf2250a9c1d0e2b2b28cbed83305a;hb=921e54680da16fcf2adb7a90506875aceb6633a4;hpb=ddfe7ae76a3fa975aff475e6dc34898d2341ae38;ds=sidebyside diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index 40f636be..a3308f9b 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.cpp +++ b/src/qtui/settingspages/bufferviewsettingspage.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel IRC Team * + * Copyright (C) 2005-2015 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,490 +15,580 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #include "bufferviewsettingspage.h" +#include #include #include "client.h" -#include "iconloader.h" #include "network.h" #include "bufferviewconfig.h" #include "bufferviewfilter.h" -#include "bufferviewmanager.h" #include "buffermodel.h" +#include "clientbufferviewmanager.h" #include "networkmodel.h" +#include "util.h" BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent) - : SettingsPage(tr("General"), tr("Buffer Views"), parent), + : SettingsPage(tr("Interface"), tr("Custom Chat Lists"), parent), _ignoreWidgetChanges(false), _useBufferViewHint(false), _bufferViewHint(0) { - ui.setupUi(this); - ui.renameBufferView->setIcon(SmallIcon("edit-rename")); - ui.addBufferView->setIcon(SmallIcon("list-add")); - ui.deleteBufferView->setIcon(SmallIcon("edit-delete")); - - reset(); - - ui.bufferViewList->setSortingEnabled(true); - ui.settingsGroupBox->setEnabled(false); - ui.bufferViewPreview->setEnabled(false); - - coreConnectionStateChanged(Client::isConnected()); // need a core connection! - connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); - connect(ui.bufferViewList->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), - this, SLOT(bufferViewSelectionChanged(const QItemSelection &, const QItemSelection &))); - - connect(ui.onlyStatusBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.onlyChannelBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.onlyQueryBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.addNewBuffersAutomatically, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.sortAlphabetically, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.hideInactiveBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); - connect(ui.networkSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); - connect(ui.minimumActivitySelector, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + ui.setupUi(this); + //Hide the hide inactive networks feature on older cores (which won't save the setting) + if (!(Client::coreFeatures() & Quassel::HideInactiveNetworks)) + ui.hideInactiveNetworks->hide(); + + ui.renameBufferView->setIcon(QIcon::fromTheme("edit-rename")); + ui.addBufferView->setIcon(QIcon::fromTheme("list-add")); + ui.deleteBufferView->setIcon(QIcon::fromTheme("edit-delete")); + + reset(); + + ui.bufferViewList->setSortingEnabled(true); + ui.settingsGroupBox->setEnabled(false); + ui.bufferViewPreview->setEnabled(false); + + coreConnectionStateChanged(Client::isConnected()); // need a core connection! + connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool))); + connect(ui.bufferViewList->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + this, SLOT(bufferViewSelectionChanged(const QItemSelection &, const QItemSelection &))); + + connect(ui.onlyStatusBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.onlyChannelBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.onlyQueryBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.addNewBuffersAutomatically, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.sortAlphabetically, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.hideInactiveBuffers, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.hideInactiveNetworks, SIGNAL(clicked(bool)), this, SLOT(widgetHasChanged())); + connect(ui.networkSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + connect(ui.minimumActivitySelector, SIGNAL(currentIndexChanged(int)), this, SLOT(widgetHasChanged())); + + connect(ui.networkSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(enableStatusBuffers(int))); } -BufferViewSettingsPage::~BufferViewSettingsPage() { - reset(); + +BufferViewSettingsPage::~BufferViewSettingsPage() +{ + reset(); } -void BufferViewSettingsPage::reset() { - ui.bufferViewList->clear(); - QHash::iterator changedConfigIter = _changedBufferViews.begin(); - QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); - BufferViewConfig *config; - while(changedConfigIter != changedConfigIterEnd) { - config = changedConfigIter.value(); - changedConfigIter = _changedBufferViews.erase(changedConfigIter); - config->deleteLater(); - } +void BufferViewSettingsPage::reset() +{ + ui.bufferViewList->clear(); + ui.deleteBufferView->setEnabled(false); + + QHash::iterator changedConfigIter = _changedBufferViews.begin(); + QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); + BufferViewConfig *config; + while (changedConfigIter != changedConfigIterEnd) { + config = changedConfigIter.value(); + changedConfigIter = _changedBufferViews.erase(changedConfigIter); + config->deleteLater(); + } - QList::iterator newConfigIter = _newBufferViews.begin(); - QList::iterator newConfigIterEnd = _newBufferViews.end(); - while(newConfigIter != newConfigIterEnd) { - config = *newConfigIter; - newConfigIter = _newBufferViews.erase(newConfigIter); - config->deleteLater(); - } + QList::iterator newConfigIter = _newBufferViews.begin(); + QList::iterator newConfigIterEnd = _newBufferViews.end(); + while (newConfigIter != newConfigIterEnd) { + config = *newConfigIter; + newConfigIter = _newBufferViews.erase(newConfigIter); + config->deleteLater(); + } - _deleteBufferViews.clear(); + _deleteBufferViews.clear(); - bool _useBufferViewHint; - int _bufferViewHint; + _useBufferViewHint = false; - setChangedState(false); + setChangedState(false); } -void BufferViewSettingsPage::load() { - bool useBufferViewHint = _useBufferViewHint; - int bufferViewHint = _bufferViewHint; - reset(); - - if(!Client::bufferViewManager()) - return; - - const QList bufferViewConfigs = Client::bufferViewManager()->bufferViewConfigs(); - foreach(BufferViewConfig *bufferViewConfig, bufferViewConfigs) { - addBufferView(bufferViewConfig); - } - - _ignoreWidgetChanges = true; - // load network selector - ui.networkSelector->clear(); - ui.networkSelector->addItem(tr("All")); - ui.networkSelector->setItemData(0, qVariantFromValue(NetworkId())); - const Network *net; - foreach(NetworkId netId, Client::networkIds()) { - net = Client::network(netId); - ui.networkSelector->addItem(net->networkName()); - ui.networkSelector->setItemData(ui.networkSelector->count() - 1, qVariantFromValue(net->networkId())); - } - _ignoreWidgetChanges = false; - - - if(!useBufferViewHint || !selectBufferViewById(bufferViewHint)) - ui.bufferViewList->setCurrentRow(0); -} -void BufferViewSettingsPage::save() { - setEnabled(false); - - BufferViewConfig *currentConfig = bufferView(ui.bufferViewList->currentRow()); - if(currentConfig) { - _useBufferViewHint = true; - _bufferViewHint = currentConfig->bufferViewId(); - } - - QVariantList newConfigs; - QVariantList deleteConfigs; - QVariantList changedConfigs; - - foreach(int bufferId, _deleteBufferViews) { - deleteConfigs << bufferId; - } - _deleteBufferViews.clear(); - if(Client::bufferViewManager()) { - Client::bufferViewManager()->requestDeleteBufferViews(deleteConfigs); - } - - QHash::iterator changedConfigIter = _changedBufferViews.begin(); - QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); - BufferViewConfig *config, *changedConfig; - while(changedConfigIter != changedConfigIterEnd) { - config = changedConfigIter.key(); - changedConfig = changedConfigIter.value(); - changedConfigIter = _changedBufferViews.erase(changedConfigIter); - config->requestUpdate(changedConfig->toVariantMap()); - changedConfig->deleteLater(); - } - - QList::iterator newConfigIter = _newBufferViews.begin(); - QList::iterator newConfigIterEnd = _newBufferViews.end(); - while(newConfigIter != newConfigIterEnd) { - config = *newConfigIter; - newConfigIter = _newBufferViews.erase(newConfigIter); - newConfigs << config->toVariantMap(); - config->deleteLater(); - } - if(Client::bufferViewManager()) { - Client::bufferViewManager()->requestCreateBufferViews(newConfigs); - } - - load(); - setEnabled(true); +void BufferViewSettingsPage::load() +{ + bool useBufferViewHint = _useBufferViewHint; + int bufferViewHint = _bufferViewHint; + reset(); + + if (!Client::bufferViewManager()) + return; + + const QList bufferViewConfigs = Client::bufferViewManager()->bufferViewConfigs(); + foreach(BufferViewConfig *bufferViewConfig, bufferViewConfigs) { + addBufferView(bufferViewConfig); + } + + _ignoreWidgetChanges = true; + // load network selector + ui.networkSelector->clear(); + ui.networkSelector->addItem(tr("All")); + ui.networkSelector->setItemData(0, qVariantFromValue(NetworkId())); + const Network *net; + foreach(NetworkId netId, Client::networkIds()) { + net = Client::network(netId); + ui.networkSelector->addItem(net->networkName()); + ui.networkSelector->setItemData(ui.networkSelector->count() - 1, qVariantFromValue(net->networkId())); + } + _ignoreWidgetChanges = false; + + if (!useBufferViewHint || !selectBufferViewById(bufferViewHint)) + ui.bufferViewList->setCurrentRow(0); } -void BufferViewSettingsPage::coreConnectionStateChanged(bool state) { - setEnabled(state); - if(state) { + +void BufferViewSettingsPage::save() +{ + setEnabled(false); + + BufferViewConfig *currentConfig = bufferView(ui.bufferViewList->currentRow()); + if (currentConfig) { + _useBufferViewHint = true; + _bufferViewHint = currentConfig->bufferViewId(); + } + + QVariantList newConfigs; + QVariantList deleteConfigs; + QVariantList changedConfigs; + + foreach(int bufferId, _deleteBufferViews) { + deleteConfigs << bufferId; + } + _deleteBufferViews.clear(); + if (Client::bufferViewManager()) { + Client::bufferViewManager()->requestDeleteBufferViews(deleteConfigs); + } + + QHash::iterator changedConfigIter = _changedBufferViews.begin(); + QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); + BufferViewConfig *config, *changedConfig; + while (changedConfigIter != changedConfigIterEnd) { + config = changedConfigIter.key(); + changedConfig = changedConfigIter.value(); + changedConfigIter = _changedBufferViews.erase(changedConfigIter); + config->requestUpdate(changedConfig->toVariantMap()); + changedConfig->deleteLater(); + } + + QList::iterator newConfigIter = _newBufferViews.begin(); + QList::iterator newConfigIterEnd = _newBufferViews.end(); + while (newConfigIter != newConfigIterEnd) { + config = *newConfigIter; + newConfigIter = _newBufferViews.erase(newConfigIter); + newConfigs << config->toVariantMap(); + config->deleteLater(); + } + if (Client::bufferViewManager()) { + Client::bufferViewManager()->requestCreateBufferViews(newConfigs); + } + load(); - connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigAdded(int)), this, SLOT(addBufferView(int))); - } else { - reset(); - } + setEnabled(true); +} + + +void BufferViewSettingsPage::coreConnectionStateChanged(bool state) +{ + setEnabled(state); + if (state) { + load(); + connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigAdded(int)), this, SLOT(addBufferView(int))); + } + else { + reset(); + } } -void BufferViewSettingsPage::addBufferView(BufferViewConfig *config) { - QListWidgetItem *item = new QListWidgetItem(config->bufferViewName(), ui.bufferViewList); - item->setData(Qt::UserRole, qVariantFromValue(qobject_cast(config))); - connect(config, SIGNAL(updatedRemotely()), this, SLOT(updateBufferView())); - connect(config, SIGNAL(destroyed()), this, SLOT(bufferViewDeleted())); + +void BufferViewSettingsPage::addBufferView(BufferViewConfig *config) +{ + QListWidgetItem *item = new QListWidgetItem(config->bufferViewName(), ui.bufferViewList); + item->setData(Qt::UserRole, qVariantFromValue(qobject_cast(config))); + connect(config, SIGNAL(updatedRemotely()), this, SLOT(updateBufferView())); + connect(config, SIGNAL(destroyed()), this, SLOT(bufferViewDeleted())); + ui.deleteBufferView->setEnabled(ui.bufferViewList->count() > 1); } -void BufferViewSettingsPage::addBufferView(int bufferViewId) { - qDebug() << "addBufferView" << bufferViewId; - // we are informed about a new bufferview from Client::bufferViewManager() - Q_ASSERT(Client::bufferViewManager()); - addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewId)); - selectBufferViewById(bufferViewId); + +void BufferViewSettingsPage::addBufferView(int bufferViewId) +{ + // we are informed about a new bufferview from Client::bufferViewManager() + Q_ASSERT(Client::bufferViewManager()); + addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewId)); + selectBufferViewById(bufferViewId); +} + + +void BufferViewSettingsPage::bufferViewDeleted() +{ + BufferViewConfig *config = static_cast(sender()); + QObject *obj; + for (int i = 0; i < ui.bufferViewList->count(); i++) { + obj = ui.bufferViewList->item(i)->data(Qt::UserRole).value(); + if (config == static_cast(obj)) { + QListWidgetItem *item = ui.bufferViewList->takeItem(i); + delete item; + break; + } + } + ui.deleteBufferView->setEnabled(ui.bufferViewList->count() > 1); } -void BufferViewSettingsPage::bufferViewDeleted() { - BufferViewConfig *config = static_cast(sender()); - QObject *obj; - for(int i = 0; i < ui.bufferViewList->count(); i++) { - obj = ui.bufferViewList->item(i)->data(Qt::UserRole).value(); - if(config == static_cast(obj)) { - QListWidgetItem *item = ui.bufferViewList->takeItem(i); - delete item; - return; + +void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) +{ + // id's of newly created bufferviews are negative (-1, -2... -n) + int fakeId = -1 * (_newBufferViews.count() + 1); + BufferViewConfig *config = new BufferViewConfig(fakeId); + config->setBufferViewName(bufferViewName); + config->setInitialized(); + QList bufferIds; + if (config->addNewBuffersAutomatically()) { + if (config->sortAlphabetically()) { + bufferIds = Client::networkModel()->allBufferIdsSorted(); + } + else { + bufferIds = Client::networkModel()->allBufferIds(); + qSort(bufferIds); + config->setProperty("OriginalBufferList", toVariantList(bufferIds)); + } } - } + config->initSetBufferList(bufferIds); + + _newBufferViews << config; + addBufferView(config); + ui.bufferViewList->setCurrentRow(listPos(config)); } -void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { - // id's of newly created bufferviews are negative (-1, -2... -n) - int fakeId = -1 * (_newBufferViews.count() + 1); - BufferViewConfig *config = new BufferViewConfig(fakeId); - config->setBufferViewName(bufferViewName); - config->setInitialized(); - QList bufferIds; - if(config->addNewBuffersAutomatically()) { - bufferIds = Client::networkModel()->allBufferIds(); - if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); - } - config->initSetBufferList(bufferIds); - - _newBufferViews << config; - addBufferView(config); - ui.bufferViewList->setCurrentRow(listPos(config)); + +int BufferViewSettingsPage::listPos(BufferViewConfig *config) +{ + QObject *obj; + for (int i = 0; i < ui.bufferViewList->count(); i++) { + obj = ui.bufferViewList->item(i)->data(Qt::UserRole).value(); + if (config == qobject_cast(obj)) + return i; + } + return -1; } -int BufferViewSettingsPage::listPos(BufferViewConfig *config) { - QObject *obj; - for(int i = 0; i < ui.bufferViewList->count(); i++) { - obj = ui.bufferViewList->item(i)->data(Qt::UserRole).value(); - if(config == qobject_cast(obj)) - return i; - } - return -1; + +BufferViewConfig *BufferViewSettingsPage::bufferView(int listPos) +{ + if (listPos < ui.bufferViewList->count() && listPos >= 0) { + QObject *obj = ui.bufferViewList->item(listPos)->data(Qt::UserRole).value(); + return qobject_cast(obj); + } + else { + return 0; + } } -BufferViewConfig *BufferViewSettingsPage::bufferView(int listPos) { - if(listPos < ui.bufferViewList->count() && listPos >= 0) { - QObject *obj = ui.bufferViewList->item(listPos)->data(Qt::UserRole).value(); - return qobject_cast(obj); - } else { - return 0; - } + +bool BufferViewSettingsPage::selectBufferViewById(int bufferViewId) +{ + BufferViewConfig *config; + for (int i = 0; i < ui.bufferViewList->count(); i++) { + config = qobject_cast(ui.bufferViewList->item(i)->data(Qt::UserRole).value()); + if (config && config->bufferViewId() == bufferViewId) { + ui.bufferViewList->setCurrentRow(i); + return true; + } + } + return false; } -bool BufferViewSettingsPage::selectBufferViewById(int bufferViewId) { - BufferViewConfig *config; - for(int i = 0; i < ui.bufferViewList->count(); i++) { - config = qobject_cast(ui.bufferViewList->item(i)->data(Qt::UserRole).value()); - if(config && config->bufferViewId() == bufferViewId) { - ui.bufferViewList->setCurrentRow(i); - return true; + +void BufferViewSettingsPage::updateBufferView() +{ + BufferViewConfig *config = qobject_cast(sender()); + if (!config) + return; + + int itemPos = listPos(config); + if (itemPos == -1) { + qWarning() << "BufferViewSettingsPage::updateBufferView(): view is unknown:" << config->bufferViewId(); + return; } - } - return false; + ui.bufferViewList->item(itemPos)->setText(config->bufferViewName()); + if (itemPos == ui.bufferViewList->currentRow()) + loadConfig(config); } -void BufferViewSettingsPage::updateBufferView() { - BufferViewConfig *config = qobject_cast(sender()); - if(!config) - return; - - int itemPos = listPos(config); - if(itemPos == -1) { - qWarning() << "BufferViewSettingsPage::updateBufferView(): view is unknown:" << config->bufferViewId(); - return; - } - ui.bufferViewList->item(itemPos)->setText(config->bufferViewName()); - if(itemPos == ui.bufferViewList->currentRow()) - loadConfig(config); + +void BufferViewSettingsPage::enableStatusBuffers(int networkIdx) +{ + // we don't show a status buffer if we show multiple networks as selecting + // the network is the same as selecting the status buffer. + ui.onlyStatusBuffers->setEnabled(networkIdx != 0); } -void BufferViewSettingsPage::on_addBufferView_clicked() { - if(!Client::bufferViewManager()) - return; - QStringList existing; - foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) { - existing << bufferConfig->bufferViewName(); - } +void BufferViewSettingsPage::on_addBufferView_clicked() +{ + if (!Client::bufferViewManager()) + return; - BufferViewEditDlg dlg(QString(), existing, this); - if(dlg.exec() == QDialog::Accepted) { - newBufferView(dlg.bufferViewName()); - changed(); - } + QStringList existing; + foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) { + existing << bufferConfig->bufferViewName(); + } + + BufferViewEditDlg dlg(QString(), existing, this); + if (dlg.exec() == QDialog::Accepted) { + newBufferView(dlg.bufferViewName()); + changed(); + } } -void BufferViewSettingsPage::on_renameBufferView_clicked() { - if(ui.bufferViewList->selectedItems().isEmpty()) - return; - - if(!Client::bufferViewManager()) - return; - - BufferViewConfig *config = bufferView(ui.bufferViewList->currentRow()); - if(!config) - return; - - QStringList existing; - foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) { - existing << bufferConfig->bufferViewName(); - } - - BufferViewEditDlg dlg(config->bufferViewName(), existing, this); - if(dlg.exec() == QDialog::Accepted) { - BufferViewConfig *changedConfig = cloneConfig(config); - changedConfig->setBufferViewName(dlg.bufferViewName()); - ui.bufferViewList->item(listPos(config))->setText(dlg.bufferViewName()); - changed(); - } + +void BufferViewSettingsPage::on_renameBufferView_clicked() +{ + if (ui.bufferViewList->selectedItems().isEmpty()) + return; + + if (!Client::bufferViewManager()) + return; + + BufferViewConfig *config = bufferView(ui.bufferViewList->currentRow()); + if (!config) + return; + + QStringList existing; + foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) { + existing << bufferConfig->bufferViewName(); + } + + BufferViewEditDlg dlg(config->bufferViewName(), existing, this); + if (dlg.exec() == QDialog::Accepted) { + BufferViewConfig *changedConfig = cloneConfig(config); + changedConfig->setBufferViewName(dlg.bufferViewName()); + ui.bufferViewList->item(listPos(config))->setText(dlg.bufferViewName()); + changed(); + } } -void BufferViewSettingsPage::on_deleteBufferView_clicked() { - if(ui.bufferViewList->selectedItems().isEmpty()) - return; - - QListWidgetItem *currentItem = ui.bufferViewList->item(ui.bufferViewList->currentRow()); - QString viewName = currentItem->text(); - int viewId = bufferView(ui.bufferViewList->currentRow())->bufferViewId(); - int ret = QMessageBox::question(this, tr("Delete Buffer View?"), - tr("Do you really want to delete the buffer view \"%1\"?").arg(viewName), - QMessageBox::Yes|QMessageBox::No, QMessageBox::No); - - if(ret == QMessageBox::Yes) { - ui.bufferViewList->removeItemWidget(currentItem); - delete currentItem; - if(viewId >= 0) - _deleteBufferViews << viewId; - changed(); - } + +void BufferViewSettingsPage::on_deleteBufferView_clicked() +{ + if (ui.bufferViewList->selectedItems().isEmpty()) + return; + + QListWidgetItem *currentItem = ui.bufferViewList->item(ui.bufferViewList->currentRow()); + QString viewName = currentItem->text(); + int viewId = bufferView(ui.bufferViewList->currentRow())->bufferViewId(); + int ret = QMessageBox::question(this, tr("Delete Chat List?"), + tr("Do you really want to delete the chat list \"%1\"?").arg(viewName), + QMessageBox::Yes|QMessageBox::No, QMessageBox::No); + + if (ret == QMessageBox::Yes) { + ui.bufferViewList->removeItemWidget(currentItem); + BufferViewConfig *config = qobject_cast(currentItem->data(Qt::UserRole).value()); + delete currentItem; + if (viewId >= 0) { + _deleteBufferViews << viewId; + changed(); + } + else if (config) { + QList::iterator iter = _newBufferViews.begin(); + while (iter != _newBufferViews.end()) { + if (*iter == config) { + iter = _newBufferViews.erase(iter); + break; + } + else { + iter++; + } + } + delete config; + if (_deleteBufferViews.isEmpty() && _changedBufferViews.isEmpty() && _newBufferViews.isEmpty()) + setChangedState(false); + } + } } -void BufferViewSettingsPage::bufferViewSelectionChanged(const QItemSelection ¤t, const QItemSelection &previous) { - Q_UNUSED(previous) - if(!current.isEmpty()) { - ui.settingsGroupBox->setEnabled(true); - ui.bufferViewPreview->setEnabled(true); +void BufferViewSettingsPage::bufferViewSelectionChanged(const QItemSelection ¤t, const QItemSelection &previous) +{ + Q_UNUSED(previous) - loadConfig(configForDisplay(bufferView(ui.bufferViewList->currentRow()))); - } else { - ui.settingsGroupBox->setEnabled(false); - ui.bufferViewPreview->setEnabled(false); - } + if (!current.isEmpty()) { + ui.settingsGroupBox->setEnabled(true); + ui.bufferViewPreview->setEnabled(true); + + loadConfig(configForDisplay(bufferView(ui.bufferViewList->currentRow()))); + } + else { + ui.settingsGroupBox->setEnabled(false); + ui.bufferViewPreview->setEnabled(false); + } } -void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) { - if(!config) - return; - - _ignoreWidgetChanges = true; - ui.onlyStatusBuffers->setChecked(BufferInfo::StatusBuffer & config->allowedBufferTypes()); - ui.onlyChannelBuffers->setChecked(BufferInfo::ChannelBuffer & config->allowedBufferTypes()); - ui.onlyQueryBuffers->setChecked(BufferInfo::QueryBuffer & config->allowedBufferTypes()); - ui.addNewBuffersAutomatically->setChecked(config->addNewBuffersAutomatically()); - ui.sortAlphabetically->setChecked(config->sortAlphabetically()); - ui.hideInactiveBuffers->setChecked(config->hideInactiveBuffers()); - - int networkIndex = 0; - for(int i = 0; i < ui.networkSelector->count(); i++) { - if(ui.networkSelector->itemData(i).value() == config->networkId()) { - networkIndex = i; - break; + +void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) +{ + if (!config) + return; + + _ignoreWidgetChanges = true; + ui.onlyStatusBuffers->setChecked(BufferInfo::StatusBuffer & config->allowedBufferTypes()); + ui.onlyChannelBuffers->setChecked(BufferInfo::ChannelBuffer & config->allowedBufferTypes()); + ui.onlyQueryBuffers->setChecked(BufferInfo::QueryBuffer & config->allowedBufferTypes()); + ui.addNewBuffersAutomatically->setChecked(config->addNewBuffersAutomatically()); + ui.sortAlphabetically->setChecked(config->sortAlphabetically()); + ui.hideInactiveBuffers->setChecked(config->hideInactiveBuffers()); + ui.hideInactiveNetworks->setChecked(config->hideInactiveNetworks()); + + int networkIndex = 0; + for (int i = 0; i < ui.networkSelector->count(); i++) { + if (ui.networkSelector->itemData(i).value() == config->networkId()) { + networkIndex = i; + break; + } } - } - ui.networkSelector->setCurrentIndex(networkIndex); + ui.networkSelector->setCurrentIndex(networkIndex); - int activityIndex = 0; - int minimumActivity = config->minimumActivity(); - while(minimumActivity) { - activityIndex++; - minimumActivity = minimumActivity >> 1; - } - ui.minimumActivitySelector->setCurrentIndex(activityIndex); + int activityIndex = 0; + int minimumActivity = config->minimumActivity(); + while (minimumActivity) { + activityIndex++; + minimumActivity = minimumActivity >> 1; + } + ui.minimumActivitySelector->setCurrentIndex(activityIndex); - ui.bufferViewPreview->setFilteredModel(Client::bufferModel(), config); + ui.bufferViewPreview->setFilteredModel(Client::bufferModel(), config); - _ignoreWidgetChanges = false; + _ignoreWidgetChanges = false; } -void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) { - if(!config) - return; - - int allowedBufferTypes = 0; - if(ui.onlyStatusBuffers->isChecked()) - allowedBufferTypes |= BufferInfo::StatusBuffer; - if(ui.onlyChannelBuffers->isChecked()) - allowedBufferTypes |= BufferInfo::ChannelBuffer; - if(ui.onlyQueryBuffers->isChecked()) - allowedBufferTypes |= BufferInfo::QueryBuffer; - config->setAllowedBufferTypes(allowedBufferTypes); - - config->setAddNewBuffersAutomatically(ui.addNewBuffersAutomatically->isChecked()); - config->setSortAlphabetically(ui.sortAlphabetically->isChecked()); - config->setHideInactiveBuffers(ui.hideInactiveBuffers->isChecked()); - config->setNetworkId(ui.networkSelector->itemData(ui.networkSelector->currentIndex()).value()); - - int minimumActivity = 0; - if(ui.minimumActivitySelector->currentIndex() > 0) - minimumActivity = 1 << (ui.minimumActivitySelector->currentIndex() - 1); - config->setMinimumActivity(minimumActivity); - - if(_newBufferViews.contains(config)) { - QList bufferIds; - if(config->addNewBuffersAutomatically()) { - bufferIds = Client::networkModel()->allBufferIds(); - if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); - } - config->initSetBufferList(bufferIds); - } + +void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) +{ + if (!config) + return; + + int allowedBufferTypes = 0; + if (ui.onlyStatusBuffers->isChecked()) + allowedBufferTypes |= BufferInfo::StatusBuffer; + if (ui.onlyChannelBuffers->isChecked()) + allowedBufferTypes |= BufferInfo::ChannelBuffer; + if (ui.onlyQueryBuffers->isChecked()) + allowedBufferTypes |= BufferInfo::QueryBuffer; + config->setAllowedBufferTypes(allowedBufferTypes); + + config->setAddNewBuffersAutomatically(ui.addNewBuffersAutomatically->isChecked()); + config->setSortAlphabetically(ui.sortAlphabetically->isChecked()); + config->setHideInactiveBuffers(ui.hideInactiveBuffers->isChecked()); + config->setHideInactiveNetworks(ui.hideInactiveNetworks->isChecked()); + config->setNetworkId(ui.networkSelector->itemData(ui.networkSelector->currentIndex()).value()); + + int minimumActivity = 0; + if (ui.minimumActivitySelector->currentIndex() > 0) + minimumActivity = 1 << (ui.minimumActivitySelector->currentIndex() - 1); + config->setMinimumActivity(minimumActivity); + + QList bufferIds = fromVariantList(config->property("OriginalBufferList").toList()); + if (config->sortAlphabetically()) + Client::networkModel()->sortBufferIds(bufferIds); + + if (!_newBufferViews.contains(config) || config->addNewBuffersAutomatically()) + config->initSetBufferList(bufferIds); } -void BufferViewSettingsPage::widgetHasChanged() { - if(_ignoreWidgetChanges) - return; - setChangedState(testHasChanged()); + +void BufferViewSettingsPage::widgetHasChanged() +{ + if (_ignoreWidgetChanges) + return; + setChangedState(testHasChanged()); } -bool BufferViewSettingsPage::testHasChanged() { - saveConfig(cloneConfig(bufferView(ui.bufferViewList->currentRow()))); - - if(!_newBufferViews.isEmpty()) - return true; - - bool changed = false; - QHash::iterator iter = _changedBufferViews.begin(); - QHash::iterator iterEnd = _changedBufferViews.end(); - while(iter != iterEnd) { - if(&(iter.key()) == &(iter.value())) { - iter.value()->deleteLater(); - _changedBufferViews.erase(iter); - } else { - changed = true; - iter++; + +bool BufferViewSettingsPage::testHasChanged() +{ + saveConfig(cloneConfig(bufferView(ui.bufferViewList->currentRow()))); + + if (!_newBufferViews.isEmpty()) + return true; + + bool changed = false; + QHash::iterator iter = _changedBufferViews.begin(); + QHash::iterator iterEnd = _changedBufferViews.end(); + while (iter != iterEnd) { + if (&(iter.key()) == &(iter.value())) { + iter.value()->deleteLater(); + iter = _changedBufferViews.erase(iter); + } + else { + changed = true; + iter++; + } } - } - return changed; + return changed; } -BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) { - if(!config || config->bufferViewId() < 0) - return config; - - if(_changedBufferViews.contains(config)) - return _changedBufferViews[config]; - - BufferViewConfig *changedConfig = new BufferViewConfig(-1, this); - changedConfig->fromVariantMap(config->toVariantMap()); - changedConfig->setInitialized(); - _changedBufferViews[config] = changedConfig; - connect(config, SIGNAL(bufferAdded(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); - connect(config, SIGNAL(bufferMoved(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); - connect(config, SIGNAL(bufferRemoved(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); - connect(config, SIGNAL(addBufferRequested(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); - connect(config, SIGNAL(moveBufferRequested(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); - connect(config, SIGNAL(removeBufferRequested(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); - - // if this is the currently displayed view we have to change the config of the preview filter - BufferViewFilter *filter = qobject_cast(ui.bufferViewPreview->model()); - if(filter && filter->config() == config) - filter->setConfig(changedConfig); - ui.bufferViewPreview->setConfig(changedConfig); - - return changedConfig; + +BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) +{ + if (!config || config->bufferViewId() < 0) + return config; + + if (_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + + BufferViewConfig *changedConfig = new BufferViewConfig(-1, this); + changedConfig->fromVariantMap(config->toVariantMap()); + changedConfig->setInitialized(); + _changedBufferViews[config] = changedConfig; + connect(config, SIGNAL(bufferAdded(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); + connect(config, SIGNAL(bufferMoved(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); + connect(config, SIGNAL(bufferRemoved(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); +// connect(config, SIGNAL(addBufferRequested(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); +// connect(config, SIGNAL(moveBufferRequested(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); +// connect(config, SIGNAL(removeBufferRequested(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); + + changedConfig->setProperty("OriginalBufferList", toVariantList(config->bufferList())); + // if this is the currently displayed view we have to change the config of the preview filter + BufferViewFilter *filter = qobject_cast(ui.bufferViewPreview->model()); + if (filter && filter->config() == config) + filter->setConfig(changedConfig); + ui.bufferViewPreview->setConfig(changedConfig); + + return changedConfig; } -BufferViewConfig *BufferViewSettingsPage::configForDisplay(BufferViewConfig *config) { - if(_changedBufferViews.contains(config)) - return _changedBufferViews[config]; - else - return config; + +BufferViewConfig *BufferViewSettingsPage::configForDisplay(BufferViewConfig *config) +{ + if (_changedBufferViews.contains(config)) + return _changedBufferViews[config]; + else + return config; } /************************************************************************** * BufferViewEditDlg *************************************************************************/ -BufferViewEditDlg::BufferViewEditDlg(const QString &old, const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist) { - ui.setupUi(this); - - if(old.isEmpty()) { - // new buffer - setWindowTitle(tr("Add Buffer View")); - on_bufferViewEdit_textChanged(""); // disable ok button - } else { - ui.bufferViewEdit->setText(old); - } +BufferViewEditDlg::BufferViewEditDlg(const QString &old, const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist) +{ + ui.setupUi(this); + + if (old.isEmpty()) { + // new buffer + setWindowTitle(tr("Add Chat List")); + on_bufferViewEdit_textChanged(""); // disable ok button + } + else { + ui.bufferViewEdit->setText(old); + } } -void BufferViewEditDlg::on_bufferViewEdit_textChanged(const QString &text) { - ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text)); +void BufferViewEditDlg::on_bufferViewEdit_textChanged(const QString &text) +{ + ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text)); } -