first re-commit.

This commit is contained in:
2025-08-05 22:37:51 +02:00
commit 5295a82aa3
109 changed files with 9928 additions and 0 deletions

View 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();
}