plotwidget_transforms.cpp
Go to the documentation of this file.
1 /*
2  * This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
5  */
6 
8 #include "ui_plotwidget_transforms.h"
9 #include <QHBoxLayout>
10 #include <QVBoxLayout>
11 #include <QSettings>
12 #include <QListWidgetItem>
13 #include <QLabel>
14 #include <QMouseEvent>
15 #include <QPushButton>
16 #include <QDialogButtonBox>
17 #include <QDebug>
18 #include <qwt_text.h>
19 
21  : QDialog(plotwidget), ui(new Ui::plotwidget_transforms), _plotwidget_origin(plotwidget)
22 {
23  ui->setupUi(this);
24 
25  QDomDocument doc;
26  auto saved_state = plotwidget->xmlSaveState(doc);
27  _plotwidget = new PlotWidget(plotwidget->datamap(), this);
29  _plotwidget->xmlLoadState(saved_state);
30 
31  auto layout = new QVBoxLayout();
32  ui->framePlotPreview->setLayout(layout);
33  layout->addWidget(_plotwidget);
34  layout->setMargin(6);
35 
36  _plotwidget->zoomOut(false);
38 
39  setupTable();
40 
41  QSettings settings;
42  restoreGeometry(settings.value("DialogTransformEditor.geometry").toByteArray());
43 
44  ui->listCurves->setStyleSheet("QListView::item:selected { background: #ddeeff; }");
45 
46  auto names = TransformFactory::registeredTransforms();
47 
48  for (const auto& name : names)
49  {
50  ui->listTransforms->addItem(QString::fromStdString(name));
51  }
52 
53  if (ui->listCurves->count() != 0)
54  {
55  ui->listCurves->item(0)->setSelected(true);
56  }
57 }
58 
60 {
61  std::map<QString, QColor> colors = _plotwidget->getCurveColors();
62 
63  int row = 0;
64  for (auto& it : colors)
65  {
66  auto curve_it = _plotwidget->curveFromTitle(it.first);
67  auto name = QString::fromStdString(curve_it->src_name);
68  auto color = it.second;
69  auto item = new QListWidgetItem();
70  // item->setForeground(color);
71  ui->listCurves->addItem(item);
72  auto plot_row = new RowWidget(name, color);
73  item->setSizeHint(plot_row->sizeHint());
74  ui->listCurves->setItemWidget(item, plot_row);
75 
76  row++;
77  }
78 }
79 
81 {
82  QSettings settings;
83  settings.setValue("DialogTransformEditor.geometry", saveGeometry());
84 
85  delete ui;
86 }
87 
89 {
90  auto layout = new QHBoxLayout();
91  setLayout(layout);
92  _text = new QLabel(text, this);
93 
94  setStyleSheet(QString("color: %1;").arg(color.name()));
95  _color = color;
96 
97  layout->addWidget(_text);
98 }
99 
101 {
102  return _text->text();
103 }
104 
106 {
107  return _color;
108 }
109 
111 {
112  auto selected = ui->listCurves->selectedItems();
113  if (selected.size() != 1)
114  {
115  return;
116  }
117  auto item = selected.front();
118  auto row_widget = dynamic_cast<RowWidget*>(ui->listCurves->itemWidget(item));
119  auto curve_name = row_widget->text();
120 
121  auto curve_it = _plotwidget->curveFromTitle(curve_name);
122  int transform_row = 0;
123  if (auto ts = dynamic_cast<TransformedTimeseries*>(curve_it->curve->data()))
124  {
125  if (ts->transform())
126  {
127  for (int row = 1; row < ui->listTransforms->count(); row++)
128  {
129  if (ui->listTransforms->item(row)->text() == ts->transformName())
130  {
131  transform_row = row;
132  break;
133  }
134  }
135  }
136  }
137 
138  int selected_row = -1;
139  auto selected_transforms = ui->listTransforms->selectedItems();
140  if (selected_transforms.size() == 1)
141  {
142  selected_row = ui->listTransforms->row(selected_transforms.front());
143  }
144 
145  if (selected_row == transform_row)
146  {
147  // force callback
149  }
150  else
151  {
152  ui->listTransforms->item(transform_row)->setSelected(true);
153  }
154 }
155 
157 {
158  auto selected_curves = ui->listCurves->selectedItems();
159  if (selected_curves.size() != 1)
160  {
161  return;
162  }
163  auto row_widget =
164  dynamic_cast<RowWidget*>(ui->listCurves->itemWidget(selected_curves.front()));
165 
166  QString curve_name = row_widget->text();
167 
168  auto selected_transforms = ui->listTransforms->selectedItems();
169  if (selected_transforms.size() != 1)
170  {
171  return;
172  }
173  QString transform_ID = selected_transforms.front()->text();
174 
175  auto curve_info = _plotwidget->curveFromTitle(curve_name);
176  auto qwt_curve = curve_info->curve;
177  auto ts = dynamic_cast<TransformedTimeseries*>(curve_info->curve->data());
178 
179  QSignalBlocker block(ui->lineEditAlias);
180 
181  if (transform_ID.isEmpty() || transform_ID == ui->listTransforms->item(0)->text())
182  {
183  ts->setTransform({});
184  ts->updateCache(true);
185  ui->stackedWidgetArguments->setCurrentIndex(0);
186 
187  ui->lineEditAlias->setText("");
188  ui->lineEditAlias->setEnabled(false);
189  qwt_curve->setTitle(curve_name);
190  }
191  else
192  {
193  ts->setTransform(transform_ID);
194  ts->updateCache(true);
195  ui->lineEditAlias->setEnabled(true);
196 
197  QString curve_title = qwt_curve->title().text();
198  if (ts->alias().isEmpty())
199  {
200  auto src_name = QString::fromStdString(curve_info->src_name);
201  auto new_title = QString("%1[%2]").arg(src_name).arg(transform_ID);
202  ts->setAlias(new_title);
203  }
204 
205  ui->lineEditAlias->setText(ts->alias());
206  qwt_curve->setTitle(ts->alias());
207 
208  auto widget = ts->transform()->optionsWidget();
209  int index = ui->stackedWidgetArguments->indexOf(widget);
210  if (index == -1 && widget)
211  {
212  index = ui->stackedWidgetArguments->addWidget(widget);
213  }
214 
215  ui->stackedWidgetArguments->setCurrentIndex(index);
216 
217  if (_connected_transform_widgets.count(widget) == 0)
218  {
219  connect(ts->transform().get(), &TransformFunction::parametersChanged, this, [=]() {
220  ts->updateCache(true);
221  if (ui->checkBoxAutoZoom->isChecked())
222  {
223  _plotwidget->zoomOut(false);
224  }
225  else
226  {
227  _plotwidget->replot();
228  }
229  });
230  _connected_transform_widgets.insert(widget);
231  }
232  }
233 
234  _plotwidget->zoomOut(false);
235 }
236 
238 {
239  this->reject();
240 }
241 
243 {
245 
246  QSettings settings;
247  bool autozoom_filter_applied = settings.value("Preferences::autozoom_filter_applied",true).toBool();
248  QDomDocument doc;
249  auto elem = _plotwidget->xmlSaveState(doc);
250  _plotwidget_origin->xmlLoadState(elem,autozoom_filter_applied);
251 
252  if(autozoom_filter_applied)
253  {
254  _plotwidget_origin->zoomOut(false);
255  }
256 
257  this->accept();
258 }
259 
261 {
262  auto selected_curves = ui->listCurves->selectedItems();
263  if (selected_curves.size() != 1)
264  {
265  return;
266  }
267  auto row_widget =
268  dynamic_cast<RowWidget*>(ui->listCurves->itemWidget(selected_curves.front()));
269 
270  QString curve_name = row_widget->text();
271 
272  auto curve_it = _plotwidget->curveFromTitle(curve_name);
273  auto ts = dynamic_cast<TransformedTimeseries*>(curve_it->curve->data());
274 
275  curve_it->curve->setTitle(ui->lineEditAlias->text());
276 
277  if (ts && ts->transform())
278  {
279  ts->setAlias(ui->lineEditAlias->text());
280  }
281 
282  _plotwidget->replot();
283 }
RowWidget(QString text, QColor color)
bool xmlLoadState(QDomElement &element, bool autozoom=true)
Definition: plotwidget.cpp:720
DialogTransformEditor(PlotWidget *plotwidget)
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Definition: core.h:1736
QDomElement xmlSaveState(QDomDocument &doc) const
Definition: plotwidget.cpp:634
std::set< QWidget * > _connected_transform_widgets
void zoomOut(bool emit_signal)
static void block(LexState *ls)
Definition: lparser.c:1293
double timeOffset() const
Definition: plotwidget.h:59
color
Definition: color.h:23
CurveInfo * curveFromTitle(const QString &title)
void on_changeTimeOffset(double offset)
void setContextMenuEnabled(bool enabled)
Definition: plotwidget.cpp:139
Ui::plotwidget_transforms * ui
void setAlias(QString alias)
PlotDataMapRef & datamap()
Definition: plotwidget.h:64
std::map< QString, QColor > getCurveColors() const


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:01:38