Пример #1
0
        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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }