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(); } }
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); } }
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; }
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); }
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); }