DebugLayerControlWidget.cpp
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2011-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5 *
6 * ArmarX is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 *
10 * ArmarX is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * @package
19 * @author
20 * @date
21 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
22 * GNU General Public License
23 */
25
26#include <RobotAPI/libraries/widgets/ui_DebugLayerControlWidget.h>
27
28#define UPDATE_INTERVAL 1.0 // update every second
29
31 QWidget(parent), ui(new Ui::DebugLayerControlWidget)
32{
33 entityDrawer = NULL;
34 ui->setupUi(this);
35
36 //init timer
37 SoSensorManager* sensor_mgr = SoDB::getSensorManager();
38 timerSensor = new SoTimerSensor(onTimer, this);
39 timerSensor->setInterval(SbTime(UPDATE_INTERVAL));
40 sensor_mgr->insertTimerSensor(timerSensor);
41
42 //connect signal mapper
43 QObject::connect(&layerSignalMapperVisible,
44 SIGNAL(mapped(QString)),
45 this,
46 SLOT(layerToggleVisibility(QString)));
47 QObject::connect(
48 &layerSignalMapperRemove, SIGNAL(mapped(QString)), this, SLOT(layerRemove(QString)));
49}
50
52{
53 //destroy timer
54 if (timerSensor)
55 {
56 SoSensorManager* sensor_mgr = SoDB::getSensorManager();
57 sensor_mgr->removeTimerSensor(timerSensor);
58 }
59 delete ui;
60}
61
62void
67
68void
70{
71 //ui.layerTable->clear();
72 if (entityDrawer)
73 {
74 armarx::LayerInformationSequence layers = entityDrawer->layerInformation();
75 ui->layerTable->setRowCount(layers.size());
76
77 for (std::size_t i = 0; i < layers.size(); ++i)
78 {
79 const auto& layer = layers.at(i);
80 QString name = QString::fromStdString(layer.layerName);
81
82 //store visibility
83 layerVisibility[layer.layerName] = layer.visible;
84
85 //add name and number of elements
86 ui->layerTable->setItem(i, 0, new QTableWidgetItem{name});
87 ui->layerTable->setItem(
88 i, 1, new QTableWidgetItem{QString::number(layer.elementCount)});
89
90 //add visibility checkbox
91 std::unique_ptr<QCheckBox> box{new QCheckBox};
92 box->setChecked(layer.visible);
93 layerSignalMapperVisible.setMapping(box.get(), name);
94 QObject::connect(
95 box.get(), SIGNAL(stateChanged(int)), &layerSignalMapperVisible, SLOT(map()));
96 ui->layerTable->setCellWidget(i, 2, box.release());
97
98 //add remove button
99 std::unique_ptr<QPushButton> removeB{new QPushButton("remove")};
100 layerSignalMapperRemove.setMapping(removeB.get(), name);
101 QObject::connect(
102 removeB.get(), SIGNAL(clicked()), &layerSignalMapperRemove, SLOT(map()));
103 ui->layerTable->setCellWidget(i, 3, removeB.release());
104 }
105 }
106 else
107 {
108 ARMARX_INFO << "No Debug Drawer" << std::endl;
109 }
110}
111
112void
114{
115 //ARMARX_INFO << "should toggle: " << layerName.toStdString() << std::endl;
116 auto name = layerName.toStdString();
117 if (layerVisibility.find(name) != layerVisibility.end())
118 {
119 if (entityDrawer)
120 {
121 entityDrawer->enableLayerVisu(name, !layerVisibility.at(name));
122 }
123 }
124 else
125 {
126 ARMARX_INFO << "name not present" << std::endl;
127 }
128}
129
130void
132{
133 auto name = layerName.toStdString();
134 ARMARX_INFO << "remove layer: " << name << std::endl;
135
136 if (entityDrawer->hasLayer(name))
137 {
138 entityDrawer->removeLayer(name);
139 }
140 else
141 {
142 ARMARX_INFO << "name not present" << std::endl;
143 }
144}
145
146void
148{
150 if (controller)
151 {
152 controller->updateLayers();
153 }
154}
#define UPDATE_INTERVAL
uint8_t data[1]
std::unordered_map< std::string, bool > layerVisibility
Stores whether a layer is currently visible.
QSignalMapper layerSignalMapperVisible
Maps events to toggle a layer's visibility from checkboxes contained in the table to layerToggleVisib...
static void onTimer(void *data, SoSensor *sensor)
void layerRemove(QString layerName)
armarx::DebugDrawerComponentPtr entityDrawer
void layerToggleVisibility(QString layerName)
QSignalMapper layerSignalMapperRemove
Maps events to remove a layer.
void setEntityDrawer(armarx::DebugDrawerComponentPtr entityDrawer)
DebugLayerControlWidget(QWidget *parent=0)
#define ARMARX_INFO
The normal logging level.
Definition Logging.h:181
ArmarX Headers.
IceInternal::Handle< DebugDrawerComponent > DebugDrawerComponentPtr