#ifndef _MathTools_MathTools_h #define _MathTools_MathTools_h #include #include #include using namespace Upp; class Calculator : public CodeEditor { typedef Calculator CLASSNAME; public: Calculator() : actualLine(-1) {}; Callback WhenChange; String GetLine(); private: int actualLine; virtual bool Key(dword key, int count) { if (actualLine < 0) actualLine = GetCursorLine(); else if (actualLine != GetCursorLine()) { actualLine = GetCursorLine(); if (IsModified()) WhenChange(); } if (key == K_ENTER) { key = K_DOWN; if (GetCursorLine() == GetLineCount() - 1) Insert(GetLength(), "\n"); } return CodeEditor::Key(key, count); } }; #define LAYOUTFILE #include #define IMAGECLASS MyImages #define IMAGEFILE #include struct Tool : StaticRect { virtual void Init() {}; virtual void End() {}; //virtual ScatterCtrl &Scatter() = 0; String name; }; void RegisterExample(Tool* (*ctrl)(), String fileName); class MathTools : public WithMathTools { typedef MathTools CLASSNAME; public: void Init(); void End(); private: void OnSel(); Vector examplesRects; }; class TabData : public Tool { public: typedef TabData CLASSNAME; TabData() : notFirstTime(false) {}; void Jsonize(JsonIO& json) { json ("scatter", up.scatter) ("gridDef", downL.gridDef) ("nIsHeader", downL.nIsHeader) ("notFirstTime", notFirstTime) ("editFile", down.editFile) ("butFitPM", down.butFitPM) ("butSetPM", down.butFitPM) ("splitter_SetPos", splitterPos) ("splitterDown_SetPos", splitterDownPos) ; } private: void Init(); void End(); void Fit(); void OnClear(); void OnClearDef(); void OnAutoset(); void OnUpdate(); void OnOpen(bool force, bool updateButtons); void OnChangeFile(int delta); void ArrayCopy(); void ArraySelect(); void OnArrayBar(Bar &menu); void OnShowAll(); void OnNIsheader(); Splitter splitter; WithTabData_Up up; WithTabData_Down down; WithTabData_Down_L downL; WithTabData_Down_R downR; Upp::Array editGrid; EditInt xCell, xFrom, xTo, yCell, yFrom, yTo; Option option; Upp::Array ds; bool notFirstTime; OpenFileButton openMenuButton; FrameRight