23 #include "cfgircnetworks.h"
24 #include "ui_cfgircnetworks.h"
25 #include "gui/configuration/irc/cfgircdefinenetworkdialog.h"
26 #include "irc/configuration/chatnetworkscfg.h"
27 #include "irc/configuration/ircconfig.h"
28 #include "irc/entities/ircnetworkentity.h"
29 #include "irc/chatlogs.h"
30 #include "qtmetapointer.h"
31 #include <QItemDelegate>
32 #include <QStandardItemModel>
34 DClass<CFGIRCNetworks> :
public Ui::CFGIRCNetworks
45 connect(d->btnAdd, SIGNAL( clicked() ),
this, SLOT( addButtonClicked() ) );
46 connect(d->btnEdit, SIGNAL( clicked() ),
this, SLOT( editButtonClicked() ) );
47 connect(d->btnRemove, SIGNAL( clicked() ),
this, SLOT( removeButtonClicked() ) );
48 connect(d->gridNetworks, SIGNAL( doubleClicked(
const QModelIndex&) ), SLOT( tableDoubleClicked(
const QModelIndex&) ) );
51 d->gridNetworks->setModel(
new QStandardItemModel(
this));
54 CFGIRCNetworks::~CFGIRCNetworks()
59 void CFGIRCNetworks::addButtonClicked()
62 dialog.setExistingNetworks(networksAsQList());
63 if (dialog.exec() == QDialog::Accepted)
66 *pNetworkEntity = dialog.getNetworkEntity();
68 addRecord(pNetworkEntity);
75 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
76 pModel->appendRow(generateTableRecord(pNetworkEntity));
78 this->d->gridNetworks->resizeRowsToContents();
80 if (this->d->gridNetworks->model()->rowCount() == 1)
82 this->d->gridNetworks->resizeColumnToContents(0);
86 void CFGIRCNetworks::cleanUpTable()
88 QVector<IRCNetworkEntity*> networksArray = networks();
95 void CFGIRCNetworks::editButtonClicked()
101 dialog.setExistingNetworks(networksAsQList());
102 if (dialog.exec() == QDialog::Accepted)
107 *pNetwork = dialog.getNetworkEntity();
108 this->updateRecord(this->selectedRow());
115 QList<QStandardItem*> CFGIRCNetworks::generateTableRecord(
IRCNetworkEntity* pNetworkEntity)
117 QList<QStandardItem*> itemArray;
118 QStandardItem* pItem;
121 pItem =
new QStandardItem();
122 pItem->setCheckable(
true);
123 pItem->setCheckState(pNetworkEntity->
isAutojoinNetwork() ? Qt::Checked : Qt::Unchecked);
124 pItem->setToolTip(
"Autojoin?");
127 void* pointer = pNetworkEntity;
129 QVariant variantPointer = qVariantFromValue(metaPointer);
130 pItem->setData(variantPointer);
132 pItem =
new QStandardItem(pNetworkEntity->
description());
135 pItem =
new QStandardItem(QString(
"%1:%2").arg(pNetworkEntity->
address())
136 .arg(pNetworkEntity->
port()));
145 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
147 pNetwork->setAutojoinNetwork((pModel->item(row, 0)->checkState() == Qt::Checked));
152 QVector<IRCNetworkEntity*> CFGIRCNetworks::networks()
154 QVector<IRCNetworkEntity*> entityArray;
156 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
157 for (
int i = 0; i < pModel->rowCount(); ++i)
161 entityArray << pEntity;
167 QList<IRCNetworkEntity> CFGIRCNetworks::networksAsQList()
const
169 QList<IRCNetworkEntity> result;
170 for (
int row = 0; row < d->gridNetworks->model()->rowCount(); ++row)
172 result << *network(row);
177 IRCNetworkEntity* CFGIRCNetworks::obtainNetworkEntity(QStandardItem* pItem)
const
179 QtMetaPointer metaPointer = qVariantValue<QtMetaPointer>(pItem->data());
180 void* pointer = metaPointer;
186 void CFGIRCNetworks::prepareTable()
190 QStandardItemModel* pModel =
new QStandardItemModel(
this);
193 labels <<
"" << tr(
"Description") << tr(
"Address");
194 pModel->setHorizontalHeaderLabels(labels);
196 d->gridNetworks->setModel(pModel);
198 d->gridNetworks->setColumnWidth(1, 180);
199 d->gridNetworks->setColumnWidth(2, 180);
201 d->gridNetworks->horizontalHeader()->setHighlightSections(
false);
202 d->gridNetworks->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
204 d->gridNetworks->verticalHeader()->hide();
212 for (
int i = 0; i < cfgNetworks.size(); ++i)
216 *pCopy = cfgNetworks[i];
221 d->leQuitMessage->setText(gIRCConfig.personal.quitMessage);
224 void CFGIRCNetworks::removeButtonClicked()
226 int row = this->selectedRow();
230 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
231 pModel->removeRow(row);
235 void CFGIRCNetworks::saveNetworks()
244 gIRCConfig.personal.quitMessage = d->leQuitMessage->text().trimmed();
249 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
250 QItemSelectionModel* pSelectionModel = d->gridNetworks->selectionModel();
251 QModelIndexList indexList = pSelectionModel->selectedRows();
253 if (!indexList.empty())
255 QModelIndex index = indexList[0];
256 return network(index.row());
262 int CFGIRCNetworks::selectedRow()
264 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
265 QItemSelectionModel* pSelectionModel = d->gridNetworks->selectionModel();
266 QModelIndexList indexList = pSelectionModel->selectedRows();
268 if (!indexList.empty())
270 return indexList[0].row();
276 void CFGIRCNetworks::tableDoubleClicked(
const QModelIndex& index)
281 void CFGIRCNetworks::updateRecord(
int row)
283 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
284 QStandardItem* pItemDescription = pModel->item(row, 1);
288 pItemDescription->setText(pNetwork->
description());
290 QStandardItem* pItemAddress = pModel->item(row, 2);
291 pItemAddress->setText(QString(
"%1:%2").arg(pNetwork->
address()).arg(pNetwork->
port()));
293 this->d->gridNetworks->resizeRowsToContents();
unsigned short port() const
Port of the server or network to connect to.
const QString & description() const
A short, human-readable description for the network. (Preferably a single word).
bool isAutojoinNetwork() const
Join this network when Doomseeker starts up.
void saveSettings()
Reimplement this to write settings to config from widgets.
void readSettings()
Reimplement this to read settings from config into widgets.
Data structure that describes and defines a connection to an IRC network or server.
Base class for configuration pages.
const QString & address() const
Address of the server or network to connect to.