23 #include "cfgircnetworks.h" 24 #include "gui/configuration/irc/cfgircdefinenetworkdialog.h" 25 #include "irc/chatlogs.h" 26 #include "irc/configuration/chatnetworkscfg.h" 27 #include "irc/configuration/ircconfig.h" 28 #include "irc/entities/ircnetworkentity.h" 29 #include "qtmetapointer.h" 30 #include "ui_cfgircnetworks.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()));
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 auto pModel = (QStandardItemModel *)d->gridNetworks->model();
76 pModel->appendRow(generateTableRecord(pNetworkEntity));
78 this->d->gridNetworks->resizeRowsToContents();
80 if (this->d->gridNetworks->model()->rowCount() == 1)
81 this->d->gridNetworks->resizeColumnToContents(0);
84 void CFGIRCNetworks::cleanUpTable()
86 QVector<IRCNetworkEntity *> networksArray = networks();
93 void CFGIRCNetworks::editButtonClicked()
96 if (pNetwork !=
nullptr)
99 dialog.setExistingNetworks(networksAsQList());
100 if (dialog.exec() == QDialog::Accepted)
105 *pNetwork = dialog.getNetworkEntity();
106 this->updateRecord(this->selectedRow());
113 QList<QStandardItem *> CFGIRCNetworks::generateTableRecord(
IRCNetworkEntity *pNetworkEntity)
115 QList<QStandardItem *> itemArray;
116 QStandardItem *pItem;
119 pItem =
new QStandardItem();
120 pItem->setCheckable(
true);
121 pItem->setCheckState(pNetworkEntity->
isAutojoinNetwork() ? Qt::Checked : Qt::Unchecked);
122 pItem->setToolTip(
"Autojoin?");
125 void *pointer = pNetworkEntity;
127 QVariant variantPointer = qVariantFromValue(metaPointer);
128 pItem->setData(variantPointer);
130 pItem =
new QStandardItem(pNetworkEntity->
description());
133 pItem =
new QStandardItem(QString(
"%1:%2").arg(pNetworkEntity->
address())
134 .arg(pNetworkEntity->
port()));
143 auto pModel = (QStandardItemModel *)d->gridNetworks->model();
145 pNetwork->setAutojoinNetwork((pModel->item(row, 0)->checkState() == Qt::Checked));
150 QVector<IRCNetworkEntity *> CFGIRCNetworks::networks()
152 QVector<IRCNetworkEntity *> entityArray;
154 auto pModel = (QStandardItemModel *)d->gridNetworks->model();
155 for (
int i = 0; i < pModel->rowCount(); ++i)
159 entityArray << pEntity;
165 QList<IRCNetworkEntity> CFGIRCNetworks::networksAsQList()
const 167 QList<IRCNetworkEntity> result;
168 for (
int row = 0; row < d->gridNetworks->model()->rowCount(); ++row)
169 result << *network(row);
173 IRCNetworkEntity *CFGIRCNetworks::obtainNetworkEntity(QStandardItem *pItem)
const 176 void *pointer = metaPointer;
182 void CFGIRCNetworks::prepareTable()
186 auto pModel =
new QStandardItemModel(
this);
189 labels <<
"" << tr(
"Description") << tr(
"Address");
190 pModel->setHorizontalHeaderLabels(labels);
192 d->gridNetworks->setModel(pModel);
194 d->gridNetworks->setColumnWidth(1, 180);
195 d->gridNetworks->setColumnWidth(2, 180);
197 d->gridNetworks->horizontalHeader()->setHighlightSections(
false);
198 d->gridNetworks->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
200 d->gridNetworks->verticalHeader()->hide();
208 for (
const auto & cfgNetwork : cfgNetworks)
217 d->leQuitMessage->setText(gIRCConfig.personal.quitMessage);
220 void CFGIRCNetworks::removeButtonClicked()
222 int row = this->selectedRow();
226 auto pModel = (QStandardItemModel *)d->gridNetworks->model();
227 pModel->removeRow(row);
231 void CFGIRCNetworks::saveNetworks()
240 gIRCConfig.personal.quitMessage = d->leQuitMessage->text().trimmed();
245 QItemSelectionModel *pSelectionModel = d->gridNetworks->selectionModel();
246 QModelIndexList indexList = pSelectionModel->selectedRows();
248 if (!indexList.empty())
250 QModelIndex index = indexList[0];
251 return network(index.row());
257 int CFGIRCNetworks::selectedRow()
259 QItemSelectionModel *pSelectionModel = d->gridNetworks->selectionModel();
260 QModelIndexList indexList = pSelectionModel->selectedRows();
262 if (!indexList.empty())
263 return indexList[0].row();
268 void CFGIRCNetworks::tableDoubleClicked()
273 void CFGIRCNetworks::updateRecord(
int row)
275 auto pModel = (QStandardItemModel *)d->gridNetworks->model();
276 QStandardItem *pItemDescription = pModel->item(row, 1);
280 pItemDescription->setText(pNetwork->
description());
282 QStandardItem *pItemAddress = pModel->item(row, 2);
283 pItemAddress->setText(QString(
"%1:%2").arg(pNetwork->
address()).arg(pNetwork->
port()));
285 this->d->gridNetworks->resizeRowsToContents();
void saveSettings() override
Reimplement this to write settings to config from widgets.
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.
Data structure that describes and defines a connection to an IRC network or server.
void readSettings() override
Reimplement this to read settings from config into widgets.
const QString & address() const
Address of the server or network to connect to.
Base class for configuration pages.