Adobe Adam and Eve (C ++ ASL): как связать переменную Eve, чтобы она обновлялась в приложении C ++? - PullRequest
2 голосов
/ 22 июня 2011

Итак, мы знаем , как его скомпилировать , мы видели его демоверсии и нам понравилось. Мы видели, вероятно, только один реальный проект с открытым исходным кодом на его основе. Поэтому я смотрю на примеры и вижу только 3 довольно длинных приложения на C ++, которые могут заинтересовать меня ASL\test\adam_tutorial\, ASL\test\adam_smoke\, ASL\test\eve_smoke\. Но я до сих пор не понимаю, как работает простой файл Eve:

dialog(name: "Clipping Path")
{
 column(child_horizontal: align_fill)
 {
   popup(name: "Path:", bind: @path, items:
     [
     { name: "None", value: empty },
     { name: "Path 1", value: 1 },
     { name: "Path 2", value: 2 }
     ]);
   edit_number(name: "Flatness:", digits: 9, bind: @flatness);
  }
 button(name: "OK", default: true, bind: @result);
}

в нем файл Адама привязан к нему (теоретически, потому что я не совсем понимаю, как связать Еву с Адамом и не вижу учебника о том, как это сделать), с

sheet clipping_path
{
output:
result          <== { path: path, flatness: flatness };

interface:
unlink flatness : 0.0 <== (path == empty) ? 0.0 : flatness;
path            : 1;
}

в нем, сделать каждый раз, когда flatness переменная изменяет какую-то мою функцию C ++, называемую (например, простую с новым значением flatness)

Итак, как реализовать такое с Adobe Adam, Eve и Boost ofcourse?

Обновление

Мы попытались сделать это здесь , и это сработало, но не в режиме обратной связи - только при закрытии диалога. И чем здесь , но из-за нашей компиляции все о потере linux мы приостановили нашу разработку в программировании ASL и начали тратить время на компиляцию ASL в ОС Linux.

1 Ответ

3 голосов
/ 11 ноября 2011

Хорошее место, чтобы задать вопросы об ASL - список рассылки для разработчиков ASL: http://sourceforge.net/mail/?group_id=132417.

Возможно, вы захотите взглянуть на тестовое приложение "Begin".Хотя он работает только на Mac и Win, он демонстрирует, как все соединить.

Основная идея заключается в том, что при разборе описания макета (Eve) он вызовет ваш add_view_proc http://stlab.adobe.com/structadobe_1_1eve__callback__suite__t.html#a964b55af7417ae24aacbf552d1efbda4 с аргументамивыражение.Обычно вы используете bind_layout_proc для обратного вызова, который будет обрабатывать оценку аргумента для вашего и вызывать упрощенный обратный вызов, который принимает словарь с аргументами.

Когда вызывается ваш обратный вызов, вы обычно создаете соответствующий виджет и связываетеиз словаря в виджет или извлеките интересующие аргументы из словаря и сохраните их в структуре.Используя аргумент bind, вы можете настроить обратные вызовы с соответствующим листом (Адам), используя функции monitor_xxxx для sheet_t.Обычно вы будете использовать monitor_value и monitor_enabled.При вызове вы устанавливаете значение или включенное состояние в виджете.Когда значение виджетов изменяется пользователем и вызывается виджет (это может быть через обработчик событий, или обратный вызов, или любой другой механизм, поддерживаемый вашим инструментарием пользовательского интерфейса), вы вызываете sheet_t :: set (), чтобы установить значение ячейки.а затем sheet_t :: update (), чтобы заставить лист пересчитать.

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

...