first re-commit.
This commit is contained in:
206
libMiniCash/mcnetworkdialog.cpp
Normal file
206
libMiniCash/mcnetworkdialog.cpp
Normal file
@@ -0,0 +1,206 @@
|
||||
/***************************************************************************
|
||||
|
||||
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();
|
||||
|
||||
}
|
Reference in New Issue
Block a user