PageRenderTime 55ms CodeModel.GetById 30ms RepoModel.GetById 1ms app.codeStats 0ms

/GitUI/FormRecentReposSettings.cs

https://github.com/eisnerd/gitextensions
C# | 222 lines | 187 code | 35 blank | 0 comment | 31 complexity | 067481975b6a9262c3b8b3aa0724d820 MD5 | raw file
Possible License(s): GPL-3.0, GPL-2.0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using GitCommands;
  10. using GitCommands.Repository;
  11. namespace GitUI
  12. {
  13. public partial class FormRecentReposSettings : GitExtensionsForm
  14. {
  15. private readonly int ComboWidth;
  16. private readonly int FormWidth;
  17. public FormRecentReposSettings()
  18. {
  19. InitializeComponent();
  20. FormWidth = Width;
  21. ComboWidth = comboPanel.Width;
  22. Translate();
  23. LoadSettings();
  24. RefreshRepos();
  25. SetComboWidth();
  26. }
  27. private void LoadSettings()
  28. {
  29. SetShorteningStrategy(Settings.ShorteningRecentRepoPathStrategy);
  30. sortMostRecentRepos.Checked = Settings.SortMostRecentRepos;
  31. sortLessRecentRepos.Checked = Settings.SortLessRecentRepos;
  32. _NO_TRANSLATE_maxRecentRepositories.Value = Settings.MaxMostRecentRepositories;
  33. comboMinWidthEdit.Value = Settings.RecentReposComboMinWidth;
  34. }
  35. private void SaveSettings()
  36. {
  37. Settings.ShorteningRecentRepoPathStrategy = GetShorteningStrategy();
  38. Settings.SortMostRecentRepos = sortMostRecentRepos.Checked;
  39. Settings.SortLessRecentRepos = sortLessRecentRepos.Checked;
  40. Settings.MaxMostRecentRepositories = (int)_NO_TRANSLATE_maxRecentRepositories.Value;
  41. Settings.RecentReposComboMinWidth = (int)comboMinWidthEdit.Value;
  42. }
  43. private string GetShorteningStrategy()
  44. {
  45. if (dontShortenRB.Checked)
  46. return RecentRepoSplitter.ShorteningStrategy_None;
  47. else if (mostSigDirRB.Checked)
  48. return RecentRepoSplitter.ShorteningStrategy_MostSignDir;
  49. else if (middleDotRB.Checked)
  50. return RecentRepoSplitter.ShorteningStrategy_MiddleDots;
  51. else
  52. throw new Exception("Can not figure shortening strategy");
  53. }
  54. private void SetShorteningStrategy(string strategy)
  55. {
  56. if (RecentRepoSplitter.ShorteningStrategy_None.Equals(strategy))
  57. dontShortenRB.Checked = true;
  58. else if (RecentRepoSplitter.ShorteningStrategy_MostSignDir.Equals(strategy))
  59. mostSigDirRB.Checked = true;
  60. else if (RecentRepoSplitter.ShorteningStrategy_MiddleDots.Equals(strategy))
  61. middleDotRB.Checked = true;
  62. else
  63. throw new Exception("Unhandled shortening strategy: " + strategy);
  64. }
  65. private void RefreshRepos()
  66. {
  67. MostRecentLB.Items.Clear();
  68. LessRecentLB.Items.Clear();
  69. List<RecentRepoInfo> mostRecentRepos = new List<RecentRepoInfo>();
  70. List<RecentRepoInfo> lessRecentRepos = new List<RecentRepoInfo>();
  71. RecentRepoSplitter splitter = new RecentRepoSplitter();
  72. splitter.MaxRecentRepositories = (int)_NO_TRANSLATE_maxRecentRepositories.Value;
  73. splitter.ShorteningStrategy = GetShorteningStrategy();
  74. splitter.SortLessRecentRepos = sortLessRecentRepos.Checked;
  75. splitter.SortMostRecentRepos = sortMostRecentRepos.Checked;
  76. splitter.RecentReposComboMinWidth = (int)comboMinWidthEdit.Value;
  77. splitter.measureFont = MostRecentLB.Font;
  78. splitter.graphics = MostRecentLB.CreateGraphics();
  79. try
  80. {
  81. splitter.SplitRecentRepos(Repositories.RepositoryHistory.Repositories, mostRecentRepos, lessRecentRepos);
  82. }
  83. finally
  84. {
  85. splitter.graphics.Dispose();
  86. }
  87. foreach (RecentRepoInfo repo in mostRecentRepos)
  88. MostRecentLB.Items.Add(repo);
  89. foreach (RecentRepoInfo repo in lessRecentRepos)
  90. LessRecentLB.Items.Add(repo);
  91. }
  92. private void SetComboWidth()
  93. {
  94. if (comboMinWidthEdit.Value == 0)
  95. comboPanel.Width = ComboWidth;
  96. else
  97. comboPanel.Width = (int)comboMinWidthEdit.Value;
  98. this.Width = FormWidth + comboPanel.Width - ComboWidth;
  99. }
  100. private void sortMostRecentRepos_CheckedChanged(object sender, EventArgs e)
  101. {
  102. RefreshRepos();
  103. }
  104. private void numericUpDown1_ValueChanged(object sender, EventArgs e)
  105. {
  106. SetComboWidth();
  107. RefreshRepos();
  108. }
  109. private void Ok_Click(object sender, EventArgs e)
  110. {
  111. SaveSettings();
  112. Close();
  113. }
  114. private void Abort_Click(object sender, EventArgs e)
  115. {
  116. Close();
  117. }
  118. private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
  119. {
  120. RecentRepoInfo repo;
  121. e.Cancel = !GetSelectedRepo(sender, out repo);
  122. if (!e.Cancel)
  123. {
  124. anchorToMostToolStripMenuItem.Enabled = repo.Repo.Anchor != Repository.RepositoryAnchor.MostRecent;
  125. anchorToLessToolStripMenuItem.Enabled = repo.Repo.Anchor != Repository.RepositoryAnchor.LessRecent;
  126. removeAnchorToolStripMenuItem.Enabled = repo.Repo.Anchor != Repository.RepositoryAnchor.None;
  127. }
  128. }
  129. private bool GetSelectedRepo(object sender, out RecentRepoInfo repo)
  130. {
  131. if (sender is ContextMenuStrip)
  132. sender = (sender as ContextMenuStrip).SourceControl;
  133. else if (sender is ToolStripItem)
  134. return GetSelectedRepo((sender as ToolStripItem).Owner, out repo);
  135. else
  136. sender = null;
  137. ListBox lb;
  138. if (sender == MostRecentLB)
  139. lb = MostRecentLB;
  140. else if (sender == LessRecentLB)
  141. lb = LessRecentLB;
  142. else
  143. lb = null;
  144. if (lb != null)
  145. repo = (RecentRepoInfo)lb.SelectedItem;
  146. else
  147. repo = null;
  148. return repo != null;
  149. }
  150. private void anchorToMostToolStripMenuItem_Click(object sender, EventArgs e)
  151. {
  152. RecentRepoInfo repo;
  153. if (GetSelectedRepo(sender, out repo))
  154. {
  155. repo.Repo.Anchor = Repository.RepositoryAnchor.MostRecent;
  156. RefreshRepos();
  157. }
  158. }
  159. private void anchorToLessToolStripMenuItem_Click(object sender, EventArgs e)
  160. {
  161. RecentRepoInfo repo;
  162. if (GetSelectedRepo(sender, out repo))
  163. {
  164. repo.Repo.Anchor = Repository.RepositoryAnchor.LessRecent;
  165. RefreshRepos();
  166. }
  167. }
  168. private void removeAnchorToolStripMenuItem_Click(object sender, EventArgs e)
  169. {
  170. RecentRepoInfo repo;
  171. if (GetSelectedRepo(sender, out repo))
  172. {
  173. repo.Repo.Anchor = Repository.RepositoryAnchor.None;
  174. RefreshRepos();
  175. }
  176. }
  177. private void removeRecentToolStripMenuItem_Click(object sender, EventArgs e)
  178. {
  179. RecentRepoInfo repo;
  180. if (GetSelectedRepo(sender, out repo))
  181. {
  182. Repositories.RepositoryHistory.Repositories.Remove(repo.Repo);
  183. RefreshRepos();
  184. }
  185. }
  186. }
  187. }