30 #include <QtCore/QDir>
31 #include <QtCore/QFile>
32 #include <QtCore/QTextStream>
37 #if QT_VERSION >= 0x050000
38 # include <QtWidgets/QApplication>
39 # include <QtWidgets/QBoxLayout>
40 # include <QtWidgets/QButtonGroup>
41 # include <QtWidgets/QGroupBox>
42 # include <QtWidgets/QLabel>
43 # include <QtWidgets/QListView>
44 # include <QtWidgets/QMenu>
45 # include <QtWidgets/QMessageBox>
46 # include <QtWidgets/QRadioButton>
47 # include <QtCore/QStringListModel>
48 # include <QtWidgets/QToolTip>
50 # include <QtGui/QApplication>
51 # include <QtGui/QBoxLayout>
52 # include <QtGui/QButtonGroup>
53 # include <QtGui/QGroupBox>
54 # include <QtGui/QLabel>
55 # include <QtGui/QListView>
56 # include <QtGui/QMenu>
57 # include <QtGui/QMessageBox>
58 # include <QtGui/QRadioButton>
59 # include <QtGui/QStringListModel>
60 # include <QtGui/QToolTip>
63 #include <QtGui/QFontMetrics>
64 #include <QtGui/QImage>
65 #include <QtGui/QPaintDevice>
66 #include <QtGui/QPainter>
67 #include <QtGui/QPdfWriter>
79 unsigned int numOfValuesColumns,
unsigned int numOfSigmasColumns,
80 const QString& name,
bool hasExtKeys)
83 alternativeTitleName_(),
161 bool isInRanges(
false);
179 bool isVisible(
false);
216 unsigned int numOfSigmasColumns,
217 const QString& name) :
219 columnNames_(numOfValuesColumns + numOfSigmasColumns, NULL)
279 ": selfCheck(): the list of branches is empty, nothing to plot");
293 ": selfCheck(): the branch " +
listOfBranches_.at(i)->getName() +
" has no points");
355 setBackgroundRole(QPalette::Base);
357 zeroPen_ =
new QPen(QColor(120,120,120), 1);
358 barPen_ =
new QPen(QColor(180,0,0), 1);
359 rulerPen_ =
new QPen(QColor(150,150,150), 1);
361 rulerBrush_ =
new QBrush(QColor(255, 230, 10, 200));
608 QColor color, color4Selection;
609 for (
int i=0; i<numOfBranches; i++, pen++, brush++, pen4Selection++, brush4Selection++)
612 pen->setColor(color);
614 brush->setColor(color);
615 brush->setStyle(Qt::SolidPattern);
617 color4Selection.setHsv((
int)(360*i/numOfBranches), 255, 175);
618 pen4Selection->setColor(color4Selection);
619 pen4Selection->setWidth(3);
620 brush4Selection->setColor(QColor(255,255,255));
621 brush4Selection->setStyle(Qt::SolidPattern);
713 while (iBranch<plotCarrier_->listOfBranches()->size() &&
721 while (iBranch<plotCarrier_->listOfBranches()->size() &&
731 bool isInvisible=
true;
732 while (isInvisible && iBranch<plotCarrier_->listOfBranches()->size())
735 while (idx < branch->data()->nRow() &&
745 if (iBranch < plotCarrier_->listOfBranches()->size())
767 for (
unsigned i=0; i<branch->
data()->
nRow(); i++)
864 QFontMetrics fm(painter->fontMetrics());
1038 height_ = ev->size().height();
1039 width_ = ev->size().width();
1040 QWidget::resizeEvent(ev);
1048 QPainter painter(
this);
1049 QRect rect = e->rect();
1100 QString xInfo, yInfo;
1101 QFontMetrics fm(painter->fontMetrics());
1106 yInfo.sprintf(
"f: %.4g", y);
1110 xInfo.sprintf(
"x: %.4g", x);
1111 yInfo.sprintf(
"y: %.4g", y);
1114 int biasX = 5, biasY = 5;
1115 int widthDX = fm.width(xInfo);
1116 int widthDY = fm.width(yInfo);
1117 int rectHeight = 2*fm.height() + 3*biasY;
1118 int rectWidth = std::max(widthDX, widthDY) + 2*biasX;
1124 painter->setBrush(Qt::NoBrush);
1127 rulerToPoint_.y()-10 - rectHeight + biasY + fm.height(), xInfo);
1129 rulerToPoint_.y()-10 - rectHeight + 2*(biasY + fm.height()), yInfo);
1147 QString dXInfo, dYInfo;
1148 QFontMetrics fm(painter->fontMetrics());
1153 dYInfo.sprintf(
"df: %.4g", dy);
1157 dXInfo.sprintf(
"dx: %.4g", dx);
1158 dYInfo.sprintf(
"dy: %.4g", dy);
1161 int biasX = 5, biasY = 5;
1162 int widthDX = fm.width(dXInfo);
1163 int widthDY = fm.width(dYInfo);
1164 int rectHeight = 2*fm.height() + 3*biasY;
1165 int rectWidth = std::max(widthDX, widthDY) + 2*biasX;
1171 painter->setBrush(Qt::NoBrush);
1174 rulerToPoint_.y()-10 - rectHeight + biasY + fm.height(), dXInfo);
1176 rulerToPoint_.y()-10 - rectHeight + 2*(biasY + fm.height()), dYInfo);
1189 painter->drawRect(rect);
1195 double dx = x_to - x_from;
1196 double dy = y_to - y_from;
1198 QString xRangesInfo, yRangesInfo;
1199 QString dXInfo, dYInfo;
1200 QFontMetrics fm(painter->fontMetrics());
1206 yRangesInfo.sprintf(
"f: from: <%.4g> to <%4.g>", y_from, y_to);
1208 dYInfo.sprintf(
"df: %.4g", dy);
1212 xRangesInfo.sprintf(
"f: from: <%.4g> to <%4.g>", x_from, x_to);
1213 yRangesInfo.sprintf(
"f: from: <%.4g> to <%4.g>", y_from, y_to);
1214 dXInfo.sprintf(
"dx: %.4g", dx);
1215 dYInfo.sprintf(
"dy: %.4g", dy);
1218 int biasX = 5, biasY = 5;
1219 int rectWidth = std::max(fm.width(xRangesInfo), fm.width(yRangesInfo));
1220 rectWidth = std::max(rectWidth, fm.width(dXInfo));
1221 rectWidth = std::max(rectWidth, fm.width(dYInfo));
1222 rectWidth += 2*biasX;
1223 int rectHeight = 5*fm.height() + 6*biasY;
1229 painter->setBrush(Qt::NoBrush);
1232 rulerToPoint_.y()-10 - rectHeight + biasY + fm.height(),
"New ranges:");
1234 rulerToPoint_.y()-10 - rectHeight + 2*(biasY + fm.height()), xRangesInfo);
1236 rulerToPoint_.y()-10 - rectHeight + 3*(biasY + fm.height()), yRangesInfo);
1238 rulerToPoint_.y()-10 - rectHeight + 4*(biasY + fm.height()), dXInfo);
1240 rulerToPoint_.y()-10 - rectHeight + 5*(biasY + fm.height()), dYInfo);
1253 painter->setBrush(QBrush(QColor(144, 238, 144, 100)));
1256 painter->drawRect(rect);
1257 painter->setBrush(Qt::NoBrush);
1268 int numOfVisibleBranches=0;
1272 numOfVisibleBranches++;
1275 QFontMetrics fm(painter->fontMetrics());
1277 if (numOfVisibleBranches==1)
1295 painter->rotate(270);
1314 int ticAlignFlag = (
yStepP_<0) ? Qt::AlignLeft : Qt::AlignRight;
1329 Str.sprintf(
"%.8g", dy);
1357 Str.sprintf(
"%.8g", dy);
1416 int ticAlignFlag = Qt::AlignCenter;
1428 Str.sprintf(
"%.8g", dx);
1454 Str.sprintf(
"%.8g", dx);
1512 QFontMetrics fm(painter->fontMetrics());
1516 int ticAlignFlag=Qt::AlignCenter;
1531 if ( modf(dt.
toDouble(), &tmp)*86400.0 < 0.1)
1554 for (i=0; i<n4SubTic-1; i++)
1563 for (i=0; i<n4SubTic-1; i++)
1574 if ( modf(dt.
toDouble(), &tmp)*86400.0 < 0.3)
1594 for (i=0; i<n4SubTic-1; i++)
1645 if (modf(dt.
toDouble(), &tmp)*1440.0 < 0.1)
1668 for (i=0; i<n4SubTic-1; i++)
1677 for (i=0; i<n4SubTic-1; i++)
1688 if ( modf(dt.
toDouble(), &tmp)*1440.0 < 0.1)
1708 for (i=0; i<n4SubTic-1; i++)
1731 if ( modf(dt.
toDouble(), &tmp)*24.0 < 0.1)
1770 if ( modf(dt.
toDouble(), &tmp)*24.0 < 0.1)
1819 if (modf(dt.
toDouble(), &tmp)*24.0 < 0.1)
1857 if (modf(dt.
toDouble(), &tmp)*24.0 < 0.1)
1945 QRegion selectionRegion(QRect(pointLT, pointRB-QPoint(1,1)));
1955 bool isFirstPointDrawn =
false;
1957 int prevX=0, prevY=0;
1959 for (
unsigned int j=0; j<branch->
data()->nRow(); j++)
1971 if (limitLeft<=x && x<=limitRight && limitTop<=y && y<=limitBottom)
1974 if (selectionRegionIsAPoint)
1976 selectionRegion.setRects(&rect, 1);
1992 if (!isFirstPointDrawn)
1993 isFirstPointDrawn =
true;
1995 painter->drawLine(prevX, prevY, x, y);
2033 painter->drawLine(x, y_u, x, y_d);
2048 painter->drawLine(x, y_u, x, y_d);
2063 painter->setBrush(Qt::NoBrush);
2072 double leftLimit, rightLimit, topLimit, bottomLimit;
2073 double queryX, queryY;
2086 minD = sqrt((rightLimit-leftLimit)*(rightLimit-leftLimit) +
2087 (bottomLimit-topLimit)*(bottomLimit-topLimit));
2099 for (
unsigned int j=0; j<branch->
data()->nRow(); j++)
2104 if (leftLimit<=x && x<=rightLimit && topLimit<=y && y<=bottomLimit)
2106 d = sqrt( (x-queryX)*(x-queryX) + (y-queryY)*(y-queryY) );
2109 queryBranch = branch;
2118 ": query successful for [" + queryBranch->
getName() +
"] branch, point# " +
2119 QString().setNum(queryIdx));
2127 bool isOutputDirExists(
false);
2128 if (!path.isEmpty())
2133 isOk = d.mkpath(
"./");
2135 isOutputDirExists =
true;
2138 ": cannot create directory " + path);
2140 isOutputDirExists =
true;
2146 if (isOutputDirExists)
2147 fileName = path +
"/" + fileName;
2158 f.setFileName(fileName + QString(
"").sprintf(
"_%03d.dat", i));
2159 if (f.open(QIODevice::WriteOnly))
2162 s <<
"# " << branch->
getName() <<
"\n";
2163 s <<
"# X: [" << qPrintable(*
xLabel_) <<
"]\n";
2164 s <<
"# Y: [" << qPrintable(*
yLabel_) <<
"]\n";
2166 for (
unsigned int j=0; j<branch->
data()->nRow(); j++)
2169 s << QString().sprintf(
"%24.12f %24.12f ",
2172 s << QString().sprintf(
" %24.12f ", branch->
data()->
getElement(j, ei));
2185 ": output4Files(): cannot open the file " + f.fileName() +
" for writing");
2199 QFont font=QApplication::font();
2202 font.setPointSize(fontSize);
2203 prnPainter->setFont(font);
2230 QWidget *parent,
unsigned int modes)
2232 path2Outputs_(pth2outpt),
2234 filterAuxActions_(),
2235 filterExtActions_(),
2265 QMap<QString, QString> keyByKey;
2271 if (!keyByKey.contains(pb->
getExtKey(j)))
2281 area_->setBackgroundRole(QPalette::Base);
2282 area_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
2288 plotScroller_->setFrameStyle(QFrame::Panel | QFrame::Sunken);
2292 connect(
plotScroller_, SIGNAL(mouseWheelRotated(QWheelEvent*)),
2300 connect(
plotScroller_, SIGNAL(mouseDoubleClicked(QMouseEvent*)),
2346 QBoxLayout *mainLayout =
new QHBoxLayout(
this);
2350 QStringListModel *model=
new QStringListModel();
2353 for (
int i=0; i<
extKeys_.size(); i++)
2355 model->setStringList(list);
2358 lvExtKeys_->setSelectionMode(QAbstractItemView::MultiSelection);
2359 lvExtKeys_->setEditTriggers (QAbstractItemView::NoEditTriggers);
2365 SIGNAL(selectionChanged(
const QItemSelection,
const QItemSelection)), SLOT(
extKeyChanged()));
2370 QHBoxLayout *layoutH =
new QHBoxLayout;
2371 layoutH->setSpacing(0);
2372 QPushButton *allPlus =
new QPushButton(
"*+",
this);
2373 QPushButton *prevKey =
new QPushButton(
"<<",
this);
2374 QPushButton *nextKey =
new QPushButton(
">>",
this);
2375 QPushButton *allMinus=
new QPushButton(
"-*",
this);
2376 QSize btnSize = allPlus->fontMetrics().size(Qt::TextSingleLine,
">>");
2379 btnSize += QSize(8,4);
2380 allPlus ->setFixedSize(btnSize);
2381 allMinus->setFixedSize(btnSize);
2382 prevKey ->setFixedSize(btnSize);
2383 nextKey ->setFixedSize(btnSize);
2385 layoutH->addWidget(allMinus);
2386 layoutH->addStretch(1);
2387 layoutH->addWidget(prevKey);
2388 layoutH->addWidget(nextKey);
2389 layoutH->addStretch(1);
2390 layoutH->addWidget(allPlus);
2396 QVBoxLayout *layoutV =
new QVBoxLayout;
2397 layoutV->setSpacing(0);
2398 layoutV->addLayout(layoutH);
2400 mainLayout->addLayout(layoutV, 0);
2403 QBoxLayout *layout =
new QVBoxLayout;
2404 mainLayout->addLayout(layout, 5);
2408 mainLayout->activate();
2409 setLayout(mainLayout);
2450 QBoxLayout *layout, *aLayout;
2451 QPushButton *button;
2461 aLayout =
new QVBoxLayout;
2462 layout->addLayout(aLayout);
2464 gBox =
new QGroupBox(
"Axis to plot",
controls_);
2465 grid =
new QGridLayout(gBox);
2467 label =
new QLabel(
"X:", gBox);
2468 label -> setMinimumSize(label->sizeHint());
2469 grid -> addWidget(label, 0,0, Qt::AlignLeft | Qt::AlignVCenter);
2471 label =
new QLabel(
"Y:", gBox);
2472 label -> setMinimumSize(label->sizeHint());
2473 grid -> addWidget(label, 1,0, Qt::AlignLeft | Qt::AlignVCenter);
2476 cbXAxis_->setInsertPolicy(QComboBox::InsertAtBottom);
2478 cbYAxis_->setInsertPolicy(QComboBox::InsertAtBottom);
2498 gBox->setLayout(grid);
2499 aLayout->addWidget(gBox);
2503 const char* sets2plotNames[3] = {
"A",
"U",
"G"};
2504 QRadioButton *rbButton[3];
2505 gBox =
new QGroupBox(
"Data to plot",
controls_);
2506 QBoxLayout *bLayout=
new QHBoxLayout(gBox);
2508 for (
int i=0; i<3; i++)
2510 rbButton[i] =
new QRadioButton(sets2plotNames[i], gBox);
2511 rbButton[i]-> setMinimumSize(rbButton[i]->sizeHint());
2513 bLayout->addWidget(rbButton[i]);
2517 aLayout->addWidget(gBox);
2524 QStringListModel *model =
new QStringListModel();
2529 model -> setStringList(list);
2532 lvBranches_->setSelectionMode(QAbstractItemView::MultiSelection);
2533 lvBranches_->setEditTriggers (QAbstractItemView::NoEditTriggers);
2539 SIGNAL(selectionChanged(
const QItemSelection,
const QItemSelection)), SLOT(
branchChanged()));
2544 QHBoxLayout *layoutH =
new QHBoxLayout;
2545 layoutH->setSpacing(0);
2546 QPushButton *allPlus =
new QPushButton(
"*+",
this);
2547 QPushButton *prevBrn =
new QPushButton(
"<<",
this);
2548 QPushButton *nextBrn =
new QPushButton(
">>",
this);
2549 QPushButton *allMinus=
new QPushButton(
"-*",
this);
2550 QSize btnSize = allPlus->fontMetrics().size(Qt::TextSingleLine,
">>");
2553 btnSize+=QSize(8,4);
2554 allPlus ->setFixedSize(btnSize);
2555 allMinus->setFixedSize(btnSize);
2556 prevBrn ->setFixedSize(btnSize);
2557 nextBrn ->setFixedSize(btnSize);
2559 QPushButton *filterMinus=NULL, *filterPlus=NULL;
2562 filterMinus =
new QPushButton(
"-F",
this);
2563 filterPlus =
new QPushButton(
"F+",
this);
2564 filterMinus->setFixedHeight (btnSize.height());
2565 filterMinus->setMinimumWidth(btnSize.width());
2566 filterPlus ->setFixedHeight (btnSize.height());
2567 filterPlus ->setMinimumWidth(btnSize.width());
2568 filterPlus ->setContextMenuPolicy(Qt::CustomContextMenu);
2569 filterMinus->setContextMenuPolicy(Qt::CustomContextMenu);
2571 layoutH->addWidget(allMinus);
2573 layoutH->addWidget(filterMinus, 1);
2575 layoutH->addStretch(1);
2576 layoutH->addWidget(prevBrn);
2577 layoutH->addWidget(nextBrn);
2579 layoutH->addWidget(filterPlus, 1);
2581 layoutH->addStretch(1);
2582 layoutH->addWidget(allPlus);
2592 connect(filterMinus, SIGNAL(customContextMenuRequested(
const QPoint&)),
2594 connect(filterPlus, SIGNAL(customContextMenuRequested(
const QPoint&)),
2597 QVBoxLayout *layoutV =
new QVBoxLayout;
2598 layoutV->setSpacing(0);
2599 layoutV->addLayout(layoutH);
2601 layout->addLayout(layoutV, 5);
2605 gBox =
new QGroupBox(
"Plot data as:",
controls_);
2606 aLayout =
new QVBoxLayout(gBox);
2608 aLayout->addStretch(1);
2609 cbPoints_ =
new QCheckBox(
"Points", gBox);
2618 cbLines_ =
new QCheckBox(
"Lines", gBox);
2625 cbErrBars_ =
new QCheckBox(
"Error bars", gBox);
2638 aLayout->addStretch(1);
2640 gBox->setLayout(aLayout);
2641 layout->addWidget(gBox);
2645 gBox =
new QGroupBox(
"Colors (H,S,V)",
controls_);
2646 grid =
new QGridLayout(gBox);
2648 slider =
new QSlider(Qt::Vertical, gBox);
2649 slider->setTickPosition(QSlider::TicksLeft);
2651 slider->setRange(0, 360);
2652 slider->setPageStep(30);
2653 slider->setValue(0);
2654 slider->setMinimumSize(slider->sizeHint());
2655 connect(slider, SIGNAL(valueChanged(
int)), SLOT(
colorHChanged(
int)));
2656 grid->addWidget(slider, 1,0);
2658 slider =
new QSlider(Qt::Vertical, gBox);
2660 slider->setTickPosition(QSlider::NoTicks);
2661 slider->setRange(0, 255);
2662 slider->setPageStep(24);
2663 slider->setValue(255);
2664 slider->setMinimumSize(slider->sizeHint());
2665 connect(slider, SIGNAL(valueChanged(
int)), SLOT(
colorSChanged(
int)));
2666 grid->addWidget(slider, 1,1);
2668 slider =
new QSlider(Qt::Vertical, gBox);
2669 slider->setTickPosition(QSlider::TicksRight);
2671 slider->setRange(0, 255);
2672 slider->setPageStep(50);
2673 slider->setValue(200);
2674 slider->setMinimumSize(slider->sizeHint());
2675 connect(slider, SIGNAL(valueChanged(
int)), SLOT(
colorVChanged(
int)));
2676 grid->addWidget(slider, 1,2);
2679 gBox->setLayout(grid);
2680 layout->addWidget(gBox);
2684 gBox =
new QGroupBox(
"Plot Ranges",
controls_);
2685 aLayout =
new QVBoxLayout(gBox);
2687 aLayout->addStretch(1);
2700 cbWStdVar_ =
new QCheckBox(
"w/ StdVar", gBox);
2713 const char* rangeLimitsNames[3] = {
"A",
"U",
"G"};
2714 QRadioButton *rbButton[3];
2715 QBoxLayout *bLayout=
new QHBoxLayout;
2716 aLayout->addLayout(bLayout);
2718 for (
int i=0; i<3; i++)
2720 rbButton[i] =
new QRadioButton(rangeLimitsNames[i], gBox);
2721 rbButton[i]-> setMinimumSize(rbButton[i]->sizeHint());
2723 bLayout->addWidget(rbButton[i]);
2729 aLayout->addStretch(1);
2731 gBox->setLayout(aLayout);
2732 layout->addWidget(gBox);
2736 layout->addStretch(1);
2737 grid =
new QGridLayout();
2738 layout->addLayout(grid, 0);
2740 button =
new QPushButton(
">file",
controls_);
2741 button->setMinimumSize(2*button->sizeHint()/4);
2742 connect (button, SIGNAL(clicked()), SLOT(
save2File()));
2743 grid->addWidget(button, 0,0);
2746 button->setMinimumSize(2*button->sizeHint()/4);
2747 connect (button, SIGNAL(clicked()), SLOT(
zoomXOut()));
2748 grid->addWidget(button, 1,0);
2751 button->setMinimumSize(2*button->sizeHint()/4);
2753 connect (button, SIGNAL(clicked()), SLOT(
zoomOut()));
2754 grid->addWidget(button, 2,0);
2757 button->setMinimumSize(2*button->sizeHint()/4);
2758 connect (button, SIGNAL(clicked()), SLOT(
zoomYIn()));
2759 grid->addWidget(button, 0,1);
2761 button =
new QPushButton(
"O",
controls_);
2762 button->setMinimumSize(2*button->sizeHint()/4);
2764 grid->addWidget(button, 1,1);
2767 button->setMinimumSize(2*button->sizeHint()/4);
2768 connect (button, SIGNAL(clicked()), SLOT(
zoomYOut()));
2769 grid->addWidget(button, 2,1);
2772 button->setMinimumSize(2*button->sizeHint()/4);
2774 connect (button, SIGNAL(clicked()), SLOT(
zoomIn()));
2775 grid->addWidget(button, 0,2);
2778 button->setMinimumSize(2*button->sizeHint()/4);
2779 connect (button, SIGNAL(clicked()), SLOT(
zoomXIn()));
2780 grid->addWidget(button, 1,2);
2782 button =
new QPushButton(
">Img",
controls_);
2783 button->setMinimumSize(2*button->sizeHint()/4);
2784 connect (button, SIGNAL(clicked()), SLOT(
save2Image()));
2785 grid->addWidget(button, 2,2);
2835 int currentX =
cbXAxis_->currentIndex();
2836 int currentY =
cbYAxis_->currentIndex();
2849 cbXAxis_->setCurrentIndex(currentX);
2853 cbYAxis_->setCurrentIndex(currentY);
2871 QAbstractItemModel *oldModel =
lvBranches_->model();
2875 lvBranches_->setModel(
new QStringListModel(list));
2878 lvBranches_->setSelectionMode(QAbstractItemView::MultiSelection);
2884 SIGNAL(selectionChanged(
const QItemSelection,
const QItemSelection)), SLOT(
branchChanged()));
3009 QStringListModel *model = (QStringListModel*)
lvBranches_->model();
3011 int row = mIdx.row();
3014 row = model->rowCount() - 1;
3015 mIdx = model->index(row);
3029 QStringListModel *model = (QStringListModel*)
lvBranches_->model();
3031 int row = mIdx.row();
3033 if (row > model->rowCount()-1)
3035 mIdx = model->index(row);
3049 QStringListModel *model = (QStringListModel*)
lvExtKeys_->model();
3050 QModelIndex mIdx =
lvExtKeys_->currentIndex();
3051 int row = mIdx.row();
3054 row = model->rowCount() - 1;
3055 mIdx = model->index(row);
3069 QStringListModel *model = (QStringListModel*)
lvExtKeys_->model();
3070 QModelIndex mIdx =
lvExtKeys_->currentIndex();
3071 int row = mIdx.row();
3073 if (row > model->rowCount()-1)
3075 mIdx = model->index(row);
3094 QString txt=ret->text();
3095 QItemSelectionModel *selectionModel=
lvBranches_->selectionModel();
3096 QStringListModel *model=(QStringListModel*)
lvBranches_->model();
3097 for (
int i=0; i<model->rowCount(); i++)
3099 selectionModel->select(model->index(i), QItemSelectionModel::Deselect);
3118 QString txt=ret->text();
3119 QItemSelectionModel *selectionModel=
lvBranches_->selectionModel();
3120 QStringListModel *model=(QStringListModel*)
lvBranches_->model();
3121 for (
int i=0; i<model->rowCount(); i++)
3123 selectionModel->select(model->index(i), QItemSelectionModel::Select);
3137 QString txt=ret->text();
3138 QItemSelectionModel *selectionModel=
lvBranches_->selectionModel();
3139 QStringListModel *model=(QStringListModel*)
lvBranches_->model();
3140 for (
int i=0; i<model->rowCount(); i++)
3142 selectionModel->select(model->index(i), QItemSelectionModel::Deselect);
3156 QString txt=ret->text();
3157 QItemSelectionModel *selectionModel=
lvBranches_->selectionModel();
3158 QStringListModel *model=(QStringListModel*)
lvBranches_->model();
3159 for (
int i=0; i<model->rowCount(); i++)
3161 selectionModel->select(model->index(i), QItemSelectionModel::Select);
3175 QString txt=ret->text();
3180 for (
unsigned int j=0; j<branch->
numOfRows(); j++)
3199 QString txt=ret->text();
3204 for (
unsigned int j=0; j<branch->
numOfRows(); j++)
3218 QItemSelectionModel *selectionModel =
lvBranches_->selectionModel();
3219 QStringListModel *model = (QStringListModel*)
lvBranches_->model();
3220 for (
int i=0; i<model->rowCount(); i++)
3222 if (selectionModel->isSelected(model->index(i)))
3236 QItemSelectionModel *selectionModel=
lvExtKeys_->selectionModel();
3237 QStringListModel *model=(QStringListModel*)
lvExtKeys_->model();
3238 for (
int i=0; i<model->rowCount(); i++)
3241 str = model->data(model->index(i), Qt::DisplayRole).toString();
3243 if (selectionModel->isSelected(model->index(i)))
3269 for (
int i=0; i<l.size(); i++)
3280 for (
int i=0; i<l.size(); i++)
3291 for (
int i=0; i<l.size(); i++)
3434 QWidget::resizeEvent(ev);
3442 Qt::MouseButton button = e->button();
3443 Qt::KeyboardModifiers modifiers = e->modifiers();
3448 case Qt::LeftButton:
3452 case Qt::NoModifier:
3453 case Qt::ShiftModifier:
3457 plotScroller_->verticalScrollBar()->value()), modifiers & Qt::ShiftModifier);
3459 case Qt::ControlModifier:
3468 case Qt::NoModifier:
3472 case Qt::ControlModifier:
3477 case Qt::RightButton:
3481 case Qt::NoModifier:
3487 case Qt::ShiftModifier:
3493 case Qt::ControlModifier:
3504 ": processMousePressEvent(): mouse buttons pressed: " +
3505 ((button & Qt::LeftButton) ?
"Left ":
"") +
3506 ((button & Qt::RightButton) ?
"Right ":
"") +
3507 ((button & Qt::MidButton) ?
"Middle ":
"") +
3508 ((button & Qt::XButton1) ?
"XButton1 ":
"") +
3509 ((button & Qt::XButton2) ?
"XButton2":
"")
3550 plotScroller_->verticalScrollBar()->value()), e->modifiers() & Qt::ShiftModifier);
3564 Qt::MouseButton button = e->button();
3565 Qt::KeyboardModifiers modifiers = e->modifiers();
3569 case Qt::LeftButton:
3574 plotScroller_->verticalScrollBar()->value()), modifiers & Qt::ShiftModifier);
3582 case Qt::RightButton:
3593 ": processMousePressEvent(): mouse buttons released: " +
3594 ((button & Qt::LeftButton) ?
"Left ":
"") +
3595 ((button & Qt::RightButton) ?
"Right ":
"") +
3596 ((button & Qt::MidButton) ?
"Middle ":
"") +
3597 ((button & Qt::XButton1) ?
"XButton1 ":
"") +
3598 ((button & Qt::XButton2) ?
"XButton2":
"")
3610 Qt::MouseButton button = e->button();
3611 Qt::KeyboardModifiers modifiers = e->modifiers();
3616 case Qt::LeftButton:
3620 case Qt::NoModifier:
3627 case Qt::ControlModifier:
3636 case Qt::NoModifier:
3638 case Qt::ControlModifier:
3643 case Qt::RightButton:
3647 case Qt::NoModifier:
3649 case Qt::ShiftModifier:
3651 case Qt::ControlModifier:
3667 QPoint p = e->pos();
3668 int delta = e->delta();
3672 else if (delta<0 && zoomOutAction_->isEnabled())
3681 Qt::KeyboardModifiers modifiers=e->modifiers();
3687 case Qt::Key_Control:
3709 case Qt::Key_Control:
3728 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
3729 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
3732 posX = xScrollBar->pageStep()/2;
3734 posY = yScrollBar->pageStep()/2;
3735 int x_old = xScrollBar->value() + posX;
3736 int y_old = yScrollBar->value() + posY;
3740 double xFprime = xFactor + (xFactor - 1.0)*(
area_->
xMargins_ - 1)/xL;
3741 double yFprime = yFactor + (yFactor - 1.0)*(
area_->
yMargins_ - 1)/yL;
3835 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
3836 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
3837 xScrollBar->setValue(xScrollBar->value() + dX);
3838 yScrollBar->setValue(yScrollBar->value() + dY);
3861 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3864 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3875 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
3876 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
3877 QRect rect(xScrollBar->value(), yScrollBar->value(),
3878 xScrollBar->pageStep(), yScrollBar->pageStep());
3883 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3886 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3889 area_->update(rect);
3911 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3914 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3925 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
3926 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
3927 QRect rect(xScrollBar->value(), yScrollBar->value(),
3928 xScrollBar->pageStep(), yScrollBar->pageStep());
3933 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3936 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3939 area_->update(rect);
3961 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3964 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3975 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
3976 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
3977 QRect rect(xScrollBar->value(), yScrollBar->value(),
3978 xScrollBar->pageStep(), yScrollBar->pageStep());
3983 dx = -(int)round(0.5*l*(1.0-
scaleX_));
3986 dy = -(
int)round(0.5*l*(1.0-
scaleY_));
3989 area_->update(rect);
4004 if (x_to != x_from && y_to != y_from)
4006 double minX = std::min(x_to, x_from);
4007 double maxX = std::max(x_to, x_from);
4008 double minY = std::min(y_to, y_from);
4009 double maxY = std::max(y_to, y_from);
4034 dx = -(int)round(0.5*l*(1.0 -
scaleX_));
4037 dy = -(
int)round(0.5*l*(1.0 -
scaleY_));
4042 if (branch && idx>-1)
4061 xStr.sprintf(
" (argument axis): %.6g", x);
4062 yStr.sprintf(
" (value axis): %.6g", y);
4064 QMessageBox msgBox(
this);
4065 msgBox.setIcon(QMessageBox::Information);
4066 msgBox.setText(
"<b>Inquired point</b>");
4067 msgBox.setInformativeText(
"<p>You have selected a point from the branch <b>" +
4068 branch->
getName() +
"</b>. Its attributes are:</p>" +
4069 "<p>index #" + QString().setNum(idx) +
",</p>" +
4070 "<p>" + xStr +
"</p>" +
4071 "<p>" + yStr +
"</p>" );
4084 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
4085 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
4086 QRect rect(xScrollBar->value(), yScrollBar->value(),
4087 xScrollBar->pageStep(), yScrollBar->pageStep());
4094 dx = -(int)round(0.5*l*(1.0 -
scaleX_));
4097 dy = -(
int)round(0.5*l*(1.0 -
scaleY_));
4101 area_->update(rect);
4109 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
4110 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
4111 QRect rect(xScrollBar->value(), yScrollBar->value(),
4112 xScrollBar->pageStep(), yScrollBar->pageStep());
4117 dx = -(int)round(0.5*l*(1.0 -
scaleX_));
4120 dy = -(
int)round(0.5*l*(1.0 -
scaleY_));
4134 area_->update(QRect(pointLT-QPoint(5,5), pointRB+QPoint(5,5)));
4142 QScrollBar *xScrollBar =
plotScroller_->horizontalScrollBar();
4143 QScrollBar *yScrollBar =
plotScroller_->verticalScrollBar();
4144 QRect rect(xScrollBar->value(), yScrollBar->value(),
4145 xScrollBar->pageStep(), yScrollBar->pageStep());
4148 area_->update(rect);
4164 bool isOutputDirExists(
false);
4170 isOk = d.mkpath(
"./");
4172 isOutputDirExists =
true;
4175 "::save2Image(): cannot create directory " +
path2Outputs_);
4177 isOutputDirExists =
true;
4182 if (isOutputDirExists)
4185 QString fileSuffix(
"");
4191 fileSuffix =
".pdf";
4194 fileSuffix =
".jpg";
4197 fileSuffix =
".png";
4200 fileSuffix =
".ppm";
4204 "::save2Image(): unknown image type " + QString(
"").setNum(
outputFormat_));
4205 fileSuffix =
".pdf";
4221 QPdfWriter pdfWriter(fileName +
".pdf");
4222 pdfWriter.setPageOrientation(QPageLayout::Landscape);
4223 pdfWriter.setResolution(300);
4224 pdfWriter.setPageSize(QPageSize(QPageSize::Letter));
4228 painter.begin(&pdfWriter);
4229 area_->
output4Print(&painter, pdfWriter.width(), pdfWriter.height(), 12, 6, 12);
4243 image.fill(QColor(255, 255, 255));
4245 painter.begin(&image);
4248 image.save(fileName + fileSuffix);
4251 "::save2Image(): the plot has been saved into the file " + fileName + fileSuffix);
QString interval2Str(double days)
SgVersion libraryVersion("SgLib", 0, 7, 5, "Tuscarora (rc1)", SgMJD(2022, 2, 18, 17, 34))
virtual void write(LogLevel, quint32, const QString &, bool=false)
@ F_YYYYMMDDHHMMSSSS
Long verbose: Fri, the 2nd of Apr, 2010; 17hr 02min 43.6400sec.
@ F_Date
RFC2822 date format realized by Qt (Qt::RFC2822Date)
@ F_Time
SINEX, short version: 10:092.
@ F_TimeShort
Time, seconds are integer: 17:02:43.
QString toString(Format format=F_Verbose) const
unsigned int nRow() const
void setElement(unsigned int i, unsigned int j, double d)
double getElement(unsigned int i, unsigned int j) const
unsigned int nCol() const
void setSets2plot(SetsOfData sod)
static QString yLabel4Unknown_
void defineAreas(QPainter *)
void setUserMode(UserMode mode)
void setRulerFromPoint(QPoint point)
const QPoint & getRulerFromPoint() const
void setBPSaturation(int)
void setIsPlotPoints(bool is)
void drawFrames(QPainter *)
void drawRangeSelector(QPainter *)
void output4Print(QPainter *, int, int, int, int, int)
void setIsPlotErrBars(bool is)
QBrush * branchSelectedBrushes_
void setIsRangeSymmetrical(bool is)
void setUserDefinedRanges(double, double, double, double)
virtual void resizeEvent(QResizeEvent *)
SetsOfData getRangeLimits() const
void drawPointInfo(QPainter *)
void drawXmjdTics(QPainter *)
void output4Files(const QString &path)
void setIsPlotImpulses(bool is)
void setXColumn(unsigned int xColumn)
double reverseCalcY(int y) const
static QString xLabel4Unknown_
void drawData(QPainter *, const QRect &)
void setHave2HasZero(bool is)
QPen * branchSelectedPens_
const QPoint & getRulerToPoint() const
void setYColumn(unsigned int yColumn)
void drawYTics(QPainter *)
unsigned int getXColumn() const
void unsetUserDefinedRanges()
void setIsPlotLines(bool is)
const QPoint & getRulerToPointPrev() const
void setVisibleWidth(int width)
UserMode getUserMode() const
void drawXTics(QPainter *)
SetsOfData getSets2plot() const
void setIsLimitsOnVisible(bool is)
void drawRuler(QPainter *)
void queryPoint(const QPoint &, SgPlotBranch *&, int &)
int calcY(double y) const
unsigned int getYColumn() const
SgPlotCarrier * plotCarrier_
virtual QString className() const
void setRulerToPoint(QPoint point)
void drawPointSelector(QPainter *)
int calcX(double x) const
bool useUserDefinedRanges_
virtual void paintEvent(QPaintEvent *)
void setRangeLimits(SetsOfData rl)
void drawWholePlot(QPainter *, const QRect &)
void setIsStdVar(bool is)
SgPlotArea(SgPlotCarrier *, QWidget *parent=0, Qt::WindowFlags f=0)
void setVisibleHeight(int height)
double reverseCalcX(int x) const
const QString & getName() const
QVector< QString > extKeys_
void flagExtKey(const QString &eKey, bool on)
unsigned int getDataAttr(unsigned int) const
bool isPointInRanges(int idx, unsigned int limits) const
const QString & getExtKey(int idx)
QVector< bool > extKeysVisible_
QMap< int, QString > alternativeTitleName_
unsigned int numOfRows() const
void xorDataAttr(unsigned int, unsigned int)
void addDataAttr(unsigned int, unsigned int)
bool getIsBrowsable() const
void setDataAttr(unsigned int, unsigned int)
void delDataAttr(unsigned int, unsigned int)
SgPlotBranch(unsigned int, unsigned int, unsigned int, const QString &, bool hasExtKeys=false)
QString & getAlternativeTitleName(int idx=-1)
bool isPointVisible(int idx, unsigned int limits) const
QVector< QString * > * columnNames()
void createBranch(unsigned int numberOfRows, const QString &branchName, bool hasExtKeys=false)
int getStdVarIdx(int columnIdx) const
QList< SgPlotBranch * > * listOfBranches()
QList< SgPlotBranch * > listOfBranches_
unsigned int numOfValuesColumns() const
void setNameOfColumn(unsigned int, const QString &)
SgPlotCarrier(unsigned int, unsigned int, const QString &)
AxisType getAxisType(int columnIdx) const
QVector< QString * > columnNames_
QString & getName(int idx=-1)
unsigned int numOfSigmasColumns_
QString file2SaveBaseName_
QMap< int, QString > name_
const QString & getFile2SaveBaseName() const
unsigned int numOfValuesColumns_
unsigned int numOfSigmasColumns() const
QString className() const
void startInquire(const QPoint &)
QAction * normalSizeAction_
QButtonGroup * bgSets2plot_
void doInquire(const QPoint &)
virtual void resizeEvent(QResizeEvent *)
void dataStructureChanged()
void pointInfoRequested(SgPlot *, SgPlotBranch *, int, int, int)
void startMeasuring(const QPoint &)
void rescaleArea(double, double, int=-1, int=-1)
void processKeyReleaseEvent(QKeyEvent *)
void oUserDefinedChanged(bool)
void processMouseReleaseEvent(QMouseEvent *)
void dmPointsChanged(bool)
void setFilterNames(const QList< QString > &)
void modifyRangeLimits(int)
QList< QAction * > filterAuxActions_
QAction * zoomYOutAction_
virtual QString className() const
void processMouseDoubleClickEvent(QMouseEvent *)
void markAllExtKeysAsSelected()
QList< QAction * > filterActions_
SgPlot(SgPlotCarrier *, const QString &, QWidget *=0, unsigned int=0)
void dataContentChanged()
void processWheelEvent(QWheelEvent *)
QPoint oldCursorPosition_
OutputFormat outputFormat_
void startReRanging(const QPoint &)
QAction * zoomXOutAction_
void changeXaxisTemp2(int)
void markAllBranchesAsDeselected()
QPushButton * pbZommXOut_
void queryData(const QPoint &)
void stopScrollViewport()
static const double scaleFactor_
void doMeasuring(const QPoint &)
void startSelecting(const QPoint &, bool=false)
void modifySets2plot(int)
void changeXaxisTemp(int)
SgPlotScroller * plotScroller_
void setFilterExtNames(const QList< QString > &)
void dmLinesChanged(bool)
void stopSelecting(const QPoint &, bool=false)
QPushButton * pbZommYOut_
void doReRanging(const QPoint &)
void processFilterExtMinus()
void processFilterAuxMinus(const QPoint &)
void doScrollViewport(const QPoint &)
bool isExtKeyViewInSpecialMode_
void processFilterMinus()
void changeYaxisTemp2(int)
void processMousePressEvent(QMouseEvent *)
void setFilterAuxNames(const QList< QString > &)
void markAllExtKeysAsDeselected()
void dmImpulsesChanged(bool)
void processFilterAuxPlus(const QPoint &)
void doSelecting(const QPoint &, bool=false)
void processKeyPressEvent(QKeyEvent *)
QCheckBox * cbRangeVisible_
QCheckBox * cbSymmetrical_
void changeYaxisTemp(int)
void processFilterExtPlus()
unsigned int currentKeyModifier_
QButtonGroup * bgRangeLimits_
void userPressedAKey(SgPlot *, Qt::KeyboardModifiers, int)
QList< QAction * > filterExtActions_
bool isBranchViewInSpecialMode_
void dmErrBarsChanged(bool)
void startScrollViewport(const QPoint &)
QCheckBox * cbUserDefined_
void markAllBranchesAsSelected()
SgPlotCarrier * plotCarrier_
QList< QString > extKeys_
void processMouseMoveEvent(QMouseEvent *)
void setRangeSymmetrical(bool)
QString name(NameFormat fmt=NF_Human) const