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