summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Oesterholt <hans@oesterholt.net>2013-01-13 13:10:27 +0100
committerHans Oesterholt <hans@oesterholt.net>2013-01-13 13:10:27 +0100
commit0e7765354435893a53940885908fe01200a5bbca (patch)
treec3a9a8dd421e63590016a9f1e49bbb3a514aa7e1
parent7a2bddf3a454f916dee9e16716e6651d95798f28 (diff)
Adding CueSheet editing support
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheet.cs9
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheetEditor.cs127
-rw-r--r--src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs11
-rw-r--r--src/CueSheets/CueSheets.csproj1
-rw-r--r--src/CueSheets/Makefile.am1
5 files changed, 149 insertions, 0 deletions
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheet.cs b/src/CueSheets/Banshee.CueSheets/CueSheet.cs
index b8fd62f..5c30a3e 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheet.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheet.cs
@@ -75,6 +75,10 @@ namespace Banshee.CueSheets
return _image_file_name;
}
+ public string imageFullFileName() {
+ return _img_full_path;
+ }
+
public string cueFile() {
return _cuefile;
}
@@ -277,6 +281,11 @@ namespace Banshee.CueSheets
Clear ();
}
+ public CueSheet(string filename) {
+ Clear ();
+ load (filename,"","");
+ }
+
public CueSheet (string filename,string directory,string basedir) {
Clear ();
load (filename,directory,basedir);
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheetEditor.cs b/src/CueSheets/Banshee.CueSheets/CueSheetEditor.cs
new file mode 100644
index 0000000..4e6fca2
--- /dev/null
+++ b/src/CueSheets/Banshee.CueSheets/CueSheetEditor.cs
@@ -0,0 +1,127 @@
+using System;
+
+namespace Banshee.CueSheets
+{
+ public class CueSheetEditor : Gtk.Dialog
+ {
+ private CueSheet _sheet;
+
+ private Gtk.Image _image;
+ private Gtk.FileChooserButton _imagefile;
+ private Gtk.Entry _performer;
+ private Gtk.Entry _title;
+ private Gtk.TreeView _tracks;
+ private Gtk.ListStore _store;
+ private Gtk.Button _reload;
+ private Gtk.Button _add_track;
+ private Gtk.Button _del_track;
+
+ public CueSheetEditor (CueSheet s) {
+ //_sheet=new CueSheet(s.cueFile());
+ _sheet=s;
+ }
+
+ public void Do() {
+ CreateGui();
+ Reload();
+ base.Run ();
+ this.Destroy ();
+ }
+
+ public void Reload() {
+ _title.Text=_sheet.title ();
+ _performer.Text=_sheet.performer ();
+
+ _imagefile.SelectFilename (_sheet.imageFullFileName());
+ Gdk.Pixbuf pb=new Gdk.Pixbuf(_sheet.imageFullFileName(),100,100);
+ _image.Pixbuf=pb;
+ _store.Clear ();
+ int i,N;
+ for(i=0,N=_sheet.nEntries ();i<N;i++) {
+ double b=_sheet.entry (i).offset ();
+ int m,s,hs,t;
+ t=(int) (b*100.0);
+ hs=t%100;
+ m=t/(100*60);
+ s=(t/100)%60;
+ String offset=String.Format ("{0:00}",m)+":"+String.Format ("{0:00}",s)+"."+hs.ToString ();
+ _store.AppendValues (i+1,_sheet.entry (i).title (),offset);
+ }
+ }
+
+ public void CreateGui() {
+
+ Gtk.Image icn_reload=new Gtk.Image(Gtk.Stock.Refresh,Gtk.IconSize.Button);
+ _reload=new Gtk.Button(icn_reload);
+ _reload.Clicked+=OnReload;
+
+ _performer=new Gtk.Entry(200);
+ _title=new Gtk.Entry(200);
+ _image=new Gtk.Image();
+ _image.SetSizeRequest (100,100);
+ _imagefile=new Gtk.FileChooserButton("Choose image file",Gtk.FileChooserAction.Open);
+
+ Gtk.Image icn_add_track=new Gtk.Image(Gtk.Stock.Add,Gtk.IconSize.Button);
+ _add_track=new Gtk.Button(icn_add_track);
+ _add_track.Clicked+=OnAddTrack;
+
+ Gtk.Image icn_del_track=new Gtk.Image(Gtk.Stock.Delete,Gtk.IconSize.Button);
+ _del_track=new Gtk.Button(icn_del_track);
+ _del_track.Clicked+=OnDelTrack;
+
+ _store=new Gtk.ListStore(typeof(int),typeof(string),typeof(string));
+ _tracks=new Gtk.TreeView();
+ _tracks.AppendColumn ("Nr.", new Gtk.CellRendererText (), "text", 0);
+ _tracks.AppendColumn ("Title", new Gtk.CellRendererText (), "text", 1);
+ _tracks.AppendColumn ("Offset", new Gtk.CellRendererText (), "text", 2);
+ //_tracks.CursorChanged += new EventHandler(EvtCursorChanged);
+ //_tracks.RowActivated += new Gtk.RowActivatedHandler(EvtTrackRowActivated);
+ _tracks.Model = _store;
+
+ Gtk.Table tbl=new Gtk.Table(2,2,false);
+ tbl.Attach (new Gtk.Label("Album:"),0,1,0,1);
+ tbl.Attach (_title,1,2,0,1);
+ tbl.Attach (new Gtk.Label("Artist:"),0,1,1,2);
+ tbl.Attach (_performer,1,2,1,2);
+
+ Gtk.Frame frm=new Gtk.Frame();
+ frm.Add (tbl);
+
+ Gtk.HBox hb2=new Gtk.HBox();
+ hb2.PackEnd (_reload,false,false,1);
+ hb2.PackEnd (_del_track,false,false,1);
+ hb2.PackEnd (_add_track,false,false,1);
+
+ Gtk.HBox hb=new Gtk.HBox();
+ Gtk.VBox vb1=new Gtk.VBox();
+ vb1.PackStart (frm,false,false,0);
+ vb1.PackStart (hb2,true,true,0);
+ hb.PackStart (vb1);
+
+ Gtk.Frame frm2=new Gtk.Frame();
+ frm2.Add (_image);
+ hb.PackEnd (frm2);
+
+ Gtk.ScrolledWindow scroll=new Gtk.ScrolledWindow();
+ scroll.Add (_tracks);
+
+ base.VBox.PackStart(hb,false,false,4);
+ base.VBox.PackStart (_imagefile,false,false,4);
+ base.VBox.PackStart(scroll,true,true,0);
+ base.VBox.ShowAll ();
+
+ base.AddButton ("Cancel",0);
+ base.AddButton ("OK",1);
+ }
+
+ public void OnReload(object sender,EventArgs args) {
+ }
+
+ public void OnAddTrack(object sender,EventArgs args) {
+ }
+
+ public void OnDelTrack(object sender,EventArgs args) {
+ }
+ }
+}
+
diff --git a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
index a58ec58..b823833 100644
--- a/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
+++ b/src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs
@@ -435,6 +435,11 @@ namespace Banshee.CueSheets
loadCueSheet (MySource.getSheets ()[i]);
}
+ public void EditSheet(CueSheet s) {
+ CueSheetEditor edt=new CueSheetEditor(s);
+ edt.Do ();
+ }
+
internal class MyAlbumListView : AlbumListView {
private CustomView _view;
@@ -448,7 +453,13 @@ namespace Banshee.CueSheets
play.Activated+=delegate(object sender,EventArgs a) {
_view.PlayAlbum((CS_AlbumInfo) this.Model[Selection.FirstIndex]);
};
+ Gtk.ImageMenuItem edit=new Gtk.ImageMenuItem(Gtk.Stock.Edit,null);
+ edit.Activated+=delegate(object sender,EventArgs a) {
+ _view.EditSheet(((CS_AlbumInfo) 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/CueSheets.csproj b/src/CueSheets/CueSheets.csproj
index 6e1cedb..0e72f98 100644
--- a/src/CueSheets/CueSheets.csproj
+++ b/src/CueSheets/CueSheets.csproj
@@ -98,6 +98,7 @@
<Compile Include="Banshee.CueSheets\GenreInfo.cs" />
<Compile Include="Banshee.CueSheets\GenreListView.cs" />
<Compile Include="Banshee.CueSheets\Loosely.cs" />
+ <Compile Include="Banshee.CueSheets\CueSheetEditor.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
diff --git a/src/CueSheets/Makefile.am b/src/CueSheets/Makefile.am
index 52f5d46..808b6a5 100644
--- a/src/CueSheets/Makefile.am
+++ b/src/CueSheets/Makefile.am
@@ -8,6 +8,7 @@ SOURCES = \
Banshee.CueSheets/CS_ArtistModel.cs \
Banshee.CueSheets/CS_GenreModel.cs \
Banshee.CueSheets/CueSheet.cs \
+ Banshee.CueSheets/CueSheetEditor.cs \
Banshee.CueSheets/CueSheetEntry.cs \
Banshee.CueSheets/CueSheetsPrefs.cs \
Banshee.CueSheets/CueSheetsSource.cs \