OberonCore
https://forum.oberoncore.ru/

#051 возможность скрывать меню
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6831
Страница 1 из 1

Автор:  Иван Денисов [ Воскресенье, 13 Февраль, 2022 21:43 ]
Заголовок сообщения:  #051 возможность скрывать меню

Так как в репозитории сосуществуют конкурирующие меню для плиточной и MDI версии, а также в силу необходимости для разных воркспейсов влключать и выключать некоторые меню, предложен и добавлен следующий код в StdMenuTool.

Код:
   PROCEDURE HideMenu* (IN name: ARRAY OF CHAR);
   VAR hm, tmp: HiddenMenu;
   BEGIN
      NEW(hm);
      hm.name := name$;
      IF hiddenList = NIL THEN
         hiddenList := hm
      ELSE
         tmp := hiddenList;
         WHILE tmp.next # NIL DO
            tmp := tmp.next
         END;
         tmp.next := hm
      END
   END HideMenu;
   
   PROCEDURE UnhideMenu* (IN name: ARRAY OF CHAR);
   VAR hm, tmp: HiddenMenu;
   BEGIN
      IF hiddenList # NIL THEN
         WHILE (hiddenList # NIL) & (hiddenList.name = name) DO
            hiddenList := hiddenList.next
         END;
         IF hiddenList # NIL THEN
            tmp := hiddenList;
            WHILE tmp.next # NIL DO
               IF tmp.next.name = name THEN tmp.next := tmp.next.next END;
               tmp := tmp.next
            END
         END
      END
   END UnhideMenu;
   
   PROCEDURE IsMenuHidden* (IN name: ARRAY OF CHAR): BOOLEAN;
   VAR tmp: HiddenMenu; res: BOOLEAN;
   BEGIN
      res := FALSE;
      tmp := hiddenList;
      WHILE tmp # NIL DO
         IF tmp.name = name THEN res := TRUE END;
         tmp := tmp.next
      END;
      RETURN res
   END IsMenuHidden;

Автор:  Иван Денисов [ Четверг, 24 Март, 2022 14:12 ]
Заголовок сообщения:  Re: #051 возможность скрывать меню

В связи с обнаружением такой супер универсальной функциональности StdMenuTool.UpdateFromText вопрос снимается с повестки. Желающие могут писать свои фильтры по объединению файлов меню, и передавать результат в эту процедуру самостоятельно. Просто замечательная новость. ББ не перестаёт радовать продуманностью деталей.

Код:
MODULE TestMenus;
   
   IMPORT Files, Views, StdMenuTool, TextModels, TextViews;
   
   PROCEDURE LoadFromFile* (path, name: ARRAY OF CHAR);
   VAR text: TextModels.Model; view: Views.View;
   BEGIN
      view := Views.OldView(Files.dir.This(path), name$);
      WITH view: TextViews.View DO
         StdMenuTool.UpdateFromText(view.ThisModel())
      ELSE END
   END LoadFromFile;

END TestMenus.

"TestMenus.LoadFromFile('Mod/Rsrc/ME', 'Menus_MOD.odc')"
"TestMenus.LoadFromFile('Mod/Rsrc/ME', 'Menus_SIM.odc')"

"TestMenus.LoadFromFile('System/Rsrc', 'Menus.odc')"


Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/