[longomatch] Add support for moving plays between categories



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]