Разработать класс, позволяющий манипулировать горячими клавишами. Горячая клавиша - клавиша или сочетание клавиш на клавиатуре, которому сопоставлено некоторое действие, команда.
Текстовый файл (или несколько), содержащий набор горячих клавиш и назначенных им команд. Пример:
Ctrl+Alt+Del = reset
Ctrl+C = copy
Ctrl+Ins = copy
Ctrl+V = paste
Shift+Ins = paste
Ctrl+X = cut
Shift+Del = cut
F1 = help
Сочетания клавиш даны как строки, в рамках задачи можно считать, что названия сочетаний оформлены всегда правильно и однотипно, например, сперва Ctrl (если есть), затем Alt (если есть), затем Shift (если есть), затем название клавиши с заглавной буквы. Названия команд также заданы как строки.
Разработать класс, позволяющий манипулировать горячими клавишами. Примерный интерфейс:
#include <string>
#include <vector>
class HotkeyMap {
public:
const std::string & operator[](const std::string & key) const;
bool add_key(const std::string & key, const std::string & cmd);
size_t add_cmd(const std::string& cmd, const std::vector < std::string >& keys);
bool remove_key(const std::string & key);
bool remove_cmd(const std::string & cmd);
std::vector<std::string> get_cmds(void) const;
std::vector<std::string> get_keys(const std::string & cmd) const;
HotkeyMap copy(void) const;
std::vector<std::string> merge(const HotkeyMap & map);
void clean(void);
};
operator []
- находит команду связанную с горячей клавишей. По логике, эта функция наиболее часто вызываемая и потому должна быть быстрой.add_key
- добавляет связку “горячая клавиша - команда”. Если данная клавиша уже привязана к другой команде (конфликт при добавлении в контейнер), то ничего не делает, возвращает false.add_cmd
- добавляет набор горячих клавиш для указанной команды. Если возник конфликт, процесс добавления прерывается, и возвращаемое значение указывает на номер конфликтной горячей клавиши в наборе.remove_key
- удаляет горячую клавишу. Если указанная горячая клавиша отсутствует в контейнере - возвращает false.remove_cmd
- удаляет команду и все связанные с ней горячие клавиши. Если заданная команда отсутствует в контейнере - возвращает false.get_cmds
- возвращает все команды.get_keys
- возвращает все горячие клавиши для указанной команды.copy
- создаёт полную копию контейнераmerge
- объединяет содержимое контейнеров и возвращает список конфликтующих горячих клавиш.clean
- очищает контейнер.Варианты:
1) Даны два файла с наборами горячих клавиш и назначенных им команд. Загрузить файлы, распечатать, объединить, распечатать список конфликтов, объединенный результат записать в третий файл.
Пример вывода программы:
file1:
copy Ctrl+C, Ctrl+Ins,
paste Ctrl+V, Shift+Ins,
reset Ctrl+Alt+Del,
file2:
move Ctrl+M, F6,
copy Ctrl+C, F5,
search Ctrl+V, F7,
conflicts: 1
Ctrl+V
file3 = file1.merge(file2):
copy Ctrl+C, Ctrl+Ins, F5,
paste Ctrl+V, Shift+Ins,
reset Ctrl+Alt+Del,
move Ctrl+M, F6,
search F7,
2) Дан файл с набором горячих клавиш и назначенных им команд, а так же файл со списком горячих клавиш и команд которые нужно удалить. Загрузить оба файла, удалить горячие клавиши и команды, сохранить результат в третий файл.
Пример вывода программы:
file1:
copy Ctrl+C, Ctrl+Ins, F5,
paste Ctrl+V, Shift+Ins,
reset Ctrl+Alt+Del,
move Ctrl+M, F6,
search F7,
remove items:
Ctrl+Alt+Del
Ctrl+Ins
move
file2:
copy Ctrl+C, F5,
paste Ctrl+V, Shift+Ins,
search F7,