1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-18 08:54:15 +01:00

OP-1611 Added context menu to Scope widget

This commit is contained in:
m_thread 2014-11-14 14:18:46 +01:00
parent d70d94aef4
commit 6c476d2a58
6 changed files with 74 additions and 1 deletions

View File

@ -93,6 +93,23 @@ void PlotData::updatePlotData()
m_plotCurve->setSamples(m_xDataEntries, m_yDataEntries);
}
void PlotData::clear()
{
m_meanSum = 0.0f;
m_correctionSum = 0.0f;
m_correctionCount = 0;
m_xDataEntries.clear();
m_yDataEntries.clear();
while (!m_enumMarkerList.isEmpty()) {
QwtPlotMarker *marker = m_enumMarkerList.takeFirst();
marker->detach();
delete marker;
}
if (wantsInitialData()) {
append(m_object);
}
}
bool PlotData::hasData() const
{
if (!m_isEnumPlot) {

View File

@ -93,6 +93,7 @@ public:
virtual void removeStaleData() = 0;
void updatePlotData();
void clear();
bool hasData() const;
QString lastDataAsString();

View File

@ -47,6 +47,7 @@ void ScopeGadget::loadConfiguration(IUAVGadgetConfiguration *config)
ScopeGadgetConfiguration *sgConfig = qobject_cast<ScopeGadgetConfiguration *>(config);
ScopeGadgetWidget *widget = qobject_cast<ScopeGadgetWidget *>(m_widget);
widget->setName(config->name());
widget->setPlotDataSize(sgConfig->dataSize());
widget->setRefreshInterval(sgConfig->refreshInterval());

View File

@ -50,7 +50,6 @@ void ScopeGadgetFactory::startPlotting()
emit onStartPlotting();
}
Core::IUAVGadget *ScopeGadgetFactory::createGadget(QWidget *parent)
{
ScopeGadgetWidget *gadgetWidget = new ScopeGadgetWidget(parent);

View File

@ -33,6 +33,7 @@
#include "uavobject.h"
#include "coreplugin/icore.h"
#include "coreplugin/connectionmanager.h"
#include <coreplugin/icore.h>
#include "qwt/src/qwt_plot_curve.h"
#include "qwt/src/qwt_plot_grid.h"
@ -48,6 +49,10 @@
#include <QPushButton>
#include <QMutexLocker>
#include <QWheelEvent>
#include <QMenu>
#include <QAction>
#include <QClipboard>
#include <QApplication>
#include <qwt/src/qwt_legend_label.h>
#include <qwt/src/qwt_plot_canvas.h>
@ -88,6 +93,9 @@ ScopeGadgetWidget::ScopeGadgetWidget(QWidget *parent) : QwtPlot(parent),
// Listen to autopilot connection events
connect(cm, SIGNAL(deviceAboutToDisconnect()), this, SLOT(csvLoggingDisconnect()));
connect(cm, SIGNAL(deviceConnected(QIODevice *)), this, SLOT(csvLoggingConnect()));
setContextMenuPolicy(Qt::CustomContextMenu);
connect(this, SIGNAL(customContextMenuRequested(const QPoint & )), this, SLOT(popUpMenu(const QPoint &)));
}
ScopeGadgetWidget::~ScopeGadgetWidget()
@ -624,3 +632,44 @@ void ScopeGadgetWidget::csvLoggingDisconnect()
csvLoggingStop();
}
}
void ScopeGadgetWidget::popUpMenu(const QPoint &mousePosition)
{
Q_UNUSED(mousePosition);
QMenu menu;
QAction * action = menu.addAction(tr("Clear"));
connect(action, &QAction::triggered, this, &ScopeGadgetWidget::clearPlot);
action = menu.addAction(tr("Copy to Clipboard"));
connect(action, &QAction::triggered, this, &ScopeGadgetWidget::copyToClipboardAsImage);
menu.addSeparator();
action = menu.addAction(tr("Options..."));
connect(action, &QAction::triggered, this, &ScopeGadgetWidget::showOptionDialog);
menu.exec(QCursor::pos());
}
void ScopeGadgetWidget::clearPlot()
{
m_mutex.lock();
foreach (PlotData * plot, m_curvesData.values()) {
plot->clear();
}
m_mutex.unlock();
replot();
}
void ScopeGadgetWidget::copyToClipboardAsImage()
{
QPixmap pixmap = QWidget::grab();
if(pixmap.isNull()){
qDebug("Failed to capture the plot");
return;
}
QClipboard *clipboard = QApplication::clipboard();
clipboard->setPixmap(pixmap);
}
void ScopeGadgetWidget::showOptionDialog()
{
Core::ICore::instance()->showOptionsDialog("ScopeGadget", m_name);
}

View File

@ -69,6 +69,7 @@ public:
ScopeGadgetWidget(QWidget *parent = 0);
~ScopeGadgetWidget();
void setName (QString name) { m_name = name; }
void setupSequentialPlot();
void setupChronoPlot();
void setupUAVObjectPlot();
@ -137,12 +138,17 @@ private slots:
void stopPlotting();
void csvLoggingConnect();
void csvLoggingDisconnect();
void popUpMenu(const QPoint &mousePosition);
void clearPlot();
void copyToClipboardAsImage();
void showOptionDialog();
private:
void preparePlot(PlotType plotType);
void setupExamplePlot();
QString m_name;
PlotType m_plotType;
double m_plotDataSize;