[longomatch] Add support for moving plays between categories
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] Add support for moving plays between categories
- Date: Tue, 19 Feb 2013 20:39:23 +0000 (UTC)
commit b7f847449b05e2fd5d7d049a333bf7055222e8b5
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date: Tue Feb 19 20:10:03 2013 +0100
Add support for moving plays between categories
LongoMatch.Core/Handlers/Handlers.cs | 2 +
LongoMatch.Core/Interfaces/GUI/IMainWindow.cs | 1 +
.../Gui/Component/PlayersListTreeWidget.cs | 1 +
.../Gui/Component/PlaysListTreeWidget.cs | 9 +++++
.../Gui/Component/PlaysSelectionWidget.cs | 10 ++++++
LongoMatch.GUI/Gui/MainWindow.cs | 10 ++++++
LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs | 34 ++++++++++++++++++--
LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs | 1 +
LongoMatch.Services/Services/EventsManager.cs | 14 ++++++++
9 files changed, 79 insertions(+), 3 deletions(-)
---
diff --git a/LongoMatch.Core/Handlers/Handlers.cs b/LongoMatch.Core/Handlers/Handlers.cs
index 876fcf2..99d37cd 100644
--- a/LongoMatch.Core/Handlers/Handlers.cs
+++ b/LongoMatch.Core/Handlers/Handlers.cs
@@ -45,6 +45,8 @@ namespace LongoMatch.Handlers
public delegate void PlaysDeletedHandler(List<Play> plays);
/* Tag a play */
public delegate void TagPlayHandler(Play play);
+ /* Change the Play's category */
+ public delegate void PlayCategoryChangedHandler(Play play, Category cat);
/* Project Events */
public delegate void SaveProjectHandler(Project project, ProjectType projectType);
diff --git a/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs b/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs
index 4f0cb3b..29f4d69 100644
--- a/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IMainWindow.cs
@@ -36,6 +36,7 @@ namespace LongoMatch.Interfaces.GUI
event TagPlayHandler TagPlayEvent;
event PlaysDeletedHandler PlaysDeletedEvent;
event TimeNodeChangedHandler TimeNodeChanged;
+ event PlayCategoryChangedHandler PlayCategoryChanged;
/* Playlist */
event RenderPlaylistHandler RenderPlaylistEvent;
diff --git a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
index 7345569..3c6769f 100644
--- a/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlayersListTreeWidget.cs
@@ -96,6 +96,7 @@ namespace LongoMatch.Gui.Component
}
}
playerstreeview.Model = team;
+ playerstreeview.Project = Project;
}
public bool PlayListLoaded {
diff --git a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
index 115170a..003d7b1 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysListTreeWidget.cs
@@ -42,6 +42,7 @@ namespace LongoMatch.Gui.Component
public event TimeNodeChangedHandler TimeNodeChanged;
public event PlaysDeletedHandler TimeNodeDeleted;
public event PlayListNodeAddedHandler PlayListNodeAdded;
+ public event PlayCategoryChangedHandler PlayCategoryChanged;
public event SnapshotSeriesHandler SnapshotSeriesEvent;
public event TagPlayHandler TagPlay;
public event RenderPlaylistHandler RenderPlaylistEvent;
@@ -59,6 +60,7 @@ namespace LongoMatch.Gui.Component
treeview.PlayListNodeAdded += OnPlayListNodeAdded;
treeview.SnapshotSeriesEvent += OnSnapshotSeriesEvent;
treeview.EditProperties += OnEditProperties;
+ treeview.PlayCategoryChanged += OnPlayCategoryChanged;
treeview.TagPlay += OnTagPlay;
treeview.NewRenderingJob += OnNewRenderingJob;
}
@@ -138,6 +140,7 @@ namespace LongoMatch.Gui.Component
if(project != null) {
treeview.Model = GetModel(project);
treeview.Colors = true;
+ treeview.Project = value;
}
else {
treeview.Model = null;
@@ -206,6 +209,12 @@ namespace LongoMatch.Gui.Component
if(PlayListNodeAdded != null)
PlayListNodeAdded(tNode);
}
+
+ protected virtual void OnPlayCategoryChanged(Play play, Category cat)
+ {
+ if(PlayCategoryChanged != null)
+ PlayCategoryChanged(play, cat);
+ }
protected virtual void OnSnapshotSeriesEvent(LongoMatch.Store.Play tNode)
{
diff --git a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
index b501d4f..da1a312 100644
--- a/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
+++ b/LongoMatch.GUI/Gui/Component/PlaysSelectionWidget.cs
@@ -33,6 +33,7 @@ namespace LongoMatch.Gui.Component
public event PlaysDeletedHandler PlaysDeleted;
public event PlaySelectedHandler PlaySelected;
+ public event PlayCategoryChangedHandler PlayCategoryChanged;
public event PlayListNodeAddedHandler PlayListNodeAdded;
public event SnapshotSeriesHandler SnapshotSeries;
public event RenderPlaylistHandler RenderPlaylist;
@@ -142,6 +143,9 @@ namespace LongoMatch.Gui.Component
playsList.RenderPlaylistEvent += EmitRenderPlaylist;
localPlayersList.RenderPlaylistEvent += EmitRenderPlaylist;
visitorPlayersList.RenderPlaylistEvent += EmitRenderPlaylist;
+
+ /* Connect PlayCategoryChanged events */
+ playsList.PlayCategoryChanged += EmitPlayCategoryChanged;
}
private void UpdateTeamsModels() {
@@ -178,6 +182,12 @@ namespace LongoMatch.Gui.Component
PlayListNodeAdded(play);
}
+ protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
+ {
+ if(PlayCategoryChanged != null)
+ PlayCategoryChanged(play, cat);
+ }
+
private void EmitTagPlay(Play play) {
if (TagPlay != null)
TagPlay (play);
diff --git a/LongoMatch.GUI/Gui/MainWindow.cs b/LongoMatch.GUI/Gui/MainWindow.cs
index 9415690..021e906 100644
--- a/LongoMatch.GUI/Gui/MainWindow.cs
+++ b/LongoMatch.GUI/Gui/MainWindow.cs
@@ -53,6 +53,7 @@ namespace LongoMatch.Gui
public event TagPlayHandler TagPlayEvent;
public event PlaysDeletedHandler PlaysDeletedEvent;
public event TimeNodeChangedHandler TimeNodeChanged;
+ public event PlayCategoryChangedHandler PlayCategoryChanged;
/* Playlist */
public event RenderPlaylistHandler RenderPlaylistEvent;
@@ -259,6 +260,9 @@ namespace LongoMatch.Gui
/* Connect TimeNodeSelected events */
playsSelection.PlaySelected += OnTimeNodeSelected;
timeline.TimeNodeSelected += OnTimeNodeSelected;
+
+ /* Connect PlayCategoryChanged events */
+ playsSelection.PlayCategoryChanged += EmitPlayCategoryChanged;
/* Connect playlist events */
playlist.PlayListNodeSelected += EmitPlayListNodeSelected;
@@ -738,6 +742,12 @@ namespace LongoMatch.Gui
if (PlaysDeletedEvent != null)
PlaysDeletedEvent(plays);
}
+
+ protected virtual void EmitPlayCategoryChanged(Play play, Category cat)
+ {
+ if(PlayCategoryChanged != null)
+ PlayCategoryChanged(play, cat);
+ }
private void OnPlayListNodeAdded(Play play)
{
diff --git a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
index 6d8463d..eaa8093 100644
--- a/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
+++ b/LongoMatch.GUI/Gui/TreeView/ListTreeViewBase.cs
@@ -34,21 +34,24 @@ namespace LongoMatch.Gui.Component
public abstract class ListTreeViewBase:TreeView
{
// Plays menu
- protected Menu menu;
- protected MenuItem tag, delete, addPLN, deleteKeyFrame, snapshot, name, render;
+ protected Menu menu, catMenu;
+ protected MenuItem tag, delete, addPLN, deleteKeyFrame, snapshot, name, render, moveCat;
protected Gtk.CellRendererText nameCell;
protected Gtk.TreeViewColumn nameColumn;
protected bool editing;
protected bool projectIsLive;
+ protected bool enableCategoryMove = false;
TreeModelFilter modelFilter;
PlaysFilter filter;
+ Dictionary<MenuItem, Category> catsDict;
public event TimeNodeChangedHandler TimeNodeChanged;
public event PlaySelectedHandler TimeNodeSelected;
public event PlaysDeletedHandler TimeNodeDeleted;
public event PlayListNodeAddedHandler PlayListNodeAdded;
+ public event PlayCategoryChangedHandler PlayCategoryChanged;
public event SnapshotSeriesHandler SnapshotSeriesEvent;
public event TagPlayHandler TagPlay;
public event EventHandler NewRenderingJob;
@@ -114,6 +117,23 @@ namespace LongoMatch.Gui.Component
modelFilter.Refilter();
}
+ public Project Project {
+ set {
+ if (!enableCategoryMove)
+ return;
+ catsDict = new Dictionary<MenuItem, Category>();
+ catMenu = new Menu();
+ foreach (Category cat in value.Categories) {
+ var item = new MenuItem (cat.Name);
+ catMenu.Append (item);
+ catsDict.Add(item, cat);
+ item.Activated += OnCatChanged;
+ }
+ catMenu.ShowAll();
+ moveCat.Submenu = catMenu;
+ }
+ }
+
new public TreeStore Model {
set {
if(value != null) {
@@ -148,7 +168,8 @@ namespace LongoMatch.Gui.Component
addPLN.Sensitive=false;
render = new MenuItem(Catalog.GetString("Export to video file"));
snapshot = new MenuItem(Catalog.GetString("Export to PGN images"));
-
+ moveCat = new MenuItem(Catalog.GetString("Move to category"));
+
menu.Append(name);
menu.Append(tag);
menu.Append(addPLN);
@@ -156,6 +177,7 @@ namespace LongoMatch.Gui.Component
menu.Append(deleteKeyFrame);
menu.Append(render);
menu.Append(snapshot);
+ menu.Append(moveCat);
name.Activated += OnEdit;
tag.Activated += OnTag;
@@ -360,6 +382,12 @@ namespace LongoMatch.Gui.Component
if (NewRenderingJob != null)
NewRenderingJob(this, null);
}
+
+ protected void OnCatChanged(object obj, EventArgs args) {
+ if (PlayCategoryChanged != null)
+ PlayCategoryChanged((Play)GetValueFromPath(Selection.GetSelectedRows()[0]),
+ catsDict[obj as MenuItem]);
+ }
protected void OnFilterUpdated() {
modelFilter.Refilter();
diff --git a/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs b/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
index be8a14d..5094ce2 100644
--- a/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
+++ b/LongoMatch.GUI/Gui/TreeView/PlaysTreeView.cs
@@ -42,6 +42,7 @@ namespace LongoMatch.Gui.Component
private RadioAction sortByName, sortByStart, sortByStop, sortByDuration;
public PlaysTreeView() {
+ enableCategoryMove = true;
SetCategoriesMenu();
}
diff --git a/LongoMatch.Services/Services/EventsManager.cs b/LongoMatch.Services/Services/EventsManager.cs
index 596e87b..385ddc5 100644
--- a/LongoMatch.Services/Services/EventsManager.cs
+++ b/LongoMatch.Services/Services/EventsManager.cs
@@ -81,6 +81,7 @@ namespace LongoMatch.Services
mainWindow.TimeNodeChanged += OnTimeNodeChanged;
mainWindow.PlaysDeletedEvent += OnPlaysDeleted;
mainWindow.PlaySelectedEvent += OnPlaySelected;
+ mainWindow.PlayCategoryChanged += OnPlayCategoryChanged;
/* Connect playlist events */
mainWindow.PlayListNodeSelectedEvent += (tn) => {selectedTimeNode = tn;};
@@ -274,5 +275,18 @@ namespace LongoMatch.Services
protected virtual void OnTagPlay(Play play) {
LaunchPlayTagger(play);
}
+
+ protected virtual void OnPlayCategoryChanged(Play play, Category cat)
+ {
+ List<Play> plays = new List<Play>();
+ plays.Add(play);
+ OnPlaysDeleted(plays);
+ var newplay = openedProject.AddPlay(cat, play.Start, play.Stop, play.Miniature);
+ newplay.Name = play.Name;
+ newplay.Notes = play.Notes;
+ newplay.Drawings = play.Drawings;
+ mainWindow.AddPlay(newplay);
+ Core.DB.UpdateProject (openedProject);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]