summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Oesterholt <hans@oesterholt.net>2013-01-18 19:46:24 +0100
committerHans Oesterholt <hans@oesterholt.net>2013-01-18 19:46:24 +0100
commit8596e37ebaf22959575258b184da3f6ef49541e6 (patch)
tree0eafa6873e3d9ca456f7d09297cd91edd665040d
parent5da2ce3f06f547055f8d01317b4be5be197c7278 (diff)
CueSheets: First steps for playlists in the cuesheet extension. This is rather difficult :-(
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs35
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetCollection.cs31
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs68
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs45
-rw-r--r--src/CueSheets/Banshee.CueSheets/Data/CS_GenreInfo.cs (renamed from src/CueSheets/Banshee.CueSheets/Data/GenreInfo.cs)10
-rw-r--r--src/CueSheets/Banshee.CueSheets/Data/CS_TrackInfoDb.cs50
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_Column.cs27
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_GenreListView.cs2
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_MusicToDevice.cs (renamed from src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs)4
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListAdmin.cs111
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListView.cs44
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListsView.cs45
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CS_TrackListView.cs83
-rw-r--r--src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs300
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_AlbumModel.cs6
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_ArtistModel.cs4
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_ComposerModel.cs4
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_GenreModel.cs20
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_PlayListModel.cs74
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_PlayListsModel.cs68
-rw-r--r--src/CueSheets/Banshee.CueSheets/Model/CS_TrackListModel.cs66
-rw-r--r--src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs113
-rw-r--r--src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListCollection.cs39
-rw-r--r--src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListEntry.cs25
-rw-r--r--src/CueSheets/CueSheets.csproj17
-rw-r--r--src/CueSheets/Makefile.am16
26 files changed, 1100 insertions, 207 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
index 0d44e15..aef3ce5 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheet.cs
@@ -133,10 +133,29 @@ namespace Banshee.CueSheets
}
}
- public int searchIndex(double offset) {
+ public int searchIndex(string _current_entry_id,double _offset) {
int k,N;
- for(k=0,N=nEntries ();k<N && offset>_tracks[k].offset ();k++);
- return k-1;
+ if (_current_entry_id==null) {
+ for(k=0,N=nEntries ();k<N && _offset>_tracks[k].offset ();k++);
+ return k-1;
+ } else {
+ for(k=0,N=nEntries ();k<N && _current_entry_id!=entry (k).id ();k++);
+ if (k==N) {
+ return N-1;
+ } else {
+ CueSheetEntry e=entry (k);
+ //Hyena.Log.Information ("offset="+e.offset()+", endoffset="+e.end_offset()+" offset="+_offset);
+ if (_offset<e.offset ()) {
+ return k-1;
+ } else if (e.end_offset ()<=0.0) { // end track, we don't know
+ return k;
+ } else if (_offset>=e.end_offset ()) {
+ return k+1;
+ } else {
+ return k;
+ }
+ }
+ }
}
public void resetArt() {
@@ -231,13 +250,17 @@ namespace Banshee.CueSheets
_tracks=null;
}
+ public void AddEntry(CueSheetEntry e) {
+ append (e);
+ }
+
public CueSheetEntry AddTrack(string e_title,string e_perf,double e_offset) {
int nr=0;
if (_tracks!=null) {
nr=_tracks.Length;
}
string aaid=getArtId ();
- CueSheetEntry e=new CueSheetEntry(_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
+ CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
append (e);
int i,N;
for(i=0,N=nEntries ();i<N;i++) {
@@ -397,7 +420,7 @@ namespace Banshee.CueSheets
if (eq(line,"track")) {
if (e_offset>=0) {
nr+=1;
- CueSheetEntry e=new CueSheetEntry(_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
+ CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
e.setComposer (e_composer);
e.setPiece (e_piece);
append (e);
@@ -437,7 +460,7 @@ namespace Banshee.CueSheets
//Console.WriteLine ("Last entry adding");
if (e_offset>=0) {
nr+=1;
- CueSheetEntry e=new CueSheetEntry(_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
+ CueSheetEntry e=new CueSheetEntry(this,_music_file_name,aaid,nr,-1,e_title,e_perf,_title,e_offset);
e.setComposer (e_composer);
e.setPiece (e_piece);
append (e);
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetCollection.cs b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetCollection.cs
new file mode 100644
index 0000000..93dd3a3
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetCollection.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+
+namespace Banshee.CueSheets
+{
+ public class CueSheetCollection : List<CueSheet>
+ {
+ public CueSheetCollection () : base() {
+ }
+
+ public CueSheetEntry FindEntry(string cuesheet_id,string entry_id) {
+ int i,N;
+ //Hyena.Log.Information ("Finding "+cuesheet_id);
+ for(i=0,N=base.Count;i<N && base[i].id ()!=cuesheet_id;i++);
+ //Hyena.Log.Information ("i="+i+", N="+N);
+ if (i==N) {
+ return null;
+ } else {
+ CueSheet s=base[i];
+ int k,M;
+ for(k=0,M=s.nEntries ();k<M && s.entry (k).id ()!=entry_id;k++);
+ if (k==M) {
+ return null;
+ } else {
+ return s.entry (k);
+ }
+ }
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
index 92fc533..62cbeba 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet/CueSheetEntry.cs
@@ -37,14 +37,24 @@ namespace Banshee.CueSheets
{
public class CueSheetEntry : TrackInfo
{
- string _performer;
- string _composer="";
- string _piece="";
- string _file;
- TimeSpan _length;
- string _art="";
- double _offset;
- string _title;
+ private string _performer;
+ private string _composer="";
+ private string _piece="";
+ private string _file;
+ private TimeSpan _length;
+ private string _art="";
+ private double _offset;
+ private double _e_offset=-1.0;
+ private string _title;
+ private CueSheet _parent;
+
+ public string EntryName {
+ get { return _title; }
+ }
+
+ public CueSheet getCueSheet() {
+ return _parent;
+ }
public override string ArtworkId {
get { return _art; }
@@ -58,6 +68,10 @@ namespace Banshee.CueSheets
return _file;
}
+ public string id() {
+ return "title="+_title+";offset="+offset()+";length="+length ();
+ }
+
public string title() {
return _title;
}
@@ -70,15 +84,15 @@ namespace Banshee.CueSheets
return _offset;
}
+ public double end_offset() {
+ return _e_offset;
+ }
+
public void setNrOfTracks(int n) {
this.TrackCount=n;
}
- public void setComposer(string c) {
- _composer=c;
- }
-
public void setPiece(string p) {
_piece=p;
}
@@ -87,10 +101,35 @@ namespace Banshee.CueSheets
return _piece;
}
+ public string Piece {
+ get { return _piece; }
+ set { _piece=value; }
+ }
+
+ public override string Composer {
+ get { return _composer; }
+ set { _composer=value; }
+ }
+
+ public void setComposer(string c) {
+ _composer=c;
+ }
+
public string getComposer() {
return _composer;
}
+ public string Length {
+ get {
+ double l=length ();
+ int t=(int) (l*100.0);
+ int m=t/(60*100);
+ int secs=(t/100)%60;
+ string ln=String.Format ("{0:00}:{0:00}",m,secs);
+ return ln;
+ }
+ }
+
public override TimeSpan Duration {
get {
return _length;
@@ -107,6 +146,7 @@ namespace Banshee.CueSheets
public void setLength(double l) {
//_length=l;
+ _e_offset=_offset+l;
System.Int64 ticks_100nanosecs=(System.Int64) (l*10000000); // 10 miljoen
_length=new TimeSpan(ticks_100nanosecs);
}
@@ -115,13 +155,15 @@ namespace Banshee.CueSheets
return "nr: "+this.TrackNumber+", title: "+this.title ()+", file: "+this.file ();
}
- public CueSheetEntry (string file,String artId,int nr,int cnt,string title,string performer,string album,double offset) : base() {
+ public CueSheetEntry (CueSheet s,string file,String artId,int nr,int cnt,string title,string performer,string album,double offset) : base() {
_file=file;
_title=title;
_performer=performer;
_offset=offset;
_length=new TimeSpan(0);
+ _parent=s;
+
_art=artId;
base.AlbumArtist=performer;
base.TrackTitle=title;
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
index 6b173e7..f82dd9c 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
@@ -74,7 +74,7 @@ namespace Banshee.CueSheets
private Gtk.SeparatorMenuItem _sep;
private Gtk.CheckButton _track_search;
- private List<CueSheet> _sheets=new List<CueSheet>();
+ private CueSheetCollection _sheets=new CueSheetCollection();
private CueSheet _sheet=null;
private CueSheetsPrefs _preferences;
private Actions _actions;
@@ -181,7 +181,11 @@ namespace Banshee.CueSheets
return _sheet;
}
- public List<CueSheet> getSheets() {
+ public void setSheet(CueSheet s) {
+ _sheet=s;
+ }
+
+ public CueSheetCollection getSheets() {
return _sheets;
}
@@ -262,6 +266,7 @@ namespace Banshee.CueSheets
private CS_ArtistModel _artistModel=null;
private CS_GenreModel _genreModel=null;
private CS_ComposerModel _composerModel=null;
+ private CS_PlayListsModel _playlistsModel=null;
public CS_AlbumModel getAlbumModel() {
if (_model==null) {
@@ -271,6 +276,19 @@ namespace Banshee.CueSheets
return _model;
}
+ public CS_PlayListsModel getPlayListsModel() {
+ if (_playlistsModel==null) {
+ Hyena.Log.Information ("Playlist model init");
+ CS_PlayListCollection col=new CS_PlayListCollection(this._track_info_db,this.getSheets ());
+ _playlistsModel=new CS_PlayListsModel(col);
+ }
+ return _playlistsModel;
+ }
+
+ public CS_PlayListCollection getPlayListCollection() {
+ return _playlistsModel.Collection;
+ }
+
public TrackListModel getTrackModel() {
return this.TrackModel;
}
@@ -299,16 +317,21 @@ namespace Banshee.CueSheets
return _composerModel;
}
- public void setPositions(int hb,int hb1,int vp) {
+ public void setPositions(int hbpls,int hb,int hb1,int vp) {
+ Banshee.Configuration.ConfigurationClient.Set<int>("cuesheets_hbpls",hbpls);
Banshee.Configuration.ConfigurationClient.Set<int>("cuesheets_hb",hb);
Banshee.Configuration.ConfigurationClient.Set<int>("cuesheets_hb1",hb1);
Banshee.Configuration.ConfigurationClient.Set<int>("cuesheets_vp",vp);
}
- public void getPositions(out int hb,out int hb1, out int vp) {
+ public void getPositions(out int hbpls,out int hb,out int hb1, out int vp) {
+ hbpls=Banshee.Configuration.ConfigurationClient.Get<int>("cuesheets_hbpls",500);
hb=Banshee.Configuration.ConfigurationClient.Get<int>("cuesheets_hb",100);
hb1=Banshee.Configuration.ConfigurationClient.Get<int>("cuesheets_hb1",200);
vp=Banshee.Configuration.ConfigurationClient.Get<int>("cuesheets_vp",200);
+ if (hb1>=hbpls) { hb1=hbpls-100;}
+ if (hb>=hb1) { hb=hb1-100; }
+ if (hb<=0) { hb=100;hb1=200;hbpls=500; }
}
public bool getGridLayout(string id) {
@@ -321,13 +344,17 @@ namespace Banshee.CueSheets
_track_info_db.Set ("grid-"+id,g);
}
- public void setColumnWidth(string type,string albumid,int w) {
- _track_info_db.Set ("col-"+type+"-"+albumid,w);
+ public void setColumnWidth(string type,string albumid,double w) {
+ string key="col-"+type+"-"+albumid;
+ _track_info_db.Set (key,w);
+ //Hyena.Log.Information ("set width("+key+")="+w);
}
- public int getColumnWidth(string type,string albumid) {
- int w=150;
- _track_info_db.Get ("col-"+type+"-"+albumid,out w,150);
+ public double getColumnWidth(string type,string albumid) {
+ double w=1.0;
+ string key="col-"+type+"-"+albumid;
+ _track_info_db.Get (key,out w,1.0);
+ //Hyena.Log.Information ("get width("+key+")="+w);
return w;
}
diff --git a/src/CueSheets/Banshee.CueSheets/Data/GenreInfo.cs b/src/CueSheets/Banshee.CueSheets/Data/CS_GenreInfo.cs
index 3e914c0..a3b566e 100644
--- a/src/CueSheets/Banshee.CueSheets/Data/GenreInfo.cs
+++ b/src/CueSheets/Banshee.CueSheets/Data/CS_GenreInfo.cs
@@ -30,23 +30,23 @@ using System.Collections;
namespace Banshee.CueSheets
{
- public class GenreInfo
+ public class CS_GenreInfo
{
private string _genre;
- public class Comparer : IComparer<GenreInfo> {
+ public class Comparer : IComparer<CS_GenreInfo> {
private CaseInsensitiveComparer cmp=new CaseInsensitiveComparer();
- public int Compare( GenreInfo g1,GenreInfo g2 ) {
+ public int Compare( CS_GenreInfo g1,CS_GenreInfo g2 ) {
return cmp.Compare (g1._genre,g2._genre);
}
}
- public GenreInfo ()
+ public CS_GenreInfo ()
{
_genre="";
}
- public GenreInfo(string s) {
+ public CS_GenreInfo(string s) {
_genre=s;
}
diff --git a/src/CueSheets/Banshee.CueSheets/Data/CS_TrackInfoDb.cs b/src/CueSheets/Banshee.CueSheets/Data/CS_TrackInfoDb.cs
index f070664..cba7abf 100644
--- a/src/CueSheets/Banshee.CueSheets/Data/CS_TrackInfoDb.cs
+++ b/src/CueSheets/Banshee.CueSheets/Data/CS_TrackInfoDb.cs
@@ -1,6 +1,7 @@
using System;
using Banshee.Database;
using Hyena.Data.Sqlite;
+using System.Collections.Generic;
namespace Banshee.CueSheets
{
@@ -12,7 +13,7 @@ namespace Banshee.CueSheets
private readonly HyenaSqliteCommand _sql_get;
private readonly HyenaSqliteCommand _sql_insert;
private readonly HyenaSqliteCommand _sql_update;
-
+ private readonly HyenaSqliteCommand _sql_key_begin;
public CS_TrackInfoDb (BansheeDbConnection con) {
_con=con;
@@ -20,6 +21,7 @@ namespace Banshee.CueSheets
_sql_get=new HyenaSqliteCommand("SELECT type,value FROM cuesheet_info WHERE key=?");
_sql_insert=new HyenaSqliteCommand("INSERT INTO cuesheet_info VALUES(?,?,?)");
_sql_update=new HyenaSqliteCommand("UPDATE cuesheet_info SET type=?, value=? WHERE key=?");
+ _sql_key_begin=new HyenaSqliteCommand("SELECT key FROM cuesheet_info WHERE key LIKE ?");
try {
if (!_con.TableExists ("cuesheet_info")) {
_con.Query ("CREATE TABLE cuesheet_info(key varchar,type varchar,value varchar)");
@@ -81,6 +83,24 @@ namespace Banshee.CueSheets
val=_default;
}
}
+
+ public void Set(string key,double val) {
+ iSet (key,"double",val.ToString ());
+ }
+
+ public void Get(string key,out double val,double _default) {
+ string t,v;
+ if (iGet (key,out t,out v)) {
+ if (t=="double") {
+ val=Convert.ToDouble (v);
+ } else {
+ val=_default;
+ }
+ } else {
+ val=_default;
+ }
+ }
+
public void Set(string key,bool val) {
iSet (key,"bool",val.ToString ());
@@ -98,6 +118,34 @@ namespace Banshee.CueSheets
val=_default;
}
}
+
+ public void Set(string key,string val) {
+ iSet (key,"string",val);
+ }
+
+ public void Get(string key,out string val,string _default) {
+ string t,v;
+ if (iGet (key,out t,out v)) {
+ if (t=="string") {
+ val=v;
+ } else {
+ val=_default;
+ }
+ } else {
+ val=_default;
+ }
+ }
+
+ public List<string> getKeysStartingWith(string start) {
+ List<string> lst=new List<string>();
+ IDataReader rdr=_con.Query(_sql_key_begin,start+"%");
+ while (rdr.Read ()) {
+ string key=rdr.Get<string>("key");
+ Hyena.Log.Information ("key="+key);
+ lst.Add (key);
+ }
+ return lst;
+ }
}
}
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_Column.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_Column.cs
new file mode 100644
index 0000000..5212c45
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_Column.cs
@@ -0,0 +1,27 @@
+using System;
+using Hyena.Data.Gui;
+
+namespace Banshee.CueSheets
+{
+ public class CS_Column : Column
+ {
+ private string _id;
+
+ public CS_Column (string id,string t,ColumnCell c,double w) : base(t,c,w)
+ {
+ _id=id;
+ }
+
+ public string id() {
+ return _id;
+ }
+
+ protected override void OnWidthChanged ()
+ {
+ Hyena.Log.Information ("OnWidthChanged: id="+id()+", width="+Width);
+ base.OnWidthChanged ();
+ }
+
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_GenreListView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_GenreListView.cs
index 700b3d9..18c748a 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/CS_GenreListView.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_GenreListView.cs
@@ -30,7 +30,7 @@ using Hyena.Data.Gui;
namespace Banshee.CueSheets
{
- public class CS_GenreListView : TrackFilterListView<GenreInfo>
+ public class CS_GenreListView : TrackFilterListView<CS_GenreInfo>
{
protected CS_GenreListView (IntPtr ptr) : base () {}
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_MusicToDevice.cs
index 4583ce2..792ce69 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/MusicToDevice.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_MusicToDevice.cs
@@ -2,12 +2,12 @@ using System;
namespace Banshee.CueSheets
{
- public class MusicToDevice : Gtk.Dialog
+ public class CS_MusicToDevice : Gtk.Dialog
{
private CueSheet _sheet;
private Mp3Split _splt;
- public MusicToDevice (CueSheet s) {
+ public CS_MusicToDevice (CueSheet s) {
_sheet=s;
}
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListAdmin.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListAdmin.cs
new file mode 100644
index 0000000..ef53970
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListAdmin.cs
@@ -0,0 +1,111 @@
+using System;
+using Banshee.Collection.Gui;
+using Gtk;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListAdmin : Gtk.VBox
+ {
+ private CS_PlayListsModel _model;
+ private CS_PlayListCollection _col;
+ private Gtk.ScrolledWindow plsscroll,plscroll;
+ private CS_PlayListModel _pls_model;
+ private CS_PlayListView _pls_view;
+ private CS_PlayList _pls;
+ private Gtk.Entry _pls_name;
+
+ public CS_PlayListAdmin (CS_PlayListsView plsview,CS_PlayListsModel mdl,CS_PlayListCollection cl)
+ {
+ _col=cl;
+ _model=mdl;
+ Gtk.HBox hb=new Gtk.HBox();
+
+ Gtk.Button _add=new Gtk.Button(Gtk.Stock.Add);
+ _add.Clicked+=delegate (object sender,EventArgs args) {
+ OnAddPls();
+ };
+
+ Gtk.Button _remove=new Gtk.Button(Gtk.Stock.Remove);
+ _remove.Clicked+=delegate (object sender,EventArgs args) {
+ OnRemovePls();
+ };
+
+ hb.PackStart (_add);
+ hb.PackStart (_remove);
+
+ plsscroll=new Gtk.ScrolledWindow();
+ plsscroll.Add (plsview);
+
+ _pls=null;
+ _pls_name=new Gtk.Entry();
+ _pls_model=new CS_PlayListModel();
+ _pls_view=new CS_PlayListView();
+ _pls_view.SetModel (_pls_model);
+ plscroll=new Gtk.ScrolledWindow();
+ plscroll.Add (_pls_view);
+
+ _pls_view.DragEnd+=delegate(object sender,DragEndArgs args) {
+ Console.WriteLine (args);
+ };
+ Gtk.VBox plsvbox=new Gtk.VBox();
+ plsvbox.PackStart (_pls_name,false,false,2);
+ plsvbox.PackEnd (plscroll);
+
+ Gtk.VPaned vpn=new Gtk.VPaned();
+ vpn.Add1 (plsscroll);
+ vpn.Add2 (plsvbox);
+
+ base.PackStart (hb,false,false,2);
+ base.PackEnd (vpn);
+
+ base.ShowAll ();
+
+ mdl.SetListener (delegate(CS_PlayList pls) {
+ _pls=pls;
+ _pls_model.SetPlayList (_pls);
+ _pls_name.Text=_pls.PlsName;
+ });
+ }
+
+ public void OnAddPls() {
+ Hyena.Log.Information ("add playlist");
+ Gtk.Dialog dlg=new Gtk.Dialog();
+ dlg.Title="Add Playlist";
+ Gtk.Entry pls=new Gtk.Entry();
+ pls.WidthChars=40;
+ Gtk.Label lbl=new Gtk.Label("Playlist name:");
+ Gtk.HBox hb=new Gtk.HBox();
+ hb.PackStart (lbl,false,false,1);
+ hb.PackEnd (pls);
+ dlg.VBox.PackStart (hb);
+ dlg.AddButton (Gtk.Stock.Cancel,0);
+ dlg.AddButton (Gtk.Stock.Ok,1);
+ dlg.VBox.ShowAll ();
+ string plsname="";
+ while (plsname=="") {
+ int response=dlg.Run ();
+ if (response==0) {
+ dlg.Hide ();
+ dlg.Destroy ();
+ return;
+ } else {
+ plsname=pls.Text.Trim ();
+ }
+ }
+ dlg.Hide ();
+ dlg.Destroy ();
+ _pls=_col.NewPlayList(plsname);
+ _model.Reload ();
+ _pls_model.SetPlayList (_pls);
+ }
+
+ public void OnRemovePls() {
+ Hyena.Log.Information("remove playlist");
+ }
+
+ public void OnTrackAdd() {
+
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListView.cs
new file mode 100644
index 0000000..12df085
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListView.cs
@@ -0,0 +1,44 @@
+using System;
+using Banshee.Collection.Gui;
+using Hyena.Data.Gui;
+using System.Collections.Generic;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListView : TrackFilterListView<CueSheetEntry>
+ {
+ protected CS_PlayListView (IntPtr ptr) : base () {}
+
+ public CS_PlayListView () : base ()
+ {
+ column_controller.Add (new Column ("Entry", new ColumnCellText ("EntryName", true), 1.0));
+ ColumnController = column_controller;
+ base.ForceDragDestSet=true;
+ }
+
+ protected override bool OnPopupMenu() {
+ return false;
+ }
+
+ protected override bool OnDragDrop(Gdk.DragContext drg,int x,int y,uint time) {
+ Gtk.Widget w=Gtk.Drag.GetSourceWidget (drg);
+ if (w is CS_TrackListView) {
+ CS_TrackListView v=(CS_TrackListView) w;
+ CS_PlayListModel model=(CS_PlayListModel) this.Model;
+ CS_PlayList pls=model.PlayList;
+ if (pls!=null) {
+ List<CueSheetEntry> l=v.DragData;
+ foreach (CueSheetEntry e in l) {
+ pls.Add (e);
+ }
+ model.Reload ();
+ pls.Save ();
+ }
+ }
+ return false;
+ }
+
+
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListsView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListsView.cs
new file mode 100644
index 0000000..59cddd4
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_PlayListsView.cs
@@ -0,0 +1,45 @@
+using System;
+using Banshee.Collection.Gui;
+using Hyena.Data.Gui;
+using Hyena.Collections;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListsView : TrackFilterListView<CS_PlayList>
+ {
+ protected CS_PlayListsView (IntPtr ptr) : base () {}
+
+ private CueSheetsView _view;
+
+
+ public CS_PlayListsView (CueSheetsView view) : base ()
+ {
+ _view=view;
+ column_controller.Add (new Column ("Playlist", new ColumnCellText ("PlsName", true), 1.0));
+ ColumnController = column_controller;
+ }
+
+ protected override bool OnPopupMenu() {
+ Gtk.Menu mnu=new Gtk.Menu();
+
+ Gtk.ImageMenuItem play=new Gtk.ImageMenuItem(Gtk.Stock.MediaPlay,null);
+ play.Activated+=delegate(object sender,EventArgs a) {
+ _view.PlayPlayList((CS_PlayList) this.Model[Selection.FirstIndex]);
+ };
+
+ //Gtk.ImageMenuItem edit=new Gtk.ImageMenuItem(Gtk.Stock.Edit,null);
+ //edit.Activated+=delegate(object sender,EventArgs a) {
+ // _view.EditPlayList(((CS_PlayList) this.Model[Selection.FirstIndex]).getSheet ());
+ //};
+
+ mnu.Append (play);
+ mnu.Append (new Gtk.SeparatorMenuItem());
+ //mnu.Append (edit);
+ mnu.ShowAll ();
+ mnu.Popup();
+
+ return false;
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CS_TrackListView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CS_TrackListView.cs
new file mode 100644
index 0000000..adb88f4
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CS_TrackListView.cs
@@ -0,0 +1,83 @@
+using System;
+using Banshee.Collection.Gui;
+using Hyena.Data.Gui;
+using Banshee.Collection;
+using System.Collections.Generic;
+
+namespace Banshee.CueSheets
+{
+ public class CS_TrackListView : TrackFilterListView<CueSheetEntry>
+ {
+ protected CS_TrackListView (IntPtr ptr) : base () {}
+
+ private CueSheetsView _view;
+ private CS_Column _nr;
+ private CS_Column _track;
+ private CS_Column _piece;
+ private CS_Column _artist;
+ private CS_Column _composer;
+ private CS_Column _length;
+
+ public CS_TrackListView (CueSheetsView view) : base ()
+ {
+ _view=view;
+ Hyena.Log.Information ("view="+_view);
+
+ _nr=new CS_Column ("tracknr","Nr", new ColumnCellText ("TrackNumber", true),1.0);
+ column_controller.Add (_nr);
+
+ _track=new CS_Column ("track","Track", new ColumnCellText ("TrackTitle", true),1.0);
+ column_controller.Add (_track);
+
+ _piece=new CS_Column ("piece","Piece", new ColumnCellText ("Piece", true),1.0);
+ column_controller.Add (_piece);
+
+ _artist=new CS_Column ("artist","Artist", new ColumnCellText ("ArtistName", true),1.0);
+ column_controller.Add (_artist);
+
+ _composer=new CS_Column ("composer","Composer", new ColumnCellText ("Composer", true),1.0);
+ column_controller.Add (_composer);
+
+ _length=new CS_Column ("length","Length", new ColumnCellText ("Length", true),1.0);
+ column_controller.Add (_length);
+
+ ColumnController = column_controller;
+ base.HeaderVisible=true;
+
+ }
+
+ protected override bool OnPopupMenu() {
+ return false;
+ }
+
+ private List<CueSheetEntry> _dragentry=new List<CueSheetEntry>();
+ public List<CueSheetEntry> DragData {
+ get { return _dragentry; }
+ set { _dragentry=value; }
+ }
+
+ protected override void OnDragDataGet (Gdk.DragContext context, Gtk.SelectionData selection_data, uint info, uint time_)
+ {
+ Console.WriteLine ("getting data?");
+ //TrackListModel model=_view.GetSource().TrackModel;
+ CS_TrackListModel model=(CS_TrackListModel) this.Model;
+ System.Text.StringBuilder sb = new System.Text.StringBuilder ();
+ List<CueSheetEntry> l=new List<CueSheetEntry>();
+
+ foreach (TrackInfo track in model.SelectedItems) {
+ CueSheetEntry e=(CueSheetEntry) track;
+ l.Add (e);
+ Console.WriteLine ("id="+e.id());
+ //string id=e.id ();
+ //sb.Append (id);
+ //sb.Append ("#@#");
+ }
+ byte [] data = System.Text.Encoding.UTF8.GetBytes (sb.ToString ());
+ selection_data.Set (context.Targets[0], 8, data, data.Length);
+ Console.WriteLine(sb.ToString ());
+ //context.Data.Add ("tracks",sb.ToString ());
+ DragData=l;
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs b/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
index 799dbcb..6970d2d 100644
--- a/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
+++ b/src/CueSheets/Banshee.CueSheets/Gui/CueSheetsView.cs
@@ -30,22 +30,24 @@ namespace Banshee.CueSheets
{
public class CueSheetsView : ISourceContents
{
- private Gtk.ListStore store;
+ private CS_TrackListModel store;
private Gtk.VBox box;
private Gtk.ScrolledWindow ascroll,tscroll,aascroll,gscroll,ccscroll;
private int index=-1;
private CueSheetsSource MySource=null;
private CS_AlbumListView aview;
- private Gtk.TreeView view;
+ private CS_TrackListView view;
private CS_ArtistListView aaview;
private CS_ComposerListView ccview;
private CS_GenreListView gview;
+ private CS_PlayListsView plsview;
+ private CS_PlayListAdmin plsadmin;
private Gtk.HPaned hb;
private Gtk.HPaned hb1;
+ private Gtk.HPaned hbpls;
private Gtk.VPaned vp;
private Gtk.Toolbar bar;
private Gtk.Label filling;
- private Gtk.TreeViewColumn c_track,c_piece,c_artist,c_composer;
private uint _position=0;
private bool _set_position=false;
@@ -154,6 +156,8 @@ namespace Banshee.CueSheets
Hyena.Log.Information(MySource.getGenreModel ().Count.ToString ());
Hyena.Log.Information("Reload tracks");
MySource.getTrackModel ().Reload ();
+ Hyena.Log.Information("Reload play lists");
+ MySource.getPlayListsModel().Reload();
Hyena.Log.Information("Reloaded all");
} catch(System.Exception e) {
Hyena.Log.Information (e.ToString());
@@ -171,6 +175,9 @@ namespace Banshee.CueSheets
}
}
+ private string _song_file=null;
+ private string _song_id=null;
+
public void seekSong(int i) {
Hyena.Log.Information("SeekSong called "+i);
try {
@@ -181,6 +188,12 @@ namespace Banshee.CueSheets
}
}
CueSheetEntry e=sheet.entry (i);
+ _song_id=e.id ();
+ if (_song_file!=e.file ()) {
+ ServiceManager.PlayerEngine.Open (e);
+ ServiceManager.PlayerEngine.Play ();
+ _song_file=e.file ();
+ }
double offset=e.offset ();
ServiceManager.PlayerEngine.SetCurrentTrack(e);
_position=(uint) (offset*1000.0);
@@ -213,63 +226,58 @@ namespace Banshee.CueSheets
}
// Every N ms
- private int timeout=100;
- private int mscount=0;
- private int chgcount=3000/100; // every 3 seconds
+ private int timeout=100;
+ private int mscount=0;
+ private int chgcount=3000/100; // every 3 seconds
+ //private CueSheetEntry _playing=null;
public bool PositionDisplay() {
- CueSheet sheet=MySource.getSheet ();
if (ServiceManager.PlaybackController.Source==MySource) {
- if (sheet!=null) {
- mscount+=1;
- if (mscount>chgcount) { mscount=0; }
-
- // Position if necessary
- if (_set_position) {
- _set_position=false;
- _positioning=true;
- ServiceManager.PlayerEngine.Position=_position;
- }
+ CueSheet sheet=MySource.getSheet ();
+ if (sheet!=null) {
+ mscount+=1;
+ if (mscount>chgcount) { mscount=0; }
- // Do nothing while seeking
- uint pos=ServiceManager.PlayerEngine.Position;
- double p=((double) pos)/1000.0;
- if (_positioning && pos<=_position) {
- //Hyena.Log.Information ("seek="+_position+", pos="+pos);
- // do nothing
- } else {
- _positioning=false;
- // Track number
- int i=sheet.searchIndex(p);
- if (i!=index && i>=0) {
- // Handle repeat track
- if (ServiceManager.PlaybackController.RepeatMode==PlaybackRepeatMode.RepeatSingle) {
- seekSong (index);
- }
- // Every 2 seconds
- if (mscount==0) {
- index=i;
- CueSheetEntry e=sheet.entry(index);
- ServiceManager.PlayerEngine.SetCurrentTrack (e);
- }
+ // Position if necessary
+ if (_set_position) {
+ _set_position=false;
+ _positioning=true;
+ ServiceManager.PlayerEngine.Position=_position;
}
-
- if (mscount==0 && index>=0) {
- int [] idx=new int[1];
- idx[0]=index;
- Gtk.TreePath path=new Gtk.TreePath(idx);
- //Hyena.Log.Information ("Setting cursor: "+index+", path=");
- Gtk.TreeViewColumn c=new Gtk.TreeViewColumn();
- Gtk.TreePath pp;
- view.GetCursor (out pp,out c);
- if (pp==null || (pp.Indices[0]!=index && pp.Indices[0]>=0)) {
- view.SetCursor (path,null,false);
+ // Do nothing while seeking
+ uint pos=ServiceManager.PlayerEngine.Position;
+ double p=((double) pos)/1000.0;
+ if (_positioning && pos<=_position) {
+ //Hyena.Log.Information ("seek="+_position+", pos="+pos);
+ // do nothing
+ } else {
+ _positioning=false;
+ // Track number
+ int i=sheet.searchIndex(_song_id,p);
+ if (i!=index && i>=0) {
+ // Handle repeat track
+ if (ServiceManager.PlaybackController.RepeatMode==PlaybackRepeatMode.RepeatSingle) {
+ seekSong (index);
+ }
+ // Every 2 seconds
+ if (mscount==0) {
+ Hyena.Log.Information("Found index i="+i+", songid="+_song_id);
+ index=i;
+ CueSheetEntry e=sheet.entry(index);
+ ServiceManager.PlayerEngine.SetCurrentTrack (e);
+ }
+ }
+
+ if (mscount==0 && index>=0) {
+ Hyena.Log.Information ("mscount="+mscount+", index="+index);
+ view.ScrollTo(index);
+ view.Selection.QuietUnselect (view.Selection.FirstIndex);
+ view.Selection.Select(index);
}
}
+
}
-
- }
}
return true;
}
@@ -298,31 +306,30 @@ namespace Banshee.CueSheets
return true;
}
+ private int _set_column_sizes=0;
+
public void setColumnSizes(CueSheet s) {
- c_track.FixedWidth=MySource.getColumnWidth("track",s.id ());
- c_piece.FixedWidth=MySource.getColumnWidth("piece",s.id ());
- c_artist.FixedWidth=MySource.getColumnWidth("artist",s.id ());
- c_composer.FixedWidth=MySource.getColumnWidth("composer",s.id ());
+ int N=view.ColumnController.Count;
+ int i;
+ for(i=0;i<N;i++) {
+ _set_column_sizes+=1;
+ CS_Column col=(CS_Column) view.ColumnController[i];
+ double w=(i==0) ? 0.05 : 0.16;
+ if (s!=null) {
+ w=MySource.getColumnWidth (col.id(),s.id ());
+ }
+ col.Width=w;
+ }
}
public void loadCueSheet(CueSheet s) { //,Gtk.ListStore store) {
- setColumnSizes (s);
+ MySource.setSheet(s);
CueSheet sheet=MySource.getSheet ();
- //type="cuesheet";
- sheet.Clear ();
- sheet.load (s);
- store.Clear ();
- int i=0;
- for(i=0;i<sheet.nEntries ();i++) {
- CueSheetEntry e=sheet.entry (i);
- double l=e.length ();
- int t=(int) (l*100.0);
- int m=t/(60*100);
- int secs=(t/100)%60;
- string ln=String.Format ("{0:00}:{0:00}",m,secs);
- store.AppendValues (i+1,e.title (),e.getPiece (),e.performer (),e.getComposer(),ln);
- }
+ store.SetSheet(sheet);
+ store.Reload ();
reLoad ();
+ Hyena.Log.Information ("Setting column sizes for "+s.id ());
+ setColumnSizes (s);
}
public void loadCueSheet(int i) {
@@ -338,9 +345,16 @@ namespace Banshee.CueSheets
}
public void MusicFileToDevice(CueSheet s) {
- MusicToDevice mtd=new MusicToDevice(s);
+ CS_MusicToDevice mtd=new CS_MusicToDevice(s);
mtd.Do ();
}
+
+ public void PlayPlayList (CS_PlayList pls)
+ {
+ Hyena.Log.Information ("Playing playlist "+pls.PlsName);
+ CueSheet s=pls.GetCueSheet ();
+ loadCueSheet (s);
+ }
public void ToggleGrid(string forId) {
Hyena.Log.Information ("ToggleGrid for id "+forId);
@@ -356,7 +370,7 @@ namespace Banshee.CueSheets
public void ToggleGrid() {
ArtistInfo aa=MySource.getAlbumModel().filterArtist();
- GenreInfo gg=MySource.getAlbumModel().filterGenre();
+ CS_GenreInfo gg=MySource.getAlbumModel().filterGenre();
string fa="";
bool in_tracks=false;
MySource.getAlbumModel ().filterAlbumOrTracks(out fa,out in_tracks);
@@ -372,7 +386,7 @@ namespace Banshee.CueSheets
public void SetGrid() {
ArtistInfo aa=MySource.getAlbumModel().filterArtist();
- GenreInfo gg=MySource.getAlbumModel().filterGenre();
+ CS_GenreInfo gg=MySource.getAlbumModel().filterGenre();
string fa="";
bool in_tracks=false;
MySource.getAlbumModel ().filterAlbumOrTracks(out fa,out in_tracks);
@@ -395,83 +409,60 @@ namespace Banshee.CueSheets
basedir=MySource.getCueSheetDir ();
- store = new Gtk.ListStore(typeof(int),typeof(string),typeof(string),typeof(string),typeof(string),typeof(string));
- view = new Gtk.TreeView();
-
- Gtk.CellRendererText cr_txt=new Gtk.CellRendererText();
- cr_txt.Scale=0.8;
- cr_txt.Ellipsize=Pango.EllipsizeMode.End;
+ store = new CS_TrackListModel();
+ view = new CS_TrackListView(this);
- Gtk.CellRendererText cr_other=new Gtk.CellRendererText();
- cr_other.Scale=0.8;
-
- {
- CueSheet s=MySource.getSheet ();
-
- view.AppendColumn ("Nr.", cr_other, "text", 0);
- c_track=new Gtk.TreeViewColumn("Track",cr_txt,"text",1);
- c_track.Sizing=Gtk.TreeViewColumnSizing.Fixed;
- c_track.FixedWidth=MySource.getColumnWidth("track",s.id());
- c_track.Resizable=true;
- c_track.AddNotification ("width",delegate(object o, GLib.NotifyArgs args) {
- MySource.setColumnWidth ("track",s.id(),c_track.Width);
- });
- view.AppendColumn (c_track);
-
- c_piece=new Gtk.TreeViewColumn("Piece",cr_txt,"text",2);
- c_piece.FixedWidth=MySource.getColumnWidth("piece",s.id ());
- c_piece.Sizing=Gtk.TreeViewColumnSizing.Fixed;
- c_piece.Resizable=true;
- c_piece.AddNotification ("width",delegate(object o, GLib.NotifyArgs args) {
- MySource.setColumnWidth ("piece",s.id (),c_piece.Width);
- });
- view.AppendColumn (c_piece);
-
- c_artist=new Gtk.TreeViewColumn("Artist",cr_txt,"text",3);
- c_artist.Sizing=Gtk.TreeViewColumnSizing.Fixed;
- c_artist.FixedWidth=MySource.getColumnWidth("artist",s.id ());
- c_artist.AddNotification("width",delegate(object o, GLib.NotifyArgs args) {
- MySource.setColumnWidth ("artist",s.id (),c_artist.Width);
- });
- c_artist.Resizable=true;
- view.AppendColumn (c_artist);
-
- c_composer=new Gtk.TreeViewColumn("Composer",cr_txt,"text",4);
- c_composer.Sizing=Gtk.TreeViewColumnSizing.Fixed;
- c_composer.FixedWidth=MySource.getColumnWidth("composer",s.id ());
- c_composer.AddNotification("width",delegate(object o, GLib.NotifyArgs args) {
- MySource.setColumnWidth ("composer",s.id(),c_composer.Width);
- });
- c_composer.Resizable=true;
- view.AppendColumn (c_composer);
-
- view.AppendColumn ("length", cr_other, "text", 5);
+ {
+ ColumnController colc=view.ColumnController;
+ int i,N;
+ for(i=0,N=colc.Count;i<N;i++) {
+ CS_Column col=(CS_Column) colc[i];
+ col.WidthChanged+=delegate(object sender,EventArgs args) {
+ Hyena.Log.Information ("set-column-sizes="+_set_column_sizes);
+ if (_set_column_sizes<=0) {
+ _set_column_sizes=0;
+ MySource.setColumnWidth (col.id(),MySource.getSheet ().id (),col.Width);
+ } else {
+ _set_column_sizes-=1;
+ }
+ };
+ }
}
-
- view.CursorChanged += new EventHandler(EvtCursorChanged);
- view.RowActivated += new Gtk.RowActivatedHandler(EvtTrackRowActivated);
- view.Model = store;
+
+ view.SetModel(store);
+ this.setColumnSizes(null);
Hyena.Log.Information("New albumlist");
aview=new CS_AlbumListView(this);
aaview=new CS_ArtistListView();
ccview=new CS_ComposerListView();
gview=new CS_GenreListView();
+ try {
+ plsview=new CS_PlayListsView(this);
+ } catch (System.Exception ex) {
+ Hyena.Log.Error (ex.ToString ());
+ }
+
Hyena.Log.Information("init models");
aview.SetModel (MySource.getAlbumModel ());
aaview.SetModel (MySource.getArtistModel ());
gview.SetModel (MySource.getGenreModel ());
ccview.SetModel (MySource.getComposerModel());
+ plsview.SetModel(MySource.getPlayListsModel());
+ plsadmin=new CS_PlayListAdmin(plsview,MySource.getPlayListsModel(),MySource.getPlayListCollection());
+
MySource.getGenreModel();
Hyena.Log.Information("model albumlist");
Hyena.Log.Information("albumlist initialized");
aview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<AlbumInfo>(EvtRowActivated);
aview.Selection.Changed += HandleAviewSelectionChanged;
- gview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<GenreInfo>(EvtGenreActivated);
+ gview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<CS_GenreInfo>(EvtGenreActivated);
aaview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<ArtistInfo>(EvtArtistActivated);
ccview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<CS_ComposerInfo>(EvtComposerActivated);
+ plsview.RowActivated+=new Hyena.Data.Gui.RowActivatedHandler<CS_PlayList>(EvtPlayListActivated);
+ view.RowActivated+=new RowActivatedHandler<CueSheetEntry>(EvtTrackRowActivated);
bar=new Gtk.Toolbar();
if (basedir==null) {
@@ -526,17 +517,24 @@ namespace Banshee.CueSheets
vp.Add (hb1);
vp.Add (tscroll);
+ Gtk.HPaned hppls=new Gtk.HPaned();
+ hppls.Add1 (vp);
+ hppls.Add2 (plsadmin);
+ hbpls=hppls;
+
{
- int hb_p,hb1_p,vp_p;
- MySource.getPositions (out hb_p,out hb1_p,out vp_p);
+ int hb_pls,hb_p,hb1_p,vp_p;
+ MySource.getPositions (out hb_pls,out hb_p,out hb1_p,out vp_p);
+ hppls.Position=hb_pls;
hb.Position=hb_p;
hb1.Position=hb1_p;
vp.Position=vp_p;
}
+
box = new Gtk.VBox();
box.PackStart (bar,false,true,0);
- box.PackStart (vp);
+ box.PackStart (hppls);
box.ShowAll();
GLib.Timeout.Add ((uint) 1000,(GLib.TimeoutHandler) GardDividers);
@@ -554,12 +552,14 @@ namespace Banshee.CueSheets
int hb_prev=-1;
int hb1_prev=-1;
int vp_prev=-1;
+ int hbpls_prev=-1;
public bool GardDividers() {
if (hb_prev==-1) {
hb_prev=hb.Position;
hb1_prev=hb1.Position;
vp_prev=vp.Position;
+ hbpls_prev=hbpls.Position;
}
bool changed=false;
if (hb_prev!=hb.Position) {
@@ -574,13 +574,16 @@ namespace Banshee.CueSheets
vp_prev=vp.Position;
changed=true;
}
+ if (hbpls_prev!=hbpls.Position) {
+ hbpls_prev=hbpls.Position;
+ changed=true;
+ }
if (changed) {
- MySource.setPositions(hb_prev,hb1_prev,vp_prev);
+ MySource.setPositions(hbpls_prev,hb_prev,hb1_prev,vp_prev);
}
return true;
}
-
public void EvtCursorChanged(object sender,EventArgs a) {
mscount=0;
}
@@ -607,8 +610,8 @@ namespace Banshee.CueSheets
PlayAlbum (a);
}
- public void EvtGenreActivated(object sender,RowActivatedArgs<GenreInfo> args) {
- GenreInfo g=args.RowValue;
+ public void EvtGenreActivated(object sender,RowActivatedArgs<CS_GenreInfo> args) {
+ CS_GenreInfo g=args.RowValue;
if (MySource.getGenreModel ().isNullGenre (g)) { g=null; }
MySource.getAlbumModel ().filterGenre(g);
MySource.getArtistModel ().filterGenre(g);
@@ -626,7 +629,6 @@ namespace Banshee.CueSheets
}
public void EvtComposerActivated(object sender,RowActivatedArgs<CS_ComposerInfo> args) {
- //Hyena.Log.Information("I'm here! "+sender+", "+args);
CS_ComposerInfo a=(CS_ComposerInfo) args.RowValue;
if (MySource.getComposerModel ().isNullComposer (a)) { a=null; }
MySource.getAlbumModel ().filterComposer(a);
@@ -634,23 +636,23 @@ namespace Banshee.CueSheets
SetGrid ();
}
+ public void EvtPlayListActivated(object sender,RowActivatedArgs<CS_PlayList> args) {
+ Hyena.Log.Information("I'm here! "+sender+", "+args);
+
+
+ //CS_ComposerInfo a=(CS_ComposerInfo) args.RowValue;
+ //if (MySource.getComposerModel ().isNullComposer (a)) { a=null; }
+ //MySource.getAlbumModel ().filterComposer(a);
+ //MySource.getArtistModel ().filterComposer (a);
+ //SetGrid ();
+ }
- public void EvtTrackRowActivated(object sender,Gtk.RowActivatedArgs args) {
+ public void EvtTrackRowActivated(object sender,RowActivatedArgs<CueSheetEntry> args) {
Hyena.Log.Information ("Row activated, seeking");
- Gtk.TreeSelection selection = (sender as Gtk.TreeView).Selection;
- Gtk.TreeModel model;
- Gtk.TreeIter iter;
- if (selection.GetSelected(out model, out iter)) {
- if (ServiceManager.PlaybackController.Source != MySource) {
- reLoad ();
- }
- int track=(int) model.GetValue (iter,0);
- int i=track-1;
- seekSong (i);
- index=i;
- }
+ seekSong (args.Row);
}
+ public CueSheetsSource GetSource() { return MySource; }
public bool SetSource (ISource source) { return true; }
public void ResetSource () { }
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_AlbumModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_AlbumModel.cs
index c6c37b1..34e4db8 100644
--- a/src/CueSheets/Banshee.CueSheets/Model/CS_AlbumModel.cs
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_AlbumModel.cs
@@ -36,7 +36,7 @@ namespace Banshee.CueSheets
{
private CueSheetsSource MySource;
private List<CS_AlbumInfo> _filteredList;
- private GenreInfo _genre;
+ private CS_GenreInfo _genre;
private ArtistInfo _artist;
private CS_ComposerInfo _composer;
private string _album_search;
@@ -109,7 +109,7 @@ namespace Banshee.CueSheets
base.RaiseReloaded ();
}
- public void filterGenre(GenreInfo g) {
+ public void filterGenre(CS_GenreInfo g) {
if (g==null) {
_genre=null;
Reload ();
@@ -130,7 +130,7 @@ namespace Banshee.CueSheets
}
}
- public GenreInfo filterGenre() {
+ public CS_GenreInfo filterGenre() {
return _genre;
}
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_ArtistModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_ArtistModel.cs
index cfe459b..a22a872 100644
--- a/src/CueSheets/Banshee.CueSheets/Model/CS_ArtistModel.cs
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_ArtistModel.cs
@@ -36,7 +36,7 @@ namespace Banshee.CueSheets
private CueSheetsSource MySource;
private List<CS_ArtistInfo> _artists;
private CS_ArtistInfo _nullArtist;
- private GenreInfo _genre;
+ private CS_GenreInfo _genre;
private CS_ComposerInfo _composer;
public CS_ArtistModel (CueSheetsSource s) {
@@ -95,7 +95,7 @@ namespace Banshee.CueSheets
}
}
- public void filterGenre(GenreInfo g) {
+ public void filterGenre(CS_GenreInfo g) {
_genre=g;
Reload ();
}
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_ComposerModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_ComposerModel.cs
index a618634..4631231 100644
--- a/src/CueSheets/Banshee.CueSheets/Model/CS_ComposerModel.cs
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_ComposerModel.cs
@@ -9,7 +9,7 @@ namespace Banshee.CueSheets
private CueSheetsSource MySource;
private List<CS_ComposerInfo> _composers;
private CS_ComposerInfo _nullComposer;
- private GenreInfo _genre;
+ private CS_GenreInfo _genre;
private ArtistInfo _artist;
public CS_ComposerModel (CueSheetsSource s) {
@@ -68,7 +68,7 @@ namespace Banshee.CueSheets
}
}
- public void filterGenre(GenreInfo g) {
+ public void filterGenre(CS_GenreInfo g) {
_genre=g;
Reload ();
}
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_GenreModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_GenreModel.cs
index bad8784..992e4c6 100644
--- a/src/CueSheets/Banshee.CueSheets/Model/CS_GenreModel.cs
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_GenreModel.cs
@@ -32,16 +32,16 @@ using Banshee.Collection.Database;
namespace Banshee.CueSheets
{
- public class CS_GenreModel : BansheeListModel<GenreInfo>
+ public class CS_GenreModel : BansheeListModel<CS_GenreInfo>
{
- private CueSheetsSource MySource;
- private List<GenreInfo> _genres;
- private GenreInfo _nullGenre;
+ private CueSheetsSource MySource;
+ private List<CS_GenreInfo> _genres;
+ private CS_GenreInfo _nullGenre;
public CS_GenreModel (CueSheetsSource s) {
MySource=s;
- _nullGenre=new GenreInfo("<All Genres>");
- _genres=new List<GenreInfo>();
+ _nullGenre=new CS_GenreInfo("<All Genres>");
+ _genres=new List<CS_GenreInfo>();
Selection=new Hyena.Collections.Selection();
}
@@ -63,15 +63,15 @@ namespace Banshee.CueSheets
for(int i=0;i<s.Count;i++) {
string gen=Loosely.prepare (s[i].genre ());
if (!added.Contains (gen)) {
- _genres.Add (new GenreInfo(s[i].genre ()));
+ _genres.Add (new CS_GenreInfo(s[i].genre ()));
added.Add (gen);
}
}
- _genres.Sort(new GenreInfo.Comparer());
+ _genres.Sort(new CS_GenreInfo.Comparer());
base.RaiseReloaded ();
}
- public bool isNullGenre(GenreInfo g) {
+ public bool isNullGenre(CS_GenreInfo g) {
return g==_nullGenre;
}
@@ -81,7 +81,7 @@ namespace Banshee.CueSheets
}
}
- public override GenreInfo this[int index] {
+ public override CS_GenreInfo this[int index] {
get {
return _genres[index];
}
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListModel.cs
new file mode 100644
index 0000000..d277302
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListModel.cs
@@ -0,0 +1,74 @@
+//
+// CS_PlayListModel.cs
+//
+// Authors:
+// Hans Oesterholt <hans@oesterholt.net>
+//
+// Copyright (C) 2013 Hans Oesterholt
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using Banshee.Collection;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListModel : BansheeListModel<CueSheetEntry>
+ {
+ private CS_PlayList _pls;
+
+ public CS_PlayListModel () {
+ _pls=null;
+ Selection=new Hyena.Collections.Selection();
+ }
+
+ public override void Clear () {
+ // does nothing
+ }
+
+ public override void Reload () {
+ base.RaiseReloaded ();
+ }
+
+ public void SetPlayList(CS_PlayList pls) {
+ _pls=pls;
+ Reload ();
+ }
+
+ public CS_PlayList PlayList {
+ get { return _pls; }
+ set { SetPlayList (value); }
+ }
+
+ public override int Count {
+ get {
+ if (_pls==null) { return 0; }
+ else { return _pls.Count; }
+ }
+ }
+
+ public override CueSheetEntry this[int index] {
+ get {
+ return _pls[index];
+ }
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListsModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListsModel.cs
new file mode 100644
index 0000000..f31b05c
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_PlayListsModel.cs
@@ -0,0 +1,68 @@
+using System;
+using Banshee.Collection;
+using Hyena.Collections;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListsModel : BansheeListModel<CS_PlayList>
+ {
+ //private CueSheetsSource MySource;
+ private CS_PlayListCollection _pla;
+ public delegate void Listener(CS_PlayList pls);
+ private Listener _listener=null;
+
+ public CS_PlayListsModel (CS_PlayListCollection pls) {
+ _pla=pls;
+ Selection=new Hyena.Collections.Selection();
+ Selection.Changed+=delegate(object sender,EventArgs args) {
+ try {
+ int index=((Selection) sender).FirstIndex;
+ if (index>=0) {
+ CS_PlayList pl=(CS_PlayList) this[index];
+ Hyena.Log.Information ("playlist="+pl);
+ OnPlayListSelect(pl);
+ }
+ } catch(System.Exception ex) {
+ Hyena.Log.Error (ex.ToString ());
+ }
+ };
+ }
+
+ private void OnPlayListSelect(CS_PlayList pls) {
+ if (_listener!=null) {
+ _listener(pls);
+ }
+ }
+
+ public void SetListener(Listener f) {
+ _listener=f;
+ }
+
+
+ public CS_PlayListCollection Collection {
+ get { return _pla; }
+ }
+
+ public override void Clear () {
+ // does nothing
+ }
+
+ public override void Reload () {
+ _pla.Reload ();
+ base.RaiseReloaded();
+ }
+
+ public override int Count {
+ get {
+ return _pla.Count;
+ }
+ }
+
+ public override CS_PlayList this[int index] {
+ get {
+ return _pla[index];
+ }
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Model/CS_TrackListModel.cs b/src/CueSheets/Banshee.CueSheets/Model/CS_TrackListModel.cs
new file mode 100644
index 0000000..e3539a4
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Model/CS_TrackListModel.cs
@@ -0,0 +1,66 @@
+using System;
+using Banshee.Collection;
+using System.Collections.Generic;
+
+namespace Banshee.CueSheets
+{
+ public class CS_TrackListModel : BansheeListModel<CueSheetEntry> {
+
+ private CueSheet _sheet;
+ private List<CueSheetEntry> store;
+
+ public CS_TrackListModel () {
+ Selection=new Hyena.Collections.Selection();
+ store=new List<CueSheetEntry>();
+ }
+
+ public override void Clear () {
+ // does nothing
+ }
+
+ public void SetSheet(CueSheet s) {
+ _sheet=s;
+ }
+
+ public override void Reload () {
+ store.Clear ();
+ int i=0;
+ for(i=0;i<_sheet.nEntries ();i++) {
+ CueSheetEntry e=_sheet.entry (i);
+ store.Add (e);
+ /*double l=e.length ();
+ int t=(int) (l*100.0);
+ int m=t/(60*100);
+ int secs=(t/100)%60;
+ string ln=String.Format ("{0:00}:{0:00}",m,secs);
+ store.AppendValues (i+1,e.title (),e.getPiece (),e.performer (),e.getComposer(),ln);*/
+ }
+ base.RaiseReloaded ();
+ }
+
+ public override int Count {
+ get {
+ return store.Count;
+ }
+ }
+
+ public override CueSheetEntry this[int index] {
+ get {
+ return store[index];
+ }
+ }
+
+ /*
+ public CS_TrackListModel () : base(typeof(int),
+ typeof(string),
+ typeof(string),
+ typeof(string),
+ typeof(string),
+ typeof(string))
+ {
+
+ }*/
+
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs
new file mode 100644
index 0000000..8d18e32
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayList.cs
@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.Text.RegularExpressions;
+using System.Collections;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayList
+ {
+ private List<CS_PlayListEntry> _playlist;
+ private string _name;
+ private CueSheetCollection _csc;
+ private CS_TrackInfoDb _db;
+
+ public class Comparer : IComparer<CS_PlayList> {
+ private CaseInsensitiveComparer cmp=new CaseInsensitiveComparer();
+ public int Compare( CS_PlayList g1,CS_PlayList g2 ) {
+ return cmp.Compare (g1._name,g2._name);
+ }
+ }
+
+ public string PlsName {
+ get { return _name; }
+ set { _name=value; }
+ }
+
+ public CS_PlayList (CS_TrackInfoDb con,string name,CueSheetCollection csc) {
+ _playlist=new List<CS_PlayListEntry>();
+ _db=con;
+ _name=name;
+ _csc=csc;
+ Load();
+ }
+
+ public void Add(CueSheetEntry e) {
+ _playlist.Add (new CS_PlayListEntry(e));
+ //Insert (e,_playlist.Count);
+ }
+
+ public void Insert(CueSheetEntry e,int index) {
+ CS_PlayListEntry ple=new CS_PlayListEntry(e);
+ Hyena.Log.Information ("index="+index+", e="+e);
+ _playlist.Insert (index,ple);
+ }
+
+ public int Count {
+ get { return _playlist.Count; }
+ }
+
+ public CueSheetEntry this[int index] {
+ get {
+ CS_PlayListEntry ple=_playlist[index];
+ return ple.GetCueSheetEntry();
+ }
+ }
+
+ public CueSheet GetCueSheet() {
+ CueSheet s=new CueSheet();
+ s.SetTitle (_name);
+ foreach (CS_PlayListEntry ple in _playlist) {
+ s.AddEntry(ple.GetCueSheetEntry ());
+ }
+ return s;
+ }
+
+ public void Save() {
+ string pls="";
+ string sep="";
+ Hyena.Log.Information("Playlist="+_playlist);
+ foreach (CS_PlayListEntry ple in _playlist) {
+ Hyena.Log.Information ("ple="+ple);
+ CueSheetEntry e=ple.GetCueSheetEntry ();
+ Hyena.Log.Information ("e="+e);
+ CueSheet s=e.getCueSheet();
+ Hyena.Log.Information("sheet="+s+", entry="+e);
+ string id=s.id ();
+ string e_id=e.id ();
+ string entry="cuesheet="+id+"%%%entry="+e_id;
+ pls+=sep;
+ pls+=entry;
+ sep="#@%@#";
+ }
+ _db.Set("playlist:"+_name,pls);
+ }
+
+ public void Load() {
+ string pls=null;
+ _db.Get("playlist:"+_name,out pls,null);
+ if (pls==null) {
+ return;
+ } else {
+ string [] entries=Regex.Split (pls,"#@%@#");
+ //Hyena.Log.Information ("playlist name="+pls+", entries="+entries);
+ foreach (string e in entries) {
+ Hyena.Log.Information ("entry="+e);
+ if (e!="") {
+ string []ids=Regex.Split (e,"%%%");
+ string cs_id=ids[0].Substring ("cuesheet=".Length);
+ string cs_e=ids[1].Substring("entry=".Length);
+ //Hyena.Log.Information ("finding: cs-id="+cs_id+", e-id="+cs_e);
+ CueSheetEntry entry=_csc.FindEntry(cs_id,cs_e);
+ if (entry!=null) {
+ Hyena.Log.Information("adding entry:"+entry);
+ Add (entry);
+ }
+ }
+ }
+ }
+ }
+
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListCollection.cs b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListCollection.cs
new file mode 100644
index 0000000..56f7b39
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListCollection.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListCollection : List<CS_PlayList>
+ {
+ private CS_TrackInfoDb _db;
+ private CueSheetCollection _csc;
+
+ public CS_PlayListCollection (CS_TrackInfoDb db,CueSheetCollection csc) {
+ _csc=csc;
+ _db=db;
+ }
+
+ public void Load() {
+ Reload ();
+ }
+
+ public void Reload() {
+ base.Clear ();
+ List<string> keys=_db.getKeysStartingWith("playlist:");
+ foreach (string key in keys) {
+ Hyena.Log.Information ("adding key"+key);
+ string name=key.Substring(9);
+ CS_PlayList pl=new CS_PlayList(_db,name,_csc);
+ Add (pl);
+ }
+ base.Sort (new CS_PlayList.Comparer());
+ }
+
+ public CS_PlayList NewPlayList(string name) {
+ CS_PlayList pls=new CS_PlayList(_db,name,_csc);
+ pls.Save ();
+ return pls;
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListEntry.cs b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListEntry.cs
new file mode 100644
index 0000000..b1d1a48
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/Playlists/CS_PlayListEntry.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace Banshee.CueSheets
+{
+ public class CS_PlayListEntry
+ {
+ private CueSheetEntry _e;
+
+ public CS_PlayListEntry (CueSheetEntry e) {
+ _e=e;
+ Hyena.Log.Information ("ple: construct entry="+_e);
+ }
+
+ public CueSheetEntry GetCueSheetEntry() {
+ Hyena.Log.Information ("ple: entry");
+ Hyena.Log.Information ("ple: entry="+_e);
+ return _e;
+ }
+
+ public override string ToString() {
+ return "ple: "+_e.ToString ();
+ }
+ }
+}
+
diff --git a/src/CueSheets/CueSheets.csproj b/src/CueSheets/CueSheets.csproj
index 224e0df..023c2d0 100644
--- a/src/CueSheets/CueSheets.csproj
+++ b/src/CueSheets/CueSheets.csproj
@@ -109,13 +109,11 @@
<Compile Include="Banshee.CueSheets\Model\CS_GenreModel.cs" />
<Compile Include="Banshee.CueSheets\Gui\CueSheetsPrefs.cs" />
<Compile Include="Banshee.CueSheets\Gui\CueSheetEditor.cs" />
- <Compile Include="Banshee.CueSheets\Data\GenreInfo.cs" />
<Compile Include="Banshee.CueSheets\Tools\Loosely.cs" />
<Compile Include="Banshee.CueSheets\Tools\Tools.cs" />
<Compile Include="Banshee.CueSheets\Data\CS_TrackInfoDb.cs" />
<Compile Include="Banshee.CueSheets\Version\CS_Info.cs" />
<Compile Include="Banshee.CueSheets\mp3splt\Mp3Split.cs" />
- <Compile Include="Banshee.CueSheets\Gui\MusicToDevice.cs" />
<Compile Include="Banshee.CueSheets\mp3splt\Mp3SplitTrack.cs" />
<Compile Include="Banshee.CueSheets\Gui\Actions.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_AlbumListView.cs" />
@@ -124,6 +122,20 @@
<Compile Include="Banshee.CueSheets\Gui\CS_ArtistListView.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_ComposerListView.cs" />
<Compile Include="Banshee.CueSheets\Gui\CS_CollectionSearchEntry.cs" />
+ <Compile Include="Banshee.CueSheets\CueSheet\CueSheetCollection.cs" />
+ <Compile Include="Banshee.CueSheets\Data\CS_GenreInfo.cs" />
+ <Compile Include="Banshee.CueSheets\Playlists\CS_PlayList.cs" />
+ <Compile Include="Banshee.CueSheets\Playlists\CS_PlayListCollection.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_MusicToDevice.cs" />
+ <Compile Include="Banshee.CueSheets\Playlists\CS_PlayListEntry.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_PlayListAdmin.cs" />
+ <Compile Include="Banshee.CueSheets\Model\CS_PlayListsModel.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_PlayListsView.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_PlayListView.cs" />
+ <Compile Include="Banshee.CueSheets\Model\CS_PlayListModel.cs" />
+ <Compile Include="Banshee.CueSheets\Model\CS_TrackListModel.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_TrackListView.cs" />
+ <Compile Include="Banshee.CueSheets\Gui\CS_Column.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
@@ -150,5 +162,6 @@
<Folder Include="Banshee.CueSheets\Version\" />
<Folder Include="Banshee.CueSheets\mp3splt\" />
<Folder Include="Resources\" />
+ <Folder Include="Banshee.CueSheets\Playlists\" />
</ItemGroup>
</Project>
diff --git a/src/CueSheets/Makefile.am b/src/CueSheets/Makefile.am
index 1cb4a09..da55a36 100644
--- a/src/CueSheets/Makefile.am
+++ b/src/CueSheets/Makefile.am
@@ -3,29 +3,41 @@ LINK = $(BANSHEE_LIBS)
SOURCES = \
Banshee.CueSheets/CueSheet/CueSheet.cs \
+ Banshee.CueSheets/CueSheet/CueSheetCollection.cs \
Banshee.CueSheets/CueSheet/CueSheetEntry.cs \
Banshee.CueSheets/CueSheetsSource.cs \
Banshee.CueSheets/Data/CS_AlbumInfo.cs \
Banshee.CueSheets/Data/CS_ArtistInfo.cs \
Banshee.CueSheets/Data/CS_ComposerInfo.cs \
+ Banshee.CueSheets/Data/CS_GenreInfo.cs \
Banshee.CueSheets/Data/CS_TrackInfoDb.cs \
- Banshee.CueSheets/Data/GenreInfo.cs \
Banshee.CueSheets/Gui/Actions.cs \
Banshee.CueSheets/Gui/CS_AlbumListView.cs \
Banshee.CueSheets/Gui/CS_ArtistListView.cs \
Banshee.CueSheets/Gui/CS_CollectionSearchEntry.cs \
+ Banshee.CueSheets/Gui/CS_Column.cs \
Banshee.CueSheets/Gui/CS_ComposerListView.cs \
Banshee.CueSheets/Gui/CS_GenreListView.cs \
+ Banshee.CueSheets/Gui/CS_MusicToDevice.cs \
+ Banshee.CueSheets/Gui/CS_PlayListAdmin.cs \
+ Banshee.CueSheets/Gui/CS_PlayListsView.cs \
+ Banshee.CueSheets/Gui/CS_PlayListView.cs \
+ Banshee.CueSheets/Gui/CS_TrackListView.cs \
Banshee.CueSheets/Gui/CueSheetEditor.cs \
Banshee.CueSheets/Gui/CueSheetsPrefs.cs \
Banshee.CueSheets/Gui/CueSheetsView.cs \
- Banshee.CueSheets/Gui/MusicToDevice.cs \
Banshee.CueSheets/Model/CS_AlbumModel.cs \
Banshee.CueSheets/Model/CS_ArtistModel.cs \
Banshee.CueSheets/Model/CS_ComposerModel.cs \
Banshee.CueSheets/Model/CS_GenreModel.cs \
+ Banshee.CueSheets/Model/CS_PlayListModel.cs \
+ Banshee.CueSheets/Model/CS_PlayListsModel.cs \
+ Banshee.CueSheets/Model/CS_TrackListModel.cs \
Banshee.CueSheets/mp3splt/Mp3Split.cs \
Banshee.CueSheets/mp3splt/Mp3SplitTrack.cs \
+ Banshee.CueSheets/Playlists/CS_PlayList.cs \
+ Banshee.CueSheets/Playlists/CS_PlayListCollection.cs \
+ Banshee.CueSheets/Playlists/CS_PlayListEntry.cs \
Banshee.CueSheets/Tools/Loosely.cs \
Banshee.CueSheets/Tools/Tools.cs \
Banshee.CueSheets/Version/CS_Info.cs