pxmlw6n2f/Gazebo_Distributed_TCP/gazebo/gui/CloneWindow.cc

127 lines
3.6 KiB
C++

/*
* Copyright (C) 2014 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include "gazebo/gui/CloneWindow.hh"
#include "gazebo/gui/CloneWindowPrivate.hh"
#include "gazebo/gui/qt.h"
using namespace gazebo;
using namespace gui;
/////////////////////////////////////////////////
CloneWindow::CloneWindow(QWidget *_parent)
: QDialog(_parent),
dataPtr(new CloneWindowPrivate())
{
this->dataPtr->validPort = false;
this->setWindowTitle(tr("Gazebo: Cloning a simulation"));
this->setWindowFlags(Qt::Window | Qt::WindowCloseButtonHint |
Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint);
// Create the main layout for this widget.
QVBoxLayout *mainLayout = new QVBoxLayout;
QFrame *frame = new QFrame;
// Port information.
QLabel *portInfo = new QLabel(
"Select the port that the new server will use for connections.\n"
"Please check that the port is not used by any other process.\n");
// Port widget.
QHBoxLayout *portLayout = new QHBoxLayout;
QLabel *portLabel = new QLabel("Cloned server port (1025-65535):");
this->dataPtr->portEdit = new QLineEdit("11346");
this->dataPtr->portEdit->setFixedWidth(50);
this->dataPtr->portEdit->setMaxLength(5);
this->dataPtr->portEdit->setValidator(new QIntValidator(1025, 65535, this));
portLayout->setContentsMargins(4, 4, 4, 30);
portLayout->addWidget(portLabel);
portLayout->addWidget(this->dataPtr->portEdit);
// Buttons.
QHBoxLayout *buttonLayout = new QHBoxLayout;
QPushButton *cancelButton = new QPushButton("Cancel");
connect(cancelButton, SIGNAL(clicked()), this, SLOT(OnCancel()));
this->dataPtr->okayButton = new QPushButton("Ok");
connect(this->dataPtr->okayButton, SIGNAL(clicked()), this, SLOT(OnOkay()));
buttonLayout->addWidget(cancelButton);
buttonLayout->addStretch(2);
buttonLayout->addWidget(this->dataPtr->okayButton);
// Compose the main frame.
mainLayout->addWidget(portInfo);
mainLayout->addWidget(frame);
mainLayout->addLayout(portLayout);
mainLayout->addLayout(buttonLayout);
mainLayout->setContentsMargins(8, 8, 4, 4);
// Assign the mainlayout to this widget.
this->setLayout(mainLayout);
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
}
/////////////////////////////////////////////////
CloneWindow::~CloneWindow()
{
}
/////////////////////////////////////////////////
int CloneWindow::GetPort()
{
if (this->dataPtr->validPort)
return this->dataPtr->port;
else
return 0;
}
/////////////////////////////////////////////////
int CloneWindow::Port() const
{
if (this->dataPtr->validPort)
return this->dataPtr->port;
else
return 0;
}
/////////////////////////////////////////////////
bool CloneWindow::IsValidPort() const
{
return this->dataPtr->validPort;
}
/////////////////////////////////////////////////
void CloneWindow::Update()
{
this->dataPtr->port =
this->dataPtr->portEdit->text().toInt(&this->dataPtr->validPort);
}
/////////////////////////////////////////////////
void CloneWindow::OnOkay()
{
this->done(QDialog::Accepted);
this->Update();
}
/////////////////////////////////////////////////
void CloneWindow::OnCancel()
{
this->done(QDialog::Rejected);
}