diff --git a/rtgui/dirbrowser.cc b/rtgui/dirbrowser.cc index 914b74ef5..b79bb2c0f 100644 --- a/rtgui/dirbrowser.cc +++ b/rtgui/dirbrowser.cc @@ -347,9 +347,7 @@ void DirBrowser::row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewC Glib::ustring dname = dirTreeModel->get_iter (path)->get_value (dtColumns.dirname); if (safe_file_test (dname, Glib::FILE_TEST_IS_DIR)) - for (size_t i = 0; i < dllisteners.size(); i++) { - dllisteners[i]->dirSelected (dname); - } + dirSelectionSignal (dname, Glib::ustring()); } Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) @@ -439,9 +437,7 @@ void DirBrowser::open (const Glib::ustring& dirname, const Glib::ustring& fileNa absFilePath = Glib::build_filename (absDirPath, fileName); } - for (size_t i = 0; i < dllisteners.size(); i++) { - dllisteners[i]->dirSelected (absDirPath, absFilePath); - } + dirSelectionSignal (absDirPath, absFilePath); } void DirBrowser::file_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName) diff --git a/rtgui/dirbrowser.h b/rtgui/dirbrowser.h index fcba64ce0..c60673d7b 100644 --- a/rtgui/dirbrowser.h +++ b/rtgui/dirbrowser.h @@ -24,7 +24,6 @@ #ifdef WIN32 #include "windirmonitor.h" #endif -#include "dirselectionlistener.h" #include "dirbrowserremoteinterface.h" class DirBrowser : public Gtk::VBox, public DirBrowserRemoteInterface @@ -32,6 +31,8 @@ class DirBrowser : public Gtk::VBox, public DirBrowserRemoteInterface , public WinDirChangeListener #endif { +public: + typedef sigc::signal DirSelectionSignal; private: @@ -67,7 +68,7 @@ private: Gtk::TreeView *dirtree; Gtk::ScrolledWindow *scrolledwindow4; - std::vector dllisteners; + DirSelectionSignal dirSelectionSignal; void fillRoot (); @@ -94,7 +95,6 @@ private: void addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirname); Gtk::TreePath expandToDir (const Glib::ustring& dirName); void updateDir (const Gtk::TreeModel::iterator& iter); - void notifyListeners (); public: DirBrowser (); @@ -105,11 +105,14 @@ public: void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); void file_changed (const Glib::RefPtr& file, const Glib::RefPtr& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName); void open (const Glib::ustring& dirName, const Glib::ustring& fileName = ""); // goes to dir "dirName" and selects file "fileName" - void addDirSelectionListener (DirSelectionListener* l) - { - dllisteners.push_back (l); - } void selectDir (Glib::ustring dir); + + DirSelectionSignal dirSelected () const; }; +inline DirBrowser::DirSelectionSignal DirBrowser::dirSelected () const +{ + return dirSelectionSignal; +} + #endif diff --git a/rtgui/dirselectionlistener.h b/rtgui/dirselectionlistener.h deleted file mode 100644 index 3225487cb..000000000 --- a/rtgui/dirselectionlistener.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of RawTherapee. - * - * Copyright (c) 2004-2010 Gabor Horvath - * - * RawTherapee is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * RawTherapee is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with RawTherapee. If not, see . - */ -#ifndef _DIRSELECTIONLISTENER_ -#define _DIRSELECTIONLISTENER_ - -#include - -class DirSelectionListener -{ - -public: - virtual ~DirSelectionListener () {} - virtual void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = "") {} -}; - -#endif diff --git a/rtgui/filecatalog.h b/rtgui/filecatalog.h index b30ebb553..16d5460e1 100644 --- a/rtgui/filecatalog.h +++ b/rtgui/filecatalog.h @@ -23,7 +23,6 @@ #include "windirmonitor.h" #endif #include "dirbrowserremoteinterface.h" -#include "dirselectionlistener.h" #include "filebrowser.h" #include "exiffiltersettings.h" #include @@ -60,7 +59,6 @@ class FilePanel; * - monitoring the directory (for any change) */ class FileCatalog : public Gtk::VBox, - public DirSelectionListener, public PreviewLoaderListener, public FilterPanelListener, public FileBrowserListener, @@ -175,7 +173,7 @@ public: FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel); ~FileCatalog(); - void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); + void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile); void closeDir (); void refreshEditedState (const std::set& efiles); diff --git a/rtgui/filepanel.cc b/rtgui/filepanel.cc index 5be2ab0df..5a7d7ef78 100644 --- a/rtgui/filepanel.cc +++ b/rtgui/filepanel.cc @@ -61,10 +61,11 @@ FilePanel::FilePanel () : parent(NULL) placesBrowser->setDirBrowserRemoteInterface (dirBrowser); recentBrowser->setDirBrowserRemoteInterface (dirBrowser); - dirBrowser->addDirSelectionListener (fileCatalog); - dirBrowser->addDirSelectionListener (recentBrowser); - dirBrowser->addDirSelectionListener (placesBrowser); - dirBrowser->addDirSelectionListener (tpc); + DirBrowser::DirSelectionSignal dirSelected = dirBrowser->dirSelected (); + dirSelected.connect (sigc::mem_fun (fileCatalog, &FileCatalog::dirSelected)); + dirSelected.connect (sigc::mem_fun (recentBrowser, &RecentBrowser::dirSelected)); + dirSelected.connect (sigc::mem_fun (placesBrowser, &PlacesBrowser::dirSelected)); + dirSelected.connect (sigc::mem_fun (tpc, &BatchToolPanelCoordinator::dirSelected)); fileCatalog->setFileSelectionListener (this); fileCatalog->setDirBrowserRemoteInterface (dirBrowser); diff --git a/rtgui/placesbrowser.h b/rtgui/placesbrowser.h index e8c443345..b3746b74e 100644 --- a/rtgui/placesbrowser.h +++ b/rtgui/placesbrowser.h @@ -22,10 +22,9 @@ #include #include #include "dirbrowserremoteinterface.h" -#include "dirselectionlistener.h" #include "multilangmgr.h" -class PlacesBrowser : public Gtk::VBox, public DirSelectionListener +class PlacesBrowser : public Gtk::VBox { class PlacesColumns : public Gtk::TreeModel::ColumnRecord @@ -63,7 +62,7 @@ public: { listener = l; } - void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); + void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile); void refreshPlacesList (); void mountChanged (const Glib::RefPtr& m); diff --git a/rtgui/recentbrowser.h b/rtgui/recentbrowser.h index 511207fa4..c42fe4773 100644 --- a/rtgui/recentbrowser.h +++ b/rtgui/recentbrowser.h @@ -21,11 +21,10 @@ #include #include "dirbrowserremoteinterface.h" -#include "dirselectionlistener.h" #include "multilangmgr.h" #include "guiutils.h" -class RecentBrowser : public Gtk::VBox, public DirSelectionListener +class RecentBrowser : public Gtk::VBox { Gtk::ComboBoxText* recentDirs; @@ -42,7 +41,7 @@ public: } void selectionChanged (); - void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); + void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile); }; #endif diff --git a/rtgui/toolpanelcoord.h b/rtgui/toolpanelcoord.h index 44073344b..46285ce3e 100644 --- a/rtgui/toolpanelcoord.h +++ b/rtgui/toolpanelcoord.h @@ -57,7 +57,6 @@ #include "toolbar.h" #include "lensgeom.h" #include "lensgeomlistener.h" -#include "dirselectionlistener.h" #include "wavelet.h" #include "dirpyrequalizer.h" #include "hsvequalizer.h" @@ -93,7 +92,6 @@ class ToolPanelCoordinator : public ToolPanelListener, public SpotWBListener, public CropPanelListener, public ICMPanelListener, - public DirSelectionListener, public ImageAreaToolListener { @@ -236,7 +234,7 @@ public: void setDefaults (rtengine::procparams::ProcParams* defparams); // DirSelectionListener interface - void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); + void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile); // to support the GUI: CropGUIListener* getCropGUIListener (); // through the CropGUIListener the editor area can notify the "crop" ToolPanel when the crop selection changes