diff options
author | Hans Oesterholt <hans@oesterholt.net> | 2013-01-13 13:10:27 +0100 |
---|---|---|
committer | Hans Oesterholt <hans@oesterholt.net> | 2013-01-13 13:10:27 +0100 |
commit | 0e7765354435893a53940885908fe01200a5bbca (patch) | |
tree | c3a9a8dd421e63590016a9f1e49bbb3a514aa7e1 | |
parent | 7a2bddf3a454f916dee9e16716e6651d95798f28 (diff) |
Adding CueSheet editing support
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/CueSheet.cs | 9 | ||||
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/CueSheetEditor.cs | 127 | ||||
-rw-r--r-- | src/CueSheets/Banshee.CueSheets/CueSheetsSource.cs | 11 | ||||
-rw-r--r-- | src/CueSheets/CueSheets.csproj | 1 | ||||
-rw-r--r-- | src/CueSheets/Makefile.am | 1 |
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 \ |