AIMP Forum

Разное => Предложения (архив) / Suggestions (archive) => Архив / Archive => Реализовано в AIMP v4.00 / Implemented in AIMP v4.00 => Topic started by: Black_AVP_Bim on February 01, 2015, 17:45:07

Title: [Запланировано] Элемент подобный контейнеру - TASEPanel
Post by: Black_AVP_Bim on February 01, 2015, 17:45:07
Нередко возникает необходимость управлять видимостью сразу группы элементов. Сейчас для этого иногда можно применить контейнер. Когда он один - это ещё терпимо, но когда их два и более, да ещё и перекрывающихся - задача практически невыполнима, т.к. сокрытие одного контейнера влечёт за собой сдвиг всех остальных. Да и рассчёты отступов с точностью до пикселя весьма напрягают. Контейнеры хороши там, где изменяются размеры: растягивание, сокрытие.
Предлагаю добавить новый элемент на подобие контейнера, но без выравниваний, с абсолютными координатами и не зависящий от других контейнеров и себе подобных. Возможно и со свойствани группы или многостраничной группы, если это можно объединить в один элемент.
Title: Re: Элемент подобный контейнеру
Post by: Soolo on February 01, 2015, 18:22:49
было бы неплохо увидеть простенький пример, ибо я не догнал что к чему
Title: Re: Элемент подобный контейнеру
Post by: Black_AVP_Bim on February 01, 2015, 18:29:52
было бы неплохо увидеть простенький пример, ибо я не догнал что к чему
Да, далеко ходить не надо: пару часов назад мучался со своей последней Сонькой ( https://www.aimp.ru/forum/index.php?topic=47299.0 ) - там младший разряд счётчика - это TASETexture из 50 кадров, да скрываемый прогрессбар на кассете в контейнере, долго не мог понять где лишний пиксель в отступах растягивает MainClient. До этого ещё и сидишь с калькулятором, высчитывая все эти отступы, да ещё и относительные.
Да, в любом скине так, где надо что-то расположить в главном окне.
Смена кассет - тоже многостраничная группа, а может, и две, причём одна над другой с отрицательными смещениями, а между ними ещё контейнер с аниматорами рулонов ленты - это вообще кошмар!
Title: Re: Элемент подобный контейнеру
Post by: Black_AVP_Bim on February 01, 2015, 21:47:35
Ну, если ещё кто "не догнал" пример с иллюстрациями. 3 контейнера, видимостью каждого управляет своя кнопка. Смещения подписаны. В архиве два проекта: Cont_Top, в котором контейнеры выровнены по верху и Cont_Left, где выравнивание влево. При сокрытии 1-ого или 2-ого остальные смещаются, а в случае верхнего выравнивания при сокрытии 1-ого исчезают оба оставшихся.
Вот и хотелось бы имет некий статический контейнер с прямыми (абсолютными) координатами, без всяких выравниваний, чтоб не было этой "пляски".
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=47347.0;attach=42744)

Кстати, ещё один странный момент: элементы, принадлежащие Main (сикбар, в данном примере) расположены поверх контейнеров, входящих в MainClient, но элементы внутри этих котейнеров прорисовываются поверх первых.
Title: Re: Элемент подобный контейнеру
Post by: Tarik on February 02, 2015, 00:43:12
Конкретно данную проблему (со смещением контейтеров при скрытии) я решил 2-мя способами (при чем второй способ вышел случайно =) ):
1) У первого контейнера создаем дочерний контейнер (Container_1 - ПКМ - New SubItem). Создается дочерний контейнер, ему назначаем текстуру и его будем по кнопке скрывать (поправить связь кнопки №1). Но еще сначала для родительского контейнера нужно удалить текстуру и выставить минимальные размеры, такие же, как размеры дочернего контейнера.

2) Этот способ проще - Container_2 - ПКМ - New Item. Создается группа с двумя контейнерами (Container_2 и новосозданный контейнер). Опять же нужно только выставить минимальные размеры полученной группы, наш дочерний контейнер и кнопку его скрытия трогать вообще не надо. Новосозданный контейнер можно вообще удалить, останется родительская группа и наш дочерний контейнер.

Проект в аттаче.

Таким образом, проблема решается вложенными контейнерами, и по этому считаю, что выдумывать ничего нельзя.


Кстати, ещё один странный момент: элементы, принадлежащие Main (сикбар, в данном примере) расположены поверх контейнеров, входящих в MainClient, но элементы внутри этих котейнеров прорисовываются поверх первых.
Сначала рисуются все фоновые элементы (контейнеры и текстуры), а только затем поверх них рисуются элементы. Чтобы дочерние контейнеры скрывали под собой элементы управления, вместо назначения текстуры самим контейнерам, нужно у них создать текстовою метку и ей назначить текстуру контейнера. Естественно метку эту нужно растянуть по всему контейнеру. Данный "хак" Артем описывал давно в этой (https://www.aimp.ru/blogs/?p=466) статье. В примере в аттаче сделал так с зеленым контейнером
Title: Re: Элемент подобный контейнеру
Post by: Black_AVP_Bim on February 02, 2015, 09:58:54
Это всё кривокостыльные методы - так далеко можно уйти, меня такие решения не устраивают. Так же от гемора по рассчёту смещений это не избаляет - не одного меня это сильно нарпягает. Контейнеры хороши там, где они заполняют всю область и достаточно задать их выранивание и минимальные размеры.
И потом, я полагаю, Артёму будет несложно создать потомок от класса, описывающего свойства контейнера или многостраничной группы, убрав из них выранивание.
Title: Re: Элемент подобный контейнеру
Post by: Artem on February 02, 2015, 11:22:55
Это всё кривокостыльные методы - так далеко можно уйти, меня такие решения не устраивают. Так же от гемора по рассчёту смещений это не избаляет - не одного меня это сильно нарпягает. Контейнеры хороши там, где они заполняют всю область и достаточно задать их выранивание и минимальные размеры.
И потом, я полагаю, Артёму будет несложно создать потомок от класса, описывающего свойства контейнера или многостраничной группы, убрав из них выранивание.

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

Это весьма интересная задачка, но я не уверен, что ее можно просто решить, подумаю.
Title: Re: Элемент подобный контейнеру
Post by: Black_AVP_Bim on February 02, 2015, 13:18:27
Это весьма интересная задачка, но я не уверен, что ее можно просто решить, подумаю.
Спасибо, будем надеяться на положительное решение.
Title: Re: Элемент подобный контейнеру
Post by: Black_AVP_Bim on February 02, 2015, 15:11:11
2 Tarik: Так до сих пор и не могу понять, как создать LayoutItem  с одним контейнером?
Как временное решение - приемлимо. Но был случай, когда этих контейнеров было 5, в два ряда: 2 вверху и 3 снизу - тут уже огород получитися, если таким методом делать.
А если контейнеры ещё и перекрываются...
Title: Re: Элемент подобный контейнеру
Post by: Soolo on February 02, 2015, 15:14:35
2 Tarik: Так до сих пор и не могу понять, как создать LayoutItem  с одним контейнером?
Создаёшь группу (ПКМ по контейнеру, Новый пункт: Контейнер). Получается группа с двумя контейнерами: один старый, второй новый. Новый контейнер можно удалить.
Title: Re: [Запланировано] Элемент подобный контейнеру - TASEPanel
Post by: Kibermanick on February 03, 2015, 20:11:07
Да, было бы не плохо разделить контейнеры на контейнеры и папки. И чтобы элементы с нижних слоев не проскакивали на верх.

Действительно не удобно иногда использовать контейнер как папку.