! \class PlotDataDialog \brief Dialog for generating plots for the spreadsheet data. \ingroup frontend */
| 55 | \ingroup frontend |
| 56 | */ |
| 57 | PlotDataDialog::PlotDataDialog(AbstractAspect* parentAspect, Plot::PlotType type, QWidget* parent) |
| 58 | : QDialog(parent) |
| 59 | , ui(new Ui::PlotDataWidget()) |
| 60 | , m_parentAspect(parentAspect) |
| 61 | , m_plotsModel(new AspectTreeModel(m_parentAspect->project())) |
| 62 | , m_worksheetsModel(new AspectTreeModel(m_parentAspect->project())) |
| 63 | , m_plotType(type) { |
| 64 | setAttribute(Qt::WA_DeleteOnClose); |
| 65 | setWindowTitle(i18nc("@title:window", "Plot Spreadsheet Data")); |
| 66 | setWindowIcon(QIcon::fromTheme(QStringLiteral("office-chart-line"))); |
| 67 | |
| 68 | m_basicPlotType = (m_plotType == Plot::PlotType::Line || m_plotType == Plot::PlotType::LineHorizontalStep || m_plotType == Plot::PlotType::LineVerticalStep |
| 69 | || m_plotType == Plot::PlotType::LineSpline || m_plotType == Plot::PlotType::Scatter || m_plotType == Plot::PlotType::ScatterYError |
| 70 | || m_plotType == Plot::PlotType::ScatterXYError || m_plotType == Plot::PlotType::LineSymbol || m_plotType == Plot::PlotType::LineSymbol2PointSegment |
| 71 | || m_plotType == Plot::PlotType::LineSymbol3PointSegment); |
| 72 | |
| 73 | auto* mainWidget = new QWidget(this); |
| 74 | ui->setupUi(mainWidget); |
| 75 | |
| 76 | auto* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); |
| 77 | m_okButton = buttonBox->button(QDialogButtonBox::Ok); |
| 78 | m_okButton->setDefault(true); |
| 79 | m_okButton->setToolTip(i18n("Plot the selected data")); |
| 80 | m_okButton->setText(i18n("&Plot")); |
| 81 | |
| 82 | auto* layout = new QVBoxLayout(this); |
| 83 | layout->addWidget(mainWidget); |
| 84 | layout->addWidget(buttonBox); |
| 85 | setLayout(layout); |
| 86 | |
| 87 | // create combox boxes for the existing plots and worksheets |
| 88 | auto* gridLayout = dynamic_cast<QGridLayout*>(ui->gbPlotPlacement->layout()); |
| 89 | cbExistingPlots = new TreeViewComboBox(ui->gbPlotPlacement); |
| 90 | cbExistingPlots->setMinimumWidth(250); // TODO: use proper sizeHint in TreeViewComboBox |
| 91 | gridLayout->addWidget(cbExistingPlots, 0, 1, 1, 1); |
| 92 | |
| 93 | cbExistingWorksheets = new TreeViewComboBox(ui->gbPlotPlacement); |
| 94 | cbExistingWorksheets->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred)); |
| 95 | gridLayout->addWidget(cbExistingWorksheets, 1, 1, 1, 1); |
| 96 | |
| 97 | cbExistingPlots->setTopLevelClasses({AspectType::Folder, AspectType::Worksheet, AspectType::CartesianPlot}); |
| 98 | m_plotsModel->setSelectableAspects({AspectType::CartesianPlot}); |
| 99 | cbExistingPlots->setModel(m_plotsModel); |
| 100 | |
| 101 | // select the first available plot, if available |
| 102 | auto plots = m_parentAspect->project()->children<CartesianPlot>(AbstractAspect::ChildIndexFlag::Recursive); |
| 103 | if (!plots.isEmpty()) { |
| 104 | const auto* plot = plots.first(); |
| 105 | cbExistingPlots->setCurrentModelIndex(m_plotsModel->modelIndexOfAspect(plot)); |
| 106 | } |
| 107 | |
| 108 | cbExistingWorksheets->setTopLevelClasses({AspectType::Folder, AspectType::Worksheet}); |
| 109 | m_worksheetsModel->setSelectableAspects({AspectType::Worksheet}); |
| 110 | cbExistingWorksheets->setModel(m_worksheetsModel); |
| 111 | |
| 112 | // select the first available worksheet, if available |
| 113 | auto worksheets = m_parentAspect->project()->children<Worksheet>(AbstractAspect::ChildIndexFlag::Recursive); |
| 114 | if (!worksheets.isEmpty()) { |
nothing calls this directly
no test coverage detected