[longomatch/redesign3: 142/143] Add new quick tagging dialog



commit 61140a6d97871d0ef0ee07d75b9e93e0ebbad1b0
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Thu Jun 2 01:25:41 2011 +0200

    Add new quick tagging dialog

 LongoMatch/DB/DataBase.cs                          |    4 +-
 LongoMatch/Gui/Component/PlayersTaggerWidget.cs    |   75 ++----
 LongoMatch/Gui/Component/PlaysListTreeWidget.cs    |   10 -
 LongoMatch/Gui/Component/StringTaggerWidget.cs     |    6 +-
 LongoMatch/Gui/Component/TagsTreeWidget.cs         |    2 -
 LongoMatch/Gui/Dialog/PlayersSelectionDialog.cs    |   61 +++--
 LongoMatch/Gui/Dialog/TaggerDialog.cs              |   46 +++-
 LongoMatch/Gui/MainWindow.cs                       |   11 +-
 LongoMatch/Gui/TreeView/ListTreeViewBase.cs        |   85 +-------
 LongoMatch/Handlers/EventsManager.cs               |   50 +---
 LongoMatch/IO/CSVExport.cs                         |    4 +-
 LongoMatch/Store/Project.cs                        |    2 +-
 LongoMatch/Store/SubCategory.cs                    |    2 +
 LongoMatch/Store/Tag.cs                            |   48 ++++-
 LongoMatch/Store/Templates/TeamTemplate.cs         |    6 +-
 ...LongoMatch.Gui.Component.PlayersTaggerWidget.cs |   67 ++++--
 .../LongoMatch.Gui.Component.StringTaggerWidget.cs |    7 +-
 .../LongoMatch.Gui.Component.TaggerWidget.cs       |   19 +--
 .../gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs  |   80 ++++++-
 LongoMatch/gtk-gui/LongoMatch.Gui.MainWindow.cs    |    2 +-
 LongoMatch/gtk-gui/gui.stetic                      |  245 +++++++++++++-------
 21 files changed, 459 insertions(+), 373 deletions(-)
---
diff --git a/LongoMatch/DB/DataBase.cs b/LongoMatch/DB/DataBase.cs
index 16ea79e..1f54d34 100644
--- a/LongoMatch/DB/DataBase.cs
+++ b/LongoMatch/DB/DataBase.cs
@@ -355,7 +355,7 @@ namespace LongoMatch.DB
 			Db4oFactory.Configure().ObjectClass(typeof(Team)).CascadeOnDelete(true);
 			Db4oFactory.Configure().ObjectClass(typeof(HotKey)).CascadeOnDelete(true);
 			Db4oFactory.Configure().ObjectClass(typeof(Player)).CascadeOnDelete(true);
-			Db4oFactory.Configure().ObjectClass(typeof(Tag)).CascadeOnDelete(true);
+			Db4oFactory.Configure().ObjectClass(typeof(StringTag)).CascadeOnDelete(true);
 			Db4oFactory.Configure().ObjectClass(typeof(TeamTemplate)).CascadeOnDelete(true);
 			Db4oFactory.Configure().ObjectClass(typeof(Drawing)).CascadeOnDelete(true);
 		}
@@ -371,7 +371,7 @@ namespace LongoMatch.DB
 			Db4oFactory.Configure().ObjectClass(typeof(HotKey)).CascadeOnUpdate(true);
 			Db4oFactory.Configure().ObjectClass(typeof(Player)).CascadeOnUpdate(true);
 			Db4oFactory.Configure().ObjectClass(typeof(TeamTemplate)).CascadeOnUpdate(true);
-			Db4oFactory.Configure().ObjectClass(typeof(Tag)).CascadeOnDelete(true);
+			Db4oFactory.Configure().ObjectClass(typeof(StringTag)).CascadeOnDelete(true);
 			Db4oFactory.Configure().ObjectClass(typeof(Drawing)).CascadeOnUpdate(true);
 		}
 
diff --git a/LongoMatch/Gui/Component/PlayersTaggerWidget.cs b/LongoMatch/Gui/Component/PlayersTaggerWidget.cs
index 91f2c0b..0fc4474 100644
--- a/LongoMatch/Gui/Component/PlayersTaggerWidget.cs
+++ b/LongoMatch/Gui/Component/PlayersTaggerWidget.cs
@@ -17,69 +17,42 @@
 // 
 using System;
 using System.Collections.Generic;
-using Gtk;
+using System.Linq;
 
 using LongoMatch.Store;
 using LongoMatch.Store.Templates;
+using LongoMatch.Gui.Dialog;
 
 namespace LongoMatch.Gui.Component
 {
 	[System.ComponentModel.ToolboxItem(true)]
 	public partial class PlayersTaggerWidget : Gtk.Bin
 	{
-		TeamTemplate template;
-		Dictionary<CheckButton, Player> checkButtonsDict;
-
-		public PlayersTaggerWidget ()
-		{
+		private List<PlayerTag> players;
+		private TeamTemplate template;
+		
+		public PlayersTaggerWidget (String subcategoryName, TeamTemplate template, List<PlayerTag> players) {
 			this.Build ();
-			checkButtonsDict = new Dictionary<CheckButton, Player>();
-		}
-
-		public void SetPlayersInfo(TeamTemplate template) {
-			CheckButton button;
-			List<Player> playersList;
-			int i=0;
-
-			if(this.template != null)
-				return;
-
+			this.players = players;
 			this.template = template;
-			playersList = template.PlayingPlayersList;
-
-			table1.NColumns =(uint)(playersList.Count/10);
-			table1.NRows =(uint) 10;
-
-			foreach(Player player in playersList) {
-				button = new CheckButton();
-				button.Label = player.Number + "-" + player.Name;
-				button.Name = i.ToString();
-				button.Show();
-
-				uint row_top =(uint)(i%table1.NRows);
-				uint row_bottom = (uint) row_top+1 ;
-				uint col_left = (uint) i/table1.NRows;
-				uint col_right = (uint) col_left+1 ;
-
-				table1.Attach(button,col_left,col_right,row_top,row_bottom);
-				checkButtonsDict.Add(button, player);
-				i++;
-			}
+			CategoryLabel.Markup = "<b>" + subcategoryName + "</b>";
+			LoadTagsLabel();
 		}
-
-		public List<Player> PlayersChecked {
-			set {
-				foreach(var pair in checkButtonsDict)
-					pair.Key.Active = value.Contains(pair.Value);
-			}
-			get {
-				List<Player> playersList = new List<Player>();
-				foreach(var pair in checkButtonsDict) {
-					if(pair.Key.Active)
-						playersList.Add(pair.Value);
-				}
-				return playersList;
-			}
+		
+		private void LoadTagsLabel () {
+			var playersNames = players.Select(p => p.Value.Name).ToArray();
+			playerslabel.Text = String.Join(" ; ", playersNames);
+		}
+		
+		protected virtual void OnEditClicked (object sender, System.EventArgs e)
+		{
+			PlayersSelectionDialog dialog = new PlayersSelectionDialog();
+			dialog.TransientFor = this.Toplevel as Gtk.Window;
+			dialog.Template = template;
+			dialog.SelectedPlayers = players;
+			dialog.Run();
+			dialog.Destroy();
+			LoadTagsLabel();
 		}
 	}
 }
diff --git a/LongoMatch/Gui/Component/PlaysListTreeWidget.cs b/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
index b405a7d..059285b 100644
--- a/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
@@ -41,7 +41,6 @@ namespace LongoMatch.Gui.Component
 		public event TimeNodeDeletedHandler TimeNodeDeleted;
 		public event PlayListNodeAddedHandler PlayListNodeAdded;
 		public event SnapshotSeriesHandler SnapshotSeriesEvent;
-		public event PlayersTaggedHandler PlayersTagged;
 		public event TagPlayHandler TagPlay;
 
 		private Project project;
@@ -54,7 +53,6 @@ namespace LongoMatch.Gui.Component
 			treeview.TimeNodeDeleted += OnTimeNodeDeleted;
 			treeview.PlayListNodeAdded += OnPlayListNodeAdded;
 			treeview.SnapshotSeriesEvent += OnSnapshotSeriesEvent;
-			treeview.PlayersTagged += OnPlayersTagged;
 			treeview.TagPlay += OnTagPlay;
 		}
 
@@ -120,8 +118,6 @@ namespace LongoMatch.Gui.Component
 				if(project != null) {
 					treeview.Model = project.GetModel();
 					treeview.Colors = true;
-					treeview.VisitorTeam = project.Description.VisitorName;
-					treeview.LocalTeam = project.Description.LocalName;
 				}
 				else {
 					treeview.Model = null;
@@ -166,12 +162,6 @@ namespace LongoMatch.Gui.Component
 				SnapshotSeriesEvent(tNode);
 		}
 
-		protected virtual void OnPlayersTagged(LongoMatch.Store.Play tNode, Team team)
-		{
-			if(PlayersTagged != null)
-				PlayersTagged(tNode,team);
-		}
-
 		protected virtual void OnTagPlay(LongoMatch.Store.Play tNode)
 		{
 			if(TagPlay != null)
diff --git a/LongoMatch/Gui/Component/StringTaggerWidget.cs b/LongoMatch/Gui/Component/StringTaggerWidget.cs
index 62c44db..a5a3b49 100644
--- a/LongoMatch/Gui/Component/StringTaggerWidget.cs
+++ b/LongoMatch/Gui/Component/StringTaggerWidget.cs
@@ -63,13 +63,13 @@ namespace LongoMatch.Gui.Component
 			var button = new CheckButton(tag.Value);
 			button.Toggled += delegate(object sender, EventArgs e) {
 				if (button.Active) {
-					if (tags.Contains(tag))
-					tags.Add(tag);
+					if (!tags.Contains(tag))
+						tags.Add(tag);
 				} else
 					tags.Remove(tag);
 			};
 			dict.Add(tag, button);
-			buttonsbox.PackStart(button, true, false, 0);
+			buttonsbox.PackStart(button, false, false, 0);
 			button.ShowAll();
 		} 
 		
diff --git a/LongoMatch/Gui/Component/TagsTreeWidget.cs b/LongoMatch/Gui/Component/TagsTreeWidget.cs
index fba92a6..b291069 100644
--- a/LongoMatch/Gui/Component/TagsTreeWidget.cs
+++ b/LongoMatch/Gui/Component/TagsTreeWidget.cs
@@ -132,8 +132,6 @@ namespace LongoMatch.Gui.Component
 						model.AppendValues(play);
 
 					UpdateTagsList();
-					treeview.LocalTeam = project.Description.LocalName;
-					treeview.VisitorTeam = project.Description.VisitorName;
 				}
 			}
 		}
diff --git a/LongoMatch/Gui/Dialog/PlayersSelectionDialog.cs b/LongoMatch/Gui/Dialog/PlayersSelectionDialog.cs
index 805842d..9b8f88c 100644
--- a/LongoMatch/Gui/Dialog/PlayersSelectionDialog.cs
+++ b/LongoMatch/Gui/Dialog/PlayersSelectionDialog.cs
@@ -17,7 +17,9 @@
 //
 
 using System.Collections.Generic;
+using System.Linq;
 using Gtk;
+
 using LongoMatch.Store;
 using LongoMatch.Store.Templates;
 
@@ -28,32 +30,50 @@ namespace LongoMatch.Gui.Dialog
 	public partial class PlayersSelectionDialog : Gtk.Dialog
 	{
 		TeamTemplate template;
-		Dictionary<CheckButton, Player> checkButtonsDict;
+		List<PlayerTag> selectedPlayers;
+		Dictionary<CheckButton, PlayerTag> checkButtonsDict;
 
 		public PlayersSelectionDialog()
 		{
 			this.Build();
-			checkButtonsDict = new Dictionary<CheckButton, Player>();
+			checkButtonsDict = new Dictionary<CheckButton, PlayerTag>();
+		}
+		
+		public TeamTemplate Template {
+			set{
+				SetPlayersInfo(value);
+			}
+		}
+		
+		public List<PlayerTag> SelectedPlayers {
+			set {
+				this.selectedPlayers = value;
+				foreach(var pair in checkButtonsDict)
+					pair.Key.Active = value.Contains(pair.Value);
+			}
+			get {
+				return selectedPlayers;
+			}
 		}
 
-		public void SetPlayersInfo(TeamTemplate template) {
-			CheckButton button;
-			List<Player> playersList;
+		private void SetPlayersInfo(TeamTemplate template) {
+			List<PlayerTag> playersList;
 			int i=0;
 
 			if(this.template != null)
 				return;
 
 			this.template = template;
-			playersList = template.PlayingPlayersList;
+			playersList = template.PlayingPlayersList.Select(p => new PlayerTag {Value=p}).ToList();
 
 			table1.NColumns =(uint)(playersList.Count/10);
 			table1.NRows =(uint) 10;
 
-			foreach(Player player in playersList) {
-				button = new CheckButton();
-				button.Label = player.Number + "-" + player.Name;
+			foreach(PlayerTag player in playersList) {
+				CheckButton button = new CheckButton();
+				button.Label = player.Value.Number + "-" + player.Value.Name;
 				button.Name = i.ToString();
+				button.Toggled += OnButtonToggled;
 				button.Show();
 
 				uint row_top =(uint)(i%table1.NRows);
@@ -66,20 +86,15 @@ namespace LongoMatch.Gui.Dialog
 				i++;
 			}
 		}
-
-		public List<Player> PlayersChecked {
-			set {
-				foreach(var pair in checkButtonsDict)
-					pair.Key.Active = value.Contains(pair.Value);
-			}
-			get {
-				List<Player> playersList = new List<Player>();
-				foreach(var pair in checkButtonsDict) {
-					if(pair.Key.Active)
-						playersList.Add(pair.Value);
-				}
-				return playersList;
-			}
+		
+		protected virtual void OnButtonToggled (object sender, System.EventArgs args) {
+			CheckButton button = sender as CheckButton;
+			PlayerTag player = checkButtonsDict[button];
+			
+			if (button.Active && !selectedPlayers.Contains(player))
+				selectedPlayers.Add(player);
+			else if (!button.Active)
+				selectedPlayers.Remove(player);
 		}
 	}
 }
diff --git a/LongoMatch/Gui/Dialog/TaggerDialog.cs b/LongoMatch/Gui/Dialog/TaggerDialog.cs
index 8304f3b..92bd821 100644
--- a/LongoMatch/Gui/Dialog/TaggerDialog.cs
+++ b/LongoMatch/Gui/Dialog/TaggerDialog.cs
@@ -19,6 +19,9 @@
 using System;
 using System.Linq;
 using System.Collections.Generic;
+
+using LongoMatch.Common;
+using LongoMatch.Gui.Component;
 using LongoMatch.Store;
 using LongoMatch.Store.Templates;
 
@@ -28,24 +31,53 @@ namespace LongoMatch.Gui.Dialog
 
 	public partial class TaggerDialog : Gtk.Dialog
 	{
+		private TeamTemplate localTeamTemplate;
+		private TeamTemplate visitorTeamTemplate;
 
-		public TaggerDialog(Category cat, StringTagStore tags)
+		public TaggerDialog(Category cat, StringTagStore tags, PlayersTagStore players,
+		                    TeamTemplate localTeamTemplate, TeamTemplate visitorTeamTemplate)
 		{
 			this.Build();
-			buttonOk.Visible = false;
 			
+			this.localTeamTemplate = localTeamTemplate;
+			this.visitorTeamTemplate = visitorTeamTemplate;
+			
+			/* Iterate over all subcategories, adding a widget only for the FastTag ones */
 			foreach (var subcat in cat.SubCategories) {
-				if (subcat is TagSubCategory) {
+				if (subcat is SubCategoryTemplate) {
 					var tagcat = subcat as TagSubCategory;
-					if (!tags.Contains(tagcat))
-						continue;
-					AddSubcategory(tagcat, tags.GetTags(tagcat));
+					if (tagcat.FastTag)
+						AddTagSubcategory(tagcat, tags.GetTags(tagcat));
+				} else if (subcat is PlayerSubCategory) {
+					var tagcat = subcat as PlayerSubCategory;
+					if (tagcat.FastTag)
+						AddPlayerSubcategory(tagcat, players.GetTags(tagcat));
 				}
 			}
 		}
 		
-		public void AddSubcategory (TagSubCategory subcat, List<StringTag> tags){
+		public void AddTagSubcategory (TagSubCategory subcat, List<StringTag> tags){
+			/* the notebook starts invisible */
+			tagsnotebook.Visible = true;
 			taggerwidget1.AddSubCategory(subcat, tags);
 		}
+		
+		public void AddPlayerSubcategory (PlayerSubCategory subcat, List<PlayerTag> tags){
+			TeamTemplate template;
+			
+			/* the notebook starts invisible */
+			playersnotebook.Visible = true;
+			if (subcat.Contains(Team.LOCAL))
+				template = localTeamTemplate;
+			/* FIXME: Add support for subcategories with both teams */
+			//else if (subcat.Contains(Team.VISITOR))
+			else
+				template = visitorTeamTemplate;
+			
+			PlayersTaggerWidget widget = new PlayersTaggerWidget(subcat.Name, template, tags);
+			widget.Show();
+			playersbox.PackStart(widget, false, true, 0);
+		}
+
 	}
 }
diff --git a/LongoMatch/Gui/MainWindow.cs b/LongoMatch/Gui/MainWindow.cs
index 80f2716..904f1fb 100644
--- a/LongoMatch/Gui/MainWindow.cs
+++ b/LongoMatch/Gui/MainWindow.cs
@@ -122,16 +122,9 @@ namespace LongoMatch.Gui
 			eManager.OpenedProjectType = projectType;
 
 			/* Update tabs labels */
-			/* FIXME 1.0: Teams should have default names */
 			var desc = project.Description;
-			if(desc.VisitorName == "")
-				visitorteamlabel.Text = Catalog.GetString("Visitor Team");
-			else
-				visitorteamlabel.Text = desc.VisitorName;
-			if(desc.LocalName == "")
-				localteamlabel.Text = Catalog.GetString("Local Team");
-			else
-				localteamlabel.Text = desc.LocalName;
+			visitorteamlabel.Text = desc.VisitorName;
+			localteamlabel.Text = desc.LocalName;
 
 			if(projectType == ProjectType.FileProject) {
 				// Check if the file associated to the project exists
diff --git a/LongoMatch/Gui/TreeView/ListTreeViewBase.cs b/LongoMatch/Gui/TreeView/ListTreeViewBase.cs
index 9d02415..dddb728 100644
--- a/LongoMatch/Gui/TreeView/ListTreeViewBase.cs
+++ b/LongoMatch/Gui/TreeView/ListTreeViewBase.cs
@@ -32,10 +32,7 @@ namespace LongoMatch.Gui.Component
 	public abstract class ListTreeViewBase:TreeView
 	{
 		// Plays menu
-		protected Menu menu, teamMenu;
-		protected MenuItem local;
-		protected MenuItem visitor;
-		protected MenuItem noTeam;
+		protected Menu menu;
 		protected MenuItem tag;
 		protected MenuItem delete;
 		protected MenuItem addPLN;
@@ -45,19 +42,14 @@ namespace LongoMatch.Gui.Component
 
 		protected Gtk.CellRendererText nameCell;
 		protected Gtk.TreeViewColumn nameColumn;
-		protected String[] teams_name;
 		protected bool editing;
 		protected bool projectIsLive;
 
-		protected const string LOCAL_TEAM = "Local Team";
-		protected const string VISITOR_TEAM = "Visitor Team";
-
 		public event TimeNodeChangedHandler TimeNodeChanged;
 		public event TimeNodeSelectedHandler TimeNodeSelected;
 		public event TimeNodeDeletedHandler TimeNodeDeleted;
 		public event PlayListNodeAddedHandler PlayListNodeAdded;
 		public event SnapshotSeriesHandler SnapshotSeriesEvent;
-		public event PlayersTaggedHandler PlayersTagged;
 		public event TagPlayHandler TagPlay;
 
 		public ListTreeViewBase()
@@ -71,12 +63,6 @@ namespace LongoMatch.Gui.Component
 			ProjectIsLive = false;
 			PlayListLoaded = false;
 
-			teams_name = new String[3];
-			teams_name[(int)Team.NONE] = Catalog.GetString("None");
-			teams_name[(int)Team.LOCAL] = Catalog.GetString(LOCAL_TEAM);
-			teams_name[(int)Team.VISITOR] = Catalog.GetString(VISITOR_TEAM);
-
-
 			nameColumn = new Gtk.TreeViewColumn();
 			nameColumn.Title = "Name";
 			nameCell = new Gtk.CellRendererText();
@@ -105,29 +91,6 @@ namespace LongoMatch.Gui.Component
 			set;
 		}
 
-		public String LocalTeam {
-			set {
-				Label l = (local.Children[0] as Label);
-				if(value == "")
-					l.Text = Catalog.GetString(LOCAL_TEAM);
-				else {
-					l.Text = value;
-				}
-				teams_name[(int)Team.LOCAL] = l.Text;
-			}
-		}
-
-		public string VisitorTeam {
-			set {
-				Label l = (visitor.Children[0] as Label);
-				if(value == "")
-					l.Text = Catalog.GetString(VISITOR_TEAM);
-				else
-					l.Text = value;
-				teams_name[(int)Team.VISITOR] = l.Text;
-			}
-		}
-
 		public bool PlayListLoaded {
 			set {
 				addPLN.Sensitive = value;
@@ -142,20 +105,10 @@ namespace LongoMatch.Gui.Component
 		protected void SetMenu() {
 			MenuItem team;
 
-			teamMenu = new Menu();
-			local = new MenuItem(Catalog.GetString(LOCAL_TEAM));
-			visitor = new MenuItem(Catalog.GetString(VISITOR_TEAM));
-			noTeam = new MenuItem(Catalog.GetString("No Team"));
-			teamMenu .Append(local);
-			teamMenu .Append(visitor);
-			teamMenu .Append(noTeam);
-
 			menu = new Menu();
 
-			name = new MenuItem(Catalog.GetString("Edit"));
-			team = new MenuItem(Catalog.GetString("Team Selection"));
-			team.Submenu = teamMenu;
-			tag = new MenuItem(Catalog.GetString("Add tag"));
+			name = new MenuItem(Catalog.GetString("Edit name"));
+			tag = new MenuItem(Catalog.GetString("Edit tags"));
 			delete = new MenuItem(Catalog.GetString("Delete"));
 			deleteKeyFrame = new MenuItem(Catalog.GetString("Delete key frame"));
 			addPLN = new MenuItem(Catalog.GetString("Add to playlist"));
@@ -164,7 +117,6 @@ namespace LongoMatch.Gui.Component
 
 			menu.Append(name);
 			menu.Append(tag);
-			menu.Append(team);
 			menu.Append(addPLN);
 			menu.Append(delete);
 			menu.Append(deleteKeyFrame);
@@ -172,9 +124,6 @@ namespace LongoMatch.Gui.Component
 
 			name.Activated += OnEdit;
 			tag.Activated += OnTag;
-			local.Activated += OnTeamSelection;
-			visitor.Activated += OnTeamSelection;
-			noTeam.Activated += OnTeamSelection;
 			addPLN.Activated += OnAdded;
 			delete.Activated += OnDeleted;
 			deleteKeyFrame.Activated += OnDeleteKeyFrame;
@@ -336,24 +285,6 @@ namespace LongoMatch.Gui.Component
 			SetCursor(paths[0],  nameColumn, true);
 		}
 
-		protected void OnTeamSelection(object obj, EventArgs args) {
-			MenuItem sender = (MenuItem)obj;
-			Team team = Team.NONE;
-			if(sender == local)
-				team = Team.LOCAL;
-			else if(sender == visitor)
-				team = Team.VISITOR;
-			else if(sender == noTeam)
-				team = Team.NONE;
-
-			TreePath[] paths = Selection.GetSelectedRows();
-			for(int i=0; i<paths.Length; i++) {
-				Play tNode = (Play)GetValueFromPath(paths[i]);
-				//FIXME
-				//tNode.Team = team;
-			}
-		}
-
 		protected void OnAdded(object obj, EventArgs args) {
 			if(PlayListNodeAdded != null) {
 				TreePath[] paths = Selection.GetSelectedRows();
@@ -374,16 +305,6 @@ namespace LongoMatch.Gui.Component
 				SnapshotSeriesEvent((Play)GetValueFromPath(Selection.GetSelectedRows()[0]));
 		}
 
-		protected virtual void OnLocalPlayers(object o, EventArgs args) {
-			if(PlayersTagged != null)
-				PlayersTagged((Play)GetValueFromPath(Selection.GetSelectedRows()[0]), Team.LOCAL);
-		}
-
-		protected virtual void OnVisitorPlayers(object o, EventArgs args) {
-			if(PlayersTagged != null)
-				PlayersTagged((Play)GetValueFromPath(Selection.GetSelectedRows()[0]), Team.VISITOR);
-		}
-
 		protected abstract bool SelectFunction(TreeSelection selection, TreeModel model, TreePath path, bool selected);
 	}
 }
diff --git a/LongoMatch/Handlers/EventsManager.cs b/LongoMatch/Handlers/EventsManager.cs
index 54f0c1e..4608662 100644
--- a/LongoMatch/Handlers/EventsManager.cs
+++ b/LongoMatch/Handlers/EventsManager.cs
@@ -133,7 +133,6 @@ namespace LongoMatch
 			tagsTreeWidget.PlayListNodeAdded += OnPlayListNodeAdded;
 
 			/* Connect tags events */
-			treewidget.PlayersTagged += OnPlayersTagged;
 			treewidget.TagPlay += OnTagPlay;
 
 			/* Connect SnapshotSeries events */
@@ -195,8 +194,7 @@ namespace LongoMatch
 			else
 				miniature = null;
 			var play = openedProject.AddPlay(category, start, stop,miniature);
-			TaggerDialog tg = new TaggerDialog(category, play.Tags);
-			tg.Run();
+			LaunchPlayTagger(play);
 			treewidget.AddPlay(play);
 			tagsTreeWidget.AddPlay(play);
 			timeline.AddPlay(play);
@@ -276,6 +274,14 @@ namespace LongoMatch
 			AddNewPlay(startTime, stopTime, category);
 		}
 
+		private void LaunchPlayTagger(Play play) {
+			TaggerDialog tg = new TaggerDialog(play.Category, play.Tags, play.Players,
+			                                   openedProject.LocalTeamTemplate, openedProject.VisitorTeamTemplate);
+			tg.TransientFor = (Gtk.Window)treewidget.Toplevel;
+			tg.Run();
+			tg.Destroy();
+		}
+		
 		protected virtual void OnTimeNodeSelected(Play tNode)
 		{
 			selectedTimeNode = tNode;
@@ -439,42 +445,8 @@ namespace LongoMatch
 			dialog.Destroy();
 		}
 
-		protected virtual void OnTagPlay(Play tNode) {
-			/*TaggerDialog tagger = new TaggerDialog();
-			tagger.ProjectTags = openedProject.Tags;
-			tagger.Tags = tNode.Tags;
-			tagger.TransientFor = (Gtk.Window)player.Toplevel;
-			tagger.Run();
-			tNode.Tags = tagger.Tags;
-			foreach (Tag tag in tagger.Tags){
-				openedProject.Tags.AddTag(tag);
-			}
-			tagsTreeWidget.UpdateTagsList();
-			tagger.Destroy();*/
-		}
-
-		protected virtual void OnPlayersTagged(Play tNode, Team team) {
-			/*
-				PlayersSelectionDialog dialog = new PlayersSelectionDialog();
-				if (team == Team.LOCAL) {
-					dialog.SetPlayersInfo(openedProject.LocalTeamTemplate);
-					dialog.PlayersChecked = tNode.LocalPlayers;
-					if (dialog.Run() == (int) ResponseType.Ok) {
-						tNode.LocalPlayers = dialog.PlayersChecked;
-						localPlayersList.UpdatePlaysList(openedProject.GetLocalTeamModel());
-					}
-				}
-
-				else if (team == Team.VISITOR) {
-					dialog.SetPlayersInfo(openedProject.VisitorTeamTemplate);
-					dialog.PlayersChecked = tNode.VisitorPlayers;
-					if (dialog.Run() == (int) ResponseType.Ok) {
-						tNode.VisitorPlayers = dialog.PlayersChecked;
-						visitorPlayersList.UpdatePlaysList(openedProject.GetVisitorTeamModel());
-					}
-				}
-				dialog.Destroy();
-				*/
+		protected virtual void OnTagPlay(Play play) {
+			LaunchPlayTagger(play);
 		}
 	}
 }
diff --git a/LongoMatch/IO/CSVExport.cs b/LongoMatch/IO/CSVExport.cs
index 42a57ea..7a4fa41 100644
--- a/LongoMatch/IO/CSVExport.cs
+++ b/LongoMatch/IO/CSVExport.cs
@@ -129,7 +129,7 @@ namespace LongoMatch.IO
 
 		#region Private Methods
 
-		private void WriteCatagoriesData(TextWriter tx, Dictionary<Tag, List<Play>> tagsDic) {
+		/***private void WriteCatagoriesData(TextWriter tx, Dictionary<Tag, List<Play>> tagsDic) {
 			// Write Tags table
 			tx.WriteLine(String.Format("{0};{1};{2};{3};{4}",
 			                           Catalog.GetString("Tag"),
@@ -178,7 +178,7 @@ namespace LongoMatch.IO
 			}
 			tx.WriteLine();
 			tx.WriteLine();
-		}
+		}***/
 		#endregion
 	}
 }
diff --git a/LongoMatch/Store/Project.cs b/LongoMatch/Store/Project.cs
index c83c20d..2ddfdd2 100644
--- a/LongoMatch/Store/Project.cs
+++ b/LongoMatch/Store/Project.cs
@@ -266,7 +266,7 @@ namespace LongoMatch.Store
 			
 			foreach (var play in timeline) {
 				foreach (var player in play.Players.AllUniqueElements)
-					store.AppendValues(dict[player], new object[1] {play});
+					store.AppendValues(dict[player.Value], new object[1] {play});
 			}
 			return store;
 		}
diff --git a/LongoMatch/Store/SubCategory.cs b/LongoMatch/Store/SubCategory.cs
index de95a04..495fbcb 100644
--- a/LongoMatch/Store/SubCategory.cs
+++ b/LongoMatch/Store/SubCategory.cs
@@ -41,6 +41,7 @@ namespace LongoMatch.Store
 	[Serializable]
 	public class SubCategory<T>: List<T>, ISubCategory
 	{
+
 		public SubCategory() {
 			Name = "";
 			AllowMultiple = true;
@@ -87,6 +88,7 @@ namespace LongoMatch.Store
 		public virtual string ToMarkupString(){
 			return this.ToString();
 		}
+		
 	}
 
 	[Serializable]
diff --git a/LongoMatch/Store/Tag.cs b/LongoMatch/Store/Tag.cs
index 40afe49..0e48da5 100644
--- a/LongoMatch/Store/Tag.cs
+++ b/LongoMatch/Store/Tag.cs
@@ -75,8 +75,8 @@ namespace LongoMatch.Store
 		
 		public List<W> GetTags(T subCategory) {
 			if (!Tags.ContainsKey(subCategory)) {
-				Log.Warning("Trying to get the tags of an unknow subcategory");
-				return new List<W>();
+				Log.Debug(String.Format("Adding subcategory {0} to store", subCategory.Name));
+				Tags[subCategory] = new List<W>();
 			}
 			return Tags[subCategory];			
 		}
@@ -86,9 +86,9 @@ namespace LongoMatch.Store
 	
 	public class StringTagStore: TagsStore<TagSubCategory, StringTag> {}
 	
-	public class PlayersTagStore: TagsStore<PlayerSubCategory, Player> {}
+	public class PlayersTagStore: TagsStore<PlayerSubCategory, PlayerTag> {}
 	
-	public class TeamsTagStore: TagsStore<PlayerSubCategory, Team> {}
+	public class TeamsTagStore: TagsStore<PlayerSubCategory, TeamTag> {}
 
 	
 	[Serializable]
@@ -101,23 +101,63 @@ namespace LongoMatch.Store
 			get;
 			set;
 		}
+		
 	}
 
 	[Serializable]
 	public class StringTag: Tag<string>
 	{
 		public StringTag() {}
+		
+		public override bool Equals (object obj)
+		{
+			StringTag tag = obj as StringTag;
+            if (tag == null)
+				return false;
+			return Value.Equals (tag.Value);
+		}
+		
+		public override int GetHashCode ()
+		{
+			return Value.GetHashCode ();
+		}
 	}
 
 	[Serializable]
 	public class PlayerTag: Tag<Player>
 	{
 		public PlayerTag() {}
+		
+		public override bool Equals (object obj)
+		{
+			PlayerTag tag = obj as PlayerTag;
+            if (tag == null)
+				return false;
+			return Value.Equals (tag.Value);
+		}
+		
+		public override int GetHashCode ()
+		{
+			return Value.GetHashCode ();
+		}
 	}
 
 	[Serializable]
 	public class TeamTag: Tag<Team>
 	{
 		public TeamTag() {}
+		
+		public override bool Equals (object obj)
+		{
+			TeamTag tag = obj as TeamTag;
+            if (tag == null)
+				return false;
+			return Value.Equals (tag.Value);
+		}
+		
+		public override int GetHashCode ()
+		{
+			return Value.GetHashCode ();
+		}
 	}
 }
diff --git a/LongoMatch/Store/Templates/TeamTemplate.cs b/LongoMatch/Store/Templates/TeamTemplate.cs
index dcc0cbc..306f777 100644
--- a/LongoMatch/Store/Templates/TeamTemplate.cs
+++ b/LongoMatch/Store/Templates/TeamTemplate.cs
@@ -38,11 +38,7 @@ namespace LongoMatch.Store.Templates
 
 		public List<Player> PlayingPlayersList {
 			get {
-				var players =
-				        from player in this
-				        where player.Playing == true
-				        select player;
-				return players.ToList() as List<Player>;
+				return this.Where(p=>p.Playing).Select(p=>p).ToList();
 			}
 		}
 
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlayersTaggerWidget.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlayersTaggerWidget.cs
index 4225eaf..12e4364 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlayersTaggerWidget.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlayersTaggerWidget.cs
@@ -4,9 +4,17 @@ namespace LongoMatch.Gui.Component
 {
 	public partial class PlayersTaggerWidget
 	{
-		private global::Gtk.ScrolledWindow scrolledwindow1;
+		private global::Gtk.Frame frame1;
 
-		private global::Gtk.Table table1;
+		private global::Gtk.Alignment GtkAlignment;
+
+		private global::Gtk.HBox hbox1;
+
+		private global::Gtk.Label playerslabel;
+
+		private global::Gtk.Button editbutton;
+
+		private global::Gtk.Label CategoryLabel;
 
 		protected virtual void Build ()
 		{
@@ -15,25 +23,50 @@ namespace LongoMatch.Gui.Component
 			global::Stetic.BinContainer.Attach (this);
 			this.Name = "LongoMatch.Gui.Component.PlayersTaggerWidget";
 			// Container child LongoMatch.Gui.Component.PlayersTaggerWidget.Gtk.Container+ContainerChild
-			this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
-			this.scrolledwindow1.CanFocus = true;
-			this.scrolledwindow1.Name = "scrolledwindow1";
-			this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1));
-			// Container child scrolledwindow1.Gtk.Container+ContainerChild
-			global::Gtk.Viewport w1 = new global::Gtk.Viewport ();
-			w1.ShadowType = ((global::Gtk.ShadowType)(0));
-			// Container child GtkViewport.Gtk.Container+ContainerChild
-			this.table1 = new global::Gtk.Table (((uint)(3)), ((uint)(3)), false);
-			this.table1.Name = "table1";
-			this.table1.RowSpacing = ((uint)(6));
-			this.table1.ColumnSpacing = ((uint)(6));
-			w1.Add (this.table1);
-			this.scrolledwindow1.Add (w1);
-			this.Add (this.scrolledwindow1);
+			this.frame1 = new global::Gtk.Frame ();
+			this.frame1.Name = "frame1";
+			this.frame1.ShadowType = ((global::Gtk.ShadowType)(2));
+			// Container child frame1.Gtk.Container+ContainerChild
+			this.GtkAlignment = new global::Gtk.Alignment (0f, 0f, 1f, 1f);
+			this.GtkAlignment.Name = "GtkAlignment";
+			this.GtkAlignment.LeftPadding = ((uint)(12));
+			// Container child GtkAlignment.Gtk.Container+ContainerChild
+			this.hbox1 = new global::Gtk.HBox ();
+			this.hbox1.Name = "hbox1";
+			this.hbox1.Spacing = 6;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.playerslabel = new global::Gtk.Label ();
+			this.playerslabel.Name = "playerslabel";
+			this.playerslabel.Xalign = 0f;
+			this.playerslabel.LabelProp = global::Mono.Unix.Catalog.GetString ("None");
+			this.hbox1.Add (this.playerslabel);
+			global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.playerslabel]));
+			w1.Position = 0;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.editbutton = new global::Gtk.Button ();
+			this.editbutton.CanFocus = true;
+			this.editbutton.Name = "editbutton";
+			this.editbutton.UseStock = true;
+			this.editbutton.UseUnderline = true;
+			this.editbutton.Label = "gtk-edit";
+			this.hbox1.Add (this.editbutton);
+			global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.editbutton]));
+			w2.Position = 1;
+			w2.Expand = false;
+			w2.Fill = false;
+			this.GtkAlignment.Add (this.hbox1);
+			this.frame1.Add (this.GtkAlignment);
+			this.CategoryLabel = new global::Gtk.Label ();
+			this.CategoryLabel.Name = "CategoryLabel";
+			this.CategoryLabel.LabelProp = global::Mono.Unix.Catalog.GetString ("<b>GtkFrame</b>");
+			this.CategoryLabel.UseMarkup = true;
+			this.frame1.LabelWidget = this.CategoryLabel;
+			this.Add (this.frame1);
 			if ((this.Child != null)) {
 				this.Child.ShowAll ();
 			}
 			this.Hide ();
+			this.editbutton.Clicked += new global::System.EventHandler (this.OnEditClicked);
 		}
 	}
 }
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.StringTaggerWidget.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.StringTaggerWidget.cs
index ec3758a..64cabc4 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.StringTaggerWidget.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.StringTaggerWidget.cs
@@ -8,7 +8,7 @@ namespace LongoMatch.Gui.Component
 
 		private global::Gtk.Alignment GtkAlignment;
 
-		private global::Gtk.HButtonBox buttonsbox;
+		private global::Gtk.HBox buttonsbox;
 
 		private global::Gtk.Label titlelabel;
 
@@ -21,14 +21,15 @@ namespace LongoMatch.Gui.Component
 			// Container child LongoMatch.Gui.Component.StringTaggerWidget.Gtk.Container+ContainerChild
 			this.frame = new global::Gtk.Frame ();
 			this.frame.Name = "frame";
-			this.frame.ShadowType = ((global::Gtk.ShadowType)(0));
+			this.frame.ShadowType = ((global::Gtk.ShadowType)(2));
 			// Container child frame.Gtk.Container+ContainerChild
 			this.GtkAlignment = new global::Gtk.Alignment (0f, 0f, 1f, 1f);
 			this.GtkAlignment.Name = "GtkAlignment";
 			this.GtkAlignment.LeftPadding = ((uint)(12));
 			// Container child GtkAlignment.Gtk.Container+ContainerChild
-			this.buttonsbox = new global::Gtk.HButtonBox ();
+			this.buttonsbox = new global::Gtk.HBox ();
 			this.buttonsbox.Name = "buttonsbox";
+			this.buttonsbox.Spacing = 6;
 			this.GtkAlignment.Add (this.buttonsbox);
 			this.frame.Add (this.GtkAlignment);
 			this.titlelabel = new global::Gtk.Label ();
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs
index 0fb880e..565c401 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs
@@ -6,8 +6,6 @@ namespace LongoMatch.Gui.Component
 	{
 		private global::Gtk.VBox vbox2;
 
-		private global::Gtk.ScrolledWindow scrolledwindow1;
-
 		private global::Gtk.Table table1;
 
 		protected virtual void Build ()
@@ -21,28 +19,17 @@ namespace LongoMatch.Gui.Component
 			this.vbox2.Name = "vbox2";
 			this.vbox2.Spacing = 6;
 			// Container child vbox2.Gtk.Box+BoxChild
-			this.scrolledwindow1 = new global::Gtk.ScrolledWindow ();
-			this.scrolledwindow1.CanFocus = true;
-			this.scrolledwindow1.Name = "scrolledwindow1";
-			this.scrolledwindow1.ShadowType = ((global::Gtk.ShadowType)(1));
-			// Container child scrolledwindow1.Gtk.Container+ContainerChild
-			global::Gtk.Viewport w1 = new global::Gtk.Viewport ();
-			w1.ShadowType = ((global::Gtk.ShadowType)(0));
-			// Container child GtkViewport.Gtk.Container+ContainerChild
 			this.table1 = new global::Gtk.Table (((uint)(3)), ((uint)(3)), false);
 			this.table1.Name = "table1";
 			this.table1.RowSpacing = ((uint)(6));
 			this.table1.ColumnSpacing = ((uint)(6));
-			w1.Add (this.table1);
-			this.scrolledwindow1.Add (w1);
-			this.vbox2.Add (this.scrolledwindow1);
-			global::Gtk.Box.BoxChild w4 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.scrolledwindow1]));
-			w4.Position = 0;
+			this.vbox2.Add (this.table1);
+			global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox2[this.table1]));
+			w1.Position = 0;
 			this.Add (this.vbox2);
 			if ((this.Child != null)) {
 				this.Child.ShowAll ();
 			}
-			this.scrolledwindow1.Hide ();
 			this.Hide ();
 		}
 	}
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs
index 1b4ae12..6b3d936 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs
@@ -4,8 +4,20 @@ namespace LongoMatch.Gui.Dialog
 {
 	public partial class TaggerDialog
 	{
+		private global::Gtk.HBox hbox1;
+
+		private global::Gtk.Notebook tagsnotebook;
+
 		private global::LongoMatch.Gui.Component.TaggerWidget taggerwidget1;
 
+		private global::Gtk.Label label1;
+
+		private global::Gtk.Notebook playersnotebook;
+
+		private global::Gtk.VBox playersbox;
+
+		private global::Gtk.Label label2;
+
 		private global::Gtk.Button buttonOk;
 
 		protected virtual void Build ()
@@ -16,23 +28,65 @@ namespace LongoMatch.Gui.Dialog
 			this.Title = global::Mono.Unix.Catalog.GetString ("Tag play");
 			this.Icon = global::Stetic.IconLoader.LoadIcon (this, "longomatch", global::Gtk.IconSize.Menu);
 			this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+			this.AllowShrink = true;
+			this.Gravity = ((global::Gdk.Gravity)(5));
+			this.SkipPagerHint = true;
+			this.SkipTaskbarHint = true;
 			// Internal child LongoMatch.Gui.Dialog.TaggerDialog.VBox
 			global::Gtk.VBox w1 = this.VBox;
 			w1.Name = "dialog1_VBox";
 			w1.BorderWidth = ((uint)(2));
 			// Container child dialog1_VBox.Gtk.Box+BoxChild
+			this.hbox1 = new global::Gtk.HBox ();
+			this.hbox1.Name = "hbox1";
+			this.hbox1.Spacing = 6;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.tagsnotebook = new global::Gtk.Notebook ();
+			this.tagsnotebook.CanFocus = true;
+			this.tagsnotebook.Name = "tagsnotebook";
+			this.tagsnotebook.CurrentPage = 0;
+			// Container child tagsnotebook.Gtk.Notebook+NotebookChild
 			this.taggerwidget1 = new global::LongoMatch.Gui.Component.TaggerWidget ();
 			this.taggerwidget1.Events = ((global::Gdk.EventMask)(256));
 			this.taggerwidget1.Name = "taggerwidget1";
-			w1.Add (this.taggerwidget1);
-			global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(w1[this.taggerwidget1]));
-			w2.Position = 0;
+			this.tagsnotebook.Add (this.taggerwidget1);
+			// Notebook tab
+			this.label1 = new global::Gtk.Label ();
+			this.label1.Name = "label1";
+			this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("Tags");
+			this.tagsnotebook.SetTabLabel (this.taggerwidget1, this.label1);
+			this.label1.ShowAll ();
+			this.hbox1.Add (this.tagsnotebook);
+			global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.tagsnotebook]));
+			w3.Position = 0;
+			// Container child hbox1.Gtk.Box+BoxChild
+			this.playersnotebook = new global::Gtk.Notebook ();
+			this.playersnotebook.CanFocus = true;
+			this.playersnotebook.Name = "playersnotebook";
+			this.playersnotebook.CurrentPage = 0;
+			// Container child playersnotebook.Gtk.Notebook+NotebookChild
+			this.playersbox = new global::Gtk.VBox ();
+			this.playersbox.Name = "playersbox";
+			this.playersbox.Spacing = 6;
+			this.playersnotebook.Add (this.playersbox);
+			// Notebook tab
+			this.label2 = new global::Gtk.Label ();
+			this.label2.Name = "label2";
+			this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("Players");
+			this.playersnotebook.SetTabLabel (this.playersbox, this.label2);
+			this.label2.ShowAll ();
+			this.hbox1.Add (this.playersnotebook);
+			global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.hbox1[this.playersnotebook]));
+			w5.Position = 1;
+			w1.Add (this.hbox1);
+			global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(w1[this.hbox1]));
+			w6.Position = 0;
 			// Internal child LongoMatch.Gui.Dialog.TaggerDialog.ActionArea
-			global::Gtk.HButtonBox w3 = this.ActionArea;
-			w3.Name = "dialog1_ActionArea";
-			w3.Spacing = 6;
-			w3.BorderWidth = ((uint)(5));
-			w3.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
+			global::Gtk.HButtonBox w7 = this.ActionArea;
+			w7.Name = "dialog1_ActionArea";
+			w7.Spacing = 6;
+			w7.BorderWidth = ((uint)(5));
+			w7.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
 			// Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
 			this.buttonOk = new global::Gtk.Button ();
 			this.buttonOk.CanDefault = true;
@@ -42,14 +96,16 @@ namespace LongoMatch.Gui.Dialog
 			this.buttonOk.UseUnderline = true;
 			this.buttonOk.Label = "gtk-ok";
 			this.AddActionWidget (this.buttonOk, -5);
-			global::Gtk.ButtonBox.ButtonBoxChild w4 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonOk]));
-			w4.Expand = false;
-			w4.Fill = false;
+			global::Gtk.ButtonBox.ButtonBoxChild w8 = ((global::Gtk.ButtonBox.ButtonBoxChild)(w7[this.buttonOk]));
+			w8.Expand = false;
+			w8.Fill = false;
 			if ((this.Child != null)) {
 				this.Child.ShowAll ();
 			}
-			this.DefaultWidth = 426;
+			this.DefaultWidth = 511;
 			this.DefaultHeight = 267;
+			this.tagsnotebook.Hide ();
+			this.playersnotebook.Hide ();
 			this.Show ();
 		}
 	}
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.MainWindow.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.MainWindow.cs
index b102b4b..443d56c 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.MainWindow.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.MainWindow.cs
@@ -233,7 +233,7 @@ namespace LongoMatch.Gui
 			this.notebook1 = new global::Gtk.Notebook ();
 			this.notebook1.CanFocus = true;
 			this.notebook1.Name = "notebook1";
-			this.notebook1.CurrentPage = 0;
+			this.notebook1.CurrentPage = 1;
 			this.notebook1.TabPos = ((global::Gtk.PositionType)(3));
 			// Container child notebook1.Gtk.Notebook+NotebookChild
 			this.treewidget1 = new global::LongoMatch.Gui.Component.PlaysListTreeWidget ();
diff --git a/LongoMatch/gtk-gui/gui.stetic b/LongoMatch/gtk-gui/gui.stetic
index afbe107..3656023 100644
--- a/LongoMatch/gtk-gui/gui.stetic
+++ b/LongoMatch/gtk-gui/gui.stetic
@@ -5402,52 +5402,38 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
         <property name="MemberName" />
         <property name="Spacing">6</property>
         <child>
-          <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+          <widget class="Gtk.Table" id="table1">
             <property name="MemberName" />
-            <property name="Visible">False</property>
-            <property name="CanFocus">True</property>
-            <property name="ShadowType">In</property>
+            <property name="NRows">3</property>
+            <property name="NColumns">3</property>
+            <property name="RowSpacing">6</property>
+            <property name="ColumnSpacing">6</property>
             <child>
-              <widget class="Gtk.Viewport" id="GtkViewport">
-                <property name="MemberName" />
-                <property name="ShadowType">None</property>
-                <child>
-                  <widget class="Gtk.Table" id="table1">
-                    <property name="MemberName" />
-                    <property name="NRows">3</property>
-                    <property name="NColumns">3</property>
-                    <property name="RowSpacing">6</property>
-                    <property name="ColumnSpacing">6</property>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                    <child>
-                      <placeholder />
-                    </child>
-                  </widget>
-                </child>
-              </widget>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
+            </child>
+            <child>
+              <placeholder />
             </child>
           </widget>
           <packing>
@@ -5458,7 +5444,7 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.TaggerDialog" design-size="426 267">
+  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.TaggerDialog" design-size="620 267">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Tag play</property>
     <property name="Icon">stock:longomatch Menu</property>
@@ -5470,13 +5456,74 @@ Show-&gt;&lt;b&gt; S&lt;/b&gt;
         <property name="MemberName" />
         <property name="BorderWidth">2</property>
         <child>
-          <widget class="LongoMatch.Gui.Component.TaggerWidget" id="taggerwidget1">
+          <widget class="Gtk.HBox" id="hbox1">
             <property name="MemberName" />
-            <property name="Events">ButtonPressMask</property>
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.Notebook" id="notebook1">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="CurrentPage">0</property>
+                <child>
+                  <widget class="LongoMatch.Gui.Component.TaggerWidget" id="taggerwidget1">
+                    <property name="MemberName" />
+                    <property name="Events">ButtonPressMask</property>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label1">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">page1</property>
+                  </widget>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Notebook" id="notebook2">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="CurrentPage">0</property>
+                <child>
+                  <widget class="Gtk.VBox" id="playersbox">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <placeholder />
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label2">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">page1</property>
+                  </widget>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
           </widget>
           <packing>
             <property name="Position">0</property>
-            <property name="AutoSize">False</property>
+            <property name="AutoSize">True</property>
           </packing>
         </child>
       </widget>
@@ -6264,66 +6311,87 @@ You can continue with the current capture, cancel it or save your project.
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlayersTaggerWidget" design-size="300 300">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.PlayersTaggerWidget" design-size="300 40">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
-      <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+      <widget class="Gtk.Frame" id="frame1">
         <property name="MemberName" />
-        <property name="CanFocus">True</property>
-        <property name="ShadowType">In</property>
+        <property name="ShadowType">Out</property>
         <child>
-          <widget class="Gtk.Viewport" id="GtkViewport">
+          <widget class="Gtk.Alignment" id="GtkAlignment">
             <property name="MemberName" />
-            <property name="ShadowType">None</property>
+            <property name="Xalign">0</property>
+            <property name="Yalign">0</property>
+            <property name="LeftPadding">12</property>
             <child>
-              <widget class="Gtk.Table" id="table1">
+              <widget class="Gtk.HBox" id="hbox1">
                 <property name="MemberName" />
-                <property name="NRows">3</property>
-                <property name="NColumns">3</property>
-                <property name="RowSpacing">6</property>
-                <property name="ColumnSpacing">6</property>
-                <child>
-                  <placeholder />
-                </child>
-                <child>
-                  <placeholder />
-                </child>
-                <child>
-                  <placeholder />
-                </child>
-                <child>
-                  <placeholder />
-                </child>
-                <child>
-                  <placeholder />
-                </child>
-                <child>
-                  <placeholder />
-                </child>
+                <property name="Spacing">6</property>
                 <child>
-                  <placeholder />
+                  <widget class="Gtk.Label" id="label2">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">Players:</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
                 </child>
                 <child>
-                  <placeholder />
+                  <widget class="Gtk.Label" id="playerslabel">
+                    <property name="MemberName" />
+                    <property name="Xalign">0</property>
+                    <property name="LabelProp" translatable="yes">None</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
                 </child>
                 <child>
-                  <placeholder />
+                  <widget class="Gtk.Button" id="button5">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="UseStock">True</property>
+                    <property name="Type">StockItem</property>
+                    <property name="StockId">gtk-edit</property>
+                    <property name="label">gtk-edit</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
                 </child>
               </widget>
             </child>
           </widget>
         </child>
+        <child>
+          <widget class="Gtk.Label" id="CategoryLabel">
+            <property name="MemberName" />
+            <property name="LabelProp" translatable="yes">&lt;b&gt;GtkFrame&lt;/b&gt;</property>
+            <property name="UseMarkup">True</property>
+          </widget>
+          <packing>
+            <property name="type">label_item</property>
+          </packing>
+        </child>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.StringTaggerWidget" design-size="300 98">
+  <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.StringTaggerWidget" design-size="300 33">
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
       <widget class="Gtk.Frame" id="frame">
         <property name="MemberName" />
-        <property name="ShadowType">None</property>
+        <property name="ShadowType">Out</property>
         <child>
           <widget class="Gtk.Alignment" id="GtkAlignment">
             <property name="MemberName" />
@@ -6331,9 +6399,18 @@ You can continue with the current capture, cancel it or save your project.
             <property name="Yalign">0</property>
             <property name="LeftPadding">12</property>
             <child>
-              <widget class="Gtk.HButtonBox" id="buttonsbox">
+              <widget class="Gtk.HBox" id="buttonsbox">
                 <property name="MemberName" />
-                <property name="Size">0</property>
+                <property name="Spacing">6</property>
+                <child>
+                  <placeholder />
+                </child>
+                <child>
+                  <placeholder />
+                </child>
+                <child>
+                  <placeholder />
+                </child>
               </widget>
             </child>
           </widget>



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