public WorkspaceViewModel(WorkspaceModel model, DynamoViewModel dynamoViewModel) { this.DynamoViewModel = dynamoViewModel; this.DynamoViewModel.PropertyChanged += DynamoViewModel_PropertyChanged; Model = model; stateMachine = new StateMachine(this); var nodesColl = new CollectionContainer { Collection = Nodes }; _workspaceElements.Add(nodesColl); var connColl = new CollectionContainer { Collection = Connectors }; _workspaceElements.Add(connColl); var notesColl = new CollectionContainer { Collection = Notes }; _workspaceElements.Add(notesColl); var errorsColl = new CollectionContainer { Collection = Errors }; _workspaceElements.Add(errorsColl); var annotationsColl = new CollectionContainer {Collection = Annotations}; _workspaceElements.Add(annotationsColl); //respond to collection changes on the model by creating new view models //currently, view models are added for notes and nodes //connector view models are added during connection Model.NodeAdded += Model_NodeAdded; Model.NodeRemoved += Model_NodeRemoved; Model.NodesCleared += Model_NodesCleared; Model.Notes.CollectionChanged += Notes_CollectionChanged; Model.Annotations.CollectionChanged +=Annotations_CollectionChanged; Model.ConnectorAdded += Connectors_ConnectorAdded; Model.ConnectorDeleted += Connectors_ConnectorDeleted; Model.PropertyChanged += ModelPropertyChanged; DynamoSelection.Instance.Selection.CollectionChanged += (sender, e) => RefreshViewOnSelectionChange(); // sync collections foreach (NodeModel node in Model.Nodes) Model_NodeAdded(node); Notes_CollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, Model.Notes)); Annotations_CollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, Model.Annotations)); foreach (var c in Model.Connectors) Connectors_ConnectorAdded(c); InCanvasSearchViewModel = new SearchViewModel(DynamoViewModel); InCanvasSearchViewModel.Visible = true; }
/// <summary> /// Class constructor /// </summary> public DynamoController(string context, IUpdateManager updateManager, IWatchHandler watchHandler, IPreferences preferences, string corePath) { DebugSettings = new DebugSettings(); IsCrashing = false; dynSettings.Controller = this; Context = context; PreferenceSettings = preferences; ((PreferenceSettings) PreferenceSettings).PropertyChanged += PreferenceSettings_PropertyChanged; SIUnit.LengthUnit = PreferenceSettings.LengthUnit; SIUnit.AreaUnit = PreferenceSettings.AreaUnit; SIUnit.VolumeUnit = PreferenceSettings.VolumeUnit; SIUnit.NumberFormat = PreferenceSettings.NumberFormat; UpdateManager = updateManager; UpdateManager.CheckForProductUpdate(new UpdateRequest(new Uri(Configurations.UpdateDownloadLocation),dynSettings.DynamoLogger, UpdateManager.UpdateDataAvailable)); WatchHandler = watchHandler; //Start heartbeat reporting //This needs to be done after the update manager has been initialised //so that the version number can be reported InstrumentationLogger.Start(); //create the model DynamoModel = new DynamoModel (); DynamoModel.AddHomeWorkspace(); SearchViewModel = new SearchViewModel(DynamoModel); DynamoModel.CurrentWorkspace = DynamoModel.HomeSpace; DynamoModel.CurrentWorkspace.X = 0; DynamoModel.CurrentWorkspace.Y = 0; // custom node loader CustomNodeManager = new CustomNodeManager(DynamoPathManager.Instance.UserDefinitions); dynSettings.PackageLoader = new PackageLoader(); dynSettings.PackageLoader.DoCachedPackageUninstalls(); dynSettings.PackageLoader.LoadPackages(); DisposeLogic.IsShuttingDown = false; EngineController = new EngineController(this); CustomNodeManager.RecompileAllNodes(EngineController); //This is necessary to avoid a race condition by causing a thread join //inside the vm exec //TODO(Luke): Push this into a resync call with the engine controller ResetEngine(); dynSettings.DynamoLogger.Log(String.Format( "Dynamo -- Build {0}", Assembly.GetExecutingAssembly().GetName().Version)); DynamoLoader.ClearCachedAssemblies(); DynamoLoader.LoadNodeModels(); MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrations)); Runner = new DynamoRunner(); }
/// <summary> /// Helper method for custom node adding and removing /// </summary> public void AssertAddAndRemoveCustomNode(SearchViewModel search, string nodeName, string catName, string descr = "Bla", string path = "Bla") { var dummyInfo = new CustomNodeInfo(Guid.NewGuid(), nodeName, catName, descr, path); search.Add(dummyInfo); search.SearchAndUpdateResultsSync(nodeName); Assert.AreNotEqual(0, search.SearchResults.Count); Assert.AreEqual(search.SearchResults[0].Name, nodeName); Assert.IsTrue(search.ContainsCategory(catName)); search.RemoveNodeAndEmptyParentCategory(nodeName); search.SearchAndUpdateResultsSync(nodeName); Assert.AreEqual(0, search.SearchResults.Count); Assert.IsFalse(search.ContainsCategory(catName)); }
public void CanRunRemoveCategoryIfCategoryDoesntExist() { var search = new SearchViewModel(); search.AddCategory("Peter.Boyer"); search.RemoveCategory("Peter.Rabbit"); Assert.IsNull(search.GetCategoryByName("Peter.Rabbit")); }
/// <summary> /// Class constructor /// </summary> public DynamoController(ExecutionEnvironment env, Type viewModelType, string context, string commandFilePath) { DynamoLogger.Instance.StartLogging(); dynSettings.Controller = this; this.Context = context; //Start heartbeat reporting Services.InstrumentationLogger.Start(); //create the view model to which the main window will bind //the DynamoModel is created therein this.DynamoViewModel = (DynamoViewModel)Activator.CreateInstance( viewModelType, new object[] { this, commandFilePath }); // custom node loader string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string pluginsPath = Path.Combine(directory, "definitions"); CustomNodeManager = new CustomNodeManager(pluginsPath); SearchViewModel = new SearchViewModel(); dynSettings.PackageLoader = new PackageLoader(); dynSettings.PackageLoader.DoCachedPackageUninstalls(); dynSettings.PackageLoader.LoadPackages(); FSchemeEnvironment = env; DynamoViewModel.Model.CurrentWorkspace.X = 0; DynamoViewModel.Model.CurrentWorkspace.Y = 0; DynamoLogger.Instance.Log(String.Format( "Dynamo -- Build {0}", Assembly.GetExecutingAssembly().GetName().Version)); DynamoLoader.ClearCachedAssemblies(); DynamoLoader.LoadBuiltinTypes(); //run tests if (FScheme.RunTests(DynamoLogger.Instance.Log)) { DynamoLogger.Instance.Log("All Tests Passed. Core library loaded OK."); } this.InfoBubbleViewModel = new InfoBubbleViewModel(); AddPythonBindings(); MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrations)); var updateManager = UpdateManager.UpdateManager.Instance; updateManager.UpdateDownloaded += updateManager_UpdateDownloaded; updateManager.ShutdownRequested += updateManager_ShutdownRequested; updateManager.CheckForProductUpdate(); }
public void Init() { _search = new SearchViewModel(); }
public WorkspaceViewModel(WorkspaceModel model, DynamoViewModel dynamoViewModel) { this.DynamoViewModel = dynamoViewModel; Model = model; stateMachine = new StateMachine(this); var nodesColl = new CollectionContainer { Collection = Nodes }; _workspaceElements.Add(nodesColl); var connColl = new CollectionContainer { Collection = Connectors }; _workspaceElements.Add(connColl); var notesColl = new CollectionContainer { Collection = Notes }; _workspaceElements.Add(notesColl); var errorsColl = new CollectionContainer { Collection = Errors }; _workspaceElements.Add(errorsColl); var annotationsColl = new CollectionContainer {Collection = Annotations}; _workspaceElements.Add(annotationsColl); //respond to collection changes on the model by creating new view models //currently, view models are added for notes and nodes //connector view models are added during connection Model.NodeAdded += Model_NodeAdded; Model.NodeRemoved += Model_NodeRemoved; Model.NodesCleared += Model_NodesCleared; Model.NoteAdded += Model_NoteAdded; Model.NoteRemoved += Model_NoteRemoved; Model.NotesCleared += Model_NotesCleared; Model.AnnotationAdded += Model_AnnotationAdded; Model.AnnotationRemoved += Model_AnnotationRemoved; Model.AnnotationsCleared += Model_AnnotationsCleared; Model.ConnectorAdded += Connectors_ConnectorAdded; Model.ConnectorDeleted += Connectors_ConnectorDeleted; Model.PropertyChanged += ModelPropertyChanged; DynamoSelection.Instance.Selection.CollectionChanged += (sender, e) => RefreshViewOnSelectionChange(); DynamoViewModel.CopyCommand.CanExecuteChanged += CopyPasteChanged; DynamoViewModel.PasteCommand.CanExecuteChanged += CopyPasteChanged; // sync collections foreach (NodeModel node in Model.Nodes) Model_NodeAdded(node); foreach (NoteModel note in Model.Notes) Model_NoteAdded(note); foreach (AnnotationModel annotation in Model.Annotations) Model_AnnotationAdded(annotation); foreach (ConnectorModel connector in Model.Connectors) Connectors_ConnectorAdded(connector); InCanvasSearchViewModel = new SearchViewModel(DynamoViewModel); InCanvasSearchViewModel.Visible = true; }
/// <summary> /// Class constructor /// </summary> public DynamoController(Type viewModelType, string context, string commandFilePath, IUpdateManager updateManager, IWatchHandler watchHandler, IPreferences preferences) { DynamoLogger.Instance.StartLogging(); dynSettings.Controller = this; Context = context; //Start heartbeat reporting InstrumentationLogger.Start(); PreferenceSettings = preferences; ((PreferenceSettings) PreferenceSettings).PropertyChanged += PreferenceSettings_PropertyChanged; SIUnit.LengthUnit = PreferenceSettings.LengthUnit; SIUnit.AreaUnit = PreferenceSettings.AreaUnit; SIUnit.VolumeUnit = PreferenceSettings.VolumeUnit; SIUnit.NumberFormat = PreferenceSettings.NumberFormat; UpdateManager = updateManager; UpdateManager.UpdateDownloaded += updateManager_UpdateDownloaded; UpdateManager.ShutdownRequested += updateManager_ShutdownRequested; UpdateManager.CheckForProductUpdate(new UpdateRequest(new Uri(Configurations.UpdateDownloadLocation),DynamoLogger.Instance, UpdateManager.UpdateDataAvailable)); WatchHandler = watchHandler; //create the view model to which the main window will bind //the DynamoModel is created therein DynamoViewModel = (DynamoViewModel)Activator.CreateInstance( viewModelType, new object[] { this, commandFilePath }); // custom node loader string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string pluginsPath = Path.Combine(directory, "definitions"); CustomNodeManager = new CustomNodeManager(pluginsPath); SearchViewModel = new SearchViewModel(); dynSettings.PackageLoader = new PackageLoader(); dynSettings.PackageLoader.DoCachedPackageUninstalls(); dynSettings.PackageLoader.LoadPackages(); DynamoViewModel.Model.CurrentWorkspace.X = 0; DynamoViewModel.Model.CurrentWorkspace.Y = 0; DisposeLogic.IsShuttingDown = false; EngineController = new EngineController(this, false); //This is necessary to avoid a race condition by causing a thread join //inside the vm exec //TODO(Luke): Push this into a resync call with the engine controller ResetEngine(); DynamoLogger.Instance.Log(String.Format( "Dynamo -- Build {0}", Assembly.GetExecutingAssembly().GetName().Version)); DynamoLoader.ClearCachedAssemblies(); DynamoLoader.LoadNodeModels(); //run tests if (FScheme.RunTests(DynamoLogger.Instance.Log)) { DynamoLogger.Instance.Log("All Tests Passed. Core library loaded OK."); } InfoBubbleViewModel = new InfoBubbleViewModel(); AddPythonBindings(); MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrations)); }
/// <summary> /// Class constructor /// </summary> public DynamoController(string context, IUpdateManager updateManager, ILogger logger, IWatchHandler watchHandler, IPreferences preferences) { IsCrashing = false; DynamoLogger = logger; dynSettings.Controller = this; Context = context; //Start heartbeat reporting InstrumentationLogger.Start(); PreferenceSettings = preferences; ((PreferenceSettings) PreferenceSettings).PropertyChanged += PreferenceSettings_PropertyChanged; BaseUnit.LengthUnit = PreferenceSettings.LengthUnit; BaseUnit.AreaUnit = PreferenceSettings.AreaUnit; BaseUnit.VolumeUnit = PreferenceSettings.VolumeUnit; BaseUnit.NumberFormat = PreferenceSettings.NumberFormat; UpdateManager = updateManager; UpdateManager.UpdateDownloaded += updateManager_UpdateDownloaded; UpdateManager.ShutdownRequested += updateManager_ShutdownRequested; UpdateManager.CheckForProductUpdate(new UpdateRequest(new Uri(Configurations.UpdateDownloadLocation),dynSettings.Controller.DynamoLogger, UpdateManager.UpdateDataAvailable)); WatchHandler = watchHandler; //create the model DynamoModel = new DynamoModel (); DynamoModel.AddHomeWorkspace(); DynamoModel.CurrentWorkspace = DynamoModel.HomeSpace; DynamoModel.CurrentWorkspace.X = 0; DynamoModel.CurrentWorkspace.Y = 0; // custom node loader string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string pluginsPath = Path.Combine(directory, "definitions"); CustomNodeManager = new CustomNodeManager(pluginsPath); SearchViewModel = new SearchViewModel(); dynSettings.PackageLoader = new PackageLoader(); dynSettings.PackageLoader.DoCachedPackageUninstalls(); dynSettings.PackageLoader.LoadPackages(); DisposeLogic.IsShuttingDown = false; //This is necessary to avoid a race condition by causing a thread join //inside the vm exec //TODO(Luke): Push this into a resync call with the engine controller ResetEngine(); dynSettings.Controller.DynamoLogger.Log(String.Format( "Dynamo -- Build {0}", Assembly.GetExecutingAssembly().GetName().Version)); DynamoLoader.ClearCachedAssemblies(); DynamoLoader.LoadNodeModels(); InfoBubbleViewModel = new InfoBubbleViewModel(); MigrationManager.Instance.MigrationTargets.Add(typeof(WorkspaceMigrations)); evaluationWorker.DoWork += RunThread; }
public WorkspaceViewModel(WorkspaceModel model, DynamoViewModel dynamoViewModel) { this.DynamoViewModel = dynamoViewModel; Model = model; stateMachine = new StateMachine(this); var nodesColl = new CollectionContainer { Collection = Nodes }; _workspaceElements.Add(nodesColl); var connColl = new CollectionContainer { Collection = Connectors }; _workspaceElements.Add(connColl); var notesColl = new CollectionContainer { Collection = Notes }; _workspaceElements.Add(notesColl); var errorsColl = new CollectionContainer { Collection = Errors }; _workspaceElements.Add(errorsColl); var annotationsColl = new CollectionContainer { Collection = Annotations }; _workspaceElements.Add(annotationsColl); //respond to collection changes on the model by creating new view models //currently, view models are added for notes and nodes //connector view models are added during connection Model.NodeAdded += Model_NodeAdded; Model.NodeRemoved += Model_NodeRemoved; Model.NodesCleared += Model_NodesCleared; Model.NoteAdded += Model_NoteAdded; Model.NoteRemoved += Model_NoteRemoved; Model.NotesCleared += Model_NotesCleared; Model.AnnotationAdded += Model_AnnotationAdded; Model.AnnotationRemoved += Model_AnnotationRemoved; Model.AnnotationsCleared += Model_AnnotationsCleared; Model.ConnectorAdded += Connectors_ConnectorAdded; Model.ConnectorDeleted += Connectors_ConnectorDeleted; Model.PropertyChanged += ModelPropertyChanged; DynamoSelection.Instance.Selection.CollectionChanged += RefreshViewOnSelectionChange; DynamoViewModel.CopyCommand.CanExecuteChanged += CopyPasteChanged; DynamoViewModel.PasteCommand.CanExecuteChanged += CopyPasteChanged; // sync collections foreach (NodeModel node in Model.Nodes) { Model_NodeAdded(node); } foreach (NoteModel note in Model.Notes) { Model_NoteAdded(note); } foreach (AnnotationModel annotation in Model.Annotations) { Model_AnnotationAdded(annotation); } foreach (ConnectorModel connector in Model.Connectors) { Connectors_ConnectorAdded(connector); } InCanvasSearchViewModel = new SearchViewModel(DynamoViewModel); InCanvasSearchViewModel.Visible = true; }
public WorkspaceViewModel(WorkspaceModel model, DynamoViewModel dynamoViewModel) { this.DynamoViewModel = dynamoViewModel; this.DynamoViewModel.PropertyChanged += DynamoViewModel_PropertyChanged; Model = model; stateMachine = new StateMachine(this); var nodesColl = new CollectionContainer { Collection = Nodes }; _workspaceElements.Add(nodesColl); var connColl = new CollectionContainer { Collection = Connectors }; _workspaceElements.Add(connColl); var notesColl = new CollectionContainer { Collection = Notes }; _workspaceElements.Add(notesColl); var errorsColl = new CollectionContainer { Collection = Errors }; _workspaceElements.Add(errorsColl); var annotationsColl = new CollectionContainer { Collection = Annotations }; _workspaceElements.Add(annotationsColl); // Add EndlessGrid var endlessGrid = new EndlessGridViewModel(this); _workspaceElements.Add(endlessGrid); //respond to collection changes on the model by creating new view models //currently, view models are added for notes and nodes //connector view models are added during connection Model.NodeAdded += Model_NodeAdded; Model.NodeRemoved += Model_NodeRemoved; Model.NodesCleared += Model_NodesCleared; Model.Notes.CollectionChanged += Notes_CollectionChanged; Model.Annotations.CollectionChanged += Annotations_CollectionChanged; Model.ConnectorAdded += Connectors_ConnectorAdded; Model.ConnectorDeleted += Connectors_ConnectorDeleted; Model.PropertyChanged += ModelPropertyChanged; DynamoSelection.Instance.Selection.CollectionChanged += (sender, e) => RefreshViewOnSelectionChange(); // sync collections foreach (NodeModel node in Model.Nodes) { Model_NodeAdded(node); } Notes_CollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, Model.Notes)); Annotations_CollectionChanged(null, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, Model.Annotations)); foreach (var c in Model.Connectors) { Connectors_ConnectorAdded(c); } InCanvasSearchViewModel = new SearchViewModel(DynamoViewModel); InCanvasSearchViewModel.Visible = true; }