AIMP Forum

AIMP для Windows => Skin Editor / Skin Engine => Ошибки / Замечания => Topic started by: Killy on September 19, 2018, 02:35:17

Title: [1042] Copy structure / Paste structure - completely borked
Post by: Killy on September 19, 2018, 02:35:17
Или я не понимаю, как работает фича Copy structure / Paste structure, или она не работает. Пока что только получается ломать ранее сделанную работу.

У меня есть кусок дерева из контейнеров и контролов (например окно), который надо скопировать (сделать новое окно с такой же структурой для последующей модификации).

В контекстном меню имеющегося окна я выбираю "Copy structure", на новом пустом окне выбираю "Paste structure" (тут ещё можно попытаться вставить что-то в якобы родительский непустой объект, затерев его содержимое таким образом, но допустим первый урок усвоили).
Дальше происходит следующее, насколько я понимаю:
- для айтема применяются все свойства из того, чью структуру скопировали (включая имя айтема!);
- добавляются дочерние айтемы в соответствии со структурой;
- для них процесс повторяется рекурсивно.

Получается что этот процесс работает для айтемов-контейнеров, поскольку по какой-то причине в дереве допускается присутствие одноименных контейнеров. На первом же айтеме-контроле процесс прерывается с ошибкой "Айтем с таким именем уже есть".

При попытке скопировать структуру с айтема одного типа на айтем другого типа, сначала переписываются его свойства (включая имя), и только потом выдаётся сообщение об ошибке.

Соответственно, нужно доработки, чтобы этой полезной фичей можно было как-то пользоваться:
- проверять целевой айтем на пустоту, чтобы случайно не затереть имеющиеся айтемы (вариант добавлять а не затирать дочерние элементы, думаю, не слишком полезен);
- проверять соответствие типов айтемов перед тем как начинать что-то модифицировать;
- обеспечить уникальность имён (добавить/инкрементировать номер в имени айтема до тех пор, пока не получится уникальное имя).
Title: Re: [1042] Copy structure / Paste structure - completely borked
Post by: Artem on September 19, 2018, 18:07:56
идея этой функции в переносе структуры из одного проекта в другой. Почему копируются имена? тут все просто - к объектам может идти обращение из скриптов. поскольку обращение к объектам идет по их именам (а имя это просто строка, и она может формироваться динамически), движок не может отследить есть ли обращения.
Title: Re: [1042] Copy structure / Paste structure - completely borked
Post by: Killy on September 19, 2018, 18:46:12
Одно другому не мешает.

Ещё раз:
Если объектов с таким именем нет - вставлять как есть.
Если объект с таким именем уже есть - совсем не обязательно  с ошибкой прерывать процесс на середине. Может ли процесс вставки быть завершён и на каких условиях - лучше проверить заранее и спросить, согласен ли я на замену имён. Я буду предупреждён на случай, если у меня есть скрипты обращающиеся к релевантным объектам.

Пока что мне видится более надёжной ситуация, когда вставляемая копия имеет уникальное имя и не будет затронута никакими скриптами до тех пор пока я сам не впишу новое имя в них.