mac: remove a lot of boilerplate

This commit is contained in:
Hylke Bons 2012-11-23 16:22:13 +00:00
parent 3be9fb80ba
commit 5f6c00f773
6 changed files with 507 additions and 615 deletions

View file

@ -45,163 +45,138 @@ namespace SparkleShare {
public SparkleAbout () : base () public SparkleAbout () : base ()
{ {
using (var a = new NSAutoreleasePool ()) SetFrame (new RectangleF (0, 0, 640, 281), true);
{ Center ();
SetFrame (new RectangleF (0, 0, 640, 281), true);
Center ();
Delegate = new SparkleAboutDelegate (); Delegate = new SparkleAboutDelegate ();
StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Titled); StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Titled);
Title = "About SparkleShare"; Title = "About SparkleShare";
MaxSize = new SizeF (640, 281); MaxSize = new SizeF (640, 281);
MinSize = new SizeF (640, 281); MinSize = new SizeF (640, 281);
HasShadow = true; HasShadow = true;
BackingType = NSBackingStore.Buffered; BackingType = NSBackingStore.Buffered;
this.website_link = new SparkleLink ("Website", Controller.WebsiteLinkAddress); this.website_link = new SparkleLink ("Website", Controller.WebsiteLinkAddress);
this.website_link.Frame = new RectangleF (new PointF (295, 25), this.website_link.Frame.Size); this.website_link.Frame = new RectangleF (new PointF (295, 25), this.website_link.Frame.Size);
this.credits_link = new SparkleLink ("Credits", Controller.CreditsLinkAddress); this.credits_link = new SparkleLink ("Credits", Controller.CreditsLinkAddress);
this.credits_link.Frame = new RectangleF ( this.credits_link.Frame = new RectangleF (
new PointF (this.website_link.Frame.X + this.website_link.Frame.Width + 10, 25), new PointF (this.website_link.Frame.X + this.website_link.Frame.Width + 10, 25),
this.credits_link.Frame.Size); this.credits_link.Frame.Size);
this.report_problem_link = new SparkleLink ("Report a problem", Controller.ReportProblemLinkAddress); this.report_problem_link = new SparkleLink ("Report a problem", Controller.ReportProblemLinkAddress);
this.report_problem_link.Frame = new RectangleF ( this.report_problem_link.Frame = new RectangleF (
new PointF (this.credits_link.Frame.X + this.credits_link.Frame.Width + 10, 25), new PointF (this.credits_link.Frame.X + this.credits_link.Frame.Width + 10, 25),
this.report_problem_link.Frame.Size); this.report_problem_link.Frame.Size);
this.debug_log_link = new SparkleLink ("Debug log", Controller.DebugLogLinkAddress); this.debug_log_link = new SparkleLink ("Debug log", Controller.DebugLogLinkAddress);
this.debug_log_link.Frame = new RectangleF ( this.debug_log_link.Frame = new RectangleF (
new PointF (this.report_problem_link.Frame.X + this.report_problem_link.Frame.Width + 10, 25), new PointF (this.report_problem_link.Frame.X + this.report_problem_link.Frame.Width + 10, 25),
this.debug_log_link.Frame.Size); this.debug_log_link.Frame.Size);
this.hidden_close_button = new NSButton () { this.hidden_close_button = new NSButton () {
Frame = new RectangleF (0, 0, 0, 0), Frame = new RectangleF (0, 0, 0, 0),
KeyEquivalentModifierMask = NSEventModifierMask.CommandKeyMask, KeyEquivalentModifierMask = NSEventModifierMask.CommandKeyMask,
KeyEquivalent = "w" KeyEquivalent = "w"
}; };
this.hidden_close_button.Activated += delegate { this.hidden_close_button.Activated += delegate {
Controller.WindowClosed (); Controller.WindowClosed ();
}; };
ContentView.AddSubview (this.hidden_close_button); ContentView.AddSubview (this.hidden_close_button);
CreateAbout (); CreateAbout ();
ContentView.AddSubview (this.website_link); ContentView.AddSubview (this.website_link);
ContentView.AddSubview (this.credits_link); ContentView.AddSubview (this.credits_link);
ContentView.AddSubview (this.report_problem_link); ContentView.AddSubview (this.report_problem_link);
ContentView.AddSubview (this.debug_log_link); ContentView.AddSubview (this.debug_log_link);
}
Controller.HideWindowEvent += delegate { Controller.HideWindowEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => PerformClose (this));
{
InvokeOnMainThread (delegate {
PerformClose (this);
});
}
}; };
Controller.ShowWindowEvent += delegate { Controller.ShowWindowEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => OrderFrontRegardless ());
{
InvokeOnMainThread (delegate {
OrderFrontRegardless ();
});
}
}; };
Controller.NewVersionEvent += delegate (string new_version) { Controller.NewVersionEvent += delegate (string new_version) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.updates_text_field.StringValue = "A newer version (" + new_version + ") is available!";
InvokeOnMainThread (delegate { });
this.updates_text_field.StringValue = "A newer version (" + new_version + ") is available!";
});
}
}; };
Controller.VersionUpToDateEvent += delegate { Controller.VersionUpToDateEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.updates_text_field.StringValue = "You are running the latest version.";
InvokeOnMainThread (delegate { });
this.updates_text_field.StringValue = "You are running the latest version.";
});
}
}; };
Controller.CheckingForNewVersionEvent += delegate { Controller.CheckingForNewVersionEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.updates_text_field.StringValue = "Checking for updates...";
InvokeOnMainThread (delegate { });
this.updates_text_field.StringValue = "Checking for updates...";
});
}
}; };
} }
private void CreateAbout () private void CreateAbout ()
{ {
using (var a = new NSAutoreleasePool ()) string about_image_path = Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "about.png");
{
string about_image_path = Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps", "about.png");
this.about_image = new NSImage (about_image_path); this.about_image = new NSImage (about_image_path);
this.about_image.Size = new SizeF (640, 260); this.about_image.Size = new SizeF (640, 260);
this.about_image_view = new NSImageView () { this.about_image_view = new NSImageView () {
Image = this.about_image, Image = this.about_image,
Frame = new RectangleF (0, 0, 640, 260) Frame = new RectangleF (0, 0, 640, 260)
}; };
this.version_text_field = new NSTextField () { this.version_text_field = new NSTextField () {
StringValue = "version " + Controller.RunningVersion, StringValue = "version " + Controller.RunningVersion,
Frame = new RectangleF (295, 140, 318, 22), Frame = new RectangleF (295, 140, 318, 22),
BackgroundColor = NSColor.White, BackgroundColor = NSColor.White,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
DrawsBackground = false, DrawsBackground = false,
TextColor = NSColor.White, TextColor = NSColor.White,
Font = NSFontManager.SharedFontManager.FontWithFamily Font = NSFontManager.SharedFontManager.FontWithFamily
("Lucida Grande", NSFontTraitMask.Unbold, 0, 11) ("Lucida Grande", NSFontTraitMask.Unbold, 0, 11)
}; };
this.updates_text_field = new NSTextField () { this.updates_text_field = new NSTextField () {
StringValue = "Checking for updates...", StringValue = "Checking for updates...",
Frame = new RectangleF (295, Frame.Height - 232, 318, 98), Frame = new RectangleF (295, Frame.Height - 232, 318, 98),
Bordered = false, Bordered = false,
Editable = false, Editable = false,
DrawsBackground = false, DrawsBackground = false,
Font = NSFontManager.SharedFontManager.FontWithFamily Font = NSFontManager.SharedFontManager.FontWithFamily
("Lucida Grande", NSFontTraitMask.Unbold, 0, 11), ("Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
TextColor = NSColor.FromCalibratedRgba (0.45f, 0.62f, 0.81f, 1.0f) // Tango Sky Blue #1 TextColor = NSColor.FromCalibratedRgba (0.45f, 0.62f, 0.81f, 1.0f) // Tango Sky Blue #1
}; };
this.credits_text_field = new NSTextField () { this.credits_text_field = new NSTextField () {
StringValue = @"Copyright © 2010" + DateTime.Now.Year + " Hylke Bons and others." + StringValue = @"Copyright © 2010" + DateTime.Now.Year + " Hylke Bons and others." +
"\n" + "\n" +
"\n" + "\n" +
"SparkleShare is Open Source software. You are free to use, modify, and redistribute it " + "SparkleShare is Open Source software. You are free to use, modify, and redistribute it " +
"under the GNU General Public License version 3 or later.", "under the GNU General Public License version 3 or later.",
Frame = new RectangleF (295, Frame.Height - 260, 318, 98), Frame = new RectangleF (295, Frame.Height - 260, 318, 98),
TextColor = NSColor.White, TextColor = NSColor.White,
DrawsBackground = false, DrawsBackground = false,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
Font = NSFontManager.SharedFontManager.FontWithFamily ( Font = NSFontManager.SharedFontManager.FontWithFamily (
"Lucida Grande", NSFontTraitMask.Unbold, 0, 11), "Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
}; };
ContentView.AddSubview (this.about_image_view); ContentView.AddSubview (this.about_image_view);
ContentView.AddSubview (this.version_text_field); ContentView.AddSubview (this.version_text_field);
ContentView.AddSubview (this.updates_text_field); ContentView.AddSubview (this.updates_text_field);
ContentView.AddSubview (this.credits_text_field); ContentView.AddSubview (this.credits_text_field);
}
} }

View file

@ -227,5 +227,17 @@ namespace SparkleShare {
return this.event_entry_html; return this.event_entry_html;
} }
} }
public delegate void Code ();
private NSObject obj = new NSObject ();
public void Invoke (Code code)
{
using (var a = new NSAutoreleasePool ())
{
obj.InvokeOnMainThread (() => code ());
}
}
} }
} }

View file

@ -50,363 +50,317 @@ namespace SparkleShare {
public SparkleEventLog () : base () public SparkleEventLog () : base ()
{ {
using (var a = new NSAutoreleasePool ()) Title = "Recent Changes";
{ Delegate = new SparkleEventsDelegate ();
Title = "Recent Changes";
Delegate = new SparkleEventsDelegate ();
int min_width = 480; int min_width = 480;
int min_height = 640; int min_height = 640;
float x = (float) (NSScreen.MainScreen.Frame.Width * 0.61); float x = (float) (NSScreen.MainScreen.Frame.Width * 0.61);
float y = (float) (NSScreen.MainScreen.Frame.Height * 0.5 - (min_height * 0.5)); float y = (float) (NSScreen.MainScreen.Frame.Height * 0.5 - (min_height * 0.5));
SetFrame ( SetFrame (
new RectangleF ( new RectangleF (
new PointF (x, y), new PointF (x, y),
new SizeF (min_width, (int) (NSScreen.MainScreen.Frame.Height * 0.85))), new SizeF (min_width, (int) (NSScreen.MainScreen.Frame.Height * 0.85))),
true); true);
StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Miniaturizable | StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Miniaturizable |
NSWindowStyle.Titled | NSWindowStyle.Resizable); NSWindowStyle.Titled | NSWindowStyle.Resizable);
MinSize = new SizeF (min_width, min_height); MinSize = new SizeF (min_width, min_height);
HasShadow = true; HasShadow = true;
BackingType = NSBackingStore.Buffered; BackingType = NSBackingStore.Buffered;
TitlebarHeight = Frame.Height - ContentView.Frame.Height; TitlebarHeight = Frame.Height - ContentView.Frame.Height;
this.web_view = new WebView (new RectangleF (0, 0, 481, 579), "", "") { this.web_view = new WebView (new RectangleF (0, 0, 481, 579), "", "") {
Frame = new RectangleF (new PointF (0, 0), Frame = new RectangleF (new PointF (0, 0),
new SizeF (ContentView.Frame.Width, ContentView.Frame.Height - 39)) new SizeF (ContentView.Frame.Width, ContentView.Frame.Height - 39))
}; };
this.hidden_close_button = new NSButton () { this.hidden_close_button = new NSButton () {
KeyEquivalentModifierMask = NSEventModifierMask.CommandKeyMask, KeyEquivalentModifierMask = NSEventModifierMask.CommandKeyMask,
KeyEquivalent = "w" KeyEquivalent = "w"
}; };
this.hidden_close_button.Activated += delegate { this.hidden_close_button.Activated += delegate {
Controller.WindowClosed (); Controller.WindowClosed ();
}; };
this.size_label = new NSTextField () { this.size_label = new NSTextField () {
Alignment = NSTextAlignment.Right, Alignment = NSTextAlignment.Right,
BackgroundColor = NSColor.WindowBackground, BackgroundColor = NSColor.WindowBackground,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (0, ContentView.Frame.Height - 30), new PointF (0, ContentView.Frame.Height - 30),
new SizeF (60, 20)), new SizeF (60, 20)),
StringValue = "Size:", StringValue = "Size:",
Font = SparkleUI.BoldFont Font = SparkleUI.BoldFont
}; };
this.size_label_value = new NSTextField () { this.size_label_value = new NSTextField () {
Alignment = NSTextAlignment.Left, Alignment = NSTextAlignment.Left,
BackgroundColor = NSColor.WindowBackground, BackgroundColor = NSColor.WindowBackground,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (60, ContentView.Frame.Height - 30), new PointF (60, ContentView.Frame.Height - 30),
new SizeF (60, 20)), new SizeF (60, 20)),
StringValue = "…", StringValue = "…",
Font = SparkleUI.Font Font = SparkleUI.Font
}; };
this.history_label = new NSTextField () { this.history_label = new NSTextField () {
Alignment = NSTextAlignment.Right, Alignment = NSTextAlignment.Right,
BackgroundColor = NSColor.WindowBackground, BackgroundColor = NSColor.WindowBackground,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (130, ContentView.Frame.Height - 30), new PointF (130, ContentView.Frame.Height - 30),
new SizeF (60, 20)), new SizeF (60, 20)),
StringValue = "History:", StringValue = "History:",
Font = SparkleUI.BoldFont Font = SparkleUI.BoldFont
}; };
this.history_label_value = new NSTextField () { this.history_label_value = new NSTextField () {
Alignment = NSTextAlignment.Left, Alignment = NSTextAlignment.Left,
BackgroundColor = NSColor.WindowBackground, BackgroundColor = NSColor.WindowBackground,
Bordered = false, Bordered = false,
Editable = false, Editable = false,
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (190, ContentView.Frame.Height - 30), new PointF (190, ContentView.Frame.Height - 30),
new SizeF (60, 20) new SizeF (60, 20)
), ),
StringValue = "…", StringValue = "…",
Font = SparkleUI.Font Font = SparkleUI.Font
}; };
this.popup_button = new NSPopUpButton () { this.popup_button = new NSPopUpButton () {
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (ContentView.Frame.Width - 156 - 12, ContentView.Frame.Height - 33), new PointF (ContentView.Frame.Width - 156 - 12, ContentView.Frame.Height - 33),
new SizeF (156, 26)), new SizeF (156, 26)),
PullsDown = false PullsDown = false
}; };
this.background = new NSBox () { this.background = new NSBox () {
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (-1, -1), new PointF (-1, -1),
new SizeF (Frame.Width + 2, this.web_view.Frame.Height + 2)), new SizeF (Frame.Width + 2, this.web_view.Frame.Height + 2)),
FillColor = NSColor.White, FillColor = NSColor.White,
BorderColor = NSColor.LightGray, BorderColor = NSColor.LightGray,
BoxType = NSBoxType.NSBoxCustom BoxType = NSBoxType.NSBoxCustom
}; };
this.progress_indicator = new NSProgressIndicator () { this.progress_indicator = new NSProgressIndicator () {
Frame = new RectangleF ( Frame = new RectangleF (
new PointF (Frame.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10), new PointF (Frame.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10),
new SizeF (20, 20)), new SizeF (20, 20)),
Style = NSProgressIndicatorStyle.Spinning Style = NSProgressIndicatorStyle.Spinning
}; };
this.progress_indicator.StartAnimation (this); this.progress_indicator.StartAnimation (this);
ContentView.AddSubview (this.size_label); ContentView.AddSubview (this.size_label);
ContentView.AddSubview (this.size_label_value); ContentView.AddSubview (this.size_label_value);
ContentView.AddSubview (this.history_label); ContentView.AddSubview (this.history_label);
ContentView.AddSubview (this.history_label_value); ContentView.AddSubview (this.history_label_value);
ContentView.AddSubview (this.popup_button); ContentView.AddSubview (this.popup_button);
ContentView.AddSubview (this.progress_indicator); ContentView.AddSubview (this.progress_indicator);
ContentView.AddSubview (this.background); ContentView.AddSubview (this.background);
ContentView.AddSubview (this.hidden_close_button); ContentView.AddSubview (this.hidden_close_button);
(Delegate as SparkleEventsDelegate).WindowResized += Relayout; (Delegate as SparkleEventsDelegate).WindowResized += delegate (SizeF new_window_size) {
} Program.Controller.Invoke (() => {
Relayout (new_window_size);
});
};
// Hook up the controller events // Hook up the controller events
Controller.HideWindowEvent += delegate { Controller.HideWindowEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.progress_indicator.Hidden = true;
InvokeOnMainThread (delegate { PerformClose (this);
this.progress_indicator.Hidden = true; });
PerformClose (this);
});
}
}; };
Controller.ShowWindowEvent += delegate { Controller.ShowWindowEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => OrderFrontRegardless ());
{
InvokeOnMainThread (delegate {
OrderFrontRegardless ();
});
}
}; };
Controller.UpdateChooserEvent += delegate (string [] folders) { Controller.UpdateChooserEvent += delegate (string [] folders) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => UpdateChooser (folders));
{
InvokeOnMainThread (delegate {
UpdateChooser (folders);
});
}
}; };
Controller.UpdateChooserEnablementEvent += delegate (bool enabled) { Controller.UpdateChooserEnablementEvent += delegate (bool enabled) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => { this.popup_button.Enabled = enabled; });
{
InvokeOnMainThread (delegate {
this.popup_button.Enabled = enabled;
});
}
}; };
Controller.UpdateContentEvent += delegate (string html) { Controller.UpdateContentEvent += delegate (string html) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.progress_indicator.Hidden = true;
InvokeOnMainThread (delegate { UpdateContent (html);
this.progress_indicator.Hidden = true; });
UpdateContent (html);
});
}
}; };
Controller.ContentLoadingEvent += delegate { Controller.ContentLoadingEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.web_view.RemoveFromSuperview ();
InvokeOnMainThread (delegate { this.progress_indicator.Hidden = false;
this.web_view.RemoveFromSuperview (); this.progress_indicator.StartAnimation (this);
this.progress_indicator.Hidden = false; });
this.progress_indicator.StartAnimation (this);
});
}
}; };
Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) { Controller.UpdateSizeInfoEvent += delegate (string size, string history_size) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ this.size_label_value.StringValue = size;
InvokeOnMainThread (delegate { this.history_label_value.StringValue = history_size;
this.size_label_value.StringValue = size; });
this.history_label_value.StringValue = history_size;
});
}
}; };
Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) { Controller.ShowSaveDialogEvent += delegate (string file_name, string target_folder_path) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ NSSavePanel panel = new NSSavePanel () {
InvokeOnMainThread (() => { DirectoryUrl = new NSUrl (target_folder_path, true),
// TODO: Make this a sheet NameFieldStringValue = file_name,
NSSavePanel panel = new NSSavePanel () { ParentWindow = this,
DirectoryUrl = new NSUrl (target_folder_path, true), Title = "Restore from History",
NameFieldStringValue = file_name, PreventsApplicationTerminationWhenModal = false
ParentWindow = this, };
Title = "Restore from History",
PreventsApplicationTerminationWhenModal = false
};
if ((NSPanelButtonType) panel.RunModal () == NSPanelButtonType.Ok) { if ((NSPanelButtonType) panel.RunModal () == NSPanelButtonType.Ok) {
string target_file_path = Path.Combine (panel.DirectoryUrl.RelativePath, string target_file_path = Path.Combine (panel.DirectoryUrl.RelativePath, panel.NameFieldStringValue);
panel.NameFieldStringValue); Controller.SaveDialogCompleted (target_file_path);
Controller.SaveDialogCompleted (target_file_path); } else {
Controller.SaveDialogCancelled ();
} else { }
Controller.SaveDialogCancelled (); });
}
});
}
}; };
} }
public void Relayout (SizeF new_window_size) public void Relayout (SizeF new_window_size)
{ {
InvokeOnMainThread (delegate { this.web_view.Frame = new RectangleF (this.web_view.Frame.Location,
this.web_view.Frame = new RectangleF (this.web_view.Frame.Location, new SizeF (new_window_size.Width, new_window_size.Height - TitlebarHeight - 39));
new SizeF (new_window_size.Width, new_window_size.Height - TitlebarHeight - 39));
this.background.Frame = new RectangleF (this.background.Frame.Location, this.background.Frame = new RectangleF (this.background.Frame.Location,
new SizeF (new_window_size.Width, new_window_size.Height - TitlebarHeight - 37)); new SizeF (new_window_size.Width, new_window_size.Height - TitlebarHeight - 37));
this.size_label.Frame = new RectangleF ( this.size_label.Frame = new RectangleF (
new PointF (this.size_label.Frame.X, new_window_size.Height - TitlebarHeight - 30), new PointF (this.size_label.Frame.X, new_window_size.Height - TitlebarHeight - 30),
this.size_label.Frame.Size this.size_label.Frame.Size
); );
this.size_label_value.Frame = new RectangleF ( this.size_label_value.Frame = new RectangleF (
new PointF (this.size_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 30), new PointF (this.size_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 30),
this.size_label_value.Frame.Size this.size_label_value.Frame.Size
); );
this.history_label.Frame = new RectangleF ( this.history_label.Frame = new RectangleF (
new PointF (this.history_label.Frame.X, new_window_size.Height - TitlebarHeight - 30), new PointF (this.history_label.Frame.X, new_window_size.Height - TitlebarHeight - 30),
this.history_label.Frame.Size this.history_label.Frame.Size
); );
this.history_label_value.Frame = new RectangleF ( this.history_label_value.Frame = new RectangleF (
new PointF (this.history_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 30), new PointF (this.history_label_value.Frame.X, new_window_size.Height - TitlebarHeight - 30),
this.history_label_value.Frame.Size this.history_label_value.Frame.Size
); );
this.popup_button.RemoveFromSuperview (); // Needed to prevent redraw glitches this.popup_button.RemoveFromSuperview (); // Needed to prevent redraw glitches
this.popup_button.Frame = new RectangleF ( this.popup_button.Frame = new RectangleF (
new PointF (new_window_size.Width - this.popup_button.Frame.Width - 12, new_window_size.Height - TitlebarHeight - 33), new PointF (new_window_size.Width - this.popup_button.Frame.Width - 12, new_window_size.Height - TitlebarHeight - 33),
this.popup_button.Frame.Size this.popup_button.Frame.Size
); );
ContentView.AddSubview (this.popup_button); ContentView.AddSubview (this.popup_button);
this.progress_indicator.Frame = new RectangleF ( this.progress_indicator.Frame = new RectangleF (
new PointF (new_window_size.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10), new PointF (new_window_size.Width / 2 - 10, this.web_view.Frame.Height / 2 + 10),
this.progress_indicator.Frame.Size this.progress_indicator.Frame.Size
); );
});
} }
public void UpdateChooser (string [] folders) public void UpdateChooser (string [] folders)
{ {
using (var a = new NSAutoreleasePool ()) if (folders == null)
{ folders = Controller.Folders;
if (folders == null)
folders = Controller.Folders;
this.popup_button.Cell.ControlSize = NSControlSize.Small; this.popup_button.Cell.ControlSize = NSControlSize.Small;
this.popup_button.Font = NSFontManager.SharedFontManager.FontWithFamily this.popup_button.Font = NSFontManager.SharedFontManager.FontWithFamily
("Lucida Grande", NSFontTraitMask.Condensed, 0, NSFont.SmallSystemFontSize); ("Lucida Grande", NSFontTraitMask.Condensed, 0, NSFont.SmallSystemFontSize);
this.popup_button.RemoveAllItems (); this.popup_button.RemoveAllItems ();
this.popup_button.AddItem ("Summary"); this.popup_button.AddItem ("Summary");
this.popup_button.Menu.AddItem (NSMenuItem.SeparatorItem); this.popup_button.Menu.AddItem (NSMenuItem.SeparatorItem);
int row = 2;
foreach (string folder in folders) {
this.popup_button.AddItem (folder);
int row = 2; if (folder.Equals (Controller.SelectedFolder))
foreach (string folder in folders) { this.popup_button.SelectItem (row);
this.popup_button.AddItem (folder);
if (folder.Equals (Controller.SelectedFolder))
this.popup_button.SelectItem (row);
row++;
}
this.popup_button.AddItems (folders); row++;
}
this.popup_button.Activated += delegate {
using (var b = new NSAutoreleasePool ()) this.popup_button.AddItems (folders);
{
InvokeOnMainThread (delegate { this.popup_button.Activated += delegate {
if (this.popup_button.IndexOfSelectedItem == 0) Program.Controller.Invoke (() => {
Controller.SelectedFolder = null; if (this.popup_button.IndexOfSelectedItem == 0)
else Controller.SelectedFolder = null;
Controller.SelectedFolder = this.popup_button.SelectedItem.Title; else
}); Controller.SelectedFolder = this.popup_button.SelectedItem.Title;
} });
}; };
}
} }
public void UpdateContent (string html) public void UpdateContent (string html)
{ {
using (var a = new NSAutoreleasePool ()) string pixmaps_path = "file://" + Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps");
{
string pixmaps_path = "file://" + Path.Combine (NSBundle.MainBundle.ResourcePath, "Pixmaps"); html = html.Replace ("<!-- $body-font-family -->", "Lucida Grande");
html = html.Replace ("<!-- $day-entry-header-font-size -->", "13.6px");
html = html.Replace ("<!-- $body-font-family -->", "Lucida Grande"); html = html.Replace ("<!-- $body-font-size -->", "13.4px");
html = html.Replace ("<!-- $day-entry-header-font-size -->", "13.6px"); html = html.Replace ("<!-- $secondary-font-color -->", "#bbb");
html = html.Replace ("<!-- $body-font-size -->", "13.4px"); html = html.Replace ("<!-- $small-color -->", "#ddd");
html = html.Replace ("<!-- $secondary-font-color -->", "#bbb"); html = html.Replace ("<!-- $small-font-size -->", "10px");
html = html.Replace ("<!-- $small-color -->", "#ddd"); html = html.Replace ("<!-- $day-entry-header-background-color -->", "#f5f5f5");
html = html.Replace ("<!-- $small-font-size -->", "10px"); html = html.Replace ("<!-- $a-color -->", "#0085cf");
html = html.Replace ("<!-- $day-entry-header-background-color -->", "#f5f5f5"); html = html.Replace ("<!-- $a-hover-color -->", "#009ff8");
html = html.Replace ("<!-- $a-color -->", "#0085cf"); html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path);
html = html.Replace ("<!-- $a-hover-color -->", "#009ff8"); html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png");
html = html.Replace ("<!-- $pixmaps-path -->", pixmaps_path); html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png");
html = html.Replace ("<!-- $document-added-background-image -->", pixmaps_path + "/document-added-12.png"); html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
html = html.Replace ("<!-- $document-deleted-background-image -->", pixmaps_path + "/document-deleted-12.png"); html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png");
html = html.Replace ("<!-- $document-edited-background-image -->", pixmaps_path + "/document-edited-12.png");
html = html.Replace ("<!-- $document-moved-background-image -->", pixmaps_path + "/document-moved-12.png"); this.web_view = new WebView (new RectangleF (0, 0, 481, 579), "", "") {
Frame = new RectangleF (new PointF (0, 0), new SizeF (ContentView.Frame.Width, ContentView.Frame.Height - 39))
this.web_view = new WebView (new RectangleF (0, 0, 481, 579), "", "") { };
Frame = new RectangleF (new PointF (0, 0),
new SizeF (ContentView.Frame.Width, ContentView.Frame.Height - 39))
};
this.web_view.MainFrame.LoadHtmlString (html, new NSUrl ("")); this.web_view.MainFrame.LoadHtmlString (html, new NSUrl (""));
this.web_view.PolicyDelegate = new SparkleWebPolicyDelegate (); this.web_view.PolicyDelegate = new SparkleWebPolicyDelegate ();
ContentView.AddSubview (this.web_view); ContentView.AddSubview (this.web_view);
(this.web_view.PolicyDelegate as SparkleWebPolicyDelegate).LinkClicked += (this.web_view.PolicyDelegate as SparkleWebPolicyDelegate).LinkClicked += delegate (string href) {
delegate (string href) { if (href.StartsWith ("file:///"))
if (href.StartsWith ("file:///")) href = href.Substring (7);
href = href.Substring (7);
Controller.LinkClicked (href); Controller.LinkClicked (href);
}; };
this.progress_indicator.Hidden = true; this.progress_indicator.Hidden = true;
}
} }

View file

@ -33,68 +33,43 @@ namespace SparkleShare {
public SparkleSetupController Controller = new SparkleSetupController (); public SparkleSetupController Controller = new SparkleSetupController ();
private NSButton ContinueButton; private NSButton ContinueButton, AddButton, CopyButton, TryAgainButton, CancelButton,
private NSButton AddButton; SkipTutorialButton, FinishButton, ShowFilesButton;
private NSButton CopyButton;
private NSButton TryAgainButton; private NSTextField FullNameTextField, FullNameLabel, EmailLabel, EmailTextField, EmailHelpLabel,
private NSButton CancelButton; LinkCodeTextField, AddressTextField, AddressLabel, AddressHelpLabel, PathTextField, PathLabel,
private NSButton SkipTutorialButton; PathHelpLabel, PasswordTextField, VisiblePasswordTextField, PasswordLabel, WarningTextField;
private NSButton StartupCheckButton;
private NSButton HistoryCheckButton; private NSButton StartupCheckButton, HistoryCheckButton, ShowPasswordCheckButton;
private NSButton ShowPasswordCheckButton;
private NSButton ShowFilesButton;
private NSButton FinishButton;
private NSImage SlideImage;
private NSImageView SlideImageView;
private NSProgressIndicator ProgressIndicator; private NSProgressIndicator ProgressIndicator;
private NSTextField EmailLabel; private NSImage WarningImage, SlideImage;
private NSTextField EmailTextField; private NSImageView WarningImageView, SlideImageView;
private NSTextField EmailHelpLabel; private NSTableColumn IconColumn, DescriptionColumn;
private NSTextField FullNameTextField;
private NSTextField FullNameLabel;
private NSTextField LinkCodeTextField;
private NSTextField AddressTextField;
private NSTextField AddressLabel;
private NSTextField AddressHelpLabel;
private NSTextField PathTextField;
private NSTextField PathLabel;
private NSTextField PathHelpLabel;
private NSTextField PasswordTextField;
private NSTextField VisiblePasswordTextField;
private NSTextField PasswordLabel;
private NSTextField WarningTextField;
private NSImage WarningImage;
private NSImageView WarningImageView;
private NSTableView TableView; private NSTableView TableView;
private NSScrollView ScrollView; private NSScrollView ScrollView;
private NSTableColumn IconColumn;
private NSTableColumn DescriptionColumn;
private SparkleDataSource DataSource; private SparkleDataSource DataSource;
public SparkleSetup () : base () public SparkleSetup () : base ()
{ {
Controller.HideWindowEvent += delegate { Controller.HideWindowEvent += delegate {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
PerformClose (this); PerformClose (this);
}); });
}; };
Controller.ShowWindowEvent += delegate { Controller.ShowWindowEvent += delegate {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
OrderFrontRegardless (); OrderFrontRegardless ();
}); });
}; };
Controller.ChangePageEvent += delegate (PageType type, string [] warnings) { Controller.ChangePageEvent += delegate (PageType type, string [] warnings) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ Reset ();
InvokeOnMainThread (delegate { ShowPage (type, warnings);
Reset (); ShowAll ();
ShowPage (type, warnings); });
ShowAll ();
});
}
}; };
} }
@ -180,7 +155,7 @@ namespace SparkleShare {
}; };
Controller.UpdateSetupContinueButtonEvent += delegate (bool button_enabled) { Controller.UpdateSetupContinueButtonEvent += delegate (bool button_enabled) {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
ContinueButton.Enabled = button_enabled; ContinueButton.Enabled = button_enabled;
}); });
}; };
@ -399,7 +374,7 @@ namespace SparkleShare {
Controller.ChangeAddressFieldEvent += delegate (string text, Controller.ChangeAddressFieldEvent += delegate (string text,
string example_text, FieldState state) { string example_text, FieldState state) {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
AddressTextField.StringValue = text; AddressTextField.StringValue = text;
AddressTextField.Enabled = (state == FieldState.Enabled); AddressTextField.Enabled = (state == FieldState.Enabled);
AddressHelpLabel.StringValue = example_text; AddressHelpLabel.StringValue = example_text;
@ -409,7 +384,7 @@ namespace SparkleShare {
Controller.ChangePathFieldEvent += delegate (string text, Controller.ChangePathFieldEvent += delegate (string text,
string example_text, FieldState state) { string example_text, FieldState state) {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
PathTextField.StringValue = text; PathTextField.StringValue = text;
PathTextField.Enabled = (state == FieldState.Enabled); PathTextField.Enabled = (state == FieldState.Enabled);
PathHelpLabel.StringValue = example_text; PathHelpLabel.StringValue = example_text;
@ -445,7 +420,7 @@ namespace SparkleShare {
}; };
Controller.UpdateAddProjectButtonEvent += delegate (bool button_enabled) { Controller.UpdateAddProjectButtonEvent += delegate (bool button_enabled) {
InvokeOnMainThread (delegate { Program.Controller.Invoke (() => {
AddButton.Enabled = button_enabled; AddButton.Enabled = button_enabled;
}); });
}; };
@ -493,7 +468,7 @@ namespace SparkleShare {
Controller.UpdateProgressBarEvent += delegate (double percentage) { Controller.UpdateProgressBarEvent += delegate (double percentage) {
InvokeOnMainThread (() => { Program.Controller.Invoke (() => {
ProgressIndicator.DoubleValue = percentage; ProgressIndicator.DoubleValue = percentage;
}); });
}; };
@ -664,7 +639,7 @@ namespace SparkleShare {
Controller.UpdateCryptoSetupContinueButtonEvent += delegate (bool button_enabled) { Controller.UpdateCryptoSetupContinueButtonEvent += delegate (bool button_enabled) {
InvokeOnMainThread (() => { Program.Controller.Invoke (() => {
ContinueButton.Enabled = button_enabled; ContinueButton.Enabled = button_enabled;
}); });
}; };
@ -733,7 +708,7 @@ namespace SparkleShare {
Controller.UpdateCryptoPasswordContinueButtonEvent += delegate (bool button_enabled) { Controller.UpdateCryptoPasswordContinueButtonEvent += delegate (bool button_enabled) {
InvokeOnMainThread (() => { Program.Controller.Invoke (() => {
ContinueButton.Enabled = button_enabled; ContinueButton.Enabled = button_enabled;
}); });
}; };

View file

@ -29,17 +29,13 @@ namespace SparkleShare {
public SparkleStatusIconController Controller = new SparkleStatusIconController (); public SparkleStatusIconController Controller = new SparkleStatusIconController ();
private NSStatusItem status_item = NSStatusBar.SystemStatusBar.CreateStatusItem (28);
private NSMenu menu; private NSMenu menu;
private NSMenu submenu; private NSMenu submenu;
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 [] 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;
@ -61,26 +57,24 @@ namespace SparkleShare {
private NSImage caution_image = NSImage.ImageNamed ("NSCaution"); private NSImage caution_image = NSImage.ImageNamed ("NSCaution");
private NSImage sparkleshare_image = NSImage.ImageNamed ("sparkleshare-folder"); private NSImage sparkleshare_image = NSImage.ImageNamed ("sparkleshare-folder");
private NSMenuItem [] folder_menu_items;
private NSMenuItem [] error_menu_items;
private NSMenuItem [] try_again_menu_items;
public SparkleStatusIcon () : base () public SparkleStatusIcon () : base ()
{ {
using (var a = new NSAutoreleasePool ()) this.status_item.HighlightMode = true;
{ this.status_item.Image = this.syncing_idle_image;
this.status_item.HighlightMode = true; this.status_item.AlternateImage = this.syncing_idle_image_active;
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.Size = new SizeF (16, 16);
this.status_item.Image.Size = new SizeF (16, 16);
this.status_item.AlternateImage.Size = new SizeF (16, 16);
CreateMenu (); CreateMenu ();
}
Controller.UpdateIconEvent += delegate (IconState state) { Controller.UpdateIconEvent += delegate (IconState state) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{ switch (state) {
InvokeOnMainThread (delegate {
switch (state) {
case IconState.Idle: { case IconState.Idle: {
this.status_item.Image = this.syncing_idle_image; this.status_item.Image = this.syncing_idle_image;
this.status_item.AlternateImage = this.syncing_idle_image_active; this.status_item.AlternateImage = this.syncing_idle_image_active;
@ -106,161 +100,144 @@ namespace SparkleShare {
this.status_item.AlternateImage = this.syncing_error_image_active; this.status_item.AlternateImage = this.syncing_error_image_active;
break; break;
} }
} }
this.status_item.Image.Size = new SizeF (16, 16); 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);
}); });
}
}; };
Controller.UpdateStatusItemEvent += delegate (string state_text) { Controller.UpdateStatusItemEvent += delegate (string state_text) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => { this.state_item.Title = state_text; });
{
InvokeOnMainThread (delegate {
this.state_item.Title = state_text;
});
}
}; };
Controller.UpdateMenuEvent += delegate { Controller.UpdateMenuEvent += delegate {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => CreateMenu ());
{
InvokeOnMainThread (() => CreateMenu ());
}
}; };
Controller.UpdateQuitItemEvent += delegate (bool quit_item_enabled) { Controller.UpdateQuitItemEvent += delegate (bool quit_item_enabled) {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => { this.quit_item.Enabled = quit_item_enabled; });
{
InvokeOnMainThread (delegate {
this.quit_item.Enabled = quit_item_enabled;
});
}
}; };
} }
public void CreateMenu () public void CreateMenu ()
{ {
using (NSAutoreleasePool a = new NSAutoreleasePool ()) this.menu = new NSMenu ();
{ this.menu.AutoEnablesItems = false;
this.menu = new NSMenu ();
this.menu.AutoEnablesItems = false;
this.state_item = new NSMenuItem () { this.state_item = new NSMenuItem () {
Title = Controller.StateText, Title = Controller.StateText,
Enabled = false Enabled = false
};
this.folder_item = new NSMenuItem () {
Title = "SparkleShare",
Enabled = true
};
this.folder_item.Image = this.sparkleshare_image;
this.folder_item.Image.Size = new SizeF (16, 16);
this.add_item = new NSMenuItem () {
Title = "Add Hosted Project…",
Enabled = true
};
this.add_item.Activated += delegate {
Controller.AddHostedProjectClicked ();
};
this.recent_events_item = new NSMenuItem () {
Title = "Recent Changes…",
Enabled = Controller.RecentEventsItemEnabled
};
if (Controller.Folders.Length > 0) {
this.recent_events_item.Activated += delegate {
Controller.RecentEventsClicked ();
}; };
this.folder_item = new NSMenuItem () {
Title = "SparkleShare",
Enabled = true
};
this.folder_item.Image = this.sparkleshare_image;
this.folder_item.Image.Size = new SizeF (16, 16);
this.add_item = new NSMenuItem () {
Title = "Add Hosted Project…",
Enabled = true
};
this.add_item.Activated += delegate {
Controller.AddHostedProjectClicked ();
};
this.recent_events_item = new NSMenuItem () {
Title = "Recent Changes…",
Enabled = Controller.RecentEventsItemEnabled
};
if (Controller.Folders.Length > 0) {
this.recent_events_item.Activated += delegate {
Controller.RecentEventsClicked ();
};
}
this.about_item = new NSMenuItem () {
Title = "About SparkleShare",
Enabled = true
};
this.about_item.Activated += delegate {
Controller.AboutClicked ();
};
this.quit_item = new NSMenuItem () {
Title = "Quit",
Enabled = Controller.QuitItemEnabled
};
this.quit_item.Activated += delegate {
Controller.QuitClicked ();
};
this.menu.AddItem (this.state_item);
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.folder_item);
this.submenu = new NSMenu ();
this.submenu.AddItem (this.recent_events_item);
this.submenu.AddItem (this.add_item);
this.submenu.AddItem (NSMenuItem.SeparatorItem);
this.submenu.AddItem (this.about_item);
this.folder_item.Submenu = this.submenu;
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) {
int i = 0;
foreach (string folder_name in Controller.Folders) {
NSMenuItem item = new NSMenuItem ();
item.Title = folder_name;
this.folder_menu_items [i] = item;
if (!string.IsNullOrEmpty (Controller.FolderErrors [i])) {
item.Image = this.caution_image;
item.Submenu = new NSMenu ();
this.error_menu_items [i] = new NSMenuItem () {
Title = Controller.FolderErrors [i]
};
this.try_again_menu_items [i] = new NSMenuItem ();
this.try_again_menu_items [i].Title = "Try Again";
this.try_again_menu_items [i].Activated += Controller.TryAgainDelegate (folder_name);;
item.Submenu.AddItem (this.error_menu_items [i]);
item.Submenu.AddItem (NSMenuItem.SeparatorItem);
item.Submenu.AddItem (this.try_again_menu_items [i]);
} else {
item.Image = this.folder_image;
this.folder_menu_items [i].Activated += Controller.OpenFolderDelegate (folder_name);
}
item.Image.Size = new SizeF (16, 16);
i++;
};
}
foreach (NSMenuItem item in this.folder_menu_items)
this.menu.AddItem (item);
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.quit_item);
this.menu.Delegate = new SparkleStatusIconMenuDelegate ();
this.status_item.Menu = this.menu;
} }
this.about_item = new NSMenuItem () {
Title = "About SparkleShare",
Enabled = true
};
this.about_item.Activated += delegate {
Controller.AboutClicked ();
};
this.quit_item = new NSMenuItem () {
Title = "Quit",
Enabled = Controller.QuitItemEnabled
};
this.quit_item.Activated += delegate {
Controller.QuitClicked ();
};
this.menu.AddItem (this.state_item);
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.folder_item);
this.submenu = new NSMenu ();
this.submenu.AddItem (this.recent_events_item);
this.submenu.AddItem (this.add_item);
this.submenu.AddItem (NSMenuItem.SeparatorItem);
this.submenu.AddItem (this.about_item);
this.folder_item.Submenu = this.submenu;
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) {
int i = 0;
foreach (string folder_name in Controller.Folders) {
NSMenuItem item = new NSMenuItem ();
item.Title = folder_name;
this.folder_menu_items [i] = item;
if (!string.IsNullOrEmpty (Controller.FolderErrors [i])) {
item.Image = this.caution_image;
item.Submenu = new NSMenu ();
this.error_menu_items [i] = new NSMenuItem () {
Title = Controller.FolderErrors [i]
};
this.try_again_menu_items [i] = new NSMenuItem ();
this.try_again_menu_items [i].Title = "Try Again";
this.try_again_menu_items [i].Activated += Controller.TryAgainDelegate (folder_name);;
item.Submenu.AddItem (this.error_menu_items [i]);
item.Submenu.AddItem (NSMenuItem.SeparatorItem);
item.Submenu.AddItem (this.try_again_menu_items [i]);
} else {
item.Image = this.folder_image;
this.folder_menu_items [i].Activated += Controller.OpenFolderDelegate (folder_name);
}
item.Image.Size = new SizeF (16, 16);
i++;
};
}
foreach (NSMenuItem item in this.folder_menu_items)
this.menu.AddItem (item);
this.menu.AddItem (NSMenuItem.SeparatorItem);
this.menu.AddItem (this.quit_item);
this.menu.Delegate = new SparkleStatusIconMenuDelegate ();
this.status_item.Menu = this.menu;
} }
} }

View file

@ -42,21 +42,20 @@ namespace SparkleShare {
public SparkleUI () public SparkleUI ()
{ {
using (var a = new NSAutoreleasePool ()) Program.Controller.Invoke (() => {
{
NSApplication.SharedApplication.ApplicationIconImage = NSImage.ImageNamed ("sparkleshare-app.icns");
NSWorkspace.SharedWorkspace.SetIconforFile (NSImage.ImageNamed ("sparkleshare-folder.icns"), NSWorkspace.SharedWorkspace.SetIconforFile (NSImage.ImageNamed ("sparkleshare-folder.icns"),
Program.Controller.FoldersPath, 0); Program.Controller.FoldersPath, 0);
Setup = new SparkleSetup ();
EventLog = new SparkleEventLog ();
About = new SparkleAbout ();
Bubbles = new SparkleBubbles ();
StatusIcon = new SparkleStatusIcon ();
Program.Controller.UIHasLoaded (); NSApplication.SharedApplication.ApplicationIconImage = NSImage.ImageNamed ("sparkleshare-app.icns");
}
Setup = new SparkleSetup ();
EventLog = new SparkleEventLog ();
About = new SparkleAbout ();
Bubbles = new SparkleBubbles ();
StatusIcon = new SparkleStatusIcon ();
});
Program.Controller.UIHasLoaded ();
} }