Warning, file /education/cantor/src/lib/extension.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2009 Alexander Rieder <alexanderrieder@gmail.com> 0004 */ 0005 0006 #include "extension.h" 0007 using namespace Cantor; 0008 0009 #include <QStringList> 0010 0011 #define EXTENSION_CONSTRUCTORS(name) name::name(QObject* parent) : Extension(QLatin1String(#name),parent) {} \ 0012 name::~name() {} 0013 0014 0015 Extension::Extension(const QString& name, QObject* parent) : QObject(parent) 0016 { 0017 setObjectName(name); 0018 } 0019 0020 EXTENSION_CONSTRUCTORS(HistoryExtension) 0021 EXTENSION_CONSTRUCTORS(ScriptExtension) 0022 EXTENSION_CONSTRUCTORS(CASExtension) 0023 EXTENSION_CONSTRUCTORS(CalculusExtension) 0024 EXTENSION_CONSTRUCTORS(PlotExtension) 0025 EXTENSION_CONSTRUCTORS(AdvancedPlotExtension) 0026 EXTENSION_CONSTRUCTORS(LinearAlgebraExtension) 0027 EXTENSION_CONSTRUCTORS(VariableManagementExtension) 0028 EXTENSION_CONSTRUCTORS(PackagingExtension) 0029 0030 //implement this here, as it's ";" most of the time 0031 QString ScriptExtension::commandSeparator() 0032 { 0033 return QStringLiteral(";\n"); 0034 } 0035 0036 //implement this here, as it's "#" most of the time 0037 QString ScriptExtension::commentStartingSequence() 0038 { 0039 return QStringLiteral("#"); 0040 } 0041 0042 //implement this here, as it's "" most of the time 0043 QString ScriptExtension::commentEndingSequence() 0044 { 0045 return QLatin1String(""); 0046 } 0047 0048 0049 //some convenience functions, but normally backends have a special command to create 0050 //these matrices/vectors. 0051 0052 QString LinearAlgebraExtension::nullVector(int size, VectorType type) 0053 { 0054 QStringList values; 0055 for (int i=0;i<size;i++) 0056 values<<QStringLiteral("0"); 0057 return createVector(values, type); 0058 } 0059 0060 QString LinearAlgebraExtension::identityMatrix(int size) 0061 { 0062 Matrix m; 0063 for(int i=0;i<size;i++) 0064 { 0065 QStringList column; 0066 for(int j=0;j<size;j++) 0067 column<<((i==j) ? QStringLiteral("1"): QStringLiteral("0")); 0068 0069 m<<column; 0070 } 0071 0072 return createMatrix(m); 0073 } 0074 0075 QString LinearAlgebraExtension::nullMatrix(int rows, int columns) 0076 { 0077 Matrix m; 0078 for(int i=0;i<rows;i++) 0079 { 0080 QStringList column; 0081 for(int j=0;j<columns;j++) 0082 column<<QStringLiteral("0"); 0083 0084 m<<column; 0085 } 0086 0087 return createMatrix(m); 0088 } 0089 0090 QString AdvancedPlotExtension::plotFunction2d(const QString& expression, const QVector<PlotDirective*>& directives) const 0091 { 0092 QString params = QLatin1String(""); 0093 foreach (PlotDirective* dir, directives) 0094 { 0095 QString param=dispatchDirective(*dir); 0096 if (param.length()>0) 0097 params+=separatorSymbol()+param; 0098 } 0099 return plotCommand() + QLatin1String("(") + expression + params + QLatin1String(")"); 0100 } 0101 0102 QString AdvancedPlotExtension::dispatchDirective(const PlotDirective& directive) const 0103 { 0104 const AcceptorBase* acceptor=dynamic_cast<const AcceptorBase*>(this); 0105 if (acceptor==nullptr) 0106 { 0107 qDebug()<<"Plotting extension does not support any directives, but was asked to process one"; 0108 return QLatin1String(""); 0109 } 0110 return directive.dispatch(*acceptor); 0111 } 0112 0113 QString AdvancedPlotExtension::separatorSymbol() const 0114 { 0115 return QStringLiteral(","); 0116 } 0117 0118 QWidget* AdvancedPlotExtension::PlotDirective::widget(QWidget* parent) 0119 { 0120 return new QWidget(parent); 0121 } 0122 0123 AdvancedPlotExtension::AcceptorBase::AcceptorBase() : m_widgets() 0124 { 0125 } 0126 0127 const QVector<AdvancedPlotExtension::AcceptorBase::widgetProc>& AdvancedPlotExtension::AcceptorBase::widgets() const 0128 { 0129 return m_widgets; 0130 } 0131 0132 AdvancedPlotExtension::DirectiveProducer::DirectiveProducer(QWidget* parent) : QWidget(parent) 0133 { 0134 }