/// <summary>
		/// Moves the selected list items to a folder that is asked for by a dialog.
		/// </summary>
		/// <param name="ctrl">Project browse controller.</param>
		public static void CopySelectedListItemsToMultipleFolders(this ProjectBrowseController ctrl)
		{
			var list = ctrl.GetSelectedListItems();

			string originalFolderName = null;
			bool areDocumentsFromOneFolder = ctrl.IsProjectFolderSelected(out originalFolderName);

			var dlgDoc = new Altaxo.Gui.ProjectBrowser.CopyItemsToMultipleFolderData();
			dlgDoc.RelocateReferences = true;
			if (!Current.Gui.ShowDialog(ref dlgDoc, "Select folders to copy to", false))
				return;

			foreach (var newFolderName in dlgDoc.FoldersToCopyTo)
			{
				DocNodePathReplacementOptions relocateOptions = null;
				if (true == dlgDoc.RelocateReferences)
				{
					relocateOptions = new DocNodePathReplacementOptions();
					relocateOptions.AddPathReplacementsForAllProjectItemTypes(originalFolderName, newFolderName);
				}
				Current.Project.Folders.CopyItemsToFolder(list, newFolderName, null != relocateOptions ? relocateOptions.Visit : (DocNodeProxyReporter)null, dlgDoc.OverwriteExistingItems);
			}
		}
		/// <summary>
		/// Copy the items given in the list (tables and graphs) to a folder, which is selected by the user via a dialog box.
		/// </summary>
		/// <param name="list">List of items to delete.</param>
		/// <param name="areDocumentsFromOneFolder">If true, the list contains objects origination from only one project folder (or from subfolders of that folder). In this case the paramenter <c>originalSourceFolder</c> contains the original project folder from which the items should be copied.</param>
		/// <param name="originalSourceFolder">Original folder from which the items originate (only valid if <c>areDocumentsFromOneFolder</c> is true.</param>
		public static void CopyDocuments(IList<object> list, bool areDocumentsFromOneFolder, string originalSourceFolder)
		{
			var names = Current.Project.Folders.GetSubfoldersAsDisplayFolderNameStringList(ProjectFolder.RootFolderName, true);
			names.Insert(0, rootFolderDisplayName);
			var choices = new TextChoice(names.ToArray(), 0, true) { Description = "Choose or enter the folder to copy the items into:" };
			if (!Current.Gui.ShowDialog(ref choices, "Folder choice", false))
				return;
			string newFolderName = rootFolderDisplayName == choices.Text ? ProjectFolder.RootFolderName : ProjectFolder.ConvertDisplayFolderNameToFolderName(choices.Text);

			DocNodePathReplacementOptions relocateOptions = null;
			if (areDocumentsFromOneFolder)
			{
				var relocateData = Current.Gui.YesNoCancelMessageBox("Do you want to relocate the references in the copied plots so that they point to the destination folder?", "Question", null);
				if (null == relocateData)
					return;

				if (true == relocateData)
				{
					relocateOptions = new DocNodePathReplacementOptions();
					relocateOptions.AddPathReplacementsForAllProjectItemTypes(originalSourceFolder, newFolderName);
				}
			}

			Current.Project.Folders.CopyItemsToFolder(list, newFolderName, null != relocateOptions ? relocateOptions.Visit : (DocNodeProxyReporter)null, false);
		}