Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "MapVisibilityWidget.h"
00029
00030 #include <QCheckBox>
00031 #include <QVBoxLayout>
00032 #include <QScrollArea>
00033
00034 #include <rtabmap/utilite/ULogger.h>
00035
00036 namespace rtabmap {
00037
00038 MapVisibilityWidget::MapVisibilityWidget(QWidget * parent) : QWidget(parent) {
00039
00040 QVBoxLayout * verticalLayout1 = new QVBoxLayout(this);
00041 QScrollArea * scrollArea = new QScrollArea(this);
00042 scrollArea->setWidgetResizable(true);
00043 QWidget * scrollAreaWidgetContent = new QWidget();
00044 scrollAreaWidgetContent->setObjectName("area");
00045 QVBoxLayout * layout2 = new QVBoxLayout(scrollAreaWidgetContent);
00046 scrollAreaWidgetContent->setLayout(layout2);
00047 scrollArea->setWidget(scrollAreaWidgetContent);
00048 verticalLayout1->addWidget(scrollArea);
00049 }
00050
00051 MapVisibilityWidget::~MapVisibilityWidget() {
00052
00053 }
00054
00055 void MapVisibilityWidget::showEvent(QShowEvent * event)
00056 {
00057 updateCheckBoxes();
00058 }
00059
00060 void MapVisibilityWidget::clear()
00061 {
00062 _poses.clear();
00063 _mask.clear();
00064 updateCheckBoxes();
00065 }
00066
00067 void MapVisibilityWidget::updateCheckBoxes()
00068 {
00069 QWidget * area = this->findChild<QWidget*>("area");
00070 QVBoxLayout * layout = (QVBoxLayout *)area->layout();
00071 QList<QCheckBox*> checkboxes = area->findChildren<QCheckBox*>();
00072 while(checkboxes.size() && checkboxes.size() > (int)_poses.size())
00073 {
00074 delete *checkboxes.begin();
00075 checkboxes.erase(checkboxes.begin());
00076 }
00077 int i=0;
00078 for(std::map<int, Transform>::iterator iter=_poses.begin(); iter!=_poses.end(); ++iter)
00079 {
00080 bool added = false;
00081 if(i >= checkboxes.size())
00082 {
00083 checkboxes.push_back(new QCheckBox(area));
00084 added = true;
00085 }
00086 checkboxes[i]->setText(QString("%1 (%2)").arg(iter->first).arg(iter->second.prettyPrint().c_str()));
00087 checkboxes[i]->setChecked(_mask.at(iter->first));
00088 if(added)
00089 {
00090 connect(checkboxes[i], SIGNAL(stateChanged(int)), this, SLOT(signalVisibility()));
00091 layout->addWidget(checkboxes[i]);
00092 }
00093
00094 ++i;
00095 }
00096 }
00097
00098 void MapVisibilityWidget::setMap(const std::map<int, Transform> & poses, const std::map<int, bool> & mask)
00099 {
00100 UASSERT(poses.size() == mask.size());
00101 _poses = poses;
00102 _mask = mask;
00103 if(this->isVisible())
00104 {
00105 updateCheckBoxes();
00106 }
00107 }
00108
00109 std::map<int, Transform> MapVisibilityWidget::getVisiblePoses() const
00110 {
00111 std::map<int, Transform> poses;
00112 for(std::map<int, Transform>::const_iterator iter=_poses.begin(); iter!=_poses.end(); ++iter)
00113 {
00114 if(_mask.at(iter->first))
00115 {
00116 poses.insert(*iter);
00117 }
00118 }
00119 return poses;
00120 }
00121
00122 void MapVisibilityWidget::signalVisibility()
00123 {
00124 QCheckBox * check = qobject_cast<QCheckBox*>(sender());
00125 _mask.at(check->text().split('(').first().toInt()) = check->isChecked();
00126 emit visibilityChanged(check->text().split('(').first().toInt(), check->isChecked());
00127 }
00128
00129 }