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
-
Нередко возникает необходимость управлять видимостью сразу группы элементов. Сейчас для этого иногда можно применить контейнер. Когда он один - это ещё терпимо, но когда их два и более, да ещё и перекрывающихся - задача практически невыполнима, т.к. сокрытие одного контейнера влечёт за собой сдвиг всех остальных. Да и рассчёты отступов с точностью до пикселя весьма напрягают. Контейнеры хороши там, где изменяются размеры: растягивание, сокрытие.
Предлагаю добавить новый элемент на подобие контейнера, но без выравниваний, с абсолютными координатами и не зависящий от других контейнеров и себе подобных. Возможно и со свойствани группы или многостраничной группы, если это можно объединить в один элемент.
-
было бы неплохо увидеть простенький пример, ибо я не догнал что к чему
-
было бы неплохо увидеть простенький пример, ибо я не догнал что к чему
Да, далеко ходить не надо: пару часов назад мучался со своей последней Сонькой ( https://www.aimp.ru/forum/index.php?topic=47299.0 ) - там младший разряд счётчика - это TASETexture из 50 кадров, да скрываемый прогрессбар на кассете в контейнере, долго не мог понять где лишний пиксель в отступах растягивает MainClient. До этого ещё и сидишь с калькулятором, высчитывая все эти отступы, да ещё и относительные.
Да, в любом скине так, где надо что-то расположить в главном окне.
Смена кассет - тоже многостраничная группа, а может, и две, причём одна над другой с отрицательными смещениями, а между ними ещё контейнер с аниматорами рулонов ленты - это вообще кошмар!
-
Ну, если ещё кто "не догнал" пример с иллюстрациями. 3 контейнера, видимостью каждого управляет своя кнопка. Смещения подписаны. В архиве два проекта: Cont_Top, в котором контейнеры выровнены по верху и Cont_Left, где выравнивание влево. При сокрытии 1-ого или 2-ого остальные смещаются, а в случае верхнего выравнивания при сокрытии 1-ого исчезают оба оставшихся.
Вот и хотелось бы имет некий статический контейнер с прямыми (абсолютными) координатами, без всяких выравниваний, чтоб не было этой "пляски".
(https://www.aimp.ru/forum/index.php?action=dlattach;topic=47347.0;attach=42744)
Кстати, ещё один странный момент: элементы, принадлежащие Main (сикбар, в данном примере) расположены поверх контейнеров, входящих в MainClient, но элементы внутри этих котейнеров прорисовываются поверх первых.
-
Конкретно данную проблему (со смещением контейтеров при скрытии) я решил 2-мя способами (при чем второй способ вышел случайно =) ):
1) У первого контейнера создаем дочерний контейнер (Container_1 - ПКМ - New SubItem). Создается дочерний контейнер, ему назначаем текстуру и его будем по кнопке скрывать (поправить связь кнопки №1). Но еще сначала для родительского контейнера нужно удалить текстуру и выставить минимальные размеры, такие же, как размеры дочернего контейнера.
2) Этот способ проще - Container_2 - ПКМ - New Item. Создается группа с двумя контейнерами (Container_2 и новосозданный контейнер). Опять же нужно только выставить минимальные размеры полученной группы, наш дочерний контейнер и кнопку его скрытия трогать вообще не надо. Новосозданный контейнер можно вообще удалить, останется родительская группа и наш дочерний контейнер.
Проект в аттаче.
Таким образом, проблема решается вложенными контейнерами, и по этому считаю, что выдумывать ничего нельзя.
Кстати, ещё один странный момент: элементы, принадлежащие Main (сикбар, в данном примере) расположены поверх контейнеров, входящих в MainClient, но элементы внутри этих котейнеров прорисовываются поверх первых.
Сначала рисуются все фоновые элементы (контейнеры и текстуры), а только затем поверх них рисуются элементы. Чтобы дочерние контейнеры скрывали под собой элементы управления, вместо назначения текстуры самим контейнерам, нужно у них создать текстовою метку и ей назначить текстуру контейнера. Естественно метку эту нужно растянуть по всему контейнеру. Данный "хак" Артем описывал давно в этой (https://www.aimp.ru/blogs/?p=466) статье. В примере в аттаче сделал так с зеленым контейнером
-
Это всё кривокостыльные методы - так далеко можно уйти, меня такие решения не устраивают. Так же от гемора по рассчёту смещений это не избаляет - не одного меня это сильно нарпягает. Контейнеры хороши там, где они заполняют всю область и достаточно задать их выранивание и минимальные размеры.
И потом, я полагаю, Артёму будет несложно создать потомок от класса, описывающего свойства контейнера или многостраничной группы, убрав из них выранивание.
-
Это всё кривокостыльные методы - так далеко можно уйти, меня такие решения не устраивают. Так же от гемора по рассчёту смещений это не избаляет - не одного меня это сильно нарпягает. Контейнеры хороши там, где они заполняют всю область и достаточно задать их выранивание и минимальные размеры.
И потом, я полагаю, Артёму будет несложно создать потомок от класса, описывающего свойства контейнера или многостраничной группы, убрав из них выранивание.
Нет, это будет весьма сложно, т.к. абсолютное позиционирование там не заложено в принципе. Тарик предложил вполне нормальное решение с позиционированием. А вот что касается второй проблемы - тут да, это выглядит как костыль, и его можно было бы решить предложенным тобой вариантом - введением отдельно элемента управления, который бы позволял класть на себя другие элементы управления.
Это весьма интересная задачка, но я не уверен, что ее можно просто решить, подумаю.
-
Это весьма интересная задачка, но я не уверен, что ее можно просто решить, подумаю.
Спасибо, будем надеяться на положительное решение.
-
2 Tarik: Так до сих пор и не могу понять, как создать LayoutItem с одним контейнером?
Как временное решение - приемлимо. Но был случай, когда этих контейнеров было 5, в два ряда: 2 вверху и 3 снизу - тут уже огород получитися, если таким методом делать.
А если контейнеры ещё и перекрываются...
-
2 Tarik: Так до сих пор и не могу понять, как создать LayoutItem с одним контейнером?
Создаёшь группу (ПКМ по контейнеру, Новый пункт: Контейнер). Получается группа с двумя контейнерами: один старый, второй новый. Новый контейнер можно удалить.
-
Да, было бы не плохо разделить контейнеры на контейнеры и папки. И чтобы элементы с нижних слоев не проскакивали на верх.
Действительно не удобно иногда использовать контейнер как папку.