File indexing completed on 2024-05-12 11:32:21
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2009 Alexander Rieder <alexanderrieder@gmail.com> 0004 */ 0005 0006 #include "advancedplotassistant.h" 0007 0008 #include <QAction> 0009 #include <QDialog> 0010 #include <QPushButton> 0011 #include <QStyle> 0012 #include <QVBoxLayout> 0013 0014 #include <KActionCollection> 0015 #include <KConfigGroup> 0016 #include "ui_advancedplotdialog.h" 0017 #include "ui_directivecontainer.h" 0018 #include "cantor_macros.h" 0019 #include "backend.h" 0020 #include "extension.h" 0021 0022 AdvancedPlotAssistant::AdvancedPlotAssistant(QObject* parent, QList<QVariant> args) : Assistant(parent) 0023 { 0024 Q_UNUSED(args) 0025 } 0026 0027 void AdvancedPlotAssistant::initActions() 0028 { 0029 setXMLFile(QLatin1String("cantor_advancedplot_assistant.rc")); 0030 QAction* advplot=new QAction(i18n("Advanced Plotting"), actionCollection()); 0031 actionCollection()->addAction(QLatin1String("advancedplot_assistant"), advplot); 0032 connect(advplot, &QAction::triggered, this, &AdvancedPlotAssistant::requested); 0033 } 0034 0035 QStringList AdvancedPlotAssistant::run(QWidget* parent) 0036 { 0037 QPointer<QDialog> dlg=new QDialog(parent); 0038 QWidget *widget=new QWidget(dlg); 0039 Ui::AdvancedPlotAssistantBase base; 0040 base.setupUi(widget); 0041 QVBoxLayout *mainLayout = new QVBoxLayout; 0042 dlg->setLayout(mainLayout); 0043 mainLayout->addWidget(widget); 0044 0045 base.buttonBox->button(QDialogButtonBox::Ok)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogOkButton)); 0046 base.buttonBox->button(QDialogButtonBox::Cancel)->setIcon(QApplication::style()->standardIcon(QStyle::SP_DialogCancelButton)); 0047 connect(base.buttonBox, SIGNAL(accepted()), dlg, SLOT(accept())); 0048 connect(base.buttonBox, SIGNAL(rejected()), dlg, SLOT(reject())); 0049 0050 //Casting the extension to correct type and checking it 0051 Cantor::AdvancedPlotExtension * plotter=dynamic_cast<Cantor::AdvancedPlotExtension*> 0052 (backend()->extension(QLatin1String("AdvancedPlotExtension"))); 0053 if (plotter==nullptr) 0054 { 0055 qDebug()<<"Advanced plotting extension is messed up, that's a bug."; 0056 delete dlg; 0057 return QStringList(); 0058 } 0059 0060 //Filling up the form accordingly 0061 Cantor::AdvancedPlotExtension::AcceptorBase *acceptor=dynamic_cast<Cantor::AdvancedPlotExtension::AcceptorBase*>(plotter); 0062 QVector<Cantor::AdvancedPlotExtension::DirectiveProducer *> controls; 0063 if (acceptor!=nullptr) 0064 { 0065 foreach (const Cantor::AdvancedPlotExtension::AcceptorBase::widgetProc& wProc, acceptor->widgets()) 0066 { 0067 QGroupBox *container=new QGroupBox(nullptr); 0068 Cantor::AdvancedPlotExtension::DirectiveProducer *cargo=wProc(nullptr); 0069 Ui::directiveContainer uicont; 0070 uicont.setupUi(container); 0071 QVBoxLayout *layout=new QVBoxLayout; 0072 layout->addWidget(cargo); 0073 container->setLayout(layout); 0074 base.directivesTabs->addTab(container,cargo->windowTitle()); 0075 controls.push_back(cargo); 0076 } 0077 } 0078 0079 QStringList result; 0080 if( dlg->exec()) 0081 { 0082 QVector<Cantor::AdvancedPlotExtension::PlotDirective*> list; 0083 //FIXME lots of dynamic casts :( 0084 for (int i=0;i<base.directivesTabs->count();i++) 0085 { 0086 QGroupBox *group=dynamic_cast<QGroupBox*>(base.directivesTabs->widget(i)); 0087 if (group!=nullptr) 0088 if (group->isChecked()) 0089 list.push_back(controls[i]->produceDirective()); 0090 } 0091 result<<plotter->plotFunction2d(base.expressionEdit->text(),list); 0092 qDeleteAll(list); 0093 } 0094 0095 delete dlg; 0096 return result; 0097 } 0098 0099 K_PLUGIN_FACTORY_WITH_JSON(advancedplotassistant, "advancedplotassistant.json", registerPlugin<AdvancedPlotAssistant>();) 0100 #include "advancedplotassistant.moc"