diff options
author | Jeremie Laval <jeremie.laval@gmail.com> | 2012-02-15 16:51:17 +0400 |
---|---|---|
committer | Jeremie Laval <jeremie.laval@gmail.com> | 2012-02-15 21:29:51 +0400 |
commit | 841d29fb4c99c79715a8ad0b88b9974a871de5e7 (patch) | |
tree | 44845ef76c010158c277cd8f31662dc427e97f75 /BookmarkAssistantController.cs | |
parent | 50f1869f63642b70323e6b0598af48e3fbc9df94 (diff) |
[macdoc] Add bookmark manager
Diffstat (limited to 'BookmarkAssistantController.cs')
-rw-r--r-- | BookmarkAssistantController.cs | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/BookmarkAssistantController.cs b/BookmarkAssistantController.cs new file mode 100644 index 0000000..873253a --- /dev/null +++ b/BookmarkAssistantController.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using MonoMac.Foundation; +using MonoMac.AppKit; + +namespace macdoc +{ + public partial class BookmarkAssistantController : MonoMac.AppKit.NSViewController + { + IList<BookmarkManager.Entry> entries; + BookmarkDataSource source; + + public BookmarkAssistantController (IntPtr handle) : base (handle) + { + } + + [Export ("initWithCoder:")] + public BookmarkAssistantController (NSCoder coder) : base (coder) + { + } + + public BookmarkAssistantController (IList<BookmarkManager.Entry> entries) : base ("BookmarkAssistant", NSBundle.MainBundle) + { + this.entries = entries; + this.source = new BookmarkDataSource (entries, AppDelegate.BookmarkManager); + View.TableView.DataSource = source; + View.TableView.Activated += HandleViewTableViewActivated; + } + + void HandleViewTableViewActivated (object sender, EventArgs e) + { + var tableView = (NSTableView)sender; + var row = tableView.ClickedRow; + var column = tableView.ClickedColumn; + + // Only process action on the delete button + if (row == -1 || column != 3 || row >= entries.Count) + return; + + var entry = entries[row]; + AppDelegate.BookmarkManager.DeleteBookmark (entry); + Console.WriteLine ("Removed entry {0}", entry.Name); + View.TableView.ReloadData (); + } + + public new BookmarkAssistant View { + get { + return (BookmarkAssistant)base.View; + } + } + + public class BookmarkDataSource : NSTableViewDataSource + { + IList<BookmarkManager.Entry> entries; + BookmarkManager manager; + + public BookmarkDataSource (IList<BookmarkManager.Entry> entries, BookmarkManager manager) + { + this.entries = entries; + this.manager = manager; + } + + public override NSObject GetObjectValue (NSTableView tableView, NSTableColumn tableColumn, int row) + { + if (tableColumn == null) + return null; + + int columnIndex = tableView.FindColumn ((NSString)tableColumn.Identifier); + switch (columnIndex) { + case 0: + return new NSString (entries[row].Name); + case 1: + return new NSString (entries[row].Notes); + case 2: + return new NSString (entries[row].Url); + default: + return null; + } + } + + public override void SetObjectValue (NSTableView tableView, NSObject theObject, NSTableColumn tableColumn, int row) + { + NSString newNSValue = theObject as NSString; + if (newNSValue == null) + return; + string newValue = newNSValue.ToString (); + int columnIndex = tableView.FindColumn ((NSString)tableColumn.Identifier); + BookmarkManager.Entry entry = entries[row]; + switch (columnIndex) { + case 0: + if (!string.IsNullOrWhiteSpace (newValue)) + entry.Name = newValue; + break; + case 1: + entry.Notes = newValue; + break; + case 2: + if (!string.IsNullOrWhiteSpace (newValue)) + entry.Url = newValue; + break; + default: + break; + } + manager.CommitBookmarkChange (entry); + } + + public override int GetRowCount (NSTableView tableView) + { + return entries.Count; + } + } + } +} + |