public SwitchExecutiveControl( string editTimeConfiguration, string runTimeConfiguration, UpdateConfigurationDelegate updateConfigurationDelegate, PanelPresentation requestedPresentation) { InitializeComponent(); /* used to save/load our view models and models. for save we serialize * and return the string to InstrumentStudio via the UpdateConfiguraitonDelegate. This * class also handles not saving during load. */ var saveDelegator = new SaveDelegator(updateConfigurationDelegate); /* crete the main view model which creates all the child view models and models. by * doing this creation here we imply that the view is created first. Also we: * * 1. check the registry to see if SwitchExecutive is installed. * 2. create a DriverOperations class that is basically our model and conneciton to the driver. * 3. create a status option that is shared to all view models. this allows any code to report errors. */ var mainViewModel = new SwitchExecutiveControlViewModel( requestedPresentation, NISwitchExecutiveDriverOperations.IsDriverInstalled(), (ISwitchExecutiveDriverOperations) new NISwitchExecutiveDriverOperations(), (ISave)saveDelegator, (IStatus) new Status()); /* attach the serialize and deserialize commands after. This allows us to create any objects we need * prior to creating the ViewModels ... just for a cleaner construction. */ saveDelegator.Attach( serialize: new Func <string>(() => mainViewModel.Serialize()), deserialize: o => mainViewModel.Deserialize(o)); this.DataContext = mainViewModel; // update our state based on the state saved in the .sfp file saveDelegator.Deserialize(editTimeConfiguration); // restore connections from the saved file mainViewModel.ApplyLoadFromFile(); }
public SwitchExecutiveControlViewModel( PanelPresentation requestedPresentation, bool isSwitchExecutiveInstalled, ISwitchExecutiveDriverOperations driverOperations, ISave saveOperation, IStatus status) { this.driverOperations = driverOperations; this.saveOperation = saveOperation; this.status = status; // create view models if (requestedPresentation == PanelPresentation.ConfigurationWithVisualization) { this.VisualizationViewModel = new VisualizationViewModel(driverOperations); } this.HeaderViewModel = new HeaderViewModel(isSwitchExecutiveInstalled, driverOperations, saveOperation, status); this.ConfigurationViewModel = new ConfigurationViewModel(driverOperations, saveOperation, status); // we're ready to go, so let's hook up to recieve events from our model and other views models this.driverOperations.PropertyChanged += DriverOperations_PropertyChanged; }
/// <summary> /// This method is called by InstrumentStudio when your plugin is placed within a document. It should return the visual (FrameworkElement) that /// you want displayed. /// </summary> /// <param name="editTimeConfiguration">The previously saved edit-time configuration (empty string if this is the first instantiation)</param> /// <param name="runTimeConfiguration">The previously saved run-time configuration (empty string if this is the first instantiation)</param> /// <param name="updateConfigurationDelegate">Use this delegate whenever you want to notify InstrumentStudio that your plugin's configuration has changed. /// Strings that are passed will be persisted with the .sfp. Upon reopening the .sfp, InstrumentStudio will pass these strings as the /// "editTimeConfiguration" and "runTimeConfiguration" inputs so that you can restore the state of your UI.</param> /// <param name="requestedPresentation">Render your UI accordingly, based on whether your plugin is placed in a small panel (ConfigurationOnly) or /// large panel (ConfigurationWithVisualization).</param> /// <returns>The IInstrumentStudioPlugin to be hosted.</returns> public IPanelPlugin CreatePlugin(string editTimeConfiguration, string runTimeConfiguration, UpdateConfigurationDelegate updateConfigurationDelegate, PanelPresentation requestedPresentation) { return(new SwitchExecutiveControl(editTimeConfiguration, runTimeConfiguration, updateConfigurationDelegate, requestedPresentation)); }