private void HandleViewModelError(object sender, ErrorEventArgs e)
        {
            // smell: relies on implementation detail of 3rd-party library
            const string unauthorizedMessage = "Request failed with status code: 401";

            if (e.InnerMessage == unauthorizedMessage)
            {
                Logger.Trace("Requesting login");
                DisplayLoginGrid = true;
            }
            else
            {
                Logger.Trace($"Displaying {e.NotificationType} notification with title '{e.Title}' and message '{e.InnerMessage}'");
                ErrorTitle   = e.Title;
                ErrorMessage = e.InnerMessage;

                IconMappings.TryGetValue(e.NotificationType, out _errorIcon);
                OnPropertyChanged("ErrorIcon");

                DisplayErrorMessageGrid = true;
            }

            if (e.InnerMessage == RubberduckUI.SourceControl_UpdateSettingsMessage)
            {
                _config = _configService.Create();
            }
        }
Exemple #2
0
        private void ViewModel_ErrorThrown(object sender, ErrorEventArgs e)
        {
            const string unauthorizedMessage = "Request failed with status code: 401";

            if (e.InnerMessage == unauthorizedMessage)
            {
                Logger.Trace("Requesting login");
                DisplayLoginGrid = true;
            }
            else
            {
                Logger.Trace("Displaying {0} with title '{1}' and message '{2}'", e.NotificationType, e.Title, e.InnerMessage);

                ErrorTitle   = e.Title;
                ErrorMessage = e.InnerMessage;

                IconMappings.TryGetValue(e.NotificationType, out _errorIcon);
                OnPropertyChanged("ErrorIcon");

                DisplayErrorMessageGrid = true;
            }

            if (e.InnerMessage == RubberduckUI.SourceControl_UpdateSettingsMessage)
            {
                _config = _configService.Create();
            }
        }
        public SettingsPanelViewModel(
            IConfigProvider <SourceControlSettings> configService,
            IFolderBrowserFactory folderBrowserFactory,
            IOpenFileDialog openFileDialog)
        {
            _configService        = configService;
            _folderBrowserFactory = folderBrowserFactory;
            _config = _configService.Create();

            _openFileDialog                 = openFileDialog;
            _openFileDialog.Filter          = "Executables (*.exe)|*.exe|All files (*.*)|*.*";
            _openFileDialog.Multiselect     = false;
            _openFileDialog.ReadOnlyChecked = true;
            _openFileDialog.CheckFileExists = true;

            UserName     = _config.UserName;
            EmailAddress = _config.EmailAddress;
            DefaultRepositoryLocation = _config.DefaultRepositoryLocation;
            CommandPromptLocation     = _config.CommandPromptLocation;

            _showDefaultRepoFolderPickerCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowDefaultRepoFolderPicker());
            _showCommandPromptExePickerCommand  = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowCommandPromptExePicker());
            _cancelSettingsChangesCommand       = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CancelSettingsChanges());
            _updateSettingsCommand    = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => UpdateSettings());
            _showGitIgnoreCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowGitIgnore(), _ => Provider != null);
            _showGitAttributesCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowGitAttributes(), _ => Provider != null);
        }
        /// <summary>
        /// Loads the configuration from Rubberduck.config xml file.
        /// </summary>
        public virtual Configuration LoadConfiguration()
        {
            var config = new Configuration
            {
                UserSettings = new UserSettings
                               (
                    _generalProvider.Create(),
                    _hotkeyProvider.Create(),
                    _todoProvider.Create(),
                    _inspectionProvider.Create(),
                    _unitTestProvider.Create(),
                    _indenterProvider.Create()
                               )
            };

            return(config);
        }
        private void AddTestModule(IVBProject project, Declaration stubSource)
        {
            if (project == null || project.IsWrappingNullReference)
            {
                return;
            }

            var settings = _settings.Create();

            AddReferenceIfNeeded(project, settings);

            try
            {
                using (var components = project.VBComponents)
                    using (var component = components.Add(ComponentType.StandardModule))
                        using (var module = component.CodeModule)
                        {
                            component.Name = GetNextTestModuleName(project);

                            // Test modules always have appropriate options so remove any pre-generated code.
                            if (module.CountOfLines > 0)
                            {
                                module.DeleteLines(1, module.CountOfLines);
                            }

                            if (stubSource != null)
                            {
                                var code = GetNewTestModuleCode(component, GetDeclarationsToStub(stubSource).ToList());
                                module.AddFromString(code);
                            }
                            else
                            {
                                module.AddFromString(GetNewTestModuleCode(component));
                            }

                            component.Activate();
                        }
            }
            catch (Exception ex)
            {
                _messageBox.Message(TestExplorer.Command_AddTestModule_Error);
                Logger.Warn("Unable to add test module. An exception was thrown.");
                Logger.Warn(ex);
            }
        }
Exemple #6
0
 public ReparseCommand(IVBE vbe, IConfigProvider <GeneralSettings> settingsProvider, RubberduckParserState state, IVBETypeLibsAPI typeLibApi, IVBESettings vbeSettings, IMessageBox messageBox) : base(LogManager.GetCurrentClassLogger())
 {
     _vbe         = vbe;
     _vbeSettings = vbeSettings;
     _typeLibApi  = typeLibApi;
     _state       = state;
     _settings    = settingsProvider.Create();
     _messageBox  = messageBox;
 }
Exemple #7
0
        public SourceControlViewViewModel(
            VBE vbe,
            RubberduckParserState state,
            ISinks sinks,
            ISourceControlProviderFactory providerFactory,
            IFolderBrowserFactory folderBrowserFactory,
            IConfigProvider <SourceControlSettings> configService,
            IEnumerable <IControlView> views,
            ICodePaneWrapperFactory wrapperFactory,
            IMessageBox messageBox)
        {
            _vbe                  = vbe;
            _state                = state;
            _sinks                = sinks;
            _providerFactory      = providerFactory;
            _folderBrowserFactory = folderBrowserFactory;

            _state.StateChanged += _state_StateChanged;

            _configService  = configService;
            _config         = _configService.Create();
            _wrapperFactory = wrapperFactory;
            _messageBox     = messageBox;

            _initRepoCommand            = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => InitRepo(), _ => _vbe.VBProjects.Count != 0);
            _openRepoCommand            = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => OpenRepo(), _ => _vbe.VBProjects.Count != 0);
            _cloneRepoCommand           = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowCloneRepoGrid(), _ => _vbe.VBProjects.Count != 0);
            _publishRepoCommand         = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowPublishRepoGrid(), _ => _vbe.VBProjects.Count != 0 && Provider != null);
            _refreshCommand             = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => Refresh());
            _dismissErrorMessageCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => DismissErrorMessage());
            _showFilePickerCommand      = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowFilePicker());
            _loginGridOkCommand         = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseLoginGrid(), text => !string.IsNullOrEmpty((string)text));
            _loginGridCancelCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseLoginGrid());

            _cloneRepoOkButtonCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloneRepo(), _ => !IsNotValidCloneRemotePath);
            _cloneRepoCancelButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseCloneRepoGrid());

            _publishRepoOkButtonCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => PublishRepo(), _ => !IsNotValidPublishRemotePath);
            _publishRepoCancelButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ClosePublishRepoGrid());

            _openCommandPromptCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => OpenCommandPrompt());

            _sinks.ComponentAdded   += ComponentAdded;
            _sinks.ComponentRemoved += ComponentRemoved;
            _sinks.ComponentRenamed += ComponentRenamed;
            _sinks.ProjectRemoved   += ProjectRemoved;

            TabItems = new ObservableCollection <IControlView>(views);
            SetTab(SourceControlTab.Changes);

            Status = RubberduckUI.Offline;

            ListenForErrors();

            _fileSystemWatcher = new FileSystemWatcher();
        }
        public CodeExplorerViewModel(
            FolderHelper folderHelper,
            RubberduckParserState state,
            RemoveCommand removeCommand,
            IConfigProvider <GeneralSettings> generalSettingsProvider,
            IConfigProvider <WindowSettings> windowSettingsProvider,
            IUiDispatcher uiDispatcher,
            IVBE vbe,
            ITemplateProvider templateProvider)
        {
            _folderHelper              = folderHelper;
            _state                     = state;
            _state.StateChanged       += HandleStateChanged;
            _state.ModuleStateChanged += ParserState_ModuleStateChanged;
            _windowSettingsProvider    = windowSettingsProvider;
            _uiDispatcher              = uiDispatcher;
            _vbe = vbe;
            _templateProvider = templateProvider;

            if (generalSettingsProvider != null)
            {
                _generalSettings = generalSettingsProvider.Create();
            }

            if (windowSettingsProvider != null)
            {
                _windowSettings = windowSettingsProvider.Create();
            }
            CollapseAllSubnodesCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteCollapseNodes);
            ExpandAllSubnodesCommand   = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteExpandNodes);

            _externalRemoveCommand = removeCommand;
            if (_externalRemoveCommand != null)
            {
                RemoveCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteRemoveComand, _externalRemoveCommand.CanExecute);
            }

            SetNameSortCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
            {
                if ((bool)param)
                {
                    SortByName      = (bool)param;
                    SortByCodeOrder = !(bool)param;
                }
            }, param => !SortByName);

            SetCodeOrderSortCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
            {
                if ((bool)param)
                {
                    SortByCodeOrder = (bool)param;
                    SortByName      = !(bool)param;
                }
            }, param => !SortByCodeOrder);
        }
        private readonly WindowSettings _settings;  //Storing this really doesn't matter - it's only checked on startup and never persisted.

        protected DockableToolwindowPresenter(IVBE vbe, IAddIn addin, IDockableUserControl view, IConfigProvider <WindowSettings> settingsProvider)
        {
            _vbe   = vbe;
            _addin = addin;
            Logger.Trace($"Initializing Dockable Panel ({GetType().Name})");
            UserControl = view as UserControl;
            if (settingsProvider != null)
            {
                _settings = settingsProvider.Create();
            }
            _window = CreateToolWindow(view);
        }
        public AddRemoveReferencesUserSettingsViewModel(IConfigProvider <ReferenceSettings> provider, IFileSystemBrowserFactory browserFactory)
        {
            _provider       = provider;
            _browserFactory = browserFactory;
            _clean          = _provider.Create();

            TransferSettingsToView(_clean);

            IncrementRecentReferencesTrackedCommand = new DelegateCommand(null, ExecuteIncrementRecentReferencesTracked, CanExecuteIncrementMaxConcatLines);
            DecrementReferencesTrackedCommand       = new DelegateCommand(null, ExecuteDecrementRecentReferencesTracked, CanExecuteDecrementMaxConcatLines);
            BrowseForPathCommand = new DelegateCommand(null, ExecuteBrowseForPath);
            RemoveSelectedPaths  = new DelegateCommand(null, ExecuteRemoveSelectedPaths);
        }
        public SourceControlViewViewModel(
            IVBE vbe,
            RubberduckParserState state,
            ISourceControlProviderFactory providerFactory,
            IFolderBrowserFactory folderBrowserFactory,
            IConfigProvider <SourceControlSettings> configService,
            IEnumerable <IControlView> views,
            IMessageBox messageBox,
            IEnvironmentProvider environment)
        {
            _vbe                  = vbe;
            _state                = state;
            _providerFactory      = providerFactory;
            _folderBrowserFactory = folderBrowserFactory;

            _configService = configService;
            _config        = _configService.Create();
            _messageBox    = messageBox;
            _environment   = environment;

            InitRepoCommand            = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => InitRepo(), _ => _vbe.VBProjects.Count != 0);
            OpenRepoCommand            = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => OpenRepo(), _ => _vbe.VBProjects.Count != 0);
            CloneRepoCommand           = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowCloneRepoGrid(), _ => _vbe.VBProjects.Count != 0);
            PublishRepoCommand         = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowPublishRepoGrid(), _ => _vbe.VBProjects.Count != 0 && Provider != null);
            RefreshCommand             = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => Refresh());
            DismissErrorMessageCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => DismissErrorMessage());
            ShowFilePickerCommand      = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ShowFilePicker());
            LoginGridOkCommand         = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseLoginGrid(), text => !string.IsNullOrEmpty((string)text));
            LoginGridCancelCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseLoginGrid());

            CloneRepoOkButtonCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloneRepo(), _ => !IsNotValidCloneRemotePath);
            CloneRepoCancelButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => CloseCloneRepoGrid());

            PublishRepoOkButtonCommand     = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => PublishRepo(), _ => !IsNotValidPublishRemotePath);
            PublishRepoCancelButtonCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => ClosePublishRepoGrid());

            OpenCommandPromptCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), _ => OpenCommandPrompt());

            AddComponentEventHandlers();

            TabItems = new ObservableCollection <IControlView>(views);
            SetTab(SourceControlTab.Changes);

            Status = RubberduckUI.Offline;

            ListenForErrors();

            _fileSystemWatcher = new FileSystemWatcher();
        }
        public override bool Execute(AutoCompleteEventArgs e, AutoCompleteSettings settings)
        {
            var ignoreTab   = e.Character == '\t' && !settings.CompleteBlockOnTab;
            var ignoreEnter = e.Character == '\r' && !settings.CompleteBlockOnEnter;

            if (IsInlineCharCompletion || e.IsDelete || ignoreTab || ignoreEnter)
            {
                return(false);
            }

            var module = e.CodeModule;

            using (var pane = module.CodePane)
            {
                var selection    = pane.Selection;
                var originalCode = module.GetLines(selection);
                var code         = originalCode.Trim().StripStringLiterals();
                var hasComment   = code.HasComment(out int commentStart);

                var isDeclareStatement = Regex.IsMatch(code, $"\\b{Tokens.Declare}\\b", RegexOptions.IgnoreCase);
                var isExitStatement    = Regex.IsMatch(code, $"\\b{Tokens.Exit}\\b", RegexOptions.IgnoreCase);
                var isNamedArg         = Regex.IsMatch(code, $"\\b{InputToken}\\:\\=", RegexOptions.IgnoreCase);

                if ((SkipPreCompilerDirective && code.StartsWith("#")) ||
                    isDeclareStatement || isExitStatement || isNamedArg)
                {
                    return(false);
                }

                if (IsMatch(code) && !IsBlockCompleted(module, selection))
                {
                    var indent  = originalCode.TakeWhile(c => char.IsWhiteSpace(c)).Count();
                    var newCode = OutputToken.PadLeft(OutputToken.Length + indent, ' ');

                    var stdIndent = IndentBody
                        ? IndenterSettings.Create().IndentSpaces
                        : 0;

                    module.InsertLines(selection.NextLine.StartLine, "\n" + newCode);

                    module.ReplaceLine(selection.NextLine.StartLine, new string(' ', indent + stdIndent));
                    pane.Selection = new Selection(selection.NextLine.StartLine, indent + stdIndent + 1);

                    e.Handled = true;
                    return(true);
                }
                return(false);
            }
        }
        public AddRemoveReferencesPresenter Create(ProjectDeclaration project)
        {
            if (project is null)
            {
                return(null);
            }

            AddRemoveReferencesModel model = null;

            try
            {
                Cursor.Current = Cursors.WaitCursor;

                var refs = new Dictionary <RegisteredLibraryKey, RegisteredLibraryInfo>();
                // Iterating the returned libraries here instead of just .ToDictionary() using because we can't trust that the registry doesn't contain errors.
                foreach (var reference in _finder.FindRegisteredLibraries())
                {
                    if (refs.ContainsKey(reference.UniqueId))
                    {
                        _logger.Warn(
                            $"Duplicate registry definition for {reference.Guid} version {reference.Version}.");
                        continue;
                    }

                    refs.Add(reference.UniqueId, reference);
                }

                var models = new Dictionary <RegisteredLibraryKey, ReferenceModel>();
                using (var references = project.Project?.References)
                {
                    if (references is null)
                    {
                        return(null);
                    }

                    var priority = 1;
                    foreach (var reference in references)
                    {
                        var guid = Guid.TryParse(reference.Guid, out var result) ? result : Guid.Empty;

                        // This avoids collisions when the parse actually succeeds, but the result is empty.
                        if (guid.Equals(Guid.Empty))
                        {
                            guid = new Guid(priority, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                        }

                        var libraryId = new RegisteredLibraryKey(guid, reference.Major, reference.Minor);

                        // TODO: If for some reason the VBA reference is broken, we could technically use this to repair it. Just a thought...
                        var adding = refs.ContainsKey(libraryId)
                            ? new ReferenceModel(refs[libraryId], reference, priority++)
                            : new ReferenceModel(reference, priority++);

                        adding.IsUsed = adding.IsBuiltIn ||
                                        _state.DeclarationFinder.IsReferenceUsedInProject(project,
                                                                                          adding.ToReferenceInfo());

                        models.Add(libraryId, adding);
                        reference.Dispose();
                    }
                }

                foreach (var reference in refs.Where(library =>
                                                     (_use64BitPaths || library.Value.Has32BitVersion) &&
                                                     !models.ContainsKey(library.Key)))
                {
                    models.Add(reference.Key, new ReferenceModel(reference.Value));
                }

                var settings = _settings.Create();
                model = new AddRemoveReferencesModel(project, models.Values, settings);
                if (AddRemoveReferencesViewModel.HostHasProjects)
                {
                    model.References.AddRange(GetUserProjectFolderModels(model.Settings).Where(proj =>
                                                                                               !model.References.Any(item =>
                                                                                                                     item.FullPath.Equals(proj.FullPath, StringComparison.OrdinalIgnoreCase))));
                }
            }
            catch (Exception ex)
            {
                _logger.Warn(ex, "Unexpected exception attempting to create AddRemoveReferencesModel.");
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }

            return((model != null)
                ? new AddRemoveReferencesPresenter(
                       new AddRemoveReferencesDialog(new AddRemoveReferencesViewModel(model, _reconciler, _browser)))
                : null);
        }
Exemple #14
0
        public CodeExplorerViewModel(FolderHelper folderHelper, RubberduckParserState state, List <CommandBase> commands,
                                     IConfigProvider <GeneralSettings> generalSettingsProvider, IConfigProvider <WindowSettings> windowSettingsProvider)
        {
            _folderHelper              = folderHelper;
            _state                     = state;
            _state.StateChanged       += HandleStateChanged;
            _state.ModuleStateChanged += ParserState_ModuleStateChanged;
            _generalSettingsProvider   = generalSettingsProvider;
            _windowSettingsProvider    = windowSettingsProvider;

            if (generalSettingsProvider != null)
            {
                _generalSettings = generalSettingsProvider.Create();
            }

            if (windowSettingsProvider != null)
            {
                _windowSettings = windowSettingsProvider.Create();
            }

            var reparseCommand = commands.OfType <ReparseCommand>().SingleOrDefault();

            RefreshCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(),
                                                 reparseCommand == null ? (Action <object>)(o => { }) :
                                                 o => reparseCommand.Execute(o),
                                                 o => !IsBusy && reparseCommand != null && reparseCommand.CanExecute(o));

            OpenCommand         = commands.OfType <UI.CodeExplorer.Commands.OpenCommand>().SingleOrDefault();
            OpenDesignerCommand = commands.OfType <OpenDesignerCommand>().SingleOrDefault();

            AddTestModuleCommand          = commands.OfType <UI.CodeExplorer.Commands.AddTestModuleCommand>().SingleOrDefault();
            AddTestModuleWithStubsCommand = commands.OfType <AddTestModuleWithStubsCommand>().SingleOrDefault();

            AddStdModuleCommand   = commands.OfType <AddStdModuleCommand>().SingleOrDefault();
            AddClassModuleCommand = commands.OfType <AddClassModuleCommand>().SingleOrDefault();
            AddUserFormCommand    = commands.OfType <AddUserFormCommand>().SingleOrDefault();

            OpenProjectPropertiesCommand = commands.OfType <OpenProjectPropertiesCommand>().SingleOrDefault();
            RenameCommand   = commands.OfType <RenameCommand>().SingleOrDefault();
            IndenterCommand = commands.OfType <IndentCommand>().SingleOrDefault();

            FindAllReferencesCommand      = commands.OfType <UI.CodeExplorer.Commands.FindAllReferencesCommand>().SingleOrDefault();
            FindAllImplementationsCommand = commands.OfType <UI.CodeExplorer.Commands.FindAllImplementationsCommand>().SingleOrDefault();

            CollapseAllSubnodesCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteCollapseNodes);
            ExpandAllSubnodesCommand   = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteExpandNodes);

            ImportCommand    = commands.OfType <ImportCommand>().SingleOrDefault();
            ExportCommand    = commands.OfType <ExportCommand>().SingleOrDefault();
            ExportAllCommand = commands.OfType <Rubberduck.UI.Command.ExportAllCommand>().SingleOrDefault();

            _externalRemoveCommand = commands.OfType <RemoveCommand>().SingleOrDefault();
            if (_externalRemoveCommand != null)
            {
                RemoveCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteRemoveComand, _externalRemoveCommand.CanExecute);
            }

            PrintCommand = commands.OfType <PrintCommand>().SingleOrDefault();

            CommitCommand = commands.OfType <CommitCommand>().SingleOrDefault();
            UndoCommand   = commands.OfType <UndoCommand>().SingleOrDefault();

            CopyResultsCommand = commands.OfType <CopyResultsCommand>().SingleOrDefault();

            SetNameSortCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
            {
                if ((bool)param)
                {
                    SortByName      = (bool)param;
                    SortByCodeOrder = !(bool)param;
                }
            }, param => !SortByName);

            SetCodeOrderSortCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), param =>
            {
                if ((bool)param)
                {
                    SortByCodeOrder = (bool)param;
                    SortByName      = !(bool)param;
                }
            }, param => !SortByCodeOrder);
        }