Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 15.05.05 07:52
Оценка: 310 (25)
Выложил в 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;
}


Вот скриншоты демо:



Вот демы на "пошшупать":
http://www.terrainformatica.com/harmonia/HarmoniaDemo.zip (470кб)

Загрузить Harmonia можно с моего SVN
http://www.terrainformatica.com/harmonia — урл на странице слева.

Harmonia class map здесь.

Больше доков пока нет но будут.

В проект приглашаются все желающие профессионалы.
Например создание IDE для D может получиться серьезным
проектом (в том числе коммерческим, буде на то желание).

Вот пока примерно все.

23.12.06 02:28: Перенесено модератором из 'Пользовательский интерфейс: проектирование, usability' — Кодт
Re: Harmonia GUI Framework
От: Conr Россия  
Дата: 15.05.05 16:38
Оценка: 18 (1)
Здравствуйте, c-smile, Вы писали:

CS>Выложил в Public Domain свою/свой Harmonia GUI Framework.

Будем посмотреть

Только вот пока сразу два недочета заметил —
— если активен какой-нибудь Edit (каретка мигает) и при этом раскрыть главное меню, то каретка не прибивается если перейти на другую вкладку — чтобы ее скрыть нужно снова щелкнуть по Edit.

— При закрытии диалогов. Если закрывать нажатием на кнопушку в заголовке, то перерисовывается все окно демки. В других случаях этого не происходит.

А вообще здоровская вещь эта Harmonia
Re[2]: Harmonia GUI Framework
От: Conr Россия  
Дата: 15.05.05 16:43
Оценка:
Здравствуйте, Conr, Вы писали:

Да, и еще в догонку — при нажатом Space или Enter можно пользоваться Tab\Shift+Tab, что порождает "веселые" эффекты на Button, Check Box & Radio — они остаются подсвеченными, а реально на них фокуса уже нет.
Re[2]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 15.05.05 18:50
Оценка:
Здравствуйте, 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 позволяет оценить скорость.

Никто не хочет Гармоничный Янус написать?
Re: Harmonia GUI Framework
От: Spidola Россия http://www.usametrics.ru
Дата: 16.05.05 09:24
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Выложил в Public Domain свою/свой Harmonia GUI Framework.


Ещё не разбирался, но ведь какие красивые скриншоты! Белая зависть.

P.S. А знак с тенью просто срубил наповал!
RSDN@Home : silent
Re[2]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 16.05.05 20:02
Оценка:
Здравствуйте, Spidola, Вы писали:


S>P.S. А знак с тенью просто срубил наповал!


Угу. На самом деле наличие возможности создания такого рода
эффектов есть прямое следствие наличия windowless архитектуры.

windowless архитектура позволяет делать эффективную отрисовку
всего дерева UI компонент на форме за один проход.

Помимо всего прочего это тоже я думаю была одна из серьезных мотиваций
разработчиков Avalon/XAML по уходу от стандартных HWND.
Re: Harmonia GUI Framework
От: WinterMute Россия http://yarrr.ru
Дата: 17.05.05 09:08
Оценка: +1
Выглядит отлично и контролы работают, как я заметил, правильнее чем в предыдущих версиях.

Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.
Re[2]: Harmonia GUI Framework
От: Зверёк Харьковский  
Дата: 17.05.05 09:30
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Выглядит отлично и контролы работают, как я заметил, правильнее чем в предыдущих версиях.


WM>Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.


У c-smile в Канаде сейчас ночь, поэтому отвечу я: да, планируется, в самое наиближайшее время.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
FAQ — це мiй ай-кью!
Re[3]: Harmonia GUI Framework
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.05.05 11:23
Оценка: +1
Здравствуйте, c-smile, Вы писали:

CS>Помимо всего прочего это тоже я думаю была одна из серьезных мотиваций

CS>разработчиков Avalon/XAML по уходу от стандартных HWND.

Да нет, там все намного банальнее. Во-первых hwnd это очень дорого, во-вторых со всякими непрямоугольными окошками тоже все очень непросто.
... << RSDN@Home 1.1.4 beta 7 rev. 455>>
AVK Blog
Re[3]: Harmonia GUI Framework
От: WolfHound  
Дата: 17.05.05 13:04
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Помимо всего прочего это тоже я думаю была одна из серьезных мотиваций разработчиков Avalon/XAML по уходу от стандартных HWND.

Там накручего столько и тАкого что старичку HWND и не снилось.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 17.05.05 17:34
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Планируется ли поддержка Native-skin'ов? Понятно что возня, в частности, с Win ThemeApi не из приятных, но пользователю будет комфортнее в узнаваемом окружении.


module harmonia.themes.theme;
задумывался с поддержкой system rendering тоже.
Будет сделано.
В принципе прицепить uxtheme.dll и сделать новую тему
на основе её функций это один два дня.
Если кто-то захочет себя попробовать себя в D — это хороший прожект.
И "людЯм" полезный.
Re[4]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 17.05.05 18:27
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Там накручего столько и тАкого что старичку HWND и не снилось.


Вопрос имею: что *реально* нужно накручивать базовым
элементам контроля и UI вообще?
С ними должно быть 1) удобно управлять и настраивать (customization)
2) рисовать по всякому и 3) система событий должна быть
гибкой чтобы можно было собирать из мелких кубиков
более сложные агрегаты. А что еще собственно?
Re: Зачем в Harmonia HTML?
От: c-smile Канада http://terrainformatica.com
Дата: 17.05.05 19:38
Оценка:
Здравствуйте, Кодёнок, Вы писали:

(вопрос из ветки "Почему 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 если задача того требует...
Re: Harmonia GUI Framework
От: Mamut Швеция http://dmitriid.com
Дата: 17.05.05 20:09
Оценка:
Гложет меня вопрос насчет Harmonia. Есть ли в Harmonia возможность реализовать виртуальные списки
Автор: Mamut
Дата: 27.04.05
?


dmitriid.comGitHubLinkedIn
Re[2]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 17.05.05 20:35
Оценка: 14 (1)
Здравствуйте, Mamut, Вы писали:

M>Гложет меня вопрос насчет Harmonia. Есть ли в Harmonia возможность реализовать виртуальные списки
Автор: Mamut
Дата: 27.04.05
?


Вот смотри Abstract List:


//|
//| 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)
и все собственно.
Re[3]: Harmonia GUI Framework
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.05 10:16
Оценка: +2 :))) :)
CS>Для организации любого списка тебе надо определить свои три метода (помечены abstract)
CS>и все собственно.


Хых. Теперь я знаю, с каим инструментарием в зубах я буду в очередной раз переписывать свой проект с нуля
... << RSDN@Home 1.1.4 beta 7 rev. 447>> ... <<Winamp is playing "Silence">> ...


dmitriid.comGitHubLinkedIn
Re[3]: Harmonia GUI Framework
От: WinterMute Россия http://yarrr.ru
Дата: 18.05.05 12:03
Оценка:
CS>module harmonia.themes.theme;
CS>задумывался с поддержкой system rendering тоже.
CS>Будет сделано.
CS>В принципе прицепить uxtheme.dll и сделать новую тему
CS>на основе её функций это один два дня.
CS>Если кто-то захочет себя попробовать себя в D — это хороший прожект.
CS>И "людЯм" полезный.

Не знаю, получится ли у меня "за один два дня", на D я совсем ничего не писал, но мне это интерестно. В общем, если моё участие поможет, то буду рад внести "свои пять копеек". Почта у меня в профайле.
Re: Harmonia GUI Framework
От: WinterMute Россия http://yarrr.ru
Дата: 18.05.05 13:25
Оценка: +2
Еще пару слов по поводу стандартных контролов: лично я уже привык что двайной клик в edit-box'е приводит к выделению слова, в Harmonia, сейчас, просто перемещается каретка на место клика. И возможность плавной прокрутки была бы заметным плюсом.
Re[2]: Harmonia GUI Framework
От: c-smile Канада http://terrainformatica.com
Дата: 18.05.05 19:00
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Еще пару слов по поводу стандартных контролов: лично я уже привык что двайной клик в edit-box'е приводит к выделению слова, в Harmonia, сейчас, просто перемещается каретка на место клика. И возможность плавной прокрутки была бы заметным плюсом.


Согласен двумя руками.

Line Edit behavior — ( harmonia.ui.controls.behavior ) немного не доделан
в этом плане — например не хватает многих стандартных keyboard shortcuts и пр.

К слову сказать в Harmonia LineEdit behavior — это специальный драйвер (сам по себе не widget)
прямоугольной редактируемой области текста. Этот драйвер может цепляться
к любому widget. В т.ч. динамически.
Используется сейчас в EditBox и будет использоваться
в ComboBox, ListBox, TreeBox.

По поводу анимаций. У меня есть сейчас идея и кажется здравая. Но я её еще думаю.
Должно получиться просто и красиво.
Re: Harmonia GUI Framework
От: okurietz Россия  
Дата: 20.05.05 05:51
Оценка:
Здравствуйте, 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>Вот пока примерно все.


А может кто-нить выложить все это добро куда-нить?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.