コード例 #1
0
		private void OnAskUserWhatToDoWithDataInWritingSystemToBeDeleted(object sender, WhatToDoWithDataInWritingSystemToBeDeletedEventArgs args)
		{
			//If no one is listening for the help button we won't offer it to the user
			bool showHelpButton = UserWantsHelpWithDeletingWritingSystems != null;
			using (var deleteDialog = new DeleteInputSystemDialog(args.WritingSystemIdToDelete, _model.WritingSystemDefinitions, showHelpButton))
			{
				deleteDialog.HelpWithDeletingWritingSystemsButtonClickedEvent += OnHelpWithDeletingWritingSystemsButtonClicked;
				var dialogResult = deleteDialog.ShowDialog();

				if (dialogResult != DialogResult.OK)
				{
					args.WhatToDo = WhatToDos.Nothing;
				}
				else
				{
					switch (deleteDialog.Choice)
					{
						case DeleteInputSystemDialog.Choices.Cancel:
							args.WhatToDo = WhatToDos.Nothing;
							break;
						case DeleteInputSystemDialog.Choices.Merge:
							args.WhatToDo = WhatToDos.Conflate;
							args.WritingSystemIdToConflateWith = deleteDialog.WritingSystemToConflateWith;
							break;
						case DeleteInputSystemDialog.Choices.Delete:
							args.WhatToDo = WhatToDos.Delete;
							break;
					}
				}
			}
		}
コード例 #2
0
		/// <summary>
		/// Deletes the currently selected writing system.
		/// </summary>
		public void DeleteCurrent()
		{
			if (!_usingRepository)
			{
				throw new InvalidOperationException("Unable to delete current selection when there is no writing system store.");
			}
			if (!HasCurrentSelection)
			{
				throw new InvalidOperationException("Unable to delete current selection when there is no current selection.");
			}

			var whatToDo = new WhatToDoWithDataInWritingSystemToBeDeletedEventArgs(CurrentDefinition);
			if(AskUserWhatToDoWithDataInWritingSystemToBeDeleted != null)
			{
				AskUserWhatToDoWithDataInWritingSystemToBeDeleted(this, whatToDo);
			}

			switch(whatToDo.WhatToDo)
			{
				case WhatToDos.Nothing:
						return;
				case WhatToDos.Conflate:
					var wsToConflateWith = whatToDo.WritingSystemIdToConflateWith;
						var okToConflateEventArgs = new AskIfOkToConflateEventArgs(CurrentDefinition.LanguageTag,
																					wsToConflateWith.LanguageTag);
						if (AskIfOkToConflateWritingSystems != null)
						{
							AskIfOkToConflateWritingSystems(this, okToConflateEventArgs);
						}
						if (!okToConflateEventArgs.CanConflate)
						{
							string message = okToConflateEventArgs.ErrorMessage ?? String.Empty;
							ErrorReport.NotifyUserOfProblem(
								String.Format("Can not conflate the input system {0} to {1}. {2}",
												CurrentDefinition.LanguageTag,
												wsToConflateWith, message));
							return;
						}
						if (CurrentDefinition != null && _writingSystemRepository.Contains(CurrentDefinition.LanguageTag))
						{
							if (wsToConflateWith != null)
							{
								_writingSystemRepository.Conflate(CurrentDefinition.LanguageTag, wsToConflateWith.LanguageTag);
							}
						}
					break;
				case WhatToDos.Delete:
					var okToDeleteEventArgs = new AskIfOkToDeleteEventArgs(CurrentDefinition.LanguageTag);
					if (AskIfOkToDeleteWritingSystems != null)
					{
						AskIfOkToDeleteWritingSystems(this, okToDeleteEventArgs);
					}
					if (!okToDeleteEventArgs.CanDelete)
					{
						string message = okToDeleteEventArgs.ErrorMessage ?? String.Empty;
						ErrorReport.NotifyUserOfProblem(
							String.Format("Can not delete the input system {0}. {1}",
											CurrentDefinition.LanguageTag, message));
						return;
					}
					// If you play around with renaming/revising writing systems, the Id assigned to
					// the writing system keeps up with the changes, but the StoreID which is the
					// real key for IWritingSystemRepository methods stays the same.  I find this
					// a questionable design decision myself, but there may be good reasons for it.
					// However, not calling _writingSystemRepository.Remove() can cause problems
					// with data getting out of sync.  (See https://jira.sil.org/browse/WS-281 for
					// an example of such problems.)
					if (CurrentDefinition != null && _writingSystemRepository.Contains(CurrentDefinition.Id))
					{
						_writingSystemRepository.Remove(CurrentDefinition.Id);
					}
					break;
			}
			// new index will be next writing system or previous if this was the last in the list
			int newIndex = (CurrentIndex == WritingSystemCount - 1) ? CurrentIndex - 1 : CurrentIndex;
			CurrentDefinition.MarkedForDeletion = true;
			_deletedWritingSystemDefinitions.Add(CurrentDefinition);
			WritingSystemDefinitions.RemoveAt(CurrentIndex);
			CurrentIndex = newIndex;
			OnAddOrDelete();
		}