Adobe Adam and Eve (C++ ASL): как связать переменную Eve, чтобы она обновлялась в приложении C++?
Итак, мы знаем, как его скомпилировать, мы видели его демоверсии и любили его. Мы видели, вероятно, только один реальный проект с открытым исходным кодом на его основе. Поэтому я смотрю на примеры и вижу только 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++ под названием (Простая новая couting flatness
значение например)
Итак, как реализовать такую вещь с Adobe Adam и Eve и Boost ofcourse?
Обновить
Мы попытались сделать это здесь, и это сработало, но не в режиме обратной связи - только при закрытии диалога. И здесь, но из-за нашей компиляции, связанной с отсутствием Linux, мы приостановили разработку ASL-программирования и начали тратить время на компиляцию ASL для ОС Linux.
1 ответ
Хорошее место, чтобы задавать вопросы об ASL - в списке рассылки для разработчиков ASL: http://sourceforge.net/mail/?group_id=132417.
Возможно, вы захотите взглянуть на тестовое приложение "Начать". Хотя он работает только на Mac и Win, он демонстрирует, как все соединить.
Основная идея заключается в том, что при разборе описания макета (Eve) он вызывает ваш add_view_proc http://stlab.adobe.com/structadobe_1_1eve__callback__suite__t.html с выражением аргументов. Обычно вы используете bind_layout_proc для обратного вызова, который будет обрабатывать оценку аргумента для вашего и вызывать упрощенный обратный вызов, который принимает словарь с аргументами.
Когда ваш обратный вызов вызывается, вы обычно создаете соответствующий виджет и связываете словарь с виджетом или извлекаете интересующие аргументы из словаря и сохраняете их в структуре. Используя аргумент bind, вы можете настроить обратные вызовы с соответствующим листом (Адам), используя функции monitor_xxxx для sheet_t. Обычно вы будете использовать monitor_value и monitor_enabled. При вызове вы устанавливаете значение или включенное состояние в виджете. Когда значение виджетов изменяется пользователем и вызывается виджет (это может быть через обработчик событий, или обратный вызов, или любой другой механизм, поддерживаемый вашим инструментарием пользовательского интерфейса), вы вызываете sheet_t::set(), чтобы установить значение ячейки и затем sheet_t::update(), чтобы заставить лист пересчитать.
Вот и все - при попытке Адама / Евы использовать новую инфраструктуру пользовательского интерфейса - начните с малого. Я обычно начинаю с окна, содержащего два флажка, и сначала подключаю Еву. Как только это произойдет, добавьте Адама и простую таблицу, соединяющую две логические ячейки, чтобы вы могли видеть, все ли происходит правильно. Как только вы это сделаете, вы обнаружите, что довольно просто подключить гораздо более сложные интерфейсы.