void parseExamplesTree(IEnumerable<XElement> rootExamplesList, TreeNode parentNode)
        {
            foreach (XElement examples_sub in rootExamplesList)
            {
                IEnumerable<XElement> exampleList = from c in examples_sub.Elements("Example") select c;
                foreach (XElement example in exampleList)
                {
                    var serializer = new XmlSerializer(typeof(Example));
                    Example exampleObj = (Example)serializer.Deserialize(example.CreateReader());

                    TreeNode childNode = parentNode.Nodes.Add(exampleObj.Title);
                    TreeNodeData treeNodeData = new TreeNodeData();
                    treeNodeData.Path = Path.Combine(((TreeNodeData)(parentNode.Tag)).Path, exampleObj.FolderName);
                    treeNodeData.Example = exampleObj;
                    childNode.Tag = treeNodeData;
                    childNode.ImageIndex = 1;
                    childNode.SelectedImageIndex = 1;
                    IEnumerable<XElement> examples_list2 = from c in example.Elements("Examples") select c;
                    parseExamplesTree(examples_list2, childNode);
                }
            }
        }
        private void populateExamplesTree(string examplesDefinitionFile, string componentName)
        {
            if (!File.Exists(examplesDefinitionFile))
            {
                //dispay error message
                return;
            }
            examplesTree.Nodes.Clear();
            TreeNode parentNode = examplesTree.Nodes.Add(componentName);
            TreeNodeData treeNodeData = new TreeNodeData();
            treeNodeData.Path = "";
            parentNode.Tag = treeNodeData;
            XElement data = XElement.Load(examplesDefinitionFile);
            IEnumerable<XElement> folders = from c in data.Elements("Folders") select c;
            parseFoldersTree(folders, parentNode);

            //do same with examples
            IEnumerable<XElement> examples = from c in data.Elements("Examples") select c;
            parseExamplesTree(examples, parentNode);
            parentNode.ExpandAll();

            if (examplesTree.Nodes.Count > 0)
                examplesTree.Nodes[0].EnsureVisible();
        }
        void parseFoldersTree(IEnumerable<XElement> rootFoldersList, TreeNode parentNode)
        {
            foreach (XElement folders_sub in rootFoldersList)
            {
                IEnumerable<XElement> folderlist = from c in folders_sub.Elements("Folder") select c;
                foreach (XElement folder in folderlist)
                {
                    var serializer = new XmlSerializer(typeof(Folder));
                    Folder folderObj = (Folder)serializer.Deserialize(folder.CreateReader());

                    TreeNode childNode = parentNode.Nodes.Add(folderObj.Title);
                    TreeNodeData treeNodeData = new TreeNodeData();
                    treeNodeData.Path = Path.Combine(((TreeNodeData)(parentNode.Tag)).Path, folderObj.FolderName);
                    childNode.Tag = treeNodeData;
                    childNode.ImageIndex = 0;
                    IEnumerable<XElement> examples_list2 = from c in folder.Elements("Examples") select c;
                    parseExamplesTree(examples_list2, childNode);

                    IEnumerable<XElement> folders_list2 = from c in folder.Elements("Folders") select c;
                    parseFoldersTree(folders_list2, childNode);
                }

            }
        }
        private bool isValidNodeSelected()
        {
            /*if (examplesTree.SelectedNode != null)
                selectedNode = examplesTree.SelectedNode;*/

            if (selectedNode == null)
                return false;
            TreeNodeData treedata = new TreeNodeData();
            if (selectedNode.Tag == null)
                return false;

            treedata = (TreeNodeData)selectedNode.Tag;
            if (treedata.Example == null)
                return false;

            return true;
        }