예제 #1
0
    void redo() {
        if (_redoStack.empty()) {
            rMessage() << "Redo: no redo available" << std::endl;
        }
        else {
            Operation* operation = _redoStack.back();
            rMessage() << "Redo: " << operation->_command << std::endl;

            startUndo();
            trackersRedo();
            operation->_snapshot.restore();
            finishUndo(operation->_command);
            _redoStack.pop_back();

            for (Observers::iterator i = _observers.begin(); i != _observers.end(); /* in-loop */) {
                Observer* observer = *(i++);
                observer->postRedo();
            }

            // Trigger the onPostUndo event on all scene nodes
            PostRedoWalker walker;
            GlobalSceneGraph().root()->traverse(walker);

            GlobalSceneGraph().sceneChanged();
        }
    }
예제 #2
0
 // greebo: This finishes the current operation and
 // removes it instantly from the stack
 void cancel() {
     // Try to add the last operation as "temp"
     if (finishUndo("$TEMPORARY")) {
         // Instantly remove the added operation
         _undoStack.pop_back();
     }
 }
예제 #3
0
파일: undo.cpp 프로젝트: xonotic/netradient
void redo(){
	if ( m_redo_stack.empty() ) {
		globalOutputStream() << "Redo: no redo available\n";
	}
	else
	{
		Operation* operation = m_redo_stack.back();
		globalOutputStream() << "Redo: " << operation->m_command.c_str() << "\n";

		startUndo();
		trackersRedo();
		operation->m_snapshot.restore();
		finishUndo( operation->m_command.c_str() );
		m_redo_stack.pop_back();
	}
}
예제 #4
0
 void finish(const std::string& command) {
     if (finishUndo(command)) {
         rMessage() << command << std::endl;
     }
 }
예제 #5
0
파일: undo.cpp 프로젝트: xonotic/netradient
void finish( const char* command ){
	if ( finishUndo( command ) ) {
		globalOutputStream() << command << '\n';
	}
}