PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/SettingsManager/SettingsFileOptionsForm.cs

#
C# | 273 lines | 184 code | 72 blank | 17 comment | 29 complexity | 2d62d9a389bc36a6ccdb12d09faa0566 MD5 | raw file
  1. // --------------------------------------------------------------------------------------------------------------------
  2. // <copyright file="SettingsFileOptionsForm.cs" company="Roman '4ux-nbIx' Novitsky">
  3. // Copyright (c) Roman '4ux-nbIx' Novitsky 2009
  4. // </copyright>
  5. // <summary>
  6. // Defines the SettingsFileOptionsForm type.
  7. // </summary>
  8. // --------------------------------------------------------------------------------------------------------------------
  9. namespace SettingsManager
  10. {
  11. #region Namespace Imports
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Windows.Forms;
  15. using ComponentSettingsManagers;
  16. using JetBrains.Annotations;
  17. using JetBrains.Util;
  18. using MessageBox = JetBrains.Util.MessageBox;
  19. using System.Linq;
  20. #endregion
  21. /// <summary>
  22. /// Describes and manipulates the settings file options form.
  23. /// </summary>
  24. internal sealed partial class SettingsFileOptionsForm : Form
  25. {
  26. #region Constants and Fields
  27. private readonly SettingsFile _settingsFile;
  28. private bool _isNewExternalFileCreated;
  29. private SettingsManagerOptionsForm _settingsManagerOptionsForm;
  30. private Dictionary<string, object> _settingsManagersOptions;
  31. #endregion
  32. #region Constructors and Destructors
  33. /// <summary>
  34. /// Initializes a new instance of the <see cref="SettingsFileOptionsForm"/> class.
  35. /// </summary>
  36. /// <param name="settingsFile">
  37. /// The settings file.
  38. /// </param>
  39. public SettingsFileOptionsForm([NotNull] SettingsFile settingsFile)
  40. {
  41. _settingsFile = settingsFile;
  42. InitializeComponent();
  43. _autoupdateSettingsCheckBox.Checked = settingsFile.AutoUpdateCommonSettings;
  44. _clearReadOnlyFlag.Checked = settingsFile.ClearReadOnlyFlagOnUpdates;
  45. FileSystemPath externalSettingsContainerFilePath = settingsFile.ExternalSettingsContainerFilePath;
  46. _settingsGroupsListBox.SelectedSettingsManagers = settingsFile.SettingsManagers;
  47. if (externalSettingsContainerFilePath != null)
  48. {
  49. _storedInAFileCheckBox.Checked = true;
  50. _absolutePathCheckBox.Checked = externalSettingsContainerFilePath.IsAbsolute;
  51. _settingsFilePathTextBox.Text = externalSettingsContainerFilePath.FullPath;
  52. }
  53. _settingsManagersOptions = _settingsFile.SettingsManagersOptions.ToDictionary(p => p.Key, p => p.Value);
  54. UpdateControls();
  55. }
  56. #endregion
  57. #region Methods
  58. private void OnAbsolutePathCheckBoxCheckedChanged([NotNull] object sender, [NotNull] EventArgs e)
  59. {
  60. if (string.IsNullOrEmpty(_settingsFilePathTextBox.Text))
  61. {
  62. return;
  63. }
  64. UpdateSettingsFilePath();
  65. }
  66. private void OnBrowseButtonClick([NotNull] object sender, [NotNull] EventArgs e)
  67. {
  68. DialogResult dialogResult = _openSettingsFileDialog.ShowDialog(this);
  69. if (dialogResult != DialogResult.OK)
  70. {
  71. return;
  72. }
  73. _settingsFilePathTextBox.Text = _openSettingsFileDialog.FileName;
  74. _isNewExternalFileCreated = false;
  75. UpdateSettingsFilePath();
  76. }
  77. private void OnCheckBoxCheckedChanged([NotNull] object sender, [NotNull] EventArgs e)
  78. {
  79. UpdateControls();
  80. }
  81. private void OnConfigureSettingsManagerButtonClick([NotNull] object sender, [NotNull] EventArgs e)
  82. {
  83. if (_settingsManagerOptionsForm == null || _settingsGroupsListBox.SelectedSettingsManager == null)
  84. {
  85. return;
  86. }
  87. object options = null;
  88. var componentTagName = _settingsGroupsListBox.SelectedSettingsManager.ComponentTagName;
  89. if (_settingsManagersOptions.ContainsKey(componentTagName))
  90. {
  91. options = _settingsManagersOptions[componentTagName];
  92. }
  93. _settingsManagerOptionsForm.Options = options;
  94. var result = _settingsManagerOptionsForm.ShowDialog(this);
  95. if (result != DialogResult.OK)
  96. {
  97. return;
  98. }
  99. if (_settingsManagerOptionsForm.Options == null)
  100. {
  101. _settingsManagersOptions.Remove(componentTagName);
  102. return;
  103. }
  104. _settingsManagersOptions[componentTagName] = _settingsManagerOptionsForm.Options;
  105. }
  106. private void OnCreateExternalFileButtonClick([NotNull] object sender, [NotNull] EventArgs e)
  107. {
  108. DialogResult dialogResult = _saveFileDialog.ShowDialog(this);
  109. if (dialogResult != DialogResult.OK)
  110. {
  111. return;
  112. }
  113. _settingsFilePathTextBox.Text = _saveFileDialog.FileName;
  114. _isNewExternalFileCreated = true;
  115. UpdateSettingsFilePath();
  116. }
  117. private void OnOkButtonClick([NotNull] object sender, [NotNull] EventArgs e)
  118. {
  119. _settingsFile.AutoUpdateCommonSettings = _autoupdateSettingsCheckBox.Checked;
  120. _settingsFile.ClearReadOnlyFlagOnUpdates = _clearReadOnlyFlag.Checked;
  121. if (_storedInAFileCheckBox.Checked)
  122. {
  123. if (string.IsNullOrEmpty(_settingsFilePathTextBox.Text))
  124. {
  125. MessageBox.ShowError("Invalid external settings file path.", "Error", Handle);
  126. return;
  127. }
  128. _settingsFile.ExternalSettingsContainerFilePath = new FileSystemPath(_settingsFilePathTextBox.Text);
  129. }
  130. else
  131. {
  132. _settingsFile.ExternalSettingsContainerFilePath = null;
  133. }
  134. _settingsFile.SettingsManagers = _settingsGroupsListBox.SelectedSettingsManagers;
  135. _settingsFile.SettingsManagersOptions.Clear();
  136. foreach (KeyValuePair<string, object> options in _settingsManagersOptions)
  137. {
  138. _settingsFile.SettingsManagersOptions.Add(options.Key, options.Value);
  139. }
  140. _settingsFile.SaveContents();
  141. if (_storedInAFileCheckBox.Checked && _isNewExternalFileCreated)
  142. {
  143. var sharedSettingsFile = _settingsFile as SharedSettingsFile;
  144. if (sharedSettingsFile != null)
  145. {
  146. sharedSettingsFile.SaveResharperSettings(false);
  147. }
  148. else
  149. {
  150. _settingsFile.SaveResharperSettings();
  151. }
  152. }
  153. DialogResult = DialogResult.OK;
  154. }
  155. private void OnSettingsGroupsListBoxSelectedIndexChanged([NotNull] object sender, [NotNull] EventArgs e)
  156. {
  157. if (_settingsManagerOptionsForm != null)
  158. {
  159. _settingsManagerOptionsForm.Dispose();
  160. _settingsManagerOptionsForm = null;
  161. }
  162. IComponentSettingsManager settingsManager = _settingsGroupsListBox.SelectedSettingsManager;
  163. if (settingsManager != null)
  164. {
  165. _settingsManagerOptionsForm = settingsManager.GetOptionsForm();
  166. }
  167. _configureSettingsManagerButton.Enabled = _settingsManagerOptionsForm != null;
  168. }
  169. private void OnStoredInAFileCheckBoxCheckedChanged([NotNull] object sender, [NotNull] EventArgs e)
  170. {
  171. UpdateControls();
  172. }
  173. private void UpdateControls()
  174. {
  175. bool storedInAFileChecked = _storedInAFileCheckBox.Checked;
  176. _browseButton.Enabled = storedInAFileChecked;
  177. _createExternalFileButton.Enabled = storedInAFileChecked;
  178. _absolutePathCheckBox.Enabled = storedInAFileChecked;
  179. }
  180. private void UpdateSettingsFilePath()
  181. {
  182. if (_absolutePathCheckBox.Checked)
  183. {
  184. var filePath = new FileSystemPath(_settingsFilePathTextBox.Text);
  185. if (filePath.IsAbsolute)
  186. {
  187. return;
  188. }
  189. FileSystemPath absolutePath = _settingsFile.Path.Directory.Combine(filePath);
  190. _settingsFilePathTextBox.Text = absolutePath.FullPath;
  191. }
  192. else
  193. {
  194. var filePath = new FileSystemPath(_settingsFilePathTextBox.Text);
  195. FileSystemPath relativePath = filePath.ConvertToRelativePath(_settingsFile.Path.Directory);
  196. _settingsFilePathTextBox.Text = relativePath.FullPath;
  197. }
  198. }
  199. #endregion
  200. }
  201. }