Files
create/src/Gui/Macro.h
Zheng, Lei 4bd31c4b91 Gui: Command API changes
* invoke(), distinguish between command triggering source. Also add
  support of auto transaction using App::AutoTransaction. Now all
  command will support undo/redo by default.

* setupCheckable(), a helper function to Improve support of
  PythonGroupCommand

* getObjectCmd(), helper function to output Python command to refer to
  an object without ambiguity. Because with introduction of external
  linking, an object can no longer be safely referred through the
  current active document.

* Support auto MacroManager command logger. For commands that does not
  log any output to MacroManager, a log entry of 'Gui.runCommand()' will
  be auto generated.

* Support linked object in copyVisual()

* Modified do/runCommand() to print calling file and line number.

* Add various helper macros for run command involving a document or
  object.
2019-08-17 14:52:10 +02:00

121 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::string pendingLine;
LineType pendingType;
friend struct ApplicationP;
};
} // namespace Gui
#endif // GUI_MACRO_H