The complete source code of IdealIRC
http://www.idealirc.org/
170 lines
5.5 KiB
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);
|
|
}
|
|
|