/*************************************************************************** * Copyright (c) 2004 Jürgen Riegel * * * * This file is part of the FreeCAD CAx development system. * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Library General Public * * License as published by the Free Software Foundation; either * * version 2 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Library General Public License for more details. * * * * You should have received a copy of the GNU Library General Public * * License along with this library; see the file COPYING.LIB. If not, * * write to the Free Software Foundation, Inc., 59 Temple Place, * * Suite 330, Boston, MA 02111-1307, USA * * * ***************************************************************************/ #ifndef GUI_MACRO_H #define GUI_MACRO_H // Std. configurations #include #include #include #include namespace Gui { struct ApplicationP; class PythonConsole; class PythonDebugger; /** Macro recording and play back management * The purpos of this class is to handle record function calls from a command and save it in * a macro file (so far). * \author Jürgen Riegel */ class GuiExport MacroManager : public Base::Observer { protected: MacroManager(); ~MacroManager(); public: /** Macro type enumeration */ enum MacroType { File, /**< The macro will be saved in a file */ User, /**< The macro belongs to the Application and will be saved in the UserParameter */ Doc /**< The macro belongs to the Document and will be saved and restored with the Document */ }; /** Line type enumeration */ enum LineType { App, /**< The line effects only the document and Application (FreeCAD) */ Gui, /**< The line effects the Gui (FreeCADGui) */ Cmt /**< The line is handled as a comment */ }; /** Opens a new Macro recording session * Starts a session with the type and the name of the macro. * All user interactions will be recorded as long as the commit() or cancel() isn't called. * There is only one recording session possible. Trying to open a second one causes an exception: * @param eType Type of the macro * @param sName Name or path of the macro * @see commit() * @see cancel() */ void open(MacroType eType,const char *sName); /// close (and save) the recording session void commit(void); /// cancels the recording session void cancel(void); /// indicates if a macro recording in in progress bool isOpen(void) const {return openMacro;} /// insert a new line in the macro void addLine(LineType Type,const char* sLine); /** Set the active module * This is normaly done by the workbench switch. It sets * the actually active application module so when the macro * gets started the right import can be issued. */ void setModule(const char* sModule); void run(MacroType eType,const char *sName); /// Get the Python debugger PythonDebugger* debugger() const; /** Observes its parameter group. */ void OnChange(Base::Subject &rCaller, const char * sReason); protected: QStringList macroInProgress; /**< Container for the macro */ QString macroName; /**< name of the macro */ bool openMacro; bool recordGui; bool guiAsComment; bool scriptToPyConsole; bool localEnv; PythonConsole* pyConsole; // link to the python console PythonDebugger* pyDebugger; Base::Reference params; // link to the Macro parameter group friend struct ApplicationP; }; } // namespace Gui #endif // GUI_MACRO_H