コード例 #1
0
        public void Load(CustomToolbarInfo toolbarInfo, string workDir)
        {
            m_Triggers = LoadTriggers(toolbarInfo);

            m_WorkDir = workDir;

            m_App.Documents.DocumentLoaded += OnDocumentLoaded;

            if (m_Triggers.Keys.Contains(Triggers_e.DocumentOpen))
            {
                m_App.Documents.DocumentOpened += OnDocumentOpened;
            }

            if (m_Triggers.Keys.Contains(Triggers_e.DocumentNew))
            {
                m_App.Documents.NewDocumentCreated += OnNewDocumentCreated;
            }

            if (m_Triggers.Keys.Contains(Triggers_e.DocumentActivated))
            {
                m_App.Documents.DocumentActivated += OnDocumentActivated;
            }

            InvokeTrigger(Triggers_e.ApplicationStart, null);
        }
コード例 #2
0
ファイル: CommandsManager.cs プロジェクト: 15831944/cad-plus
        private void SaveSettingChanges(ToolbarSettings toolbarSets, CustomToolbarInfo toolbarConf,
                                        bool isEditable, out bool isToolbarChanged)
        {
            isToolbarChanged = false;

            var oldToolbarSetts = m_SettsProvider.GetSettings();

            if (!DeepCompare(toolbarSets, oldToolbarSetts))
            {
                m_SettsProvider.SaveSettings(toolbarSets);
            }

            bool isReadOnly;

            var oldToolbarConf = m_ToolbarConfProvider
                                 .GetToolbar(out isReadOnly, oldToolbarSetts.SpecificationFile);

            isToolbarChanged = !DeepCompare(toolbarConf, oldToolbarConf);

            if (isToolbarChanged)
            {
                if (isEditable)
                {
                    UpdateGroupIds(toolbarConf.Groups, oldToolbarConf.Groups);
                    m_ToolbarConfProvider.SaveToolbar(toolbarConf, toolbarSets.SpecificationFile);
                }
                else
                {
                    m_Logger.Log("Skipped saving of read-only toolbar settings");
                }
            }
        }
コード例 #3
0
        public CommandsManager(IXExtension addIn, IXApplication app,
                               IMacroRunner macroRunner,
                               IMessageService msg, ISettingsProvider settsProvider,
                               IToolbarConfigurationProvider toolbarConfProvider,
                               IXLogger logger)
        {
            m_AddIn               = addIn;
            m_App                 = app;
            m_MacroRunner         = macroRunner;
            m_Msg                 = msg;
            m_SettsProvider       = settsProvider;
            m_ToolbarConfProvider = toolbarConfProvider;
            m_Logger              = logger;

            m_CachedToggleStates = new Dictionary <CommandMacroInfo, bool>();
            m_StateResolvers     = new ConcurrentDictionary <CommandMacroInfo, IToggleButtonStateResolver>();

            try
            {
                ToolbarInfo = LoadUserToolbar();
            }
            catch (Exception ex)
            {
                m_Msg.ShowError(ex, "Failed to load toolbar specification");
            }
        }
コード例 #4
0
        private void LoadCommands()
        {
            bool isReadOnly;

            try
            {
                m_ToolbarInfo = m_ConfsProvider.GetToolbar(out isReadOnly, ToolbarSpecificationPath);
            }
            catch
            {
                isReadOnly = true;
                m_MsgService.ShowMessage("Failed to load the toolbar from the specification file. Make sure that you have access to the specification file",
                                         MessageType_e.Error);
            }

            IsEditable = !isReadOnly;

            if (Groups != null)
            {
                Groups.CommandsChanged   -= OnGroupsCollectionChanged;
                Groups.NewCommandCreated -= OnNewCommandCreated;
            }

            Groups = new CommandsCollection <CommandGroupVM>(
                (m_ToolbarInfo.Groups ?? new CommandGroupInfo[0])
                .Select(g => new CommandGroupVM(g)));

            HandleCommandGroupCommandCreation(Groups.Commands);

            Groups.NewCommandCreated += OnNewCommandCreated;
            Groups.CommandsChanged   += OnGroupsCollectionChanged;
        }
コード例 #5
0
ファイル: ToolbarModule.cs プロジェクト: xarial/cad-plus
        private void LoadCommands(CustomToolbarInfo toolbarInfo, string workDir)
        {
            m_CmdsMgr     = Resolve <ICommandsManager>();
            m_TriggersMgr = Resolve <ITriggersManager>();

            m_CmdsMgr.CreateCommandGroups(toolbarInfo, workDir);
            m_TriggersMgr.Load(toolbarInfo, workDir);
        }
コード例 #6
0
ファイル: CommandManagerVM.cs プロジェクト: xarial/cad-plus
        public void Load(CustomToolbarInfo toolbarInfo, string toolbarPath)
        {
            ToolbarInfo = toolbarInfo;
            m_ToolbarSpecificationPath = toolbarPath;
            IsEditable = !m_ConfsProvider.IsReadOnly(toolbarPath);

            LoadToolbar(ToolbarInfo);
        }
コード例 #7
0
ファイル: CommandsManager.cs プロジェクト: bangush/cad-plus
        public void UpdateToolbarConfiguration(ToolbarSettings toolbarSets, CustomToolbarInfo toolbarConf, bool isEditable)
        {
            bool isToolbarChanged;

            SaveSettingChanges(toolbarSets, toolbarConf, isEditable, out isToolbarChanged);

            if (isToolbarChanged)
            {
                m_Msg.ShowInformation("Toolbar specification has changed. Please restart SOLIDWORKS");
            }
        }
コード例 #8
0
ファイル: CommandManagerVM.cs プロジェクト: xarial/cad-plus
        private void LoadToolbar(CustomToolbarInfo toolbarInfo)
        {
            if (Groups != null)
            {
                Groups.CommandsChanged   -= OnGroupsCollectionChanged;
                Groups.NewCommandCreated -= OnNewCommandCreated;
            }

            Groups = new CommandsCollection <CommandGroupVM>(
                (toolbarInfo.Groups ?? new CommandGroupInfo[0])
                .Select(g => m_CmdGrpFact.Invoke(g)));

            HandleCommandGroupCommandCreation(Groups.Commands);

            Groups.NewCommandCreated += OnNewCommandCreated;
            Groups.CommandsChanged   += OnGroupsCollectionChanged;
        }
コード例 #9
0
ファイル: CommandsManager.cs プロジェクト: xarial/cad-plus
        public void CreateCommandGroups(CustomToolbarInfo toolbarInfo, string workDir)
        {
            const string COMMAND_GROUP_TITLE_TEMPLATE = "Toolbar+ Command Group";
            const string COMMAND_TITLE_TEMPLATE       = "Toolbar+ Command";

            m_WorkDir = workDir;

            var usedCommandGroupNames = new List <string>();
            var usedCommandNames      = new List <string>();

            if (toolbarInfo?.Groups != null)
            {
                foreach (var grp in toolbarInfo.Groups
                         .Where(g => g.Commands?.Any(c => c.Triggers.HasFlag(Triggers_e.Button)) == true))
                {
                    var cmdGrp = new CommandGroupInfoSpec(grp, m_IconsProviders, m_PathResolver, m_WorkDir);

                    ResolveEmptyName(cmdGrp.Info, COMMAND_GROUP_TITLE_TEMPLATE, usedCommandGroupNames, out string grpTitle, out string grpTooltip);
                    cmdGrp.Title   = grpTitle;
                    cmdGrp.Tooltip = grpTooltip;

                    foreach (var cmd in cmdGrp.Commands)
                    {
                        ResolveEmptyName(((CommandItemInfoSpec)cmd).Info, COMMAND_TITLE_TEMPLATE, usedCommandNames, out string cmdTitle, out string cmdTooltip);
                        cmd.Title   = cmdTitle;
                        cmd.Tooltip = cmdTooltip;
                    }

                    m_Logger.Log($"Adding command group: {cmdGrp.Title} [{cmdGrp.Id}]. Commands: {string.Join(", ", cmdGrp.Commands.Select(c => $"{c.Title} [{c.UserId}]").ToArray())}", XCad.Base.Enums.LoggerMessageSeverity_e.Debug);

                    var cmdGrpCad = m_AddIn.CommandManager.AddCommandGroup(cmdGrp);

                    cmdGrpCad.CommandClick        += OnCommandClick;
                    cmdGrpCad.CommandStateResolve += OnCommandStateResolve;
                }

                LoadToggleStateResolvers(
                    toolbarInfo.Groups.SelectMany(
                        g => g.Commands ?? Enumerable.Empty <CommandMacroInfo>())
                    .Where(m => m.Triggers.HasFlag(Triggers_e.ToggleButton) && m.ToggleButtonStateCodeType != ToggleButtonStateCode_e.None));
            }
        }
コード例 #10
0
ファイル: CommandsManager.cs プロジェクト: 15831944/cad-plus
        public CommandsManager(IXExtension addIn, IXApplication app,
                               IMacroRunner macroRunner,
                               IMessageService msg, ISettingsProvider settsProvider,
                               IToolbarConfigurationProvider toolbarConfProvider,
                               IXLogger logger)
        {
            m_AddIn               = addIn;
            m_App                 = app;
            m_MacroRunner         = macroRunner;
            m_Msg                 = msg;
            m_SettsProvider       = settsProvider;
            m_ToolbarConfProvider = toolbarConfProvider;
            m_Logger              = logger;

            try
            {
                ToolbarInfo = LoadUserToolbar();
            }
            catch (Exception ex)
            {
                m_Msg.ShowError(ex, "Failed to load toolbar specification");
            }
        }
コード例 #11
0
        private Dictionary <Triggers_e, CommandMacroInfo[]> LoadTriggers(CustomToolbarInfo toolbarInfo)
        {
            var triggersCmds = new Dictionary <Triggers_e, CommandMacroInfo[]>();

            var allCmds = toolbarInfo?.Groups?.SelectMany(g => g.Commands ?? Enumerable.Empty <CommandMacroInfo>());

            if (allCmds?.Any() == true)
            {
                var triggers = typeof(Triggers_e).GetEnumFlags().Where(e => !e.Equals(Triggers_e.Button));

                foreach (Triggers_e trigger in triggers)
                {
                    var cmds = allCmds.Where(c => c.Triggers.HasFlag(trigger));

                    if (cmds.Any())
                    {
                        triggersCmds.Add(trigger, cmds.ToArray());
                    }
                }
            }

            return(triggersCmds);
        }
コード例 #12
0
        public void DisplayCommandManagerView()
        {
            var toolbar = new CustomToolbarInfo();

            toolbar.Groups = new CommandGroupInfo[]
            {
                new CommandGroupInfo()
                {
                    Title    = "Toolbar1",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            MacroPath   = "D:\\1.swb",
                            Title       = "Command1",
                            Description = "Sample command in toolbar which will invoke some macro",
                            EntryPoint  = new MacroStartFunction()
                            {
                                ModuleName = "Module1",
                                SubName    = "Sub1"
                            }
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command2"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command3"
                        }
                    }
                },
                new CommandGroupInfo()
                {
                    Title    = "Toolbar2",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            Title = "Command4"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command5"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command6"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command7"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command8"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command9"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command10"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command11"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command12"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command13"
                        }
                    }
                }
            };

            var confProviderMock  = new Mock <IToolbarConfigurationProvider>();
            var settsProviderMock = new Mock <ISettingsProvider>();

            confProviderMock.Setup(m => m.GetToolbar(out It.Ref <bool> .IsAny, It.IsAny <string>())).
            Returns(toolbar);

            settsProviderMock.Setup(p => p.GetSettings())
            .Returns(new ToolbarSettings());

            var vm = new CommandManagerVM(confProviderMock.Object, settsProviderMock.Object,
                                          new Mock <IMessageService>().Object);

            var form = new CommandManagerForm();

            form.DataContext = vm;

            form.ShowDialog();
        }
コード例 #13
0
ファイル: UITests.cs プロジェクト: phymucs/my-toolbar
        public void DisplayCommandManagerView()
        {
            var toolbar = new CustomToolbarInfo();

            toolbar.Groups = new CommandGroupInfo[]
            {
                new CommandGroupInfo()
                {
                    Title    = "Toolbar1",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            Title = "Command1", Description = "Sample command in toolbar which will invoke some macro"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command2"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command3"
                        }
                    }
                },
                new CommandGroupInfo()
                {
                    Title    = "Toolbar2",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            Title = "Command4"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command5"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command6"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command7"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command8"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command9"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command10"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command11"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command12"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command13"
                        }
                    }
                }
            };

            var confProviderMock  = new Mock <IToolbarConfigurationProvider>();
            var settsProviderMock = new Mock <ISettingsProvider>();

            confProviderMock.Setup(m => m.GetToolbar(out It.Ref <bool> .IsAny, It.IsAny <string>())).
            Returns(toolbar);

            settsProviderMock.Setup(p => p.GetSettings())
            .Returns(new ToolbarSettings());

            var vm = new CommandManagerVM(confProviderMock.Object, settsProviderMock.Object,
                                          new Mock <IMessageService>().Object);

            new CommandManagerForm(vm, IntPtr.Zero).ShowDialog();
        }
コード例 #14
0
 public void SaveToolbar(CustomToolbarInfo toolbar, string toolbarSpecFilePath)
 {
     m_UserSettsSrv.StoreSettings(toolbar, toolbarSpecFilePath);
 }
コード例 #15
0
        public void DisplayCommandManagerView()
        {
            var toolbar = new CustomToolbarInfo();

            toolbar.Groups = new CommandGroupInfo[]
            {
                new CommandGroupInfo()
                {
                    Title    = "Toolbar1",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            MacroPath   = "D:\\1.swb",
                            Title       = "Command1",
                            Description = "Sample command in toolbar which will invoke some macro",
                            EntryPoint  = new MacroStartFunction("Module1", "Sub1")
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command2"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command3"
                        }
                    }
                },
                new CommandGroupInfo()
                {
                    Title    = "Toolbar2",
                    Commands = new CommandMacroInfo[]
                    {
                        new CommandMacroInfo()
                        {
                            Title = "Command4"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command5"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command6"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command7"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command8"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command9"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command10"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command11"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command12"
                        },
                        new CommandMacroInfo()
                        {
                            Title = "Command13"
                        }
                    }
                }
            };

            var confProviderMock  = new Mock <IToolbarConfigurationProvider>();
            var settsProviderMock = new Mock <ISettingsProvider>();

            confProviderMock.Setup(m => m.GetToolbar(It.IsAny <string>())).
            Returns(toolbar);

            settsProviderMock.Setup(p => p.ReadSettings <ToolbarSettings>())
            .Returns(new ToolbarSettings());

            var vm = new CommandManagerVM(confProviderMock.Object,
                                          new Mock <IMessageService>().Object, new Mock <IXLogger>().Object,
                                          new Mock <ICadDescriptor>().Object,
                                          c => new CommandGroupVM(c, new Mock <IIconsProvider[]>().Object, new Mock <IFilePathResolver>().Object,
                                                                  x => new CommandMacroVM(x, new Mock <IIconsProvider[]>().Object, new Mock <IFilePathResolver>().Object, new Mock <IMacroEntryPointsExtractor>().Object)));

            var form = new CommandManagerForm();

            form.DataContext = vm;

            form.ShowDialog();
        }