#ifndef MATHEMAGICS_H #define MATHEMAGICS_H #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #include #include "stacklevel.h" #include "optiondialog.h" #include "kparanoidline.h" class KListAction; class EditAction; class ComboAction; class QComboBox; class QCloseEvent; class QPushButton; class QVBoxLayout; class QScrollView; class KToggleAction; class MathKeypad; class Mathemagics : public KMainWindow { Q_OBJECT public: /** construtor */ Mathemagics(QWidget* parent=0, const char *name=0, WFlags f = 0); /** destructor */ ~Mathemagics(); void updateStack(); protected slots: void runFormula(const QString &); bool runCommand(const QString &); void openFile(const QString &filename); void saveFile(const QString &filename); void slotOpen(); void clearHistory(); void scrollToBottom(); void keypadClosing(); void insertChar(const QString &); void configureToolBars(); void newToolBarConfig(); void keyBindings(); void toggleKeypad(bool); void slotEnter(); void slotAdd(); void slotSubtract(); void slotMultiply(); void slotDivide(); void slotBackspace(); void slotKeypadBackspace(); void slotModulo(); void slotPercent(); void slotInverse(); void slotRaiseE(); void slotSqrt(); void slotSquared(); void slotSine(); void slotCosine(); void slotTangent(); void slotEEX(); void slotRaiseTen(); void slotLn(); void slotFactorial(); void slotPower(); void slotNegative(); void slotAnd(); void slotOr(); void slotXOr(); void slotLsh(); void slotRsh(); void slotDup2(); void slotDrop(); void slotUpdateStackLevel(int); void slotRoll(int); void slotRestoreStack(); void slotRevert(); void slotPushHighlighted(const QString&); void slotConfigure(); void slotConfigureHide(); void slotConfigureDestroy(); void slotUpdateConfiguration(); void slotBaseChanged(int id); void slotAngleChanged(int id); protected: void closeEvent(QCloseEvent *); private: QPtrList stackLevels; void recreateStackLevels(); QScrollView *topLevel; QWidget *boxParent; QVBoxLayout *bigBox; EditAction* LineEdit; ComboAction* HistoryBox; KListAction *baseGroup; KListAction *angGroup; KListAction *formulae; MathKeypad *keypad; QValueList *Stack; QValueList *SavedStack; QStringList entryNums; bool parseArgs(unsigned int reqArgs = 0, bool autoEnter = 1, bool save = 1); double angConv(const double theDouble); double angOut(const double theDouble); QString theAngle(); int testArgs(); bool getArgs(unsigned int num); QValueList args; double format(QString theString, bool *ok=0); QString format(double theDouble); void saveStack(); void enter(); int fact(int n); //QStatusBar *statusBar; int dispTime; void error(); void changeStatus(QString text); void changeStatusError(QString text); void changeStatus(double * res, char op); void changeStatus(double * res, QString op, bool prepend = 0); void level5Return(); void level4Return(); void level3Return(); void level2Return(); void level1Return(); void roll(unsigned int index); void rolld(unsigned int index); ConfigureDialog * optionDialog; //constants double pi; bool noSave; bool enterMode; // configuration options int numStackLevels; bool showPeriod; bool fixedPrec; int histNum; bool histDetail; int formatPrec; bool toSaveStack; bool delDrops; int base; int angle; bool beep; KToggleAction *keypadAct; KToggleAction *InvButton; KToggleAction *HypButton; // map names to their formulae QMap formulas; QStringList defFormulas; // map names to their help QMap help; // variables QMap variables; QStringList defVariables; }; class EditAction : public KAction { Q_OBJECT public: EditAction( const QString& text, int accel, const QObject *receiver, const char *member, QObject* parent, const char* name ); ~EditAction(); virtual int plug( QWidget *w, int index = -1 ); virtual void unplug( QWidget *w ); QString text() { return m_combo? m_combo->text() : QString::null; } QGuardedPtr edit(); public slots: void clear(); void append(QString); void insert(QString); signals: void plugged(); private: QGuardedPtr m_combo; const QObject *m_receiver; const char *m_member; }; class ComboAction : public KAction { Q_OBJECT public: ComboAction( const QString& text, int accel, const QObject *receiver, const char *member, QObject* parent, const char* name ); ~ComboAction(); virtual int plug( QWidget *w, int index = -1 ); virtual void unplug( QWidget *w ); QGuardedPtr combo(); signals: void plugged(); private: QGuardedPtr m_combo; const QObject *m_receiver; const char *m_member; }; #endif