1 /***************************************************************************
2 * Copyright (C) 2005-08 by the Quassel IRC Team *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include "bufferviewsettingspage.h"
24 #include "bufferviewmanager.h"
25 #include "bufferviewconfig.h"
27 BufferViewSettingsPage::BufferViewSettingsPage(QWidget *parent)
28 : SettingsPage(tr("General"), tr("Buffer Views"), parent)
32 setEnabled(Client::isConnected()); // need a core connection!
33 connect(Client::instance(), SIGNAL(coreConnectionStateChanged(bool)), this, SLOT(coreConnectionStateChanged(bool)));
36 void BufferViewSettingsPage::reset() {
38 ui.bufferViewList->clear();
39 _viewToListPos.clear();
40 _listPosToView.clear();
43 void BufferViewSettingsPage::load() {
46 if(!Client::bufferViewManager())
49 const QList<BufferViewConfig *> bufferViewConfigs = Client::bufferViewManager()->bufferViewConfigs();
50 foreach(BufferViewConfig *bufferViewConfig, bufferViewConfigs) {
51 addBufferView(bufferViewConfig);
55 void BufferViewSettingsPage::save() {
58 void BufferViewSettingsPage::coreConnectionStateChanged(bool state) {
62 connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigAdded(int)), this, SLOT(addBufferView(int)));
68 void BufferViewSettingsPage::addBufferView(BufferViewConfig *config) {
69 _viewToListPos[config->bufferViewId()] = ui.bufferViewList->count();
70 _listPosToView[ui.bufferViewList->count()] = config->bufferViewId();
71 ui.bufferViewList->addItem(config->bufferViewName());
72 connect(config, SIGNAL(updatedRemotely()), this, SLOT(updateBufferView()));
75 void BufferViewSettingsPage::addBufferView(int bufferViewId) {
76 Q_ASSERT(Client::bufferViewManager());
77 addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewId));
80 void BufferViewSettingsPage::newBufferView(const QString &bufferViewName) {
81 // id's of newly created bufferviews are negative (-1, -2... -n)
82 int fakeId = -1 * (_newBufferViews.count() + 1);
83 addBufferView(new BufferViewConfig(fakeId));
86 int BufferViewSettingsPage::listPos(BufferViewConfig *config) {
87 if(_viewToListPos.contains(config->bufferViewId()))
88 return _viewToListPos[config->bufferViewId()];
93 int BufferViewSettingsPage::bufferViewId(int listPos) {
94 if(_listPosToView.contains(listPos))
95 return _listPosToView[listPos];
100 void BufferViewSettingsPage::updateBufferView() {
101 BufferViewConfig *config = qobject_cast<BufferViewConfig *>(sender());
105 int itemPos = listPos(config);
107 qWarning() << "BufferViewSettingsPage::updateBufferView(): view is unknown:" << config->bufferViewId();
110 ui.bufferViewList->item(itemPos)->setText(config->bufferViewName());
113 void BufferViewSettingsPage::on_addBufferView_clicked() {
114 if(!Client::bufferViewManager())
117 QStringList existing;
118 foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) {
119 existing << bufferConfig->bufferViewName();
122 BufferViewEditDlg dlg(QString(), existing, this);
123 if(dlg.exec() == QDialog::Accepted) {
124 newBufferView(dlg.bufferViewName());
128 void BufferViewSettingsPage::on_renameBufferView_clicked() {
129 if(ui.bufferViewList->selectedItems().isEmpty())
132 if(!Client::bufferViewManager())
135 BufferViewConfig *config = Client::bufferViewManager()->bufferViewConfig(bufferViewId(ui.bufferViewList->currentRow()));
139 QStringList existing;
140 foreach(BufferViewConfig *bufferConfig, Client::bufferViewManager()->bufferViewConfigs()) {
141 existing << bufferConfig->bufferViewName();
144 BufferViewEditDlg dlg(config->bufferViewName(), existing, this);
145 if(dlg.exec() != QDialog::Accepted)
148 BufferViewConfig *changedConfig;
149 if(!_changedBufferViews.contains(config)) {
150 _changedBufferViews[config] = new BufferViewConfig(-1);
151 _changedBufferViews[config]->fromVariantMap(config->toVariantMap());
154 changedConfig = _changedBufferViews[config];
155 changedConfig->setBufferViewName(dlg.bufferViewName());
160 /**************************************************************************
162 *************************************************************************/
163 BufferViewEditDlg::BufferViewEditDlg(const QString &old, const QStringList &exist, QWidget *parent) : QDialog(parent), existing(exist) {
168 setWindowTitle(tr("Add Buffer View"));
169 on_bufferViewEdit_textChanged(""); // disable ok button
171 ui.bufferViewEdit->setText(old);
176 void BufferViewEditDlg::on_bufferViewEdit_textChanged(const QString &text) {
177 ui.buttonBox->button(QDialogButtonBox::Ok)->setDisabled(text.isEmpty() || existing.contains(text));