Библиотека сайта rus-linux.net
Audacity
Глава 2 из книги "Архитектура приложений с открытым исходным кодом", том 1.
Оригинал: Audacity,
глава из книги "The Architecture of Open Source Applications" том 1.
Автор: James Crook
Перевод: Н.Ромоданов
2.3. Слой ShuttleGui
Решить проблему с запутанным кодом позволил новый класс, ShuttleGui, который существенно сократил число строк кода, необходимого для спецификации диалоговых окон, что сделало код более удобным для чтения. Класс ShuttleGui представляет собой дополнительный слой между библиотекой wxWidgets и Audacity. Его задача заключается в передаче между ними информации. Ниже приведен пример, который, с конце концов, становится элементами графического пользовательского интерфейса, изображенного на рис.2.2.
ShuttleGui S; // GUI Structure S.StartStatic("Some Title",…); { S.AddButton("Some Button",…); S.TieCheckbox("Some Checkbox",…); } S.EndStatic();
Рис.2.2: Пример диалогового окна
В этом коде определяется статическая область в диалоговом окне и область, в которой находится кнопка и чекбокс. Соответствие между кодом и диалоговым окном должно быть очевидным. StartStatic
и EndStatic
являются парными вызовами. Другими подобными согласованными парами являются StartSomething
/EndSomething
, которые используются для управления другими элементами компоновки диалогового окна. Фигурные скобки и отступы, которые с ними используются, требуются не для того, чтобы код был правильным. Мы приняли соглашение о том, чтобы их добавлять для того, чтобы сделать более очевидными структуру и особенности согласования парных вызовов. Это действительно упрощает чтение больших примеров.
Показанный исходный код не только создает диалоговое окно. Код, идущий после комментария "//GUI Structure"
, также можно использовать для обмена данными между диалоговым окном и пользовательскими настройками, запоминаемыми на диске. Ранее для этого пришлось бы писать большой объем кода. В настоящее время этот код пишется только один раз, и скрыт в классе ShuttleGui
.
В Audacity есть и другие расширения для базовых виджетов wxWidgets. В Audacity есть свой собственный класс для управления панелями инструментов. Почему не использовать класс панелей инструментов, встроенный в wxWidget? Причина историческая: панели инструментов Audacity были написаны до того, как стал использоваться wxWidgets, в котором предоставлен класс панелей инструментов.
Продолжение статьи: Панель TrackPanel.