forked from mia/Aegisub
129 lines
3.3 KiB
C++
129 lines
3.3 KiB
C++
|
// Copyright (c) 2010, Amar Takhar <verm@aegisub.org>
|
||
|
//
|
||
|
// Permission to use, copy, modify, and distribute this software for any
|
||
|
// purpose with or without fee is hereby granted, provided that the above
|
||
|
// copyright notice and this permission notice appear in all copies.
|
||
|
//
|
||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||
|
//
|
||
|
// $Id$
|
||
|
|
||
|
/// @file command.cpp
|
||
|
/// @brief Command system base file.
|
||
|
/// @ingroup command
|
||
|
|
||
|
#include "command.h"
|
||
|
#include <libaegisub/log.h>
|
||
|
|
||
|
namespace cmd {
|
||
|
|
||
|
CommandManager *cm;
|
||
|
|
||
|
int id(std::string name) { return cm->id(name); }
|
||
|
void call(agi::Context *c, const int id) { return cm->call(c, id); }
|
||
|
int count() { return cm->count(); }
|
||
|
Command* get(std::string name) { return cm->get(name); }
|
||
|
|
||
|
|
||
|
wxBitmap* Command::Icon(int size) {
|
||
|
if (size == 16) {
|
||
|
return icon::get(name(), 16);
|
||
|
} else if (size == 24) {
|
||
|
return icon::get(name(), 24);
|
||
|
} else {
|
||
|
throw CommandIconInvalid("Valid icon sizes are 16 or 24.");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
int CommandManager::id(std::string name) {
|
||
|
|
||
|
cmdMap::iterator index;
|
||
|
|
||
|
if ((index = map.find(name)) != map.end()) {
|
||
|
int id = std::distance(map.begin(), index);
|
||
|
return id;
|
||
|
}
|
||
|
// XXX: throw
|
||
|
printf("cmd::id NOT FOUND (%s)\n", name.c_str());
|
||
|
return 60003;
|
||
|
}
|
||
|
|
||
|
|
||
|
Command* CommandManager::get(std::string name) {
|
||
|
cmdMap::iterator index;
|
||
|
|
||
|
if ((index = map.find(name)) != map.end()) {
|
||
|
return index->second;
|
||
|
}
|
||
|
// XXX: throw
|
||
|
printf("cmd::id NOT FOUND (%s)\n", name.c_str());
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
void CommandManager::call(agi::Context *c, const int id) {
|
||
|
cmdMap::iterator index(map.begin());
|
||
|
std::advance(index, id);
|
||
|
|
||
|
if (index != map.end()) {
|
||
|
LOG_D("event/command") << index->first << " " << "(Id: " << id << ")";
|
||
|
(*index->second)(c);
|
||
|
} else {
|
||
|
LOG_W("event/command/not_found") << "EVENT ID NOT FOUND: " << id;
|
||
|
// XXX: throw
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void CommandManager::reg(Command *cmd) {
|
||
|
map.insert(cmdPair(cmd->name(), cmd));
|
||
|
}
|
||
|
|
||
|
|
||
|
// These forward declarations exist here since we don't want to expose
|
||
|
// them in a header, they're strictly internal-use.
|
||
|
void init_app(CommandManager *cm);
|
||
|
void init_audio(CommandManager *cm);
|
||
|
void init_automation(CommandManager *cm);
|
||
|
void init_command(CommandManager *cm);
|
||
|
void init_edit(CommandManager *cm);
|
||
|
void init_grid(CommandManager *cm);
|
||
|
void init_help(CommandManager *cm);
|
||
|
void init_keyframe(CommandManager *cm);
|
||
|
void init_medusa(CommandManager *cm);
|
||
|
void init_menu(CommandManager *cm);
|
||
|
void init_recent(CommandManager *cm);
|
||
|
void init_subtitle(CommandManager *cm);
|
||
|
void init_time(CommandManager *cm);
|
||
|
void init_timecode(CommandManager *cm);
|
||
|
void init_tool(CommandManager *cm);
|
||
|
void init_video(CommandManager *cm);
|
||
|
|
||
|
void init_command(CommandManager *cm) {
|
||
|
LOG_D("command/init") << "Populating command map";
|
||
|
init_app(cm);
|
||
|
init_audio(cm);
|
||
|
init_automation(cm);
|
||
|
init_edit(cm);
|
||
|
init_grid(cm);
|
||
|
init_help(cm);
|
||
|
init_keyframe(cm);
|
||
|
init_menu(cm);
|
||
|
init_recent(cm);
|
||
|
init_subtitle(cm);
|
||
|
init_time(cm);
|
||
|
init_timecode(cm);
|
||
|
init_tool(cm);
|
||
|
init_video(cm);
|
||
|
}
|
||
|
|
||
|
} // namespace cmd
|