/*
Copyright (C) 2011 Srivats P.
This file is part of "Ostinato"
This 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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
#include "portconfigdialog.h"
#include "settings.h"
PortConfigDialog::PortConfigDialog(
OstProto::Port &portConfig,
const OstProto::PortState &portState,
QWidget *parent)
: QDialog(parent), portConfig_(portConfig)
{
QString currentUser(portConfig_.user_name().c_str());
qDebug("In %s", __FUNCTION__);
setupUi(this);
description->setPlaceholderText(portConfig_.description().c_str());
description->setText(portConfig_.user_description().c_str());
switch(portConfig_.transmit_mode())
{
case OstProto::kSequentialTransmit:
sequentialStreamsButton->setChecked(true);
break;
case OstProto::kInterleavedTransmit:
interleavedStreamsButton->setChecked(true);
break;
default:
Q_ASSERT(false); // Unreachable!!!
break;
}
// Port Reservation
myself_ = appSettings->value(kUserKey, kUserDefaultValue).toString();
// XXX: what if myself_ is empty?
if (currentUser.isEmpty()) {
reservedBy_ = kNone;
reservedBy->setText("Unreserved");
reserveButton->setText("Reserve");
}
else if (currentUser == myself_) {
reservedBy_ = kSelf;
reservedBy->setText("Reserved by: me ("+currentUser+")");
reserveButton->setText("Reserve (uncheck to unreserve)");
reserveButton->setChecked(true);
}
else {
reservedBy_ = kOther;
reservedBy->setText("Reserved by: "+currentUser+"");
reserveButton->setText("Force reserve");
}
qDebug("reservedBy_ = %d", reservedBy_);
exclusiveControlButton->setChecked(portConfig_.is_exclusive_control());
streamStatsButton->setChecked(portConfig_.is_tracking_stream_stats());
// Disable UI elements based on portState
if (portState.is_transmit_on()) {
transmitModeBox->setDisabled(true);
streamStatsButton->setDisabled(true);
}
}
void PortConfigDialog::accept()
{
OstProto::Port pc;
pc.set_user_description(description->text().toStdString());
if (sequentialStreamsButton->isChecked())
pc.set_transmit_mode(OstProto::kSequentialTransmit);
else if (interleavedStreamsButton->isChecked())
pc.set_transmit_mode(OstProto::kInterleavedTransmit);
else
Q_ASSERT(false); // Unreachable!!!
pc.set_user_name(portConfig_.user_name());
switch (reservedBy_) {
case kSelf:
if (!reserveButton->isChecked())
pc.set_user_name(""); // unreserve
break;
case kOther:
case kNone:
if (reserveButton->isChecked())
pc.set_user_name(myself_.toStdString()); // (force) reserve
break;
default:
qWarning("Unreachable code");
break;
}
pc.set_is_exclusive_control(exclusiveControlButton->isChecked());
pc.set_is_tracking_stream_stats(streamStatsButton->isChecked());
// Update fields that have changed, clear the rest
if (pc.user_description() != portConfig_.user_description())
portConfig_.set_user_description(pc.user_description());
else
portConfig_.clear_user_description();
if (pc.transmit_mode() != portConfig_.transmit_mode())
portConfig_.set_transmit_mode(pc.transmit_mode());
else
portConfig_.clear_transmit_mode();
if (pc.user_name() != portConfig_.user_name())
portConfig_.set_user_name(pc.user_name());
else
portConfig_.clear_user_name();
if (pc.is_exclusive_control() != portConfig_.is_exclusive_control())
portConfig_.set_is_exclusive_control(pc.is_exclusive_control());
else
portConfig_.clear_is_exclusive_control();
if (pc.is_tracking_stream_stats() != portConfig_.is_tracking_stream_stats())
portConfig_.set_is_tracking_stream_stats(pc.is_tracking_stream_stats());
else
portConfig_.clear_is_tracking_stream_stats();
QDialog::accept();
}