• 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.12
  • 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;
91 
96  virtual QString commandSeparator();
101  virtual QString commentStartingSequence();
106  virtual QString commentEndingSequence();
107 };
108 
114 class CANTOR_EXPORT CASExtension : public Extension
115 {
116  public:
117  CASExtension(QObject* parent);
118  ~CASExtension();
119 
120  public slots:
127  virtual QString solve(const QStringList& equations, const QStringList& variables) = 0;
133  virtual QString simplify(const QString& expression) = 0;
139  virtual QString expand(const QString& expression) = 0;
140 };
141 
146 class CANTOR_EXPORT CalculusExtension : public Extension
147 {
148  public:
149  CalculusExtension(QObject* parent);
150  ~CalculusExtension();
151 
152  public slots:
160  virtual QString limit(const QString& expression, const QString& variable, const QString& limit) = 0;
168  virtual QString differentiate(const QString& function,const QString& variable, int times) = 0;
175  virtual QString integrate(const QString& function, const QString& variable) = 0;
184  virtual QString integrate(const QString& function,const QString& variable, const QString& left, const QString& right) = 0;
185 };
186 
190 class CANTOR_EXPORT PlotExtension : public Extension
191 {
192  public:
193  typedef QPair<QString,QString> Interval;
194  typedef QPair<QString, Interval> VariableParameter;
195 
196  PlotExtension(QObject* parent);
197  ~PlotExtension();
198 
199  public slots:
208  virtual QString plotFunction2d(const QString& function, const QString& variable, const QString& left, const QString& right) = 0;
216  virtual QString plotFunction3d(const QString& function, VariableParameter var1, VariableParameter var2) = 0;
217 };
218 
219 #define PLOT_DIRECTIVE_DISPATCHING(x) QString dispatch(const Cantor::AdvancedPlotExtension::AcceptorBase& acc) const \
220  { \
221  const Cantor::AdvancedPlotExtension::DirectiveAcceptor<x>* adaptor= \
222  dynamic_cast<const Cantor::AdvancedPlotExtension::DirectiveAcceptor<x>*>(&acc); \
223  if (adaptor==NULL) { kDebug()<<"Backend incapable of processing directives of type "#x; return ""; } \
224  else \
225  return adaptor->accept(*this); \
226  }
227 
231 class CANTOR_EXPORT AdvancedPlotExtension : public Extension
232 {
233  public:
234  AdvancedPlotExtension(QObject* parent);
235  ~AdvancedPlotExtension();
236 
237  // TODO comment
238 
239  class PlotDirective;
240 
241  // TODO move the hell out of here
242  class CANTOR_EXPORT DirectiveProducer : public QWidget
243  {
244  public:
245  DirectiveProducer(QWidget* parent);
246  virtual PlotDirective* produceDirective() const=0;
247  };
248 
249  template <class UI> class DirectiveControl : protected UI, public DirectiveProducer
250  {
251  public:
252  DirectiveControl(QWidget* parent) : DirectiveProducer(parent) { UI::setupUi(this); }
253  protected:
254  typedef DirectiveControl<UI> AbstractParent;
255  };
256 
257  class CANTOR_EXPORT AcceptorBase
258  {
259  public:
263  typedef DirectiveProducer * (*widgetProc)(QWidget*);
264 
270  const QVector<widgetProc>& widgets() const;
271 
272  protected:
276  AcceptorBase();
277  virtual ~AcceptorBase();
278 
279  QVector<widgetProc> m_widgets;
280  };
281 
282  template <class Directive> class DirectiveAcceptor : virtual public AcceptorBase
283  {
284 
285  public:
291  virtual QString accept(const Directive& directive) const=0;
292 
293  protected:
297  DirectiveAcceptor();
298  };
299 
300  class CANTOR_EXPORT PlotDirective
301  {
302  public:
303  virtual ~PlotDirective();
304 
310  static QWidget* widget(QWidget* parent);
311 
316  virtual PLOT_DIRECTIVE_DISPATCHING(PlotDirective);
317  // TODO: find a workaround not to put class names manually
318 
319  protected:
323  PlotDirective();
324  };
325 
326  public slots:
333  QString plotFunction2d(const QString& expression, const QVector<PlotDirective*> directives) const;
334 
340  QString dispatchDirective(const PlotDirective& directive) const;
341 
342  protected:
347  virtual QString plotCommand() const=0;
352  virtual QString separatorSymbol() const;
353 };
354 
355 template <class Directive> AdvancedPlotExtension::DirectiveAcceptor<Directive>::DirectiveAcceptor()
356 {
357  m_widgets.push_back(&Directive::widget);
358 }
359 
363 class CANTOR_EXPORT LinearAlgebraExtension : public Extension
364 {
365  public:
366  enum VectorType { ColumnVector, RowVector };
367  typedef QList<QStringList> Matrix;
368 
369  LinearAlgebraExtension(QObject* parent);
370  ~LinearAlgebraExtension();
371 
372  public slots:
373  //Commands to create Vectors/Matrices
380  virtual QString createVector(const QStringList& entries, VectorType type) = 0;
387  virtual QString nullVector(int size, VectorType type);
393  virtual QString createMatrix(const Matrix& matrix) = 0;
399  virtual QString identityMatrix(int size);
406  virtual QString nullMatrix(int rows,int columns);
407 
408  //basic functions
414  virtual QString rank(const QString& matrix) = 0;
420  virtual QString invertMatrix(const QString& matrix) = 0;
426  virtual QString charPoly(const QString& matrix) = 0;
432  virtual QString eigenVectors(const QString& matrix) = 0;
438  virtual QString eigenValues(const QString& matrix) = 0;
439 
440 };
441 
442 class CANTOR_EXPORT VariableManagementExtension : public Extension
443 {
444  public:
445  VariableManagementExtension( QObject* parent );
446  ~VariableManagementExtension();
447 
448  public slots:
449  virtual QString addVariable(const QString& name, const QString& value) = 0;
450  virtual QString setValue(const QString& name,const QString& value) = 0;
451  virtual QString removeVariable(const QString& name) = 0;
452 
453  virtual QString saveVariables(const QString& fileName) = 0;
454  virtual QString loadVariables(const QString& fileName) = 0;
455  virtual QString clearVariables() = 0;
456 };
457 
461 class CANTOR_EXPORT PackagingExtension : public Extension
462 {
463  public:
464  PackagingExtension(QObject* parent);
465  ~PackagingExtension();
466 
467  public slots:
473  virtual QString importPackage(const QString& package) = 0;
474 };
475 
476 }
477 #endif /* _EXTENSION_H */
CANTOR_EXPORT
#define CANTOR_EXPORT
Definition: cantor_export.h:33
Cantor::AdvancedPlotExtension::DirectiveAcceptor
Definition: extension.h:282
Cantor::AdvancedPlotExtension
An extension providing advanced plotting facilities.
Definition: extension.h:231
QWidget
Cantor::PackagingExtension
An extension for library/module import.
Definition: extension.h:461
QObject
Cantor::CASExtension
An extension providing the basic computations in computer algebra, like solving, simplifying etc...
Definition: extension.h:114
Cantor::PlotExtension::Interval
QPair< QString, QString > Interval
Definition: extension.h:193
Cantor::AdvancedPlotExtension::DirectiveControl::AbstractParent
DirectiveControl< UI > AbstractParent
Definition: extension.h:254
Cantor::AdvancedPlotExtension::PlotDirective
Definition: extension.h:300
Cantor::AdvancedPlotExtension::DirectiveControl
Definition: extension.h:249
Cantor::AdvancedPlotExtension::AcceptorBase
Definition: extension.h:257
Cantor::LinearAlgebraExtension::Matrix
QList< QStringList > Matrix
Definition: extension.h:367
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:194
Cantor::HistoryExtension
An Extension providing commands for command history.
Definition: extension.h:57
PLOT_DIRECTIVE_DISPATCHING
#define PLOT_DIRECTIVE_DISPATCHING(x)
Definition: extension.h:219
UI
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:146
Cantor::PlotExtension
An extension providing basic plotting facilities.
Definition: extension.h:190
Cantor::LinearAlgebraExtension
An extension for basic Linear Algebra.
Definition: extension.h:363
Cantor::AdvancedPlotExtension::DirectiveProducer
Definition: extension.h:242
Cantor::AdvancedPlotExtension::DirectiveControl::DirectiveControl
DirectiveControl(QWidget *parent)
Definition: extension.h:252
Cantor::VariableManagementExtension
Definition: extension.h:442
cantor_export.h
Cantor::AdvancedPlotExtension::DirectiveAcceptor::DirectiveAcceptor
DirectiveAcceptor()
constructor only allowed for derived classes
Definition: extension.h:355
Cantor::LinearAlgebraExtension::VectorType
VectorType
Definition: extension.h:366
Cantor::AdvancedPlotExtension::AcceptorBase::m_widgets
QVector< widgetProc > m_widgets
Definition: extension.h:279
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:42:50 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
  • kstars
  • libkdeedu
  •   keduvocdocument
  • 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