Реализация декларативного языка графического интерфейса пользователя

Недавно я начал работать над проектом по созданию графического интерфейса пользователя с использованием некоторой формы декларативного языка. Я имею в виду, что мне нужно описать иерархию объектов без указания типа виджетов GUI, которые будут использоваться для «отображения» этой иерархии. Например, для некоторой существующей иерархии H с использованием нотации JSON (или чего-то подобного):

H = 
{
    "title" : "Label_1"
    "children" : 
    [
        {
            "title" : "Label_2"
            "children": 
            [
                {
                    "title": "Field_A"
                    "type": "Integer"
                    "value": 10
                },

                {
                    "title": "Field_B"
                    "type": "String"
                    "value": "YES"
                }
            ]
         }
    ]
}

Кто-то может построить простое окно, которое будет показано пользователю при нажатии кнопки с надписью «Label_1». В этом случае окно может называться «Метка_2» и иметь два поля с метками «Поле_A» и «Поле_B», принимающие целочисленные и логические значения соответственно.

Кто-то другой может поместить эту иерархию в древовидный список, например

--------------------------------------------------------
>Label_1                |
    >Label_2            |
        >Field_A        |   10
        >Field_B        |   YES

Мой первый вопрос: нужно ли мне создавать синтаксический анализатор языка, чтобы добиться чего-то подобного? Могу ли я тогда использовать JSON? Хотя мне не нужно поддерживать сложные иерархии, необходимо поддерживать взаимоисключающие иерархии (что-то вроде переключателей, включающих / отключающих параметры). У меня такое ощущение, что это похоже на синтаксический анализ языка с парой операторов. Не поймите меня неправильно, у меня образование в области машиностроения, и я не опытный программист.

Заранее благодарим вас за комментарии и помощь.


person GiFou    schedule 27.02.2010    source источник


Ответы (3)


JSON был бы одним из вариантов. Другой вариант - XML ​​- например, Microsoft использует XAML (XML диалект) именно для этой цели, а W3C имеет (довольно новую) спецификацию упаковки виджетов (с использованием другой диалект XML). Любой из них позволит вам использовать существующие парсеры вместо создания еще одного с нуля.

person Jerry Coffin    schedule 27.02.2010
comment
Итак, я думаю, я двигаюсь в правильном направлении. Спасибо. - person GiFou; 27.02.2010
comment
Эй, если речь идет о декларативном / c ++ / ui, почему не labs.trolltech.com/blogs/2009/05/13/qt-declarative-ui никому не приходит в голову? - person mlvljr; 28.02.2010
comment

То, что вы ищете, называется QML.

Это декларативный язык графического интерфейса Qt, основанный на JSON.

Мне было интересно то же самое, поэтому я начал поток для сбора информации о языках декларативного графического интерфейса с открытым исходным кодом. Если вы ищете альтернативы, проверьте это.

person Evan Plaice    schedule 03.06.2010

Я просто тестирую QML для реальной среды пользовательского интерфейса в проекте C ++, основанном на Qt. И я думаю, что это очень мощный декларативный язык, поэтому, если вы уже знаете некоторые основы Qt, вы можете его использовать.

Вы можете очень быстро создавать современные, профессиональные и красивые пользовательские интерфейсы. И вы также можете легко связать декларативный язык с вашим кодом C ++ и наоборот.

person msantamaria    schedule 15.07.2010