Newer
Older
/*=====================================================================
PIXHAWK Micro Air Vehicle Flying Robotics Toolkit
(c) 2009, 2010 PIXHAWK PROJECT <http://pixhawk.ethz.ch>
This file is part of the PIXHAWK project
PIXHAWK is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
PIXHAWK is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with PIXHAWK. If not, see <http://www.gnu.org/licenses/>.
======================================================================*/
/**
* @file
* @brief List of unmanned vehicles
* @author Lorenz Meier <mavteam@student.ethz.ch>
*
*/
#include <QString>
#include <QTimer>
#include <QLabel>
#include <QFileDialog>
#include <QDebug>
#include <QApplication>
#include "MG.h"
#include "UASListWidget.h"
#include "UASManager.h"
#include "UAS.h"
#include "UASView.h"
#include "QGCUnconnectedInfoWidget.h"
#include "MainWindow.h"
#include "MAVLinkSimulationLink.h"
#include "LinkManager.h"
Bryant
committed
UASListWidget::UASListWidget(QWidget *parent) : QWidget(parent),
m_ui(new Ui::UASList)
m_ui->verticalLayout->setAlignment(Qt::AlignTop);
// Construct initial widget
uWidget = new QGCUnconnectedInfoWidget(this);
m_ui->verticalLayout->addWidget(uWidget);
Bryant
committed
linkToBoxMapping = QMap<LinkInterface*, QGroupBox*>();
Mariano Lizarraga
committed
this->setVisible(false);
Bryant
committed
connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)),
this, SLOT(addUAS(UASInterface*)));
Lorenz Meier
committed
// Get a list of all existing UAS
foreach (UASInterface* uas, UASManager::instance()->getUASList()) {
addUAS(uas);
}
}
UASListWidget::~UASListWidget()
{
delete m_ui;
}
void UASListWidget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}
}
m_ui->verticalLayout->removeWidget(uWidget);
delete uWidget;
uWidget = NULL;
Bryant
committed
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Only display the UAS in a single link.
QList<LinkInterface*>* x = uas->getLinks();
if (x->size())
{
LinkInterface* li = x->at(0);
// Find an existing QGroupBox for this LinkInterface or create a
// new one.
QGroupBox* newBox;
if (linkToBoxMapping.contains(li))
{
newBox = linkToBoxMapping[li];
}
else
{
newBox = new QGroupBox(li->getName(), this);
QVBoxLayout* boxLayout = new QVBoxLayout(newBox);
newBox->setLayout(boxLayout);
m_ui->verticalLayout->addWidget(newBox);
linkToBoxMapping[li] = newBox;
}
// And add the new UAS to the UASList
UASView* newView = new UASView(uas, newBox);
uasViews.insert(uas, newView);
newBox->layout()->addWidget(newView);
// Watch for when this widget is destroyed so that we can clean up the
// groupbox if necessary.
connect(newView, SIGNAL(destroyed(QObject*)),
this, SLOT(removeUASView(QObject*)));
}
}
}
void UASListWidget::activeUAS(UASInterface* uas)
{
UASView* view = uasViews.value(uas, NULL);
view->setUASasActive(true);
}
Bryant
committed
/**
* If the UAS was removed, check to see if it was the last one in the QGroupBox and delete
* the QGroupBox if so.
*/
void UASListWidget::removeUASView(QObject* widget)
Bryant
committed
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
UASView* view = (UASView*)widget;
if (view) {
int views = view->parentWidget()->findChildren<UASView*>().size();
if (views == 0) {
// Delete the groupbox
view->parentWidget()->deleteLater();
// Remove the associated UAS from our list.
UASInterface* uas = uasViews.key(view, NULL);
if (uas)
{
uasViews.remove(uas);
}
// And remove this GroupBox from our mapping.
LinkInterface* link = linkToBoxMapping.key((QGroupBox*)view->parentWidget(), NULL);
if (link)
{
linkToBoxMapping.remove(link);
}
// And put the initial widget back.
uWidget = new QGCUnconnectedInfoWidget(this);
m_ui->verticalLayout->addWidget(uWidget);
}
}