#include #include #include #include #include "multicastConfigDialog.h" #include // #include "multicastValidators.h" MulticastConfigDialog::MulticastConfigDialog(QWidget* parent) : QDialog(parent) { setupUi(); } MulticastConfigDialog::MulticastConfigDialog(McastConfiguration* config, QWidget *parent) : QDialog(parent) { setupUi(); _config = config; _ui.groupAddressEdit->setText(config->multicastAddress()); _ui.dataPortEdit->setText(QString::number(config->multicastUDPPortBase())); connect(_ui.buttonBox, SIGNAL(accepted()), this, SLOT(dialogAccepted())); connect(_ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); } void MulticastConfigDialog::setupUi() { _ui.setupUi(this); QIntValidator* portValidator = new QIntValidator(1024, 65535, this); _ui.dataPortEdit->setValidator(portValidator); connect(_ui.groupAddressEdit, SIGNAL(textChanged(QString const&)), this, SLOT(validateGroupAddress(QString const&))); connect(_ui.dataPortEdit, SIGNAL(textChanged(QString const&)), this, SLOT(validateDataPort(QString const&))); connect(_ui.buttonBox, SIGNAL(accepted()), this, SLOT(dialogAccepted())); connect(_ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); validateGroupAddress(_ui.groupAddressEdit->text()); validateDataPort(_ui.dataPortEdit->text()); } MulticastConfigDialog::~MulticastConfigDialog() { } void MulticastConfigDialog::dialogAccepted() { QHostAddress addr; bool addressParses = addr.setAddress(_ui.groupAddressEdit->text()); _config->multicastAddress(_ui.groupAddressEdit->text()); quint16 port = _ui.dataPortEdit->text().toInt(); _config->multicastUDPPortBase(port); _config->multicastDPort(port + 1); _config->multicastSPort(port + 2); _config->multicastRate(_ui.rateSpinbox->value() * 1024); accept(); } void MulticastConfigDialog::setError(QWidget* widget, QLabel* errorMessageLabel, QString text) { if (errorMessageLabel) errorMessageLabel->setText(QString( "") + text + ""); if (widget) widget->setStyleSheet("background-color: #ffcccc;"); } void MulticastConfigDialog::setOK(QWidget* widget, QLabel* errorMessageLabel) { if (errorMessageLabel) errorMessageLabel->setText(QString( "") + tr("OK") + ""); if (widget) widget->setStyleSheet("background-color: #ccffcc;"); } void MulticastConfigDialog::validateGroupAddress(QString const& input) { QHostAddress a; _isAddressValid = false; if (!a.setAddress(input)) { setError(_ui.groupAddressEdit, _ui.groupAddressMessage, tr( "Not a valid IP Address")); revalidateButtons(); return; } // check if it is IPv4 if (a.protocol() != QAbstractSocket::IPv4Protocol) { setError(_ui.groupAddressEdit, _ui.groupAddressMessage, tr( "Not a valid IPv4 Address")); revalidateButtons(); return; } // check if it is a valid multicast address quint32 addr = a.toIPv4Address(); if ((addr & 0xf0000000) != 0xe0000000) { setError(_ui.groupAddressEdit, _ui.groupAddressMessage, tr( "Not an IPv4 multicast address")); revalidateButtons(); return; } _isAddressValid = true; setOK(_ui.groupAddressEdit, _ui.groupAddressMessage); revalidateButtons(); } void MulticastConfigDialog::validateDataPort(QString const& input) { bool ok; int p = input.toInt(&ok, 0); _isPortValid = false; if (!ok) { setError(_ui.dataPortEdit, _ui.dataPortMessage, tr("Not a number")); revalidateButtons(); return; } if (p < 0) { setError(_ui.dataPortEdit, _ui.dataPortMessage, tr("Must be positive")); revalidateButtons(); return; } if (p < 1024) { setError(_ui.dataPortEdit, _ui.dataPortMessage, tr( "Must not be a privileged port")); revalidateButtons(); return; } if (p > 65535) { setError(_ui.dataPortEdit, _ui.dataPortMessage, tr( "Port number too large")); revalidateButtons(); return; } _isPortValid = true; setOK(_ui.dataPortEdit, _ui.dataPortMessage); revalidateButtons(); } void MulticastConfigDialog::revalidateButtons() { _ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(_isAddressValid && _isPortValid); }