Выложил в Public Domain свою/свой Harmonia GUI Framework.
Harmonia это GUI для D language — моя попытка сделать
нечто унифицированное для D как была\есть AWT для Java. Harmonia
пытается следовать духу AWT (простота использования и прозрачность)
Основные фичи Harmonia:
1) это так называемый "windowless" framework т.к. не использует системные child controls.
2) в связи с этим higly portable - наряду с основной win32 версией начаты работы
над портами Linux/Unix (pure X11) и MacOSX.
3) имеет встроенный простой и шустрый HTML engine. HTML используется в Harmonia
во многих местах. Например Dialog параметризиуется html.
В Harmonia html "компилируется" в нечто типа DOM bytecode array. Поэтому
html стало возможно использовать именно как средство построения thin clients
и highly interactive UI.
4) Harmonia единственный из мне известных GUI frameworks использущий capture/bubbling event propagation схему впервые введенную в HTML event model
( здесь ). Данный
механизм позволил в разы сократить объем кода framework и повысить
его понятность смею думать соответсвенно.
5) Harmonia это themed UI - т.е. поддерживает механизм сменных UI стилей на лету.
Отдельной строкой:
Из всех мне известных языков D самый удобный для GUI
строения и изготовления всего чего работает на клиенте. Самодостаточный,
garbage collectible и не требует никакого runtime.
В дистрибуции находится smile.dsw — файл проекта для компилляции и отладки
под MS VS 6 самой Harmonia и samples.
Вот как выглядит Hello World:
module samples.hello1;
// HTML Hello World.
import harmonia.ui.application;
import harmonia.ui.window;
import harmonia.html.view;
// HTML behavior can be attached to any container
// This time to the window.alias HtmlPanelT!(Window) HtmlWindow;
void HelloWorldStart()
{
HtmlWindow w = new HtmlWindow;
w.html =
"<HTML back-color='edit info'
text-align=center
vertical-align=middle>Hello World!</HTML>";
w.state = Window.STATE.SHOWN;
}
static this()
{
Application.onStart = &HelloWorldStart;
}
В проект приглашаются все желающие профессионалы.
Например создание IDE для D может получиться серьезным
проектом (в том числе коммерческим, буде на то желание).
Здравствуйте, c-smile, Вы писали:
CS>Выложил в Public Domain свою/свой Harmonia GUI Framework.
Будем посмотреть
Только вот пока сразу два недочета заметил —
— если активен какой-нибудь Edit (каретка мигает) и при этом раскрыть главное меню, то каретка не прибивается если перейти на другую вкладку — чтобы ее скрыть нужно снова щелкнуть по Edit.
— При закрытии диалогов. Если закрывать нажатием на кнопушку в заголовке, то перерисовывается все окно демки. В других случаях этого не происходит.
Да, и еще в догонку — при нажатом Space или Enter можно пользоваться Tab\Shift+Tab, что порождает "веселые" эффекты на Button, Check Box & Radio — они остаются подсвеченными, а реально на них фокуса уже нет.
Здравствуйте, Conr, Вы писали:
C>Здравствуйте, c-smile, Вы писали:
CS>>Выложил в Public Domain свою/свой Harmonia GUI Framework. C>Будем посмотреть
C>Только вот пока сразу два недочета заметил — C>- если активен какой-нибудь Edit (каретка мигает) и при этом раскрыть главное меню, то каретка не прибивается если перейти на другую вкладку — чтобы ее скрыть нужно снова щелкнуть по Edit.
Есть такое дело... Я пытаюсь использовать системную каретку
(TabletPC support requirement) но по всей видимости
с ней больше хлопот чем бенифитов. Будем чинить.
C>- При закрытии диалогов. Если закрывать нажатием на кнопушку в заголовке, то перерисовывается все окно демки. В других случаях этого не происходит.
Угу. Модальные циклы делаю руками поэтому пока возможны несуразицы.
( Також menu и другие popup тоже руками сделаны поэтому там тоже
не все гладко пока ).
C>А вообще здоровская вещь эта Harmonia
Ага. Спасибо. и D тоже рулез. И быстро работает.
Я думаю demo позволяет оценить скорость.
Выглядит отлично и контролы работают, как я заметил, правильнее чем в предыдущих версиях.
Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.
Здравствуйте, WinterMute, Вы писали:
WM>Выглядит отлично и контролы работают, как я заметил, правильнее чем в предыдущих версиях.
WM>Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.
У c-smile в Канаде сейчас ночь, поэтому отвечу я: да, планируется, в самое наиближайшее время.
Здравствуйте, c-smile, Вы писали:
CS>Помимо всего прочего это тоже я думаю была одна из серьезных мотиваций CS>разработчиков Avalon/XAML по уходу от стандартных HWND.
Да нет, там все намного банальнее. Во-первых hwnd это очень дорого, во-вторых со всякими непрямоугольными окошками тоже все очень непросто.
Здравствуйте, c-smile, Вы писали:
CS>Помимо всего прочего это тоже я думаю была одна из серьезных мотиваций разработчиков Avalon/XAML по уходу от стандартных HWND.
Там накручего столько и тАкого что старичку HWND и не снилось.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WinterMute, Вы писали:
WM>Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.
module harmonia.themes.theme;
задумывался с поддержкой system rendering тоже.
Будет сделано.
В принципе прицепить uxtheme.dll и сделать новую тему
на основе её функций это один два дня.
Если кто-то захочет себя попробовать себя в D — это хороший прожект.
И "людЯм" полезный.
Здравствуйте, WolfHound, Вы писали:
WH>Там накручего столько и тАкого что старичку HWND и не снилось.
Вопрос имею: что *реально* нужно накручивать базовым
элементам контроля и UI вообще?
С ними должно быть 1) удобно управлять и настраивать (customization)
2) рисовать по всякому и 3) система событий должна быть
гибкой чтобы можно было собирать из мелких кубиков
более сложные агрегаты. А что еще собственно?
(вопрос из ветки "Почему D?")
Кё>Андрей, а почему ты придерживаешься HTML в GUI?
Хороший вопрос. Но непонятно как на него отвечать.
Прежде всего зачем язык разметки в GUI?:
HTML выполняет три базовых функции: 1) layout manager
( в Harmonia нет layout managers в чистом виде вообще кроме HTML )
и 2) renderer всякой текстовой информации и оформления и
3) удобное средсво локализации
смотри имеем две версии:
<P>Please input amount of money: <INPUT id=amount /> and select currency <INPUT type=select /></P>
и
<P>Пожалуйста введите сумму денюжек: <INPUT id=amount /> и выберите тип валюты <INPUT type=select /></P>
Понятно что форма/диалог настраиваемая таким образом в разы лучше чем то что нам предлагает resource editor.
Почему именно HTML?
1) Зачем изобретать велосипед (XAML/XUL) когда уже все (почти) есть ? (XAML/XUL это нечто более чем просто разметка, но это мы опускаем пока)
2) Short learning curve.
3) Набор готовых средств для его создания.
4) Прверенность временем и много еще всякого.
В Harmonia HTML это скорее XHTML так как допускает только well-formed XML.
И еще одно "но" и принципиальное весьма — Проценты.
Проценты здесь это "проценты от свободного места" т.е. скажем нам надо
чтобы фраза
<P>Please input amount of money: <INPUT id=amount width=70% /> and select currency <INPUT type=select width=30%/></P>
занимала всю строку и размеры input устанавливались исходя из соотношения 7/3 — так и пишем (width attribute).
В живую как это "пружинится" можно посмотерть в Demo (закладка Basic Control Test — первые два edit box)
То же справедливо и для вертикальных контейнеров типа DIV.
Ну и потом HTML позволяет хорошо и естесвенно разделить оформительскую часть
от собсвенно логики UI.
Вот примерно так.
Да, еще...я не стал нагружать HTML функциями обработки событий как в XUL/XAML потому как
так считаю эти функции больше кода приложения чем деклараций. В коде оброботку событий
и логику *всегда* делать удобнее и эффективнее.
Но ничего не мешает приделать к Harmonia тот же DMDScript или LUA если задача того требует...
//|
//| Abstract list widget, base of ListBoxT(T) and TreeBoxT(T)
//|module harmonia.ui.controls.alist;
class AList: Scrollable!(Widgets)
{
public:
this(uint scrollbars) { _scrollbars = scrollbars;}
abstract int count();
abstract void drawItem(Graphics g, int itemNo, rect itemRc, bool isCurrent);
abstract int itemHeight();
...
}
Для организации любого списка тебе надо определить свои три метода (помечены abstract)
и все собственно.
CS>module harmonia.themes.theme; CS>задумывался с поддержкой system rendering тоже. CS>Будет сделано. CS>В принципе прицепить uxtheme.dll и сделать новую тему CS>на основе её функций это один два дня. CS>Если кто-то захочет себя попробовать себя в D — это хороший прожект. CS>И "людЯм" полезный.
Не знаю, получится ли у меня "за один два дня", на D я совсем ничего не писал, но мне это интерестно. В общем, если моё участие поможет, то буду рад внести "свои пять копеек". Почта у меня в профайле.
Еще пару слов по поводу стандартных контролов: лично я уже привык что двайной клик в edit-box'е приводит к выделению слова, в Harmonia, сейчас, просто перемещается каретка на место клика. И возможность плавной прокрутки была бы заметным плюсом.
Здравствуйте, WinterMute, Вы писали:
WM>Еще пару слов по поводу стандартных контролов: лично я уже привык что двайной клик в edit-box'е приводит к выделению слова, в Harmonia, сейчас, просто перемещается каретка на место клика. И возможность плавной прокрутки была бы заметным плюсом.
Согласен двумя руками.
Line Edit behavior — ( harmonia.ui.controls.behavior ) немного не доделан
в этом плане — например не хватает многих стандартных keyboard shortcuts и пр.
К слову сказать в Harmonia LineEdit behavior — это специальный драйвер (сам по себе не widget)
прямоугольной редактируемой области текста. Этот драйвер может цепляться
к любому widget. В т.ч. динамически.
Используется сейчас в EditBox и будет использоваться
в ComboBox, ListBox, TreeBox.
По поводу анимаций. У меня есть сейчас идея и кажется здравая. Но я её еще думаю.
Должно получиться просто и красиво.
Здравствуйте, c-smile, Вы писали:
CS>Выложил в Public Domain свою/свой Harmonia GUI Framework.
... CS>Загрузить Harmonia можно с моего SVN CS>http://www.terrainformatica.com/harmonia — урл на странице слева.
CS>Harmonia class map здесь.
CS>Больше доков пока нет но будут.
CS>В проект приглашаются все желающие профессионалы. CS>Например создание IDE для D может получиться серьезным CS>проектом (в том числе коммерческим, буде на то желание).
CS>Вот пока примерно все.
А может кто-нить выложить все это добро куда-нить?