public JsTree JsTreeWithFoldersAndGuidanceItems()
{
// ReSharper disable JoinDeclarationAndInitializer
var jsTree = new JsTree();
Func<Guid, List<Folder_V3>, JsTreeNode, List<Guid>> mapFolders = null;
Func<Guid, Guid, List<Guid>, JsTreeNode, List<Guid>> mapViews;
// ReSharper restore JoinDeclarationAndInitializer
//precalculate for performance reasons
var allViews = new Dictionary<Guid, View_V3>();
foreach(var view in GetViews())
if (allViews.hasKey(view.viewId))
"[getFolderStructure_Library] duplicate viewID: {0} from Library {0}".format(view.viewId, view.libraryId); // this should be moved into a TM Library health check
else
allViews.Add(view.viewId, view);
mapViews = (libraryId, folderId, viewIds, targetNode) =>
{
var viewsId = new List<Guid>();
foreach(var viewId in viewIds)
{
var view = allViews[viewId];//GetViewById(viewId.str());
var viewNodeText = view.viewId.str();
var viewNode = targetNode.add_Node(view.caption, viewNodeText);
//viewNode.state = "closed"; // views don't need this
viewNode.data.icon = "/Images/ViewIcon.png";
viewsId.add(view.viewId);
}
return viewsId;
};
mapFolders = (libraryId, folders, targetNode)=>
{
var folderViewsId = new List<Guid>();
foreach(var folder in folders)
{
var subFolderViewsId = new List<Guid>();
var folderId = folder.folderId;
var folderNode = targetNode.add_Node(folder.name);
folderNode.state = "closed";
folderNode.data.icon = "/Images/FolderIcon.png";
// ReSharper disable AccessToModifiedClosure
// ReSharper disable PossibleNullReferenceException
subFolderViewsId.AddRange(mapFolders(libraryId, folder.subFolders, folderNode));
// ReSharper restore PossibleNullReferenceException
// ReSharper restore AccessToModifiedClosure
var viewIds = (from view in folder.views
select view.viewId).toList();
subFolderViewsId.AddRange(mapViews(libraryId, folderId, viewIds, folderNode));
folderNode.attr.id = folderId.str();
folderViewsId.AddRange(subFolderViewsId);
}
return folderViewsId;
};
var sessionLibraryId = GetCurrentSessionLibrary();
var libraries = (sessionLibraryId == Guid.Empty)
? tmXmlDatabase.tmLibraries()
: tmXmlDatabase.tmLibrary(sessionLibraryId).wrapOnList();
foreach(var library in libraries)
{
var libraryNode =jsTree.add_Node(library.Caption);
//var mappedFolders = new Dictionary<string, List<Folder_V3>>();
mapFolders(library.Id, GetFolders(library.Id), libraryNode);
mapViews(library.Id, Guid.Empty, GetViewsInLibraryRoot(library.Id).guids(), libraryNode);
//libraryNode.state = "open";
libraryNode.state = "closed";
libraryNode.data.icon = "/Images/SingleLibrary.png";
var libraryNodeText = library.Id.str();
libraryNode.attr.id = libraryNodeText;
}
return jsTree;
}