[niepce] Don't reload the image until redisplay is needed in Darkroom
- From: Hubert FiguiÃre <hub src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [niepce] Don't reload the image until redisplay is needed in Darkroom
- Date: Thu, 17 Nov 2011 02:23:39 +0000 (UTC)
commit 8d86962a9e8dd2407d347f3536ab51ba6a032ea1
Author: Hub Figuiere <hub figuiere net>
Date: Wed Nov 16 00:03:20 2011 -0800
Don't reload the image until redisplay is needed in Darkroom
src/engine/db/libfile.hpp | 1 +
src/niepce/modules/darkroom/darkroommodule.cpp | 28 ++++++++++++++++++------
src/niepce/modules/darkroom/darkroommodule.hpp | 4 +++
src/niepce/ui/imoduleshell.hpp | 1 +
4 files changed, 27 insertions(+), 7 deletions(-)
---
diff --git a/src/engine/db/libfile.hpp b/src/engine/db/libfile.hpp
index 27f6bac..7b1c357 100644
--- a/src/engine/db/libfile.hpp
+++ b/src/engine/db/libfile.hpp
@@ -38,6 +38,7 @@ class LibFile
{
public:
typedef std::tr1::shared_ptr< LibFile > Ptr;
+ typedef std::tr1::weak_ptr< LibFile> WeakPtr;
typedef std::list< Ptr > List;
typedef std::tr1::shared_ptr< List > ListPtr;
diff --git a/src/niepce/modules/darkroom/darkroommodule.cpp b/src/niepce/modules/darkroom/darkroommodule.cpp
index a85ff27..f0b5895 100644
--- a/src/niepce/modules/darkroom/darkroommodule.cpp
+++ b/src/niepce/modules/darkroom/darkroommodule.cpp
@@ -35,21 +35,38 @@ DarkroomModule::DarkroomModule(const ui::IModuleShell & shell,
: m_shell(shell)
, m_actionGroup(action_group)
, m_image(new ncr::Image)
+ , m_active(false)
+ , m_need_reload(true)
{
m_shell.get_selection_controller()->signal_selected.connect(
sigc::mem_fun(*this, &DarkroomModule::on_selected));
}
-
-void DarkroomModule::set_image(const eng::LibFile::Ptr & file)
+void DarkroomModule::reload_image()
{
+ if(!m_need_reload) {
+ return;
+ }
+ eng::LibFile::Ptr file = m_imagefile.lock();
if(file) {
m_image->reload(file->path(),
file->fileType() == eng::LibFile::FILE_TYPE_RAW,
file->orientation());
+ m_need_reload = false;
}
else {
- // clear out
+ // reset
+ }
+}
+
+void DarkroomModule::set_image(const eng::LibFile::Ptr & file)
+{
+ if(m_imagefile.expired() || (file != m_imagefile.lock())) {
+ m_imagefile = eng::LibFile::WeakPtr(file);
+ m_need_reload = true;
+ if(m_active) {
+ reload_image();
+ }
}
}
@@ -63,10 +80,7 @@ void DarkroomModule::set_active(bool active)
m_active = active;
if(active) {
// if activated, force the refresh of the image.
- ui::SelectionController::Ptr sel = m_shell.get_selection_controller();
- eng::library_id_t id = sel->get_selection();
- eng::LibFile::Ptr file = sel->get_file(id);
- set_image(file);
+ reload_image();
}
}
diff --git a/src/niepce/modules/darkroom/darkroommodule.hpp b/src/niepce/modules/darkroom/darkroommodule.hpp
index f500cf9..98739b3 100644
--- a/src/niepce/modules/darkroom/darkroommodule.hpp
+++ b/src/niepce/modules/darkroom/darkroommodule.hpp
@@ -58,6 +58,8 @@ public:
virtual void set_active(bool active);
protected:
+ void reload_image();
+
virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
private:
@@ -71,11 +73,13 @@ private:
Gtk::ScrolledWindow m_canvas_scroll;
ToolboxController::Ptr m_toolbox_ctrl;
Glib::RefPtr<Gtk::ActionGroup> m_actionGroup;
+ eng::LibFile::WeakPtr m_imagefile;
ncr::Image::Ptr m_image;
fwk::Dock *m_dock;
// state
bool m_active;
+ bool m_need_reload;
};
diff --git a/src/niepce/ui/imoduleshell.hpp b/src/niepce/ui/imoduleshell.hpp
index 1abe4e9..0897cab 100644
--- a/src/niepce/ui/imoduleshell.hpp
+++ b/src/niepce/ui/imoduleshell.hpp
@@ -28,6 +28,7 @@ namespace ui {
class IModuleShell
{
public:
+ virtual ~IModuleShell() {}
virtual const ui::SelectionController::Ptr & get_selection_controller() const = 0;
virtual libraryclient::LibraryClient::Ptr getLibraryClient() const = 0;
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]