X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fsettingspages%2Fbufferviewsettingspage.cpp;h=4b41da4bf6ea41f2d60ee19ea916ba62c7f7de87;hp=e3bbd4b2dca3330511d0f498b4095b52b5501924;hb=e9bb37281e0304db32d7dc8bfb8d49e9eabf7503;hpb=bf01681e9e6108517bfa997422b84e04b801a40a diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index e3bbd4b2..4b41da4b 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-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -23,25 +23,33 @@ #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), - _ignoreWidgetChanges(false) + _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); - setEnabled(Client::isConnected()); // need a core connection! + 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 &))); @@ -54,6 +62,8 @@ BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent) 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())); + + connect(ui.networkSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(enableStatusBuffers(int))); } BufferViewSettingsPage::~BufferViewSettingsPage() { @@ -62,6 +72,7 @@ BufferViewSettingsPage::~BufferViewSettingsPage() { void BufferViewSettingsPage::reset() { ui.bufferViewList->clear(); + ui.deleteBufferView->setEnabled(false); QHash::iterator changedConfigIter = _changedBufferViews.begin(); QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); @@ -81,11 +92,15 @@ void BufferViewSettingsPage::reset() { } _deleteBufferViews.clear(); - + + _useBufferViewHint = false; + setChangedState(false); } void BufferViewSettingsPage::load() { + bool useBufferViewHint = _useBufferViewHint; + int bufferViewHint = _bufferViewHint; reset(); if(!Client::bufferViewManager()) @@ -99,7 +114,7 @@ void BufferViewSettingsPage::load() { _ignoreWidgetChanges = true; // load network selector ui.networkSelector->clear(); - ui.networkSelector->addItem("All"); + ui.networkSelector->addItem(tr("All")); ui.networkSelector->setItemData(0, qVariantFromValue(NetworkId())); const Network *net; foreach(NetworkId netId, Client::networkIds()) { @@ -108,12 +123,21 @@ void BufferViewSettingsPage::load() { ui.networkSelector->setItemData(ui.networkSelector->count() - 1, qVariantFromValue(net->networkId())); } _ignoreWidgetChanges = false; - - ui.bufferViewList->setCurrentRow(0); + + + 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; @@ -125,7 +149,7 @@ void BufferViewSettingsPage::save() { if(Client::bufferViewManager()) { Client::bufferViewManager()->requestDeleteBufferViews(deleteConfigs); } - + QHash::iterator changedConfigIter = _changedBufferViews.begin(); QHash::iterator changedConfigIterEnd = _changedBufferViews.end(); BufferViewConfig *config, *changedConfig; @@ -168,11 +192,14 @@ void BufferViewSettingsPage::addBufferView(BufferViewConfig *config) { 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) { + // we are informed about a new bufferview from Client::bufferViewManager() Q_ASSERT(Client::bufferViewManager()); addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewId)); + selectBufferViewById(bufferViewId); } void BufferViewSettingsPage::bufferViewDeleted() { @@ -183,9 +210,10 @@ void BufferViewSettingsPage::bufferViewDeleted() { if(config == static_cast(obj)) { QListWidgetItem *item = ui.bufferViewList->takeItem(i); delete item; - return; + break; } } + ui.deleteBufferView->setEnabled(ui.bufferViewList->count() > 1); } void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { @@ -193,14 +221,16 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { int fakeId = -1 * (_newBufferViews.count() + 1); BufferViewConfig *config = new BufferViewConfig(fakeId); config->setBufferViewName(bufferViewName); - + config->setInitialized(); QList bufferIds; if(config->addNewBuffersAutomatically()) { - foreach(BufferInfo bufferInfo, Client::allBufferInfos()) { - bufferIds << bufferInfo.bufferId(); + if(config->sortAlphabetically()) { + bufferIds = Client::networkModel()->allBufferIdsSorted(); + } else { + bufferIds = Client::networkModel()->allBufferIds(); + qSort(bufferIds); + config->setProperty("OriginalBufferList", toVariantList(bufferIds)); } - if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); } config->initSetBufferList(bufferIds); @@ -208,7 +238,7 @@ void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) { addBufferView(config); ui.bufferViewList->setCurrentRow(listPos(config)); } - + int BufferViewSettingsPage::listPos(BufferViewConfig *config) { QObject *obj; for(int i = 0; i < ui.bufferViewList->count(); i++) { @@ -228,6 +258,18 @@ BufferViewConfig *BufferViewSettingsPage::bufferView(int listPos) { } } +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; +} + void BufferViewSettingsPage::updateBufferView() { BufferViewConfig *config = qobject_cast(sender()); if(!config) @@ -243,10 +285,16 @@ void BufferViewSettingsPage::updateBufferView() { 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(); @@ -265,7 +313,7 @@ void BufferViewSettingsPage::on_renameBufferView_clicked() { if(!Client::bufferViewManager()) return; - + BufferViewConfig *config = bufferView(ui.bufferViewList->currentRow()); if(!config) return; @@ -297,10 +345,25 @@ void BufferViewSettingsPage::on_deleteBufferView_clicked() { if(ret == QMessageBox::Yes) { ui.bufferViewList->removeItemWidget(currentItem); + BufferViewConfig *config = qobject_cast(currentItem->data(Qt::UserRole).value()); delete currentItem; - if(viewId >= 0) + if(viewId >= 0) { _deleteBufferViews << viewId; - changed(); + 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); + } } } @@ -321,7 +384,7 @@ void BufferViewSettingsPage::bufferViewSelectionChanged(const QItemSelection &cu void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) { if(!config) return; - + _ignoreWidgetChanges = true; ui.onlyStatusBuffers->setChecked(BufferInfo::StatusBuffer & config->allowedBufferTypes()); ui.onlyChannelBuffers->setChecked(BufferInfo::ChannelBuffer & config->allowedBufferTypes()); @@ -348,14 +411,14 @@ void BufferViewSettingsPage::loadConfig(BufferViewConfig *config) { ui.minimumActivitySelector->setCurrentIndex(activityIndex); ui.bufferViewPreview->setFilteredModel(Client::bufferModel(), config); - + _ignoreWidgetChanges = false; } void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) { if(!config) return; - + int allowedBufferTypes = 0; if(ui.onlyStatusBuffers->isChecked()) allowedBufferTypes |= BufferInfo::StatusBuffer; @@ -375,17 +438,12 @@ void BufferViewSettingsPage::saveConfig(BufferViewConfig *config) { minimumActivity = 1 << (ui.minimumActivitySelector->currentIndex() - 1); config->setMinimumActivity(minimumActivity); - if(_newBufferViews.contains(config)) { - QList bufferIds; - if(config->addNewBuffersAutomatically()) { - foreach(BufferInfo bufferInfo, Client::allBufferInfos()) { - bufferIds << bufferInfo.bufferId(); - } - if(config->sortAlphabetically()) - qSort(bufferIds.begin(), bufferIds.end(), bufferIdLessThan); - } + 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() { @@ -406,7 +464,7 @@ bool BufferViewSettingsPage::testHasChanged() { while(iter != iterEnd) { if(&(iter.key()) == &(iter.value())) { iter.value()->deleteLater(); - _changedBufferViews.erase(iter); + iter = _changedBufferViews.erase(iter); } else { changed = true; iter++; @@ -418,7 +476,7 @@ bool BufferViewSettingsPage::testHasChanged() { BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) { if(!config || config->bufferViewId() < 0) return config; - + if(_changedBufferViews.contains(config)) return _changedBufferViews[config]; @@ -433,6 +491,7 @@ BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) 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)