M.A.X.    Вы вошли как гость
Российский Клуб игроков M.A.X.
 
[Новости]   [Новичку]   [Энциклопедия]   [Документы]   [Файлы]   [Игроки]   [Архивы]   [Архив форума]  
[Новый сайт]   [M.A.X. Gold]   [Партии]  

 
 
 
Архив форума  МаксГолд
[Основной форум] [Голосования] [МаксГолд] [Off-Topic]
 


(Протестировано) Баги с менюшками  -  Hruks,  03.06.2010  19:00:57

Вот тут: http://www.rumaxclub.ru/forum_2/lv_4/post_6869.htm
писал уже про баг с менюшками. Криво закрываются.
Подебажил немного и нашёл что не так.
Исправления на бранче:
svn://maxgold.rumaxclub.ru:46022/maxgold/branches/hruks_MenuFix

Вот полный список:
Убирается меню юнита при вызове меню File и Отчёт
Исправил появление окна отчётов при выборе юнита из отчётов
Рефакторинг определения виртуальных кнопок.
Поправил опечатку mg_menu.blpmod вместо mg_menu.blbmod. Пониятия не имею что это, но должно быть так :)


Вот из-за того, чтобы сделать нормальную функцию
procedure SetGameMenu(MenuNum:byte)
begin
  game_menu_num:=MenuNum;
  mg_menu.game_menu_num:=MenuNum;
  mg_menu.rmnu:=false;
  // возможно ещё какие-то полезные инициализирующие действия
end;

...в коде везду используются зануления переменных по отдельности.
Ессно, где-то это забывается и возникают такие вот баги.

И вообще весь ввод-вывод нужно было разнести по разным модулям - стейты + общие кнопки, типа Alt+F4 + менюшки.
Очень мало менюшек, которые одновременно на экране. Так зачем каждый раз проверять что за меню сейчас? Не проще ли держать указатель текущего меню и таблицу, в котором будут зарегистрированы все input обработчики этого диалога?
Меню сменилось - указатели прописались. Нет менюшки - указатели пустые.
Сработала какая-нить функция типа mg_keyup и проверила - для keyup есть обработчик у текущего меню/диалога? Есть - вызвали. Нет, пошли далее - вызывать обработчики стейта.
А обработчик возвращает результат - его это кнопка или дальше пускать её процессинг. Для модельных диалогов например дальше пускать не надо, даже если кнопка не опознана.

Ладно, опять я увлёкся.
Проверяй дельту и заливай в транк, если ок.