예제 #1
0
        static ContainerRegister()
        {
            RegisterMultiThreadConfiguration(true);

            container
            .Singleton(container)
            .Singleton <ICommandFactory, CommandFactory>()
            .Singleton(() => new CommandsDiscover(EvaluateExecuteCommandFactoryHalper.Create(true)))
            //.Singleton(() => new CommandsDiscover(AlwaysCanExecuteCommandFactoryHalper.Create(true, new DefaultViewModelChecker("Validation errors on UI", "Check the UI"))))
            .Singleton <IMessageBroker, LocalMessageBroker>()
            .Singleton <IDialogService, DefaultDialogService>()
            .Singleton <IMapper, AutoMapperMapper>()
            .Singleton(typeof(ServiceFactory <>))
            .Singleton <IMessageBox, LoggingMessageBox>()
            .Singleton(typeof(IDisposableFactory <>), typeof(DemoProxyFactory <>))
            .Singleton <CommandConvention, DemoCommandConvention>();

            TimerFactory.Set(new DispatcherTimerFactory());
            CollectionFactory.Set(() => new SafeCollectionFactory());
            CommandsDiscoverFactory.Set(container.Resolve <CommandsDiscover>);
            MessageBroker.Set(container.Resolve <IMessageBroker>);
            DialogService.Set(container.Resolve <IDialogService>);
            Mapper.Set(container.Resolve <IMapper>);
            ViewModelController.Set(() => container);
        }
예제 #2
0
        public static void SelectEntity(IEnumerable <Entity> entities)
        {
            // Update property editor selection.
            if (selectedEntitiesContext != null)
            {
                selectedEntitiesContext.ViewModelByGuid.Clear();
                var viewModels = entities
                                 .Where(entity => entity != null)
                                 .Select(entity => selectedEntitiesContext.GetModelView(entity).Children.First(x => x.PropertyName == "Components"))
                                 .ToArray();

                if (viewModels.Count() > 1)
                {
                    selectedEntitiesContext.Root = ViewModelController.Combine(selectedEntitiesContext, viewModels);
                }
                else
                {
                    selectedEntitiesContext.Root = viewModels.FirstOrDefault();
                }
            }

            // Update picking system (gizmo).
            // It will also update the remote selection in entity tree view.
            var entitiesArray = entities.ToArray();

            if (!ArrayExtensions.ArraysEqual(pickingSystem.SelectedEntities, entitiesArray))
            {
                pickingSystem.SelectedEntities = entitiesArray;
            }

            entitiesChangePacketEvent.Set();
        }
 public ExifToolViewModel()
 {
     DirectoryModel              = new DirectoryModel();
     ImageModel                  = new ImageModel();
     _viewModelController        = new ViewModelController();
     ImageModel.PropertyChanged += ImageModel_PropertyChanged;
 }
예제 #4
0
        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                ViewModelController.ChangeViewModel(null);

                if (Globals.LoggedUser != null && Connection.Instance.Service?.State == CommunicationState.Opened)
                {
                    Connection.Instance.Service?.Logout();
                }
                Connection.Instance.Service?.Abort();
            }
            catch (FaultException <OperationFault> faultException)
            {
                MessageBox.Show(faultException.Detail.ErrorMessage,
                                $"Error in: {faultException.Detail.Operation}",
                                MessageBoxButton.OK,
                                MessageBoxImage.Error);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,
                                $"Error in:",
                                MessageBoxButton.OK,
                                MessageBoxImage.Error);
            }
        }
예제 #5
0
 public MainWindow()
 {
     InitializeComponent();
     Globals.UIDispatcher = Dispatcher;
     DataContext          = ViewModelController.Instance;
     ViewModelController.ChangeViewModel(new LoginViewModel());
     //Connection.Initalize();// TODO: Change to LoginViewModel or something
     connectionThread = new Thread(() => Connection.Initalize());
     connectionThread.Start();
 }
예제 #6
0
        public MainViewModel()
        {
            serviceFactory = ViewModelController.ServiceFactory <ICustomerService>();
            timerFactory   = ViewModelController.TimerFactory();

            MessageBroker.Register <DeleteCustomerMessage>(this, DeleteCustomer);

            Property(() => FullName).OnChanged(x => NameLength = x.Length);

            InitializeProperties();
        }
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            string valueAsString = value.ToString();

            if (valueAsString.Contains("."))
            {
                valueAsString = valueAsString.Substring(0, valueAsString.IndexOf('.'));
            }

            ViewModelController viewModelController = App.Current.Resources["ViewModelController"] as ViewModelController;

            return(viewModelController.Models.ShellViewModel.CurrentToolStepLabels[int.Parse(valueAsString) - 1]);
        }
예제 #8
0
        /***Methods***/
        public graphView(IClientModel c, ViewModelController vmc)
        {
            InitializeComponent();
            this.vmCon          = vmc;
            this.graphViewModel = new GraphViewModel(c, vmc, attPlot, corrPlot, LRPlot);
            this.DataContext    = graphViewModel;
            StackPanel stackPanel = new StackPanel();

            //creating buttons
            setupButtons(stackPanel);
            scorllButtons.Content = stackPanel;
            Attpv     = attPlot;
            Corrpv    = corrPlot;
            RegLinepv = LRPlot;
            Loaded   += GraphView_Loaded;
        }
예제 #9
0
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            ViewModelController viewModelController = App.Current.Resources["ViewModelController"] as ViewModelController;

            return((viewModelController.Models.ShellViewModel.CurrentToolCurrentStep == (double)value) ? App.Current.Resources["CurrentSliderTick"] as Style : App.Current.Resources["SliderTick"] as Style);
        }
예제 #10
0
        public async static Task ProcessClient(EngineContext engineContext, SocketContext socketContext, SocketContext socketContextAsync)
        {
            socketContext.AddPacketHandler <DownloadFileQuery>(
                async(packet) =>
            {
                var stream = await VirtualFileSystem.OpenStreamAsync(packet.Url, VirtualFileMode.Open, VirtualFileAccess.Read);
                var data   = new byte[stream.Length];
                await stream.ReadAsync(data, 0, data.Length);
                stream.Close();
                socketContext.Send(new DownloadFileAnswer {
                    StreamId = packet.StreamId, Data = data
                });
            });

            socketContext.AddPacketHandler <UploadFilePacket>(
                async(packet) =>
            {
                var stream = await VirtualFileSystem.OpenStreamAsync(packet.Url, VirtualFileMode.Create, VirtualFileAccess.Write);
                await stream.WriteAsync(packet.Data, 0, packet.Data.Length);
                stream.Close();
            });

            var viewModelGlobalContext = new ViewModelGlobalContext();

            selectedEntitiesContext = new ViewModelContext(viewModelGlobalContext);
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new EntityComponentEnumerator(engineContext));
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new RenderPassPluginEnumerator());
            selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            //selectedEntitiesContext.ChildrenPropertyEnumerators.Add(new EffectPropertyEnumerator(engineContext));

            var renderPassHierarchyContext = new ViewModelContext(viewModelGlobalContext);

            renderPassHierarchyContext.ChildrenPropertyEnumerators.Add(new RenderPassHierarchyEnumerator());
            renderPassHierarchyContext.Root = new ViewModelNode("Root", engineContext.RenderContext.RootRenderPass).GenerateChildren(renderPassHierarchyContext);

            var renderPassPluginsContext = new ViewModelContext(viewModelGlobalContext);

            renderPassPluginsContext.ChildrenPropertyEnumerators.Add(new RenderPassPluginsEnumerator {
                SelectedRenderPassPluginContext = selectedEntitiesContext
            });
            renderPassPluginsContext.Root = new ViewModelNode("Root", new EnumerableViewModelContent <ViewModelReference>(
                                                                  () => engineContext.RenderContext.RenderPassPlugins.Select(x => new ViewModelReference(x, true))));


            var entityHierarchyEnumerator = new EntityHierarchyEnumerator(engineContext.EntityManager, selectedEntitiesContext);
            var entityHierarchyContext    = new ViewModelContext(viewModelGlobalContext);

            entityHierarchyContext.ChildrenPropertyEnumerators.Add(entityHierarchyEnumerator);
            entityHierarchyContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            entityHierarchyContext.Root = new ViewModelNode("EntityHierarchyRoot", new EnumerableViewModelContent <ViewModelReference>(
                                                                () => engineContext.EntityManager.Entities
                                                                .Where(x =>
            {
                var transformationComponent = x.Transformation;
                return(transformationComponent == null || transformationComponent.Parent == null);
            })
                                                                .Select(x => new ViewModelReference(x, true))));

            entityHierarchyEnumerator.SelectedEntities.CollectionChanged += (sender, args) =>
            {
                SelectEntity(entityHierarchyEnumerator.SelectedEntities);
            };
            //entityHierarchyContext.Root.Children.Add(new ViewModelNode("SelectedItems", EnumerableViewModelContent.FromUnaryLambda<ViewModelReference, ViewModelReference>(new NullViewModelContent(),
            //    (x) => { return new[] { new ViewModelReference(pickingSystem.SelectedEntity) }; })));

            /*(value) =>
             *  {
             *      var entityModelView = value != null ? entityHierarchyContext.GetModelView(value.Guid) : null;
             *      var entity = entityModelView != null ? (Entity)entityModelView.NodeValue : null;
             *      SelectEntity(entity);
             *  })));*/
            entityHierarchyContext.Root.Children.Add(new ViewModelNode("DropEntity", new RootViewModelContent((ExecuteCommand)((viewModel2, parameter) =>
            {
                var dropParameters = (DropCommandParameters)parameter;

                var movedItem = dropParameters.Data is Guid ? entityHierarchyContext.GetModelView((Guid)dropParameters.Data) : null;
                var newParent = dropParameters.Parent is Guid ? entityHierarchyContext.GetModelView((Guid)dropParameters.Parent) : null;

                if (newParent == null || movedItem == null)
                {
                    return;
                }

                var parent = ((Entity)newParent.NodeValue).Transformation;
                if (dropParameters.TargetIndex > parent.Children.Count)
                {
                    return;
                }

                var transformationComponent = ((Entity)movedItem.NodeValue).Transformation;
                transformationComponent.Parent = null;
                parent.Children.Insert(dropParameters.TargetIndex, transformationComponent);
            }))));

            entityHierarchyContext.Root.Children.Add(new ViewModelNode("DropAsset", new RootViewModelContent((ExecuteCommand)(async(viewModel2, parameter) =>
            {
                var dropParameters = (DropCommandParameters)parameter;

                var assetUrl = (string)dropParameters.Data;

                /*var newParent = entityHierarchyContext.GetModelView((Guid)dropParameters.Parent);
                 *
                 * if (newParent == null || assetUrl == null)
                 *  return;
                 *
                 * var parent = ((Entity)newParent.NodeValue).Transformation;
                 * if (dropParameters.ItemIndex > parent.Children.Count)
                 *  return;*/

                engineContext.Scheduler.Add(async() =>
                {
                    // Load prefab entity
                    var loadedEntityPrefab = await engineContext.AssetManager.LoadAsync <Entity>(assetUrl + "#");

                    // Build another entity from prefab
                    var loadedEntity = Prefab.Inherit(loadedEntityPrefab);

                    // Add it to scene
                    engineContext.EntityManager.AddEntity(loadedEntity);

                    if (loadedEntity.ContainsKey(AnimationComponent.Key))
                    {
                        Scheduler.Current.Add(() => AnimScript.AnimateFBXModel(engineContext, loadedEntity));
                    }
                });
            }))));

            var scriptEngineContext = new ViewModelContext(viewModelGlobalContext);

            scriptEngineContext.ChildrenPropertyEnumerators.Add(new ScriptAssemblyEnumerator(engineContext));
            scriptEngineContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            scriptEngineContext.Root = new ViewModelNode(new EnumerableViewModelContent <ViewModelReference>(
                                                             () => engineContext.ScriptManager.ScriptAssemblies.Select(x => new ViewModelReference(x, true))));
            scriptEngineContext.Root.Children.Add(new ViewModelNode("RunScript", new RootViewModelContent((ExecuteCommand)(async(viewModel2, parameter) =>
            {
                var scriptName = (string)parameter;
                var matchingScript = engineContext.ScriptManager.Scripts.Where(x => x.TypeName + "." + x.MethodName == scriptName);
                if (matchingScript.Any())
                {
                    var scriptEntry = matchingScript.Single();
                    var microThread = engineContext.ScriptManager.RunScript(scriptEntry, null);
                }
            }))));

            var runningScriptsContext = new ViewModelContext(viewModelGlobalContext);

            runningScriptsContext.ChildrenPropertyEnumerators.Add(new MicroThreadEnumerator(selectedEntitiesContext));
            runningScriptsContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            runningScriptsContext.Root = new ViewModelNode("MicroThreads", new EnumerableViewModelContent <ViewModelReference>(
                                                               () => engineContext.Scheduler.MicroThreads.Select(x => new ViewModelReference(x, true))
                                                               ));

            var effectsContext = new ViewModelContext(viewModelGlobalContext);

            effectsContext.ChildrenPropertyEnumerators.Add(new EffectEnumerator(selectedEntitiesContext));
            effectsContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            effectsContext.Root = new ViewModelNode("Effects", new EnumerableViewModelContent <ViewModelReference>(
                                                        () => engineContext.RenderContext.Effects.Select(x => new ViewModelReference(x, true))
                                                        ));
            //effectsContext.Root.Children.Add(new ViewModelNode("PluginDefinitions", new RootViewModelContent()));

            var assetBrowserContext = new ViewModelContext(viewModelGlobalContext);

            assetBrowserContext.ChildrenPropertyEnumerators.Add(new AssetBrowserEnumerator(engineContext));
            assetBrowserContext.ChildrenPropertyEnumerators.Add(new ChildrenPropertyInfoEnumerator());
            assetBrowserContext.Root = new ViewModelNode("Root", "Root").GenerateChildren(assetBrowserContext);

            var editorContext = new ViewModelContext(viewModelGlobalContext);

            editorContext.Root = new ViewModelNode("Root");
            editorContext.Root.Children.Add(new ViewModelNode("SwitchSelectionMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.None; })));
            editorContext.Root.Children.Add(new ViewModelNode("SwitchTranslationMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.Translation; })));
            editorContext.Root.Children.Add(new ViewModelNode("SwitchRotationMode", new CommandViewModelContent((sender, parameters) => { pickingSystem.ActiveGizmoActionMode = PickingSystem.GizmoAction.Rotation; })));

            var contexts = new Dictionary <string, Tuple <ViewModelContext, ViewModelState> >();

            contexts.Add("Editor", Tuple.Create(editorContext, new ViewModelState()));
            contexts.Add("RenderPassPlugins", Tuple.Create(renderPassPluginsContext, new ViewModelState()));
            contexts.Add("RenderPasses", Tuple.Create(renderPassHierarchyContext, new ViewModelState()));
            contexts.Add("SelectedEntities", Tuple.Create(selectedEntitiesContext, new ViewModelState()));
            contexts.Add("EntityHierarchy", Tuple.Create(entityHierarchyContext, new ViewModelState()));
            contexts.Add("ScriptEngine", Tuple.Create(scriptEngineContext, new ViewModelState()));
            contexts.Add("MicroThreads", Tuple.Create(runningScriptsContext, new ViewModelState()));
            contexts.Add("AssetBrowser", Tuple.Create(assetBrowserContext, new ViewModelState()));
            contexts.Add("Effects", Tuple.Create(effectsContext, new ViewModelState()));

            int lastAckPacket = 0;

            var entitiesChangePackets = new ConcurrentQueue <EntitiesChangePacket>();

            socketContext.AddPacketHandler <EntitiesChangePacket>(
                (packet) =>
            {
                entitiesChangePackets.Enqueue(packet);
                entitiesChangePacketEvent.Set();
            });

            Action asyncThreadStart = () =>
            {
                while (true)
                {
                    Thread.Sleep(100);
                    foreach (var context in contexts)
                    {
                        // Process async data
                        Guid[] path  = null;
                        object value = null;
                        lock (context.Value.Item1)
                        {
                            var pendingNode = context.Value.Item1.GetNextPendingAsyncNode();
                            if (pendingNode != null)
                            {
                                value = pendingNode.Value;
                                path  = ViewModelController.BuildPath(pendingNode);
                            }
                        }
                        if (path != null)
                        {
                            // Temporary encoding through our serializer (until our serializer are used for packets)
                            var memoryStream = new MemoryStream();
                            var writer       = new BinarySerializationWriter(memoryStream);
                            writer.SerializeExtended(null, value, ArchiveMode.Serialize);

                            var change = new NetworkChange {
                                Path = path.ToArray(), Type = NetworkChangeType.ValueUpdateAsync, Value = memoryStream.ToArray()
                            };
                            var packet = new EntitiesChangePacket {
                                GroupKey = context.Key, Changes = new NetworkChange[] { change }
                            };
                            socketContextAsync.Send(packet);
                            break;
                        }
                    }
                }
            };

            new Thread(new ThreadStart(asyncThreadStart)).Start();

            // TODO: Move some of this code directly inside ViewModelContext/Controller classes
            while (true)
            {
                await TaskEx.WhenAny(TaskEx.Delay(250), entitiesChangePacketEvent.WaitAsync());

                EntitiesChangePacket packet;
                while (entitiesChangePackets.TryDequeue(out packet))
                {
                    ViewModelController.NetworkApplyChanges(contexts[packet.GroupKey].Item1, packet.Changes);
                    lastAckPacket = packet.Index;
                }

                // Wait a single frame so that network updates get applied properly by all rendering systems for next update
                await Scheduler.Current.NextFrame();

                // If entity disappeared, try to replace it with new one (happen during file reload)
                // It's little bit cumbersome to test, need some simplification of this specific entity view model root.
                if (selectedEntitiesContext.Root != null &&
                    selectedEntitiesContext.Root.Parent != null &&
                    selectedEntitiesContext.Root.Parent.NodeValue is Entity)
                {
                    var entity = (Entity)selectedEntitiesContext.Root.Parent.NodeValue;
                    if (!engineContext.EntityManager.Entities.Contains(entity))
                    {
                        entity = engineContext.EntityManager.Entities.FirstOrDefault(x => x.Guid == entity.Guid);
                        if (entity != null)
                        {
                            selectedEntitiesContext.ViewModelByGuid.Clear();
                            selectedEntitiesContext.Root = selectedEntitiesContext.GetModelView(entity).Children.First(x => x.PropertyName == "Components");
                        }
                    }
                }

                var data = new Dictionary <string, byte[]>();
                foreach (var context in contexts)
                {
                    lock (context.Value.Item1)
                    {
                        if (context.Value.Item1.Root != null)
                        {
                            context.Value.Item1.AddModelView(context.Value.Item1.Root);
                        }
                        ViewModelController.UpdateReferences(context.Value.Item1, true);
                        data[context.Key] = ViewModelController.NetworkSerialize(context.Value.Item1, context.Value.Item2);
                    }
                }

                viewModelGlobalContext.UpdateObjects(contexts.Select(x => x.Value.Item1));

                //Console.WriteLine("DataSize: {0}", data.Sum(x => x.Value.Length));
                await Task.Factory.StartNew(() => socketContext.Send(new EntitiesUpdatePacket {
                    AckIndex = lastAckPacket, Data = data
                }));
            }
        }
예제 #11
0
        protected void InitViewModel()
        {
            Dictionary <String, String> d = default(Dictionary <String, String>);

            try
            {
                //tell controller how model should notify view about non-persisted properties AND including model properties that may be part of settings
                ModelController <MVCModel> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                //tell controller how settings should notify view about persisted properties
                SettingsController <MVCSettings> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                InitModelAndSettings();

#if USE_CUSTOM_VIEWMODEL
                //class to handle standard behaviors
                d = new Dictionary <String, String>();
                d.Add("New", "New");
                d.Add("Save", "Save");
                d.Add("Open", "Open");
                d.Add("Print", "Print");
                d.Add("Copy", "Copy");
                d.Add("Properties", "Properties");

                ViewModelController <String, MVCConsoleViewModel> .New
                (
                    ViewName,
                    new MVCConsoleViewModel
                    (
                        this.PropertyChangedEventHandlerDelegate,
                        d
                    )
                );

                //select a viewmodel by view name
                ViewModel =
                    ViewModelController <String, MVCConsoleViewModel> .ViewModel[ViewName];
#else
                //class to handle standard behaviors
                ViewModelController <String, ConsoleViewModel <String, MVCSettings, MVCModel> > .New
                (
                    ViewName,
                    new ConsoleViewModel <String, MVCSettings, MVCModel>
                    (
                        this.PropertyChangedEventHandlerDelegate,
                        new Dictionary <String, String>()
                {
                    { "New", "New" },
                    { "Save", "Save" },
                    { "Open", "Open" },
                    { "Print", "Print" },
                    { "Copy", "Copy" },
                    { "Properties", "Properties" }
                }
                    )
                );

                //select a viewmodel by view name
                ViewModel =
                    ViewModelController <String, ConsoleViewModel <String, MVCSettings, MVCModel> > .ViewModel[ViewName];
#endif

                //Init config parameters
                if (!LoadParameters())
                {
                    throw new Exception(String.Format("Unable to load config file parameter(s)."));
                }

                //DEBUG:filename coming in is being converted/passed as DOS 8.3 format equivalent
                //Load
                if ((SettingsController <MVCSettings> .FilePath == null) || (SettingsController <MVCSettings> .Filename == SettingsController <MVCSettings> .FILE_NEW))
                {
                    //NEW
                    ViewModel.FileNew();
                }
                else
                {
                    //OPEN
                    ViewModel.FileOpen();
                }
            }
            catch (Exception ex)
            {
                if (ViewModel != null)
                {
                    ViewModel.ErrorMessage = ex.Message;
                }
                Log.Write(ex, MethodBase.GetCurrentMethod(), EventLogEntryType.Error);
            }
        }
예제 #12
0
        protected void InitViewModel()
        {
            Dictionary <String, Bitmap> d = default(Dictionary <String, Bitmap>);

            try
            {
                //tell controller how model should notify view about non-persisted properties AND including model properties that may be part of settings
                ModelController <MVCModel> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                //tell controller how settings should notify view about persisted properties
                SettingsController <MVCSettings> .DefaultHandler = PropertyChangedEventHandlerDelegate;

                InitModelAndSettings();

                FileDialogInfo settingsFileDialogInfo =
                    new FileDialogInfo
                    (
                        SettingsController <MVCSettings> .FILE_NEW,
                        null,
                        null,
                        MVCSettings.FileTypeExtension,
                        MVCSettings.FileTypeDescription,
                        MVCSettings.FileTypeName,
                        new String[]
                {
                    "XML files (*.xml)|*.xml",
                    "All files (*.*)|*.*"
                },
                        false,
                        default(Environment.SpecialFolder),
                        PathExtensions.WithTrailingSeparator(Environment.GetFolderPath(Environment.SpecialFolder.Personal))
                    );

                //set dialog caption
                settingsFileDialogInfo.Title = this.Text;

                d = new Dictionary <String, Bitmap>();
                d.Add("New", MVCForms.Properties.Resources.New);
                d.Add("Open", MVCForms.Properties.Resources.Open);
                d.Add("Save", MVCForms.Properties.Resources.Save);
                d.Add("Print", MVCForms.Properties.Resources.Print);
                d.Add("Undo", MVCForms.Properties.Resources.Undo);
                d.Add("Redo", MVCForms.Properties.Resources.Redo);
                d.Add("Cut", MVCForms.Properties.Resources.Cut);
                d.Add("Copy", MVCForms.Properties.Resources.Copy);
                d.Add("Paste", MVCForms.Properties.Resources.Paste);
                d.Add("Delete", MVCForms.Properties.Resources.Delete);
                d.Add("Find", MVCForms.Properties.Resources.Find);
                d.Add("Replace", MVCForms.Properties.Resources.Replace);
                d.Add("Refresh", MVCForms.Properties.Resources.Reload);
                d.Add("Preferences", MVCForms.Properties.Resources.Preferences);
                d.Add("Properties", MVCForms.Properties.Resources.Properties);
                d.Add("Contents", MVCForms.Properties.Resources.Contents);
                d.Add("About", MVCForms.Properties.Resources.About);

                //class to handle standard behaviors
                ViewModelController <Bitmap, MVCViewModel> .New
                (
                    ViewName,
                    new MVCViewModel
                    (
                        this.PropertyChangedEventHandlerDelegate,
                        d,
                        settingsFileDialogInfo
                    )
                );

                //select a viewmodel by view name
                ViewModel = ViewModelController <Bitmap, MVCViewModel> .ViewModel[ViewName];

                BindFormUi();

                //Init config parameters
                if (!LoadParameters())
                {
                    throw new Exception(String.Format("Unable to load config file parameter(s)."));
                }

                //DEBUG:filename coming in is being converted/passed as DOS 8.3 format equivalent
                //Load
                if ((SettingsController <MVCSettings> .FilePath == null) || (SettingsController <MVCSettings> .Filename == SettingsController <MVCSettings> .FILE_NEW))
                {
                    //NEW
                    ViewModel.FileNew();
                }
                else
                {
                    //OPEN
                    ViewModel.FileOpen(false);
                }

#if debug
                //debug view
                menuEditProperties_Click(sender, e);
#endif

                //Display dirty state
                ModelController <MVCModel> .Model.Refresh();
            }
            catch (Exception ex)
            {
                if (ViewModel != null)
                {
                    ViewModel.ErrorMessage = ex.Message;
                }
                Log.Write(ex, MethodBase.GetCurrentMethod(), EventLogEntryType.Error);
            }
        }
예제 #13
0
 /***Methods***/
 // the constructor of the Graph View Model - getting a client object and 3 plotviews for graphs
 public GraphViewModel(IClientModel c, ViewModelController vmc, OxyPlot.Wpf.PlotView Attpv, OxyPlot.Wpf.PlotView Corrpv, OxyPlot.Wpf.PlotView regLinepv)
 {
     //getting args from constructor
     clientModel         = c;
     viewModelController = vmc;
     VM_pvAtt            = Attpv;
     VM_pvCorr           = Corrpv;
     VM_pvLR             = regLinepv;
     //setting up timer
     timer      = new Stopwatch();
     lastUpdate = 0;
     timer.Start();
     //parsing XML for buttons name
     clientModel.xmlParser();
     //Plot models inti
     VM_AttPlotModel     = new PlotModel();
     VM_CorrPlotModel    = new PlotModel();
     VM_RegLinePlotModel = new PlotModel();
     //init list for later
     floatAttList  = new List <float>();
     floatCorrList = new List <float>();
     buttonsList   = new List <Button>();
     //onPropertyChanged methods
     clientModel.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
     {
         onPropertyChanged("VM_" + e.PropertyName);
     };
     // responsible of updating the graphs
     clientModel.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
     {
         if (e.PropertyName == "lineNumber" && VM_AttUserChoose != null && VM_corralative != null && VM_pvLR != null)
         {
             if (timer.ElapsedMilliseconds - lastUpdate > 500)
             {
                 //setting up attPlotModel
                 VM_AttPlotModel.Series.Clear();
                 SetUpModel(VM_AttPlotModel);
                 LoadLineDataGraph(VM_currLine, VM_pvAtt, floatAttList, VM_AttPlotModel);
                 VM_pvAtt.InvalidatePlot(true);
                 //setting up corrPlotModel
                 VM_CorrPlotModel.Series.Clear();
                 SetUpModel(VM_CorrPlotModel);
                 LoadLineDataGraph(VM_currLine, VM_pvCorr, floatCorrList, VM_CorrPlotModel);
                 VM_pvCorr.InvalidatePlot(true);
                 //setting up regLinePlotModel or minCircle
                 VM_RegLinePlotModel.Series.Clear();
                 VM_RegLinePlotModel.Annotations.Clear();
                 SetUpModel(VM_RegLinePlotModel);
                 if (viewModelController.isRegLine)
                 {
                     LoadScatterGraphData(VM_currLine, VM_pvLR, floatAttList, floatCorrList, VM_RegLinePlotModel);
                 }
                 if (viewModelController.isCircel)
                 {
                     LoadCircleGraphData(VM_currLine, VM_pvLR, floatAttList, floatCorrList, VM_RegLinePlotModel);
                 }
                 VM_pvLR.InvalidatePlot(true);
                 //updating lastUpdate timer
                 lastUpdate = timer.ElapsedMilliseconds;
             }
         }
     };
     viewModelController.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
     {
         if (e.PropertyName == "VM_dllCounter" && viewModelController.VM_dllCounter > 0 && viewModelController.VM_AnomalyReport != null)
         {
             foreach (Button b in buttonsList)
             {
                 foreach (KeyValuePair <string, List <int> > entry in viewModelController.VM_AnomalyReport)
                 {
                     if (entry.Key.Contains(b.Content.ToString()))
                     {
                         b.Background = Brushes.DarkRed;
                         b.Foreground = Brushes.White;
                         break;
                     }
                     else
                     {
                         b.Background = Brushes.LightGray;
                         b.Foreground = Brushes.Black;
                     }
                 }
             }
         }
         ;
     };
 }