[niepce] [cw] Basic gphoto functionnality: list connected cameras.



commit 4408e227dd5f385bdd15c9877404e8bd8bea0dc1
Author: Hubert Figuiere <hub figuiere net>
Date:   Fri May 22 15:03:02 2009 -0400

    [cw] Basic gphoto functionnality: list connected cameras.
---
 camerawire/ChangeLog        |    5 +++++
 camerawire/configure.ac     |    2 ++
 camerawire/src/Makefile.am  |    5 +++--
 camerawire/src/cwwindow.cpp |   30 ++++++++++++++++++++++++++++++
 camerawire/src/cwwindow.hpp |   25 +++++++++++++++++++++++++
 5 files changed, 65 insertions(+), 2 deletions(-)

diff --git a/camerawire/ChangeLog b/camerawire/ChangeLog
index fe7a538..629758e 100644
--- a/camerawire/ChangeLog
+++ b/camerawire/ChangeLog
@@ -1,5 +1,10 @@
 2009-05-22  Hubert Figuiere  <hub figuiere net>
 
+	* configure.ac
+	* src/Makefile.am
+	* src/cwwindow.{hpp,cpp}
+	Basic gphoto functionnality: list connected cameras.
+
 	* Makefile.am: 
 	Fix maintainer mode build.
 
diff --git a/camerawire/configure.ac b/camerawire/configure.ac
index 751c255..8d22eea 100644
--- a/camerawire/configure.ac
+++ b/camerawire/configure.ac
@@ -27,6 +27,7 @@ EXEMPI_VERSION=2.0.0
 GEGL_VERSION=0.0.22
 GEGLMM_VERSION=0.0.22
 LIBOPENRAW_VERSION=0.0.5
+LIBGPHOTO_VERSION=2.4
 dnl need at least 2.5.0 because of xmlTextReader
 LIBXML2_VERSION=2.5.0
 BOOST_VERSION=1.34
@@ -69,6 +70,7 @@ PKG_CHECK_MODULES(GCONF, [gconf-2.0 >= $LIBGCONF_VERSION])
 PKG_CHECK_MODULES(EXEMPI, [exempi-2.0 >= $EXEMPI_VERSION])
 PKG_CHECK_MODULES(LIBXML2, [libxml-2.0 >= $LIBXML2_VERSION])
 PKG_CHECK_MODULES(BABL, babl)
+PKG_CHECK_MODULES(GPHOTO, [libgphoto2 >= $LIBGPHOTO_VERSION libgphoto2_port])
 
 PKG_CHECK_MODULES(OPENRAW, libopenraw-gnome-1.0 >= $LIBOPENRAW_VERSION)
 AC_SUBST(OPENRAW_CFLAGS)
diff --git a/camerawire/src/Makefile.am b/camerawire/src/Makefile.am
index 41972de..a4e428d 100644
--- a/camerawire/src/Makefile.am
+++ b/camerawire/src/Makefile.am
@@ -7,7 +7,8 @@ bin_PROGRAMS = camerawire
 
 INCLUDES = -DDATADIR=\"$(datadir)\" \
 	-I$(top_srcdir)/../src/ -I$(top_srcdir)/src  \
-	@LIBGLIBMM_CFLAGS@ @LIBGTKMM_CFLAGS@ @GCONF_CFLAGS@ 
+	@LIBGLIBMM_CFLAGS@ @LIBGTKMM_CFLAGS@ @GCONF_CFLAGS@ \
+	@GPHOTO_CFLAGS@
 
 
 camerawire_SOURCES = \
@@ -16,7 +17,7 @@ camerawire_SOURCES = \
 	main.cpp
 
 camerawire_LDADD = @LIBGLIBMM_LIBS@ @LIBGTKMM_LIBS@ \
-	@GCONF_LIBS@ \
+	@GCONF_LIBS@ @GPHOTO_LIBS@ \
 	$(top_builddir)/../src/fwk/toolkit/libniepceframework.a \
 	$(top_builddir)/../src/fwk/utils/libniepceutils.a \
 	$(top_builddir)/../src/fwk/libfwk.a \
diff --git a/camerawire/src/cwwindow.cpp b/camerawire/src/cwwindow.cpp
index 1cd6b54..34273ad 100644
--- a/camerawire/src/cwwindow.cpp
+++ b/camerawire/src/cwwindow.cpp
@@ -53,6 +53,15 @@ Gtk::Widget * CwWindow::buildWidget()
 
   Gtk::Widget* pMenuBar = pApp->uiManager()->get_widget("/MenuBar");
   m_vbox.pack_start(*pMenuBar, Gtk::PACK_SHRINK);
+  m_vbox.pack_start(m_hbox, true, true);
+
+  m_camera_tree_model = Gtk::ListStore::create(m_camera_tree_record);
+  Gtk::TreeView *treeview = manage(new Gtk::TreeView(m_camera_tree_model));
+  treeview->append_column("", m_camera_tree_record.m_icon);
+  treeview->append_column(_("Camera"), m_camera_tree_record.m_label);
+  m_hbox.pack_start(*treeview, false, true);
+
+  reload_camera_list();
 
   win.set_size_request(600, 400);
   win.show_all_children();
@@ -94,6 +103,10 @@ void CwWindow::init_actions()
                                         &CwWindow::on_preferences));
 
     m_refActionGroup->add(Gtk::Action::create("MenuTools", _("_Tools")));
+    m_refActionGroup->add(Gtk::Action::create("ReloadCameras",
+                                              Gtk::Stock::REFRESH),
+                          Gtk::AccelKey("F5"),
+                          sigc::mem_fun(*this, &CwWindow::reload_camera_list));
     m_hide_tools_action = Gtk::ToggleAction::create("ToggleToolsVisible",
                                                     _("_Hide tools"));
     m_refActionGroup->add(m_hide_tools_action,
@@ -136,6 +149,8 @@ void CwWindow::init_ui()
     "      <menuitem action='Preferences'/>"
     "    </menu>"
     "    <menu action='MenuTools'>"
+    "      <menuitem action='ReloadCameras' />"
+    "      <separator/>"        
     "      <menuitem action='ToggleToolsVisible'/>"
     "      <separator/>"        
     "    </menu>"
@@ -163,4 +178,19 @@ void CwWindow::on_preferences()
 }
 
 
+void CwWindow::reload_camera_list()
+{
+  using fwk::GpDeviceList;
+
+  GpDeviceList::obj().detect();
+  for(GpDeviceList::const_iterator iter = GpDeviceList::obj().begin();
+      iter != GpDeviceList::obj().end(); ++iter) {
+
+    Gtk::TreeIter treeiter = m_camera_tree_model->append();
+    treeiter->set_value(m_camera_tree_record.m_label, (*iter)->get_model());
+    treeiter->set_value(m_camera_tree_record.m_camera, *iter);
+  }
+}
+
+
 }
diff --git a/camerawire/src/cwwindow.hpp b/camerawire/src/cwwindow.hpp
index 10051bc..4510d8b 100644
--- a/camerawire/src/cwwindow.hpp
+++ b/camerawire/src/cwwindow.hpp
@@ -24,7 +24,11 @@
 #include <gtkmm/action.h>
 #include <gtkmm/actiongroup.h>
 #include <gtkmm/box.h>
+#include <gtkmm/liststore.h>
+#include <gtkmm/treemodel.h>
+#include <gtkmm/treeview.h>
 
+#include "fwk/utils/gphoto.hpp"
 #include "fwk/toolkit/frame.hpp"
 
 namespace cw {
@@ -39,12 +43,33 @@ protected:
   virtual Gtk::Widget * buildWidget();
 
 private:
+  class CameraTreeRecord
+    : public Gtk::TreeModelColumnRecord
+  {
+  public:
+    CameraTreeRecord()
+      {
+        add(m_icon);
+        add(m_label);
+        add(m_camera);
+      }
+
+    Gtk::TreeModelColumn<Glib::RefPtr<Gdk::Pixbuf> > m_icon;
+    Gtk::TreeModelColumn<std::string>        m_label;
+    Gtk::TreeModelColumn<fwk::GpDevice::Ptr> m_camera;
+  };
+
   void init_ui();
   void init_actions();
   void on_action_import();
   void on_preferences();
 
+  void reload_camera_list();
+
+  CameraTreeRecord               m_camera_tree_record;
+  Glib::RefPtr<Gtk::ListStore>   m_camera_tree_model;
   Gtk::VBox                      m_vbox;
+  Gtk::HBox                      m_hbox;
   Glib::RefPtr<Gtk::ActionGroup> m_refActionGroup;
 };
 



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