/* * MathPlanner 3.0 - Mathematical design tool. * Copyright(C) 2002 Jarmo Nikkanen * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation. * * You should have received a copy of the GNU General Public License with this program. * */ #ifndef _MATHPLANNER_OPERATORS_H #define _MATHPLANNER_OPERATORS_H #include "BaseStructures.h" #include "Layout.h" #include "Header.h" #include #include #include #include #include #include class ApplicationControl; class m_function_object; class object_string; class DataStorage; // ****************************************************** // Control options Classes // ****************************************************** class matrix_mes : public base_object_message // sigma_object message class { Q_OBJECT QLineEdit *but1; QLineEdit *but2; QToolButton *but3; QComboBox *combo; QHBox *hbox; public: matrix_mes(ApplicationControl *); ~matrix_mes(); QWidget *MainWidget(); void ReadState(m_base_object *); public slots: void Button(); void Combo(int); }; class do_mes : public base_object_message // dive_object message class { Q_OBJECT QToolButton *but1,*but2,*but3; QHBox *hbox; public: do_mes(ApplicationControl *); ~do_mes(); QWidget *MainWidget(); public slots: void Button1(); void Button2(); void Button3(); }; class par_mes : public base_object_message // parenthesis_object message class { Q_OBJECT QToolButton *but1; QComboBox *combo,*combo2; QHBox *hbox; public: par_mes(ApplicationControl *); ~par_mes(); QWidget *MainWidget(); void ReadState(m_base_object *); public slots: void Button(); void Combo(int); void Combo2(int); }; class comp_mes : public base_object_message // parenthesis_object message class { Q_OBJECT QToolButton *but1,*but2,*but3; QHBox *hbox; public: comp_mes(ApplicationControl *); ~comp_mes(); QWidget *MainWidget(); void ReadState(m_base_object *); public slots: void Button(); void Button2(); void Button3(); }; class sqrt_mes : public base_object_message // sqrt_object & exp_object message class { Q_OBJECT QToolButton *but1; QHBox *hbox; public: sqrt_mes(ApplicationControl *); ~sqrt_mes(); QWidget *MainWidget(); public slots: void Button(); }; class sigma_mes : public base_object_message // sigma_object message class { Q_OBJECT QToolButton *but1; QToolButton *but2; QComboBox *combo; QHBox *hbox; public: sigma_mes(ApplicationControl *); ~sigma_mes(); QWidget *MainWidget(); void ReadState(m_base_object *); public slots: void Button(); void Button2(); void Combo(int); }; class minmax_mes : public base_object_message // minmax_object message class { Q_OBJECT QComboBox *combo; QHBox *hbox; public: minmax_mes(ApplicationControl *); ~minmax_mes(); QWidget *MainWidget(); public slots: void Combo(int); }; class trigono_mes : public base_object_message // trigono_object message class { Q_OBJECT QToolButton *but1,*but2; QComboBox *combo; QHBox *hbox; public: trigono_mes(ApplicationControl *); ~trigono_mes(); QWidget *MainWidget(); void ReadState(m_base_object *); public slots: void Button1(); void Button2(); void Combo(int); }; // ****************************************************** // Base_object Classes // ****************************************************** class matrix_object : public m_base_object { private: int curr; matrix_layout MatrixLo; linepar_layout ParLo; string_object *Inner[64]; public: int enable_par,Row,Col,Cnt; matrix_object(DataStorage *); matrix_object(int,int,int,ApplicationControl *,m_function_object *,class string_object *); ~matrix_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void Reset(); bool AutoDeletion(); void SeekObject(QPoint); //QString Yacas(); math_node Calculate(); void Init(); //void InsertString(str_range,string_object *); DataStorage *BuildStorage(); void Build(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); void SetFontSize(int); private: void ChangeLayout(int,int); }; class dive_object : public m_base_object { private: int mode; int curr; dive_layout dive; public: string_object *Upper; string_object *Lower; dive_object(DataStorage *); dive_object(class ApplicationControl *,class m_function_object *,class string_object *); ~dive_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); void Init(); void InsertString(str_range,string_object *); math_node Calculate(); void SetFontSize(int id); DataStorage *BuildStorage(); void Build(); void FocusNextObject(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); }; class sqrt_object : public m_base_object { private: int curr; root_layout pare; public: string_object *Upper; string_object *Lower; int hei,space; sqrt_object(DataStorage *); sqrt_object(ApplicationControl *,m_function_object *,class string_object *); ~sqrt_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void SetFontSize(int id); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); void InsertString(str_range,string_object *); math_node Calculate(); DataStorage *BuildStorage(); void Build(); void Init(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); }; class trigono_object : public m_base_object { private: int margin,spacing; char Opr_Str[20]; public: int Opr; int deg_rad; trigono_object(DataStorage *); trigono_object(int,class ApplicationControl *,class m_function_object *,class string_object *); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); math_node Calculate(math_node); math_node Calculate(); DataStorage *BuildStorage(); void Build(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void InsertString(str_range,string_object *); }; class par_object : public m_base_object { private: class par_layout pare; public: int Opr,Mode; class string_object *Inner; par_object(DataStorage *); par_object(int,ApplicationControl *,m_function_object *,class string_object *); ~par_object(); void SetFontSize(int); void Init(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); void InsertString(str_range,string_object *); math_node Calculate(); DataStorage *BuildStorage(); void Build(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); }; class complex_object : public m_base_object { private: class complex_layout pare; class string_object *Inner; public: int Mode; complex_object(DataStorage *); complex_object(int,ApplicationControl *,m_function_object *,class string_object *); ~complex_object(); void SetFontSize(int); void Init(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); void InsertString(str_range,string_object *); math_node Calculate(); DataStorage *BuildStorage(); void Build(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); }; class exp_object : public m_base_object { private: class string_object *Inner; int Opr; char Opr_Str_A[20]; exp_layout exp; text_layout text; public: exp_object(DataStorage *); exp_object(int,class ApplicationControl *,class m_function_object *,class string_object *); ~exp_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); math_node Calculate(); math_node Calculate(math_node); DataStorage *BuildStorage(); void Build(); void SetFontSize(int id); void InsertString(str_range,string_object *); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); base_object_message *CreateControlObject(); }; class function_defination_object : public m_base_object { private: string_layout StrLo,StrLoB; par_layout ParLo; text_layout PoLoA,PoLoB,AssignLo; QString fname; int curr,count; m_display_box *let; string_object *Outer; bool pointer,protect,argument_pass; int arg_type[3]; string_object *pointer_to_string[3]; math_node *arg_int[3],*by_int[3]; public: string_object *Inner[3]; function_defination_object(DataStorage *); function_defination_object(int count,ApplicationControl *,m_function_object *,class string_object *); ~function_defination_object(); bool IsOK(); QString GetArgumentName(int); QString ArgumentByInteger(int); math_node **ByInteger(int); void SetByInteger(int,math_node *); string_object **ArgumentPointer(int); void CheckPointersAndTypes(); int ArgumentType(int); void SetArgumentValue(int,math_node); void SetArgumentPointer(int,string_object *); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void Reset(); bool AutoDeletion(); void SeekObject(QPoint); math_node Calculate(); DataStorage *BuildStorage(); void Build(); //void SetFocus(); void FocusNextObject(); void SetFontSize(int); QFont GetFont(int id=0); QColor GetColor(int id=0); void SendCall(int); }; class function_header_object : public m_base_object { private: string_layout StrLo,StrLoB; par_layout ParLo; text_layout PoLoA,PoLoB,AssignLo; QString fname; bool pointer,protect,ok,defined; function_defination_object *def_fdo; string_object **def_string; int int_no,count,curr; math_node **int_ptr,*by_int[3]; public: string_object *Inner[3]; function_header_object(DataStorage *); function_header_object(QString,ApplicationControl *,m_function_object *,class string_object *); ~function_header_object(); QString GetName(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void Reset(); bool AutoDeletion(); void SeekObject(QPoint); math_node Calculate(); void FocusNextObject(); DataStorage *BuildStorage(); void Build(); void SendCall(int); void SetFontSize(int); }; class sigma_object : public m_base_object { private: int curr,int_no; bool enable_par; sigma_layout SigmaLo; par_layout ParLo; string_object *Inner; string_object *Upper; string_object *Lower; math_node *integer; class integer_object *intg; public: int Opr; sigma_object(DataStorage *); sigma_object(int,ApplicationControl *,m_function_object *,class string_object *); ~sigma_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void Reset(); bool AutoDeletion(); void SeekObject(QPoint); math_node Calculate(); void Init(); void InsertString(str_range,string_object *); DataStorage *BuildStorage(); void Build(); void FocusNextObject(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void SendCall(int); void SetFontSize(int); }; class minmax_object : public m_base_object { private: class string_object *Inner; class string_object *Outer; string_layout StrLo,StrLoB; par_layout ParLo; text_layout PoLoA,PoLoB,AssignLo; int Opr; int curr; char Opr_Str_C[20]; public: minmax_object(DataStorage *); minmax_object(int,ApplicationControl *,m_function_object *,class string_object *); ~minmax_object(); void KeyReceived(key_code); void KeyFeedback(key_code); void CalculateBounds(); void MoveTo(QPoint); void Draw(QPainter *); void SeekObject(QPoint); bool AutoDeletion(); void Reset(); math_node Calculate(); void Init(); DataStorage *BuildStorage(); void Build(); base_object_message *CreateControlObject(); void MessageReceived(DataStorage *msg,int rec); void FocusNextObject(); void SendCall(int); void SetFontSize(int); }; #endif