private bool CanEdit([NotNull] ResourceEntity entity, [CanBeNull] CultureKey cultureKey) { Contract.Requires(entity != null); if (cultureKey == null) { return(true); } var rootFolder = _sourceFilesProvider.Folder; if (string.IsNullOrEmpty(rootFolder)) { return(false); } var language = entity.Languages.FirstOrDefault(lang => cultureKey.Equals(lang.CultureKey)); if (language != null) { return(true); } var culture = cultureKey.Culture; if (culture == null) { return(false); // no neutral culture => this should never happen. } var neutralLanguage = entity.Languages.FirstOrDefault(); if (neutralLanguage == null) { return(false); } var languageFileName = neutralLanguage.ProjectFile.GetLanguageFileName(culture); if (!File.Exists(languageFileName)) { var directoryName = Path.GetDirectoryName(languageFileName); if (!string.IsNullOrEmpty(directoryName)) { Directory.CreateDirectory(directoryName); } File.WriteAllText(languageFileName, Resources.EmptyResxTemplate); } entity.AddLanguage(new ProjectFile(languageFileName, rootFolder, entity.ProjectName, null)); return(true); }
private bool CanEdit([NotNull] ResourceEntity entity, [CanBeNull] CultureKey cultureKey) { string message; var languages = entity.Languages.Where(lang => (cultureKey == null) || cultureKey.Equals(lang.CultureKey)).ToArray(); var rootFolder = SourceFilesProvider.Folder; if (string.IsNullOrEmpty(rootFolder)) { return(false); } if (!languages.Any()) { try { var culture = cultureKey?.Culture; if (culture == null) { return(false); // no neutral culture => this should never happen. } if (_configuration.ConfirmAddLanguageFile) { message = string.Format(CultureInfo.CurrentCulture, Resources.ProjectHasNoResourceFile, culture.DisplayName); if (MessageBox.Show(message, View.Properties.Resources.Title, MessageBoxButton.YesNo, MessageBoxImage.Question) != MessageBoxResult.Yes) { return(false); } } var neutralLanguage = entity.Languages.FirstOrDefault(); if (neutralLanguage == null) { return(false); } var languageFileName = neutralLanguage.ProjectFile.GetLanguageFileName(culture); if (!File.Exists(languageFileName)) { var directoryName = Path.GetDirectoryName(languageFileName); if (!string.IsNullOrEmpty(directoryName)) { Directory.CreateDirectory(directoryName); } File.WriteAllText(languageFileName, Model.Properties.Resources.EmptyResxTemplate); } entity.AddLanguage(new ProjectFile(languageFileName, rootFolder, entity.ProjectName, null)); return(true); } catch (Exception ex) { MessageBox.Show(string.Format(CultureInfo.CurrentCulture, View.Properties.Resources.ErrorAddingNewResourceFile, ex), "ResX Resource Manager"); } } else { var lockedFiles = languages.Where(l => !l.ProjectFile.IsWritable).Select(l => l.FileName).ToArray(); if (!lockedFiles.Any()) { return(true); } message = string.Format(CultureInfo.CurrentCulture, Resources.ProjectHasReadOnlyFiles, FormatFileNames(lockedFiles)); MessageBox.Show(message); } return(false); }
private bool CanEdit(ResourceManager resourceManager, ResourceEntity entity, CultureKey cultureKey) { Contract.Requires(resourceManager != null); Contract.Requires(entity != null); var languages = entity.Languages.Where(lang => (cultureKey == null) || cultureKey.Equals(lang.CultureKey)).ToArray(); if (!languages.Any()) { try { var culture = cultureKey?.Culture; if (culture == null) { return(false); // no neutral culture => this should never happen. } return(AddLanguage(resourceManager, entity, culture)); } catch (Exception ex) { MessageBox.Show(string.Format(CultureInfo.CurrentCulture, View.Properties.Resources.ErrorAddingNewResourceFile, ex), Resources.ToolWindowTitle); } } var alreadyOpenItems = GetLanguagesOpenedInAnotherEditor(languages); string message; if (alreadyOpenItems.Any()) { message = string.Format(CultureInfo.CurrentCulture, Resources.ErrorOpenFilesInEditor, FormatFileNames(alreadyOpenItems.Select(item => item.Item1))); MessageBox.Show(message, Resources.ToolWindowTitle); ActivateWindow(alreadyOpenItems.First()?.Item2); return(false); } // if file is not read only, assume file is either // - already checked out // - not under source control // - or does not need special SCM handling (e.g. TFS local workspace) var lockedFiles = GetLockedFiles(languages); if (!lockedFiles.Any()) { return(true); } if (!QueryEditFiles(lockedFiles)) { return(false); } // if file is not under source control, we get an OK from QueryEditFiles even if the file is read only, so we have to test again: lockedFiles = GetLockedFiles(languages);; if (!lockedFiles.Any()) { return(true); } message = string.Format(CultureInfo.CurrentCulture, Resources.ProjectHasReadOnlyFiles, FormatFileNames(lockedFiles)); MessageBox.Show(message, Resources.ToolWindowTitle); return(false); }