Merge pull request #3063 from adamreichold/use-signals-and-slots-instead-of-listeners

Merge use signals and slots instead of listeners
This commit is contained in:
adamreichold
2016-01-08 22:34:34 +01:00
12 changed files with 65 additions and 125 deletions

View File

@@ -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); Glib::ustring dname = dirTreeModel->get_iter (path)->get_value (dtColumns.dirname);
if (safe_file_test (dname, Glib::FILE_TEST_IS_DIR)) if (safe_file_test (dname, Glib::FILE_TEST_IS_DIR))
for (size_t i = 0; i < dllisteners.size(); i++) { dirSelectionSignal (dname, Glib::ustring());
dllisteners[i]->dirSelected (dname);
}
} }
Gtk::TreePath DirBrowser::expandToDir (const Glib::ustring& absDirPath) 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); absFilePath = Glib::build_filename (absDirPath, fileName);
} }
for (size_t i = 0; i < dllisteners.size(); i++) { dirSelectionSignal (absDirPath, absFilePath);
dllisteners[i]->dirSelected (absDirPath, absFilePath);
}
} }
void DirBrowser::file_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName) void DirBrowser::file_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName)

View File

@@ -24,14 +24,14 @@
#ifdef WIN32 #ifdef WIN32
#include "windirmonitor.h" #include "windirmonitor.h"
#endif #endif
#include "dirselectionlistener.h"
#include "dirbrowserremoteinterface.h"
class DirBrowser : public Gtk::VBox, public DirBrowserRemoteInterface class DirBrowser : public Gtk::VBox
#ifdef WIN32 #ifdef WIN32
, public WinDirChangeListener , public WinDirChangeListener
#endif #endif
{ {
public:
typedef sigc::signal<void, const Glib::ustring&, const Glib::ustring&> DirSelectionSignal;
private: private:
@@ -67,7 +67,7 @@ private:
Gtk::TreeView *dirtree; Gtk::TreeView *dirtree;
Gtk::ScrolledWindow *scrolledwindow4; Gtk::ScrolledWindow *scrolledwindow4;
std::vector<DirSelectionListener*> dllisteners; DirSelectionSignal dirSelectionSignal;
void fillRoot (); void fillRoot ();
@@ -94,7 +94,6 @@ private:
void addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirname); void addDir (const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirname);
Gtk::TreePath expandToDir (const Glib::ustring& dirName); Gtk::TreePath expandToDir (const Glib::ustring& dirName);
void updateDir (const Gtk::TreeModel::iterator& iter); void updateDir (const Gtk::TreeModel::iterator& iter);
void notifyListeners ();
public: public:
DirBrowser (); DirBrowser ();
@@ -105,11 +104,14 @@ public:
void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column); void row_activated (const Gtk::TreeModel::Path& path, Gtk::TreeViewColumn* column);
void file_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& other_file, Gio::FileMonitorEvent event_type, const Gtk::TreeModel::iterator& iter, const Glib::ustring& dirName); void file_changed (const Glib::RefPtr<Gio::File>& file, const Glib::RefPtr<Gio::File>& 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 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); void selectDir (Glib::ustring dir);
DirSelectionSignal dirSelected () const;
}; };
inline DirBrowser::DirSelectionSignal DirBrowser::dirSelected () const
{
return dirSelectionSignal;
}
#endif #endif

View File

@@ -1,32 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef _DIRBROWSERREMOTEINTERFACE_
#define _DIRBROWSERREMOTEINTERFACE_
#include <glibmm.h>
class DirBrowserRemoteInterface
{
public:
virtual void selectDir (Glib::ustring dir) {}
};
#endif

View File

@@ -1,32 +0,0 @@
/*
* This file is part of RawTherapee.
*
* Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
*
* 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 <http://www.gnu.org/licenses/>.
*/
#ifndef _DIRSELECTIONLISTENER_
#define _DIRSELECTIONLISTENER_
#include <glibmm.h>
class DirSelectionListener
{
public:
virtual ~DirSelectionListener () {}
virtual void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = "") {}
};
#endif

View File

@@ -43,7 +43,6 @@ FileCatalog::FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel) :
selectedDirectoryId(1), selectedDirectoryId(1),
listener(NULL), listener(NULL),
fslistener(NULL), fslistener(NULL),
dirlistener(NULL),
hasValidCurrentEFS(false), hasValidCurrentEFS(false),
filterPanel(NULL), filterPanel(NULL),
previewsToLoad(0), previewsToLoad(0),
@@ -2042,8 +2041,8 @@ void FileCatalog::buttonBrowsePathPressed ()
// handle shortcuts in the BrowsePath -- END // handle shortcuts in the BrowsePath -- END
// validate the path // validate the path
if (safe_file_test(BrowsePathValue, Glib::FILE_TEST_IS_DIR) && dirlistener) { if (safe_file_test(BrowsePathValue, Glib::FILE_TEST_IS_DIR) && selectDir) {
dirlistener->selectDir (BrowsePathValue); selectDir (BrowsePathValue);
} else } else
// error, likely path not found: show red arrow // error, likely path not found: show red arrow
{ {

View File

@@ -22,8 +22,6 @@
#ifdef WIN32 #ifdef WIN32
#include "windirmonitor.h" #include "windirmonitor.h"
#endif #endif
#include "dirbrowserremoteinterface.h"
#include "dirselectionlistener.h"
#include "filebrowser.h" #include "filebrowser.h"
#include "exiffiltersettings.h" #include "exiffiltersettings.h"
#include <giomm.h> #include <giomm.h>
@@ -60,7 +58,6 @@ class FilePanel;
* - monitoring the directory (for any change) * - monitoring the directory (for any change)
*/ */
class FileCatalog : public Gtk::VBox, class FileCatalog : public Gtk::VBox,
public DirSelectionListener,
public PreviewLoaderListener, public PreviewLoaderListener,
public FilterPanelListener, public FilterPanelListener,
public FileBrowserListener, public FileBrowserListener,
@@ -69,6 +66,8 @@ class FileCatalog : public Gtk::VBox,
, public WinDirChangeListener , public WinDirChangeListener
#endif #endif
{ {
public:
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;
private: private:
FilePanel* filepanel; FilePanel* filepanel;
@@ -84,7 +83,7 @@ private:
FileSelectionListener* listener; FileSelectionListener* listener;
FileSelectionChangeListener* fslistener; FileSelectionChangeListener* fslistener;
ImageAreaToolListener* iatlistener; ImageAreaToolListener* iatlistener;
DirBrowserRemoteInterface* dirlistener; DirSelectionSlot selectDir;
Gtk::HBox* buttonBar; Gtk::HBox* buttonBar;
Gtk::HBox* hbToolBar1; Gtk::HBox* hbToolBar1;
@@ -175,7 +174,7 @@ public:
FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel); FileCatalog (CoarsePanel* cp, ToolBar* tb, FilePanel* filepanel);
~FileCatalog(); ~FileCatalog();
void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile);
void closeDir (); void closeDir ();
void refreshEditedState (const std::set<Glib::ustring>& efiles); void refreshEditedState (const std::set<Glib::ustring>& efiles);
@@ -244,10 +243,7 @@ public:
{ {
iatlistener = l; iatlistener = l;
} }
void setDirBrowserRemoteInterface (DirBrowserRemoteInterface* l) void setDirSelector (const DirSelectionSlot& selectDir);
{
dirlistener = l;
}
void setFilterPanel (FilterPanel* fpanel); void setFilterPanel (FilterPanel* fpanel);
void setExportPanel (ExportPanel* expanel); void setExportPanel (ExportPanel* expanel);
@@ -312,4 +308,9 @@ public:
}; };
inline void FileCatalog::setDirSelector (const FileCatalog::DirSelectionSlot& selectDir)
{
this->selectDir = selectDir;
}
#endif #endif

View File

@@ -59,14 +59,15 @@ FilePanel::FilePanel () : parent(NULL)
ribbonPane->set_size_request(50, 150); ribbonPane->set_size_request(50, 150);
dirpaned->pack2 (*ribbonPane, true, true); dirpaned->pack2 (*ribbonPane, true, true);
placesBrowser->setDirBrowserRemoteInterface (dirBrowser); DirBrowser::DirSelectionSignal dirSelected = dirBrowser->dirSelected ();
recentBrowser->setDirBrowserRemoteInterface (dirBrowser); dirSelected.connect (sigc::mem_fun (fileCatalog, &FileCatalog::dirSelected));
dirBrowser->addDirSelectionListener (fileCatalog); dirSelected.connect (sigc::mem_fun (recentBrowser, &RecentBrowser::dirSelected));
dirBrowser->addDirSelectionListener (recentBrowser); dirSelected.connect (sigc::mem_fun (placesBrowser, &PlacesBrowser::dirSelected));
dirBrowser->addDirSelectionListener (placesBrowser); dirSelected.connect (sigc::mem_fun (tpc, &BatchToolPanelCoordinator::dirSelected));
dirBrowser->addDirSelectionListener (tpc); fileCatalog->setDirSelector (sigc::mem_fun (dirBrowser, &DirBrowser::selectDir));
placesBrowser->setDirSelector (sigc::mem_fun (dirBrowser, &DirBrowser::selectDir));
recentBrowser->setDirSelector (sigc::mem_fun (dirBrowser, &DirBrowser::selectDir));
fileCatalog->setFileSelectionListener (this); fileCatalog->setFileSelectionListener (this);
fileCatalog->setDirBrowserRemoteInterface (dirBrowser);
rightBox = Gtk::manage ( new Gtk::HBox () ); rightBox = Gtk::manage ( new Gtk::HBox () );
rightBox->set_size_request(50, 100); rightBox->set_size_request(50, 100);

View File

@@ -23,7 +23,7 @@
#include "guiutils.h" #include "guiutils.h"
#include "rtimage.h" #include "rtimage.h"
PlacesBrowser::PlacesBrowser () : listener (NULL) PlacesBrowser::PlacesBrowser ()
{ {
scrollw = Gtk::manage (new Gtk::ScrolledWindow ()); scrollw = Gtk::manage (new Gtk::ScrolledWindow ());
@@ -286,8 +286,8 @@ void PlacesBrowser::selectionChanged ()
drives[i]->poll_for_media (); drives[i]->poll_for_media ();
break; break;
} }
} else if (listener) { } else if (selectDir) {
listener->selectDir (iter->get_value (placesColumns.root)); selectDir (iter->get_value (placesColumns.root));
} }
} }
} }

View File

@@ -21,12 +21,14 @@
#include <gtkmm.h> #include <gtkmm.h>
#include <giomm.h> #include <giomm.h>
#include "dirbrowserremoteinterface.h"
#include "dirselectionlistener.h"
#include "multilangmgr.h" #include "multilangmgr.h"
class PlacesBrowser : public Gtk::VBox, public DirSelectionListener class PlacesBrowser : public Gtk::VBox
{ {
public:
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;
private:
class PlacesColumns : public Gtk::TreeModel::ColumnRecord class PlacesColumns : public Gtk::TreeModel::ColumnRecord
{ {
@@ -50,7 +52,7 @@ class PlacesBrowser : public Gtk::VBox, public DirSelectionListener
Gtk::TreeView* treeView; Gtk::TreeView* treeView;
Glib::RefPtr<Gtk::ListStore> placesModel; Glib::RefPtr<Gtk::ListStore> placesModel;
Glib::RefPtr<Gio::VolumeMonitor> vm; Glib::RefPtr<Gio::VolumeMonitor> vm;
DirBrowserRemoteInterface* listener; DirSelectionSlot selectDir;
Glib::ustring lastSelectedDir; Glib::ustring lastSelectedDir;
Gtk::Button* add; Gtk::Button* add;
Gtk::Button* del; Gtk::Button* del;
@@ -59,11 +61,8 @@ public:
PlacesBrowser (); PlacesBrowser ();
void setDirBrowserRemoteInterface (DirBrowserRemoteInterface* l) void setDirSelector (const DirSelectionSlot& selectDir);
{ void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile);
listener = l;
}
void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = "");
void refreshPlacesList (); void refreshPlacesList ();
void mountChanged (const Glib::RefPtr<Gio::Mount>& m); void mountChanged (const Glib::RefPtr<Gio::Mount>& m);
@@ -75,6 +74,11 @@ public:
void delPressed (); void delPressed ();
}; };
inline void PlacesBrowser::setDirSelector (const PlacesBrowser::DirSelectionSlot& selectDir)
{
this->selectDir = selectDir;
}
#endif #endif

View File

@@ -22,7 +22,7 @@
using namespace rtengine; using namespace rtengine;
RecentBrowser::RecentBrowser () : listener (NULL) RecentBrowser::RecentBrowser ()
{ {
recentDirs = Gtk::manage (new MyComboBoxText ()); recentDirs = Gtk::manage (new MyComboBoxText ());
@@ -46,8 +46,8 @@ void RecentBrowser::selectionChanged ()
Glib::ustring sel = recentDirs->get_active_text (); Glib::ustring sel = recentDirs->get_active_text ();
if (sel != "" && listener) { if (!sel.empty() && selectDir) {
listener->selectDir (sel); selectDir (sel);
} }
} }

View File

@@ -20,31 +20,34 @@
#define _RECENTBROWSER_ #define _RECENTBROWSER_
#include <gtkmm.h> #include <gtkmm.h>
#include "dirbrowserremoteinterface.h"
#include "dirselectionlistener.h"
#include "multilangmgr.h" #include "multilangmgr.h"
#include "guiutils.h" #include "guiutils.h"
class RecentBrowser : public Gtk::VBox, public DirSelectionListener class RecentBrowser : public Gtk::VBox
{ {
public:
typedef sigc::slot<void, const Glib::ustring&> DirSelectionSlot;
private:
Gtk::ComboBoxText* recentDirs; Gtk::ComboBoxText* recentDirs;
sigc::connection conn; sigc::connection conn;
DirBrowserRemoteInterface* listener; DirSelectionSlot selectDir;
public: public:
RecentBrowser (); RecentBrowser ();
void setDirBrowserRemoteInterface (DirBrowserRemoteInterface* l) void setDirSelector (const DirSelectionSlot& selectDir);
{
listener = l;
}
void selectionChanged (); void selectionChanged ();
void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile = ""); void dirSelected (const Glib::ustring& dirname, const Glib::ustring& openfile);
}; };
inline void RecentBrowser::setDirSelector (const RecentBrowser::DirSelectionSlot& selectDir)
{
this->selectDir = selectDir;
}
#endif #endif

View File

@@ -57,7 +57,6 @@
#include "toolbar.h" #include "toolbar.h"
#include "lensgeom.h" #include "lensgeom.h"
#include "lensgeomlistener.h" #include "lensgeomlistener.h"
#include "dirselectionlistener.h"
#include "wavelet.h" #include "wavelet.h"
#include "dirpyrequalizer.h" #include "dirpyrequalizer.h"
#include "hsvequalizer.h" #include "hsvequalizer.h"
@@ -93,7 +92,6 @@ class ToolPanelCoordinator : public ToolPanelListener,
public SpotWBListener, public SpotWBListener,
public CropPanelListener, public CropPanelListener,
public ICMPanelListener, public ICMPanelListener,
public DirSelectionListener,
public ImageAreaToolListener public ImageAreaToolListener
{ {
@@ -236,7 +234,7 @@ public:
void setDefaults (rtengine::procparams::ProcParams* defparams); void setDefaults (rtengine::procparams::ProcParams* defparams);
// DirSelectionListener interface // 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: // to support the GUI:
CropGUIListener* getCropGUIListener (); // through the CropGUIListener the editor area can notify the "crop" ToolPanel when the crop selection changes CropGUIListener* getCropGUIListener (); // through the CropGUIListener the editor area can notify the "crop" ToolPanel when the crop selection changes