diff --git a/rtdata/images/trash-show-full.png b/rtdata/images/trash-show-full.png new file mode 100644 index 000000000..88f473a2b Binary files /dev/null and b/rtdata/images/trash-show-full.png differ diff --git a/rtgui/filebrowser.cc b/rtgui/filebrowser.cc index 12b7a940b..3298cd32c 100755 --- a/rtgui/filebrowser.cc +++ b/rtgui/filebrowser.cc @@ -446,7 +446,8 @@ void FileBrowser::toTrashRequested (std::vector tbe) { tbe[i]->getThumbButtonSet()->setRank (tbe[i]->thumbnail->getRank()); tbe[i]->getThumbButtonSet()->setInTrash (true); } - } + } + trash_changed().emit(); applyFilter (filter); } @@ -460,7 +461,8 @@ void FileBrowser::fromTrashRequested (std::vector tbe) { tbe[i]->getThumbButtonSet()->setRank (tbe[i]->thumbnail->getRank()); tbe[i]->getThumbButtonSet()->setInTrash (false); } - } + } + trash_changed().emit(); applyFilter (filter); } @@ -579,3 +581,6 @@ void FileBrowser::redrawNeeded (LWButton* button) { queue_draw (); } +FileBrowser::type_trash_changed FileBrowser::trash_changed () { + return m_trash_changed; +} diff --git a/rtgui/filebrowser.h b/rtgui/filebrowser.h index 33a2b1790..8b3e99a6d 100755 --- a/rtgui/filebrowser.h +++ b/rtgui/filebrowser.h @@ -45,6 +45,8 @@ struct FileBrowserIdleHelper { }; class FileBrowser : public ThumbBrowserBase, public LWButtonListener { + + typedef sigc::signal type_trash_changed; protected: @@ -75,6 +77,8 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { void fromTrashRequested (std::vector tbe); void rankingRequested (std::vector tbe, int rank); void notifySelectionListener (); + + type_trash_changed m_trash_changed; public: @@ -110,7 +114,9 @@ class FileBrowser : public ThumbBrowserBase, public LWButtonListener { void thumbRearrangementNeeded (); void _thumbRearrangementNeeded (); - void selectionChanged (); + void selectionChanged (); + + type_trash_changed trash_changed(); }; #endif diff --git a/rtgui/filecatalog.cc b/rtgui/filecatalog.cc index 83c62395a..a567a8cbb 100755 --- a/rtgui/filecatalog.cc +++ b/rtgui/filecatalog.cc @@ -104,14 +104,18 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb) : listener(NULL), fslist bRank[3]->set_tooltip_text (M("FILEBROWSER_SHOWRANK4HINT")); bRank[4]->set_tooltip_text (M("FILEBROWSER_SHOWRANK5HINT")); buttonBar->pack_start (*(new Gtk::VSeparator), Gtk::PACK_SHRINK); + + iTrashEmpty = new Gtk::Image(argv0+"/images/trash-show-empty.png"); + iTrashFull = new Gtk::Image(argv0+"/images/trash-show-full.png"); bTrash = new Gtk::ToggleButton (); - bTrash->set_image (*(new Gtk::Image (Gtk::StockID("gtk-delete"), Gtk::ICON_SIZE_SMALL_TOOLBAR))); + bTrash->set_image (*iTrashEmpty); bTrash->set_relief (Gtk::RELIEF_NONE); bTrash->set_tooltip_text (M("FILEBROWSER_SHOWTRASHHINT")); bCateg[7] = bTrash->signal_toggled().connect (sigc::bind(sigc::mem_fun(*this, &FileCatalog::categoryButtonToggled), bTrash)); buttonBar->pack_start (*bTrash, Gtk::PACK_SHRINK); - buttonBar->pack_start (*(new Gtk::VSeparator), Gtk::PACK_SHRINK); + buttonBar->pack_start (*(new Gtk::VSeparator), Gtk::PACK_SHRINK); + fileBrowser->trash_changed().connect( sigc::mem_fun(*this, &FileCatalog::trashChanged) ); categoryButtons[0] = bDir; categoryButtons[1] = bUnRanked; @@ -746,7 +750,17 @@ void FileCatalog::emptyTrash () { if (((FileBrowserEntry*)t[i])->thumbnail->getStage()==1) toDel.push_back (((FileBrowserEntry*)t[i])); deleteRequested (toDel); + trashChanged(); } + +bool FileCatalog::trashIsEmpty () { + const std::vector t = fileBrowser->getEntries (); + for (int i=0; ithumbnail->getStage()==1) + return false; + + return true; +} void FileCatalog::zoomIn () { @@ -795,3 +809,11 @@ void FileCatalog::setFilterPanel (FilterPanel* fpanel) { filterPanel->set_sensitive (false); filterPanel->setFilterPanelListener (this); } +void FileCatalog::trashChanged () { + if (trashIsEmpty()) { + bTrash->set_image(*iTrashEmpty); + } + else { + bTrash->set_image(*iTrashFull); + } +} diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index 4e08ac32e..341f10df0 100755 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -98,7 +98,8 @@ class FileCatalog : public Gtk::VBox, Gtk::ToggleButton* categoryButtons[8]; Gtk::ToggleButton* exifInfo; sigc::connection bCateg[8]; - Gtk::Image* iranked[5], *igranked[5]; + Gtk::Image* iranked[5], *igranked[5]; + Gtk::Image *iTrashEmpty, *iTrashFull; double hScrollPos[8]; double vScrollPos[8]; @@ -135,7 +136,8 @@ class FileCatalog : public Gtk::VBox, void addAndOpenFile (const Glib::ustring& fname); void checkAndAddFile (Glib::RefPtr info); std::vector getFileList (); - BrowserFilter getFilter (); + BrowserFilter getFilter (); + void trashChanged (); public: CoarsePanel* coarsePanel; @@ -166,7 +168,8 @@ class FileCatalog : public Gtk::VBox, void developRequested (std::vector tbe); void renameRequested (std::vector tbe); void selectionChanged (std::vector tbe); - void emptyTrash (); + void emptyTrash (); + bool trashIsEmpty (); void setFileSelectionListener (FileSelectionListener* l) { listener = l; } void setFileSelectionChangeListener (FileSelectionChangeListener* l) { fslistener = l; }