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 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 #if QT_VERSION >= 0x050000 203 d->gridNetworks->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
205 d->gridNetworks->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
208 d->gridNetworks->verticalHeader()->hide();
216 for (
int i = 0; i < cfgNetworks.size(); ++i)
220 *pCopy = cfgNetworks[i];
225 d->leQuitMessage->setText(gIRCConfig.personal.quitMessage);
228 void CFGIRCNetworks::removeButtonClicked()
230 int row = this->selectedRow();
234 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
235 pModel->removeRow(row);
239 void CFGIRCNetworks::saveNetworks()
248 gIRCConfig.personal.quitMessage = d->leQuitMessage->text().trimmed();
253 QItemSelectionModel* pSelectionModel = d->gridNetworks->selectionModel();
254 QModelIndexList indexList = pSelectionModel->selectedRows();
256 if (!indexList.empty())
258 QModelIndex index = indexList[0];
259 return network(index.row());
265 int CFGIRCNetworks::selectedRow()
267 QItemSelectionModel* pSelectionModel = d->gridNetworks->selectionModel();
268 QModelIndexList indexList = pSelectionModel->selectedRows();
270 if (!indexList.empty())
272 return indexList[0].row();
278 void CFGIRCNetworks::tableDoubleClicked(
const QModelIndex& index)
283 void CFGIRCNetworks::updateRecord(
int row)
285 QStandardItemModel* pModel = (QStandardItemModel*)d->gridNetworks->model();
286 QStandardItem* pItemDescription = pModel->item(row, 1);
290 pItemDescription->setText(pNetwork->
description());
292 QStandardItem* pItemAddress = pModel->item(row, 2);
293 pItemAddress->setText(QString(
"%1:%2").arg(pNetwork->
address()).arg(pNetwork->
port()));
295 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.
const QString & address() const
Address of the server or network to connect to.
Base class for configuration pages.