2 * @brief 自動拾いエディタのコマンドを受け付ける
5 * @todo 1関数100行以上ある、後で関数を分割すること
8 #include "autopick/autopick-command-menu.h"
9 #include "autopick/autopick-menu-data-table.h"
10 #include "autopick/autopick-util.h"
11 #include "io/input-key-acceptor.h"
12 #include "system/angband.h"
13 #include "term/screen-processor.h"
14 #include "term/term-color-types.h"
15 #include "util/int-char-converter.h"
18 * @brief 自動拾いエディタの画面を再描画する
19 * @param redraw 再描画が必要ならTRUE
20 * @param level command_menu_type 構造体におけるメニュー (詳細不明)
23 * @param menu_key 自動拾いエディタのメニューで入力したキー
26 static void redraw_edit_command_menu(bool *redraw, int level, int start, char *linestr, byte *menu_key, int max_len)
32 int col0 = 5 + level * 7;
33 int row0 = 1 + level * 3;
35 term_putstr(col0, row0, -1, TERM_WHITE, linestr);
38 for (int i = start; menu_data[i].level >= level; i++) {
40 if (menu_data[i].level > level) {
44 if (menu_data[i].com_id == -1) {
45 strcpy(com_key_str, _("▼", ">"));
46 } else if (menu_data[i].key != -1) {
48 com_key_str[1] = menu_data[i].key + '@';
49 com_key_str[2] = '\0';
51 com_key_str[0] = '\0';
54 const auto str = format("| %c) %-*s %2s | ", *menu_key + 'a', max_len, menu_data[i].name, com_key_str);
56 term_putstr(col0, row1++, -1, TERM_WHITE, str);
61 term_putstr(col0, row1, -1, TERM_WHITE, linestr);
66 * @brief Display the menu, and get a command
68 int do_command_menu(int level, int start)
73 for (int i = start; menu_data[i].level >= level; i++) {
74 /* Ignore lower level sub menus */
75 if (menu_data[i].level > level) {
79 int len = strlen(menu_data[i].name);
84 menu_id_list[menu_key] = i;
88 while (menu_key < 26) {
89 menu_id_list[menu_key] = -1;
93 int max_menu_wid = max_len + 3 + 3;
95 char linestr[MAX_LINELEN];
98 for (int i = 0; i < max_menu_wid + 2; i++) {
102 strcat(linestr, "+");
105 redraw_edit_command_menu(&redraw, level, start, linestr, &menu_key, max_len);
106 prt(format(_("(a-%c) コマンド:", "(a-%c) Command:"), menu_key + 'a' - 1), 0, 0);
113 bool is_alphabet = key >= 'a' && key <= 'z';
115 com_id = get_com_id(key);
123 int menu_id = menu_id_list[key - 'a'];
128 com_id = menu_data[menu_id].com_id;
130 com_id = do_command_menu(level + 1, menu_id + 1);