182 lines
5.9 KiB
C++
182 lines
5.9 KiB
C++
|
/*
|
||
|
* Copyright (C) 2012 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/qt.h"
|
||
|
#include "gazebo/gui/building/BuildingEditorEvents.hh"
|
||
|
#include "gazebo/gui/building/LevelWidget.hh"
|
||
|
#include "gazebo/gui/building/LevelWidgetPrivate.hh"
|
||
|
|
||
|
using namespace gazebo;
|
||
|
using namespace gui;
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
LevelWidget::LevelWidget(QWidget *_parent)
|
||
|
: QWidget(_parent), dataPtr(new LevelWidgetPrivate)
|
||
|
{
|
||
|
this->setObjectName("levelWidget");
|
||
|
this->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||
|
|
||
|
QHBoxLayout *levelLayout = new QHBoxLayout;
|
||
|
this->dataPtr->levelCounter = 0;
|
||
|
|
||
|
this->dataPtr->showFloorplanAct = new QAction("Floorplan", this);
|
||
|
this->dataPtr->showElementsAct = new QAction("Features", this);
|
||
|
this->dataPtr->showFloorplanAct->setCheckable(true);
|
||
|
this->dataPtr->showElementsAct->setCheckable(true);
|
||
|
this->dataPtr->showFloorplanAct->setChecked(true);
|
||
|
this->dataPtr->showElementsAct->setChecked(true);
|
||
|
this->dataPtr->showFloorplanAct->setShortcut(tr("F"));
|
||
|
this->dataPtr->showElementsAct->setShortcut(tr("G"));
|
||
|
connect(this->dataPtr->showFloorplanAct, SIGNAL(triggered()), this, SLOT(
|
||
|
OnShowFloorplan()));
|
||
|
connect(this->dataPtr->showElementsAct, SIGNAL(triggered()), this, SLOT(
|
||
|
OnShowElements()));
|
||
|
|
||
|
QMenu *showMenu = new QMenu(this);
|
||
|
showMenu->addAction(this->dataPtr->showFloorplanAct);
|
||
|
showMenu->addAction(this->dataPtr->showElementsAct);
|
||
|
QPushButton *showButton = new QPushButton("View", this);
|
||
|
showButton->setMenu(showMenu);
|
||
|
|
||
|
this->dataPtr->levelComboBox = new QComboBox;
|
||
|
this->dataPtr->levelComboBox->addItem(QString("Level 1"));
|
||
|
int comboBoxwidth = this->dataPtr->levelComboBox->minimumSizeHint().width();
|
||
|
int comboBoxHeight = this->dataPtr->levelComboBox->minimumSizeHint().height();
|
||
|
this->dataPtr->levelComboBox->setMinimumWidth(comboBoxwidth*3);
|
||
|
this->dataPtr->levelComboBox->setMinimumHeight(comboBoxHeight);
|
||
|
this->setMinimumWidth(comboBoxwidth*6);
|
||
|
|
||
|
QPushButton *deleteLevelButton = new QPushButton("-");
|
||
|
deleteLevelButton->setToolTip("Delete this level");
|
||
|
QPushButton *addLevelButton = new QPushButton("+");
|
||
|
addLevelButton->setToolTip("Add new level");
|
||
|
|
||
|
levelLayout->addWidget(showButton);
|
||
|
levelLayout->addWidget(this->dataPtr->levelComboBox);
|
||
|
levelLayout->addWidget(deleteLevelButton);
|
||
|
levelLayout->addWidget(addLevelButton);
|
||
|
|
||
|
connect(this->dataPtr->levelComboBox, SIGNAL(currentIndexChanged(int)),
|
||
|
this, SLOT(OnCurrentLevelChanged(int)));
|
||
|
connect(deleteLevelButton, SIGNAL(clicked()), this, SLOT(OnDeleteLevel()));
|
||
|
connect(addLevelButton, SIGNAL(clicked()), this, SLOT(OnAddLevel()));
|
||
|
|
||
|
this->dataPtr->connections.push_back(
|
||
|
gui::editor::Events::ConnectUpdateLevelWidget(
|
||
|
std::bind(&LevelWidget::OnUpdateLevelWidget, this, std::placeholders::_1,
|
||
|
std::placeholders::_2)));
|
||
|
|
||
|
this->dataPtr->connections.push_back(
|
||
|
gui::editor::Events::ConnectTriggerShowFloorplan(
|
||
|
std::bind(&LevelWidget::OnTriggerShowFloorplan, this)));
|
||
|
|
||
|
this->dataPtr->connections.push_back(
|
||
|
gui::editor::Events::ConnectTriggerShowElements(
|
||
|
std::bind(&LevelWidget::OnTriggerShowElements, this)));
|
||
|
|
||
|
this->dataPtr->connections.push_back(
|
||
|
gui::editor::Events::ConnectNewBuildingModel(
|
||
|
std::bind(&LevelWidget::OnDiscard, this)));
|
||
|
|
||
|
this->setLayout(levelLayout);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
LevelWidget::~LevelWidget()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnCurrentLevelChanged(int _level)
|
||
|
{
|
||
|
gui::editor::Events::changeBuildingLevel(_level);
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnAddLevel()
|
||
|
{
|
||
|
gui::editor::Events::addBuildingLevel();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnDeleteLevel()
|
||
|
{
|
||
|
gui::editor::Events::deleteBuildingLevel();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnUpdateLevelWidget(int _level, const std::string &_newName)
|
||
|
{
|
||
|
// Delete
|
||
|
if (_newName.empty())
|
||
|
{
|
||
|
this->dataPtr->levelComboBox->removeItem(_level);
|
||
|
if (_level-1 >= 0)
|
||
|
this->dataPtr->levelComboBox->setCurrentIndex(_level-1);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Add
|
||
|
if (_level == this->dataPtr->levelComboBox->count())
|
||
|
{
|
||
|
this->dataPtr->levelComboBox->addItem(tr(_newName.c_str()));
|
||
|
this->dataPtr->levelComboBox->setCurrentIndex(_level);
|
||
|
this->dataPtr->levelCounter++;
|
||
|
}
|
||
|
// Change name
|
||
|
else
|
||
|
{
|
||
|
this->dataPtr->levelComboBox->setItemText(_level, tr(_newName.c_str()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnDiscard()
|
||
|
{
|
||
|
this->dataPtr->levelComboBox->clear();
|
||
|
this->dataPtr->levelComboBox->addItem(QString("Level 1"));
|
||
|
this->dataPtr->levelCounter = 0;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnShowFloorplan()
|
||
|
{
|
||
|
gui::editor::Events::showFloorplan();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnTriggerShowFloorplan()
|
||
|
{
|
||
|
this->OnShowFloorplan();
|
||
|
this->dataPtr->showFloorplanAct->setChecked(
|
||
|
!this->dataPtr->showFloorplanAct->isChecked());
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnShowElements()
|
||
|
{
|
||
|
gui::editor::Events::showElements();
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////
|
||
|
void LevelWidget::OnTriggerShowElements()
|
||
|
{
|
||
|
this->OnShowElements();
|
||
|
this->dataPtr->showElementsAct->setChecked(
|
||
|
!this->dataPtr->showElementsAct->isChecked());
|
||
|
}
|