shuttle control / pick list для дерева
От: Passer_by  
Дата: 02.09.08 13:43
Оценка:
Привет!

Интересно, можно ли использовать этот же контрол, только с иерархическим списком в виде дерева? Пример: Дерево1-Узел(a), Узел(b), Узел(c)и Дерево2-Узел(x), Узел(y), Узел(z). Узел(a) в Дереве1 надо добавить к Дереву2, причем нужна возможность добавлять как Sub и как Parent. Как можно решить эту задачу?
Вообще, была мысль нарисовать просто два дерева с необходимыми кнопками и радиобатонами Add Sub и Add Parent, но как-то неюзабельно получается.
Есть толковые мысли или кто-нить делал подобное?

04.09.08 18:14: Ветка выделена из темы как называется этот элемент GUI?
Автор: lepis
Дата: 11.08.08
— Кодт
Re: shuttle control / pick list для дерева
От: Hawk Россия  
Дата: 04.09.08 15:24
Оценка:
Здравствуйте, Passer_by, Вы писали:

P_>Как можно решить эту задачу?


Добавляем выбранные элементы всегда в конец дерева и даем возможность пользователю настроить получившуюся "заготовку" так, как ему надо. Настройку проще всего сделать с помощью кнопок "вниз", "вверх", "вправо", "влево". Кнопки "вниз"/"вверх" двигают ветки по вертикали, в пределах текущего уровня иерархии; "вправо"/влево" — по горизонтали, перемещая выбранные ветки по всем возможным уровням иерархии.

Кроме того, твою задачу можно решить с помощью drag-and-drop, но это сложнее.
Re: shuttle control / pick list для дерева
От: Кодт Россия  
Дата: 04.09.08 22:41
Оценка:
Здравствуйте, Passer_by, Вы писали:

P_>Интересно, можно ли использовать этот же контрол, только с иерархическим списком в виде дерева? Пример: Дерево1-Узел(a), Узел(b), Узел(c)и Дерево2-Узел(x), Узел(y), Узел(z). Узел(a) в Дереве1 надо добавить к Дереву2, причем нужна возможность добавлять как Sub и как Parent. Как можно решить эту задачу?


Зависит от содержательной структуры дерева.

Если структура предельно обобщённая, то просто выбираешь узел куда, выбираешь поддерево откуда, и вставляешь поддерево в это место.
Причём если порядок узлов не имеет значения либо фиксирован (узлы сортируются), то добавлять можно как дочерний от целевого. А если порядок пользовательский, то лучше добавлять на этот же уровень перед целевым узлом (тогда в шаттле в коллекции дочерних узлов должен быть один фиктивный концевой узел).
Как добавлять родительский узел — это мне непонятно. Может быть, встраиваться между целевым узлом и его родителем, создавая ещё один уровень иерархии?

Возможно, что здесь пригодится идея клипборда, обобщающая идею шаттла. (Заимствую из программ видеомонтажа и вёрстки).
То есть, имеется документ (дерево) и стол для клипов вокруг. Со стола можно брать клип и вставлять в документ, а можно отдирать кусок документа и перекладывать на стол.
Тогда операция вращения дерева (изменение уровня иерархии) выполняется в 3 приёма:
— удалить данное поддерево
— добавить другое поддерево — если мы собрались перенести вниз
— вставить наше поддерево в соответсвующий узел свежедобавленного поддерева




Если же иерархическая структура фиксированная, например, "жанр — исполнитель — альбом — трек", то и выдумывать ничего не надо. Находясь на соответсвующем уровне, получаешь соответсвующий список возможных вставок.

А ещё круче, когда наполнение каждого узла заранее известно. Например, это атрибуты форматирования текста, не имеющего каскадную структуру (т.е. не html, а rtf).

Может быть, даже дерево не стоит визуализировать.

Могут быть ещё варианты задач — я к тому, что нужно исходить из задачи. А не из внутренней структуры данных.
Перекуём баги на фичи!
Re: shuttle control / pick list для дерева
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.09.08 04:19
Оценка:
Здравствуйте, Passer_by, Вы писали:

P_>Есть толковые мысли или кто-нить делал подобное?

Толковых — нет. Подобное — вот.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: shuttle control / pick list для дерева
От: Passer_by  
Дата: 05.09.08 08:57
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Passer_by, Вы писали:


P_>>Есть толковые мысли или кто-нить делал подобное?

S>Толковых — нет. Подобное — вот.


Всем респект за ответы. Особое спасибо Sinclair — наглядно и удобно на мой взгляд, как всегда Вы скромничаете Такая реализация нам очень подходит. Структура дерева фиксированная.
А так же модератору, который вынес пост как отдельную тему.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.