remove buggy implementation of menu overflow. #1015
This commit is contained in:
parent
9f31fb3161
commit
4818a07315
|
@ -190,51 +190,10 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu submenu = new Menu ();
|
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.menu.Add (new SeparatorMenuItem ());
|
||||||
|
|
||||||
|
|
||||||
this.recent_events_item = new MenuItem ("Recent Changes…");
|
this.recent_events_item = new MenuItem ("Recent Changes…");
|
||||||
|
|
||||||
this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled;
|
this.recent_events_item.Sensitive = Controller.RecentEventsItemEnabled;
|
||||||
|
|
|
@ -30,16 +30,13 @@ namespace SparkleShare {
|
||||||
public SparkleStatusIconController Controller = new SparkleStatusIconController ();
|
public SparkleStatusIconController Controller = new SparkleStatusIconController ();
|
||||||
|
|
||||||
private NSMenu menu;
|
private NSMenu menu;
|
||||||
private NSMenu submenu;
|
|
||||||
|
|
||||||
private NSStatusItem status_item;
|
private NSStatusItem status_item;
|
||||||
private NSMenuItem state_item;
|
private NSMenuItem state_item;
|
||||||
private NSMenuItem folder_item;
|
private NSMenuItem folder_item;
|
||||||
|
|
||||||
private NSMenuItem [] folder_menu_items;
|
private NSMenuItem [] folder_menu_items;
|
||||||
private NSMenuItem [] submenu_items;
|
|
||||||
|
|
||||||
private NSMenuItem more_item;
|
|
||||||
private NSMenuItem add_item;
|
private NSMenuItem add_item;
|
||||||
private NSMenuItem about_item;
|
private NSMenuItem about_item;
|
||||||
private NSMenuItem recent_events_item;
|
private NSMenuItem recent_events_item;
|
||||||
|
@ -62,7 +59,6 @@ namespace SparkleShare {
|
||||||
private NSImage sparkleshare_image;
|
private NSImage sparkleshare_image;
|
||||||
|
|
||||||
private EventHandler [] folder_tasks;
|
private EventHandler [] folder_tasks;
|
||||||
private EventHandler [] overflow_tasks;
|
|
||||||
|
|
||||||
|
|
||||||
public SparkleStatusIcon () : base ()
|
public SparkleStatusIcon () : base ()
|
||||||
|
@ -231,11 +227,9 @@ namespace SparkleShare {
|
||||||
this.menu.AddItem (this.folder_item);
|
this.menu.AddItem (this.folder_item);
|
||||||
|
|
||||||
this.folder_menu_items = new NSMenuItem [Controller.Folders.Length];
|
this.folder_menu_items = new NSMenuItem [Controller.Folders.Length];
|
||||||
this.submenu_items = new NSMenuItem [Controller.OverflowFolders.Length];
|
|
||||||
|
|
||||||
if (Controller.Folders.Length > 0) {
|
if (Controller.Folders.Length > 0) {
|
||||||
this.folder_tasks = new EventHandler [Controller.Folders.Length];
|
this.folder_tasks = new EventHandler [Controller.Folders.Length];
|
||||||
this.overflow_tasks = new EventHandler [Controller.OverflowFolders.Length];
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (string folder_name in Controller.Folders) {
|
foreach (string folder_name in Controller.Folders) {
|
||||||
|
@ -264,55 +258,11 @@ namespace SparkleShare {
|
||||||
|
|
||||||
i++;
|
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)
|
foreach (NSMenuItem item in this.folder_menu_items)
|
||||||
this.menu.AddItem (item);
|
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 (NSMenuItem.SeparatorItem);
|
||||||
this.menu.AddItem (this.recent_events_item);
|
this.menu.AddItem (this.recent_events_item);
|
||||||
|
|
|
@ -48,15 +48,9 @@ namespace SparkleShare {
|
||||||
public IconState CurrentState = IconState.Idle;
|
public IconState CurrentState = IconState.Idle;
|
||||||
public string StateText = "Welcome to SparkleShare!";
|
public string StateText = "Welcome to SparkleShare!";
|
||||||
|
|
||||||
public readonly int MenuOverflowThreshold = 9;
|
|
||||||
public readonly int MinSubmenuOverflowCount = 3;
|
|
||||||
|
|
||||||
public string [] Folders;
|
public string [] Folders;
|
||||||
public string [] FolderErrors;
|
public string [] FolderErrors;
|
||||||
|
|
||||||
public string [] OverflowFolders;
|
|
||||||
public string [] OverflowFolderErrors;
|
|
||||||
|
|
||||||
|
|
||||||
public string FolderSize {
|
public string FolderSize {
|
||||||
get {
|
get {
|
||||||
|
@ -228,49 +222,29 @@ namespace SparkleShare {
|
||||||
|
|
||||||
private void UpdateFolders ()
|
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;
|
int i = 0;
|
||||||
foreach (SparkleRepoBase repo in Program.Controller.Repositories) {
|
foreach (SparkleRepoBase repo in Program.Controller.Repositories) {
|
||||||
string error_message;
|
|
||||||
|
|
||||||
if (repo.Error == ErrorStatus.HostUnreachable) {
|
if (repo.Error == ErrorStatus.HostUnreachable) {
|
||||||
error_message = "Host unreachable";
|
FolderErrors [i] = "Host unreachable";
|
||||||
|
|
||||||
} else if (repo.Error == ErrorStatus.HostIdentityChanged) {
|
} else if (repo.Error == ErrorStatus.HostIdentityChanged) {
|
||||||
error_message = "Host identity changed";
|
FolderErrors [i] = "Host identity changed";
|
||||||
|
|
||||||
} else if (repo.Error == ErrorStatus.AuthenticationFailed) {
|
} else if (repo.Error == ErrorStatus.AuthenticationFailed) {
|
||||||
error_message = "Authentication failed";
|
FolderErrors [i] = "Authentication failed";
|
||||||
|
|
||||||
} else if (repo.Error == ErrorStatus.DiskSpaceExcedeed) {
|
} else if (repo.Error == ErrorStatus.DiskSpaceExcedeed) {
|
||||||
error_message = "Out of disk space";
|
FolderErrors [i] = "Out of disk space";
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
error_message = "";
|
FolderErrors [i] = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i > Folders.Length - 1)
|
|
||||||
overflow_errors [i] = error_message;
|
|
||||||
else
|
|
||||||
errors [i] = error_message;
|
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
FolderErrors = errors;
|
|
||||||
OverflowFolderErrors = overflow_errors;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -237,54 +237,6 @@ namespace SparkleShare {
|
||||||
|
|
||||||
i++;
|
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 ());
|
this.context_menu.Items.Add (new Separator ());
|
||||||
|
|
Loading…
Reference in a new issue