pro mg_itbrowser_event, event
compile_opt strictarr
widget_control, event.top, get_uvalue=pstate
uname = widget_info(event.id, /uname)
case uname of
'tlb' : begin
tree = widget_info(event.top, find_by_uname='tree_root')
props = widget_info(event.top, find_by_uname='props')
tlbG = widget_info(event.top, /geometry)
newx = (event.x - 2 * tlbG.xpad - tlbG.space) / 2
newy = event.y - 2 * tlbG.ypad
widget_control, tree, scr_xsize=newx, scr_ysize=newy
widget_control, props, scr_xsize=newx, scr_ysize=newy
end
'tree' : begin
widget_control, event.id, get_uvalue=ocomp
props = widget_info(event.top, find_by_uname='props')
widget_control, props, set_value=ocomp
end
'props' :
endcase
end
pro mg_itbrowser_cleanup, tlb
compile_opt strictarr
widget_control, tlb, get_uvalue=pstate
ptr_free, pstate
end
pro mg_itbrowser_addids, ids, treeID, path=path, tool=otool
compile_opt strictarr
oItem = otool->getByIdentifier(path + ids[0])
childIndices = where(strmatch(ids, ids[0] + '*'), nchildren, $
complement=siblingIndices, ncomplement=nsiblings)
id = widget_tree(treeID, value=strmid(ids[0], 1), uvalue=oItem, $
uname='tree', folder=nchildren gt 1)
if (nchildren gt 1) then begin
childIDs = (strmid(ids[childIndices], strlen(ids[0])))[1:*]
mg_itbrowser_addids, childIDs, id, path=path + ids[0], tool=otool
endif
if (nsiblings gt 0) then begin
mg_itbrowser_addids, ids[siblingIndices], treeID, path=path, tool=otool
endif
end
pro mg_itbrowser, toolID
compile_opt strictarr
on_error, 2
if (n_elements(toolID) eq 0) then begin
myToolID = itGetCurrent(tool=otool)
if (myToolID eq '') then begin
message, 'No current iTool'
endif
endif else begin
oldToolID = itGetCurrent()
itCurrent, toolID
myToolID = itGetCurrent(tool=otool)
itCurrent, oldToolID
endelse
tlb = widget_base(title='iTools browser', uname='tlb', /row, /tlb_size_events)
tree = widget_tree(tlb, scr_xsize=400, scr_ysize=400, uname='tree_root')
props = widget_propertysheet(tlb, scr_xsize=400, scr_ysize=400, $
value=otool, uname='props')
ids = otool->findIdentifiers('*')
ids = strlowcase(ids)
path = strsplit(ids[0], '/', /extract)
toolsTree = widget_tree(tree, value=path[0], uname='tree', $
/expanded, /folder, uvalue=otool)
toolTree = widget_tree(toolsTree, value=path[1], uname='tree', $
/expanded, /folder, uvalue=otool)
baseID = '/' + path[0] + '/' + path[1]
mg_itbrowser_addids, strmid(ids, strlen(baseID)), toolTree, $
path=baseID, $
tool=otool
widget_control, tlb, /realize
state = { otool : otool $
}
pstate = ptr_new(state, /no_copy)
widget_control, tlb, set_uvalue=pstate
xmanager, 'mg_itbrowser', tlb, /no_block, $
event_handler='mg_itbrowser_event', $
cleanup='mg_itbrowser_cleanup'
end