The complete source code of IdealIRC http://www.idealirc.org/
 
 
 
 
idealirc/IConfig/IConfigServers.cpp

170 lines
5.5 KiB

/*
* IdealIRC - Internet Relay Chat client
* Copyright (C) 2021 Tom-Andre Barstad.
* This software is licensed under the Software Attribution License.
* See LICENSE for more information.
*/
#include "IConfigServers.h"
#include "ui_IConfigServers.h"
#include "AddServer.h"
#include "ConfigMgr.h"
#include "ServerItem.h"
#include <QMessageBox>
#include <QDebug>
IConfigServers::IConfigServers(QWidget *parent) :
QWidget(parent),
ui(new Ui::IConfigServers)
{
ui->setupUi(this);
ConfigMgr& conf = ConfigMgr::instance();
cf_Realname = conf.connection("Realname");
cf_Username = conf.connection("Username");
cf_Nickname = conf.connection("Nickname");
cf_AltNickame = conf.connection("AltNickname");
cf_Server = conf.connection("Server");
cf_Password = conf.connection("Password");
cf_SSL = conf.connection("SSL").toInt();
ui->edRealName->setText(cf_Realname);
ui->edUsername->setText(cf_Username);
ui->edNickname->setText(cf_Nickname);
ui->edAltNickname->setText(cf_AltNickame);
ui->edServer->setText(cf_Server);
ui->edServerPassword->setText(cf_Password);
ui->chkSSL->setChecked(cf_SSL);
ui->servers->setModel(&smodel);
ui->servers->setItemDelegateForColumn(2, &m_serverOptionsDelegate);
ui->servers->setItemDelegateForColumn(3, &m_serverOptionsDelegate);
for (const auto& index : smodel.getEditorColumns()) {
ui->servers->openPersistentEditor(index);
}
connect(&smodel, &ServerModel::newEntry,
[this](const QModelIndex& sslIdx, const QModelIndex& passwordIdx) {
ui->servers->openPersistentEditor(sslIdx);
ui->servers->openPersistentEditor(passwordIdx);
});
ui->servers->setColumnWidth(2, 50); // SSL column
ui->servers->setColumnWidth(3, 100); // Password column
}
IConfigServers::~IConfigServers()
{
delete ui;
}
bool IConfigServers::isChanged() const
{
return cf_Realname != ui->edRealName->text()
|| cf_Username != ui->edUsername->text()
|| cf_Nickname != ui->edNickname->text()
|| cf_AltNickame != ui->edAltNickname->text()
|| cf_Server != ui->edServer->text()
|| cf_Password != ui->edServerPassword->text()
|| cf_SSL != ui->chkSSL->isChecked();
}
bool IConfigServers::connectToNewStatus() const
{
return ui->chkNewStatus->isChecked();
}
void IConfigServers::unsetConnectToNewStatus()
{
ui->chkNewStatus->setChecked(false);
}
void IConfigServers::save()
{
ConfigMgr& conf = ConfigMgr::instance();
conf.setConnection("Realname", ui->edRealName->text());
conf.setConnection("Username", ui->edUsername->text());
conf.setConnection("Nickname", ui->edNickname->text());
conf.setConnection("AltNickname", ui->edAltNickname->text());
conf.setConnection("Server", ui->edServer->text());
conf.setConnection("Password", ui->edServerPassword->text());
conf.setConnection("SSL", QString::number(ui->chkSSL->isChecked()));
cf_Realname = conf.connection("Realname");
cf_Username = conf.connection("Username");
cf_Nickname = conf.connection("Nickname");
cf_AltNickame = conf.connection("AltNickname");
cf_Server = conf.connection("Server");
cf_Password = conf.connection("Password");
cf_SSL = conf.connection("SSL").toInt();
}
void IConfigServers::reset()
{
ui->edRealName->setText(cf_Realname);
ui->edUsername->setText(cf_Username);
ui->edNickname->setText(cf_Nickname);
ui->edAltNickname->setText(cf_AltNickame);
ui->edServer->setText(cf_Server);
ui->edServerPassword->setText(cf_Password);
}
void IConfigServers::on_btnShowPassword_toggled(bool checked)
{
ui->edServerPassword->setEchoMode(checked ? QLineEdit::Normal : QLineEdit::Password);
}
void IConfigServers::on_servers_clicked(const QModelIndex& index)
{
auto* item = static_cast<const ServerItem*>(index.internalPointer());
ui->edServer->setText( item->address() );
ui->edServerPassword->setText( item->password() );
ui->chkSSL->setChecked( item->ssl() );
}
void IConfigServers::on_btnAddServer_clicked()
{
if (!addServerDlg) {
addServerDlg = new AddServer(smodel.getNetworks(), this);
addServerDlg->show();
connect(addServerDlg, &QDialog::destroyed,
[this] {
addServerDlg = nullptr;
});
connect(addServerDlg, &AddServer::saved,
[this] {
if (addServerDlg->isServer())
smodel.addServer(addServerDlg->name(), addServerDlg->address(), addServerDlg->password(), addServerDlg->ssl(), addServerDlg->networkIndex());
else
smodel.addNetwork(addServerDlg->name(), addServerDlg->address(), addServerDlg->password(), addServerDlg->ssl());
});
}
}
void IConfigServers::on_btnDeleteSelected_clicked()
{
auto index = ui->servers->currentIndex();
if (!index.isValid())
return;
const auto* item = static_cast<const ServerItem*>(index.internalPointer());
QMessageBox::StandardButton btn;
if (item->isNetwork())
btn = QMessageBox::question(this,
tr("Delete entire network"),
tr("You are about to delete an entire network!\nConfirm deletion of %1?").arg(item->name()));
else
btn = QMessageBox::question(this,
tr("Delete server"),
tr("Confirm deletion of %1?").arg(item->name()));
if (btn == QMessageBox::No)
return;
else
smodel.deleteEntry(index);
}