public void Loaded(ViewLoadedParams viewStartupParams) { if (!DynamoModel.IsTestMode) { viewLoadedParams = viewStartupParams; controller = new LibraryViewController(viewStartupParams.DynamoWindow, viewStartupParams.CommandExecutive, customization); controller.AddLibraryView(); (viewLoadedParams.DynamoWindow.DataContext as DynamoViewModel).PropertyChanged += handleDynamoViewPropertyChanges; } }
/// <summary> /// Creates and adds the library view to the WPF visual tree. /// Also loads the library.html and js files. /// </summary> /// <returns>LibraryView control</returns> internal void AddLibraryView() { LibraryViewModel model = new LibraryViewModel(); LibraryView view = new LibraryView(model); var lib_min_template = "LIBPLACEHOLDER"; var libHTMLURI = "Dynamo.LibraryViewExtensionMSWebBrowser.web.library.library.html"; var stream = LoadResource(libHTMLURI); var libMinURI = "Dynamo.LibraryViewExtensionMSWebBrowser.web.library.librarie.min.js"; var libminstream = LoadResource(libMinURI); var libminstring = "LIBJS"; var libraryHTMLPage = "LIBRARY HTML WAS NOT FOUND"; using (var reader = new StreamReader(libminstream)) { libminstring = reader.ReadToEnd(); // replace some resources and their paths so that no requests are generated // instead the base64 data is already embedded. This list includes common icons and fonts. dynamicResourcePaths.ToList().ForEach(path => { libminstring = ReplaceUrlWithBase64Image(libminstring, path.Item1, path.Item2); }); } using (var reader = new StreamReader(stream)) { libraryHTMLPage = reader.ReadToEnd().Replace(lib_min_template, libminstring); } var sidebarGrid = dynamoWindow.FindName("sidebarGrid") as Grid; sidebarGrid.Children.Add(view); //register the interop object into the browser. view.Browser.ObjectForScripting = interop; //open the library ui page. view.Browser.NavigateToString(libraryHTMLPage); browser = view.Browser; browser.Loaded += Browser_Loaded; browser.SizeChanged += Browser_SizeChanged; LibraryViewController.SetupSearchModelEventsObserver(browser, dynamoViewModel.Model.SearchModel, this, this.customization); browser.DpiChanged += Browser_DpiChanged; }
protected void Dispose(bool disposing) { if (!disposing) { return; } if (controller != null) { controller.Dispose(); } if (customization != null) { customization.Dispose(); } if (viewLoadedParams != null && viewLoadedParams.DynamoWindow.DataContext as DynamoViewModel != null) { (viewLoadedParams.DynamoWindow.DataContext as DynamoViewModel).PropertyChanged -= handleDynamoViewPropertyChanges; } customization = null; controller = null; }
internal static IDisposable SetupSearchModelEventsObserver(WebBrowser webview, NodeSearchModel model, LibraryViewController controller, ILibraryViewCustomization customization, int throttleTime = 200) { customization.SpecificationUpdated += (o, e) => { controller.RefreshLibraryView(webview); controller.CloseNodeTooltip(true); }; var observer = new EventObserver <NodeSearchElement, IEnumerable <NodeSearchElement> >( elements => NotifySearchModelUpdate(customization, elements), CollectToList ).Throttle(TimeSpan.FromMilliseconds(throttleTime)); Action <NodeSearchElement> handler = (searchElement) => { var libraryViewController = (controller as LibraryViewController); if ((libraryViewController != null) && (libraryViewController.disableObserver)) { return; } observer.OnEvent(searchElement); }; Action <NodeSearchElement> onRemove = e => handler(null); //Set up the event callback model.EntryAdded += handler; model.EntryRemoved += onRemove; model.EntryUpdated += handler; //Set up the dispose event handler observer.Disposed += () => { model.EntryAdded -= handler; model.EntryRemoved -= onRemove; model.EntryUpdated -= handler; }; return(observer); }
public scriptingObject(LibraryViewController controller) { this.controller = controller; }