• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdeedu API Reference
  • KDE Home
  • Contact Us
 

cantor/src/lib

  • sources
  • kde-4.14
  • kdeedu
  • cantor
  • src
  • lib
extension.h
Go to the documentation of this file.
1 /*
2  This program is free software; you can redistribute it and/or
3  modify it under the terms of the GNU General Public License
4  as published by the Free Software Foundation; either version 2
5  of the License, or (at your option) any later version.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  GNU General Public License for more details.
11 
12  You should have received a copy of the GNU General Public License
13  along with this program; if not, write to the Free Software
14  Foundation, Inc., 51 Franklin Street, Fifth Floor,
15  Boston, MA 02110-1301, USA.
16 
17  ---
18  Copyright (C) 2009 Alexander Rieder <alexanderrieder@gmail.com>
19  */
20 
21 #ifndef _EXTENSION_H
22 #define _EXTENSION_H
23 
24 #include <QObject>
25 #include <QPair>
26 #include <QVector>
27 #include <kdebug.h>
28 #include <QWidget>
29 #include "cantor_export.h"
30 
31 namespace Cantor
32 {
43 class CANTOR_EXPORT Extension : public QObject
44 {
45  public:
47  Extension( const QString& name, QObject* parent );
48  ~Extension();
49 
50 };
51 
52 //Some basic interfaces for extensions
53 
57 class CANTOR_EXPORT HistoryExtension : public Extension
58 {
59  public:
60  HistoryExtension(QObject* parent);
61  ~HistoryExtension();
62  public slots:
67  virtual QString lastResult() = 0;
68 };
69 
74 class CANTOR_EXPORT ScriptExtension : public Extension
75 {
76  public:
77  ScriptExtension(QObject* parent);
78  ~ScriptExtension();
79  public slots:
85  virtual QString runExternalScript(const QString& path) = 0;
90  virtual QString scriptFileFilter() = 0;
97  virtual QString highlightingMode() = 0;
102  virtual QString commandSeparator();
107  virtual QString commentStartingSequence();
112  virtual QString commentEndingSequence();
113 };
114 
120 class CANTOR_EXPORT CASExtension : public Extension
121 {
122  public:
123  CASExtension(QObject* parent);
124  ~CASExtension();
125 
126  public slots:
133  virtual QString solve(const QStringList& equations, const QStringList& variables) = 0;
139  virtual QString simplify(const QString& expression) = 0;
145  virtual QString expand(const QString& expression) = 0;
146 };
147 
152 class CANTOR_EXPORT CalculusExtension : public Extension
153 {
154  public:
155  CalculusExtension(QObject* parent);
156  ~CalculusExtension();
157 
158  public slots:
166  virtual QString limit(const QString& expression, const QString& variable, const QString& limit) = 0;
174  virtual QString differentiate(const QString& function,const QString& variable, int times) = 0;
181  virtual QString integrate(const QString& function, const QString& variable) = 0;
190  virtual QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) = 0;
191 };
192 
196 class CANTOR_EXPORT PlotExtension : public Extension
197 {
198  public:
199  typedef QPair<QString,QString> Interval;
200  typedef QPair<QString, Interval> VariableParameter;
201 
202  PlotExtension(QObject* parent);
203  ~PlotExtension();
204 
205  public slots:
214  virtual QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) = 0;
222  virtual QString plotFunction3d(const QString& function, VariableParameter var1, VariableParameter var2) = 0;
223 };
224 
225 #define PLOT_DIRECTIVE_DISPATCHING(x) QString dispatch(const Cantor::AdvancedPlotExtension::AcceptorBase& acc) const \
226  { \
227  const Cantor::AdvancedPlotExtension::DirectiveAcceptor<x>* adaptor= \
228  dynamic_cast<const Cantor::AdvancedPlotExtension::DirectiveAcceptor<x>*>(&acc); \
229  if (adaptor==NULL) { kDebug()<<"Backend incapable of processing directives of type "#x; return ""; } \
230  else \
231  return adaptor->accept(*this); \
232  }
233 
237 class CANTOR_EXPORT AdvancedPlotExtension : public Extension
238 {
239  public:
240  AdvancedPlotExtension(QObject* parent);
241  ~AdvancedPlotExtension();
242 
243  // TODO comment
244 
245  class PlotDirective;
246 
247  // TODO move the hell out of here
248  class CANTOR_EXPORT DirectiveProducer : public QWidget
249  {
250  public:
251  DirectiveProducer(QWidget* parent);
252  virtual PlotDirective* produceDirective() const=0;
253  };
254 
255  template <class UI> class DirectiveControl : protected UI, public DirectiveProducer
256  {
257  public:
258  DirectiveControl(QWidget* parent) : DirectiveProducer(parent) { UI::setupUi(this); }
259  protected:
260  typedef DirectiveControl<UI> AbstractParent;
261  };
262 
263  class CANTOR_EXPORT AcceptorBase
264  {
265  public:
269  typedef DirectiveProducer * (*widgetProc)(QWidget*);
270 
276  const QVector<widgetProc>& widgets() const;
277 
278  protected:
282  AcceptorBase();
283  virtual ~AcceptorBase();
284 
285  QVector<widgetProc> m_widgets;
286  };
287 
288  template <class Directive> class DirectiveAcceptor : virtual public AcceptorBase
289  {
290 
291  public:
297  virtual QString accept(const Directive& directive) const=0;
298 
299  protected:
303  DirectiveAcceptor();
304  };
305 
306  class CANTOR_EXPORT PlotDirective
307  {
308  public:
309  virtual ~PlotDirective();
310 
316  static QWidget* widget(QWidget* parent);
317 
322  virtual PLOT_DIRECTIVE_DISPATCHING(PlotDirective);
323  // TODO: find a workaround not to put class names manually
324 
325  protected:
329  PlotDirective();
330  };
331 
332  public slots:
339  QString plotFunction2d(const QString& expression, const QVector<PlotDirective*> directives) const;
340 
346  QString dispatchDirective(const PlotDirective& directive) const;
347 
348  protected:
353  virtual QString plotCommand() const=0;
358  virtual QString separatorSymbol() const;
359 };
360 
361 template <class Directive> AdvancedPlotExtension::DirectiveAcceptor<Directive>::DirectiveAcceptor()
362 {
363  m_widgets.push_back(&Directive::widget);
364 }
365 
369 class CANTOR_EXPORT LinearAlgebraExtension : public Extension
370 {
371  public:
372  enum VectorType { ColumnVector, RowVector };
373  typedef QList<QStringList> Matrix;
374 
375  LinearAlgebraExtension(QObject* parent);
376  ~LinearAlgebraExtension();
377 
378  public slots:
379  //Commands to create Vectors/Matrices
386  virtual QString createVector(const QStringList& entries, VectorType type) = 0;
393  virtual QString nullVector(int size, VectorType type);
399  virtual QString createMatrix(const Matrix& matrix) = 0;
405  virtual QString identityMatrix(int size);
412  virtual QString nullMatrix(int rows,int columns);
413 
414  //basic functions
420  virtual QString rank(const QString& matrix) = 0;
426  virtual QString invertMatrix(const QString& matrix) = 0;
432  virtual QString charPoly(const QString& matrix) = 0;
438  virtual QString eigenVectors(const QString& matrix) = 0;
444  virtual QString eigenValues(const QString& matrix) = 0;
445 
446 };
447 
448 class CANTOR_EXPORT VariableManagementExtension : public Extension
449 {
450  public:
451  VariableManagementExtension( QObject* parent );
452  ~VariableManagementExtension();
453 
454  public slots:
455  virtual QString addVariable(const QString& name, const QString& value) = 0;
456  virtual QString setValue(const QString& name,const QString& value) = 0;
457  virtual QString removeVariable(const QString& name) = 0;
458 
459  virtual QString saveVariables(const QString& fileName) = 0;
460  virtual QString loadVariables(const QString& fileName) = 0;
461  virtual QString clearVariables() = 0;
462 };
463 
467 class CANTOR_EXPORT PackagingExtension : public Extension
468 {
469  public:
470  PackagingExtension(QObject* parent);
471  ~PackagingExtension();
472 
473  public slots:
479  virtual QString importPackage(const QString& package) = 0;
480 };
481 
482 }
483 #endif /* _EXTENSION_H */
QWidget
CANTOR_EXPORT
#define CANTOR_EXPORT
Definition: cantor_export.h:33
Cantor::AdvancedPlotExtension::DirectiveAcceptor
Definition: extension.h:288
Cantor::AdvancedPlotExtension
An extension providing advanced plotting facilities.
Definition: extension.h:237
Cantor::PackagingExtension
An extension for library/module import.
Definition: extension.h:467
Cantor::CASExtension
An extension providing the basic computations in computer algebra, like solving, simplifying etc...
Definition: extension.h:120
Cantor::PlotExtension::Interval
QPair< QString, QString > Interval
Definition: extension.h:199
Cantor::AdvancedPlotExtension::DirectiveControl::AbstractParent
DirectiveControl< UI > AbstractParent
Definition: extension.h:260
Cantor::AdvancedPlotExtension::PlotDirective
Definition: extension.h:306
Cantor::AdvancedPlotExtension::DirectiveControl
Definition: extension.h:255
QObject
Cantor::AdvancedPlotExtension::AcceptorBase
Definition: extension.h:263
QString
QList
Cantor::LinearAlgebraExtension::Matrix
QList< QStringList > Matrix
Definition: extension.h:373
QStringList
QPair
Cantor::ScriptExtension
An Extension providing commands to interact with external scripts.
Definition: extension.h:74
Cantor::PlotExtension::VariableParameter
QPair< QString, Interval > VariableParameter
Definition: extension.h:200
Cantor::HistoryExtension
An Extension providing commands for command history.
Definition: extension.h:57
PLOT_DIRECTIVE_DISPATCHING
#define PLOT_DIRECTIVE_DISPATCHING(x)
Definition: extension.h:225
UI
QVector< widgetProc >
Cantor::Extension
This is the base class for all Extensions.
Definition: extension.h:43
Cantor::CalculusExtension
An extension providing the basic calculus stuff like limits, diffrentiate, integrate etc...
Definition: extension.h:152
Cantor::PlotExtension
An extension providing basic plotting facilities.
Definition: extension.h:196
Cantor::LinearAlgebraExtension
An extension for basic Linear Algebra.
Definition: extension.h:369
Cantor::AdvancedPlotExtension::DirectiveProducer
Definition: extension.h:248
Cantor::AdvancedPlotExtension::DirectiveControl::DirectiveControl
DirectiveControl(QWidget *parent)
Definition: extension.h:258
Cantor::VariableManagementExtension
Definition: extension.h:448
cantor_export.h
Cantor::AdvancedPlotExtension::DirectiveAcceptor::DirectiveAcceptor
DirectiveAcceptor()
constructor only allowed for derived classes
Definition: extension.h:361
Cantor::LinearAlgebraExtension::VectorType
VectorType
Definition: extension.h:372
Cantor::AdvancedPlotExtension::AcceptorBase::m_widgets
QVector< widgetProc > m_widgets
Definition: extension.h:285
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:16:33 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

cantor/src/lib

Skip menu "cantor/src/lib"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdeedu API Reference

Skip menu "kdeedu API Reference"
  • Analitza
  •     lib
  • kalgebra
  • kalzium
  •   libscience
  • kanagram
  • kig
  •   lib
  • klettres
  • marble
  • parley
  • rocs
  •   App
  •   RocsCore
  •   VisualEditor
  •   stepcore

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal