[longomatch] Add support for subcategories filters



commit 66119d4e06cb6155736a9dc1b437ae5887f32472
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Sat Sep 29 15:52:16 2012 +0200

    Add support for subcategories filters

 LongoMatch.Core/Common/PlaysFilter.cs              |  100 ++++++++---
 .../Gui/Component/PlaysSelectionWidget.cs          |   22 +++
 .../Gui/TreeView/CategoriesFilterTreeView.cs       |   54 +++---
 LongoMatch.GUI/Gui/TreeView/FilterBaseView.cs      |   24 +++-
 .../Gui/TreeView/PlayersFilterTreeView.cs          |   13 +--
 ...ongoMatch.Gui.Component.PlaysSelectionWidget.cs |   83 ++++++++-
 LongoMatch.GUI/gtk-gui/gui.stetic                  |  194 +++++++++++++++-----
 LongoMatch.GUI/gtk-gui/objects.xml                 |   30 ++--
 libcesarplayer/bacon-video-widget-gst-0.10.c       |    3 -
 9 files changed, 387 insertions(+), 136 deletions(-)
---
diff --git a/LongoMatch.Core/Common/PlaysFilter.cs b/LongoMatch.Core/Common/PlaysFilter.cs
index 1559b7a..777e7a4 100644
--- a/LongoMatch.Core/Common/PlaysFilter.cs
+++ b/LongoMatch.Core/Common/PlaysFilter.cs
@@ -19,8 +19,10 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 
+using LongoMatch.Interfaces;
 using LongoMatch.Handlers;
 using LongoMatch.Store;
+using LongoMatch.Store.Templates;
 
 namespace LongoMatch.Common
 {
@@ -29,29 +31,57 @@ namespace LongoMatch.Common
 		
 		public event FilterUpdatedHandler FilterUpdated;
 		
-		List<Category> categoriesFilter;
+		bool playersFiltered, categoriesFiltered;
+		Dictionary<Category, List<SubCategoryTags>> categoriesFilter;
 		List<Player> playersFilter;
 		Project project;
 		
 		public PlaysFilter (Project project)
 		{
 			this.project = project;
-			categoriesFilter = new List<Category>();
+			categoriesFilter = new Dictionary<Category, List<SubCategoryTags>>();
 			playersFilter = new List<Player>(); 
 			ClearAll();
 		}
 		
+		public bool PlayersFilterEnabled {
+			get {
+				return  playersFiltered;
+			}
+			set {
+				playersFiltered = value;
+				if (playersFiltered)
+					Update();
+			}
+		}
+		
+		public bool CategoriesFilterEnabled {
+			get {
+				return  categoriesFiltered;
+			}
+			set {
+				categoriesFiltered = value;
+				if (categoriesFiltered)
+					Update();
+			}
+		}
+		
 		public void Update () {
 			EmitFilterUpdated();
 		}
 		
-		public void ClearPlayersFilter () {
+		public void ClearCategoriesFilter () {
 			categoriesFilter.Clear();
-			foreach (var cat in project.Categories)
-				categoriesFilter.Add(cat);
+			foreach (var cat in project.Categories) {
+				List<SubCategoryTags> list = new List<SubCategoryTags>(); 
+				foreach (var subcat in cat.SubCategories) {
+					list.Add(new SubCategoryTags{SubCategory = subcat});
+				}
+				categoriesFilter.Add(cat, list);
+			}
 		}
 		
-		public void ClearCategoriesFilter () {
+		public void ClearPlayersFilter () {
 			playersFilter.Clear();
 			foreach (var player in project.LocalTeamTemplate)
 				playersFilter.Add(player);
@@ -73,18 +103,18 @@ namespace LongoMatch.Common
 				playersFilter.Add(player);
 		}
 		
-		public void FilterCategory (Category category) {
-			categoriesFilter.Remove(category);
-		}
-		
-		public void UnFilterCategory(Category category) {
-			if (!categoriesFilter.Contains(category))
-				categoriesFilter.Add(category);
+		public void FilterSubCategory (Category cat, ISubCategory subcat, string option, bool filtered) {
+			SubCategoryTags tsub = categoriesFilter[cat].Find(s => s.SubCategory == subcat);
+			if (filtered) {
+				tsub.Add(option);
+			} else {
+				tsub.Remove(option);
+			}
 		}
 		
 		public List<Category> VisibleCategories {
 			get {
-				return categoriesFilter;
+				return categoriesFilter.Keys.ToList();
 			}
 		}
 		
@@ -95,27 +125,38 @@ namespace LongoMatch.Common
 		}
 		
 		public bool IsVisible(object o) {
-			if (o is Player) {
+			if (o is Player && PlayersFilterEnabled) {
 				return VisiblePlayers.Contains(o as Player);
-			} else if (o is Category) {
-				return VisibleCategories.Contains(o as Category);
 			} else if (o is Play) {
-				bool cat_match, player_match;
+				bool cat_match=true, player_match=true;
 				Play play = o as Play;
 				
-				cat_match = VisibleCategories.Contains(play.Category);
-				if (!cat_match)
-					return false;
+				if (CategoriesFilterEnabled) {
+					cat_match = false;
+					foreach (var subcat in categoriesFilter[play.Category]) {
+						foreach (var option in subcat) {
+							StringTag tag = new StringTag{SubCategory=subcat.SubCategory, Value=option};
+							Console.WriteLine("Trying to find match for tag " +  subcat.SubCategory.Name + " " + option);
+							if (play.Tags.Contains(tag)) {
+								foreach (StringTag t in play.Tags.Tags) {
+									Console.WriteLine(String.Format("TAG  {0} {1} equals? {2}", t.SubCategory.Name, t.Value, t == tag));
+								}
+								Console.WriteLine("Found match for tag " +  subcat.SubCategory.Name + " " + option);
+								cat_match = true;
+								break;
+							}
+						}
+						if (cat_match)
+							break;
+					}
+				}
 				
-				if (play.Players.Tags.Count == 0)
-					player_match = true;
-				else
+				if (PlayersFilterEnabled)
 					player_match = VisiblePlayers.Intersect(play.Players.GetTagsValues()).Count() != 0;
 				
 				return player_match && cat_match;
-			} else {
-				return false;
 			}
+			return true;
 		}
 		
 		void EmitFilterUpdated () {
@@ -123,5 +164,12 @@ namespace LongoMatch.Common
 				FilterUpdated ();
 		}
 	}
+	
+	class SubCategoryTags: List<string> {
+		public ISubCategory SubCategory {
+			get;
+			set;
+		}
+	}
 }
 
diff --git a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
index 168f013..b501d4f 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
@@ -39,6 +39,7 @@ namespace LongoMatch.Gui.Component
 		public event TagPlayHandler TagPlay;
 		
 		Project project;
+		PlaysFilter filter;
 		PlayersFilterTreeView playersfilter;
 		CategoriesFilterTreeView categoriesfilter;
 		
@@ -55,6 +56,7 @@ namespace LongoMatch.Gui.Component
 		
 		public void SetProject(Project project, bool isLive, PlaysFilter filter) {
 			this.project = project;
+			this.filter = filter;
 			playsList.ProjectIsLive = isLive;
 			localPlayersList.ProjectIsLive = isLive;
 			visitorPlayersList.ProjectIsLive = isLive;
@@ -181,6 +183,26 @@ namespace LongoMatch.Gui.Component
 				TagPlay (play);
 			UpdateTeamsModels();
 		}
+
+		protected void OnCategoriesFiltersbuttonClicked (object sender, System.EventArgs e)
+		{
+			if (catfiltersbutton.Active) {
+				catfiltersbutton.Label = Catalog.GetString("Disable categories filters");
+			} else {
+				catfiltersbutton.Label = Catalog.GetString("Enable categories filters");
+			}
+			filter.CategoriesFilterEnabled = catfiltersbutton.Active;
+		}
+		
+		protected void OnPlayersFiltersbuttonClicked (object sender, System.EventArgs e)
+		{
+			if (playersfiltersbutton.Active) {
+				playersfiltersbutton.Label = Catalog.GetString("Disable players filters");
+			} else {
+				playersfiltersbutton.Label = Catalog.GetString("Enable players filters");
+			}
+			filter.PlayersFilterEnabled = playersfiltersbutton.Active;
+		}
 	}
 }
 
diff --git a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
index 47ac63a..25f602a 100644
--- a/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/CategoriesFilterTreeView.cs
@@ -51,47 +51,42 @@ namespace LongoMatch.Gui.Component
 				TreeIter catIter;
 				
 				catIter = store.AppendValues(cat, filter.VisibleCategories.Contains(cat));
-				/*
 				foreach (var subcat in cat.SubCategories) {
 					TreeIter subcatIter;
 					if (subcat is TagSubCategory) {
 						subcatIter = store.AppendValues(catIter, subcat, true);
-						Console.WriteLine (subcat.Name);
 						foreach (string desc in subcat.ElementsDesc()) {
-							store.AppendValues(subcatIter, new StringObject{Value=desc}, true);
+							store.AppendValues(subcatIter, new StringObject{Value=desc, SubCategory=subcat, Category=cat}, true);
 						}
 					}
 				}
-				*/
-				
 			}
 			Model = store;
 		}
- 
-		protected override void HandleFilterCellToggled (object o, ToggledArgs args)
-		{
-			Gtk.TreeIter iter;
+		
+		protected override void UpdateSelection(TreeIter iter, bool active) {
+			TreeIter child;
 			
-			if (store.GetIterFromString(out iter, args.Path))
-			{
-				object obj = store.GetValue(iter, 0);
-				Category cat = obj as Category;
-				if (cat == null)
-					return;
-					
-				bool active = !((bool) store.GetValue(iter, 1));
+			object o = store.GetValue(iter, 0);
+			
+			if (o is StringObject) {
+				StringObject so = o as StringObject;
 				
-				if (active) {
-					filter.UnFilterCategory(cat);
-				} else {
-					filter.FilterCategory(cat);
-				}
+				filter.FilterSubCategory(so.Category, so.SubCategory, so.Value, active);
+			} else {
+				/* don't do anything here and let the children do the filtering */
+			}
+			store.SetValue(iter, 1, active);
 			
-				store.SetValue(iter, 1, active);
-				filter.Update();
+			/* Check/Uncheck all children */
+			store.IterChildren(out child, iter);
+			while (store.IterIsValid(child)) {
+				UpdateSelection(child, active);
+				store.IterNext(ref child);
 			}
+			filter.Update();
 		}
-		
+ 
 		protected override void RenderColumn (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter)
 		{
 			object obj = store.GetValue(iter, 0);
@@ -113,12 +108,21 @@ namespace LongoMatch.Gui.Component
 		}
 		
 		protected override void Select(bool select_all) {
+			TreeIter iter;
+			
+			store.GetIterFirst(out iter);
+			while (store.IterIsValid(iter)){
+				UpdateSelection(iter, select_all);
+				store.IterNext(ref iter);
+			}
 		}
 	}
 	
 	class StringObject
 	{
 		public string Value {get;set;}
+		public ISubCategory SubCategory {get;set;}
+		public Category Category {get;set;}
 	}
 }
 
diff --git a/LongoMatch.GUI/Gui/TreeView/FilterBaseView.cs b/LongoMatch.GUI/Gui/TreeView/FilterBaseView.cs
index 4e46b22..8937ba5 100644
--- a/LongoMatch.GUI/Gui/TreeView/FilterBaseView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/FilterBaseView.cs
@@ -47,6 +47,16 @@ namespace LongoMatch.Gui.Component
 			FillTree();
 		}
 		
+		public new TreeModel Model {
+			set{
+				base.Model = value;
+				store = value as TreeStore;
+			}
+			get {
+				return base.Model;
+			}
+		}
+		
 		private void PrepareTree () {
 			TreeViewColumn nameColumn = new TreeViewColumn ();
 			CellRendererText nameCell = new CellRendererText ();
@@ -101,9 +111,21 @@ namespace LongoMatch.Gui.Component
 				playersMenu.Popup();
 			return base.OnButtonPressEvent (evnt);
 		}
+		
+		protected void HandleFilterCellToggled (object o, ToggledArgs args)
+		{
+			Gtk.TreeIter iter;
+			
+			if (store.GetIterFromString(out iter, args.Path))
+			{
+				bool active = !((bool) store.GetValue(iter, 1));
+				UpdateSelection(iter, active);
+			}
+		}
+		
 
 		protected abstract void FillTree ();
-		protected abstract void HandleFilterCellToggled (object o, ToggledArgs args);
+		protected abstract void UpdateSelection (TreeIter iter, bool active); 
 		protected abstract void RenderColumn (TreeViewColumn column, CellRenderer cell, TreeModel model, TreeIter iter);
 		protected abstract void Select(bool select_all);
 	}
diff --git a/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs b/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
index e707e8f..9694852 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlayersFilterTreeView.cs
@@ -67,19 +67,8 @@ namespace LongoMatch.Gui.Component
 			Model = store;
 		}
  
-		protected override void HandleFilterCellToggled (object o, ToggledArgs args)
-		{
-			Gtk.TreeIter iter;
-			TreeStore store = Model as TreeStore;
-			
-			if (store.GetIterFromString(out iter, args.Path))
-			{
-				bool active = !((bool) store.GetValue(iter, 1));
-				UpdateSelection(iter, active);
-			}
-		}
 		
-		void UpdateSelection(TreeIter iter, bool active) {
+		protected override void UpdateSelection(TreeIter iter, bool active) {
 			TreeStore store = Model as TreeStore;
 			Player player = (Player) store.GetValue(iter, 0);
 			
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
index 7192915..68a76f7 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Component.PlaysSelectionWidget.cs
@@ -14,7 +14,10 @@ namespace LongoMatch.Gui.Component
 		private global::LongoMatch.Gui.Component.PlayersListTreeWidget visitorPlayersList;
 		private global::Gtk.Label visitorPlaysList;
 		private global::Gtk.Label label1;
+		private global::Gtk.VBox vbox2;
 		private global::Gtk.Notebook filtersnotebook;
+		private global::Gtk.ToggleButton catfiltersbutton;
+		private global::Gtk.ToggleButton playersfiltersbutton;
 		private global::Gtk.Label label2;
 		
 		protected virtual void Build ()
@@ -37,7 +40,7 @@ namespace LongoMatch.Gui.Component
 			this.notebook1 = new global::Gtk.Notebook ();
 			this.notebook1.CanFocus = true;
 			this.notebook1.Name = "notebook1";
-			this.notebook1.CurrentPage = 1;
+			this.notebook1.CurrentPage = 2;
 			this.notebook1.TabPos = ((global::Gtk.PositionType)(3));
 			// Container child notebook1.Gtk.Notebook+NotebookChild
 			this.playsList = new global::LongoMatch.Gui.Component.PlaysListTreeWidget ();
@@ -78,34 +81,96 @@ namespace LongoMatch.Gui.Component
 			// Notebook tab
 			this.label1 = new global::Gtk.Label ();
 			this.label1.Name = "label1";
-			this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("Plays Selection");
+			this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("  Plays Selection   ");
+			this.label1.Justify = ((global::Gtk.Justification)(2));
 			this.label1.Angle = 90;
 			this.notebook2.SetTabLabel (this.notebook1, this.label1);
 			this.label1.ShowAll ();
 			// Container child notebook2.Gtk.Notebook+NotebookChild
+			this.vbox2 = new global::Gtk.VBox ();
+			this.vbox2.Name = "vbox2";
+			this.vbox2.Spacing = 6;
+			// Container child vbox2.Gtk.Box+BoxChild
 			this.filtersnotebook = new global::Gtk.Notebook ();
 			this.filtersnotebook.CanFocus = true;
 			this.filtersnotebook.Name = "filtersnotebook";
 			this.filtersnotebook.CurrentPage = 0;
 			this.filtersnotebook.TabPos = ((global::Gtk.PositionType)(3));
-			this.notebook2.Add (this.filtersnotebook);
-			global::Gtk.Notebook.NotebookChild w5 = ((global::Gtk.Notebook.NotebookChild)(this.notebook2 [this.filtersnotebook]));
-			w5.Position = 1;
+			this.vbox2.Add (this.filtersnotebook);
+			global::Gtk.Box.BoxChild w5 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.filtersnotebook]));
+			w5.Position = 0;
+			// Container child vbox2.Gtk.Box+BoxChild
+			this.catfiltersbutton = new global::Gtk.ToggleButton ();
+			this.catfiltersbutton.CanFocus = true;
+			this.catfiltersbutton.Name = "catfiltersbutton";
+			this.catfiltersbutton.UseUnderline = true;
+			// Container child catfiltersbutton.Gtk.Container+ContainerChild
+			global::Gtk.Alignment w6 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+			// Container child GtkAlignment.Gtk.Container+ContainerChild
+			global::Gtk.HBox w7 = new global::Gtk.HBox ();
+			w7.Spacing = 2;
+			// Container child GtkHBox.Gtk.Container+ContainerChild
+			global::Gtk.Image w8 = new global::Gtk.Image ();
+			w8.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-find", global::Gtk.IconSize.Menu);
+			w7.Add (w8);
+			// Container child GtkHBox.Gtk.Container+ContainerChild
+			global::Gtk.Label w10 = new global::Gtk.Label ();
+			w10.LabelProp = global::Mono.Unix.Catalog.GetString ("Activate categories filters");
+			w10.UseUnderline = true;
+			w7.Add (w10);
+			w6.Add (w7);
+			this.catfiltersbutton.Add (w6);
+			this.vbox2.Add (this.catfiltersbutton);
+			global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.catfiltersbutton]));
+			w14.Position = 1;
+			w14.Expand = false;
+			w14.Fill = false;
+			// Container child vbox2.Gtk.Box+BoxChild
+			this.playersfiltersbutton = new global::Gtk.ToggleButton ();
+			this.playersfiltersbutton.CanFocus = true;
+			this.playersfiltersbutton.Name = "playersfiltersbutton";
+			this.playersfiltersbutton.UseUnderline = true;
+			// Container child playersfiltersbutton.Gtk.Container+ContainerChild
+			global::Gtk.Alignment w15 = new global::Gtk.Alignment (0.5F, 0.5F, 0F, 0F);
+			// Container child GtkAlignment.Gtk.Container+ContainerChild
+			global::Gtk.HBox w16 = new global::Gtk.HBox ();
+			w16.Spacing = 2;
+			// Container child GtkHBox.Gtk.Container+ContainerChild
+			global::Gtk.Image w17 = new global::Gtk.Image ();
+			w17.Pixbuf = global::Stetic.IconLoader.LoadIcon (this, "gtk-find", global::Gtk.IconSize.Menu);
+			w16.Add (w17);
+			// Container child GtkHBox.Gtk.Container+ContainerChild
+			global::Gtk.Label w19 = new global::Gtk.Label ();
+			w19.LabelProp = global::Mono.Unix.Catalog.GetString ("Activate players filters");
+			w19.UseUnderline = true;
+			w16.Add (w19);
+			w15.Add (w16);
+			this.playersfiltersbutton.Add (w15);
+			this.vbox2.Add (this.playersfiltersbutton);
+			global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.playersfiltersbutton]));
+			w23.Position = 2;
+			w23.Expand = false;
+			w23.Fill = false;
+			this.notebook2.Add (this.vbox2);
+			global::Gtk.Notebook.NotebookChild w24 = ((global::Gtk.Notebook.NotebookChild)(this.notebook2 [this.vbox2]));
+			w24.Position = 1;
 			// Notebook tab
 			this.label2 = new global::Gtk.Label ();
 			this.label2.Name = "label2";
-			this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("Filters");
+			this.label2.LabelProp = global::Mono.Unix.Catalog.GetString ("  Filters  ");
 			this.label2.Angle = 90;
-			this.notebook2.SetTabLabel (this.filtersnotebook, this.label2);
+			this.notebook2.SetTabLabel (this.vbox2, this.label2);
 			this.label2.ShowAll ();
 			this.hbox1.Add (this.notebook2);
-			global::Gtk.Box.BoxChild w6 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.notebook2]));
-			w6.Position = 0;
+			global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.notebook2]));
+			w25.Position = 0;
 			this.Add (this.hbox1);
 			if ((this.Child != null)) {
 				this.Child.ShowAll ();
 			}
 			this.Hide ();
+			this.catfiltersbutton.Clicked += new global::System.EventHandler (this.OnCategoriesFiltersbuttonClicked);
+			this.playersfiltersbutton.Clicked += new global::System.EventHandler (this.OnPlayersFiltersbuttonClicked);
 		}
 	}
 }
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 1fdba5c..d095a1b 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -6674,58 +6674,158 @@ Defining &lt;b&gt; Game Units &lt;/b&gt; will help you during the analysis to in
     <property name="MemberName" />
     <property name="Visible">False</property>
     <child>
-      <widget class="Gtk.Notebook" id="notebook1">
+      <widget class="Gtk.HBox" id="hbox1">
         <property name="MemberName" />
-        <property name="CanFocus">True</property>
-        <property name="CurrentPage">2</property>
-        <property name="TabPos">Bottom</property>
-        <child>
-          <widget class="LongoMatch.Gui.Component.PlaysListTreeWidget" id="playsList">
-            <property name="MemberName" />
-            <property name="Events">ButtonPressMask</property>
-          </widget>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="playsList1">
-            <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">Plays</property>
-          </widget>
-          <packing>
-            <property name="type">tab</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="localPlayersList">
-            <property name="MemberName" />
-            <property name="Events">ButtonPressMask</property>
-          </widget>
-          <packing>
-            <property name="Position">1</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="Gtk.Label" id="localPlaysList">
-            <property name="MemberName" />
-          </widget>
-          <packing>
-            <property name="type">tab</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="visitorPlayersList">
-            <property name="MemberName" />
-            <property name="Events">ButtonPressMask</property>
-          </widget>
-          <packing>
-            <property name="Position">2</property>
-          </packing>
-        </child>
+        <property name="Spacing">6</property>
         <child>
-          <widget class="Gtk.Label" id="visitorPlaysList">
+          <widget class="Gtk.Notebook" id="notebook2">
             <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="CurrentPage">1</property>
+            <property name="TabPos">Left</property>
+            <child>
+              <widget class="Gtk.Notebook" id="notebook1">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="CurrentPage">2</property>
+                <property name="TabPos">Bottom</property>
+                <child>
+                  <widget class="LongoMatch.Gui.Component.PlaysListTreeWidget" id="playsList">
+                    <property name="MemberName" />
+                    <property name="Events">ButtonPressMask</property>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="playsList1">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">Plays</property>
+                  </widget>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="localPlayersList">
+                    <property name="MemberName" />
+                    <property name="Events">ButtonPressMask</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="localPlaysList">
+                    <property name="MemberName" />
+                  </widget>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="LongoMatch.Gui.Component.PlayersListTreeWidget" id="visitorPlayersList">
+                    <property name="MemberName" />
+                    <property name="Events">ButtonPressMask</property>
+                  </widget>
+                  <packing>
+                    <property name="Position">2</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="visitorPlaysList">
+                    <property name="MemberName" />
+                  </widget>
+                  <packing>
+                    <property name="type">tab</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label1">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">  Plays Selection   </property>
+                <property name="Justify">Center</property>
+                <property name="Angle">90</property>
+              </widget>
+              <packing>
+                <property name="type">tab</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.VBox" id="vbox2">
+                <property name="MemberName" />
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Notebook" id="filtersnotebook">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="CurrentPage">0</property>
+                    <property name="TabPos">Bottom</property>
+                    <child>
+                      <placeholder />
+                    </child>
+                    <child>
+                      <placeholder />
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">True</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ToggleButton" id="catfiltersbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:gtk-find Menu</property>
+                    <property name="Label" translatable="yes">Activate categories filters</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnCategoriesFiltersbuttonClicked" />
+                  </widget>
+                  <packing>
+                    <property name="Position">1</property>
+                    <property name="AutoSize">True</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.ToggleButton" id="playersfiltersbutton">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextAndIcon</property>
+                    <property name="Icon">stock:gtk-find Menu</property>
+                    <property name="Label" translatable="yes">Activate players filters</property>
+                    <property name="UseUnderline">True</property>
+                    <signal name="Clicked" handler="OnPlayersFiltersbuttonClicked" />
+                  </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>
+              <packing>
+                <property name="Position">1</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Label" id="label2">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">  Filters  </property>
+                <property name="Angle">90</property>
+              </widget>
+              <packing>
+                <property name="type">tab</property>
+              </packing>
+            </child>
           </widget>
           <packing>
-            <property name="type">tab</property>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
           </packing>
         </child>
       </widget>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index 16cffd7..f943be7 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -201,19 +201,6 @@
       </itemgroup>
     </signals>
   </object>
-  <object type="LongoMatch.Gui.Component.PlaysSelectionWidget" palette-category="General" allow-children="false" base-type="Gtk.Bin">
-    <itemgroups />
-    <signals>
-      <itemgroup label="PlaysSelectionWidget Signals">
-        <signal name="PlaysDeleted" />
-        <signal name="PlaySelected" />
-        <signal name="PlayListNodeAdded" />
-        <signal name="SnapshotSeries" />
-        <signal name="RenderPlaylist" />
-        <signal name="TagPlay" />
-      </itemgroup>
-    </signals>
-  </object>
   <object type="LongoMatch.Gui.Component.PlayersListTreeWidget" palette-category="General" allow-children="false" base-type="Gtk.Bin">
     <itemgroups />
     <signals>
@@ -274,4 +261,21 @@
       </itemgroup>
     </signals>
   </object>
+  <object type="LongoMatch.Gui.Component.PlayersFilterTreeView" palette-category="LongoMatch" allow-children="false" base-type="Gtk.TreeView">
+    <itemgroups />
+    <signals />
+  </object>
+  <object type="LongoMatch.Gui.Component.PlaysSelectionWidget" palette-category="General" allow-children="false" base-type="Gtk.Bin">
+    <itemgroups />
+    <signals>
+      <itemgroup label="PlaysSelectionWidget Signals">
+        <signal name="PlaysDeleted" />
+        <signal name="PlaySelected" />
+        <signal name="PlayListNodeAdded" />
+        <signal name="SnapshotSeries" />
+        <signal name="RenderPlaylist" />
+        <signal name="TagPlay" />
+      </itemgroup>
+    </signals>
+  </object>
 </objects>
\ No newline at end of file
diff --git a/libcesarplayer/bacon-video-widget-gst-0.10.c b/libcesarplayer/bacon-video-widget-gst-0.10.c
index d6f5459..be259d9 100644
--- a/libcesarplayer/bacon-video-widget-gst-0.10.c
+++ b/libcesarplayer/bacon-video-widget-gst-0.10.c
@@ -28,9 +28,6 @@
  */
 
 
-
-
-
 #include <gst/gst.h>
 
 /* GStreamer Interfaces */



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