diff options
Diffstat (limited to 'gr-qtgui/lib/displayform.cc')
-rw-r--r-- | gr-qtgui/lib/displayform.cc | 65 |
1 files changed, 58 insertions, 7 deletions
diff --git a/gr-qtgui/lib/displayform.cc b/gr-qtgui/lib/displayform.cc index 08ced9c913..e2475cb95e 100644 --- a/gr-qtgui/lib/displayform.cc +++ b/gr-qtgui/lib/displayform.cc @@ -22,6 +22,8 @@ #include <displayform.h> #include <iostream> +#include <QPixmap> +#include <QFileDialog> DisplayForm::DisplayForm(int nplots, QWidget* parent) : QWidget(parent), _nplots(nplots), _systemSpecifiedFlag(false) @@ -58,11 +60,11 @@ DisplayForm::DisplayForm(int nplots, QWidget* parent) _marker_alpha_menu.push_back(new MarkerAlphaMenu(i, this)); connect(_line_title_act[i], SIGNAL(whichTrigger(int, const QString&)), - this, SLOT(setTitle(int, const QString&))); + this, SLOT(setLineLabel(int, const QString&))); for(int j = 0; j < _line_color_menu[i]->getNumActions(); j++) { connect(_line_color_menu[i], SIGNAL(whichTrigger(int, const QString&)), - this, SLOT(setColor(int, const QString&))); + this, SLOT(setLineColor(int, const QString&))); } for(int j = 0; j < _line_width_menu[i]->getNumActions(); j++) { @@ -95,6 +97,12 @@ DisplayForm::DisplayForm(int nplots, QWidget* parent) _menu->addMenu(_lines_menu[i]); } + + _save_act = new QAction("Save", this); + _save_act->setStatusTip(tr("Save Figure")); + connect(_save_act, SIGNAL(triggered()), this, SLOT(saveFigure())); + _menu->addAction(_save_act); + Reset(); // Create a timer to update plots at the specified rate @@ -145,7 +153,7 @@ DisplayForm::mousePressEvent( QMouseEvent * e) // Update the line titles if changed externally for(int i = 0; i < _nplots; i++) { - _lines_menu[i]->setTitle(_displayPlot->title(i)); + _lines_menu[i]->setTitle(_displayPlot->lineLabel(i)); } _menu->exec(e->globalPos()); } @@ -185,16 +193,22 @@ DisplayForm::setUpdateTime(double t) } void -DisplayForm::setTitle(int which, const QString &title) +DisplayForm::setTitle(const QString &title) +{ + _displayPlot->setTitle(title); +} + +void +DisplayForm::setLineLabel(int which, const QString &label) { - _displayPlot->setTitle(which, title); + _displayPlot->setLineLabel(which, label); } void -DisplayForm::setColor(int which, const QString &color) +DisplayForm::setLineColor(int which, const QString &color) { QColor c = QColor(color); - _displayPlot->setColor(which, c); + _displayPlot->setLineColor(which, c); _displayPlot->replot(); } @@ -273,3 +287,40 @@ DisplayForm::setGrid() else setGrid(false); } + +void +DisplayForm::saveFigure() +{ + QPixmap qpix = QPixmap::grabWidget(this); + + QString types = QString(tr("JPEG file (*.jpg);;Portable Network Graphics file (*.png);;Bitmap file (*.bmp);;TIFF file (*.tiff)")); + + QString filename, filetype; + QFileDialog *filebox = new QFileDialog(0, "Save Image", "./", types); + filebox->setViewMode(QFileDialog::Detail); + if(filebox->exec()) { + filename = filebox->selectedFiles()[0]; + filetype = filebox->selectedNameFilter(); + } + else { + return; + } + + if(filetype.contains(".jpg")) { + qpix.save(filename, "JPEG"); + } + else if(filetype.contains(".png")) { + qpix.save(filename, "PNG"); + } + else if(filetype.contains(".bmp")) { + qpix.save(filename, "BMP"); + } + else if(filetype.contains(".tiff")) { + qpix.save(filename, "TIFF"); + } + else { + qpix.save(filename, "JPEG"); + } + + delete filebox; +} |