CodeImp.Gluon.LibraryBrowserDisplayPanel.RefreshDirButtons C# (CSharp) Метод

RefreshDirButtons() приватный Метод

private RefreshDirButtons ( ) : void
Результат void
        private void RefreshDirButtons()
        {
            bool titlehidden = false;
            DisplayButton lastdirbutton = rootbutton;

            if(searchresults)
            {
                // Hide all buttons
                for(int i = 0; i < dirbuttons.Length; i++)
                    dirbuttons[i].Visible = false;

                // Setup buttons for search results
                dirbuttons[0].Visible = true;
                dirbuttons[0].Text = "Search results for \"" + searchstring + "\"";
                dirsizelabel.Text = dirbuttons[0].Text;
                dirbuttons[0].Width = Math.Min(dirsizelabel.Width, titlelabel.Left - dirbuttons[0].Left - 20);
                dirbuttons[0].Clickable = false;
                lastdirbutton = dirbuttons[0];
            }
            else
            {
                // Figure out path parts
                string proot = Path.GetFullPath(General.Settings.LibraryRoot);
                string pcur = Path.GetFullPath(currentpath);

                if(!pcur.StartsWith(proot))
                    throw new Exception("Current path does not contain root path. Fix me!");

                string relpath = pcur.Substring(proot.Length);
                relpath.Trim(Path.DirectorySeparatorChar);

                string[] pathparts;
                if(relpath.Length > 0)
                    pathparts = relpath.Split(Path.DirectorySeparatorChar);
                else
                    pathparts = new string[0];

                if(pathparts.Length > dirbuttons.Length)
                    throw new Exception("Paths longer than " + dirbuttons.Length + " directories deep are not supported. Fix me!");

                // Setup buttons
                for(int i = 0; i < dirbuttons.Length; i++)
                {
                    if(i < pathparts.Length)
                    {
                        dirsizelabel.Text = pathparts[i];
                        int width = Math.Min(dirsizelabel.Width, 300);
                        dirbuttons[i].Text = pathparts[i];
                        dirbuttons[i].Visible = true;
                        dirbuttons[i].Width = width;
                        dirbuttons[i].Clickable = true;
                        if(i > 0) dirbuttons[i].Left = dirbuttons[i - 1].Right + dirbuttons[i].Margin.Left + dirbuttons[i - 1].Margin.Right;
                        if(dirbuttons[i].Right > 777)
                        {
                            if(dirbuttons[i].Left > 1150)
                            {
                                // No room to display this button
                                dirbuttons[i].Visible = false;
                            }
                            else
                            {
                                // We have to hide the title to make room or the directory buttons
                                titlehidden = true;
                                if(dirbuttons[i].Right > barend.Left)
                                    dirbuttons[i].Width = barend.Left - dirbuttons[i].Left - barend.Margin.Left - barend.Margin.Right;
                                lastdirbutton = dirbuttons[i];
                            }
                        }
                        else
                        {
                            lastdirbutton = dirbuttons[i];
                        }
                    }
                    else
                    {
                        dirbuttons[i].Visible = false;
                    }
                }
            }

            // Adjust title label and directory filler
            titlelabel.Visible = !titlehidden;
            int fillerrightalign = titlehidden ? barend.Left : fillerright.Left;
            directoryfiller.Left = lastdirbutton.Right + directoryfiller.Margin.Left + lastdirbutton.Margin.Right;
            directoryfiller.Width = fillerrightalign - directoryfiller.Left;
        }