terminate called after throwing an instance of 'Glib::FileError'



Hello guys,

I am trying to develop a music manager software using Gtkmm. I successfully compiled it but after running I received an error:

terminate called after throwing an instance of 'Glib::FileError'

...and the program could not start.

I tried to debug it in gdb and it said that the error occured at line 55 of file topwin.cc, which sets value for a cell that displays a Glib::RefPtr<Gdk::Pixbuf> (image type) :

55. row[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("now-playing.png");

I am not sure why this happened... 

Attached with this email is the source code of the program and all the necessary icons. I hope you guys can give me hint to figure out this error!

Thank you for reading my message! I hope you guys having a good day!


Best regards,


Phong Cao,

#include "topwin.cc"

int main(int argc, char *argv[]) {
  Gtk::Main kit(argc, argv);
  
  TopWin topwin;
  
  Gtk::Main::run(topwin);
  
  return 0;
}
#include "topwin.h"

TopWin::TopWin() : 
  //initialize controlhbox widgets
  controlhbox(false, 0),
  seekvbox(false, 0),
  seeklabel("0:00 - 0:00"),
  progress(0.00, 0.00, 0.00, 0.00, 0.00, 0.00),
  volumeadj(0.70, 0.00, 1.00, 0.01, 0.00, 0.00),
  hscale(progress),
  
  //infolabel
  infolabel("0 item(s) - 0.0 minutes - 0.00 MB")
{
  set_title("Dingo Music Manager");
  
  //create all controlhbox buttons
  Gtk::Image imgplay(Gtk::Stock::MEDIA_PLAY, Gtk::ICON_SIZE_SMALL_TOOLBAR);
  playbutton.set_image(imgplay);
  
  Gtk::Image imgprev(Gtk::Stock::MEDIA_PREVIOUS, Gtk::ICON_SIZE_SMALL_TOOLBAR);
  prevbutton.set_image(imgprev);
  
  Gtk::Image imgnext(Gtk::Stock::MEDIA_NEXT, Gtk::ICON_SIZE_SMALL_TOOLBAR);
  nextbutton.set_image(imgnext);
  
  Gtk::Image imgrepeat(Gtk::Stock::REFRESH, Gtk::ICON_SIZE_SMALL_TOOLBAR);
  repeatbutton.set_image(imgrepeat);
  
  Gtk::Image imgfull(Gtk::Stock::FULLSCREEN, Gtk::ICON_SIZE_SMALL_TOOLBAR);
  fullbutton.set_image(imgfull);
  
  volumebutton.set_adjustment(volumeadj);
  
  //pack widgets into seekvbox
  seekvbox.pack_start(hscale, Gtk::PACK_SHRINK);
  seekvbox.pack_start(seeklabel, Gtk::PACK_SHRINK);
  
  //pack widgets into controlhbox
  controlhbox.pack_start(prevbutton, Gtk::PACK_SHRINK);
  controlhbox.pack_start(playbutton, Gtk::PACK_SHRINK);
  controlhbox.pack_start(nextbutton, Gtk::PACK_SHRINK);
  controlhbox.pack_start(seekvbox, Gtk::PACK_SHRINK);
  
  controlhbox.pack_end(volumebutton, Gtk::PACK_SHRINK);
  controlhbox.pack_end(searchbox, Gtk::PACK_SHRINK);
  controlhbox.pack_end(fullbutton, Gtk::PACK_SHRINK);
  controlhbox.pack_end(repeatbutton, Gtk::PACK_SHRINK);
  
  //create l_scroll
  l_model = Gtk::TreeStore::create(l_colrec);
  l_treeview.set_model(l_model);
  
  Gtk::TreeModel::Row row = *(l_model->append());
  row[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("now-playing.png");
  row[l_colrec.l_status] = "Now Playing";
  
  row = *(l_model->append());
  row[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("file-queue.png");
  row[l_colrec.l_status] = "Play Queue";
  
  row = *(l_model->append());
  row[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("local-media.png");
  row[l_colrec.l_status] = "Local Media";
  
  Gtk::TreeModel::Row childrow = *(l_model->append(row.children()));
  childrow[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("music.png");
  childrow[l_colrec.l_status] = "Music";
  
  childrow = *(l_model->append(row.children()));
  childrow[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("video.png");
  childrow[l_colrec.l_status] = "Videos";
  
  row = *(l_model->append());
  row[l_colrec.l_icon] = Gdk::Pixbuf::create_from_file("playlist.png");
  row[l_colrec.l_status] = "Playlists";
  
  l_treeview.append_column(" ", l_colrec.l_expander);
  l_treeview.append_column("Icon", l_colrec.l_icon);
  l_treeview.append_column("Actions", l_colrec.l_status);
  
  l_scroll.add(l_treeview);
  l_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //create mtl_scroll
  mtl_model = Gtk::ListStore::create(mtl_colrec);
  mtl_treeview.set_model(mtl_model);
  
  row = *(mtl_model->append());
  row[mtl_colrec.mtl_artist] = "All Artists (0)";
  
  mtl_treeview.append_column("Artists", mtl_colrec.mtl_artist);
  
  mtl_scroll.add(mtl_treeview);
  mtl_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //create mtr_scroll
  mtr_model = Gtk::ListStore::create(mtr_colrec);
  mtr_treeview.set_model(mtr_model);
  
  row = *(mtr_model->append());
  row[mtr_colrec.mtr_album] = "All Albums (0)";
  
  mtr_treeview.append_column("Albums", mtr_colrec.mtr_album);
  
  mtr_scroll.add(mtr_treeview);
  mtr_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //create rt_scroll
  rt_model = Gtk::ListStore::create(rt_colrec);
  rt_treeview.set_model(rt_model);
  
  row = *(rt_model->append());
  row[rt_colrec.rt_artist] = "All Artists (0)";
  
  rt_treeview.append_column("Artists", rt_colrec.rt_artist);
  
  rt_scroll.add(rt_treeview);
  rt_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //create rb_scroll
  rb_model = Gtk::ListStore::create(rb_colrec);
  rb_treeview.set_model(rb_model);
  
  row = *(rb_model->append());
  row[rb_colrec.rb_album] = "All Albums (0)";
  
  rb_treeview.append_column("Albums", rb_colrec.rb_album);
  
  rb_scroll.add(rb_treeview);
  rb_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //create mb_scroll
  mb_model = Gtk::ListStore::create(mb_colrec);
  mb_treeview.set_model(mb_model);
  
  mb_treeview.append_column(" ", mb_colrec.mb_status);
  mb_treeview.append_column("Name", mb_colrec.mb_name);
  mb_treeview.append_column("Artist", mb_colrec.mb_artist);
  mb_treeview.append_column("Album", mb_colrec.mb_album);
  mb_treeview.append_column("Time", mb_colrec.mb_time);
  
  mb_scroll.add(mb_treeview);
  mb_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  //pack all widgets in containers
  rvpaned.pack1(rt_scroll, Gtk::SHRINK);
  rvpaned.pack2(rb_scroll, Gtk::SHRINK);
  
  submhpaned.pack1(mtl_scroll, Gtk::SHRINK);
  submhpaned.pack2(mtr_scroll, Gtk::SHRINK);
  
  mhpaned.pack1(videoarea, Gtk::EXPAND);
  mhpaned.pack2(submhpaned, Gtk::EXPAND);
  
  mvpaned.pack1(mhpaned, Gtk::FILL);
  mvpaned.pack2(mb_scroll, Gtk::FILL);
  
  subhpaned.pack1(mvpaned, Gtk::FILL);
  subhpaned.pack2(rvpaned, Gtk::SHRINK);
  
  tophpaned.pack1(l_scroll, Gtk::SHRINK);
  tophpaned.pack2(subhpaned, Gtk::EXPAND);
  
  topvbox.pack_start(controlhbox, Gtk::PACK_EXPAND_WIDGET);
  topvbox.pack_start(tophpaned, Gtk::PACK_EXPAND_WIDGET);
  topvbox.pack_start(infolabel, Gtk::PACK_EXPAND_WIDGET);
  
  add(topvbox);
  
  show_all_children();
  submhpaned.hide();
}

TopWin::~TopWin() {}
  
#include <gtkmm.h>
#include <gtkmm/volumebutton.h>
class TopWin : public Gtk::Window {
public:
  TopWin();
  virtual ~TopWin();
  
protected:
  //controlhbox's widgets
  Gtk::Button playbutton, nextbutton, prevbutton, repeatbutton, fullbutton;
  Gtk::VolumeButton volumebutton;
  Gtk::HBox controlhbox;
  Gtk::VBox seekvbox;
  Gtk::Label seeklabel;
  Gtk::Adjustment progress, volumeadj;
  Gtk::HScale hscale;
  Gtk::Entry searchbox;
  
  //l_scroll - l_treeview
  Gtk::TreeView l_treeview;
  Glib::RefPtr<Gtk::TreeStore> l_model;
  Gtk::ScrolledWindow l_scroll;
  
  class LColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    LColumnRecord() { add(l_expander); add(l_icon); add(l_status); }
    
    Gtk::TreeModelColumn<Glib::ustring> l_expander;
    Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > l_icon;
    Gtk::TreeModelColumn<Glib::ustring> l_status;
  };
  
  LColumnRecord l_colrec;
  
  //mtl_scroll - mtl_treeview
  Gtk::TreeView mtl_treeview;
  Glib::RefPtr<Gtk::ListStore> mtl_model;
  Gtk::ScrolledWindow mtl_scroll;
  
  class MtlColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    MtlColumnRecord() { add(mtl_artist); }
    
    Gtk::TreeModelColumn<Glib::ustring> mtl_artist;
  };
  
  MtlColumnRecord mtl_colrec;
  
  //mtr_scroll - mtr_treeview
  Gtk::TreeView mtr_treeview;
  Glib::RefPtr<Gtk::ListStore> mtr_model;
  Gtk::ScrolledWindow mtr_scroll;
  
  class MtrColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    MtrColumnRecord() { add(mtr_album); }
    
    Gtk::TreeModelColumn<Glib::ustring> mtr_album;
  };
  
  MtrColumnRecord mtr_colrec;
  
  //rt_scroll - rt_treeview
  Gtk::TreeView rt_treeview;
  Glib::RefPtr<Gtk::ListStore> rt_model;
  Gtk::ScrolledWindow rt_scroll;
  
  class RtColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    RtColumnRecord() { add(rt_artist); }
    
    Gtk::TreeModelColumn<Glib::ustring> rt_artist;
  };
  
  RtColumnRecord rt_colrec;
  
  //rb_scroll - rb_treeview
  Gtk::TreeView rb_treeview;
  Glib::RefPtr<Gtk::ListStore> rb_model;
  Gtk::ScrolledWindow rb_scroll;
  
  class RbColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    RbColumnRecord() { add(rb_album); }
    
    Gtk::TreeModelColumn<Glib::ustring> rb_album;
  };
  
  RbColumnRecord rb_colrec;
  
  //mb_scroll - mb_treeview
  Gtk::TreeView mb_treeview;
  Glib::RefPtr<Gtk::ListStore> mb_model;
  Gtk::ScrolledWindow mb_scroll;
  
  class MbColumnRecord : public Gtk::TreeModel::ColumnRecord {
  public:
    MbColumnRecord() { add(mb_status); add(mb_name); add(mb_artist); add(mb_album); add(mb_time); }
    
    Gtk::TreeModelColumn< Glib::RefPtr<Gdk::Pixbuf> > mb_status;
    Gtk::TreeModelColumn<Glib::ustring> mb_name;
    Gtk::TreeModelColumn<Glib::ustring> mb_artist;
    Gtk::TreeModelColumn<Glib::ustring> mb_album;
    Gtk::TreeModelColumn<Glib::ustring> mb_time;
  };
  
  MbColumnRecord mb_colrec;
  
  //videoarea
  Gtk::DrawingArea videoarea;
  
  //infolabel
  Gtk::Label infolabel;
  
  //paned
  Gtk::HPaned tophpaned, subhpaned, mhpaned, submhpaned;
  Gtk::VPaned mvpaned, rvpaned;
  Gtk::VBox topvbox;
};

Attachment: file-queue.png
Description: PNG image

Attachment: music.png
Description: PNG image

Attachment: now-playing.png
Description: PNG image

Attachment: local-media.png
Description: PNG image

Attachment: playlist.png
Description: PNG image

Attachment: video.png
Description: PNG image



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