Чтобы использовать пользовательские элементы управления в Designer, необходимо скомпилировать их в динамическую библиотеку.
Скрипт компиляции можно найти по ссылке: https://github.com/zlgopen/awtk-widget-number-label/blob/master/src/SConscript
design — здесь хранятся исходные ресурсы примеров кода, которые можно открыть и отредактировать в Designer.
res — здесь хранятся ресурсы, необходимые для запуска примеров кода. Они создаются с помощью Designer или скриптом scripts/update_res.py.
bin — здесь находятся динамические библиотеки и исполняемые файлы.
lib — здесь находятся статические библиотечные файлы.
demos — здесь хранятся примеры кода.
idl — здесь находится сгенерированный файл IDL.
scripts — здесь находятся скрипты, генерирующие ресурсы.
src — здесь хранится исходный код элементов управления. Каждый элемент управления находится в отдельном каталоге.
tests — здесь находится тестовый код.
Пример:
├─design
│ └─default
├─res
│ └─assets
│ └─default
├─bin
├─lib
├─demos
├─docs
├─idl
├─scripts
├─src
│ └─number_label
└─tests
Полный пример можно посмотреть в number-label.
Имя типа элемента управления состоит из строчных английских слов, соединённых подчёркиванием.
Например:
#define WIDGET_TYPE_NUMBER_LABEL "number_label"
Тип элемента управления используется для его регистрации, чтобы его можно было использовать в XML UI-файлах.
Имя элемента управления должно отражать его функциональность.
В src имя подкаталога соответствует имени типа элемента управления.
Имя класса состоит из имени типа элемента управления и "_t".
Например:
typedef struct _number_label_t {
widget_t widget;
...
} number_label_t;
Пользовательские элементы управления могут иметь только widget_t в качестве родительского класса.
Имена функций-членов начинаются с имени типа элемента управления, за которым следует подчёркивание, и состоят из строчных слов.
Например:
/**
* @method number_label_set_format
* Устанавливает формат строки (используется для преобразования чисел с плавающей точкой в строки).
* @annotation ["scriptable"]
* @param {widget_t*} widget Объект элемента управления.
* @param {const char*} format Формат строки.
*
* @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
*/
ret_t number_label_set_format(widget_t* widget, const char* format);
Имена свойств состоят из строчных английских слов, соединённых подчёркиванием.
Имена свойств должны соответствовать именам свойств в XML UI-файлах.
Пример:
/**
* @property {char*} format
* @annotation ["set_prop","get_prop","readable","persitent","design","scriptable"]
*
* Формат строки.
*
*/
char* format;
Если изменение определённого свойства вызывает событие EVT_VALUE_CHANGED, то свойство должно поддерживать доступ через WIDGET_PROP_VALUE.
Например, свойство password элемента управления «Жестовый пароль» доступно для ввода пользователем и изменяет значение при изменении пароля. В функциях get_prop/set_prop доступ к свойству password должен осуществляться через WIDGET_PROP_VALUE.
static ret_t gesture_lock_get_prop(widget_t* widget, const char* name, value_t* v) {
gesture_lock_t* gesture_lock = GESTURE_LOCK(widget);
return_value_if_fail(gesture_lock != NULL && name != NULL && v != NULL, RET_BAD_PARAMS);
ret_t ret = RET_NOT_FOUND;
if (tk_str_eq(name, GESTURE_LOCK_PROP_PASSWORD) || tk_str_eq(name, WIDGET_PROP_VALUE)) {
value_set_str(v, gesture_lock->password);
ret = RET_OK;
}
return ret;
}
Если у элемента управления есть собственные события, они называются EVT, за которыми следуют заглавные английские слова, разделённые подчёркиванием.
Например:
/**
* @event {pointer_event_t} EVT_LONG_PRESS
* Событие длинного нажатия.
*/
Если в динамической библиотеке есть только один элемент управления, её имя совпадает с именем типа элемента управления. Если в динамической библиотеке несколько элементов управления, можно выбрать другое имя.
Функция регистрации элемента управления отвечает за регистрацию элементов управления в динамических библиотеках.
Имя функции регистрации должно начинаться с имени динамической библиотеки, затем добавляться "_register". Функция не имеет параметров и возвращает ret_t.
Например:
/**
* @method number_label_register
* Регистрирует элемент управления числовым текстом.
*
* @annotation ["global"]
*
* @return {ret_t} Возвращает RET_OK в случае успеха, иначе — ошибку.
*/
ret_t number_label_register(void);
Доступные режимы рендеринга включают OpenGL, AGGE-BGR565, AGGE-BGRA8888 и AGGE-MONO. По умолчанию поддерживаются все режимы, разделенные символом «|», но это можно изменить в зависимости от ситуации.
Имя функции получения поддерживаемых режимов рендеринга должно начинаться с имени динамической библиотеки, а затем добавляться "_supported_render_mode". Функция не имеет параметров и возвращает const char*.
Например:
/**
* @method number_label_supported_render_mode
* Получает поддерживаемые режимы рендеринга.
*
* @annotation ["global"]
*
* @return {const char*} Возвращает RET_OK в случае успеха, иначе — ошибку.
*/
const char* number_label_supported_render_mode(void);
Пользовательские элементы управления должны использовать стандартные комментарии AWTK. См. API Doc Format (api_doc.md).
AWTK предоставляет некоторые инструменты для создания IDL и таблиц экспорта символов динамических библиотек.
Например:
node ../awtk/tools/idl_gen/index.js idl/idl.json src/
Например:
node ../awtk/tools/dll_def_gen/index.js idl/idl.json src/number_label.def
Для использования этих инструментов необходимо установить nodejs.
Можно настроить зависимость динамической библиотеки от конкретной версии AWTK в файле project.json проекта пользовательского элемента управления.
Например:
{
...
"usesSdk": {
"awtk:minSdkVersion": "20070",
"awtk:maxSdkVersion": "20090",
"awtk:targetSdkVersion": "20090"
}
...
}
Параметр awtk:minSdkVersion является необязательным и указывает на минимальную совместимую версию.
Параметр awtk:maxSdkVersion является необязательным и указывает на максимальную совместимую версию.
Параметр awtk:targetSdkVersion является необязательным и указывает на оптимальную версию.
Номера версий соответствуют release_id в component.json выпущенных AWTK. Обратите внимание, что если явно не указано иное, предполагается совместимость со всеми версиями. Комментарий дополняется в следующем формате.
/**
...
* ```xml
* <!-- ui -->
* 控件初始属性的 xml 描述(如果描述中包含子控件,会同时创建)
* ```
...
* ```xml
* <!-- style -->
* 控件默认样式的 xml 描述(如果描述中包含其它控тей的样式,会同时添加到 default.xml 样式文件)
* ```
...
*/
Например:
/**
* @class number_label_t
* @parent widget_t
* @annotation ["scriptable","design","widget"]
* Числовой текстовый элемент управления.
*
* В xml используется тег «number\_label» для создания числового текстового элемента управления. Например:
*
* ```xml
* <!-- ui -->
* <number_label x="c" y="50" w="24" h="100" value="40" format="%.4lf" decimal_font_size_scale="0.5"/>
* ```
*
* Можно использовать style для настройки внешнего вида элемента управления, например, размера и цвета шрифта и т. д. Например:
*
* ```xml
* <!-- style -->
* <number_label>
* <style name="default" font_size="32">
* <normal text_color="black" />
* </style>
* <style name="green" font_name="led" font_size="32">
* <normal text_color="green" />
* </style>
* </number_label>
* ```
*/
Дизайнер инициализирует свойства и стиль элемента управления на основе вышеуказанного описания, но игнорирует атрибуты x и y.
Если необходимо изменить значок пользовательского элемента управления в Designer, поместите значок в указанное место.
Значок библиотеки указывает на значок, используемый для идентификации пользовательской библиотеки элементов управления или описания её функций на страницах «Выбор шаблона» или «Управление шаблонами» в Designer. Размер значка составляет 60*60 пикселей.
По умолчанию используется docs/images/widget_preview.png из пользовательской библиотеки элементов управления.
Если не указано иное, отображается пустое поле.
Значок в списке элементов управления указывает на значок данного элемента управления в списке элементов управления в Designer. Его размер составляет 48*48 пикселей.
По умолчанию используется docs/images/widget_list.png из пользовательской библиотеки элементов управления.
Если не указано иное, будет отображаться значок по умолчанию. Если пользовательская библиотека элементов управления содержит несколько элементов управления, можно использовать форму «widget_list_» + имя типа элемента управления для назначения отдельного значка элементу управления, например «widget_list_number_label.png».
Значок на панели объектов указывает на значок типа объекта, отображаемый слева от объекта в панели объектов в Designer. Его размер составляет 16*16 пикселей.
По умолчанию используется docs/images/widget_obj.png из пользовательской библиотеки элементов управления.
Если не указано иное, будет отображаться значок по умолчанию. Если пользовательская библиотека элементов управления содержит несколько элементов управления, можно использовать форму «widget_obj_» + имя типа элемента управления для назначения отдельного значка типу элемента управления, например «widget_obj_number_label.png».
Чтобы избежать необходимости устанавливать каталог include во время компиляции при использовании пользовательских библиотек элементов управления и улучшить взаимодействие с пользователем, требуется использовать относительные пути при включении заголовочных файлов в исходном коде.
Например, если number_label.h и number_label.c находятся в одном каталоге, то в number_label.c следует включить их следующим образом:
...
#include "number_label.h"
...
Если вы не используете относительный путь, пожалуйста, укажите каталог, который необходимо включить, в файле README.md пользовательской библиотеки элементов управления.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )