[longomatch] Added support for tagging plays
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [longomatch] Added support for tagging plays
- Date: Sun, 20 Dec 2009 22:25:32 +0000 (UTC)
commit 0f462ea986f9486bc38dc5979974794b0ff74f69
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Sun Dec 20 22:50:02 2009 +0100
Added support for tagging plays
LongoMatch.mds | 2 +-
LongoMatch/DB/Project.cs | 20 +++-
LongoMatch/DB/TagsTemplate.cs | 13 ++-
LongoMatch/Gui/Component/PlaysListTreeWidget.cs | 8 +
LongoMatch/Gui/Component/TaggerWidget.cs | 145 +++++++++++++++++
.../{DB/Tag.cs => Gui/Dialog/TaggerDialog.cs} | 66 ++++-----
LongoMatch/Gui/TreeView/PlaysTreeView.cs | 32 +++-
LongoMatch/Handlers/EventsManager.cs | 19 ++-
LongoMatch/Handlers/Handlers.cs | 9 +-
LongoMatch/LongoMatch.mdp | 6 +-
LongoMatch/Makefile.am | 6 +-
LongoMatch/Time/MediaTimeNode.cs | 43 +++++
LongoMatch/{DB => Time}/Tag.cs | 12 +-
...LongoMatch.Gui.Component.PlaysListTreeWidget.cs | 1 +
.../LongoMatch.Gui.Component.TaggerWidget.cs | 120 ++++++++++++++
.../gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs | 65 ++++++++
LongoMatch/gtk-gui/gui.stetic | 170 ++++++++++++++++++++
LongoMatch/gtk-gui/objects.xml | 52 ++++---
18 files changed, 700 insertions(+), 89 deletions(-)
---
diff --git a/LongoMatch.mds b/LongoMatch.mds
index e8d480d..0fbac54 100644
--- a/LongoMatch.mds
+++ b/LongoMatch.mds
@@ -1,7 +1,7 @@
<Combine fileversion="2.0" description="LongoMatch : The Digital Coach" outputpath="build/bin/" releaseversion="0.9.0" name="LongoMatch">
<Policies>
<DotNetNamingPolicy DirectoryNamespaceAssociation="PrefixedHierarchical" ResourceNamePolicy="FileFormatDefault" />
- <StandardHeader inheritsSet="GPLv2License" />
+ <StandardHeader Text="
 Copyright (C) ${Year} ${CopyrightHolder}

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
" inheritsSet="MITX11License" />
<VersionControlPolicy inheritsSet="Mono" />
<ChangeLogPolicy UpdateMode="None" inheritsSet="Mono">
<MessageStyle LineAlign="0" />
diff --git a/LongoMatch/DB/Project.cs b/LongoMatch/DB/Project.cs
index 1610f93..a8f6176 100644
--- a/LongoMatch/DB/Project.cs
+++ b/LongoMatch/DB/Project.cs
@@ -70,6 +70,8 @@ namespace LongoMatch.DB
private TeamTemplate visitorTeamTemplate;
private TeamTemplate localTeamTemplate;
+
+ private TagsTemplate tagsTemplate;
//Keep this fiel for DB retrocompatibility
private List<MediaTimeNode>[] dataSectionArray;
@@ -131,7 +133,8 @@ namespace LongoMatch.DB
for (int i=0;i<sections.Count;i++) {
sectionPlaysList.Add(new List<MediaTimeNode>());
}
-
+
+ this.tagsTemplate = new TagsTemplate();
this.Title = System.IO.Path.GetFileNameWithoutExtension(this.file.FilePath);
}
#endregion
@@ -280,6 +283,21 @@ namespace LongoMatch.DB
visitorTeamTemplate=value;
}
}
+
+ /// <value>
+ /// Template with the project tags
+ /// </value>
+ public TagsTemplate Tags{
+ //Since 0.15.5
+ get{
+ if (tagsTemplate == null)
+ tagsTemplate = new TagsTemplate();
+ return tagsTemplate;
+ }
+ set{
+ tagsTemplate = value;
+ }
+ }
#endregion
#region Public Methods
diff --git a/LongoMatch/DB/TagsTemplate.cs b/LongoMatch/DB/TagsTemplate.cs
index a083b4c..fae3a41 100644
--- a/LongoMatch/DB/TagsTemplate.cs
+++ b/LongoMatch/DB/TagsTemplate.cs
@@ -18,6 +18,7 @@
using System;
using System.Collections.Generic;
+using LongoMatch.TimeNodes;
namespace LongoMatch.DB
{
@@ -31,7 +32,7 @@ namespace LongoMatch.DB
tagsList = new List<Tag>();
}
- public bool AddTag(Tag tag) {
+ public bool AddTag(Tag tag) {
if (tagsList.Contains(tag))
return false;
else
@@ -39,8 +40,16 @@ namespace LongoMatch.DB
return true;
}
- public bool removeTag(Tag tag) {
+ public bool RemoveTag (Tag tag) {
return tagsList.Remove(tag);
}
+
+ public Tag GetTag(int index){
+ return tagsList[index];
+ }
+
+ public int Count (){
+ return tagsList.Count;
+ }
}
}
diff --git a/LongoMatch/Gui/Component/PlaysListTreeWidget.cs b/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
index 8dacc11..d6ab752 100644
--- a/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch/Gui/Component/PlaysListTreeWidget.cs
@@ -40,6 +40,8 @@ namespace LongoMatch.Gui.Component
public event PlayListNodeAddedHandler PlayListNodeAdded;
public event SnapshotSeriesHandler SnapshotSeriesEvent;
public event PlayersTaggedHandler PlayersTagged;
+ public event TagPlayHandler TagPlay;
+
private Project project;
@@ -137,5 +139,11 @@ namespace LongoMatch.Gui.Component
if (PlayersTagged != null)
PlayersTagged(tNode,team);
}
+
+ protected virtual void OnTreeviewTagPlay (LongoMatch.TimeNodes.MediaTimeNode tNode)
+ {
+ if (TagPlay != null)
+ TagPlay(tNode);
+ }
}
}
diff --git a/LongoMatch/Gui/Component/TaggerWidget.cs b/LongoMatch/Gui/Component/TaggerWidget.cs
new file mode 100644
index 0000000..13cb1fb
--- /dev/null
+++ b/LongoMatch/Gui/Component/TaggerWidget.cs
@@ -0,0 +1,145 @@
+//
+// Copyright (C) 2009 Andoni Morales Alastruey
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+
+using System;
+using System.Collections.Generic;
+using Gtk;
+using LongoMatch.TimeNodes;
+using LongoMatch.DB;
+using LongoMatch.Handlers;
+
+namespace LongoMatch.Gui.Component
+{
+
+
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class TaggerWidget : Gtk.Bin
+ {
+ private Dictionary<Tag, CheckButton> tagsDict;
+ private List<Tag> tagsList;
+ private MediaTimeNode play;
+
+
+ public TaggerWidget()
+ {
+ this.Build();
+ tagsDict = new Dictionary<Tag, CheckButton>();
+ tagsList = new List<Tag>();
+ table1.NColumns = 5;
+ play = null;
+ }
+
+ public MediaTimeNode Play{
+ set{
+ play = value;
+ }
+ }
+
+ public TagsTemplate ProjectsTags{
+ set{
+ int tagsCount = value.Count();
+ scrolledwindow1.Visible = tagsCount > 0;
+ label1.Visible = !(tagsCount > 0);
+
+ tagsDict.Clear();
+
+ foreach (Widget w in table1.AllChildren){
+ w.Unrealize();
+ table1.Remove(w);
+ }
+
+ for(int i=0;i<tagsCount;i++){
+ AddTagWidget(value.GetTag(i), false);
+ }
+ }
+ }
+
+ public List<Tag> Tags{
+ set{
+ CheckButton button = null;
+ foreach (Tag tag in value){
+ if (tagsDict.TryGetValue(tag, out button))
+ button.Active = true;
+ }
+ }
+ get{
+ List<Tag> list = new List<Tag>();
+ foreach (KeyValuePair<Tag, CheckButton> pair in tagsDict){
+ if (pair.Value.Active)
+ list.Add(pair.Key);
+ }
+ return list;
+ }
+ }
+
+ private void AddTag(string text, bool check){
+ Tag tag = new Tag(text);
+ if (tagsDict.ContainsKey(tag))
+ return;
+ AddTagWidget(tag, check);
+ }
+
+ private void AddTagWidget(Tag tag, bool check){
+ CheckButton button = new CheckButton(tag.Text);
+ button.Name = tag.Text;
+ AddElementToTable(button);
+ button.Active = check;
+ tagsDict.Add(tag, button);
+ }
+
+ private void AddElementToTable(CheckButton button){
+ uint row_top,row_bottom,col_left,col_right;
+ int index = tagsDict.Count;
+
+ table1.NRows =(uint) (index/5 + 1);
+ row_top =(uint) (index/table1.NColumns);
+ row_bottom = (uint) row_top+1 ;
+ col_left = (uint) index%table1.NColumns;
+ col_right = (uint) col_left+1 ;
+
+ table1.Attach(button,col_left,col_right,row_top,row_bottom);
+ button.Show();
+ }
+
+ protected virtual void OnTagbuttonClicked (object sender, System.EventArgs e)
+ {
+ Tag tag;
+ CheckButton button;
+
+ // Don't allow tags with void strings
+ if (entry1.Text == "")
+ return;
+ // Check if it's the first tag and show the tags table
+ if (tagsDict.Count == 0){
+ scrolledwindow1.Visible = true;
+ label1.Visible = false;
+ }
+ tag = new Tag(entry1.Text);
+ if (tagsDict.TryGetValue(tag, out button))
+ button.Active = true;
+ else
+ AddTagWidget(new Tag(entry1.Text), true);
+ entry1.Text = "";
+ }
+
+ protected virtual void OnEntry1Activated (object sender, System.EventArgs e)
+ {
+ tagbutton.Click();
+ }
+ }
+}
\ No newline at end of file
diff --git a/LongoMatch/DB/Tag.cs b/LongoMatch/Gui/Dialog/TaggerDialog.cs
similarity index 58%
copy from LongoMatch/DB/Tag.cs
copy to LongoMatch/Gui/Dialog/TaggerDialog.cs
index cec70b4..de2f959 100644
--- a/LongoMatch/DB/Tag.cs
+++ b/LongoMatch/Gui/Dialog/TaggerDialog.cs
@@ -1,60 +1,52 @@
-//
-// Copyright (C) 2007-2009 Andoni Morales Alastruey
-//
+//
+// Copyright (C) 2009 Andoni Morales Alastruey
+//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
-//
+//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
-//
+//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-//
+//
using System;
+using System.Collections.Generic;
+using LongoMatch.DB;
+using LongoMatch.TimeNodes;
-namespace LongoMatch.DB
+namespace LongoMatch.Gui.Dialog
{
-
-
- public class Tag
+
+
+ public partial class TaggerDialog : Gtk.Dialog
{
- string text;
- public Tag(string text)
+
+ public TaggerDialog()
{
- this.text=text;
+ this.Build();
+ buttonOk.Visible = false;
}
-
- public string Text {
- get {
- return text;
- }
- set {
- text=value;
+
+ public TagsTemplate ProjectTags{
+ set{
+ taggerwidget1.ProjectsTags = value;
}
}
-
- public bool Equals(Tag tagComp) {
- return (this.text == tagComp.Text);
- }
-
- public override bool Equals(object obj)
- {
- Tag tag= obj as Tag;
- if (tag != null)
- return Equals(tag);
- else
- return false;
- }
-
- public override int GetHashCode()
- {
- return text.CompareTo("XXXXX") ^ 3 ;
+
+ public List<Tag> Tags{
+ set{
+ taggerwidget1.Tags = value;
+ }
+ get{
+ return taggerwidget1.Tags;
+ }
}
}
}
diff --git a/LongoMatch/Gui/TreeView/PlaysTreeView.cs b/LongoMatch/Gui/TreeView/PlaysTreeView.cs
index d8b7c43..4af5e08 100644
--- a/LongoMatch/Gui/TreeView/PlaysTreeView.cs
+++ b/LongoMatch/Gui/TreeView/PlaysTreeView.cs
@@ -41,11 +41,13 @@ namespace LongoMatch.Gui.Component
public event PlayListNodeAddedHandler PlayListNodeAdded;
public event SnapshotSeriesHandler SnapshotSeriesEvent;
public event PlayersTaggedHandler PlayersTagged;
+ public event TagPlayHandler TagPlay;
private Menu menu;
private MenuItem local;
private MenuItem visitor;
private MenuItem noTeam;
+ private MenuItem tag;
private MenuItem addPLN;
private MenuItem deleteKeyFrame;
private MenuItem snapshot;
@@ -94,7 +96,11 @@ namespace LongoMatch.Gui.Component
}
private void SetMenu() {
- Menu teamMenu = new Menu();
+ Menu teamMenu, playersMenu;
+ MenuItem localPlayers, visitorPlayers;
+ MenuItem team, quit;
+
+ teamMenu = new Menu();
local = new MenuItem(Catalog.GetString("Local Team"));
visitor = new MenuItem(Catalog.GetString("Visitor Team"));
noTeam = new MenuItem(Catalog.GetString("No Team"));
@@ -102,34 +108,37 @@ namespace LongoMatch.Gui.Component
teamMenu .Append(visitor);
teamMenu .Append(noTeam);
- Menu playersMenu = new Menu();
- MenuItem localPlayers = new MenuItem(Catalog.GetString("Local team"));
- MenuItem visitorPlayers = new MenuItem(Catalog.GetString("Visitor team"));
+ playersMenu = new Menu();
+ localPlayers = new MenuItem(Catalog.GetString("Local team"));
+ visitorPlayers = new MenuItem(Catalog.GetString("Visitor team"));
playersMenu.Append(localPlayers);
playersMenu.Append(visitorPlayers);
menu = new Menu();
name = new MenuItem(Catalog.GetString("Edit"));
- MenuItem team = new MenuItem(Catalog.GetString("Team Selection"));
+ team = new MenuItem(Catalog.GetString("Team Selection"));
team.Submenu = teamMenu;
+ tag = new MenuItem(Catalog.GetString("Add tag"));
players = new MenuItem(Catalog.GetString("Tag player"));
players.Submenu = playersMenu;
- MenuItem quit = new MenuItem(Catalog.GetString("Delete"));
+ quit = new MenuItem(Catalog.GetString("Delete"));
deleteKeyFrame = new MenuItem(Catalog.GetString("Delete key frame"));
addPLN = new MenuItem(Catalog.GetString("Add to playlist"));
addPLN.Sensitive=false;
snapshot = new MenuItem(Catalog.GetString("Export to PGN images"));
menu.Append(name);
- menu.Append(team);
+ menu.Append(tag);
menu.Append(players);
+ menu.Append(team);
menu.Append(addPLN);
menu.Append(quit);
menu.Append(deleteKeyFrame);
menu.Append(snapshot);
name.Activated += OnEdit;
+ tag.Activated += OnTag;
local.Activated += OnTeamSelection;
visitor.Activated += OnTeamSelection;
noTeam.Activated += OnTeamSelection;
@@ -157,6 +166,7 @@ namespace LongoMatch.Gui.Component
name.Sensitive = !enabled;
snapshot.Sensitive = !enabled;
players.Sensitive = !enabled;
+ tag.Sensitive = !enabled;
}
private void RenderMiniature(Gtk.TreeViewColumn column, Gtk.CellRenderer cell, Gtk.TreeModel model, Gtk.TreeIter iter)
@@ -247,7 +257,6 @@ namespace LongoMatch.Gui.Component
paths = Selection.GetSelectedRows();
}
- Console.WriteLine(paths.Length);
if (paths.Length == 1) {
TimeNode selectedTimeNode = GetValueFromPath(paths[0]);
if (selectedTimeNode is MediaTimeNode) {
@@ -340,6 +349,11 @@ namespace LongoMatch.Gui.Component
}
}
}
+
+ protected void OnTag (object obj, EventArgs args){
+ if (TagPlay != null)
+ TagPlay((MediaTimeNode)GetValueFromPath(Selection.GetSelectedRows()[0]));
+ }
protected void OnSnapshot(object obj, EventArgs args) {
if (SnapshotSeriesEvent != null)
@@ -357,4 +371,4 @@ namespace LongoMatch.Gui.Component
}
}
-}
\ No newline at end of file
+}
diff --git a/LongoMatch/Handlers/EventsManager.cs b/LongoMatch/Handlers/EventsManager.cs
index 8bbb0f5..f1bcf0e 100644
--- a/LongoMatch/Handlers/EventsManager.cs
+++ b/LongoMatch/Handlers/EventsManager.cs
@@ -110,6 +110,7 @@ namespace LongoMatch
visitorPlayersList.PlayListNodeAdded += OnPlayListNodeAdded;
treewidget.PlayersTagged += OnPlayersTagged;
+ treewidget.TagPlay += OnTagPlay;
treewidget.SnapshotSeriesEvent += OnSnapshotSeries;
localPlayersList.SnapshotSeriesEvent += OnSnapshotSeries;
@@ -329,10 +330,7 @@ namespace LongoMatch
Pixbuf pixbuf=null;
DrawingTool dialog = new DrawingTool();
- if (selectedTimeNode == null)
- player.SeekTo(time,true);
- else
- player.SeekTo(time,true);
+ player.SeekTo(time,true);
while (pixbuf == null)
pixbuf = player.CurrentFrame;
@@ -346,6 +344,19 @@ namespace LongoMatch
dialog.Run();
dialog.Destroy();
}
+
+ protected virtual void OnTagPlay(MediaTimeNode 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);
+ }
+ tagger.Destroy();
+ }
protected virtual void OnPlayersTagged(MediaTimeNode tNode, Team team) {
PlayersSelectionDialog dialog = new PlayersSelectionDialog();
diff --git a/LongoMatch/Handlers/Handlers.cs b/LongoMatch/Handlers/Handlers.cs
index 1e98599..86dd512 100644
--- a/LongoMatch/Handlers/Handlers.cs
+++ b/LongoMatch/Handlers/Handlers.cs
@@ -41,6 +41,8 @@ namespace LongoMatch.Handlers
public delegate void TimeNodeDeletedHandler(MediaTimeNode tNode,int section);
//Players needs to be tagged
public delegate void PlayersTaggedHandler(MediaTimeNode tNode, Team team);
+ //Tag a play
+ public delegate void TagPlayHandler(MediaTimeNode tNode);
/*Playlist Events*/
//Add the a play to the opened playlist
@@ -73,10 +75,5 @@ namespace LongoMatch.Handlers
public delegate void SnapshotSeriesHandler(MediaTimeNode tNode);
//A new version of the software exists
public delegate void NewVersionHandler(Version version, string URL);
-
-
-
-
-
-
+
}
diff --git a/LongoMatch/LongoMatch.mdp b/LongoMatch/LongoMatch.mdp
index 49c0834..5e15583 100644
--- a/LongoMatch/LongoMatch.mdp
+++ b/LongoMatch/LongoMatch.mdp
@@ -70,7 +70,6 @@
<File name="gtk-gui/LongoMatch.Gui.Dialog.TemplatesManager.cs" subtype="Code" buildaction="Compile" />
<File name="gtk-gui/LongoMatch.Gui.Dialog.PlayersSelectionDialog.cs" subtype="Code" buildaction="Compile" />
<File name="images/logo_48x48.png" subtype="Code" buildaction="Nothing" DeployService.RelativeDeployPath="icons/hicolor/48x48/longomatch.png" DeployService.TargetDirectoryId="CommonApplicationDataRoot" />
- <File name="DB/Tag.cs" subtype="Code" buildaction="Compile" />
<File name="DB/TagsTemplate.cs" subtype="Code" buildaction="Compile" />
<File name="gtk-gui/LongoMatch.Gui.Dialog.Migrator.cs" subtype="Code" buildaction="Compile" />
<File name="Compat/0.0/DatabaseMigrator.cs" subtype="Code" buildaction="Compile" />
@@ -169,6 +168,11 @@
<File name="images/stock_draw-line-ends-with-arrow.png" subtype="Code" buildaction="EmbedAsResource" />
<File name="images/stock_draw-rectangle-unfilled.png" subtype="Code" buildaction="EmbedAsResource" />
<File name="Common/Enums.cs" subtype="Code" buildaction="Compile" />
+ <File name="Time/Tag.cs" subtype="Code" buildaction="Compile" />
+ <File name="gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs" subtype="Code" buildaction="Compile" />
+ <File name="Gui/Component/TaggerWidget.cs" subtype="Code" buildaction="Compile" />
+ <File name="Gui/Dialog/TaggerDialog.cs" subtype="Code" buildaction="Compile" />
+ <File name="gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs" subtype="Code" buildaction="Compile" />
</Contents>
<References>
<ProjectReference type="Gac" localcopy="True" refto="Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
diff --git a/LongoMatch/Makefile.am b/LongoMatch/Makefile.am
index 1194568..c4fb3f2 100644
--- a/LongoMatch/Makefile.am
+++ b/LongoMatch/Makefile.am
@@ -96,7 +96,6 @@ FILES = \
DB/Project.cs \
DB/ProjectDescription.cs\
DB/Sections.cs \
- DB/Tag.cs \
DB/TagsTemplate.cs \
DB/TeamTemplate.cs \
gtk-gui/generated.cs \
@@ -112,6 +111,7 @@ FILES = \
gtk-gui/LongoMatch.Gui.Component.ProjectDetailsWidget.cs \
gtk-gui/LongoMatch.Gui.Component.ProjectListWidget.cs \
gtk-gui/LongoMatch.Gui.Component.ProjectTemplateWidget.cs \
+ gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs \
gtk-gui/LongoMatch.Gui.Component.TeamTemplateWidget.cs \
gtk-gui/LongoMatch.Gui.Component.TimeAdjustWidget.cs \
gtk-gui/LongoMatch.Gui.Component.TimeLineWidget.cs \
@@ -128,6 +128,7 @@ FILES = \
gtk-gui/LongoMatch.Gui.Dialog.ProjectsManager.cs \
gtk-gui/LongoMatch.Gui.Dialog.ProjectTemplateEditorDialog.cs \
gtk-gui/LongoMatch.Gui.Dialog.SnapshotsDialog.cs \
+ gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs \
gtk-gui/LongoMatch.Gui.Dialog.TeamTemplateEditor.cs \
gtk-gui/LongoMatch.Gui.Dialog.TemplatesManager.cs \
gtk-gui/LongoMatch.Gui.Dialog.UpdateDialog.cs \
@@ -148,6 +149,7 @@ FILES = \
Gui/Component/ProjectDetailsWidget.cs \
Gui/Component/ProjectListWidget.cs \
Gui/Component/ProjectTemplateWidget.cs \
+ Gui/Component/TaggerWidget.cs\
Gui/Component/TeamTemplateWidget.cs\
Gui/Component/TimeAdjustWidget.cs \
Gui/Component/TimeLineWidget.cs \
@@ -166,6 +168,7 @@ FILES = \
Gui/Dialog/ProjectsManager.cs \
Gui/Dialog/ProjectTemplateEditorDialog.cs \
Gui/Dialog/SnapshotsDialog.cs \
+ Gui/Dialog/TaggerDialog.cs \
Gui/Dialog/TemplatesEditor.cs \
Gui/Dialog/TeamTemplateEditor.cs\
Gui/Dialog/UpdateDialog.cs \
@@ -192,6 +195,7 @@ FILES = \
Main.cs \
Playlist/IPlayList.cs \
Playlist/PlayList.cs \
+ Time/Tag.cs \
Time/Drawing.cs\
Time/HotKey.cs \
Time/MediaTimeNode.cs \
diff --git a/LongoMatch/Time/MediaTimeNode.cs b/LongoMatch/Time/MediaTimeNode.cs
index ffc800e..f95a367 100644
--- a/LongoMatch/Time/MediaTimeNode.cs
+++ b/LongoMatch/Time/MediaTimeNode.cs
@@ -58,6 +58,8 @@ namespace LongoMatch.TimeNodes
private List<int> localPlayersList; //Used for multitagging: one play and several players
// We use the int index of the player in the template,
private List<int> visitorPlayersList;// because it's the only unmutable variable
+
+ private List<Tag> tagsList;
private Drawing keyFrame;
@@ -92,6 +94,7 @@ namespace LongoMatch.TimeNodes
this.stopFrame = (uint) this.Stop.MSeconds*fps/1000;
localPlayersList = new List<int>();
visitorPlayersList = new List<int>();
+ tagsList = new List<Tag>();
}
#endregion
@@ -245,6 +248,18 @@ namespace LongoMatch.TimeNodes
return keyFrame != null;
}
}
+
+ //// <value>
+ /// Play's tags
+ /// </value>
+ public List<Tag> Tags{
+ get{
+ return tagsList;
+ }
+ set{
+ tagsList = value;
+ }
+ }
#endregion
#region Public methods
@@ -300,6 +315,34 @@ namespace LongoMatch.TimeNodes
public void RemoveVisitorPlayer(int index) {
visitorPlayersList.Remove(index);
}
+
+ /// <summary>
+ /// Adds a new tag to the play
+ /// </summary>
+ /// <param name="tag">
+ /// A <see cref="Tag"/>: the tag to add
+ /// </param>
+ public void AddTag(Tag tag){
+ //From 0.15.5
+ if (tagsList == null)
+ tagsList = new List<Tag>();
+ if (!tagsList.Contains(tag))
+ tagsList.Add(tag);
+ }
+
+ /// <summary>
+ /// Removes a tag to the play
+ /// </summary>
+ /// <param name="tag">
+ /// A <see cref="Tag"/>: the tag to remove
+ /// </param>
+ public void RemoveTag(Tag tag){
+ //From 0.15.5
+ if (tagsList == null)
+ tagsList = new List<Tag>();
+ if (tagsList.Contains(tag))
+ tagsList.Remove(tag);
+ }
#endregion
}
}
diff --git a/LongoMatch/DB/Tag.cs b/LongoMatch/Time/Tag.cs
similarity index 88%
rename from LongoMatch/DB/Tag.cs
rename to LongoMatch/Time/Tag.cs
index cec70b4..99979cf 100644
--- a/LongoMatch/DB/Tag.cs
+++ b/LongoMatch/Time/Tag.cs
@@ -18,13 +18,14 @@
using System;
-namespace LongoMatch.DB
+namespace LongoMatch.TimeNodes
{
public class Tag
{
string text;
+
public Tag(string text)
{
this.text=text;
@@ -35,12 +36,15 @@ namespace LongoMatch.DB
return text;
}
set {
- text=value;
+ if (value == null)
+ text="";
+ else
+ text=value;
}
}
public bool Equals(Tag tagComp) {
- return (this.text == tagComp.Text);
+ return (text == tagComp.Text);
}
public override bool Equals(object obj)
@@ -54,7 +58,7 @@ namespace LongoMatch.DB
public override int GetHashCode()
{
- return text.CompareTo("XXXXX") ^ 3 ;
+ return text.GetHashCode();
}
}
}
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlaysListTreeWidget.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlaysListTreeWidget.cs
index 2f940ea..fe73af7 100644
--- a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlaysListTreeWidget.cs
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.PlaysListTreeWidget.cs
@@ -46,6 +46,7 @@ namespace LongoMatch.Gui.Component {
this.treeview.PlayListNodeAdded += new LongoMatch.Handlers.PlayListNodeAddedHandler(this.OnPlayListNodeAdded);
this.treeview.SnapshotSeriesEvent += new LongoMatch.Handlers.SnapshotSeriesHandler(this.OnTreeviewSnapshotSeriesEvent);
this.treeview.PlayersTagged += new LongoMatch.Handlers.PlayersTaggedHandler(this.OnTreeviewPlayersTagged);
+ this.treeview.TagPlay += new LongoMatch.Handlers.TagPlayHandler(this.OnTreeviewTagPlay);
}
}
}
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs
new file mode 100644
index 0000000..9222d24
--- /dev/null
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Component.TaggerWidget.cs
@@ -0,0 +1,120 @@
+// ------------------------------------------------------------------------------
+// <autogenerated>
+// This code was generated by a tool.
+//
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace LongoMatch.Gui.Component {
+
+
+ public partial class TaggerWidget {
+
+ private Gtk.VBox vbox2;
+
+ private Gtk.Label label1;
+
+ private Gtk.ScrolledWindow scrolledwindow1;
+
+ private Gtk.Table table1;
+
+ private Gtk.HBox hbox1;
+
+ private Gtk.Entry entry1;
+
+ private Gtk.Button tagbutton;
+
+ protected virtual void Build() {
+ Stetic.Gui.Initialize(this);
+ // Widget LongoMatch.Gui.Component.TaggerWidget
+ Stetic.BinContainer.Attach(this);
+ this.Name = "LongoMatch.Gui.Component.TaggerWidget";
+ // Container child LongoMatch.Gui.Component.TaggerWidget.Gtk.Container+ContainerChild
+ this.vbox2 = new Gtk.VBox();
+ this.vbox2.Name = "vbox2";
+ this.vbox2.Spacing = 6;
+ // Container child vbox2.Gtk.Box+BoxChild
+ this.label1 = new Gtk.Label();
+ this.label1.Name = "label1";
+ this.label1.LabelProp = Mono.Unix.Catalog.GetString("<b>This play hasn't been tagged yet.</b>\nYou can add new tags using the text entry and clicking \"Add Tag\"");
+ this.label1.UseMarkup = true;
+ this.label1.Justify = ((Gtk.Justification)(2));
+ this.vbox2.Add(this.label1);
+ Gtk.Box.BoxChild w1 = ((Gtk.Box.BoxChild)(this.vbox2[this.label1]));
+ w1.Position = 0;
+ // Container child vbox2.Gtk.Box+BoxChild
+ this.scrolledwindow1 = new Gtk.ScrolledWindow();
+ this.scrolledwindow1.CanFocus = true;
+ this.scrolledwindow1.Name = "scrolledwindow1";
+ this.scrolledwindow1.ShadowType = ((Gtk.ShadowType)(1));
+ // Container child scrolledwindow1.Gtk.Container+ContainerChild
+ Gtk.Viewport w2 = new Gtk.Viewport();
+ w2.ShadowType = ((Gtk.ShadowType)(0));
+ // Container child GtkViewport.Gtk.Container+ContainerChild
+ this.table1 = new Gtk.Table(((uint)(3)), ((uint)(3)), false);
+ this.table1.Name = "table1";
+ this.table1.RowSpacing = ((uint)(6));
+ this.table1.ColumnSpacing = ((uint)(6));
+ w2.Add(this.table1);
+ this.scrolledwindow1.Add(w2);
+ this.vbox2.Add(this.scrolledwindow1);
+ Gtk.Box.BoxChild w5 = ((Gtk.Box.BoxChild)(this.vbox2[this.scrolledwindow1]));
+ w5.Position = 1;
+ // Container child vbox2.Gtk.Box+BoxChild
+ this.hbox1 = new Gtk.HBox();
+ this.hbox1.Name = "hbox1";
+ this.hbox1.Spacing = 6;
+ // Container child hbox1.Gtk.Box+BoxChild
+ this.entry1 = new Gtk.Entry();
+ this.entry1.CanFocus = true;
+ this.entry1.Name = "entry1";
+ this.entry1.IsEditable = true;
+ this.entry1.InvisibleChar = 'â?¢';
+ this.hbox1.Add(this.entry1);
+ Gtk.Box.BoxChild w6 = ((Gtk.Box.BoxChild)(this.hbox1[this.entry1]));
+ w6.Position = 0;
+ // Container child hbox1.Gtk.Box+BoxChild
+ this.tagbutton = new Gtk.Button();
+ this.tagbutton.CanFocus = true;
+ this.tagbutton.Name = "tagbutton";
+ this.tagbutton.UseUnderline = true;
+ // Container child tagbutton.Gtk.Container+ContainerChild
+ Gtk.Alignment w7 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
+ // Container child GtkAlignment.Gtk.Container+ContainerChild
+ Gtk.HBox w8 = new Gtk.HBox();
+ w8.Spacing = 2;
+ // Container child GtkHBox.Gtk.Container+ContainerChild
+ Gtk.Image w9 = new Gtk.Image();
+ w9.Pixbuf = Stetic.IconLoader.LoadIcon(this, "gtk-add", Gtk.IconSize.Dialog, 48);
+ w8.Add(w9);
+ // Container child GtkHBox.Gtk.Container+ContainerChild
+ Gtk.Label w11 = new Gtk.Label();
+ w11.LabelProp = Mono.Unix.Catalog.GetString("Add Tag");
+ w11.UseUnderline = true;
+ w8.Add(w11);
+ w7.Add(w8);
+ this.tagbutton.Add(w7);
+ this.hbox1.Add(this.tagbutton);
+ Gtk.Box.BoxChild w15 = ((Gtk.Box.BoxChild)(this.hbox1[this.tagbutton]));
+ w15.Position = 1;
+ w15.Expand = false;
+ w15.Fill = false;
+ this.vbox2.Add(this.hbox1);
+ Gtk.Box.BoxChild w16 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
+ w16.Position = 2;
+ w16.Expand = false;
+ w16.Fill = false;
+ this.Add(this.vbox2);
+ if ((this.Child != null)) {
+ this.Child.ShowAll();
+ }
+ this.scrolledwindow1.Hide();
+ this.Hide();
+ this.entry1.Activated += new System.EventHandler(this.OnEntry1Activated);
+ this.tagbutton.Clicked += new System.EventHandler(this.OnTagbuttonClicked);
+ }
+ }
+}
diff --git a/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs b/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs
new file mode 100644
index 0000000..d688eab
--- /dev/null
+++ b/LongoMatch/gtk-gui/LongoMatch.Gui.Dialog.TaggerDialog.cs
@@ -0,0 +1,65 @@
+// ------------------------------------------------------------------------------
+// <autogenerated>
+// This code was generated by a tool.
+//
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace LongoMatch.Gui.Dialog {
+
+
+ public partial class TaggerDialog {
+
+ private LongoMatch.Gui.Component.TaggerWidget taggerwidget1;
+
+ private Gtk.Button buttonOk;
+
+ protected virtual void Build() {
+ Stetic.Gui.Initialize(this);
+ // Widget LongoMatch.Gui.Dialog.TaggerDialog
+ this.Name = "LongoMatch.Gui.Dialog.TaggerDialog";
+ this.Title = Mono.Unix.Catalog.GetString("Tag play");
+ this.Icon = Stetic.IconLoader.LoadIcon(this, "longomatch", Gtk.IconSize.Menu, 16);
+ this.WindowPosition = ((Gtk.WindowPosition)(4));
+ this.HasSeparator = false;
+ // Internal child LongoMatch.Gui.Dialog.TaggerDialog.VBox
+ Gtk.VBox w1 = this.VBox;
+ w1.Name = "dialog1_VBox";
+ w1.BorderWidth = ((uint)(2));
+ // Container child dialog1_VBox.Gtk.Box+BoxChild
+ this.taggerwidget1 = new LongoMatch.Gui.Component.TaggerWidget();
+ this.taggerwidget1.Events = ((Gdk.EventMask)(256));
+ this.taggerwidget1.Name = "taggerwidget1";
+ w1.Add(this.taggerwidget1);
+ Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(w1[this.taggerwidget1]));
+ w2.Position = 0;
+ // Internal child LongoMatch.Gui.Dialog.TaggerDialog.ActionArea
+ Gtk.HButtonBox w3 = this.ActionArea;
+ w3.Name = "dialog1_ActionArea";
+ w3.Spacing = 6;
+ w3.BorderWidth = ((uint)(5));
+ w3.LayoutStyle = ((Gtk.ButtonBoxStyle)(4));
+ // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
+ this.buttonOk = new Gtk.Button();
+ this.buttonOk.CanDefault = true;
+ this.buttonOk.CanFocus = true;
+ this.buttonOk.Name = "buttonOk";
+ this.buttonOk.UseStock = true;
+ this.buttonOk.UseUnderline = true;
+ this.buttonOk.Label = "gtk-ok";
+ this.AddActionWidget(this.buttonOk, -5);
+ Gtk.ButtonBox.ButtonBoxChild w4 = ((Gtk.ButtonBox.ButtonBoxChild)(w3[this.buttonOk]));
+ w4.Expand = false;
+ w4.Fill = false;
+ if ((this.Child != null)) {
+ this.Child.ShowAll();
+ }
+ this.DefaultWidth = 426;
+ this.DefaultHeight = 249;
+ this.Show();
+ }
+ }
+}
diff --git a/LongoMatch/gtk-gui/gui.stetic b/LongoMatch/gtk-gui/gui.stetic
index 25ac1b7..5813ce3 100644
--- a/LongoMatch/gtk-gui/gui.stetic
+++ b/LongoMatch/gtk-gui/gui.stetic
@@ -780,6 +780,7 @@
<signal name="PlayListNodeAdded" handler="OnPlayListNodeAdded" />
<signal name="SnapshotSeriesEvent" handler="OnTreeviewSnapshotSeriesEvent" />
<signal name="PlayersTagged" handler="OnTreeviewPlayersTagged" />
+ <signal name="TagPlay" handler="OnTreeviewTagPlay" />
</widget>
</child>
</widget>
@@ -4972,4 +4973,173 @@ Show-><b> S</b>
</widget>
</child>
</widget>
+ <widget class="Gtk.Bin" id="LongoMatch.Gui.Component.TaggerWidget" design-size="357 181">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <child>
+ <widget class="Gtk.VBox" id="vbox2">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Label" id="label1">
+ <property name="MemberName" />
+ <property name="LabelProp" translatable="yes"><b>This play hasn't been tagged yet.</b>
+You can add new tags using the text entry and clicking "Add Tag"</property>
+ <property name="UseMarkup">True</property>
+ <property name="Justify">Center</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+ <property name="MemberName" />
+ <property name="Visible">False</property>
+ <property name="CanFocus">True</property>
+ <property name="ShadowType">In</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>
+ </child>
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.HBox" id="hbox1">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <child>
+ <widget class="Gtk.Entry" id="entry1">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="IsEditable">True</property>
+ <property name="InvisibleChar">â?¢</property>
+ <signal name="Activated" handler="OnEntry1Activated" />
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="Gtk.Button" id="tagbutton">
+ <property name="MemberName" />
+ <property name="CanFocus">True</property>
+ <property name="Type">TextAndIcon</property>
+ <property name="Icon">stock:gtk-add Dialog</property>
+ <property name="Label" translatable="yes">Add Tag</property>
+ <property name="UseUnderline">True</property>
+ <signal name="Clicked" handler="OnTagbuttonClicked" />
+ </widget>
+ <packing>
+ <property name="Position">1</property>
+ <property name="AutoSize">True</property>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </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>
+ <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.TaggerDialog" design-size="426 249">
+ <property name="MemberName" />
+ <property name="Title" translatable="yes">Tag play</property>
+ <property name="Icon">stock:longomatch Menu</property>
+ <property name="WindowPosition">CenterOnParent</property>
+ <property name="Buttons">1</property>
+ <property name="HelpButton">False</property>
+ <property name="HasSeparator">False</property>
+ <child internal-child="VBox">
+ <widget class="Gtk.VBox" id="dialog1_VBox">
+ <property name="MemberName" />
+ <property name="BorderWidth">2</property>
+ <child>
+ <widget class="LongoMatch.Gui.Component.TaggerWidget" id="taggerwidget1">
+ <property name="MemberName" />
+ <property name="Events">ButtonPressMask</property>
+ </widget>
+ <packing>
+ <property name="Position">0</property>
+ <property name="AutoSize">True</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child internal-child="ActionArea">
+ <widget class="Gtk.HButtonBox" id="dialog1_ActionArea">
+ <property name="MemberName" />
+ <property name="Spacing">6</property>
+ <property name="BorderWidth">5</property>
+ <property name="Size">1</property>
+ <property name="LayoutStyle">End</property>
+ <child>
+ <widget class="Gtk.Button" id="buttonOk">
+ <property name="MemberName" />
+ <property name="CanDefault">True</property>
+ <property name="CanFocus">True</property>
+ <property name="UseStock">True</property>
+ <property name="Type">StockItem</property>
+ <property name="StockId">gtk-ok</property>
+ <property name="ResponseId">-5</property>
+ <property name="label">gtk-ok</property>
+ </widget>
+ <packing>
+ <property name="Expand">False</property>
+ <property name="Fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</stetic-interface>
\ No newline at end of file
diff --git a/LongoMatch/gtk-gui/objects.xml b/LongoMatch/gtk-gui/objects.xml
index 50fa71a..ff8aaf2 100644
--- a/LongoMatch/gtk-gui/objects.xml
+++ b/LongoMatch/gtk-gui/objects.xml
@@ -85,6 +85,7 @@
<signal name="PlayListNodeAdded" />
<signal name="SnapshotSeriesEvent" />
<signal name="PlayersTagged" />
+ <signal name="TagPlay" />
</itemgroup>
</signals>
</object>
@@ -173,29 +174,6 @@
</itemgroup>
</signals>
</object>
- <object type="LongoMatch.Gui.Component.PlayListWidget" palette-category="LongoMatch" allow-children="false" base-type="Gtk.Bin">
- <itemgroups />
- <signals>
- <itemgroup label="PlayListWidget Signals">
- <signal name="PlayListNodeSelected" />
- <signal name="ApplyCurrentRate" />
- <signal name="Progress" />
- </itemgroup>
- </signals>
- </object>
- <object type="LongoMatch.Gui.Component.PlaysListTreeWidget" palette-category="LongoMatch" allow-children="false" base-type="Gtk.Bin">
- <itemgroups />
- <signals>
- <itemgroup label="PlaysListTreeWidget Signals">
- <signal name="TimeNodeSelected" />
- <signal name="TimeNodeChanged" />
- <signal name="TimeNodeDeleted" />
- <signal name="PlayListNodeAdded" />
- <signal name="SnapshotSeriesEvent" />
- <signal name="PlayersTagged" />
- </itemgroup>
- </signals>
- </object>
<object type="LongoMatch.Gui.Popup.TransparentDrawingArea" palette-category="General" allow-children="false" base-type="Gtk.Window">
<itemgroups />
<signals />
@@ -243,4 +221,32 @@
</itemgroups>
<signals />
</object>
+ <object type="LongoMatch.Gui.Component.PlaysListTreeWidget" palette-category="LongoMatch" allow-children="false" base-type="Gtk.Bin">
+ <itemgroups />
+ <signals>
+ <itemgroup label="PlaysListTreeWidget Signals">
+ <signal name="TimeNodeSelected" />
+ <signal name="TimeNodeChanged" />
+ <signal name="TimeNodeDeleted" />
+ <signal name="PlayListNodeAdded" />
+ <signal name="SnapshotSeriesEvent" />
+ <signal name="PlayersTagged" />
+ <signal name="TagPlay" />
+ </itemgroup>
+ </signals>
+ </object>
+ <object type="LongoMatch.Gui.Component.PlayListWidget" palette-category="LongoMatch" allow-children="false" base-type="Gtk.Bin">
+ <itemgroups />
+ <signals>
+ <itemgroup label="PlayListWidget Signals">
+ <signal name="PlayListNodeSelected" />
+ <signal name="ApplyCurrentRate" />
+ <signal name="Progress" />
+ </itemgroup>
+ </signals>
+ </object>
+ <object type="LongoMatch.Gui.Component.TaggerWidget" palette-category="General" allow-children="false" base-type="Gtk.Bin">
+ <itemgroups />
+ <signals />
+ </object>
</objects>
\ No newline at end of file
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]