private HelperControls.FolderPathEntry AddFolderControl() { //Just use the last one if it is empty anyway if (InnerControlContainer.Controls.Count > 0) { HelperControls.FolderPathEntry lastEntry = (HelperControls.FolderPathEntry)InnerControlContainer.Controls[0]; if (lastEntry.SelectedPath.Trim().Length == 0) { return(lastEntry); } } try { InnerControlContainer.SuspendLayout(); HelperControls.FolderPathEntry entry = new Duplicati.GUI.HelperControls.FolderPathEntry(); entry.FolderBrowserDialog = folderBrowserDialog; entry.SelectedPathChanged += new EventHandler(FolderPathEntry_SelectedPathChanged); entry.DeleteButton_Clicked += new EventHandler(FolderPathEntry_DeleteButtonClicked); entry.SelectedPathLeave += new EventHandler(FolderPathEntry_Leave); entry.Height = entry.MinimumSize.Height + 2; InnerControlContainer.Controls.Add(entry); entry.Dock = DockStyle.Top; entry.BringToFront(); return(entry); } finally { InnerControlContainer.ResumeLayout(); } }
void FolderPathEntry_DeleteButtonClicked(object sender, EventArgs e) { HelperControls.FolderPathEntry entry = (HelperControls.FolderPathEntry)sender; InnerControlContainer.Controls.Remove(entry); entry.SelectedPathChanged -= new EventHandler(FolderPathEntry_SelectedPathChanged); entry.DeleteButton_Clicked -= new EventHandler(FolderPathEntry_DeleteButtonClicked); entry.SelectedPathLeave -= new EventHandler(FolderPathEntry_Leave); EnsureLastFolderEntryIsEmpty(); }
/// <summary> /// Helper function that ensures that the last folder entry is always empty so the user may enter text in it /// </summary> private void EnsureLastFolderEntryIsEmpty() { if (InnerControlContainer.Controls.Count == 0) { AddFolderControl().Focus(); } else { HelperControls.FolderPathEntry lastEntry = (HelperControls.FolderPathEntry)InnerControlContainer.Controls[0]; if (lastEntry.SelectedPath.Trim().Length == 0) { //If we have a duplicate empty, remove the non-focused one if (InnerControlContainer.Controls.Count > 1 && ((HelperControls.FolderPathEntry)InnerControlContainer.Controls[1]).SelectedPath.Trim().Length == 0) { FolderPathEntry_DeleteButtonClicked(InnerControlContainer.Controls[(lastEntry.Focused ? 0 : 1)], null); } } else { AddFolderControl(); } } }
private void FolderPathEntry_Leave(object sender, EventArgs e) { lock (m_lock) { HelperControls.FolderPathEntry entry = (HelperControls.FolderPathEntry)sender; string path = entry.SelectedPath.Trim(); if (path.Length > 0 && !m_sizes.ContainsKey(path)) { StartCalculator(); m_calculator.AddTask(path); m_calculator_CompletedWork(null, null); } else if (entry.SelectedPath.Trim() == "") { entry.FolderSize = ""; } else if (m_sizes.ContainsKey(path)) { m_calculator_CompletedWork(null, null); } } }