# HG changeset patch # User Chris Cannam # Date 1142272519 0 # Node ID 701404725897099095c89dc4ea89518d15966773 # Parent b8aae4f883b7189ac3405e795ba2839f4cfa5dc6 * Use commands for add/delete pane in main window * Add compound command collection to command history (for add pane, import file etc) * Add hide/show pane and hidden pane list to PaneStack * Various other fixes diff -r b8aae4f883b7 -r 701404725897 base/CommandHistory.cpp --- a/base/CommandHistory.cpp Fri Mar 10 12:28:22 2006 +0000 +++ b/base/CommandHistory.cpp Mon Mar 13 17:55:19 2006 +0000 @@ -33,7 +33,9 @@ CommandHistory::CommandHistory() : m_undoLimit(50), m_redoLimit(50), - m_savedAt(0) + m_savedAt(0), + m_currentMacro(0), + m_executeMacro(false) { m_undoAction = new QAction(QIcon(":/icons/undo.png"), tr("&Undo"), this); m_undoAction->setShortcut(tr("Ctrl+Z")); @@ -105,6 +107,11 @@ { if (!command) return; + if (m_currentMacro) { + addToMacro(command); + return; + } + std::cerr << "MVCH::addCommand: " << command->getName().toLocal8Bit().data() << std::endl; // We can't redo after adding a command @@ -129,6 +136,43 @@ } void +CommandHistory::addToMacro(Command *command) +{ + std::cerr << "MVCH::addToMacro: " << command->getName().toLocal8Bit().data() << std::endl; + + if (m_executeMacro) command->execute(); + m_currentMacro->addCommand(command); +} + +void +CommandHistory::startCompoundOperation(QString name, bool execute) +{ + if (m_currentMacro) { + std::cerr << "MVCH::startCompoundOperation: ERROR: compound operation already in progress!" << std::endl; + std::cerr << "(name is " << m_currentMacro->getName().toLocal8Bit().data() << ")" << std::endl; + } + + m_currentMacro = new MacroCommand(name); + m_executeMacro = execute; +} + +void +CommandHistory::endCompoundOperation() +{ + if (!m_currentMacro) { + std::cerr << "MVCH::endCompoundOperation: ERROR: no compound operation in progress!" << std::endl; + } + + Command *toAdd = m_currentMacro; + m_currentMacro = 0; + + // We don't execute the macro command here, because we have been + // executing the individual commands as we went along if + // m_executeMacro was true. + addCommand(toAdd, false); +} + +void CommandHistory::addExecutedCommand(Command *command) { addCommand(command, false); diff -r b8aae4f883b7 -r 701404725897 base/CommandHistory.h --- a/base/CommandHistory.h Fri Mar 10 12:28:22 2006 +0000 +++ b/base/CommandHistory.h Mon Mar 13 17:55:19 2006 +0000 @@ -28,6 +28,7 @@ #include class Command; +class MacroCommand; class QAction; class QMenu; class QToolBar; @@ -70,6 +71,12 @@ /// Set the maximum number of items in the redo history. void setRedoLimit(int limit); + /// Start recording commands to batch up into a single compound command. + void startCompoundOperation(QString name, bool execute); + + /// Finish recording commands and store the compound command. + void endCompoundOperation(); + public slots: /** * Checkpoint function that should be called when the document is @@ -143,6 +150,10 @@ int m_redoLimit; int m_savedAt; + MacroCommand *m_currentMacro; + bool m_executeMacro; + void addToMacro(Command *command); + void updateActions(); void clipCommands(); diff -r b8aae4f883b7 -r 701404725897 base/View.cpp --- a/base/View.cpp Fri Mar 10 12:28:22 2006 +0000 +++ b/base/View.cpp Mon Mar 13 17:55:19 2006 +0000 @@ -154,8 +154,10 @@ } void -View::propertyContainerSelected(PropertyContainer *pc) +View::propertyContainerSelected(View *client, PropertyContainer *pc) { + if (client != this) return; + if (pc == m_propertyContainer) { if (m_haveSelectedLayer) { m_haveSelectedLayer = false; diff -r b8aae4f883b7 -r 701404725897 base/View.h --- a/base/View.h Fri Mar 10 12:28:22 2006 +0000 +++ b/base/View.h Mon Mar 13 17:55:19 2006 +0000 @@ -232,7 +232,7 @@ virtual void viewManagerPlaybackFrameChanged(unsigned long); virtual void viewManagerZoomLevelChanged(void *, unsigned long, bool); - virtual void propertyContainerSelected(PropertyContainer *pc); + virtual void propertyContainerSelected(View *, PropertyContainer *pc); virtual void selectionChanged(); virtual void toolModeChanged();