From d4e9a82b32aed595c6d35bd16ec8d7e42afc364f Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 24 Sep 2020 15:18:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A7=D1=83=D1=82=D1=8C=20=D1=87=D1=83=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/JiraTimeBot/Configuration/Settings.cs | 8 +- src/JiraTimeBot/Job.cs | 101 +++++-- src/JiraTimeBot/RepositoryProviders/GitLog.cs | 10 +- .../Interfaces/IAllVcsProviders.cs | 3 + .../Interfaces/IRepositoryLog.cs | 5 +- .../RepositoryProviders/JiraCommitEmulator.cs | 5 +- .../RepositoryProviders/MercurialLog.cs | 6 +- .../TasksProcessors/ITasksProcessor.cs | 7 +- src/JiraTimeBot/UI/frmMain.cs | 12 +- src/JiraTimeBot/UI/frmSettings.Designer.cs | 252 +++++++++++------- src/JiraTimeBot/UI/frmSettings.cs | 4 +- 11 files changed, 285 insertions(+), 128 deletions(-) diff --git a/src/JiraTimeBot/Configuration/Settings.cs b/src/JiraTimeBot/Configuration/Settings.cs index acb56e6..ee5f29e 100644 --- a/src/JiraTimeBot/Configuration/Settings.cs +++ b/src/JiraTimeBot/Configuration/Settings.cs @@ -140,12 +140,18 @@ namespace JiraTimeBot.Configuration } private static readonly string _settingsFileName = "settings.json"; + + public string[] GetRepositories() + { + return RepositoryPath.Split(';').Select(c => c.Trim()).ToArray(); + } } public enum WorkType { Mercurial = 0, JiraLogs = 1, - GitLogs = 2 + GitLogs = 2, + CVSMixed = 3 } } diff --git a/src/JiraTimeBot/Job.cs b/src/JiraTimeBot/Job.cs index 05591dc..48e26ad 100644 --- a/src/JiraTimeBot/Job.cs +++ b/src/JiraTimeBot/Job.cs @@ -14,14 +14,17 @@ namespace JiraTimeBot { class Job { - private readonly IAllRepositoryProviders _mercurialProviders; + private readonly IAllRepositoryProviders _repositoryProviders; private readonly ITaskTimeCalculator _taskTimeDiscoverer; private readonly IJiraApi _jiraApi; private readonly ILog _log; - public Job(IAllRepositoryProviders mercurialProviders, ITaskTimeCalculator taskTimeDiscoverer, IJiraApi jiraApi, ILog log) + public Job(IAllRepositoryProviders repositoryProviders, + ITaskTimeCalculator taskTimeDiscoverer, + IJiraApi jiraApi, + ILog log) { - _mercurialProviders = mercurialProviders; + _repositoryProviders = repositoryProviders; _taskTimeDiscoverer = taskTimeDiscoverer; _jiraApi = jiraApi; _log = log; @@ -34,7 +37,10 @@ namespace JiraTimeBot return Task.Run(() => DoTheJobImpl(settings, tasksProcessor, dummyMode, cancellationToken), cancellationToken); } - private void DoTheJobImpl(Settings settings, ITasksProcessor tasksProcessor, bool dummyMode, CancellationToken cancellationToken) + private void DoTheJobImpl(Settings settings, + ITasksProcessor tasksProcessor, + bool dummyMode, + CancellationToken cancellationToken) { int daysDiff = 0; if (tasksProcessor is MeetingProcessor) @@ -73,30 +79,91 @@ namespace JiraTimeBot return Task.Run(() => SetTaskTimesForDateImpl(setForDate, realDate, settings, tasksProcessor, dummyMode, cancellationToken), cancellationToken); } - private bool SetTaskTimesForDateImpl(DateTime setForDate, DateTime realDate, Settings settings, ITasksProcessor tasksProcessor, bool dummyMode, CancellationToken cancellationToken) + private bool SetTaskTimesForDateImpl(DateTime setForDate, + DateTime realDate, + Settings settings, + ITasksProcessor tasksProcessor, + bool dummyMode, + CancellationToken cancellationToken) { - IRepositoryLog repository = _mercurialProviders.MercurialLog; - if (settings.WorkType == WorkType.JiraLogs) + List tasks = new List(); + if (tasksProcessor is MeetingProcessor) { - _log.Info("Использую Jira как источник информации."); - repository = _mercurialProviders.JiraCommitEmulator; - } - else if (settings.WorkType == WorkType.GitLogs) - { - _log.Info("Использую Git как источник информации."); - repository = _mercurialProviders.GitLog; + var provider = _repositoryProviders.JiraHistory; + tasks = provider.GetDayWorklogs(realDate, settings, cancellationToken); + return SetTaskTimesForDate(setForDate, realDate, settings, tasksProcessor, dummyMode, tasks, cancellationToken); } - List taskTimes; + switch (settings.WorkType) + { + case WorkType.Mercurial: + { + var repo = _repositoryProviders.JiraCommitEmulator; + tasks = GetTasksFromRepositories(realDate, settings, new[] {repo}); + break; + } + case WorkType.JiraLogs: + { + var repo = _repositoryProviders.JiraCommitEmulator; + tasks = GetTasksFromRepositories(realDate, settings, new[] {repo}); + break; + } + case WorkType.GitLogs: + { + var repo = _repositoryProviders.GitLog; + tasks = GetTasksFromRepositories(realDate, settings, new[] {repo}); + break; + } + case WorkType.CVSMixed: + { + var repos = new[] {_repositoryProviders.GitLog as IRepositoryLog, _repositoryProviders.MercurialLog}; + tasks = GetTasksFromRepositories(realDate, settings, repos); + break; + } + default: + { + return false; + } + } + + var result = SetTaskTimesForDate(setForDate, realDate, settings, tasksProcessor, dummyMode, tasks, cancellationToken); + return result; + } + + private List GetTasksFromRepositories(DateTime realDate, + Settings settings, + IEnumerable repositories) + { + var result = new List(); + foreach (var repositoryLog in repositories) + { + foreach (var repoPath in settings.GetRepositories()) + { + var items = repositoryLog.GetRepositoryLog(settings, repoPath, realDate); + result.AddRange(items); + } + } + return result; + } + + + private bool SetTaskTimesForDate(DateTime setForDate, + DateTime realDate, + Settings settings, + ITasksProcessor tasksProcessor, + bool dummyMode, + List taskTimes, + CancellationToken cancellationToken) + { if (!(tasksProcessor is MeetingProcessor)) { - List commits = repository.GetRepositoryLog(settings, realDate, cancellationToken); + List commits = taskTimes; ModifyWorktimeByManualLogs(setForDate, settings, cancellationToken, commits); taskTimes = _taskTimeDiscoverer.CalculateTaskTime(commits, settings, cancellationToken); } else { - var provider = _mercurialProviders.JiraHistory; + var provider = _repositoryProviders.JiraHistory; taskTimes = provider.GetDayWorklogs(realDate, settings, cancellationToken); } diff --git a/src/JiraTimeBot/RepositoryProviders/GitLog.cs b/src/JiraTimeBot/RepositoryProviders/GitLog.cs index ded511c..0e37e9f 100644 --- a/src/JiraTimeBot/RepositoryProviders/GitLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/GitLog.cs @@ -25,9 +25,9 @@ namespace JiraTimeBot.RepositoryProviders _technicalInfoSkipper = technicalInfoSkipper; } - public List GetRepositoryLog(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default) + public List GetRepositoryLog(Settings settings, string currentRepository, DateTime? date = null, CancellationToken cancellationToken = default) { - if (string.IsNullOrEmpty(settings.RepositoryPath) || !Directory.Exists(settings.RepositoryPath)) + if (string.IsNullOrEmpty(currentRepository) || !Directory.Exists(currentRepository)) { _log.Error("Папка с репо не сушествует."); return new List(); @@ -36,7 +36,7 @@ namespace JiraTimeBot.RepositoryProviders date = date.GetValueOrDefault(DateTime.Now.Date); var workTasks = new List(); - foreach (var repoDirectory in Directory.GetDirectories(settings.RepositoryPath, ".git", SearchOption.AllDirectories)) + foreach (var repoDirectory in Directory.GetDirectories(currentRepository, ".git", SearchOption.AllDirectories)) { if (cancellationToken.IsCancellationRequested) { @@ -115,7 +115,7 @@ namespace JiraTimeBot.RepositoryProviders } var regex = new Regex("[a-zA-Z0-9]{1,4}-[0-9]{1,6}"); - var branch = ListBranchesContaininingCommit(repo, commit.Sha) + var branch = ListBranchesContainsCommit(repo, commit.Sha) .Select(f => f.FriendlyName) .FirstOrDefault(f => regex.IsMatch(f)); @@ -179,7 +179,7 @@ namespace JiraTimeBot.RepositoryProviders return fileList.ToArray(); } - private IEnumerable ListBranchesContaininingCommit(Repository repo, string commitSha) + private IEnumerable ListBranchesContainsCommit(Repository repo, string commitSha) { bool directBranchHasBeenFound = false; foreach (var branch in repo.Branches) diff --git a/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs b/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs index 7904c32..8d9164d 100644 --- a/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs +++ b/src/JiraTimeBot/RepositoryProviders/Interfaces/IAllVcsProviders.cs @@ -5,8 +5,11 @@ namespace JiraTimeBot.RepositoryProviders.Interfaces public interface IAllRepositoryProviders { MercurialLog MercurialLog { get; } + GitLog GitLog { get; } + JiraCommitEmulator JiraCommitEmulator { get; } + IJiraHistory JiraHistory { get; } } } diff --git a/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs b/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs index 5516c86..d4e7521 100644 --- a/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/Interfaces/IRepositoryLog.cs @@ -8,6 +8,9 @@ namespace JiraTimeBot.RepositoryProviders.Interfaces { public interface IRepositoryLog { - List GetRepositoryLog(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default(CancellationToken)); + List GetRepositoryLog(Settings settings, + string currentRepository, + DateTime? date = null, + CancellationToken cancellationToken = default(CancellationToken)); } } \ No newline at end of file diff --git a/src/JiraTimeBot/RepositoryProviders/JiraCommitEmulator.cs b/src/JiraTimeBot/RepositoryProviders/JiraCommitEmulator.cs index 34417c6..b6ffe73 100644 --- a/src/JiraTimeBot/RepositoryProviders/JiraCommitEmulator.cs +++ b/src/JiraTimeBot/RepositoryProviders/JiraCommitEmulator.cs @@ -22,8 +22,9 @@ namespace JiraTimeBot.RepositoryProviders } public List GetRepositoryLog(Settings settings, - DateTime? date = null, - CancellationToken cancellationToken = default(CancellationToken)) + string currentRepository, + DateTime? date = null, + CancellationToken cancellationToken = default(CancellationToken)) { date = date.GetValueOrDefault(DateTime.Now.Date); var workTasks = new List(); diff --git a/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs b/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs index 3d3fe8d..94b1fde 100644 --- a/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs +++ b/src/JiraTimeBot/RepositoryProviders/MercurialLog.cs @@ -27,9 +27,9 @@ namespace JiraTimeBot.RepositoryProviders _technicalInfoSkipper = technicalInfoSkipper; } - public List GetRepositoryLog(Settings settings, DateTime? date = null, CancellationToken cancellationToken = default) + public List GetRepositoryLog(Settings settings, string currentRepository, DateTime? date = null, CancellationToken cancellationToken = default) { - if (string.IsNullOrEmpty(settings.RepositoryPath) || !Directory.Exists(settings.RepositoryPath)) + if (string.IsNullOrEmpty(currentRepository) || !Directory.Exists(currentRepository)) { _log.Error("Папка с репо не сушествует."); return new List(); @@ -38,7 +38,7 @@ namespace JiraTimeBot.RepositoryProviders date = date.GetValueOrDefault(DateTime.Now.Date); var workTasks = new List(); - foreach (var repoDirectory in Directory.GetDirectories(settings.RepositoryPath)) + foreach (var repoDirectory in Directory.GetDirectories(currentRepository)) { if (cancellationToken.IsCancellationRequested) { diff --git a/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs b/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs index 3186a87..3e0f59c 100644 --- a/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs +++ b/src/JiraTimeBot/TasksProcessors/ITasksProcessor.cs @@ -8,6 +8,11 @@ namespace JiraTimeBot.TasksProcessors { interface ITasksProcessor { - void Process(DateTime setForDate, DateTime realDate, List taskTimes, Settings settings, bool dummyMode, CancellationToken cancellationToken = default(CancellationToken)); + void Process(DateTime setForDate, + DateTime realDate, + List taskTimes, + Settings settings, + bool dummyMode, + CancellationToken cancellationToken = default); } } diff --git a/src/JiraTimeBot/UI/frmMain.cs b/src/JiraTimeBot/UI/frmMain.cs index b5fec35..572157a 100644 --- a/src/JiraTimeBot/UI/frmMain.cs +++ b/src/JiraTimeBot/UI/frmMain.cs @@ -134,8 +134,10 @@ namespace JiraTimeBot.UI using (_tokenSource = GetTokenSource()) { - await _job.DoTheJob(settings, _tasksProcessors.WorkLogTasksProcessor, txtDummyMode.Checked, - _tokenSource.Token); + await _job.DoTheJob(settings, + _tasksProcessors.WorkLogTasksProcessor, + txtDummyMode.Checked, + _tokenSource.Token); } LockUnlock(true); @@ -181,8 +183,10 @@ namespace JiraTimeBot.UI using (var tokenSource = GetTokenSource()) { - await _job.DoTheJob(settings, _tasksProcessors.WorkLogTasksProcessor, txtDummyMode.Checked, - tokenSource.Token); + await _job.DoTheJob(settings, + _tasksProcessors.WorkLogTasksProcessor, + txtDummyMode.Checked, + tokenSource.Token); } LockUnlock(true); diff --git a/src/JiraTimeBot/UI/frmSettings.Designer.cs b/src/JiraTimeBot/UI/frmSettings.Designer.cs index cf3f550..e649ea9 100644 --- a/src/JiraTimeBot/UI/frmSettings.Designer.cs +++ b/src/JiraTimeBot/UI/frmSettings.Designer.cs @@ -59,88 +59,103 @@ this.chkRemoveManuallyAddedWorklogs = new System.Windows.Forms.CheckBox(); this.tbAlternateEmail = new System.Windows.Forms.TextBox(); this.label10 = new System.Windows.Forms.Label(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(33, 175); + this.label5.Dock = System.Windows.Forms.DockStyle.Right; + this.label5.Location = new System.Drawing.Point(36, 185); this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(100, 13); + this.label5.Size = new System.Drawing.Size(100, 26); this.label5.TabIndex = 28; this.label5.Text = "Округл. времени*:"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtRoundTo // - this.txtRoundTo.Location = new System.Drawing.Point(133, 169); + this.txtRoundTo.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtRoundTo.Location = new System.Drawing.Point(142, 188); this.txtRoundTo.Name = "txtRoundTo"; - this.txtRoundTo.Size = new System.Drawing.Size(100, 20); + this.txtRoundTo.Size = new System.Drawing.Size(180, 20); this.txtRoundTo.TabIndex = 27; this.txtRoundTo.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtRoundTo_KeyPress); // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(47, 149); + this.label2.Dock = System.Windows.Forms.DockStyle.Right; + this.label2.Location = new System.Drawing.Point(54, 159); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(82, 13); + this.label2.Size = new System.Drawing.Size(82, 26); this.label2.TabIndex = 24; this.label2.Text = "Mercurial name:"; - this.label2.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtMercurialEmail // - this.txtMercurialEmail.Location = new System.Drawing.Point(133, 146); + this.txtMercurialEmail.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtMercurialEmail.Location = new System.Drawing.Point(142, 162); this.txtMercurialEmail.Name = "txtMercurialEmail"; - this.txtMercurialEmail.Size = new System.Drawing.Size(100, 20); + this.txtMercurialEmail.Size = new System.Drawing.Size(180, 20); this.txtMercurialEmail.TabIndex = 23; // // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(62, 122); + this.label1.Dock = System.Windows.Forms.DockStyle.Right; + this.label1.Location = new System.Drawing.Point(65, 133); this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(71, 13); + this.label1.Size = new System.Drawing.Size(71, 26); this.label1.TabIndex = 22; this.label1.Text = "Пароль Jira*:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtJiraPassword // - this.txtJiraPassword.Location = new System.Drawing.Point(133, 119); + this.txtJiraPassword.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtJiraPassword.Location = new System.Drawing.Point(142, 136); this.txtJiraPassword.Name = "txtJiraPassword"; this.txtJiraPassword.PasswordChar = '*'; - this.txtJiraPassword.Size = new System.Drawing.Size(100, 20); + this.txtJiraPassword.Size = new System.Drawing.Size(180, 20); this.txtJiraPassword.TabIndex = 21; // // lbl1 // this.lbl1.AutoSize = true; - this.lbl1.Location = new System.Drawing.Point(69, 96); + this.lbl1.Dock = System.Windows.Forms.DockStyle.Right; + this.lbl1.Location = new System.Drawing.Point(72, 107); this.lbl1.Name = "lbl1"; - this.lbl1.Size = new System.Drawing.Size(64, 13); + this.lbl1.Size = new System.Drawing.Size(64, 26); this.lbl1.TabIndex = 20; this.lbl1.Text = "Логин Jira*:"; + this.lbl1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtJiraLogin // - this.txtJiraLogin.Location = new System.Drawing.Point(133, 93); + this.txtJiraLogin.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtJiraLogin.Location = new System.Drawing.Point(142, 110); this.txtJiraLogin.Name = "txtJiraLogin"; - this.txtJiraLogin.Size = new System.Drawing.Size(100, 20); + this.txtJiraLogin.Size = new System.Drawing.Size(180, 20); this.txtJiraLogin.TabIndex = 19; // // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(41, 254); + this.label3.Dock = System.Windows.Forms.DockStyle.Right; + this.label3.Location = new System.Drawing.Point(45, 263); this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(91, 13); + this.label3.Size = new System.Drawing.Size(91, 26); this.label3.TabIndex = 30; this.label3.Text = "Время запуска*:"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // actTime // this.actTime.Format = System.Windows.Forms.DateTimePickerFormat.Time; - this.actTime.Location = new System.Drawing.Point(133, 250); + this.actTime.Location = new System.Drawing.Point(142, 266); this.actTime.Name = "actTime"; this.actTime.Size = new System.Drawing.Size(100, 20); this.actTime.TabIndex = 29; @@ -148,7 +163,7 @@ // chkAddComments // this.chkAddComments.AutoSize = true; - this.chkAddComments.Location = new System.Drawing.Point(65, 400); + this.chkAddComments.Location = new System.Drawing.Point(328, 30); this.chkAddComments.Name = "chkAddComments"; this.chkAddComments.Size = new System.Drawing.Size(133, 17); this.chkAddComments.TabIndex = 31; @@ -157,7 +172,7 @@ // // btnSave // - this.btnSave.Location = new System.Drawing.Point(86, 466); + this.btnSave.Location = new System.Drawing.Point(328, 344); this.btnSave.Name = "btnSave"; this.btnSave.Size = new System.Drawing.Size(75, 23); this.btnSave.TabIndex = 32; @@ -172,17 +187,18 @@ this.cboWorkType.Items.AddRange(new object[] { "Mercurial", "Jira", - "Git"}); - this.cboWorkType.Location = new System.Drawing.Point(133, 18); + "Git", + "CvsMixed"}); + this.cboWorkType.Location = new System.Drawing.Point(142, 3); this.cboWorkType.Name = "cboWorkType"; - this.cboWorkType.Size = new System.Drawing.Size(99, 21); + this.cboWorkType.Size = new System.Drawing.Size(180, 21); this.cboWorkType.TabIndex = 34; this.cboWorkType.SelectedIndexChanged += new System.EventHandler(this.cboWorkType_SelectedIndexChanged); // // label6 // this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(44, 21); + this.label6.Location = new System.Drawing.Point(3, 0); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(85, 13); this.label6.TabIndex = 35; @@ -191,39 +207,45 @@ // label7 // this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(100, 201); + this.label7.Dock = System.Windows.Forms.DockStyle.Right; + this.label7.Location = new System.Drawing.Point(107, 211); this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(29, 13); + this.label7.Size = new System.Drawing.Size(29, 26); this.label7.TabIndex = 37; this.label7.Text = "JQL:"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtJQL // - this.txtJQL.Location = new System.Drawing.Point(133, 198); + this.txtJQL.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtJQL.Location = new System.Drawing.Point(142, 214); this.txtJQL.Name = "txtJQL"; - this.txtJQL.Size = new System.Drawing.Size(99, 20); + this.txtJQL.Size = new System.Drawing.Size(180, 20); this.txtJQL.TabIndex = 36; // // label8 // this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(-2, 228); + this.label8.Dock = System.Windows.Forms.DockStyle.Right; + this.label8.Location = new System.Drawing.Point(3, 237); this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(133, 13); + this.label8.Size = new System.Drawing.Size(133, 26); this.label8.TabIndex = 39; this.label8.Text = "Задача \"учёта времени\":"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtTimeControlTask // - this.txtTimeControlTask.Location = new System.Drawing.Point(133, 224); + this.txtTimeControlTask.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtTimeControlTask.Location = new System.Drawing.Point(142, 240); this.txtTimeControlTask.Name = "txtTimeControlTask"; - this.txtTimeControlTask.Size = new System.Drawing.Size(99, 20); + this.txtTimeControlTask.Size = new System.Drawing.Size(180, 20); this.txtTimeControlTask.TabIndex = 38; // // chkAutostart // this.chkAutostart.AutoSize = true; - this.chkAutostart.Location = new System.Drawing.Point(65, 377); + this.chkAutostart.Location = new System.Drawing.Point(328, 3); this.chkAutostart.Name = "chkAutostart"; this.chkAutostart.Size = new System.Drawing.Size(96, 17); this.chkAutostart.TabIndex = 40; @@ -233,39 +255,45 @@ // lblWorkDay // this.lblWorkDay.AutoSize = true; - this.lblWorkDay.Location = new System.Drawing.Point(15, 280); + this.lblWorkDay.Dock = System.Windows.Forms.DockStyle.Right; + this.lblWorkDay.Location = new System.Drawing.Point(19, 289); this.lblWorkDay.Name = "lblWorkDay"; - this.lblWorkDay.Size = new System.Drawing.Size(117, 13); + this.lblWorkDay.Size = new System.Drawing.Size(117, 26); this.lblWorkDay.TabIndex = 42; this.lblWorkDay.Text = "Минут в рабочем дне:"; + this.lblWorkDay.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtWorkDayDuration // - this.txtWorkDayDuration.Location = new System.Drawing.Point(133, 276); + this.txtWorkDayDuration.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtWorkDayDuration.Location = new System.Drawing.Point(142, 292); this.txtWorkDayDuration.Name = "txtWorkDayDuration"; - this.txtWorkDayDuration.Size = new System.Drawing.Size(99, 20); + this.txtWorkDayDuration.Size = new System.Drawing.Size(180, 20); this.txtWorkDayDuration.TabIndex = 41; // // label9 // this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(30, 306); + this.label9.Dock = System.Windows.Forms.DockStyle.Right; + this.label9.Location = new System.Drawing.Point(35, 315); this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(101, 13); + this.label9.Size = new System.Drawing.Size(101, 26); this.label9.TabIndex = 44; this.label9.Text = "Рандомных минут:"; + this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtRandomMinutes // - this.txtRandomMinutes.Location = new System.Drawing.Point(133, 302); + this.txtRandomMinutes.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtRandomMinutes.Location = new System.Drawing.Point(142, 318); this.txtRandomMinutes.Name = "txtRandomMinutes"; - this.txtRandomMinutes.Size = new System.Drawing.Size(99, 20); + this.txtRandomMinutes.Size = new System.Drawing.Size(180, 20); this.txtRandomMinutes.TabIndex = 43; // // chkPullBeforeProcess // this.chkPullBeforeProcess.AutoSize = true; - this.chkPullBeforeProcess.Location = new System.Drawing.Point(65, 443); + this.chkPullBeforeProcess.Location = new System.Drawing.Point(328, 110); this.chkPullBeforeProcess.Name = "chkPullBeforeProcess"; this.chkPullBeforeProcess.Size = new System.Drawing.Size(83, 17); this.chkPullBeforeProcess.TabIndex = 45; @@ -274,106 +302,143 @@ // // txtRepoPath // - this.txtRepoPath.Location = new System.Drawing.Point(133, 45); + this.txtRepoPath.Location = new System.Drawing.Point(142, 30); + this.txtRepoPath.Multiline = true; this.txtRepoPath.Name = "txtRepoPath"; - this.txtRepoPath.Size = new System.Drawing.Size(100, 20); + this.txtRepoPath.Size = new System.Drawing.Size(180, 48); this.txtRepoPath.TabIndex = 25; // // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(53, 48); + this.label4.Dock = System.Windows.Forms.DockStyle.Fill; + this.label4.Location = new System.Drawing.Point(3, 27); this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(76, 13); + this.label4.Size = new System.Drawing.Size(133, 54); this.label4.TabIndex = 26; this.label4.Text = "Путь до репо:"; - this.label4.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblJiraUrl // this.lblJiraUrl.AutoSize = true; - this.lblJiraUrl.Location = new System.Drawing.Point(53, 72); + this.lblJiraUrl.Dock = System.Windows.Forms.DockStyle.Right; + this.lblJiraUrl.Location = new System.Drawing.Point(85, 81); this.lblJiraUrl.Name = "lblJiraUrl"; - this.lblJiraUrl.Size = new System.Drawing.Size(76, 13); + this.lblJiraUrl.Size = new System.Drawing.Size(51, 26); this.lblJiraUrl.TabIndex = 47; - this.lblJiraUrl.Text = "Путь до репо:"; - this.lblJiraUrl.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.lblJiraUrl.Text = "Jira URL:"; + this.lblJiraUrl.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // txtJiraUrl // - this.txtJiraUrl.Location = new System.Drawing.Point(133, 69); + this.txtJiraUrl.Dock = System.Windows.Forms.DockStyle.Fill; + this.txtJiraUrl.Location = new System.Drawing.Point(142, 84); this.txtJiraUrl.Name = "txtJiraUrl"; - this.txtJiraUrl.Size = new System.Drawing.Size(100, 20); + this.txtJiraUrl.Size = new System.Drawing.Size(180, 20); this.txtJiraUrl.TabIndex = 46; // // chkRemoveManuallyAddedWorklogs // this.chkRemoveManuallyAddedWorklogs.AutoSize = true; - this.chkRemoveManuallyAddedWorklogs.Location = new System.Drawing.Point(65, 421); + this.chkRemoveManuallyAddedWorklogs.Location = new System.Drawing.Point(328, 84); this.chkRemoveManuallyAddedWorklogs.Name = "chkRemoveManuallyAddedWorklogs"; - this.chkRemoveManuallyAddedWorklogs.Size = new System.Drawing.Size(157, 17); + this.chkRemoveManuallyAddedWorklogs.Size = new System.Drawing.Size(155, 17); this.chkRemoveManuallyAddedWorklogs.TabIndex = 48; this.chkRemoveManuallyAddedWorklogs.Text = "Удалять \"ручные записи\""; this.chkRemoveManuallyAddedWorklogs.UseVisualStyleBackColor = true; // // tbAlternateEmail // - this.tbAlternateEmail.Location = new System.Drawing.Point(133, 328); + this.tbAlternateEmail.Dock = System.Windows.Forms.DockStyle.Fill; + this.tbAlternateEmail.Location = new System.Drawing.Point(142, 344); this.tbAlternateEmail.Name = "tbAlternateEmail"; - this.tbAlternateEmail.Size = new System.Drawing.Size(100, 20); + this.tbAlternateEmail.Size = new System.Drawing.Size(180, 20); this.tbAlternateEmail.TabIndex = 49; // // label10 // this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(4, 331); + this.label10.Dock = System.Windows.Forms.DockStyle.Right; + this.label10.Location = new System.Drawing.Point(13, 341); this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(123, 13); + this.label10.Size = new System.Drawing.Size(123, 29); this.label10.TabIndex = 50; this.label10.Text = "Дополнительный Email"; + this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.AutoSize = true; + this.tableLayoutPanel1.ColumnCount = 3; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.label10, 0, 12); + this.tableLayoutPanel1.Controls.Add(this.chkPullBeforeProcess, 2, 3); + this.tableLayoutPanel1.Controls.Add(this.chkRemoveManuallyAddedWorklogs, 2, 2); + this.tableLayoutPanel1.Controls.Add(this.chkAddComments, 2, 1); + this.tableLayoutPanel1.Controls.Add(this.cboWorkType, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.chkAutostart, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.tbAlternateEmail, 1, 12); + this.tableLayoutPanel1.Controls.Add(this.label6, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.label9, 0, 11); + this.tableLayoutPanel1.Controls.Add(this.lblJiraUrl, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.txtRandomMinutes, 1, 11); + this.tableLayoutPanel1.Controls.Add(this.txtRepoPath, 1, 1); + this.tableLayoutPanel1.Controls.Add(this.lblWorkDay, 0, 10); + this.tableLayoutPanel1.Controls.Add(this.txtJiraUrl, 1, 2); + this.tableLayoutPanel1.Controls.Add(this.txtWorkDayDuration, 1, 10); + this.tableLayoutPanel1.Controls.Add(this.label4, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.label3, 0, 9); + this.tableLayoutPanel1.Controls.Add(this.label8, 0, 8); + this.tableLayoutPanel1.Controls.Add(this.actTime, 1, 9); + this.tableLayoutPanel1.Controls.Add(this.txtJiraLogin, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.txtTimeControlTask, 1, 8); + this.tableLayoutPanel1.Controls.Add(this.label7, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.txtJiraPassword, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.txtJQL, 1, 7); + this.tableLayoutPanel1.Controls.Add(this.label1, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.txtMercurialEmail, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.label2, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.label5, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.txtRoundTo, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.lbl1, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.btnSave, 2, 12); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 13; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(486, 370); + this.tableLayoutPanel1.TabIndex = 51; // // frmSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(243, 496); - this.Controls.Add(this.label10); - this.Controls.Add(this.tbAlternateEmail); - this.Controls.Add(this.chkRemoveManuallyAddedWorklogs); - this.Controls.Add(this.lblJiraUrl); - this.Controls.Add(this.txtJiraUrl); - this.Controls.Add(this.chkPullBeforeProcess); - this.Controls.Add(this.label9); - this.Controls.Add(this.txtRandomMinutes); - this.Controls.Add(this.lblWorkDay); - this.Controls.Add(this.txtWorkDayDuration); - this.Controls.Add(this.chkAutostart); - this.Controls.Add(this.label8); - this.Controls.Add(this.txtTimeControlTask); - this.Controls.Add(this.label7); - this.Controls.Add(this.txtJQL); - this.Controls.Add(this.label6); - this.Controls.Add(this.cboWorkType); - this.Controls.Add(this.btnSave); - this.Controls.Add(this.chkAddComments); - this.Controls.Add(this.label3); - this.Controls.Add(this.actTime); - this.Controls.Add(this.label5); - this.Controls.Add(this.txtRoundTo); - this.Controls.Add(this.label4); - this.Controls.Add(this.txtRepoPath); - this.Controls.Add(this.label2); - this.Controls.Add(this.txtMercurialEmail); - this.Controls.Add(this.label1); - this.Controls.Add(this.txtJiraPassword); - this.Controls.Add(this.lbl1); - this.Controls.Add(this.txtJiraLogin); + this.ClientSize = new System.Drawing.Size(486, 372); + this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.MaximizeBox = false; this.Name = "frmSettings"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Настройки"; this.Load += new System.EventHandler(this.frmSettings_Load); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); @@ -412,5 +477,6 @@ private System.Windows.Forms.CheckBox chkRemoveManuallyAddedWorklogs; private System.Windows.Forms.TextBox tbAlternateEmail; private System.Windows.Forms.Label label10; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; } } \ No newline at end of file diff --git a/src/JiraTimeBot/UI/frmSettings.cs b/src/JiraTimeBot/UI/frmSettings.cs index 8bed3d9..c30125b 100644 --- a/src/JiraTimeBot/UI/frmSettings.cs +++ b/src/JiraTimeBot/UI/frmSettings.cs @@ -107,7 +107,9 @@ namespace JiraTimeBot.UI private void cboWorkType_SelectedIndexChanged(object sender, EventArgs e) { txtJQL.Enabled = (cboWorkType.SelectedIndex == 1); - txtRepoPath.Enabled = (cboWorkType.SelectedIndex == 0 || cboWorkType.SelectedIndex == 2); + txtRepoPath.Enabled = (cboWorkType.SelectedIndex == 0 + || cboWorkType.SelectedIndex == 2 + || cboWorkType.SelectedIndex == 3); } } }