plotwidget_transforms.cpp
Go to the documentation of this file.
2 #include "ui_plotwidget_transforms.h"
3 #include <QHBoxLayout>
4 #include <QVBoxLayout>
5 #include <QSettings>
6 #include <QListWidgetItem>
7 #include <QLabel>
8 #include <QMouseEvent>
9 #include <QPushButton>
10 #include <QDialogButtonBox>
11 #include <QDebug>
12 #include <qwt_text.h>
13 
15  QDialog(plotwidget),
16  ui(new Ui::plotwidget_transforms),
17  _plotwidget_origin(plotwidget)
18 {
19  ui->setupUi(this);
20 
21  QDomDocument doc;
22  auto saved_state = plotwidget->xmlSaveState(doc);
23  _plotwidget = new PlotWidget(plotwidget->datamap());
24  _plotwidget->on_changeTimeOffset( plotwidget->timeOffset() );
25  _plotwidget->xmlLoadState(saved_state);
26 
27  auto layout = new QVBoxLayout();
28  ui->framePlotPreview->setLayout(layout);
29  layout->addWidget(_plotwidget);
30  layout->setMargin(6);
31 
32  _plotwidget->zoomOut(false);
34 
35  setupTable();
36 
37  QSettings settings;
38  restoreGeometry(settings.value("DialogTransformEditor.geometry").toByteArray());
39 
40  ui->listCurves->setStyleSheet("QListView::item:selected { background: #ddeeff; }");
41 
42  auto names = TransformFactory::registeredTransforms();
43 
44  for(const auto& name: names)
45  {
46  ui->listTransforms->addItem( QString::fromStdString(name) );
47  }
48 
49  if( ui->listCurves->count() != 0 ){
50  ui->listCurves->item(0)->setSelected(true);
51  }
52 }
53 
55 {
56  std::map<QString, QColor> colors = _plotwidget->getCurveColors();
57 
58  int row = 0;
59  for (auto& it : colors)
60  {
61  auto name = it.first;
62  auto color = it.second;
63  auto item = new QListWidgetItem();
64  // item->setForeground(color);
65  ui->listCurves->addItem( item );
66  auto plot_row = new RowWidget(name, color) ;
67  item->setSizeHint( plot_row->sizeHint() );
68  ui->listCurves->setItemWidget(item, plot_row );
69 
70  row++;
71  }
72 }
73 
75 {
76  QSettings settings;
77  settings.setValue("DialogTransformEditor.geometry", saveGeometry());
78 
79  delete ui;
80 }
81 
83 {
84  auto layout = new QHBoxLayout();
85  setLayout( layout );
86  _text = new QLabel(text, this);
87 
88  setStyleSheet( QString("color: %1;").arg(color.name()));
89  _color = color;
90 
91  layout->addWidget(_text);
92 }
93 
95  return _text->text();
96 }
97 
99  return _color;
100 }
101 
103 {
104  auto selected = ui->listCurves->selectedItems();
105  if( selected.size() != 1){
106  return;
107  }
108  auto item = selected.front();
109  auto row_widget = dynamic_cast<RowWidget*>( ui->listCurves->itemWidget(item) );
110  auto curve_name = row_widget->text();
111 
112  auto curve_it = _plotwidget->curveFromTitle(curve_name);
113  auto ts = dynamic_cast<TransformedTimeseries*>( curve_it->curve->data() );
114 
115  int transform_row = 0;
116  if( ts->transform() )
117  {
118  for( int row = 1; row < ui->listTransforms->count(); row++)
119  {
120  if( ui->listTransforms->item(row)->text() == ts->transformName() )
121  {
122  transform_row = row;
123  break;
124  }
125  }
126  }
127 
128  int selected_row = -1;
129  auto selected_transforms = ui->listTransforms->selectedItems();
130  if( selected_transforms.size() == 1)
131  {
132  selected_row = ui->listTransforms->row(selected_transforms.front());
133  }
134 
135  if( selected_row == transform_row){
136  // force callback
138  }
139  else{
140  ui->listTransforms->item(transform_row)->setSelected(true);
141  }
142 }
143 
145 {
146  auto selected_curves = ui->listCurves->selectedItems();
147  if( selected_curves.size() != 1){
148  return;
149  }
150  auto row_widget = dynamic_cast<RowWidget*>(
151  ui->listCurves->itemWidget(selected_curves.front()) );
152 
153  QString curve_name = row_widget->text();
154 
155  auto selected_transforms = ui->listTransforms->selectedItems();
156  if( selected_transforms.size() != 1){
157  return;
158  }
159  QString transform_ID = selected_transforms.front()->text();
160 
161  auto curve_it = _plotwidget->curveFromTitle(curve_name);
162  auto qwt_curve = curve_it->curve;
163  auto ts = dynamic_cast<TransformedTimeseries*>( curve_it->curve->data() );
164 
165  QSignalBlocker block(ui->lineEditAlias);
166 
167  if( transform_ID.isEmpty() || transform_ID == ui->listTransforms->item(0)->text() )
168  {
169  ts->setTransform({});
170  ts->updateCache(true);
171  ui->stackedWidgetArguments->setCurrentIndex(0);
172 
173  ui->lineEditAlias->setText("");
174  ui->lineEditAlias->setEnabled(false);
175  qwt_curve->setTitle( curve_name );
176  }
177  else{
178  ts->setTransform(transform_ID);
179  ts->updateCache(true);
180  ui->lineEditAlias->setEnabled(true);
181 
182  QString curve_title = qwt_curve->title().text();
183  if( ts->transform()->alias().isEmpty())
184  {
185  auto new_title = QString("%1[%2]").arg(curve_name).arg(transform_ID);
186  ts->transform()->setAlias(new_title);
187  }
188 
189  ui->lineEditAlias->setText( ts->transform()->alias() );
190  qwt_curve->setTitle( ts->transform()->alias() );
191 
192  auto widget = ts->transform()->optionsWidget();
193  int index = ui->stackedWidgetArguments->indexOf(widget);
194  if( index == -1)
195  {
196  index = ui->stackedWidgetArguments->addWidget(widget);
197  }
198 
199  ui->stackedWidgetArguments->setCurrentIndex(index);
200 
201  if( _connected_transform_widgets.count(widget) == 0)
202  {
203  connect( ts->transform().get(), &TimeSeriesTransform::parametersChanged,
204  this, [=]() {
205  ts->updateCache(true);
206  _plotwidget->zoomOut(false);
207  });
208  _connected_transform_widgets.insert(widget);
209  }
210  }
211 
212  _plotwidget->zoomOut(false);
213 }
214 
216 {
217  this->reject();
218 }
219 
221 {
222  QDomDocument doc;
223  auto elem = _plotwidget->xmlSaveState(doc);
225  _plotwidget_origin->zoomOut(false);
226 
227  this->accept();
228 }
229 
231 {
232  auto selected_curves = ui->listCurves->selectedItems();
233  if( selected_curves.size() != 1){
234  return;
235  }
236  auto row_widget = dynamic_cast<RowWidget*>(
237  ui->listCurves->itemWidget(selected_curves.front()) );
238 
239  QString curve_name = row_widget->text();
240 
241  auto curve_it = _plotwidget->curveFromTitle(curve_name);
242  auto ts = dynamic_cast<TransformedTimeseries*>( curve_it->curve->data() );
243 
244  curve_it->curve->setTitle( ui->lineEditAlias->text() );
245 
246  if( ts && ts->transform() )
247  {
248  ts->transform()->setAlias(ui->lineEditAlias->text());
249  }
250 
251  _plotwidget->replot();
252 }
TimeSeriesTransformPtr transform()
RowWidget(QString text, QColor color)
void replot() override
QDomElement xmlSaveState(QDomDocument &doc) const
Definition: plotwidget.cpp:765
std::map< QString, QColor > getCurveColors() const
CurveInfo * curveFromTitle(const QString &title)
Definition: plotwidget.cpp:590
DialogTransformEditor(PlotWidget *plotwidget)
std::set< QWidget * > _connected_transform_widgets
void zoomOut(bool emit_signal)
static void block(LexState *ls)
Definition: lparser.c:1295
const char * name
detail::named_arg< Char, T > arg(const Char *name, const T &arg)
Definition: core.h:1656
QwtPlotCurve * curve
Definition: plotwidget.h:36
bool xmlLoadState(QDomElement &element)
Definition: plotwidget.cpp:835
double timeOffset() const
Definition: plotwidget.h:102
void on_changeTimeOffset(double offset)
void setContextMenuEnabled(bool enabled)
Definition: plotwidget.cpp:227
Ui::plotwidget_transforms * ui
PlotDataMapRef & datamap()
Definition: plotwidget.h:97


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Dec 6 2020 03:48:10