TreeNode populateTree(Apps.CollectionNode root) { TreeNode node = new TreeNode(root.Name); node.Tag = root; node.Expand(); foreach (var item in root.Childs) { node.Nodes.Add(populateTree(item)); } return(node); }
private void Form1_Load(object sender, EventArgs e) { SuspendLayout(); string path = ""; TryRunCode("resolving root node path", () => { path = ((args.Length == 1) ? (args[0]) : (Environment.CurrentDirectory + "\\")); if (path.StartsWith("\"")) { path = path.Substring(1); } if (path.EndsWith("\"")) { path = path.Substring(0, path.Length - 1); } if (!path.EndsWith("\\")) { path += "\\"; } path = path.Replace("/", "\\"); if (path.StartsWith(@".\")) { path = path.Replace(@".\", Environment.CurrentDirectory + "\\"); } }); System.ComponentModel.BackgroundWorker back = new System.ComponentModel.BackgroundWorker(); back.DoWork += (object sender2, System.ComponentModel.DoWorkEventArgs e2) => { var s = e2.Argument as string; Apps.CollectionNode res = null; TryRunCode("loading nodes", () => { res = Apps.Load(s); }); Invoke(new Action <Apps.CollectionNode>((Apps.CollectionNode root) => { rootnode = root; AppsTree.Nodes.Add(populateTree(rootnode)); AppsTree.SelectedNode = AppsTree.Nodes[0]; var fil = Environment.CurrentDirectory + "\\Icon.ico"; ShowIcon = true; if (File.Exists(fil)) { Icon = new Icon(fil); } else if ((rootnode.Docs != null) && (rootnode.Docs.Icon != null)) { var bmp = new Bitmap(rootnode.Docs.Icon); var thumb = (Bitmap)bmp.GetThumbnailImage(24, 24, null, IntPtr.Zero); thumb.MakeTransparent(); Icon = Icon.FromHandle(thumb.GetHicon()); } else { ShowIcon = false; } Text = rootnode.Name; #region Hide tree if there is only one node if (rootnode.Childs.Count == 0) { // The root node is alone and bored; let's not show it being alone and make it sad AppsTree.Visible = false; Tabs.Left = 12; Tabs.Width = ClientSize.Width - 12 - Tabs.Left; VersionSelect.Left = 62; label1.Left = 12; AppIcon.Left = 12; AppTitle.Left = 46; } #endregion ResumeLayout(); }), res); }; back.RunWorkerAsync(path); AppTitleOriginalX = AppTitle.Left; }
private void AppsTree_AfterSelect(object sender, TreeViewEventArgs e) { SuspendLayout(); Apps.CollectionNode app = (Apps.CollectionNode)e.Node.Tag; #region Name and icon AppTitle.Text = app.Name; if (app.Docs != null) { AppIcon.Image = app.Docs.Icon; AppTitle.Left = AppTitleOriginalX; // Restore app title position } else { AppIcon.Image = null; AppTitle.Left = AppIcon.Left; // Hide app icon (reuse it's space) } #endregion #region Versions VersionSelect.BeginUpdate(); VersionSelect.Items.Clear(); if (app.Versions.Count > 0) { VersionSelect.Visible = true; VersionActions.Visible = true; label1.Visible = true; VersionSelect.Tag = app.Versions; foreach (var item in app.Versions) { VersionSelect.Items.Add(item.Name); } VersionSelect.SelectedIndex = VersionSelect.Items.Count - 1; } else { VersionSelect.Visible = false; VersionActions.Visible = false; label1.Visible = false; } VersionSelect.EndUpdate(); #endregion #region Docs Tabs.SuspendLayout(); if (app.Docs == null) { Tabs.Visible = false; } else { Tabs.Visible = true; #region Pages foreach (TabPage tab in Tabs.TabPages) { if (tab == ScreenshotTab) { continue; } Tabs.TabPages.Remove(tab); } foreach (var page in app.Docs.Pages) { var tab = new TabPage(page[0]); var browser = new WebBrowser(); browser.Dock = DockStyle.Fill; if ((page[2].EndsWith(".html", true, System.Globalization.CultureInfo.CurrentCulture)) || (page[2].EndsWith(".htm", true, System.Globalization.CultureInfo.CurrentCulture)) || (page[2].EndsWith(".xhtml", true, System.Globalization.CultureInfo.CurrentCulture))) { browser.Url = new Uri("file://" + (page[2].Replace('\\', '/'))); } else { browser.Url = new Uri("about:blank"); browser.Document.Write(page[1]); } browser.Navigating += webBrowser_Navigating; browser.Tag = page[2]; browser.ContextMenuStrip = DocPageContextMenu; browser.IsWebBrowserContextMenuEnabled = false; tab.Controls.Add(browser); Tabs.TabPages.Insert(Math.Max(Tabs.TabPages.Count - 1, 0), tab); } if ((Tabs.TabPages.Count > 1) && (Tabs.TabPages.Contains(ScreenshotTab))) { var docPaths = from TabPage tab in Tabs.TabPages where tab != ScreenshotTab select tab; Tabs.SelectedTab = docPaths.Last(); } #endregion #region Screen shots if (app.Docs.ScreenShots == null) { if (Tabs.TabPages.Contains(ScreenshotTab)) { Tabs.TabPages.Remove(ScreenshotTab); } } else { ScreenshotTab.Text = app.Docs.ScreenShotsDirectoryName; if (!Tabs.TabPages.Contains(ScreenshotTab)) { Tabs.TabPages.Add(ScreenshotTab); } Screenshots.Controls.Clear(); foreach (var item in app.Docs.ScreenShots) { var pb = new PictureBox(); pb.Image = item; pb.SizeMode = PictureBoxSizeMode.Zoom; pb.Size = GetScreenShotSize(pb, Screenshots); pb.Cursor = Cursors.Hand; pb.Click += new EventHandler((object sender2, EventArgs e2) => { if ((sender2 as PictureBox).Image.Tag != null) { Process.Start((sender2 as PictureBox).Image.Tag as string); } }); Screenshots.Controls.Add(pb); } } #endregion } Tabs.ResumeLayout(); #endregion #region Actions Actions.SuspendLayout(); Actions.Controls.Clear(); foreach (var item in app.Actions) { Button btn = new Button(); btn.Size = new Size(75, 23); btn.Text = item.Name; btn.Tag = item; btn.Click += new EventHandler(OpenResourceButton); btn.MouseUp += new MouseEventHandler(OpenResourceFolderButton); Actions.Controls.Add(btn); } Actions.ResumeLayout(); #endregion ResumeLayout(); CurrentNode = app; }