В документации от Devexpress указано, что перемещение по сетке осуществляется стрелками, а разворачивание/сворачивание узлов ctrl+стрелку влево/вправо - в данном случае вообще не реагирует на стрелки (по первому нажатию что-то происходит), хоть с контролом, хоть без - что я не включил или включив/не выключив сломал навигацию?
Не нашел никаких примеров по синхронизации выделения - дерево/сцена (то, что это повесить на коллбек изменения выделения - понимаю, а как программно навыделять/снять выделение со строк?) и не ясно как по изменению ячейки делать что-либо с объектом соответствующим (соответствие само и то, какой столбец).
Неясно также, что с множественным выделением - если мышью с шифтом или контролом навыбирать, то при клике только один чексбокс отрабатывает, - самому пробегатся по выделению и выставлять?
Сборная солянка кода с разных мест надергана и немного адаптирована под мою задачу:
try(destroyDialog testR)catch()
rollout testR "Test"
(
dotNetControl xtl "DevExpress.xtraTreeList.treeList" height:500
button btn_Refresh "Refresh"
fn addChildren xtl theNode theChildren =(
for c in theChildren do (
-- name, export, link, morph, texture, copy tex, start frame, end frame
newNode = xtl.appendNode #( c.name, false,false,false,false,false,0,100) theNode.id
addChildren xtl newNode c.children
)
)
fn initXtl xtl=(
xtl.OptionsSelection.MultiSelect = true
xtl.OptionsView.ShowRoot =true
xtl.OptionsView.ShowIndicator = true
xtl.OptionsView.AutoWidth = true
col=xtl.columns.add()
col.visible=true
col.caption="Objects"
col.OptionsColumn.AllowEdit=false
xtl.columns.item[0].fixed = xtl.columns.item[0].fixed.none
col=xtl.columns.add()
col.visible=true
col.caption="Export"
col.width=30
local riCheck=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit"
xtl.RepositoryItems.add riCheck
col.columnEdit=riCheck
col=xtl.columns.add()
col.visible=true
col.caption="Anim Link"
col.width=40
col.columnEdit=riCheck
col=xtl.columns.add()
col.visible=true
col.caption="Anim Morph"
col.width=55
col.columnEdit=riCheck
col=xtl.columns.add()
col.visible=true
col.caption="Texture"
col.width=30
col.columnEdit=riCheck
col=xtl.columns.add()
col.visible=true
col.caption="Copy texture"
col.width=55
col.columnEdit=riCheck
col=xtl.columns.add()
col.visible=true
col.caption="Start frame"
col.width=45
local xTraSpinner=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemSpinEdit"
xTraSpinner.SpinStyle=xTraSpinner.SpinStyle.vertical
xTraSpinner.minValue=0.0
xTraSpinner.maxValue=1.0
xTraSpinner.Increment=.1
xTraSpinner.UseCtrlIncrement=true
xTraSpinner.isFloatValue=true
xTraSpinner.AllowNullInput=xTraSpinner.AllowNullInput.false
xTraSpinner.nulltext="--- "
xtl.RepositoryItems.add xTraSpinner
col.columnEdit=xTraSpinner
col.UnboundType=col.UnboundType.Decimal
col=xtl.columns.add()
col.visible=true
col.caption="End frame"
col.width=40
local xTraSpinner=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemSpinEdit"
xTraSpinner.SpinStyle=xTraSpinner.SpinStyle.vertical
xTraSpinner.minValue=0
xTraSpinner.maxValue=100
xTraSpinner.Increment=1
xTraSpinner.UseCtrlIncrement=true
xTraSpinner.isFloatValue=false
xTraSpinner.AllowNullInput=xTraSpinner.AllowNullInput.false
xTraSpinner.nulltext="--- "
xtl.RepositoryItems.add xTraSpinner
col.columnEdit=xTraSpinner
col.UnboundType=col.UnboundType.Decimal
)
fn addTargetNamesToEtl xtl =(
xtl.ClearNodes()
theNodes=objects as array
n=#()
theRoot = xtl.appendNode #("root",false) -1
rootNodes =for o in objects where o.parent == undefined collect o
addChildren xtl theRoot rootNodes
)
/*
on xtl SelectionChanged senderArg arg do (
-- formatProps senderArg
for i = 1 to senderArg.selection.count do (
format "Index: % Value: % Display Text: %\n" columnIndex (senderArg.selection.item[i-1].getValue 1) (senderArg.selection.item[i-1].GetDisplayText 1)
)
)
on xtl CellValueChanged senderArg arg do (
print (senderArg.selection.item[0].GetDisplayText 1)
--senderArg.selection.item[0].setvalue 1 ((senderArg.selection.item[0].GetDisplayText 1) as float)
)
*/
on testR open do (
clearListener()
initXtl xtl
addTargetNamesToEtl xtl
xtl.ExpandAll()
)
on testR resized size do (
xtl.size=dotNetObject "System.Drawing.Size" (size.x-26) (size.y-35)
btn_Refresh.pos.y=size.y-25
)
on btn_Refresh pressed do (
addTargetNamesToEtl xtl
xtl.ExpandAll()
)
)
createDialog testR width:700 style:#(#style_resizing,#style_titlebar,#style_sysmenu)
Вопрос решил перенеся дерево-лист на MaxCustomControls.MaxForm, всё заработало как задумано, правда писанины стало куда как больше. Кому надо подробности - вопросы в личку.
Тему можно закрывать.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
ASK'R
Не нашел никаких примеров по синхронизации выделения - дерево/сцена (то, что это повесить на коллбек изменения выделения - понимаю, а как программно навыделять/снять выделение со строк?) и не ясно как по изменению ячейки делать что-либо с объектом соответствующим (соответствие само и то, какой столбец).
Неясно также, что с множественным выделением - если мышью с шифтом или контролом навыбирать, то при клике только один чексбокс отрабатывает, - самому пробегатся по выделению и выставлять?
Сборная солянка кода с разных мест надергана и немного адаптирована под мою задачу:
try(destroyDialog testR)catch() rollout testR "Test" ( dotNetControl xtl "DevExpress.xtraTreeList.treeList" height:500 button btn_Refresh "Refresh" fn addChildren xtl theNode theChildren =( for c in theChildren do ( -- name, export, link, morph, texture, copy tex, start frame, end frame newNode = xtl.appendNode #( c.name, false,false,false,false,false,0,100) theNode.id addChildren xtl newNode c.children ) ) fn initXtl xtl=( xtl.OptionsSelection.MultiSelect = true xtl.OptionsView.ShowRoot =true xtl.OptionsView.ShowIndicator = true xtl.OptionsView.AutoWidth = true col=xtl.columns.add() col.visible=true col.caption="Objects" col.OptionsColumn.AllowEdit=false xtl.columns.item[0].fixed = xtl.columns.item[0].fixed.none col=xtl.columns.add() col.visible=true col.caption="Export" col.width=30 local riCheck=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit" xtl.RepositoryItems.add riCheck col.columnEdit=riCheck col=xtl.columns.add() col.visible=true col.caption="Anim Link" col.width=40 col.columnEdit=riCheck col=xtl.columns.add() col.visible=true col.caption="Anim Morph" col.width=55 col.columnEdit=riCheck col=xtl.columns.add() col.visible=true col.caption="Texture" col.width=30 col.columnEdit=riCheck col=xtl.columns.add() col.visible=true col.caption="Copy texture" col.width=55 col.columnEdit=riCheck col=xtl.columns.add() col.visible=true col.caption="Start frame" col.width=45 local xTraSpinner=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemSpinEdit" xTraSpinner.SpinStyle=xTraSpinner.SpinStyle.vertical xTraSpinner.minValue=0.0 xTraSpinner.maxValue=1.0 xTraSpinner.Increment=.1 xTraSpinner.UseCtrlIncrement=true xTraSpinner.isFloatValue=true xTraSpinner.AllowNullInput=xTraSpinner.AllowNullInput.false xTraSpinner.nulltext="--- " xtl.RepositoryItems.add xTraSpinner col.columnEdit=xTraSpinner col.UnboundType=col.UnboundType.Decimal col=xtl.columns.add() col.visible=true col.caption="End frame" col.width=40 local xTraSpinner=dotNetObject "DevExpress.XtraEditors.Repository.RepositoryItemSpinEdit" xTraSpinner.SpinStyle=xTraSpinner.SpinStyle.vertical xTraSpinner.minValue=0 xTraSpinner.maxValue=100 xTraSpinner.Increment=1 xTraSpinner.UseCtrlIncrement=true xTraSpinner.isFloatValue=false xTraSpinner.AllowNullInput=xTraSpinner.AllowNullInput.false xTraSpinner.nulltext="--- " xtl.RepositoryItems.add xTraSpinner col.columnEdit=xTraSpinner col.UnboundType=col.UnboundType.Decimal ) fn addTargetNamesToEtl xtl =( xtl.ClearNodes() theNodes=objects as array n=#() theRoot = xtl.appendNode #("root",false) -1 rootNodes =for o in objects where o.parent == undefined collect o addChildren xtl theRoot rootNodes ) /* on xtl SelectionChanged senderArg arg do ( -- formatProps senderArg for i = 1 to senderArg.selection.count do ( format "Index: % Value: % Display Text: %\n" columnIndex (senderArg.selection.item[i-1].getValue 1) (senderArg.selection.item[i-1].GetDisplayText 1) ) ) on xtl CellValueChanged senderArg arg do ( print (senderArg.selection.item[0].GetDisplayText 1) --senderArg.selection.item[0].setvalue 1 ((senderArg.selection.item[0].GetDisplayText 1) as float) ) */ on testR open do ( clearListener() initXtl xtl addTargetNamesToEtl xtl xtl.ExpandAll() ) on testR resized size do ( xtl.size=dotNetObject "System.Drawing.Size" (size.x-26) (size.y-35) btn_Refresh.pos.y=size.y-25 ) on btn_Refresh pressed do ( addTargetNamesToEtl xtl xtl.ExpandAll() ) ) createDialog testR width:700 style:#(#style_resizing,#style_titlebar,#style_sysmenu)ASK'R
Тему можно закрывать.