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