Создание меню на 2-х кнопках с помощью библиотеки MenuSystem

alexnf
Offline
Зарегистрирован: 13.03.2015

Организую меню настроек всего на 2-х кнопках с помощью библиотеки MenuSystem

Вот как происходит управление меню стандартно в примерах библиотеки с использованием 4-х кнопок:

   switch (inChar) {
      case 'w':         // Предыдущий пункт
        ms.prev();      // Меняем значение текущего пункта на предыдущий
        displayMenu();  // Выводим на экран
        break;
      case 's':         // Следующий пункт
        ms.next();      // Меняем значение текущего пункта на Следующий
        displayMenu();  // Выводим на экран
        break;
      case 'a':         // Родительский пункт
        ms.back();      // Меняем значение текущего пункта на Родительский
        displayMenu();  // Выводим на экран
        break;
      case 'd':         // Выбор текущего пункта
        ms.select();    // Переходим к текущему пункту или подменю, если оно есть  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
        displayMenu();  // Выводим на экран
        break;

Я использую всего две кнопки, на которые забито ms.next() для перебора пунктов, и ms.select(); для выбора. 

Для возврата на уровень вверх, добавил в каждый уровень пункт BACK и при его выборе выполняю функцию:

void on_item_back_selected(MenuItem* p_menu_item)  //функция вызываемая при выборе пункта BACK
{
  ms.back();     //выполняется поднятие на уровень вверх в меню
}

Теперь нужно организовать проход функцией ms.next() по кругу, т. е. что бы после последнего пункта текущего уровня меню, появлялся первый.  Сейчас на последнем пункте перебор останавливается, и дальнейшие нажатия игнорируются. Примеры пересмотрел вроде ни чего подобного не нашел. Возможно ли так сделать без корректировки самой библиотеки?

alexnf
Offline
Зарегистрирован: 13.03.2015

Посмотрел что в библиотеке скачаной через "Менеджер библиотек", в файле keywords.txt указаны команды:

Menu            KEYWORD1
MenuItem        KEYWORD1
MenuSystem      KEYWORD1
MenuComponent   KEYWORD1
 
а на github:
 
Menu            KEYWORD1
MenuItem        KEYWORD1
NumericMenuItem KEYWORD1
BackMenuItem    KEYWORD1
MenuSystem      KEYWORD1
MenuComponent   KEYWORD1 
 
Но при этом и там и там версия 2.1.1

При скачивании библиотеки с GitHub, скетч не компилируется, ругается уже на первое упоминание: MenuSystem ms; 

alexnf
Offline
Зарегистрирован: 13.03.2015

В общем вроде бы решил через изменения в библиотеке:


boolean Menu::next(boolean loop)
{
    if (_cur_menu_component_num != _num_menu_components - 1)
    {
        _cur_menu_component_num++;
        _p_sel_menu_component = _menu_components[_cur_menu_component_num];

        return true;
//  } else if (loop)  //loop показывает ходить по кругу или нет, как его изменить из скетча, не разобрался 
	} else //удалил чтобы меню ходило по кругу
    {
        _cur_menu_component_num = 0;
        _p_sel_menu_component = _menu_components[_cur_menu_component_num];

        return true;
    }

    return false;
}

Буду благодарен, если подскажите как все же запустить смену пунктов меню по кругу из скетча.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Вот то loop это булевая величина она или true или false. Попробуйте написать ms.next(1) глядишь пойдет...

alexnf
Offline
Зарегистрирован: 13.03.2015

Заработало! Спасибо.