Академический Документы
Профессиональный Документы
Культура Документы
Нестандартные GUI-тулкиты:
знакомство с Ultimate++
Установка
Основная страница проекта на Launchpad
(я пользуюсь Trisquel GNU/Linux 3.5) нахо-
дится здесь: https://launchpad.net/openshot.
Но мне потребовалась эксперименталь-
ная ветка, потому что статус поддержки
OpenShot для Ubuntu 9.10, на котором Интерфейс OpenShot
Нестандартные GUI-тулкиты.
Часть 1: Знакомство с Ultimate++
П
ри создании GUI-приложений для Linux выбор тулкита ни сторонние библиотеки, ни даже STL и Boost – все, начиная
играет первоочередную роль. Именно от него будет за- от контейнеров и заканчивая работой с XML и SQL, делается си-
висеть не только трудоемкость разработки, но перено- лами самой U++. Этим «глобальным изобретением велосипе-
симость программы, ее внешний вид и возможность дальней- да» U++ напоминает Qt. U++ включает несколько компонентов:
шего развития. Для определенности предположим, что прог- Набор стандартных библиотек:
рамма пишется на С++, т.к. рассмотрение привязок для различ- Core – строки, даты и время, библиотека контейнеров NTL
ных языков – это отдельная обширная тема. По сути выбор сво- (аналог STL с несколько иным поведением и, как утверж-
дится к тройке наиболее известных и популярных тулкитов: Qt, дается, более быстрая), обратные вызовы, многопоточ-
GTK+ и wxWidgets. Для небольших «легких» программ иногда ность, работа с XML и т.д.
используется FLTK. К сожалению, каждый из этих «трех китов» Draw – канва для растровой графики.
имеет свои специфические недостатки, поэтому альтернатив- CtrlCore – ядро GUI-приложений, обеспечивающее ото-
ные нестандартные GUI-тулкиты продолжают вызывать интерес. бражение окон, передачу событий, обработку логических
Нестандартные решения могут заинтересовать разработчиков координат и т.п.
либо выдающимся внешним видом виджетов, либо оригиналь- CtrlLib – библиотека виджетов.
ными приемами программирования, которые экономят время RichText – сложный форматированный текст с импортом/
на разработку и поддержку программ. Чтобы быть конкуренто- экспортом в RTF и HTML.
способными, они должны быть кроссплатформенными, поддер- SQL – функции для работы с SQL-запросами и интерфей-
живать Unicode и иметь интегрированную RAD-среду разработ- сы к СУБД SQLite3, MySQL, PostgreSQL, Microsoft SQL,
ки или хотя бы визуальный редактор форм. Oracle.
В этой статье рассмотрен тулкит Ultimate++. Внешний вид Esc – встраиваемый интерпретатор специфического
его виджетов ничем не примечателен (используются «родные» скриптового языка.
виджеты для каждой платформы), однако используемые прие- Web – работа с сетью и интернетом.
мы программирования кардинально отличаются от всех других Система управления компиляцией BLITZ-build.
тулкитов. Все компоненты U++ очень специфичны и в букваль- Полноценная интегрированная среда разработки TheIDE
ном смысле не похожи ни на что другое. Это относится и к син- с визуальным редактором компоновки виджетов.
таксису, в котором иногда трудно узнать С++ как таковой (хотя Система документирования Topic++.
это абсолютно стандартный С++, без каких-либо дополнений, Система анализа, автодополнения и оптимизации кода
как в Qt), и к откровенно странной IDE. Не ждите от U++ интуи- Assist++.
тивной понятности – тривиальные вещи нужно, зачастую, долго
«раскапывать» в документации и на форумах. «Барьер вхожде- Все эти компоненты рассчитаны на совместное использо-
ния» в U++ высок, но вложенные усилия затем быстро окупаются. вание и по отдельности работать не будут. Кроме того, орга-
Обзор U++
Ultimate++ (http://www.ultimatepp.org), из-
вестный как U++ и UPP, позиционируется
не столько как GUI-тулкит, сколько как це-
лостная инфраструктура (framework) для
быстрой разработки кроссплатформен-
ных приложений на С++. U++ распростра-
няется по свободной лицензии BSD и яв-
ляется бесплатным как для открытых, так
и для коммерческих разработок. Код GUI-
приложений, написанный с использовани-
ем U++ чрезвычайно лаконичен, и напоми-
нает код «сверхвысокого уровня», харак-
терный для скриптовых языков. Это до-
стигается повсеместным использованием
современных возможностей С++ во внут-
ренней структуре U++. На официальном
сайте имеется впечатляющее сравнение
идентичных программ написанных на U++,
Qt, wxWidgets и Java (http://www.ultimatepp.
org/www$uppweb$comparison$en-us.html).
Во всех случаях код на U++ намного коро-
че и понятнее, хотя и выглядит необычно.
Инфраструктура U++ спроектирована
так, что в идеале программисту не нужны Главное окно TheIDE
MyWindow(){
Такое «нанизывание» вызываемых методов характерно Title("Hello world!").MinimizeBox().MaximizeBox()
для U++ и делает код очень компактным. .Sizeable().SetRect(0, 0, 300, 230);
Добавим в окно нужные виджеты: два текстовых поля Add( l1.SetLabel("Первое число"). ↵
для операндов и подписи к ним, выпадающий список для ариф- LeftPosZ(10,STDSIZE).TopPosZ(10,30) );
Add( val1.HSizePosZ(90, 10).TopPosZ(15, 20) );
метических операций с подписью, кнопку «Вычислить» и над-
пись для вывода результата: Add( l2.SetLabel("Второе число"). ↵
LeftPosZ(10,STDSIZE).TopPosZ(40,30) );
Add( val2.HSizePosZ(90, 10).TopPosZ(45, 20) );
class MyWindow: public TopWindow {
public: Add( l3.SetLabel("Операция"). ↵
LeftPosZ(10,STDSIZE).TopPosZ(70,30) );
EditDouble val1, val2; // Поля ввода для операндов Add( operation.HSizePosZ(90, 10).TopPosZ(75, 20) );
Label l1,l2; // Подписи для полей ввода
DropList operation; // Выпадающий список операций Add( compute.SetLabel("Посчитать!"). ↵
Label l3; // Подпись для списка HSizePosZ(10, 10).TopPosZ(105, 20) );
Button compute; // Кнопка «вычислить»
Label result; // Надпись для результата Add( result.SetLabel("Результат:"). ↵
HSizePosZ(10, 10).TopPosZ(135, 20) );
}
Обращают на себя внимание несколько моментов. Во-первых, };
в U++ существуют особые типы полей ввода для вещественных
GUI _ APP _ MAIN {
и целых чисел. С использованием готового виджета EditDouble MyWindow w;
можно забыть о неправильном вводе числа пользователем. w.Run();
}
Во‑вторых, все виджеты создаются статически как обычные чле-
ны класса и нет нужды явно указывать их иерархию. Читабель- Легко заметить, что кириллица поддерживается без всяких
ность и простота кода от этого сильно выигрывают. Сравните: проблем. Выпадающий список пока пуст. Заполним его:
Следующий этап – разместить виджеты в окне. В U++ нет Функция SetIndex устанавливает выбранной первую опера-
«резиновой» компоновки, реализуемой в GTK+ или Qt с помо- цию «+», т.к. по умолчанию ни один элемент не выбран. Нужно
щью «сайзеров» (sizers). Вместо нее применяются так называ- сказать, что элементами выпадающего списка могут быть не
емые логические координаты, отсчитываемые от краев роди- только строки, а любые пары «ключ-значение». В данном слу-
тельского виджета. Для каждого виджета определена функция чае используется простейший вариант, когда задаются только
LeftPos(a,size), задающая расстояние от левого края родителя значения, а ключи генерируются автоматически.
до виджета и ширину виджета. Аналогично работают RightPos, На этом создание интерфейса можно считать законченным.
TopPos и BottomPos. Функция HSizePos(а,b) задает расстояния В следующей части статьи я опишу реализацию логики нашей
от левого и правого края родителя до виджета и дает виджету программы. Именно там в полной мере проявится «магия» U++.
менять ширину вместе с родителем. Так же работает VSizePos.
Забегая вперед, скажу, что в TheIDE есть удобный визуальный Семен Есилевский
редактор компоновок, который будет описан в следующей части (yesint4@yahoo.com)
Э
лектронное приложение «Open Open Source Software): теория и практиче- Желательный объем статей: 6000
Source» всегда открыто для сотруд- ское применение; исторические сведения, или 12000 символов (с пробелами). При-
ничества с новыми авторами, с чи- анализ сегодняшнего положения, прогно- меры актуальных сейчас тем для статей
тателями и их конструктивными предло- зы на будущее и другие аспекты, связан- публикуются на http://osa.samag.ru/todo.
жениями по улучшению издания, обо- ные с открытым ПО. Но не стоит строго ограничиваться при-
снованной критикой и любыми отзывами, Среди наиболее интересных на дан- веденными выше рамками!
с компаниями, занимающимися разработ- ный момент общих тем можно выделить: Публичное обсуждение «Open Source»
кой и продвижением программного обес- общие обзоры новых и/или интерес- проводится на форуме сайта журнала
печения с открытым кодом. Приветству- ных проектов Open Source и конкрет- «Системный администратор» по адресу:
ются все энтузиасты, желающие опубли- ных приложений, свежих версий дис- http://osa.samag.ru/forum. Связаться с ре-
ковать у нас свои статьи. Тематика нуж- трибутивов Linux, *BSD и других систем; дакцией можно по электронной почте
ных материалов очевидна из предназна- советы и рекомендации новичкам osa@samag.ru.
чения приложения, то есть FOSS (Free and в GNU; P.S. За статьи мы платим.
Подписные индексы:
Подписка на журнал
20780 * «Системный администратор»
+ диск с архивом статей
Российская Федерация Казахстан – по каталогу «Россий-
Подписной индекс: годовой – 20780, ская пресса» через ОАО «Казпочта»
81655 **
полугодовой – 81655
Каталог агентства «Роспечать»
и ЗАО «Евразия пресс»
Беларусь – по каталогу изданий стран
без диска
Подписной индекс: годовой – 88099, СНГ через РГО «Белпочта» (220050,
по каталогу агентства полугодовой – 87836 г. Минск, пр-т Ф. Скорины, 10)
«Роспечать» Объединенный каталог «Пресса Узбекистан – по каталогу «Davriy
России» nashrlar», российские издания через
Адресный каталог «Подписка за ра- агентство по распространению печати
88099 *
+ диск с архивом статей
бочим столом»
Адресный каталог «Библиотечный
«Davriy nashrlar» (7000029, г. Ташкент,
пл. Мустакиллик, 5/3, офис 33)
каталог» Армения – по списку номенклатуры
Альтернативные подписные агентства: «АРЗИ» через ГЗАО «Армпечать»
87836
без диска
** агентство «Интер-Почта»
(495) 500‑00-60, курьерская доставка
(375005, г. Ереван, пл. Сасунци Давида,
д. 2) и ЗАО «Контакт-Мамул» (375002,
по Москве г. Ереван, ул. Сарьяна, 22)
по каталогу агентства агентство «Вся Пресса» Грузия – по списк у номенк лат у-
«Пресса России» (495) 787‑34‑47 ры «АРЗИ» через АО «Сакпресса»
агентство «Курьер-Прессервис» (380019, г. Тбилиси, ул. Хошараульская,
агентство «ООО Урал-Пресс» 29) и АО «Мацне» (380060, г. Тбилиси,
(343) 375-62-74 пр-т Гамсахурдия, 42)
*
Годовой
**
Полугодовой Подписка On-line Молдавия – по каталогу через ГП «По-
http://www.arzi.ru шта Молдовей» (МД‑2012, г. Кишинев,
***
Диск вкладывается
в февральский http://www.gazety.ru бул. Штефан чел Маре, 134)
номер журнала, http://www.presscafe.ru по списку через ГУП «Почта Придне-
распространяется только стровья» (МD-3300, г. Тирасполь, ул.
на территории России СНГ Ленина, 17)
В странах СНГ подписка принимается по прайс-листу через ООО агентство
в почтовых отделениях по националь- «Editil Periodice» (МД‑2012, г. Киши-
ным каталогам или по списку номенкла- нев, бул. Штефан чел Маре, 134)
туры «АРЗИ»: Подписка для Украины:
Азербайджан – по объединенному Киевский главпочтамт
каталогу российских изданий через Подписное агентство «KSS»
предприятие по распространению пе- Телефон/факс (044)464-0220
чати «Гасид» (370102, г. Баку, ул. Джа-
вадхана, 21)