xamarin-macios/tests/qa-regression/WebKitDelegateEvents/MainWindowController.cs

145 строки
3.4 KiB
C#

using System;
using MonoMac.Foundation;
using MonoMac.AppKit;
using MonoMac.WebKit;
namespace WebKitDelegateEvents
{
public partial class MainWindowController : NSWindowController
{
string currentLocation;
public MainWindowController (IntPtr handle) : base (handle)
{
}
[Export ("initWithCoder:")]
public MainWindowController (NSCoder coder) : base (coder)
{
}
public MainWindowController () : base ("MainWindow")
{
}
void Navigate ()
{
var location = locationTextField.StringValue;
if (currentLocation != location) {
currentLocation = location;
webView.MainFrame.LoadRequest (new NSUrlRequest (new NSUrl (location)));
Window.MakeFirstResponder (webView);
}
}
class DomOutlineViewDelegate : NSOutlineViewDelegate
{
public override void SelectionDidChange (NSNotification notification)
{
Console.WriteLine ("SELECTION CHANGE VIA DELEGATE");
}
}
class DomOutlineViewDataSource : NSOutlineViewDataSource
{
WebView webView;
DomNodeList GetChildren (NSObject item)
{
var node = item as DomNode;
if (node != null && node.HasChildNodes ())
return node.ChildNodes;
return null;
}
public DomOutlineViewDataSource (WebView webView)
{
this.webView = webView;
}
public override int GetChildrenCount (NSOutlineView outlineView, NSObject item)
{
if (item == null)
return 1;
var children = GetChildren (item);
if (children != null)
return children.Count;
return 0;
}
public override NSObject GetChild (NSOutlineView outlineView, int childIndex, NSObject item)
{
if (item == null)
return webView.MainFrameDocument;
var children = GetChildren (item);
if (children != null)
return children.GetItem (childIndex);
return null;
}
public override NSObject GetObjectValue (NSOutlineView outlineView, NSTableColumn tableColumn, NSObject item)
{
return item;
}
public override bool ItemExpandable (NSOutlineView outlineView, NSObject item)
{
return GetChildren (item) != null;
}
}
void PopulateOutlineView ()
{
outlineView.DataSource = new DomOutlineViewDataSource (webView);
outlineView.ReloadData ();
outlineView.ExpandItem (null, true);
}
public override void AwakeFromNib ()
{
navigationButtons.SetEnabled (false, 0);
navigationButtons.SetEnabled (false, 1);
navigationButtons.Activated += (sender, e) => {
switch (navigationButtons.SelectedSegment) {
case 0:
if (webView.CanGoBack ())
webView.GoBack ();
break;
case 1:
if (webView.CanGoForward ())
webView.GoForward ();
break;
}
};
populateOutlineViewButton.Activated += (sender, e) => PopulateOutlineView ();
locationTextField.Activated += (sender, e) => Navigate ();
webView.ReceivedTitle += (sender, e) => {
Console.WriteLine ("TITLE RECEIVED: {0}", e.Title);
if (e.ForFrame == webView.MainFrame)
Window.Title = e.Title;
};
webView.FinishedLoad += (sender, e) => {
Console.WriteLine ("FINISHED LOAD");
navigationButtons.SetEnabled (webView.CanGoBack (), 0);
navigationButtons.SetEnabled (webView.CanGoForward (), 1);
PopulateOutlineView ();
};
//outlineView.Delegate = new DomOutlineViewDelegate ();
outlineView.SelectionDidChange += (sender, e) => { Console.WriteLine ("SELECTION CHANGE VIA EVENT"); };
locationTextField.StringValue = "http://catoverflow.com";
Navigate ();
}
}
}