[longomatch] Add support to split playlists in several files



commit 41c278347d95fbae2330a06c4161b7b01648eb67
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Tue Feb 19 21:38:33 2013 +0100

    Add support to split playlists in several files

 LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs      |    2 +-
 .../Gui/Dialog/VideoEditionProperties.cs           |   33 +++++
 LongoMatch.GUI/Gui/GUIToolkit.cs                   |   41 +++++-
 ...LongoMatch.Gui.Dialog.ProjectSelectionDialog.cs |    1 +
 ...LongoMatch.Gui.Dialog.VideoEditionProperties.cs |  144 ++++++++++++++------
 .../gtk-gui/LongoMatch.Gui.MainWindow.cs           |    2 +-
 LongoMatch.GUI/gtk-gui/gui.stetic                  |   84 +++++++++++-
 LongoMatch.GUI/gtk-gui/objects.xml                 |   58 ++++----
 LongoMatch.Services/Services/PlaylistManager.cs    |    5 +-
 9 files changed, 288 insertions(+), 82 deletions(-)
---
diff --git a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
index 494fc3c..8da29f0 100644
--- a/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
+++ b/LongoMatch.Core/Interfaces/GUI/IGUIToolkit.cs
@@ -46,7 +46,7 @@ namespace LongoMatch.Interfaces.GUI
                        
                IBusyDialog BusyDialog(string message);
                        
-               Job ConfigureRenderingJob (IPlayList playlist);
+               List<Job> ConfigureRenderingJob (IPlayList playlist);
                void ExportFrameSeries(Project openenedProject, Play play, string snapshotDir);
                
                ProjectDescription SelectProject(List<ProjectDescription> projects);
diff --git a/LongoMatch.GUI/Gui/Dialog/VideoEditionProperties.cs 
b/LongoMatch.GUI/Gui/Dialog/VideoEditionProperties.cs
index d3585dd..efa529e 100644
--- a/LongoMatch.GUI/Gui/Dialog/VideoEditionProperties.cs
+++ b/LongoMatch.GUI/Gui/Dialog/VideoEditionProperties.cs
@@ -65,6 +65,16 @@ namespace LongoMatch.Gui.Dialog
                                return descriptioncheckbutton.Active;
                        }
                }
+               
+               public String OutputDir {
+                       get;
+                       set;
+               }
+               
+               public bool SplitFiles {
+                       get;
+                       set;
+               }
 
                #endregion Properties
 
@@ -165,11 +175,34 @@ namespace LongoMatch.Gui.Dialog
                        }
                        fChooser.Destroy();
                }
+               
                protected virtual void OnButtonCancelClicked(object sender, System.EventArgs e)
                {
                        this.Destroy();
                }
 
 
+               protected void OnSplitfilesbuttonClicked (object sender, System.EventArgs e)
+               {
+                       dirbox.Visible = splitfilesbutton.Active;
+                       filebox.Visible = !splitfilesbutton.Active;
+                       SplitFiles = splitfilesbutton.Active;
+               }
+
+               protected void OnOpendirbuttonClicked (object sender, System.EventArgs e)
+               {
+                       FileChooserDialog fChooser = new  FileChooserDialog(Catalog.GetString("Output folder 
..."),
+                                       this,
+                                       FileChooserAction.SelectFolder,
+                                       "gtk-cancel",ResponseType.Cancel,
+                                       "gtk-open",ResponseType.Accept);
+                       fChooser.SetCurrentFolder(Config.VideosDir());
+                       fChooser.CurrentName = "Playlist";
+                       if(fChooser.Run() == (int)ResponseType.Accept) {
+                               dirlabel.Text = fChooser.Filename;
+                               OutputDir = fChooser.Filename;
+                       }
+                       fChooser.Destroy();
+               }
        }
 }
diff --git a/LongoMatch.GUI/Gui/GUIToolkit.cs b/LongoMatch.GUI/Gui/GUIToolkit.cs
index ce86c6f..f4d9ba6 100644
--- a/LongoMatch.GUI/Gui/GUIToolkit.cs
+++ b/LongoMatch.GUI/Gui/GUIToolkit.cs
@@ -17,6 +17,7 @@
 // 
 using System;
 using System.Collections.Generic;
+using System.IO;
 using Gtk;
 using Gdk;
 using Mono.Unix;
@@ -98,10 +99,10 @@ namespace LongoMatch.Gui
                                extensionFilter, FileChooserAction.Open);
                }
                
-               public Job ConfigureRenderingJob (IPlayList playlist)
+               public List<Job> ConfigureRenderingJob (IPlayList playlist)
                {
                        VideoEditionProperties vep;
-                       Job job = null;
+                       List<Job> jobs = new List<Job>();
                        int response;
                        
                        if (playlist.Count == 0) {
@@ -112,14 +113,38 @@ namespace LongoMatch.Gui
                        vep = new VideoEditionProperties();
                        vep.TransientFor = mainWindow as Gtk.Window;
                        response = vep.Run();
-                       while(response == (int)ResponseType.Ok && vep.EncodingSettings.OutputFile == "") {
-                               WarningMessage(Catalog.GetString("Please, select a video file."));
-                               response=vep.Run();
+                       while(response == (int)ResponseType.Ok) {
+                               if (!vep.SplitFiles && vep.EncodingSettings.OutputFile == "") {
+                                       WarningMessage(Catalog.GetString("Please, select a video file."));
+                                       response=vep.Run();
+                               } else if (vep.SplitFiles && vep.OutputDir == "") {
+                                       WarningMessage(Catalog.GetString("Please, select an output 
directory."));
+                                       response=vep.Run();
+                               } else {
+                                       break;
+                               }
+                       }
+                       if(response ==(int)ResponseType.Ok) {
+                               if (!vep.SplitFiles) {
+                                       jobs.Add(new Job(playlist, vep.EncodingSettings,
+                                                          vep.EnableAudio, vep.TitleOverlay));
+                               } else {
+                                       int i = 0;
+                                       foreach (PlayListPlay play in playlist) {
+                                               EncodingSettings settings = vep.EncodingSettings;
+                                               PlayList pl = new PlayList();
+                                               string filename = String.Format ("{0}-{1}.{2}", play.Name, 
i.ToString("d4"),
+                                                                                
settings.EncodingProfile.Extension);
+                                               
+                                               pl.Add(play);
+                                               settings.OutputFile = Path.Combine (vep.OutputDir, filename);
+                                               jobs.Add(new Job(pl, settings, vep.EnableAudio, 
vep.TitleOverlay));
+                                               i++;
+                                       }
+                               }
                        }
-                       if(response ==(int)ResponseType.Ok)
-                               job = new Job(playlist, vep.EncodingSettings, vep.EnableAudio, 
vep.TitleOverlay);
                        vep.Destroy();
-                       return job;
+                       return jobs;
                }
                
                public void ExportFrameSeries(Project openedProject, Play play, string snapshotsDir) {
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.ProjectSelectionDialog.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.ProjectSelectionDialog.cs
index 46a1e31..47ae7d8 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.ProjectSelectionDialog.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.ProjectSelectionDialog.cs
@@ -48,6 +48,7 @@ namespace LongoMatch.Gui.Dialog
                        this.fromfileradiobutton = new global::Gtk.RadioButton 
(global::Mono.Unix.Catalog.GetString ("New project using a video file"));
                        this.fromfileradiobutton.CanFocus = true;
                        this.fromfileradiobutton.Name = "fromfileradiobutton";
+                       this.fromfileradiobutton.Active = true;
                        this.fromfileradiobutton.DrawIndicator = true;
                        this.fromfileradiobutton.UseUnderline = true;
                        this.fromfileradiobutton.FocusOnClick = false;
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.VideoEditionProperties.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.VideoEditionProperties.cs
index f79f4db..02fe1b1 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.VideoEditionProperties.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.Dialog.VideoEditionProperties.cs
@@ -17,11 +17,17 @@ namespace LongoMatch.Gui.Dialog
                private global::Gtk.HBox hbox6;
                private global::Gtk.CheckButton descriptioncheckbutton;
                private global::Gtk.CheckButton audiocheckbutton;
-               private global::Gtk.HBox hbox1;
+               private global::Gtk.CheckButton splitfilesbutton;
+               private global::Gtk.HBox filebox;
                private global::Gtk.Label filenamelabel;
                private global::Gtk.HBox hbox3;
                private global::Gtk.Label filelabel;
                private global::Gtk.Button openbutton;
+               private global::Gtk.HBox dirbox;
+               private global::Gtk.Label directorynamelabel1;
+               private global::Gtk.HBox hbox8;
+               private global::Gtk.Label dirlabel;
+               private global::Gtk.Button opendirbutton;
                private global::Gtk.Button buttonCancel;
                private global::Gtk.Button buttonOk;
                
@@ -153,19 +159,31 @@ namespace LongoMatch.Gui.Dialog
                        w13.Expand = false;
                        w13.Fill = false;
                        // Container child vbox2.Gtk.Box+BoxChild
-                       this.hbox1 = new global::Gtk.HBox ();
-                       this.hbox1.Name = "hbox1";
-                       this.hbox1.Spacing = 6;
-                       // Container child hbox1.Gtk.Box+BoxChild
+                       this.splitfilesbutton = new global::Gtk.CheckButton ();
+                       this.splitfilesbutton.CanFocus = true;
+                       this.splitfilesbutton.Name = "splitfilesbutton";
+                       this.splitfilesbutton.Label = global::Mono.Unix.Catalog.GetString ("Split output in 
one file per playlist element");
+                       this.splitfilesbutton.DrawIndicator = true;
+                       this.splitfilesbutton.UseUnderline = true;
+                       this.vbox2.Add (this.splitfilesbutton);
+                       global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.splitfilesbutton]));
+                       w14.Position = 4;
+                       w14.Expand = false;
+                       w14.Fill = false;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.filebox = new global::Gtk.HBox ();
+                       this.filebox.Name = "filebox";
+                       this.filebox.Spacing = 6;
+                       // Container child filebox.Gtk.Box+BoxChild
                        this.filenamelabel = new global::Gtk.Label ();
                        this.filenamelabel.Name = "filenamelabel";
                        this.filenamelabel.LabelProp = global::Mono.Unix.Catalog.GetString ("File name: ");
-                       this.hbox1.Add (this.filenamelabel);
-                       global::Gtk.Box.BoxChild w14 = ((global::Gtk.Box.BoxChild)(this.hbox1 
[this.filenamelabel]));
-                       w14.Position = 0;
-                       w14.Expand = false;
-                       w14.Fill = false;
-                       // Container child hbox1.Gtk.Box+BoxChild
+                       this.filebox.Add (this.filenamelabel);
+                       global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.filebox 
[this.filenamelabel]));
+                       w15.Position = 0;
+                       w15.Expand = false;
+                       w15.Fill = false;
+                       // Container child filebox.Gtk.Box+BoxChild
                        this.hbox3 = new global::Gtk.HBox ();
                        this.hbox3.Name = "hbox3";
                        this.hbox3.Spacing = 6;
@@ -173,8 +191,8 @@ namespace LongoMatch.Gui.Dialog
                        this.filelabel = new global::Gtk.Label ();
                        this.filelabel.Name = "filelabel";
                        this.hbox3.Add (this.filelabel);
-                       global::Gtk.Box.BoxChild w15 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.filelabel]));
-                       w15.Position = 0;
+                       global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.filelabel]));
+                       w16.Position = 0;
                        // Container child hbox3.Gtk.Box+BoxChild
                        this.openbutton = new global::Gtk.Button ();
                        this.openbutton.CanFocus = true;
@@ -183,29 +201,72 @@ namespace LongoMatch.Gui.Dialog
                        this.openbutton.UseUnderline = true;
                        this.openbutton.Label = "gtk-save-as";
                        this.hbox3.Add (this.openbutton);
-                       global::Gtk.Box.BoxChild w16 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.openbutton]));
-                       w16.Position = 1;
-                       w16.Expand = false;
-                       w16.Fill = false;
-                       this.hbox1.Add (this.hbox3);
-                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox1 [this.hbox3]));
+                       global::Gtk.Box.BoxChild w17 = ((global::Gtk.Box.BoxChild)(this.hbox3 
[this.openbutton]));
                        w17.Position = 1;
-                       this.vbox2.Add (this.hbox1);
-                       global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.hbox1]));
-                       w18.Position = 4;
-                       w18.Expand = false;
-                       w18.Fill = false;
-                       w1.Add (this.vbox2);
-                       global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(w1 [this.vbox2]));
-                       w19.Position = 0;
+                       w17.Expand = false;
+                       w17.Fill = false;
+                       this.filebox.Add (this.hbox3);
+                       global::Gtk.Box.BoxChild w18 = ((global::Gtk.Box.BoxChild)(this.filebox 
[this.hbox3]));
+                       w18.Position = 1;
+                       this.vbox2.Add (this.filebox);
+                       global::Gtk.Box.BoxChild w19 = ((global::Gtk.Box.BoxChild)(this.vbox2 
[this.filebox]));
+                       w19.Position = 5;
                        w19.Expand = false;
                        w19.Fill = false;
+                       // Container child vbox2.Gtk.Box+BoxChild
+                       this.dirbox = new global::Gtk.HBox ();
+                       this.dirbox.Name = "dirbox";
+                       this.dirbox.Spacing = 6;
+                       // Container child dirbox.Gtk.Box+BoxChild
+                       this.directorynamelabel1 = new global::Gtk.Label ();
+                       this.directorynamelabel1.Name = "directorynamelabel1";
+                       this.directorynamelabel1.LabelProp = global::Mono.Unix.Catalog.GetString ("Directory 
name: ");
+                       this.dirbox.Add (this.directorynamelabel1);
+                       global::Gtk.Box.BoxChild w20 = ((global::Gtk.Box.BoxChild)(this.dirbox 
[this.directorynamelabel1]));
+                       w20.Position = 0;
+                       w20.Expand = false;
+                       w20.Fill = false;
+                       // Container child dirbox.Gtk.Box+BoxChild
+                       this.hbox8 = new global::Gtk.HBox ();
+                       this.hbox8.Name = "hbox8";
+                       this.hbox8.Spacing = 6;
+                       // Container child hbox8.Gtk.Box+BoxChild
+                       this.dirlabel = new global::Gtk.Label ();
+                       this.dirlabel.Name = "dirlabel";
+                       this.hbox8.Add (this.dirlabel);
+                       global::Gtk.Box.BoxChild w21 = ((global::Gtk.Box.BoxChild)(this.hbox8 
[this.dirlabel]));
+                       w21.Position = 0;
+                       // Container child hbox8.Gtk.Box+BoxChild
+                       this.opendirbutton = new global::Gtk.Button ();
+                       this.opendirbutton.CanFocus = true;
+                       this.opendirbutton.Name = "opendirbutton";
+                       this.opendirbutton.UseStock = true;
+                       this.opendirbutton.UseUnderline = true;
+                       this.opendirbutton.Label = "gtk-save-as";
+                       this.hbox8.Add (this.opendirbutton);
+                       global::Gtk.Box.BoxChild w22 = ((global::Gtk.Box.BoxChild)(this.hbox8 
[this.opendirbutton]));
+                       w22.Position = 1;
+                       w22.Expand = false;
+                       w22.Fill = false;
+                       this.dirbox.Add (this.hbox8);
+                       global::Gtk.Box.BoxChild w23 = ((global::Gtk.Box.BoxChild)(this.dirbox [this.hbox8]));
+                       w23.Position = 1;
+                       this.vbox2.Add (this.dirbox);
+                       global::Gtk.Box.BoxChild w24 = ((global::Gtk.Box.BoxChild)(this.vbox2 [this.dirbox]));
+                       w24.Position = 6;
+                       w24.Expand = false;
+                       w24.Fill = false;
+                       w1.Add (this.vbox2);
+                       global::Gtk.Box.BoxChild w25 = ((global::Gtk.Box.BoxChild)(w1 [this.vbox2]));
+                       w25.Position = 0;
+                       w25.Expand = false;
+                       w25.Fill = false;
                        // Internal child LongoMatch.Gui.Dialog.VideoEditionProperties.ActionArea
-                       global::Gtk.HButtonBox w20 = this.ActionArea;
-                       w20.Name = "dialog1_ActionArea";
-                       w20.Spacing = 6;
-                       w20.BorderWidth = ((uint)(5));
-                       w20.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
+                       global::Gtk.HButtonBox w26 = this.ActionArea;
+                       w26.Name = "dialog1_ActionArea";
+                       w26.Spacing = 6;
+                       w26.BorderWidth = ((uint)(5));
+                       w26.LayoutStyle = ((global::Gtk.ButtonBoxStyle)(4));
                        // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
                        this.buttonCancel = new global::Gtk.Button ();
                        this.buttonCancel.CanDefault = true;
@@ -215,9 +276,9 @@ namespace LongoMatch.Gui.Dialog
                        this.buttonCancel.UseUnderline = true;
                        this.buttonCancel.Label = "gtk-cancel";
                        this.AddActionWidget (this.buttonCancel, -6);
-                       global::Gtk.ButtonBox.ButtonBoxChild w21 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w20 [this.buttonCancel]));
-                       w21.Expand = false;
-                       w21.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w27 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w26 [this.buttonCancel]));
+                       w27.Expand = false;
+                       w27.Fill = false;
                        // Container child dialog1_ActionArea.Gtk.ButtonBox+ButtonBoxChild
                        this.buttonOk = new global::Gtk.Button ();
                        this.buttonOk.CanDefault = true;
@@ -227,17 +288,20 @@ namespace LongoMatch.Gui.Dialog
                        this.buttonOk.UseUnderline = true;
                        this.buttonOk.Label = "gtk-ok";
                        this.AddActionWidget (this.buttonOk, -5);
-                       global::Gtk.ButtonBox.ButtonBoxChild w22 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w20 [this.buttonOk]));
-                       w22.Position = 1;
-                       w22.Expand = false;
-                       w22.Fill = false;
+                       global::Gtk.ButtonBox.ButtonBoxChild w28 = 
((global::Gtk.ButtonBox.ButtonBoxChild)(w26 [this.buttonOk]));
+                       w28.Position = 1;
+                       w28.Expand = false;
+                       w28.Fill = false;
                        if ((this.Child != null)) {
                                this.Child.ShowAll ();
                        }
                        this.DefaultWidth = 516;
-                       this.DefaultHeight = 245;
+                       this.DefaultHeight = 309;
+                       this.dirbox.Hide ();
                        this.Show ();
+                       this.splitfilesbutton.Clicked += new global::System.EventHandler 
(this.OnSplitfilesbuttonClicked);
                        this.openbutton.Clicked += new global::System.EventHandler (this.OnOpenbuttonClicked);
+                       this.opendirbutton.Clicked += new global::System.EventHandler 
(this.OnOpendirbuttonClicked);
                        this.buttonCancel.Clicked += new global::System.EventHandler 
(this.OnButtonCancelClicked);
                        this.buttonOk.Clicked += new global::System.EventHandler (this.OnButtonOkClicked);
                }
diff --git a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs 
b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
index defbc6d..56b512b 100644
--- a/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
+++ b/LongoMatch.GUI/gtk-gui/LongoMatch.Gui.MainWindow.cs
@@ -137,7 +137,7 @@ namespace LongoMatch.Gui
                        this.ImportProjectAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("_Import 
Project");
                        w1.Add (this.ImportProjectAction, "<Control>i");
                        this.ManualTaggingViewAction = new global::Gtk.RadioAction 
("ManualTaggingViewAction", global::Mono.Unix.Catalog.GetString ("Manual tagging view"), null, null, 0);
-                       this.ManualTaggingViewAction.Group = this.TimelineViewAction.Group;
+                       this.ManualTaggingViewAction.Group = this.TaggingViewAction.Group;
                        this.ManualTaggingViewAction.Sensitive = false;
                        this.ManualTaggingViewAction.ShortLabel = global::Mono.Unix.Catalog.GetString ("Free 
Capture Mode");
                        w1.Add (this.ManualTaggingViewAction, "<Control>f");
diff --git a/LongoMatch.GUI/gtk-gui/gui.stetic b/LongoMatch.GUI/gtk-gui/gui.stetic
index 93b7af6..34f21c9 100644
--- a/LongoMatch.GUI/gtk-gui/gui.stetic
+++ b/LongoMatch.GUI/gtk-gui/gui.stetic
@@ -3015,7 +3015,7 @@ new one.</property>
       </widget>
     </child>
   </widget>
-  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.VideoEditionProperties" design-size="516 245">
+  <widget class="Gtk.Dialog" id="LongoMatch.Gui.Dialog.VideoEditionProperties" design-size="516 309">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Video Properties</property>
     <property name="Icon">stock:longomatch Dialog</property>
@@ -3185,7 +3185,24 @@ Extra</property>
               </packing>
             </child>
             <child>
-              <widget class="Gtk.HBox" id="hbox1">
+              <widget class="Gtk.CheckButton" id="splitfilesbutton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Label" translatable="yes">Split output in one file per playlist 
element</property>
+                <property name="DrawIndicator">True</property>
+                <property name="HasLabel">True</property>
+                <property name="UseUnderline">True</property>
+                <signal name="Clicked" handler="OnSplitfilesbuttonClicked" />
+              </widget>
+              <packing>
+                <property name="Position">4</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.HBox" id="filebox">
                 <property name="MemberName" />
                 <property name="Spacing">6</property>
                 <child>
@@ -3238,7 +3255,68 @@ Extra</property>
                 </child>
               </widget>
               <packing>
-                <property name="Position">4</property>
+                <property name="Position">5</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.HBox" id="dirbox">
+                <property name="MemberName" />
+                <property name="Visible">False</property>
+                <property name="Spacing">6</property>
+                <child>
+                  <widget class="Gtk.Label" id="directorynamelabel1">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">Directory name: </property>
+                  </widget>
+                  <packing>
+                    <property name="Position">0</property>
+                    <property name="AutoSize">False</property>
+                    <property name="Expand">False</property>
+                    <property name="Fill">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.HBox" id="hbox8">
+                    <property name="MemberName" />
+                    <property name="Spacing">6</property>
+                    <child>
+                      <widget class="Gtk.Label" id="dirlabel">
+                        <property name="MemberName" />
+                      </widget>
+                      <packing>
+                        <property name="Position">0</property>
+                        <property name="AutoSize">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="Gtk.Button" id="opendirbutton">
+                        <property name="MemberName" />
+                        <property name="CanFocus">True</property>
+                        <property name="UseStock">True</property>
+                        <property name="Type">StockItem</property>
+                        <property name="StockId">gtk-save-as</property>
+                        <signal name="Clicked" handler="OnOpendirbuttonClicked" />
+                        <property name="label">gtk-save-as</property>
+                      </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">1</property>
+                    <property name="AutoSize">False</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="Position">6</property>
                 <property name="AutoSize">True</property>
                 <property name="Expand">False</property>
                 <property name="Fill">False</property>
diff --git a/LongoMatch.GUI/gtk-gui/objects.xml b/LongoMatch.GUI/gtk-gui/objects.xml
index aff1431..7081c33 100644
--- a/LongoMatch.GUI/gtk-gui/objects.xml
+++ b/LongoMatch.GUI/gtk-gui/objects.xml
@@ -259,33 +259,7 @@
         <signal name="SnapshotSeriesEvent" />
         <signal name="TagPlay" />
         <signal name="NewRenderingJob" />
-      </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.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="TagPlay" />
-        <signal name="RenderPlaylistEvent" />
+        <signal name="PlayCategoryChanged" />
       </itemgroup>
     </signals>
   </object>
@@ -321,6 +295,7 @@
         <signal name="SnapshotSeriesEvent" />
         <signal name="TagPlay" />
         <signal name="NewRenderingJob" />
+        <signal name="PlayCategoryChanged" />
       </itemgroup>
     </signals>
   </object>
@@ -341,4 +316,33 @@
       </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="PlayCategoryChanged" />
+        <signal name="PlayListNodeAdded" />
+        <signal name="SnapshotSeries" />
+        <signal name="RenderPlaylist" />
+        <signal name="TagPlay" />
+      </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="PlayCategoryChanged" />
+        <signal name="SnapshotSeriesEvent" />
+        <signal name="TagPlay" />
+        <signal name="RenderPlaylistEvent" />
+      </itemgroup>
+    </signals>
+  </object>
 </objects>
\ No newline at end of file
diff --git a/LongoMatch.Services/Services/PlaylistManager.cs b/LongoMatch.Services/Services/PlaylistManager.cs
index 5ec1e07..6d244f4 100644
--- a/LongoMatch.Services/Services/PlaylistManager.cs
+++ b/LongoMatch.Services/Services/PlaylistManager.cs
@@ -17,6 +17,7 @@
 // 
 using System;
 using System.Threading;
+using System.Collections.Generic;
 
 using LongoMatch.Interfaces;
 using LongoMatch.Interfaces.GUI;
@@ -170,8 +171,8 @@ namespace LongoMatch.Services
                
                protected virtual void OnRenderPlaylistEvent (IPlayList playlist)
                {
-                       Job job = guiToolkit.ConfigureRenderingJob(playlist);
-                       if (job != null)
+                       List<Job> jobs = guiToolkit.ConfigureRenderingJob(playlist);
+                       foreach (Job job in jobs)
                                videoRenderer.AddJob(job);
                }
                


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