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;
}