Пример #1
0
 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;
     }
 }
Пример #2
0
        /// <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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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);
        }
Пример #5
0
 public scriptingObject(LibraryViewController controller)
 {
     this.controller = controller;
 }