[longomatch] Cascade players' tags deletion too



commit 2feef50d930714499dad8dc6fac29f23288e3ece
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Fri Aug 26 19:16:20 2011 +0200

    Cascade players' tags deletion too

 LongoMatch/Gui/Component/TemplatesEditorBase.cs |   29 ++++++++++++++++++++++-
 LongoMatch/Store/Project.cs                     |    9 +++++++
 LongoMatch/Store/TagStore.cs                    |   10 ++++++-
 3 files changed, 45 insertions(+), 3 deletions(-)
---
diff --git a/LongoMatch/Gui/Component/TemplatesEditorBase.cs b/LongoMatch/Gui/Component/TemplatesEditorBase.cs
index 41a7da7..e1ca812 100644
--- a/LongoMatch/Gui/Component/TemplatesEditorBase.cs
+++ b/LongoMatch/Gui/Component/TemplatesEditorBase.cs
@@ -224,7 +224,6 @@ namespace LongoMatch.Gui.Component
 			Edited = true;
 		}
 
-
 		protected override void RemoveSelected (){
 			if(Project != null) {
 				MessageDialog dialog = new MessageDialog((Gtk.Window)this.Toplevel,DialogFlags.Modal,MessageType.Question,
@@ -352,5 +351,33 @@ namespace LongoMatch.Gui.Component
 			selected = new List<Player>();
 			selected.Add(player);
 		}
+		
+		protected override void RemoveSelected (){
+			if(Project != null) {
+				MessageDialog dialog = new MessageDialog((Gtk.Window)this.Toplevel,DialogFlags.Modal,MessageType.Question,
+				                                         ButtonsType.YesNo,true,
+				                                         Catalog.GetString("You are about to delete a player and all " +
+				                                         	"its tags. Do you want to proceed?"));
+				if(dialog.Run() == (int)ResponseType.Yes) {
+					try {
+						foreach(var player in selected)
+							Project.RemovePlayer (template, player);
+					} catch {
+						MessagePopup.PopupMessage(this,MessageType.Warning,
+						                          Catalog.GetString("A template needs at least one category"));
+					}
+				}
+				dialog.Destroy();
+			} else {
+				try {
+					foreach(var player in selected)
+					Template.Remove(player);
+				} catch {
+					MessagePopup.PopupMessage(this,MessageType.Warning,
+					                          Catalog.GetString("A template needs at least one category"));
+				}
+			}
+			base.RemoveSelected();
+		}
 	}
 }
diff --git a/LongoMatch/Store/Project.cs b/LongoMatch/Store/Project.cs
index 65f8cdf..ca0ae45 100644
--- a/LongoMatch/Store/Project.cs
+++ b/LongoMatch/Store/Project.cs
@@ -184,6 +184,15 @@ namespace LongoMatch.Store
 			timeline.RemoveAll(p => p.Category.UUID == category.UUID);
 		}
 		
+		public void RemovePlayer(TeamTemplate template, Player player) {
+			if(template.Count == 1)
+				throw new Exception("You can't remove the last Player");
+			template.Remove(player);
+			foreach (var play in timeline) {
+				play.Players.RemoveByPlayer(player);
+			}
+		}
+		
 		public void DeleteSubcategoryTags(Category cat, List<ISubCategory> subcategories) {
 			foreach (var play in timeline.Where(p => p.Category == cat)) {
 				foreach (var subcat in subcategories) {
diff --git a/LongoMatch/Store/TagStore.cs b/LongoMatch/Store/TagStore.cs
index 3310f52..6e442cd 100644
--- a/LongoMatch/Store/TagStore.cs
+++ b/LongoMatch/Store/TagStore.cs
@@ -27,7 +27,7 @@ namespace LongoMatch.Store
 	[Serializable]
 	public class TagsStore<T, W> where T:ITag<W>
 	{
-		private List<T> tagsList;
+		protected List<T> tagsList;
 		
 		public TagsStore(){
 			tagsList = new List<T>();
@@ -83,7 +83,13 @@ namespace LongoMatch.Store
 	public class StringTagStore: TagsStore<StringTag, string> {}
 	
 	[Serializable]
-	public class PlayersTagStore: TagsStore<PlayerTag, Player> {}
+	public class PlayersTagStore: TagsStore<PlayerTag, Player> {
+		
+		public void RemoveByPlayer(Player player) {
+			tagsList.RemoveAll(t => t.Value == player);
+		}
+		
+	}
 	
 	[Serializable]
 	public class TeamsTagStore: TagsStore<TeamTag, Team> {}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]