Субмодулі
Якщо ви уважно вивчали код до попередніх розділів інструкції, то могли помітити, що в одному із обробників кнопок, а саме при виборі пункту "Налаштування" головного меню гри, створюється не звичайний шаблон GUI для поточного контекста, але відкривається інший модуль.
Фактично, ми з вами вже пройшли через усі етапи створення нового модуля до Meowui. Залишилося тільки навчитися організовувати перемикання та оновлення субконтекстів з контексту будь-якого рівня. З ієрархією модулів можна ознайомитися в попередніх розділах цієї документації. Додавання підмодулів до головного контексту необхідне для його розвантаження на етапі розробки. Значно дешевше витратити час на оформлення додаткових класів субмодулів, ніж шукати помилки синхронізації в десятках станів одного суперкласу контексту.
Підмодуль, з точки зору розробника і користувача, це такий же модуль, як і будь-який інший, незалежно від глибини вкладеності. Його відмінність від контексту першого рівня полягає в тому, що оновленням і керуванням контекстів першого рівня займається менеджер контекстів, а оновленням і керуванням контекстів нижчого рівня займається батьківський контекст, в якому вони створені. Окрім цього, через велику глибину вкладення модулів може виникнути незначна втрата продуктивності. Тож, якщо для певного модуля важливий буквально кожен такт ядра мікроконтролера, тоді краще віддати управління цим модулем менеджеру контекстів.
Для роботи з субмодулем, його спершу необхідно створити. В каталозі main_menu_sub я створив один клас підконтексту, який буде відповідальний за відображення налаштувань гри. Як говорилося вище, створення такого класу контексту, не відрізняється від інших. Створення шаблонів GUI для нього так само не відрізняється. Для закриття субконтексту необхідно викликати або метод openContextByID та передати в нього відповідний ідентифікатор, або викликати метод release. Другий метод виконує те саме що й перший, тільки ідентифікатор наступного контексту самостійно скидає до 0. Так можна робити лише у субконтекстах, якщо потрібно тільки повернути контроль головному модулю, без відкриття іншого субмодуля.