207 lines
6.2 KiB
C++
207 lines
6.2 KiB
C++
/***************************************************************************
|
|
|
|
miniCash
|
|
Copyright © 2022 christoph holzheuer
|
|
c.holzheuer@sourceworx.org
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
#include <QMessageBox>
|
|
#include <QDialogButtonBox>
|
|
|
|
#include <libMiniCash.h>
|
|
#include <mcnetworkdialog.h>
|
|
|
|
#include <ui_mcnetworkdialog.h>
|
|
|
|
|
|
MCNetworkDialog::MCNetworkDialog( QWidget* parent, QSettings* settings )
|
|
: QDialog( parent ), _ui{new Ui::MCNetworkDialog}, _settings( settings )
|
|
{
|
|
|
|
Q_ASSERT( nullptr != _settings );
|
|
|
|
_ui->setupUi( this );
|
|
|
|
// Murx, FIX! das sollte über den Translator gehen
|
|
_ui->_buttonBox->button( QDialogButtonBox::Ok )->setText( "Speichern" );
|
|
_ui->_buttonBox->button( QDialogButtonBox::Cancel )->setText( "Abbrechen" );
|
|
|
|
/// Vorgabewerte setzen
|
|
_ui->_receiverHost->setText( _settings->value( miniCash::keyReceiverHost ).toString() );
|
|
_ui->_receiverPort->setText( _settings->value( miniCash::keyReceiverPort, miniCash::receiverPort ).toString() );
|
|
_ui->_senderHost->setText( QHostInfo::localHostName() );
|
|
|
|
bool isReceiver = _settings->value( miniCash::keyIsTcpReceiver, miniCash::isTcpReceiver ).toBool();
|
|
bool isSender = _settings->value( miniCash::keyIsTcpSender, miniCash::isTcpSender ).toBool();
|
|
_ui->_isSender->setChecked ( isSender );
|
|
_ui->_isReceiver->setChecked( isReceiver );
|
|
|
|
onSetNetworkEnabled( true );
|
|
onTestHostEntry();
|
|
|
|
connect( _ui->_buttonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
|
|
connect( _ui->_buttonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
|
|
|
|
connect( _ui->_receiverHost, SIGNAL( textChanged(QString) ), this, SLOT( onTestHostEntry(QString) ) );
|
|
connect( _ui->_receiverPort, SIGNAL( textChanged(QString) ), this, SLOT( onTestHostEntry(QString) ) );
|
|
connect( _ui->_isSender, SIGNAL( toggled(bool) ), this, SLOT( onSetNetworkEnabled(bool) ) );
|
|
connect( _ui->_isReceiver, SIGNAL( toggled(bool) ), this, SLOT( onSetNetworkEnabled(bool) ) );
|
|
|
|
/// @see https://www.kdab.com/nailing-13-signal-slot-mistakes-clazy-1-3/:
|
|
/// warning pass a context object as 3rd connect parameter
|
|
connect( _ui->_buttonUseNetwork, &QAbstractButton::toggled, _ui->_receiverHost,
|
|
[=]( bool isOn )
|
|
{
|
|
_ui->_groupBox->setEnabled( isOn );
|
|
_useNetwork = isOn;
|
|
if( !isOn )
|
|
{
|
|
_ui->_isSender->setChecked( false );
|
|
_ui->_isReceiver->setChecked( false );
|
|
}
|
|
} );
|
|
|
|
connect( _ui->_buttonTest, &QPushButton::clicked, _ui->_receiverHost,
|
|
[=]()
|
|
{
|
|
QHostInfo::lookupHost( _ui->_receiverHost->text(), this, SLOT( onLookupHost(QHostInfo) ) );
|
|
} );
|
|
|
|
}
|
|
|
|
/**
|
|
* @brief Destruktor
|
|
*/
|
|
|
|
MCNetworkDialog::~MCNetworkDialog()
|
|
{
|
|
delete _ui;
|
|
}
|
|
|
|
|
|
void MCNetworkDialog::onTestHostEntry( const QString& )
|
|
{
|
|
bool enable = !_ui->_receiverHost->text().isEmpty() && !_ui->_receiverPort->text().isEmpty();
|
|
_ui->_buttonTest->setEnabled( enable );
|
|
}
|
|
|
|
|
|
void MCNetworkDialog::onSetNetworkEnabled( bool )
|
|
{
|
|
|
|
bool isSender = _ui->_isSender->isChecked();
|
|
bool isReceiver = _ui->_isReceiver->isChecked();
|
|
|
|
_ui->_buttonTest->setEnabled( isSender );
|
|
_ui->_receiverHost->setEnabled( isSender );
|
|
_ui->_receiverPort->setEnabled( isSender );
|
|
|
|
_useNetwork = isSender || isReceiver;
|
|
/// klappt nicht! Bedenke die Logik!
|
|
///_buttonUseNetwork->setChecked( _useNetwork );
|
|
_ui->_buttonUseUSB->setChecked( !_useNetwork );
|
|
_ui->_buttonUseNetwork->setChecked( _useNetwork );
|
|
_ui->_groupBox->setEnabled( _useNetwork );
|
|
|
|
}
|
|
|
|
|
|
bool MCNetworkDialog::onLookupHost( const QHostInfo& hostInfo )
|
|
{
|
|
|
|
if( hostInfo.error() != QHostInfo::NoError )
|
|
{
|
|
_ui->_labelTest->setStyleSheet( "font-weight: bold; color: red" );
|
|
_ui->_labelTest->setText( "Host nicht gefunden" );
|
|
return false;
|
|
}
|
|
|
|
_ui->_labelTest->setStyleSheet( "font-weight: normal; color: green" );
|
|
_ui->_labelTest->setText( "Verbindung möglich" );
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief ok gedrückt: geänderte Daten prüfen und übernehmen
|
|
*/
|
|
|
|
void MCNetworkDialog::accept()
|
|
{
|
|
|
|
qDebug() << "MCNetworkDialog::accept()";
|
|
|
|
const QString& host = _ui->_receiverHost->text();
|
|
const QString& port = _ui->_receiverPort->text();
|
|
QHostInfo hostInfo;
|
|
|
|
/// wollen wir ins netz?
|
|
onSetNetworkEnabled( true );
|
|
|
|
/// wir wollen gar kein netz?
|
|
if( !_useNetwork || _ui->_buttonUseUSB->isChecked() )
|
|
//return QDialog::reject();
|
|
goto xx;
|
|
|
|
/// wollen wir server sein?
|
|
if( !_ui->_isSender->isChecked() )
|
|
goto xx;
|
|
|
|
/// wir wollen senden, also Receiver prüfen
|
|
if( host.isEmpty() || port.isEmpty() )
|
|
{
|
|
QMessageBox::warning
|
|
(
|
|
this,
|
|
"Eingabefehler",
|
|
"Die Felder 'Servername' und 'Port'\n "
|
|
"müssen belegt sein."
|
|
);
|
|
return;
|
|
}
|
|
|
|
/*
|
|
Nein, das haut so nicht hin
|
|
// alles da, klappts dann auch mit dem Nachbarn?
|
|
int res = QHostInfo::lookupHost( host, this, SLOT( onLookupHost(QHostInfo) ) );
|
|
/// hier warten, bis 'onLookupHost' zurückkommt und '_hostValid' gesetzt ist
|
|
_lookupLock.lock();
|
|
*/
|
|
|
|
hostInfo = QHostInfo::fromName( host );
|
|
if( onLookupHost( hostInfo ) )
|
|
goto xx;
|
|
|
|
QMessageBox::warning
|
|
(
|
|
this,
|
|
"Netzwerkfehler",
|
|
"Der Server '" + host + "' ist \n"
|
|
"nicht erreichbar."
|
|
);
|
|
return;
|
|
|
|
|
|
xx: _settings->setValue( miniCash::keyIsTcpSender, _ui->_isSender->isChecked() );
|
|
_settings->setValue( miniCash::keyIsTcpReceiver, _ui->_isReceiver->isChecked() );
|
|
_settings->setValue( miniCash::keyReceiverHost, host );
|
|
_settings->setValue( miniCash::keyReceiverPort, port );
|
|
|
|
qDebug() << "-- isSender: " << _ui->_isSender->isChecked();
|
|
qDebug() << "-- isReceiver: " << _ui->_isReceiver->isChecked();
|
|
qDebug() << "-- host: " << host;
|
|
qDebug() << "-- port: " << port;
|
|
|
|
return QDialog::accept();
|
|
|
|
}
|