[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdeedu/kalgebra
From:       Aleix Pol Gonzalez <aleixpol () gmail ! com>
Date:       2010-05-24 21:12:20
Message-ID: 20100524211220.C3FD5AC8BF () svn ! kde ! org
[Download RAW message or body]

SVN commit 1130259 by apol:

Make the FunctionImpl definition to decide what examples it is exposing.


 M  +2 -0      analitzagui/algebrahighlighter.cpp  
 M  +5 -10     analitzagui/functioncartesian.cpp  
 M  +7 -1      analitzagui/functionfactory.cpp  
 M  +6 -3      analitzagui/functionfactory.h  
 M  +1 -1      analitzagui/functionimpl.h  
 M  +1 -0      analitzagui/functionimplicit.cpp  
 M  +1 -0      analitzagui/functionparametric.cpp  
 M  +1 -0      analitzagui/functionpolar.cpp  
 M  +1 -1      src/functionedit.cpp  


--- trunk/KDE/kdeedu/kalgebra/analitzagui/algebrahighlighter.cpp #1130258:1130259
@@ -189,6 +189,8 @@
 						parameter.top().pos=lex.current.pos;
 					}
 					
+					
+					
 					if(m_pos>lex.current.pos && !parameter.isEmpty()
 							&& lex.current.type==ExpressionTable::tColon) {
 						parameter.top().bounding=true;
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functioncartesian.cpp #1130258:1130259
@@ -39,13 +39,13 @@
 ///Functions where the x is bounding. like x->sin(x)
 struct FunctionY : public FunctionImpl
 {
-	explicit FunctionY(const Expression &e, Variables* v) : FunctionImpl(e, v ,0,0), \
vx(new Cn) +	explicit FunctionY(const Expression &e, Variables* v, const QString& \
bvar="x") : FunctionImpl(e, v ,0,0), vx(new Cn)  {
 		Analitza::Ci* vi=func.refExpression()->parameters().first();
 		vi->value()=vx;
 		
 		if(func.isCorrect()) {
-			Expression deriv = func.derivative("x");
+			Expression deriv = func.derivative(bvar);
 			if(func.isCorrect())
 				m_deriv = new Expression(deriv);
 			func.flushErrors();
@@ -56,14 +56,7 @@
 	{
 		Analitza::Ci* vi=func.refExpression()->parameters().first();
 		vi->value()=vx;
-		
-		if(func.isCorrect()) {
-			Expression deriv = func.derivative("y");
-			if(func.isCorrect())
-				m_deriv = new Expression(deriv);
-			func.flushErrors();
 		}
-	}
 	virtual ~FunctionY() { delete vx; }
 	
 	void updatePoints(const QRect& viewport);
@@ -75,6 +68,7 @@
 	
 	QStringList boundings() const { return supportedBVars(); }
 	void calculateValues(double, double);
+	static QStringList examples() { return QStringList("x->x**sin x"); }
 	
 	Analitza::Cn* vx;
 };
@@ -82,7 +76,7 @@
 ///Functions where the y is bounding. like y->sin(y). FunctionY mirrored
 struct FunctionX : public FunctionY
 {
-	explicit FunctionX(const Expression &e, Variables* v) : FunctionY(e, v) {}
+	explicit FunctionX(const Expression &e, Variables* v) : FunctionY(e, v, "y") {}
 	FunctionX(const FunctionX &fx) : FunctionY(fx) {}
 	
 	void updatePoints(const QRect& viewport);
@@ -93,6 +87,7 @@
 	static QStringList supportedBVars() { return QStringList("y"); }
 	static ExpressionType expectedType() { return FunctionY::expectedType(); }
 	QStringList boundings() const { return supportedBVars(); }
+	static QStringList examples() { return QStringList("y->sin y"); }
 };
 
 REGISTER_FUNCTION(FunctionY)
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionfactory.cpp #1130258:1130259
@@ -39,15 +39,21 @@
 	return m_types[bvars.join("|")]();
 }
 
-bool FunctionFactory::registerFunction(const Id& bvars, registerFunc_fn f, \
expectedType_fn ft) +bool FunctionFactory::registerFunction(const Id& bvars, \
registerFunc_fn f, expectedType_fn ft, const QStringList& examples)  {
 	Q_ASSERT(!contains(bvars));
 	m_items[bvars.join("|")]=f;
 	m_types[bvars.join("|")]=ft;
+	m_examples.append(examples);
 	
 	return true;
 }
 
+QStringList FunctionFactory::examples() const
+{
+	return m_examples;
+}
+
 FunctionFactory* FunctionFactory::self()
 {
 	if(!m_self)
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionfactory.h #1130258:1130259
@@ -21,10 +21,11 @@
 
 #define REGISTER_FUNCTION(name) \
         static FunctionImpl* create##name(const Expression &exp, Variables* v) { \
                return new name (exp, v); } \
-        namespace { bool \
_##name=FunctionFactory::self()->registerFunction(name::supportedBVars(), \
create##name, name ::expectedType); } +        namespace { bool \
_##name=FunctionFactory::self()->registerFunction(name::supportedBVars(), \
create##name, name ::expectedType, name ::examples()); }  
 #include <QMap>
 #include <QStringList>
+#include "analitzaguiexport.h"
 
 struct FunctionImpl;
 class QStringList;
@@ -36,7 +37,7 @@
 class Variables;
 }
 
-class FunctionFactory
+class ANALITZAGUI_EXPORT FunctionFactory
 {
 	public:
 		typedef FunctionImpl* (*registerFunc_fn)(const Analitza::Expression&, \
Analitza::Variables* ); @@ -45,13 +46,15 @@
 		FunctionImpl* item(const Id& bvars, const Analitza::Expression& exp, \
Analitza::Variables* v) const;  Analitza::ExpressionType type(const Id& bvars);
 		static FunctionFactory* self();
-		bool registerFunction(const Id& bvars, registerFunc_fn f, expectedType_fn ft);
+		bool registerFunction(const Id& bvars, registerFunc_fn f, expectedType_fn ft, \
const QStringList& examples);  bool contains(const Id& bvars) const;
+		QStringList examples() const;
 	private:
 		static FunctionFactory* m_self;
 		FunctionFactory() { Q_ASSERT(!m_self); m_self=this; }
 		QMap<QString, registerFunc_fn> m_items;
 		QMap<QString, expectedType_fn> m_types;
+		QStringList m_examples;
 };
 
 
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionimpl.h #1130258:1130259
@@ -38,7 +38,7 @@
 	//helpers
 	/** adds a value to the points vector is needed. @returns if it was added. */
 	bool addValue(const QPointF& p);
-	bool isSimilar(double a, double b, double diff=0.0001);
+	static bool isSimilar(double a, double b, double diff=0.0001);
 	
 	//To reimplement
 	virtual function::Axe axeType() const { return function::Cartesian; }
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionimplicit.cpp #1130258:1130259
@@ -307,6 +307,7 @@
     QVector<Simplex> simplexes;
 
     QPointF initialPoint;
+    static QStringList examples() { return \
QStringList("(2*x+y)*(x^2+y^2)^4+2*y*(5*x^4+10*x^2*y^2-3*y^4)-2*x+y"); }  QPointF \
last_calc;  };
 
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionparametric.cpp #1130258:1130259
@@ -104,6 +104,7 @@
 	static QStringList supportedBVars() { return QStringList("t"); }
 	static ExpressionType expectedType() { return \
ExpressionType(ExpressionType::Lambda).addParameter(ExpressionType(ExpressionType::Value)).addParameter(ExpressionType(ExpressionType::Vector, \
ExpressionType(ExpressionType::Value), 2)); }  QStringList boundings() const { return \
supportedBVars(); } +	static QStringList examples() { return QStringList("t->vector \
{t,t**2}"); }  Cn* vx;
 };
 REGISTER_FUNCTION(FunctionParametric)
--- trunk/KDE/kdeedu/kalgebra/analitzagui/functionpolar.cpp #1130258:1130259
@@ -43,6 +43,7 @@
 	function::Axe axeType() const { return function::Polar; }
     QLineF derivative(const QPointF& p);
 	virtual FunctionImpl* copy() { return new FunctionPolar(*this); }
+    static QStringList examples() { return QStringList("q->3*sin(7*q)"); } \
//afiestas's favourite plot  
 	inline QPointF fromPolar(double r, double th) { return QPointF(r*std::cos(th), \
r*std::sin(th)); }  QRect m_last_viewport;
--- trunk/KDE/kdeedu/kalgebra/src/functionedit.cpp #1130258:1130259
@@ -52,7 +52,7 @@
 	m_name = new KLineEdit(this);
 	
 	m_func = new ExpressionEdit(this);
-    m_func->setExamples(QStringList() << "x**sin x" << "8*sin(3q)" << "t->vector{t, \
t**2}" << "(2*x+y)*(x^2+y^2)^4+2*y*(5*x^4+10*x^2*y^2-3*y^4)-2*x+y"); +    \
m_func->setExamples(FunctionFactory::self()->examples());  m_func->setAns("x");
 	connect(m_func, SIGNAL(textChanged()), this, SLOT(edit()));
 	connect(m_func, SIGNAL(returnPressed()), this, SLOT(ok()));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic