Просмотр полной версии : Как можно в разных ветвях Tree делать разные картинки?
Leximist
27.10.2006, 02:13
Как можно в разных ветвях Tree делать разные картинки?
Предполагается выводить дерево с разнородными объектами и хочется для каждого из объектов установить правило отображения картинки и текста в дереве. Интересно - это можно? Или нужно что-то совсем менять и переписывать себе своего Tree?
Leximist
27.10.2006, 11:23
Есть предположение, что такие вещи реализуются через написание собственного Renderer'а. Если кто-то уже такое реализовывал, пожалуйста, покажите грамотный пример.
Есть предположение, что такие вещи реализуются через написание собственного Renderer'а. Если кто-то уже такое реализовывал, пожалуйста, покажите грамотный пример.
Совершенно верное пердположение %). Наследуешь стандартный рендер и переопределяешь некоторые методы, в них зависимости от условий подставляешь свою иконку. Ну это типа теория, для практики пока нету времени %(
а почему не использовать встроенную возможность ?
setItemIcon () method
public function setItemIcon(item:Object, iconID:Class, iconID2:Class):void
Sets the associated icon for the item. Calling this method overrides the iconField
and iconFunction properties for this item if it is a leaf item. Branch items don't
use the iconField and iconFunction properties.
They use the folderOpenIcon and folderClosedIcon properties.
Parameters item:Object — Item to affect.
iconID:Class — Linkage ID for the closed (or leaf) icon.
iconID2:Class — Linkage ID for the open icon.
Leximist
27.10.2006, 16:07
Дело в том, что желательно просто установить тип нода, а дальше просто задать правило отображения того или иного типа нода.
А через такую функцию придется просто искать все ноды с нужным типом и менять у них картинку
Вот пример данных, которые я хочу отображать произвольным образом. То есть смотреть какой type у нода, и в зависимости от этого выводить соответствующую картинку для разных типов.
<mx:XMLList>
<node label="New" type="folder">
<node label="HTML Document" type="html"/>
<node label="Text Document" type="txt"/>
</node>
<node label="Close" type="folder">
<node label="HTML Document" type="html"/>
<node label="Text Document" type="txt"/>
</node>
<node label="Lex" type="folder">
<node label="HTML Document" type="html"/>
<node label="Text Document" type="txt"/>
</node>
</mx:XMLList>
а при генерации данного xml вставлять иконки ? :)
или использовать грубо говоря type как icon ? :)
но можно и делать свой рендерер, хотя я думаю есть еще способы, нужно будет как нить по эксперементировать.
Leximist
27.10.2006, 17:12
а при генерации данного xml вставлять иконки ? :)
или использовать грубо говоря type как icon ? :)
Все дело в том, что у компонента mx:Tree выводится стрелочка (в двух состояниях.. вниз и вверх), потом папочка (в двух состояниях.. открыта закрыта), потом сам листочек документа (в одном состоянии - просто документик). Вот эти все стандартные фишки для разных типов документов я хочу определить сам. Не то, что сразу для всех поменять, а вот именно к каждом конкретном случае разные картинки. Ну вот например хотя бы этот листочек с документиком переделать.
http://www.flasher.ru/forum/attachment.php?attachmentid=15621&stc=1&d=1161951048
Переделай itemRender который будет, в зависимости от ситуации/параметров айтема дераева, подставлять свою картинку/иконку.
Тут попробывал это сделать и наткнулся но то что если ты будешь наследовать стандартный айтем рендер у тебя ничего не получится, нужно делать все "с нуля", т.е. взять за основу что то типа UIComponent'a
или кнопки
В данном случае нужно просто сделать скин если я правильно понял седьмой пост
Сам не делал. Почитай Developer Guide (pdf с сайта Adobe) стр. 687-758
yana_flash
04.06.2007, 18:21
У меня было реализовано так (скорее всего, криво - но работает):
<mx:Tree x="518" y="16" height="486" width="160" id="treeDevices" showRoot="true" labelField="@label" dataProvider="{treeData}" change="treeChanged(event)"></mx:Tree>
...
[Embed(source="img/icon_1.png")]
[Bindable]
public var icon1:Class;
[Embed(source="img/icon_2.png")]
[Bindable]
public var icon2:Class;
[Embed(source="img/icon_3.png")]
[Bindable]
public var icon3:Class;
[Embed(source="img/icon_animated.swf")]
[Bindable]
public var icon4:Class;
[Bindable]
public var treeData:XMLList;
...
// Рекурсивный обход дерева
private function setIconsForXML(xml:XML,n:int):int {
treeDevices.setItemIcon(xml, icon1, icon2);
for each(var device:XML in xml.item) {
++n;
if (device.hasComplexContent()) {
n=setIconsForXML(device,n);
} else {
treeDevices.setItemIcon(device, icon3, null);
}
}
return n;
}
...
// Считали treeData из XML-файла
treeData = XMLList(event.target.data);
// Раскрашиваем ветки одними иконками, листья - другими
setIconsForXML(XML(treeData),0);
"Скорее всего криво" - потому, что пока не чувствую внутренней логики флекса (она, естественно есть, но я ей пока не прониклась).
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.