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)
30 int col0 = 5 + level * 7;
31 int row0 = 1 + level * 3;
33 term_putstr(col0, row0, -1, TERM_WHITE, linestr);
36 for (int i = start; menu_data[i].level >= level; i++)
40 if (menu_data[i].level > level) continue;
42 if (menu_data[i].com_id == -1)
44 strcpy(com_key_str, _("▼", ">"));
46 else if (menu_data[i].key != -1)
49 com_key_str[1] = menu_data[i].key + '@';
50 com_key_str[2] = '\0';
54 com_key_str[0] = '\0';
57 str = format("| %c) %-*s %2s | ", *menu_key + 'a', max_len, menu_data[i].name, com_key_str);
59 term_putstr(col0, row1++, -1, TERM_WHITE, str);
64 term_putstr(col0, row1, -1, TERM_WHITE, linestr);
70 * Display the menu, and get a command
72 int do_command_menu(int level, int start)
77 for (int i = start; menu_data[i].level >= level; i++)
79 /* Ignore lower level sub menus */
80 if (menu_data[i].level > level) continue;
82 int len = strlen(menu_data[i].name);
83 if (len > max_len) max_len = len;
85 menu_id_list[menu_key] = i;
91 menu_id_list[menu_key] = -1;
95 int max_menu_wid = max_len + 3 + 3;
97 char linestr[MAX_LINELEN];
100 for (int i = 0; i < max_menu_wid + 2; i++)
102 strcat(linestr, "-");
105 strcat(linestr, "+");
109 redraw_edit_command_menu(&redraw, level, start, linestr, &menu_key, max_len);
110 prt(format(_("(a-%c) コマンド:", "(a-%c) Command:"), menu_key + 'a' - 1), 0, 0);
112 if (key == ESCAPE) return 0;
115 bool is_alphabet = key >= 'a' && key <= 'z';
118 com_id = get_com_id(key);
127 int menu_id = menu_id_list[key - 'a'];
128 if (menu_id < 0) continue;
130 com_id = menu_data[menu_id].com_id;
133 com_id = do_command_menu(level + 1, menu_id + 1);
134 if (com_id) return com_id;