120 lines
4.8 KiB
C++
120 lines
4.8 KiB
C++
/***************************************************************************
|
|
* Copyright (c) 2004 Jürgen Riegel <juergen.riegel@web.de> *
|
|
* *
|
|
* 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 <QString>
|
|
#include <QStringList>
|
|
#include <Base/Observer.h>
|
|
#include <Base/Parameter.h>
|
|
|
|
|
|
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<const char*>
|
|
{
|
|
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,bool pending=false);
|
|
/** Set the active module
|
|
* This is normally 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<const char*> &rCaller, const char * sReason);
|
|
|
|
/// Return the added lines regardless of recording or not
|
|
long getLines() const {return totalLines;}
|
|
|
|
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<ParameterGrp> params; // link to the Macro parameter group
|
|
long totalLines;
|
|
std::vector<std::pair<LineType,std::string> > pendingLine;
|
|
|
|
friend struct ApplicationP;
|
|
};
|
|
|
|
} // namespace Gui
|
|
|
|
|
|
#endif // GUI_MACRO_H
|