本文整理汇总了C++中Interaction::command方法的典型用法代码示例。如果您正苦于以下问题:C++ Interaction::command方法的具体用法?C++ Interaction::command怎么用?C++ Interaction::command使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Interaction
的用法示例。
在下文中一共展示了Interaction::command方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
void InteractionProcessor::run()
{
std::stack<Interaction> undoStack;
std::stack<Interaction> redoStack;
view.refresh();
while (true)
{
Interaction interaction = interactionReader.nextInteraction();
if (interaction.type() == InteractionType::quit)
{
break;
}
else if (interaction.type() == InteractionType::undo)
{
if (!undoStack.empty())
{
Interaction undoInteraction = undoStack.top();
Command* command = undoInteraction.command();
try
{
undoStack.pop();
redoStack.push(undoInteraction);
command->undo(model);
model.clearErrorMessage();
}
catch(EditorException& e)
{
model.setErrorMessage(e.getReason());
delete command;
}
view.refresh();
}
}
else if (interaction.type() == InteractionType::redo)
{
if(!redoStack.empty())
{
Interaction redoInteraction = redoStack.top();
Command* command = redoInteraction.command();
try
{
redoStack.pop();
undoStack.push(redoInteraction);
command->execute(model);
model.clearErrorMessage();
}
catch(EditorException& e)
{
model.setErrorMessage(e.getReason());
delete command;
}
view.refresh();
}
}
else if (interaction.type() == InteractionType::command)
{
Command* command = interaction.command();
try
{
command->execute(model);
undoStack.push(interaction);
model.clearErrorMessage();
}
catch (EditorException& e)
{
model.setErrorMessage(e.getReason());
delete command;
}
view.refresh();
// Note that you'll want to be more careful about when you delete
// commands once you implement undo and redo. For now, since
// neither is implemented, I've just deleted it immediately
// after executing it. You'll need to wait to delete it until
// you don't need it anymore.
//delete command;
}
}
while(!undoStack.empty())
{
Interaction undoInteraction = undoStack.top();
delete undoInteraction.command();
//.........这里部分代码省略.........
示例2: run
void InteractionProcessor::run()
{
view.refresh();
std::vector<Command*> undo;
std::vector<Command*> redo;
while (true)
{
Interaction interaction = interactionReader.nextInteraction();
Command* command = interaction.command();
Command* undoCommand = nullptr;
Command* redoCommand = nullptr;
if (interaction.type() == InteractionType::quit)
{
for (auto i = undo.begin(); i < undo.end(); i++)
{
delete *i;
}
for (auto j = redo.begin(); j < redo.end(); j++)
{
delete *j;
}
delete undoCommand;
delete redoCommand;
delete command;
break;
}
else if (interaction.type() == InteractionType::undo)
{
if (undo.size() > 0)
{
undoCommand = undo.back();
try
{
undoCommand->undo(model);
}
catch (EditorException& e)
{
model.setErrorMessage(e.getReason());
}
redo.push_back(undoCommand);
undo.pop_back();
}
view.refresh();
}
else if (interaction.type() == InteractionType::redo)
{
if (redo.size() > 0)
{
redoCommand = redo.back();
try
{
redoCommand->execute(model);
}
catch (EditorException& e)
{
model.setErrorMessage(e.getReason());
}
undo.push_back(redoCommand);
redo.pop_back();
}
view.refresh();
}
else if (interaction.type() == InteractionType::command)
{
// Command* command = interaction.command();
undo.push_back(command);
try
{
command->execute(model);
model.clearErrorMessage();
}
catch (EditorException& e)
{
model.setErrorMessage(e.getReason());
}
view.refresh();
// Note that you'll want to be more careful about when you delete
// commands once you implement undo and redo. For now, since
// neither is implemented, I've just deleted it immediately
//.........这里部分代码省略.........