В этой главе мы расскажем о библиотеке wxWidgets и основных областях ее использования: коснемся истории проекта, вопросов лицензирования, архитектуры библиотеки и использующих эту библиотеку подпроектов (портов), а также расскажем о сообществе пользователей данной библиотеки.
wxWidgets — это инструментарий для написания десктопных и мобильных приложений с графическим пользовательским интерфейсом (graphical user interface, GUI). Эта библиотека является фреймворком, т.е. она реализует большую часть работы и поведения окон. Библиотека wxWidgets содержит огромное число классов и методов, которые программист может использовать и настраивать. Приложение обычно использует окно, содержащее стандартные элементы управления, возможно показывающее специальные изображения или графику, а также реагирующее на ввод с клавиатуры, манипулятора мыши или из других источников. Приложение также может взаимодействовать с другими процессами или управлять другими программами. Таким образом, wxWidgets позволяет легко написать приложения, которые могут делать все то, что могут делать современные программы.
Несмотря на то, что wxWidgets часто называют <<инструментарием для разработки GUI>>, фактически библиотека позволяет сделать намного больше и может быть полезна в самых разных областях разработки. Это следствие того, что приложения wxWidgets должны иметь возможность портирования на различные платформы, а поэтому библиотека содержит классы для работы с файлами и потоками ввода/вывода, нитями, настройками приложения, межпроцессорной коммуникацией, файлами помощи, базами данных и многим другим.
Одной из особенностей, выгодно отличающих wxWidgets от других фреймворков, таких как MFC или OWL, является ее поразительная переносимость. У wxWidgets есть программный интерфейс для приложений (Application Programming Interface, API), который одинаков (или почти одинаков) на всех поддерживаемых платформах. Это означает, к примеру, что вы можете написать свое приложение в системе Windows и, сделав небольшие изменения (или даже обойдясь без них), перекомпилировать вашу программу в Linux или Mac OS X. Это обстоятельство дает огромное преимущество по сравнению с полным переписыванием приложения под каждую платформу и в том числе означает, что вам не нужно изучать различные API для каждой платформы. Кроме того, библиотека позволяет идти в ногу с прогрессом. Когда меняется программная среда, wxWidgets меняется вместе с ней, позволяя вашим приложениям портироваться на самые последние версии систем, поддерживая большую часть их новых возможностей.
Другой приятной особенностью является то, что wxWidgets реализует родной вид и поведение программ. Некоторые фреймворки используют один и тот же код для элементов управления на различных платформах (возможно используя специальные темы, чтобы элементы управления были похожи на родные). В отличие от них, wxWidgets использует родные элементы везде, где это только возможно (и свой собственный набор элементов в противном случае), поэтому элементы не просто похожи на родные элементы платформы — они ими и являются. Это очень важно для конечного пользователя, так как даже самая маленькая, почти незаметная разница в поведении программы, по сравнению со стандартом платформы, может создать ощущение некоторой искусственности программы. Для примера рассмотрим рис.1.1, показывающий wxWidgets-приложение StoryLines (это инструмент, помогающий писателям графически представить хронологию произведения), запущенное в системе Windows XP.
Этот вид полностью соответствует виду типичного Windows-приложения с вкладками, полосами прокрутки и выпадающим списком, соответствующими выбранной пользователем теме. Аналогично, рис.1.2 показывает приложение StoryLines, запущенное под Mac OS X с ожидаемым для Aqua поведением и видом. В приложении отсутствует строка меню, так как, следуя соглашениям, принятым в Mac OS, меню для текущего окна отображается в верхней строке экрана.
Наконец, рис.1.3 показывает StoryLines как приложение GTK+, запущенное в системе Red Hat Linux.
Почему бы не использовать для этого Java? Несмотря на то, что Java великолепно подходит для web-приложений, она не всегда является хорошим выбором для десктопа. В частности, приложения на C++, использующие wxWidgets, быстрее, имеют более естественный вид и предсказуемое поведение, а также проще в установке, так как не зависят от капризной виртуальной машины Java. Использование C++ также позволяет получить доступ к низкоуровневой функциональности и легче интегрировать свое приложение с существующим кодом на C и C++. Именно по этим причинам очень мало популярных прикладных программ базируется на Java. Таким образом, wxWidgets позволит вам писать быстрые приложения, которые будут понятны пользователю.
wxWidgets является проектом с открытым исходным кодом. Обычно это означает, что вам не нужно платить за его использование (пока вы не захотите сделать пожертвование проекту!), но также имеет очень большое философское и стратегическое значение. Продукты с открытым кодом всегда противопоставляют их проприетарным эквивалентам. Используя wxWidgets, вы всегда знаете, что код, на который вы полагаетесь, никогда не исчезнет. Вы всегда сможете самостоятельно исправить любую проблему, поправив исходный код. Можно получить большое удовольствие, принимая участие в обсуждении проекта, нежели общаясь с персоналом, осуществляющим корпоративную поддержку проприетарных продуктов. Участники открытого проекта находятся там, так как они любят то, что делают и с удовольствием делятся своими знаниями, тогда как члены корпоративной поддержки не всегда так идеалистически мотивированы. Когда вы используете wxWidgets, вы попадаете во впечатляющее сообщество талантов, обладающих большими знаниями. Многие аспекты разработки приложений, которые в ином случае пришлось бы придумывать самостоятельно, инкапсулированы этими разработчиками в легко используемые классы, которые вы можете подключить к своему коду. Активное пользовательское сообщество проконсультирует вас в случае необходимости в списках рассылки. В рассылке можно обсудить не только wxWidgets, но также и другие вещи, близкие сердцу любого разработчика. Возможно, в один прекрасный день вы сами присоединитесь к wxWidgets и станете ее активным разработчиком.
Библиотека wxWidgets широко поддерживается компьютерной индустрией. Список пользователей включает в себя такие известные компании как AOL, AMD, CALTECH, Lockheed Martin, NASA, Open Source Applications Foundation, Xerox и многие другие. wxWidgets объединяет огромное число пользователей: от программистов-одиночек до огромных корпораций, от отделений компьютерных наук до центров медицинских исследований и от экологических организаций до индустрии телекоммуникаций. Библиотека используется множеством открытых проектов, таких как редактор музыки Audacity и системой управления базами данных pgAdmin III.
Люди используют wxWidgets по различным причинам: для одних это простая и элегантная замена MFC, для других — возможность легко менять платформу и перейти, например, с Microsoft Windows на Unix или Mac OS X. Проект wxWidgets также уделяет внимание поддержке мобильных платформ. Существуют порты для встраиваемых систем на базе Linux, Microsoft Pocket PC и (возможно порт скоро появится) Palm OS.