statusicon: rearrange and keep references to all NSObjects on mac
This commit is contained in:
parent
3ca4fb58f0
commit
c96ca66033
|
@ -173,7 +173,7 @@ namespace SparkleShare {
|
||||||
};
|
};
|
||||||
|
|
||||||
MenuItem try_again_item = new MenuItem ("Try Again");
|
MenuItem try_again_item = new MenuItem ("Try Again");
|
||||||
try_again_item.Activated += TryAgainDelegate (folder_name);
|
try_again_item.Activated += Controller.TryAgainDelegate (folder_name);
|
||||||
|
|
||||||
(item.Submenu as Menu).Add (error_item);
|
(item.Submenu as Menu).Add (error_item);
|
||||||
(item.Submenu as Menu).Add (new SeparatorMenuItem ();
|
(item.Submenu as Menu).Add (new SeparatorMenuItem ();
|
||||||
|
@ -186,7 +186,7 @@ namespace SparkleShare {
|
||||||
item.Image = new Image (folder_icon);
|
item.Image = new Image (folder_icon);
|
||||||
(item.Child as Label).UseUnderline = false;
|
(item.Child as Label).UseUnderline = false;
|
||||||
|
|
||||||
item.Activated += OpenFolderDelegate (folder_name);
|
item.Activated += Controller.OpenFolderDelegate (folder_name);
|
||||||
this.menu.Add (item);
|
this.menu.Add (item);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
|
@ -263,22 +263,6 @@ namespace SparkleShare {
|
||||||
this.indicator.Menu = this.menu;
|
this.indicator.Menu = this.menu;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private EventHandler OpenFolderDelegate (string name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.SubfolderClicked (name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private EventHandler TryAgainDelegate (string name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.TryAgainClicked (name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#if !HAVE_APP_INDICATOR
|
#if !HAVE_APP_INDICATOR
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace SparkleShare {
|
||||||
Font = NSFontManager.SharedFontManager.FontWithFamily (
|
Font = NSFontManager.SharedFontManager.FontWithFamily (
|
||||||
"Lucida Grande", NSFontTraitMask.Bold, 0, 15),
|
"Lucida Grande", NSFontTraitMask.Bold, 0, 15),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.header_text_field.Cell.LineBreakMode = NSLineBreakMode.TruncatingTail;
|
this.header_text_field.Cell.LineBreakMode = NSLineBreakMode.TruncatingTail;
|
||||||
|
|
||||||
this.description_text_field = new NSTextField () {
|
this.description_text_field = new NSTextField () {
|
||||||
|
|
|
@ -31,66 +31,46 @@ namespace SparkleShare {
|
||||||
|
|
||||||
private NSMenu menu;
|
private NSMenu menu;
|
||||||
|
|
||||||
private NSStatusItem status_item;
|
private NSStatusItem status_item = NSStatusBar.SystemStatusBar.CreateStatusItem (28);
|
||||||
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 [] error_menu_items;
|
||||||
|
private NSMenuItem [] try_again_menu_items;
|
||||||
|
|
||||||
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;
|
||||||
private NSMenuItem quit_item;
|
private NSMenuItem quit_item;
|
||||||
|
|
||||||
private NSImage syncing_idle_image;
|
private NSImage syncing_idle_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-idle.png"));
|
||||||
private NSImage syncing_up_image;
|
private NSImage syncing_up_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-up.png"));
|
||||||
private NSImage syncing_down_image;
|
private NSImage syncing_down_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-down.png"));
|
||||||
private NSImage syncing_image;
|
private NSImage syncing_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing.png"));
|
||||||
private NSImage syncing_error_image;
|
private NSImage syncing_error_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-error.png"));
|
||||||
|
|
||||||
private NSImage syncing_idle_image_active;
|
|
||||||
private NSImage syncing_up_image_active;
|
|
||||||
private NSImage syncing_down_image_active;
|
|
||||||
private NSImage syncing_image_active;
|
|
||||||
private NSImage syncing_error_image_active;
|
|
||||||
|
|
||||||
private NSImage folder_image;
|
|
||||||
private NSImage caution_image;
|
|
||||||
private NSImage sparkleshare_image;
|
|
||||||
|
|
||||||
private EventHandler [] folder_tasks;
|
private NSImage syncing_idle_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-idle-active.png"));
|
||||||
private EventHandler [] try_again_tasks;
|
private NSImage syncing_up_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-up-active.png"));
|
||||||
|
private NSImage syncing_down_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-down-active.png"));
|
||||||
|
private NSImage syncing_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-active.png"));
|
||||||
|
private NSImage syncing_error_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-error-active.png"));
|
||||||
|
|
||||||
|
private NSImage folder_image = NSImage.ImageNamed ("NSFolder");
|
||||||
|
private NSImage caution_image = NSImage.ImageNamed ("NSCaution");
|
||||||
|
private NSImage sparkleshare_image = NSImage.ImageNamed ("sparkleshare-folder");
|
||||||
|
|
||||||
|
|
||||||
public SparkleStatusIcon () : base ()
|
public SparkleStatusIcon () : base ()
|
||||||
{
|
{
|
||||||
using (var a = new NSAutoreleasePool ())
|
using (var a = new NSAutoreleasePool ())
|
||||||
{
|
{
|
||||||
this.status_item = NSStatusBar.SystemStatusBar.CreateStatusItem (28);
|
this.status_item.HighlightMode = true;
|
||||||
this.status_item.HighlightMode = true;
|
this.status_item.Image = this.syncing_idle_image;
|
||||||
|
|
||||||
this.syncing_idle_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-idle.png"));
|
|
||||||
this.syncing_up_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-up.png"));
|
|
||||||
this.syncing_down_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-down.png"));
|
|
||||||
this.syncing_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing.png"));
|
|
||||||
this.syncing_error_image = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-error.png"));
|
|
||||||
|
|
||||||
this.syncing_idle_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-idle-active.png"));
|
|
||||||
this.syncing_up_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-up-active.png"));
|
|
||||||
this.syncing_down_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-down-active.png"));
|
|
||||||
this.syncing_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-active.png"));
|
|
||||||
this.syncing_error_image_active = new NSImage (Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "process-syncing-error-active.png"));
|
|
||||||
|
|
||||||
this.status_item.Image = this.syncing_idle_image;
|
|
||||||
this.status_item.Image.Size = new SizeF (16, 16);
|
|
||||||
|
|
||||||
this.status_item.AlternateImage = this.syncing_idle_image_active;
|
this.status_item.AlternateImage = this.syncing_idle_image_active;
|
||||||
|
this.status_item.Image.Size = new SizeF (16, 16);
|
||||||
this.status_item.AlternateImage.Size = new SizeF (16, 16);
|
this.status_item.AlternateImage.Size = new SizeF (16, 16);
|
||||||
|
|
||||||
this.folder_image = NSImage.ImageNamed ("NSFolder");
|
|
||||||
this.caution_image = NSImage.ImageNamed ("NSCaution");
|
|
||||||
this.sparkleshare_image = NSImage.ImageNamed ("sparkleshare-folder");
|
|
||||||
|
|
||||||
CreateMenu ();
|
CreateMenu ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,10 +208,10 @@ 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.error_menu_items = new NSMenuItem [Controller.Folders.Length];
|
||||||
|
this.try_again_menu_items = new NSMenuItem [Controller.Folders.Length];
|
||||||
|
|
||||||
if (Controller.Folders.Length > 0) {
|
if (Controller.Folders.Length > 0) {
|
||||||
this.folder_tasks = new EventHandler [Controller.Folders.Length];
|
|
||||||
this.try_again_tasks = new EventHandler [Controller.Folders.Length];
|
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
foreach (string folder_name in Controller.Folders) {
|
foreach (string folder_name in Controller.Folders) {
|
||||||
|
@ -242,30 +222,28 @@ namespace SparkleShare {
|
||||||
item.Image = this.caution_image;
|
item.Image = this.caution_image;
|
||||||
item.Submenu = new NSMenu ();
|
item.Submenu = new NSMenu ();
|
||||||
|
|
||||||
NSMenuItem error_item = new NSMenuItem () {
|
this.error_menu_items [i] = new NSMenuItem () {
|
||||||
Title = Controller.FolderErrors [i]
|
Title = Controller.FolderErrors [i]
|
||||||
};
|
};
|
||||||
|
|
||||||
NSMenuItem try_again_item = new NSMenuItem () {
|
this.try_again_menu_items [i] = new NSMenuItem () { // TODO: retain
|
||||||
Title = "Try Again"
|
Title = "Try Again"
|
||||||
};
|
};
|
||||||
|
|
||||||
this.try_again_tasks [i] = TryAgainDelegate (folder_name);
|
this.try_again_menu_items [i].Activated += Controller.TryAgainDelegate (folder_name);;
|
||||||
try_again_item.Activated += this.try_again_tasks [i];
|
|
||||||
|
|
||||||
item.Submenu.AddItem (error_item);
|
item.Submenu.AddItem (this.error_menu_items [i]);
|
||||||
item.Submenu.AddItem (NSMenuItem.SeparatorItem);
|
item.Submenu.AddItem (NSMenuItem.SeparatorItem);
|
||||||
item.Submenu.AddItem (try_again_item);
|
item.Submenu.AddItem (this.try_again_menu_items [i]);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
item.Image = this.folder_image;
|
item.Image = this.folder_image;
|
||||||
}
|
}
|
||||||
|
|
||||||
item.Image.Size = new SizeF (16, 16);
|
item.Image.Size = new SizeF (16, 16);
|
||||||
this.folder_tasks [i] = OpenFolderDelegate (folder_name);
|
|
||||||
|
|
||||||
this.folder_menu_items [i] = item;
|
this.folder_menu_items [i] = item;
|
||||||
this.folder_menu_items [i].Activated += this.folder_tasks [i];
|
this.folder_menu_items [i].Activated += Controller.OpenFolderDelegate (folder_name);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
};
|
};
|
||||||
|
@ -287,22 +265,6 @@ namespace SparkleShare {
|
||||||
this.status_item.Menu = this.menu;
|
this.status_item.Menu = this.menu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private EventHandler OpenFolderDelegate (string name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.SubfolderClicked (name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private EventHandler TryAgainDelegate (string name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.TryAgainClicked (name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -244,6 +244,22 @@ namespace SparkleShare {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public EventHandler OpenFolderDelegate (string subfolder)
|
||||||
|
{
|
||||||
|
return delegate {
|
||||||
|
SubfolderClicked (subfolder);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public EventHandler TryAgainDelegate (string subfolder)
|
||||||
|
{
|
||||||
|
return delegate {
|
||||||
|
TryAgainClicked (subfolder);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void UpdateFolders ()
|
private void UpdateFolders ()
|
||||||
{
|
{
|
||||||
Folders = Program.Controller.Folders.ToArray ();
|
Folders = Program.Controller.Folders.ToArray ();
|
||||||
|
|
|
@ -33,15 +33,14 @@ namespace SparkleShare {
|
||||||
|
|
||||||
public SparkleStatusIconController Controller = new SparkleStatusIconController();
|
public SparkleStatusIconController Controller = new SparkleStatusIconController();
|
||||||
|
|
||||||
private Drawing.Bitmap syncing_idle_image;
|
private Drawing.Bitmap syncing_idle_image = SparkleUIHelpers.GetBitmap ("process-syncing-idle");
|
||||||
private Drawing.Bitmap syncing_up_image;
|
private Drawing.Bitmap syncing_up_image = SparkleUIHelpers.GetBitmap ("process-syncing-up");
|
||||||
private Drawing.Bitmap syncing_down_image;
|
private Drawing.Bitmap syncing_down_image = SparkleUIHelpers.GetBitmap ("process-syncing-down");
|
||||||
private Drawing.Bitmap syncing_image;
|
private Drawing.Bitmap syncing_image = SparkleUIHelpers.GetBitmap ("process-syncing");
|
||||||
private Drawing.Bitmap syncing_error_image;
|
private Drawing.Bitmap syncing_error_image = SparkleUIHelpers.GetBitmap ("process-syncing-error");
|
||||||
|
|
||||||
private ContextMenu context_menu;
|
private ContextMenu context_menu;
|
||||||
|
|
||||||
|
|
||||||
private SparkleMenuItem log_item;
|
private SparkleMenuItem log_item;
|
||||||
private SparkleMenuItem state_item;
|
private SparkleMenuItem state_item;
|
||||||
private SparkleMenuItem exit_item;
|
private SparkleMenuItem exit_item;
|
||||||
|
@ -51,14 +50,8 @@ namespace SparkleShare {
|
||||||
|
|
||||||
public SparkleStatusIcon ()
|
public SparkleStatusIcon ()
|
||||||
{
|
{
|
||||||
this.syncing_idle_image = SparkleUIHelpers.GetBitmap ("process-syncing-idle");
|
|
||||||
this.syncing_up_image = SparkleUIHelpers.GetBitmap ("process-syncing-up");
|
|
||||||
this.syncing_down_image = SparkleUIHelpers.GetBitmap ("process-syncing-down");
|
|
||||||
this.syncing_image = SparkleUIHelpers.GetBitmap ("process-syncing");
|
|
||||||
this.syncing_error_image = SparkleUIHelpers.GetBitmap ("process-syncing-error");
|
|
||||||
|
|
||||||
this.notify_icon.Icon = this.syncing_idle_image;
|
|
||||||
this.notify_icon.HeaderText = "SparkleShare";
|
this.notify_icon.HeaderText = "SparkleShare";
|
||||||
|
this.notify_icon.Icon = this.syncing_idle_image;
|
||||||
|
|
||||||
CreateMenu ();
|
CreateMenu ();
|
||||||
|
|
||||||
|
@ -206,7 +199,7 @@ namespace SparkleShare {
|
||||||
Header = folder_name.Replace ("_", "__")
|
Header = folder_name.Replace ("_", "__")
|
||||||
};
|
};
|
||||||
|
|
||||||
subfolder_item.Click += OpenFolderDelegate (folder_name);
|
subfolder_item.Click += Controller.OpenFolderDelegate (folder_name);
|
||||||
|
|
||||||
Image subfolder_image = new Image () {
|
Image subfolder_image = new Image () {
|
||||||
Source = SparkleUIHelpers.GetImageSource ("folder"),
|
Source = SparkleUIHelpers.GetImageSource ("folder"),
|
||||||
|
@ -218,8 +211,7 @@ namespace SparkleShare {
|
||||||
subfolder_item.Icon = new Image () {
|
subfolder_item.Icon = new Image () {
|
||||||
Source = (BitmapSource) Imaging.CreateBitmapSourceFromHIcon (
|
Source = (BitmapSource) Imaging.CreateBitmapSourceFromHIcon (
|
||||||
System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty,
|
System.Drawing.SystemIcons.Exclamation.Handle, Int32Rect.Empty,
|
||||||
BitmapSizeOptions.FromWidthAndHeight (16,16)
|
BitmapSizeOptions.FromWidthAndHeight (16,16))
|
||||||
)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SparkleMenuItem error_item = new SparkleMenuItem () {
|
SparkleMenuItem error_item = new SparkleMenuItem () {
|
||||||
|
@ -231,7 +223,7 @@ namespace SparkleShare {
|
||||||
Header = "Try again"
|
Header = "Try again"
|
||||||
};
|
};
|
||||||
|
|
||||||
try_again_item.Click += TryAgainDelegate (folder_name);
|
try_again_item.Click += Controller.TryAgainDelegate (folder_name);
|
||||||
|
|
||||||
subfolder_item.Items.Add (error_item);
|
subfolder_item.Items.Add (error_item);
|
||||||
subfolder_item.Items.Add (new Separator ());
|
subfolder_item.Items.Add (new Separator ());
|
||||||
|
@ -271,22 +263,6 @@ namespace SparkleShare {
|
||||||
{
|
{
|
||||||
this.notify_icon.Dispose ();
|
this.notify_icon.Dispose ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private RoutedEventHandler OpenFolderDelegate (string folder_name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.SubfolderClicked (folder_name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private EventHandler TryAgainDelegate (string name)
|
|
||||||
{
|
|
||||||
return delegate {
|
|
||||||
Controller.TryAgainClicked (name);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue