예제 #1
0
 public MainModel(IButtonModel firstButton, IButtonModel secondButton, IButtonModel thirdButton, ICalendarModel calendar)
 {
     FirstButton  = firstButton;
     SecondButton = secondButton;
     ThirdButton  = thirdButton;
     Calendar     = calendar;
 }
예제 #2
0
 public ButtonViewModel(IButtonModel button)
 {
     _animator = button.Door.Animator;
 }
예제 #3
0
        public void Reload()
        {
            if (this.Plugins != null)
            {
                foreach (var item in this.Plugins)
                {
                    item.Key.Unload();
                }
            }

            _container.ComposeParts(this);

            var          plugins             = new Dictionary <IPlugin, IPluginMetadata>();
            var          menus               = new List <IButtonModel>();
            IButtonModel toolsMenu           = null;
            var          toolPluginMenus     = new List <IButtonModel>();
            var          toolbar             = new List <Tuple <string, IEnumerable <IButtonModel> > >();
            var          statusItems         = new List <Tuple <string, IEnumerable <IStatusItem> > >();
            var          layerProviders      = new List <PluginItemProvider <ILayer> >();
            var          projectionProviders = new List <PluginItemProvider <IProjection> >();
            var          datums              = new List <Datum>();
            var          anchorableTools     = new List <Tuple <IDockElement, DataTemplate> >();
            var          pluginsSettings     = new Dictionary <IPlugin, object>();

            foreach (var item in this.LoadedPlugins)
            {
                var plugin   = item.Value;
                var metadata = new PluginMetadata(item.Metadata, plugin.GetType().Assembly);
                plugins.Add(plugin, metadata);

                var pMenu = plugin.Menu;
                if (pMenu != null && pMenu.Items.Any())
                {
                    switch (pMenu.ItemsLocation)
                    {
                    case PluginMenu.PluginMenuLocation.TopLevel:
                        menus.AddRange(pMenu.Items);
                        if (toolsMenu == null)
                        {
                            toolsMenu = pMenu.Items.FirstOrDefault(m => m.Name == "Tools" || m.Name == "_Tools");
                        }
                        break;

                    case PluginMenu.PluginMenuLocation.ToolsMenu:
                        toolPluginMenus.AddRange(pMenu.Items);
                        break;

                    case PluginMenu.PluginMenuLocation.ToolsSubmenu:
                        toolPluginMenus.Add(new ButtonModel()
                        {
                            Name     = metadata.Name,
                            Children = new System.Collections.ObjectModel.ObservableCollection <IButtonModel>(pMenu.Items)
                        });
                        break;
                    }
                }

                var pToolbar = plugin.ToolBar;
                if (pToolbar != null && pToolbar.Any())
                {
                    toolbar.Add(new Tuple <string, IEnumerable <IButtonModel> >(metadata.Name, plugin.ToolBar));
                }

                var pStatusBar = plugin.StatusBar;
                if (pStatusBar != null && pStatusBar.Any())
                {
                    statusItems.Add(new Tuple <string, IEnumerable <IStatusItem> >(metadata.Name, plugin.StatusBar));
                }

                var pProjectionProviders = plugin.ProjectionProviders;
                if (pProjectionProviders != null && pProjectionProviders.Any())
                {
                    projectionProviders.AddRange(pProjectionProviders);
                }

                var pDatums = plugin.Datums;
                if (pDatums != null && pDatums.Any())
                {
                    datums.AddRange(pDatums);
                }

                var pSettings = plugin.Settings;
                if (pSettings != null)
                {
                    pluginsSettings.Add(plugin, pSettings);
                }

                var gPlugin = plugin as IGraphicalPlugin;
                if (gPlugin != null)
                {
                    var pLayerProviders = gPlugin.LayerProviders;
                    if (pLayerProviders != null && pLayerProviders.Any())
                    {
                        layerProviders.AddRange(pLayerProviders);
                    }

                    var pAnchorableTools = gPlugin.AnchorableTools;
                    if (pAnchorableTools != null && pAnchorableTools.Any())
                    {
                        foreach (var tool in pAnchorableTools)
                        {
                            anchorableTools.Add(tool);
                        }
                    }
                }
            }

            if (toolsMenu == null)
            {
                toolsMenu = new ButtonModel()
                {
                    Name = "_Tools"
                };
            }
            else
            {
                toolsMenu.Children.Add(new ButtonModel()
                {
                    IsSeparator = true
                });
            }
            foreach (var item in toolPluginMenus)
            {
                toolsMenu.Children.Add(item);
            }

            this.Plugins             = plugins;
            this.Menus               = menus;
            this.Toolbar             = toolbar;
            this.StatusItems         = statusItems;
            this.LayerProviders      = layerProviders;
            this.ProjectionProviders = projectionProviders;
            this.Datums              = datums;
            this.AnchorableTools     = anchorableTools;
            this.PluginsSettings     = pluginsSettings;

            this.Reloaded?.Invoke(this, new EventArgs());
        }
예제 #4
0
 public ButtonViewModel(IButtonModel menuButtonModel)
 {
     _buttonCommand = menuButtonModel;
     Debug.Assert(menuButtonModel != null, "IButtonModel cannot be null");
 }