remove buggy implementation of menu overflow. #1015

This commit is contained in:
Hylke Bons 2012-11-11 12:39:28 +00:00
parent 95c7cc18b3
commit 76df36f734
4 changed files with 9 additions and 174 deletions

View file

@ -190,50 +190,9 @@ namespace SparkleShare {
}
Menu submenu = new Menu ();
i = 0;
foreach (string folder_name in Controller.OverflowFolders) {
ImageMenuItem item = new SparkleMenuItem (folder_name);
Gdk.Pixbuf folder_icon;
if (!string.IsNullOrEmpty (Controller.OverflowFolderErrors [i])) {
folder_icon = IconTheme.Default.LoadIcon ("dialog-warning", 16,
IconLookupFlags.GenericFallback);
item.Submenu = new Menu ();
MenuItem error_item = new MenuItem (Controller.OverflowFolderErrors [i]) {
Sensitive = false
};
(item.Submenu as Menu).Add (error_item);
} else {
folder_icon = IconTheme.Default.LoadIcon ("folder", 16,
IconLookupFlags.GenericFallback);
}
item.Image = new Image (folder_icon);
item.Activated += OpenFolderDelegate (folder_name);
submenu.Add (item);
i++;
}
if (submenu.Children.Length > 0) {
SparkleMenuItem more_item = new SparkleMenuItem ("More Projects") {
Submenu = submenu
};
this.menu.Add (new SeparatorMenuItem ());
this.menu.Add (more_item);
}
}
this.menu.Add (new SeparatorMenuItem ());
this.recent_events_item = new MenuItem ("Recent Changes…");

View file

@ -30,16 +30,13 @@ namespace SparkleShare {
public SparkleStatusIconController Controller = new SparkleStatusIconController ();
private NSMenu menu;
private NSMenu submenu;
private NSStatusItem status_item;
private NSMenuItem state_item;
private NSMenuItem folder_item;
private NSMenuItem [] folder_menu_items;
private NSMenuItem [] submenu_items;
private NSMenuItem more_item;
private NSMenuItem add_item;
private NSMenuItem about_item;
private NSMenuItem recent_events_item;
@ -62,7 +59,6 @@ namespace SparkleShare {
private NSImage sparkleshare_image;
private EventHandler [] folder_tasks;
private EventHandler [] overflow_tasks;
public SparkleStatusIcon () : base ()
@ -231,12 +227,10 @@ namespace SparkleShare {
this.menu.AddItem (this.folder_item);
this.folder_menu_items = new NSMenuItem [Controller.Folders.Length];
this.submenu_items = new NSMenuItem [Controller.OverflowFolders.Length];
if (Controller.Folders.Length > 0) {
this.folder_tasks = new EventHandler [Controller.Folders.Length];
this.overflow_tasks = new EventHandler [Controller.OverflowFolders.Length];
int i = 0;
foreach (string folder_name in Controller.Folders) {
NSMenuItem item = new NSMenuItem ();
@ -264,55 +258,11 @@ namespace SparkleShare {
i++;
};
i = 0;
foreach (string folder_name in Controller.OverflowFolders) {
NSMenuItem item = new NSMenuItem ();
item.Title = folder_name;
if (!string.IsNullOrEmpty (Controller.OverflowFolderErrors [i])) {
item.Image = this.caution_image;
item.Submenu = new NSMenu ();
NSMenuItem error_item = new NSMenuItem () {
Title = Controller.OverflowFolderErrors [i]
};
item.Submenu.AddItem (error_item);
} else {
item.Image = this.folder_image;
}
item.Image.Size = new SizeF (16, 16);
this.overflow_tasks [i] = OpenFolderDelegate (folder_name);
this.submenu_items [i] = item;
this.submenu_items [i].Activated += this.overflow_tasks [i];
i++;
};
}
foreach (NSMenuItem item in this.folder_menu_items)
this.menu.AddItem (item);
if (this.submenu_items.Length > 0) {
this.submenu = new NSMenu ();
foreach (NSMenuItem item in this.submenu_items)
this.submenu.AddItem (item);
this.more_item = new NSMenuItem () {
Title = "More Projects",
Submenu = this.submenu
};
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.more_item);
}
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.recent_events_item);

View file

@ -48,15 +48,9 @@ namespace SparkleShare {
public IconState CurrentState = IconState.Idle;
public string StateText = "Welcome to SparkleShare!";
public readonly int MenuOverflowThreshold = 9;
public readonly int MinSubmenuOverflowCount = 3;
public string [] Folders;
public string [] FolderErrors;
public string [] OverflowFolders;
public string [] OverflowFolderErrors;
public string FolderSize {
get {
@ -228,49 +222,29 @@ namespace SparkleShare {
private void UpdateFolders ()
{
int overflow_count = (Program.Controller.Folders.Count - MenuOverflowThreshold);
Folders = Program.Controller.Folders.ToArray ();
FolderErrors = new string [Folders.Length];
if (overflow_count >= MinSubmenuOverflowCount) {
Folders = Program.Controller.Folders.GetRange (0, MenuOverflowThreshold).ToArray ();
OverflowFolders = Program.Controller.Folders.GetRange (MenuOverflowThreshold, overflow_count).ToArray ();
} else {
Folders = Program.Controller.Folders.ToArray ();
OverflowFolders = new string [0];
}
string [] errors = new string [Folders.Length];
string [] overflow_errors = new string [OverflowFolders.Length];
int i = 0;
foreach (SparkleRepoBase repo in Program.Controller.Repositories) {
string error_message;
if (repo.Error == ErrorStatus.HostUnreachable) {
error_message = "Host unreachable";
FolderErrors [i] = "Host unreachable";
} else if (repo.Error == ErrorStatus.HostIdentityChanged) {
error_message = "Host identity changed";
FolderErrors [i] = "Host identity changed";
} else if (repo.Error == ErrorStatus.AuthenticationFailed) {
error_message = "Authentication failed";
FolderErrors [i] = "Authentication failed";
} else if (repo.Error == ErrorStatus.DiskSpaceExcedeed) {
error_message = "Out of disk space";
FolderErrors [i] = "Out of disk space";
} else {
error_message = "";
FolderErrors [i] = "";
}
if (i > Folders.Length - 1)
overflow_errors [i] = error_message;
else
errors [i] = error_message;
i++;
}
FolderErrors = errors;
OverflowFolderErrors = overflow_errors;
}
}
}

View file

@ -237,54 +237,6 @@ namespace SparkleShare {
i++;
}
SparkleMenuItem more_item = new SparkleMenuItem () {
Header = "More projects"
};
i = 0;
foreach (string folder_name in Controller.OverflowFolders) {
SparkleMenuItem subfolder_item = new SparkleMenuItem () {
Header = folder_name
};
subfolder_item.Click += OpenFolderDelegate (folder_name);
Image subfolder_image = new Image () {
Source = SparkleUIHelpers.GetImageSource ("folder"),
Width = 16,
Height = 16
};
if (!string.IsNullOrEmpty (Controller.OverflowFolderErrors [i])) {
subfolder_item.Icon = new Image () {
Source = (BitmapSource) Imaging.CreateBitmapSourceFromHIcon (
System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty,
BitmapSizeOptions.FromWidthAndHeight (16,16)
)
};
SparkleMenuItem error_item = new SparkleMenuItem () {
Header = Controller.OverflowFolderErrors [i],
IsEnabled = false
};
subfolder_item.Items.Add (error_item);
} else {
subfolder_item.Icon = subfolder_image;
}
more_item.Items.Add (subfolder_item);
i++;
}
if (more_item.Items.Count > 0) {
this.context_menu.Items.Add (new Separator ());
this.context_menu.Items.Add (more_item);
}
}
this.context_menu.Items.Add (new Separator ());