Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void menu(int mode)
- {
- /*
- * Подготовительный этап
- */
- int *cursor = calloc( menu_count, sizeof(int) );
- int position = 0; // Позиция курсора
- char input; // Клавиша ввода
- cursor[position] = '>'; // Установка позиции курсора
- /*
- * Селектор прорисовки меню
- */
- switch (mode)
- {
- case (MAIN_MENU_MODE):
- show_main_menu(cursor);
- break;
- case (PRINT_LIST_MENU_MODE):
- show_print_list_menu(cursor);
- break;
- case (FILL_LIST_MENU_MODE):
- show_fill_list_menu(cursor);
- break;
- case (ADD_LIST_MENU_MODE):
- show_add_list_menu(cursor);
- break;
- case (DELETE_LIST_MENU_MODE):
- show_delete_list_menu(cursor);
- break;
- default:
- break;
- }
- /*
- * Цикл меню
- */
- while (1)
- {
- input = getch();
- switch (input)
- {
- /*
- * Кнопки перемещения вверх
- */
- case (UP_ARROW_KEY):
- case (K_KEY):
- if( !position )
- {
- cursor[position] = '\0';
- position = menu_count;
- cursor[position] = '>';
- }
- cursor[position] = '\0';
- position--;
- cursor[position] = '>';
- fflush(stdin);
- break;
- /*
- * Кнопки перемещения вниз
- */
- case (DOWN_ARROW_KEY):
- case (J_KEY):
- if( position == menu_count - 1 )
- {
- cursor[position] = '\0';
- position = 0 - 1;
- cursor[position] = '>';
- }
- cursor[position] = '\0';
- position++;
- cursor[position] = '>';
- fflush(stdin);
- break;
- /*
- * Кнопки выбора пункта меню
- */
- case (RIGHT_ARROW_KEY):
- case (L_KEY):
- case (ENTER_KEY):
- switch (mode)
- {
- /*
- * Главное меню
- */
- case (MAIN_MENU_MODE):
- // Выбор пунктов активированного меню
- if( activated )
- switch (position)
- {
- // "1. Вывод таблицы"
- case (0):
- menu_count = PRINT_LIST_MENU_COUNT;
- menu(PRINT_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- break;
- // "2. Заполнение таблицы"
- case (1):
- menu_count = FILL_LIST_MENU_COUNT;
- menu(FILL_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- break;
- // "3. Добавление элементов в таблицу"
- case (2):
- menu_count = ADD_LIST_MENU_COUNT;
- menu(ADD_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- // "4. Удаление элементов из таблицы"
- case (3):
- menu_count = DELETE_LIST_MENU_COUNT;
- menu(DELETE_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- // "i. Справка"
- case (9):
- show_info();
- break;
- // "0. Выход"
- case (10):
- return;
- }
- // Выбор пунктов неактивированного меню
- else
- switch (position)
- {
- // "1. Заполнение таблицы"
- case (0):
- menu_count = FILL_LIST_MENU_COUNT;
- menu(FILL_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- break;
- // "2. Добавление элементов в таблицу"
- case (1):
- menu_count = ADD_LIST_MENU_COUNT;
- menu(ADD_LIST_MENU_MODE);
- menu_count = activated ? MAIN_MENU_COUNT_ACTIVATED : MAIN_MENU_COUNT_NON_ACTIVATED;
- // "i. Справка"
- case (3):
- show_info();
- break;
- // "0. Выход"
- case (4):
- return;
- }
- break;
- /*
- * Селектор перед выводом таблицы на экран
- */
- case (PRINT_LIST_MENU_MODE):
- break;
- /*
- * Селектор перед заполнением таблцицы
- */
- case (FILL_LIST_MENU_MODE):
- break;
- /*
- * Селектор перед добавлением элементов
- */
- case (ADD_LIST_MENU_MODE):
- break;
- /*
- * Селектор перед уделением элементов
- */
- case (DELETE_LIST_MENU_MODE):
- break;
- default:
- break;
- }
- /*
- * Кнопки перемещения назад по меню
- */
- case (LEFT_ARROW_KEY):
- case (H_KEY):
- case (ESC_KEY):
- switch (mode)
- {
- case (MAIN_MENU_MODE):
- break;
- case (PRINT_LIST_MENU_MODE):
- return;
- case (FILL_LIST_MENU_MODE):
- return;
- case (ADD_LIST_MENU_MODE):
- return;
- case (DELETE_LIST_MENU_MODE):
- return;
- default:
- break;
- }
- }
- /*
- * Перерисовка меню
- */
- switch (mode)
- {
- case (MAIN_MENU_MODE):
- show_main_menu(cursor);
- break;
- case (PRINT_LIST_MENU_MODE):
- show_print_list_menu(cursor);
- break;
- case (FILL_LIST_MENU_MODE):
- show_fill_list_menu(cursor);
- break;
- case (ADD_LIST_MENU_MODE):
- show_add_list_menu(cursor);
- break;
- case (DELETE_LIST_MENU_MODE):
- show_delete_list_menu(cursor);
- break;
- default:
- break;
- }
- }
- free(cursor);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement