MainWindowController.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using Foundation;
  3. using AppKit;
  4. using TwitterSearch.Portable.ViewModels;
  5. using CoreGraphics;
  6. namespace TwitterSearch.Mac
  7. {
  8. public partial class MainWindowController : NSWindowController, INSTableViewDataSource, INSTableViewDelegate
  9. {
  10. public MainWindowController (IntPtr handle) : base (handle)
  11. {
  12. }
  13. [Export ("initWithCoder:")]
  14. public MainWindowController (NSCoder coder) : base (coder)
  15. {
  16. }
  17. public MainWindowController () : base ("MainWindow")
  18. {
  19. }
  20. TwitterViewModel viewModel;
  21. bool IsBusy;
  22. public override void AwakeFromNib ()
  23. {
  24. base.AwakeFromNib ();
  25. viewModel = new TwitterViewModel();
  26. Search.EditingEnded += OnLoadPressed;
  27. LoadTweets.Activated += OnLoadPressed;
  28. TweetTable.WeakDataSource = this;
  29. TweetTable.WeakDelegate = this;
  30. TweetTable.HeaderView = null;
  31. }
  32. async void OnLoadPressed (object o, EventArgs e)
  33. {
  34. if (IsBusy)
  35. return;
  36. IsBusy = true;
  37. LoadTweets.Enabled = false;
  38. Search.ResignFirstResponder ();
  39. await viewModel.LoadTweetsCommand (Search.StringValue.Trim ());
  40. TweetTable.ReloadData ();
  41. TweetTable.SizeToFit ();
  42. LoadTweets.Enabled = true;
  43. IsBusy = false;
  44. }
  45. [Export ("numberOfRowsInTableView:")]
  46. public System.nint GetRowCount (AppKit.NSTableView tableView)
  47. {
  48. return viewModel.Tweets.Count;
  49. }
  50. [Export ("tableView:heightOfRow:")]
  51. public System.nfloat GetRowHeight (AppKit.NSTableView tableView, System.nint row)
  52. {
  53. return 50;
  54. }
  55. const string identifer = "myCellIdentifier";
  56. [Export ("tableView:viewForTableColumn:row:")]
  57. public AppKit.NSView GetViewForItem (AppKit.NSTableView tableView, AppKit.NSTableColumn tableColumn, System.nint row)
  58. {
  59. if (viewModel.Tweets.Count < row)
  60. return null;
  61. TweetView view = (TweetView)tableView.MakeView (identifer, this);
  62. if (view == null) {
  63. TweetViewController c = new TweetViewController ();
  64. view = c.View;
  65. view.Frame = new CGRect (0, 0, tableView.Frame.Width, 0);
  66. view.Identifier = identifer;
  67. }
  68. view.Tweet = viewModel.Tweets [(int)row];
  69. return view;
  70. }
  71. public new MainWindow Window {
  72. get { return (MainWindow)base.Window; }
  73. }
  74. }
  75. }