diff options
author | Jeremie Laval <jeremie.laval@gmail.com> | 2012-03-12 22:55:26 +0400 |
---|---|---|
committer | Jeremie Laval <jeremie.laval@gmail.com> | 2012-03-12 22:57:48 +0400 |
commit | 182d6fbfcc02a128081623b120262b66c5725907 (patch) | |
tree | 3d0cb260bf77c451423f1c00070bc19e59933f7d /WebViewExtraordinaire.cs | |
parent | e0e1bdc47bf2dba28baad64318d8cd561ce9eb5c (diff) |
[macdoc] Add search and find shortcuts and implementation
Diffstat (limited to 'WebViewExtraordinaire.cs')
-rw-r--r-- | WebViewExtraordinaire.cs | 54 |
1 files changed, 53 insertions, 1 deletions
diff --git a/WebViewExtraordinaire.cs b/WebViewExtraordinaire.cs index 260f75f..77cb2db 100644 --- a/WebViewExtraordinaire.cs +++ b/WebViewExtraordinaire.cs @@ -26,6 +26,9 @@ namespace macdoc public event EventHandler<SwipeEventArgs> SwipeEvent; public event EventHandler<SwipeEventArgs> OngoingSwipeEvent; + FindBarExtraordinaireController findBarController; + NSScrollView currentScrollView; + public WebViewExtraordinaire (IntPtr handle) : base (handle) { Initialize (); @@ -39,8 +42,11 @@ namespace macdoc void Initialize () { + findBarController = new FindBarExtraordinaireController (); IsSwipeEnabled = NSEvent.IsSwipeTrackingFromScrollEventsEnabled; - //FinishedLoad += (sender, e) => MainFrame.FrameView.DocumentView.EnclosingScrollView.HorizontalScrollElasticity = NSScrollElasticity.Allowed; + FinishedLoad += (sender, e) => SetupFindBar (MainFrame.FrameView.DocumentView.EnclosingScrollView); + findBarController.View.FindTextChanged += (sender, e) => InternalPerformFinderAction (NSTextFinderAction.SetSearchString); + findBarController.View.CloseFindPanel += (sender, e) => InternalPerformFinderAction (NSTextFinderAction.HideFindInterface); } public bool IsSwipeEnabled { get; set; } @@ -117,6 +123,52 @@ namespace macdoc if (temp != null) temp (this, new SwipeEventArgs { Side = status }); } + + public override void PerformFindPanelAction (NSObject sender) + { + var ctrl = sender as NSMenuItem; + if (ctrl == null) + return; + + InternalPerformFinderAction ((NSTextFinderAction)ctrl.Tag); + } + + void InternalPerformFinderAction (NSTextFinderAction action) + { + switch (action) { + case NSTextFinderAction.ShowFindInterface: + if (currentScrollView != null) + currentScrollView.FindBarVisible = true; + findBarController.View.GrabFocus (); + break; + case NSTextFinderAction.HideFindInterface: + if (currentScrollView != null) + currentScrollView.FindBarVisible = false; + break; + case NSTextFinderAction.NextMatch: + case NSTextFinderAction.SetSearchString: + DoSearch (true); + break; + case NSTextFinderAction.PreviousMatch: + DoSearch (false); + break; + default: + break; + } + } + + void SetupFindBar (NSScrollView scrollView) + { + currentScrollView = scrollView; + scrollView.FindBarView = findBarController.View; + scrollView.FindBarPosition = NSScrollViewFindBarPosition.AboveContent; + } + + void DoSearch (bool forward) + { + var findBar = findBarController.View; + Search (findBar.FindText, forward, findBar.CaseSensitive, findBar.Wrap); + } } } |