diff --git a/SparkleShare/Mac/SparkleNote.cs b/SparkleShare/Mac/SparkleNote.cs
index a545aa95..9726032d 100755
--- a/SparkleShare/Mac/SparkleNote.cs
+++ b/SparkleShare/Mac/SparkleNote.cs
@@ -24,29 +24,29 @@ using MonoMac.Foundation;
namespace SparkleShare {
- public class SparkleAbout : NSWindow {
+ public class SparkleNote : NSWindow {
- public SparkleAboutController Controller = new SparkleAboutController ();
+ public SparkleNoteController Controller = new SparkleNoteController ();
- private NSTextField version_text_field, updates_text_field, credits_text_field;
- private SparkleLink website_link, credits_link, report_problem_link, debug_log_link;
- private NSImage about_image;
- private NSImageView about_image_view;
- private NSButton hidden_close_button;
+ private NSImage user_image, balloon_image;
+ private NSImageView user_image_view, balloon_image_view;
+ private NSButton hidden_close_button, cancel_button, sync_button;
+ private NSBox cover;
+ private NSTextField user_name_text_field, user_email_text_field, balloon_text_field;
- public SparkleAbout (IntPtr handle) : base (handle) { }
+ public SparkleNote (IntPtr handle) : base (handle) { }
- public SparkleAbout () : base ()
+ public SparkleNote () : base ()
{
- SetFrame (new RectangleF (0, 0, 640, 281), true);
+ SetFrame (new RectangleF (0, 0, 480, 240), true);
Center ();
- Delegate = new SparkleAboutDelegate ();
+ Delegate = new SparkleNoteDelegate ();
StyleMask = (NSWindowStyle.Closable | NSWindowStyle.Titled);
- Title = "About SparkleShare";
- MaxSize = new SizeF (640, 281);
- MinSize = new SizeF (640, 281);
+ Title = "Add Note";
+ MaxSize = new SizeF (480, 240);
+ MinSize = new SizeF (480, 240);
HasShadow = true;
BackingType = NSBackingStore.Buffered;
Level = NSWindowLevel.Floating;
@@ -57,7 +57,7 @@ namespace SparkleShare {
KeyEquivalent = "w"
};
- CreateAbout ();
+ CreateNote ();
this.hidden_close_button.Activated += delegate { Controller.WindowClosed (); };
@@ -68,10 +68,11 @@ namespace SparkleShare {
Controller.ShowWindowEvent += delegate {
Program.Controller.Invoke (() => OrderFrontRegardless ());
+ CreateNote ();
};
- Controller.UpdateLabelEvent += delegate (string text) {
- Program.Controller.Invoke (() => { this.updates_text_field.StringValue = text; });
+ Controller.UpdateTitleEvent += delegate (string title) {
+ Program.Controller.Invoke (() => { Title = title; });
};
@@ -79,72 +80,120 @@ namespace SparkleShare {
}
- private void CreateAbout ()
+ private void CreateNote ()
{
- this.about_image = NSImage.ImageNamed ("about");
- this.about_image.Size = new SizeF (720, 260);
-
- this.about_image_view = new NSImageView () {
- Image = this.about_image,
- Frame = new RectangleF (0, 0, 720, 260)
+ this.cover = new NSBox () {
+ Frame = new RectangleF (
+ new PointF (-1, 58),
+ new SizeF (Frame.Width + 2, this.ContentView.Frame.Height + 1)),
+ FillColor = NSColor.FromCalibratedRgba (0.77f, 0.77f, 0.75f, 1.0f),
+ BorderColor = NSColor.LightGray,
+ BoxType = NSBoxType.NSBoxCustom
};
- this.version_text_field = new SparkleLabel ("version " + Controller.RunningVersion, NSTextAlignment.Left) {
- DrawsBackground = false,
- Frame = new RectangleF (295, 140, 318, 22),
- TextColor = NSColor.White,
- Font = NSFontManager.SharedFontManager.FontWithFamily (
- "Lucida Grande", NSFontTraitMask.Unbold, 0, 11)
- };
- this.updates_text_field = new SparkleLabel ("Checking for updates...", NSTextAlignment.Left) {
- DrawsBackground = false,
- Frame = new RectangleF (295, Frame.Height - 232, 318, 98),
- TextColor = NSColor.FromCalibratedRgba (1.0f, 1.0f, 1.0f, 0.5f),
- Font = NSFontManager.SharedFontManager.FontWithFamily (
- "Lucida Grande", NSFontTraitMask.Unbold, 0, 11)
+ this.user_name_text_field = new NSTextField () {
+ Alignment = NSTextAlignment.Left,
+ BackgroundColor = NSColor.FromCalibratedRgba (0.77f, 0.77f, 0.75f, 1.0f),
+ Bordered = false,
+ Editable = false,
+ Frame = new RectangleF (
+ new PointF (85, ContentView.Frame.Height - 42),
+ new SizeF (320, 20)),
+ StringValue = Program.Controller.CurrentUser.Name,
+ Font = SparkleUI.BoldFont
};
-
- this.credits_text_field = new SparkleLabel (
- @"Copyright © 2010–" + DateTime.Now.Year + " Hylke Bons and others." +
- "\n" +
- "\n" +
- "SparkleShare is Open Source software. You are free to use, modify, and redistribute it " +
- "under the GNU General Public License version 3 or later.", NSTextAlignment.Left) {
-
- DrawsBackground = false,
- Frame = new RectangleF (295, Frame.Height - 260, 318, 98),
- TextColor = NSColor.White,
- Font = NSFontManager.SharedFontManager.FontWithFamily (
- "Lucida Grande", NSFontTraitMask.Unbold, 0, 11),
- };
-
- this.website_link = new SparkleLink ("Website", Controller.WebsiteLinkAddress);
- 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.Frame = new RectangleF (
- new PointF (this.website_link.Frame.X + this.website_link.Frame.Width + 10, 25),
- this.credits_link.Frame.Size);
-
- this.report_problem_link = new SparkleLink ("Report a problem", Controller.ReportProblemLinkAddress);
- this.report_problem_link.Frame = new RectangleF (
- new PointF (this.credits_link.Frame.X + this.credits_link.Frame.Width + 10, 25),
- this.report_problem_link.Frame.Size);
-
- this.debug_log_link = new SparkleLink ("Debug log", Controller.DebugLogLinkAddress);
- this.debug_log_link.Frame = new RectangleF (
- new PointF (this.report_problem_link.Frame.X + this.report_problem_link.Frame.Width + 10, 25),
- this.debug_log_link.Frame.Size);
+ this.user_email_text_field = new NSTextField () {
+ Alignment = NSTextAlignment.Left,
+ BackgroundColor = NSColor.FromCalibratedRgba (0.77f, 0.77f, 0.75f, 1.0f),
+ TextColor = NSColor.DisabledControlText,
+ Bordered = false,
+ Editable = false,
+ Frame = new RectangleF (
+ new PointF (85, ContentView.Frame.Height - 60),
+ new SizeF (320, 20)),
+ StringValue = Program.Controller.CurrentUser.Email,
+ Font = SparkleUI.Font
+ };
- ContentView.AddSubview (this.about_image_view);
- ContentView.AddSubview (this.version_text_field);
- ContentView.AddSubview (this.updates_text_field);
- ContentView.AddSubview (this.credits_text_field);
- ContentView.AddSubview (this.website_link);
- ContentView.AddSubview (this.credits_link);
- ContentView.AddSubview (this.report_problem_link);
- ContentView.AddSubview (this.debug_log_link);
+
+ this.balloon_text_field = new NSTextField () {
+ Alignment = NSTextAlignment.Left,
+ BackgroundColor = NSColor.White,
+ Bordered = false,
+ Editable = true,
+ Frame = new RectangleF (
+ new PointF (30, ContentView.Frame.Height - 137),
+ new SizeF (418, 48))
+ };
+
+ (this.balloon_text_field.Cell as NSTextFieldCell).PlaceholderString = "Anything to add?";
+ (this.balloon_text_field.Cell as NSTextFieldCell).LineBreakMode = NSLineBreakMode.ByWordWrapping;
+ (this.balloon_text_field.Cell as NSTextFieldCell).UsesSingleLineMode = false;
+
+ this.balloon_text_field.Cell.FocusRingType = NSFocusRingType.None;
+
+
+ this.cancel_button = new NSButton () {
+ Title = "Cancel",
+ BezelStyle = NSBezelStyle.Rounded,
+ Frame = new RectangleF (Frame.Width - 15 - 105 * 2, 12, 105, 32),
+ Font = SparkleUI.Font
+ };
+
+ this.sync_button = new NSButton () {
+ Title = "Sync",
+ BezelStyle = NSBezelStyle.Rounded,
+ Frame = new RectangleF (Frame.Width - 15 - 105, 12, 105, 32),
+ Font = SparkleUI.Font
+ };
+
+ this.cancel_button.Activated += delegate { Controller.CancelClicked (); };
+ this.sync_button.Activated += delegate { Controller.SyncClicked (this.balloon_text_field.StringValue); };
+
+ DefaultButtonCell = this.sync_button.Cell;
+
+
+ if (BackingScaleFactor >= 2)
+ this.balloon_image = NSImage.ImageNamed ("text-balloon@2x");
+ else
+ this.balloon_image = NSImage.ImageNamed ("text-balloon");
+
+ this.balloon_image.Size = new SizeF (438, 72);
+ this.balloon_image_view = new NSImageView () {
+ Image = this.balloon_image,
+ Frame = new RectangleF (21, ContentView.Frame.Height - 145, 438, 72)
+ };
+
+
+ if (!string.IsNullOrEmpty (Controller.AvatarFilePath))
+ this.user_image = new NSImage (Controller.AvatarFilePath);
+ else
+ this.user_image = NSImage.ImageNamed ("user-icon-default");
+
+ this.user_image.Size = new SizeF (48, 48);
+ this.user_image_view = new NSImageView () {
+ Image = this.user_image,
+ Frame = new RectangleF (21, ContentView.Frame.Height - 65, 48, 48)
+ };
+
+ this.user_image_view.WantsLayer = true;
+ this.user_image_view.Layer.CornerRadius = 5.0f;
+ this.user_image_view.Layer.MasksToBounds = true;
+
+
+ ContentView.AddSubview (this.cover);
+ ContentView.AddSubview (this.cancel_button);
+ ContentView.AddSubview (this.sync_button);
+ ContentView.AddSubview (this.user_name_text_field);
+ ContentView.AddSubview (this.user_email_text_field);
+
+ ContentView.AddSubview (this.user_image_view);
+ ContentView.AddSubview (this.balloon_image_view);
+ ContentView.AddSubview (this.balloon_text_field);
+
+ MakeFirstResponder ((NSResponder) this.balloon_text_field);
}
@@ -170,57 +219,19 @@ namespace SparkleShare {
return;
}
+ public override bool AcceptsFirstResponder ()
+ {
+ return true;
+ }
- private class SparkleAboutDelegate : NSWindowDelegate {
+
+ private class SparkleNoteDelegate : NSWindowDelegate {
public override bool WindowShouldClose (NSObject sender)
{
- (sender as SparkleAbout).Controller.WindowClosed ();
+ (sender as SparkleNote).Controller.WindowClosed ();
return false;
}
}
-
-
- private class SparkleLink : NSTextField {
-
- private NSUrl url;
-
-
- public SparkleLink (string text, string address) : base ()
- {
- this.url = new NSUrl (address);
-
- AllowsEditingTextAttributes = true;
- BackgroundColor = NSColor.White;
- Bordered = false;
- DrawsBackground = false;
- Editable = false;
- Selectable = false;
-
- NSData name_data = NSData.FromString ("" + text + "");
-
- NSDictionary name_dictionary = new NSDictionary();
- NSAttributedString name_attributes = new NSAttributedString (name_data, new NSUrl ("file://"), out name_dictionary);
-
- NSMutableAttributedString s = new NSMutableAttributedString ();
- s.Append (name_attributes);
-
- Cell.AttributedStringValue = s;
- SizeToFit ();
- }
-
-
- public override void MouseUp (NSEvent e)
- {
- Program.Controller.OpenWebsite (this.url.ToString ());
- }
-
-
- public override void ResetCursorRects ()
- {
- AddCursorRect (Bounds, NSCursor.PointingHandCursor);
- }
- }
}
}
diff --git a/SparkleShare/Mac/SparkleShare.csproj b/SparkleShare/Mac/SparkleShare.csproj
index 8a002dcf..f01ce8ad 100644
--- a/SparkleShare/Mac/SparkleShare.csproj
+++ b/SparkleShare/Mac/SparkleShare.csproj
@@ -100,6 +100,10 @@
SparkleKeys.cs
+
+ SparkleNoteController.cs
+
+
@@ -262,5 +266,11 @@
Plugins\planio%402x.png
+
+ Resources\text-balloon.png
+
+
+ Resources\text-balloon%402x.png
+
diff --git a/SparkleShare/Mac/SparkleUI.cs b/SparkleShare/Mac/SparkleUI.cs
index 1b86ca85..d187eb9a 100755
--- a/SparkleShare/Mac/SparkleUI.cs
+++ b/SparkleShare/Mac/SparkleUI.cs
@@ -29,7 +29,8 @@ namespace SparkleShare {
public SparkleSetup Setup;
public SparkleBubbles Bubbles;
public SparkleAbout About;
-
+ public SparkleNote Note;
+
public static NSFont Font = NSFontManager.SharedFontManager.FontWithFamily (
"Lucida Grande", NSFontTraitMask.Condensed, 0, 13);
@@ -48,6 +49,7 @@ namespace SparkleShare {
Setup = new SparkleSetup ();
EventLog = new SparkleEventLog ();
About = new SparkleAbout ();
+ Note = new SparkleNote ();
Bubbles = new SparkleBubbles ();
StatusIcon = new SparkleStatusIcon ();
});
diff --git a/SparkleShare/SparkleNoteController.cs b/SparkleShare/SparkleNoteController.cs
index 1998f108..47809d25 100755
--- a/SparkleShare/SparkleNoteController.cs
+++ b/SparkleShare/SparkleNoteController.cs
@@ -29,18 +29,20 @@ namespace SparkleShare {
public event UpdateTitleEventDelegate UpdateTitleEvent = delegate { };
public delegate void UpdateTitleEventDelegate (string title);
+ public string AvatarFilePath = "";
public string CurrentProject { get; private set; }
public SparkleNoteController ()
{
- RunningVersion = SparkleLib.SparkleBackend.Version;
-
Program.Controller.ShowNoteWindowEvent += delegate (string project) {
CurrentProject = project;
ShowWindowEvent ();
UpdateTitleEvent (CurrentProject);
};
+
+ AvatarFilePath = SparkleAvatars.GetAvatar (Program.Controller.CurrentUser.Email,
+ 48, Program.Controller.Config.FullPath);
}
diff --git a/SparkleShare/SparkleStatusIconController.cs b/SparkleShare/SparkleStatusIconController.cs
index 95fd0878..2a64ca9b 100755
--- a/SparkleShare/SparkleStatusIconController.cs
+++ b/SparkleShare/SparkleStatusIconController.cs
@@ -339,7 +339,7 @@ namespace SparkleShare {
Program.Controller.ShowNoteWindow (project);
} else {
- new System.Threading.Thread (() => {
+ new Thread (() => {
Program.Controller.GetRepoByName (project).Resume ("");
UpdateStateText ();