]> Creatis software - creaImageIO.git/commitdiff
memory leak tracking
authorFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Wed, 30 Sep 2009 16:28:03 +0000 (16:28 +0000)
committerFrederic Cervenansky <Frederic.Cervenansky@creatis.insa-lyon.fr>
Wed, 30 Sep 2009 16:28:03 +0000 (16:28 +0000)
30 files changed:
src2/creaImageIODicomImageReader.cpp
src2/creaImageIOGimmick.cpp
src2/creaImageIOGimmick.h
src2/creaImageIOGimmickReaderDialog.cpp
src2/creaImageIOGimmickView.cpp
src2/creaImageIOGimmickView.h
src2/creaImageIOImageReader.cpp
src2/creaImageIOImageReader.h
src2/creaImageIOIndexedHeap.h
src2/creaImageIOIndexedHeap.txx
src2/creaImageIOListener.cpp
src2/creaImageIOMultiThreadImageReader.cpp
src2/creaImageIOMultiThreadImageReader.h
src2/creaImageIOSettings.cpp
src2/creaImageIOSynchron.cpp
src2/creaImageIOSystem.h
src2/creaImageIOTreeLevelDescriptor.cpp
src2/creaImageIOTreeNode.cpp
src2/creaImageIOTreeNode.h
src2/creaImageIOVtkImageReader.h
src2/creaImageIOWxEditFieldsPanel.cpp
src2/creaImageIOWxGimmickReaderDialog.cpp
src2/creaImageIOWxGimmickReaderDialog.h
src2/creaImageIOWxGimmickTools.cpp
src2/creaImageIOWxGimmickView.cpp
src2/creaImageIOWxGimmickView.h
src2/creaImageIOWxTreeView.cpp
src2/creaImageIOWxTreeView.h
src2/creaImageIOWxViewer.cpp
src2/creaImageIOWxViewer.h

index 35075fb475510623e856e2c4e351dff8a3dd960d..96d56724d04446da73144a5af94445602c1c06d2 100644 (file)
@@ -6,7 +6,9 @@
 
 #include <creaImageIOTreeAttributeDescriptor.h>
 #include <vtkStringArray.h>
-
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 namespace creaImageIO
 {
 
index a13809b7a8a1c885ff35590e88c6074976b4f386..e168c3769baa12b10a85243a77011076f39a6e81 100644 (file)
@@ -1,3 +1,4 @@
+
 #include <creaImageIOGimmick.h>
 
 #include <creaImageIOSystem.h>
@@ -8,13 +9,17 @@
 #  define PATH_MAX 2048
 #endif
 
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
 namespace creaImageIO
 {
   //==============================================================
   Gimmick::Gimmick()
     : mImageAdder(0)
   {    
-    RegisterGimmickMessageTypes();
+  RegisterGimmickMessageTypes();
        mSettings=0;
        mSynchronizer=0;
   }
@@ -85,18 +90,18 @@ namespace creaImageIO
                }
        }
 
-  ////////////////////////////////////////////////////////////////////////
-  // create a DB from a attributes descriptor file for medical images   //
-  // @param i_name : DB name                                           //
-  // @param i_locDesc : location of descriptor file                    //
-  // @param i_locDB : location of DB                                   //
-  // return : the SQLiteTreeHandler object on DB                       //
-       //////////////////////////////////////////////////////////////////
SQLiteTreeHandler *Gimmick::createDB(const std::string &i_name,
-                                     const std::string &i_locDesc,
-                                     const std::string &i_locDB)
+  ///////////////////////////////////////////////////////////////////////////
+  // create a DB from a attributes descriptor file for medical images      //
+  // @param i_name : DB name                                                                                      //
+  // @param i_locDesc : location of descriptor file                                               //
+  // @param i_locDB : location of DB                                                                      //
+  // return : the SQLiteTreeHandler object on DB                                                  //
+       /////////////////////////////////////////////////////////////////////////
      SQLiteTreeHandler* Gimmick::createDB(const std::string &i_name,
+                                            const std::string &i_locDesc,
+                                            const std::string &i_locDB)
   {
-      SQLiteTreeHandler *sqlTreeH = new SQLiteTreeHandler(i_locDB);
+     SQLiteTreeHandler* sqlTreeH( new SQLiteTreeHandler(i_locDB) );
     // Create or open local database
     if (! boost::filesystem::exists(i_locDB) )
      {
index 4e7ec07efaeb9f3fa9a69685e572791105ea14f3..0705046e224eabf32c94e1f8a6355fe547a06bdb 100644 (file)
@@ -6,6 +6,38 @@
 #include <creaImageIOSynchron.h>
 #include <creaImageIOSettings.h>
 
+
+#ifdef _DEBUG
+#include <crtdbg.h>
+#define DEBUG_NEW new(_NORMAL_BLOCK ,__FILE__, __LINE__)
+#else
+#define DEBUG_NEW new
+#endif
+// Only when asked
+/*
+#ifdef TRACKING_MEMORY_LEAKS
+#ifdef WIN32
+#pragma warning(disable : 4291)
+#endif
+
+void * operator new( size_t size, int line, const char *file );
+void * operator new[]( size_t size, int line, const char *file );
+void operator delete( void *p );
+void operator delete[]( void *p );
+
+#ifdef OMISCID_NEW
+#undef OMISCID_NEW
+#endif
+
+#define OMISCID_NEW new( __LINE__, __FILE__ )
+
+#else // TRACKING_MEMORY_LEAKS is not defined
+
+#define OMISCID_NEW new
+
+#endif*/
+
+
 namespace creaImageIO
 {
        /**
@@ -76,7 +108,7 @@ namespace creaImageIO
     static void SetDebugMessageLevel(int level);
     
     /// Type of map from TreeHandler name to TreeHandler*
-    typedef std::map<std::string, TreeHandler*> TreeHandlerMapType;
+       typedef std::map<std::string, TreeHandler*> TreeHandlerMapType;
 
     /// Returns the TreeHandlerMap (ref)
     TreeHandlerMapType& GetTreeHandlerMap() { return mTreeHandlerMap; }
@@ -112,7 +144,7 @@ namespace creaImageIO
     void Print(const std::string& handler);
        
     ///create a DB from a given descriptor file and for a specific location
-    SQLiteTreeHandler *createDB(const std::string &i_name, 
+       SQLiteTreeHandler* createDB(const std::string &i_name, 
                                const std::string &i_locDesc, 
                                const std::string &i_locDB);
 
@@ -123,10 +155,9 @@ namespace creaImageIO
     TreeHandler* GetTreeHandler(const std::string& name) const;
 
        /// 
-    SQLiteTreeHandler* GetLocalDatabase() { return mLocalDatabase; }
+       SQLiteTreeHandler* GetLocalDatabase() { return mLocalDatabase; }
 
-    const SQLiteTreeHandler* GetLocalDatabase() const 
-    { return mLocalDatabase; }
+    const SQLiteTreeHandler* GetLocalDatabase() const     { return mLocalDatabase; }
 
        ///Returns the given setting value for the given setting parameter
        void GetSetting(const std::string& name, std::string& value);
@@ -156,7 +187,7 @@ namespace creaImageIO
 
     //=============================================
   private:
-    SQLiteTreeHandler* mLocalDatabase;
+       SQLiteTreeHandler* mLocalDatabase;
        TreeHandlerMapType mTreeHandlerMap;
        Synchronizer* mSynchronizer;
 
index d890f701e9cc83727fc30dd2ef5c0bfb576b9a17..5b575d6d29613fb071f656a568625fab42dc76c0 100644 (file)
@@ -1,6 +1,9 @@
 #include <creaImageIOGimmickReaderDialog.h>
 #include <creaImageIOWxGimmickReaderDialog.h>
 
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 
 namespace creaImageIO
 {
index 01f868ebc0342048e13961f4da10412843a205fb..e8fdb5595eb5da4c9bc245842dba254b34a0dd89 100644 (file)
@@ -1,6 +1,5 @@
 #include <creaImageIOGimmickView.h>
 #include <creaImageIOSystem.h>
-
 #include "boost/filesystem.hpp"
 
 namespace fs = boost::filesystem;
@@ -352,14 +351,15 @@ void GimmickView::ReadImagesNotThreaded(std::vector<vtkImageData*>& s,std::vecto
   //======================================================================
   ///Requests the reading of an image
   void GimmickView::RequestReading(tree::Node* n, 
-                                  int prio, int selection_index, ImagePointerHolder *p)
+         int prio, int selection_index, boost::shared_ptr<ImagePointerHolder> p)
   {
          if(!mReaderStarted)
          {
                mReader.Start();
                mReaderStarted=true;
          }
-    ImageEventType t(n,selection_index, p);
+    ImageEventType t(n,selection_index);
+       t.pointerHolder = p;
     mImageEventMap[n->GetAttribute("FullFileName")] = t;    
     mReader.Request(this,n->GetAttribute("FullFileName"),prio);
   }
index 9230ba38f10fece6a08cb9b70207fc00c46ce5bd..6fca80290652d87ee96c74b3a55f86aeb6702254 100644 (file)
@@ -103,7 +103,8 @@ namespace creaImageIO
          void ReadImagesNotThreaded(std::vector<vtkImageData*>& s,std::vector<std::string> files, int dim);
       ///Requests the reading of an image with priority and index in the 
       /// current selection (-1 if not in selection)
-      void RequestReading(tree::Node* n, int prio, int selection_index , ImagePointerHolder *p);
+      //void RequestReading(tree::Node* n, int prio, int selection_index , ImagePointerHolder *p);
+         void RequestReading(tree::Node* n, int prio, int selection_index , boost::shared_ptr<ImagePointerHolder> p);
      
       
       ///Obtains the message of the state
@@ -157,7 +158,7 @@ namespace creaImageIO
     private:
        
       /// Controller which manages the interaction with the model
-      Gimmick* mGimmick;
+               boost::shared_ptr< Gimmick> mGimmick;
       /// The views 
       TreeViewMapType mTreeViewMap;
       /// The message that results from the validation
@@ -171,15 +172,15 @@ namespace creaImageIO
       struct ImageEventType
       {
        ImageEventType( tree::Node* no = 0,   
-                       int sel_index = -1,
-                       ImagePointerHolder* ph= 0)
-         : node(no), index(sel_index),  pointerHolder(ph){}
+                       int sel_index = -1)
+//                     ImagePointerHolder* ph= 0)
+: node(no), index(sel_index){}//,  pointerHolder(ph){}
         ImageEventType(vtkImageData* im )
          : image(im) {}
         tree::Node* node;
         vtkImageData* image;
                int index;
-               ImagePointerHolder* pointerHolder;
+               boost::shared_ptr<ImagePointerHolder> pointerHolder;
       };
       typedef std::map<std::string,ImageEventType> ImageEventTypeMap;
       /// Map of images' names to ImageEventType
index 54257c1abc7fa45ea2fe87807f48ee28c5d6ddc5..1ef6ce428a84d1c61fd7f9d6fb5b166e9995c6ab 100644 (file)
@@ -15,7 +15,6 @@
 //#include <vtkGESignalReader.h>
 
 
-
 #include "boost/filesystem/path.hpp"
 
 namespace creaImageIO
@@ -29,23 +28,20 @@ namespace creaImageIO
   ImageReader::ImageReader()
     :   
     mUnreadableImage(0),
-    mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"),
-    mLastReader(0)
-
+    mLastFilename("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&")
   {
     //    std::cout << "#### ImageReader::ImageReader()"<<std::endl;
     if (mUnreadableImage!=0) return;
-
-
-    Register(new VtkImageReader(vtkPNGReader::New(), "PNG", ".png"));
-    Register(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg"));
-    Register(new VtkImageReader(vtkJPEGReader::New()));
-    Register(new VtkImageReader(vtkBMPReader::New()));
-    Register(new VtkImageReader(vtkSLCReader::New()));
-    Register(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd"));
+       
+       Register( boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkPNGReader::New(), "PNG", ".png")));
+    Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkTIFFReader::New(), "JPEG", ".jpeg")));
+    Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkJPEGReader::New())));
+    Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkBMPReader::New())));
+    Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkSLCReader::New())));
+    Register(boost::shared_ptr<AbstractImageReader>(new VtkImageReader(vtkMetaImageReader::New(),"MHD",".mhd")));
     //   Register(new VtkImageReader(vtkGESignalReader::New()));
-    Register(new DicomImageReader);
-    Register(new UltrasonixImageReader);
+    Register(boost::shared_ptr<AbstractImageReader>(new DicomImageReader));
+    Register(boost::shared_ptr<AbstractImageReader>(new UltrasonixImageReader));
 
  
     mUnreadableImage = vtkImageData::New();
@@ -72,12 +68,12 @@ namespace creaImageIO
   //=====================================================================
   ImageReader::~ImageReader()
   {
-      std::vector<AbstractImageReader*>::iterator i;
-    for (i=mReader.begin(); i!=mReader.end(); i++)
-      {
-       delete (*i);
-      }
-    mReader.clear();
+
//   for (i=mReader.begin(); i!=mReader.end(); i++)
//     {
+       //delete (*i);
//     }
+//    mReader.clear();
     if (mUnreadableImage!=0) 
       {
        mUnreadableImage->Delete();
@@ -87,7 +83,7 @@ namespace creaImageIO
   //=====================================================================
 
   //=====================================================================
-  void ImageReader::Register(AbstractImageReader* r)
+  void ImageReader::Register(boost::shared_ptr<AbstractImageReader> r)
   {
     mReader.push_back(r);
 
@@ -101,7 +97,7 @@ namespace creaImageIO
     bool ok = false;
        if(filename != "")
        {
-           std::vector<AbstractImageReader*>::iterator i;
+               std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
                for (i=mReader.begin(); i!=mReader.end(); i++)
                {
                        ok = (*i)->CanRead(filename);
@@ -162,7 +158,7 @@ namespace creaImageIO
   /// Pushes back all kwown extensions (without dot) in the vector given
   void ImageReader::PushBackExtensions(std::vector<std::string>& v)
   {
-    std::vector<AbstractImageReader*>::iterator i;
+         std::vector<boost::shared_ptr<AbstractImageReader> >::iterator i;
     for (i=mReader.begin(); i!=mReader.end(); i++)
       {
        (*i)->PushBackExtensions(v);
index f0823f47f6f8d37bd122191b1a4e2cab066f622a..f7366428c63e3a340b01456a919b5109964c73c1 100644 (file)
@@ -42,13 +42,13 @@ namespace creaImageIO
   protected:
     
     /// Register a reader
-    void Register(AbstractImageReader*);
+    void Register( boost::shared_ptr<AbstractImageReader> );
 
-    std::vector<AbstractImageReader*> mReader;
+       std::vector<boost::shared_ptr<AbstractImageReader> > mReader;
     vtkImageData* mUnreadableImage;
 
     std::string mLastFilename;
-    AbstractImageReader* mLastReader;
+       boost::shared_ptr<AbstractImageReader> mLastReader;
     
   private:
 
index 138fc56ae36b1a1f6a73f15cae784552a7356475..8568b67c9c3bc677481d20e8bd957dd1caf191cc 100644 (file)
@@ -78,7 +78,7 @@ namespace creaImageIO
     /// returns the size of the Heap 
     inline int size() const {return m_p.size(); }
     /// empties the Heap 
-    void clear();
+       void clear();
     //======================================================================
        
     //======================================================================
index b5b57538fc9b367cb586cb03b82b3bf8ea964f10..1ca4a2e0648f722af0332a049e1dd0231ff907f0 100644 (file)
@@ -117,6 +117,7 @@ void IndexedHeap<T,CT,IT>::clear()
 {
   for (typename std::vector<T>::iterator i=m_p.begin(); i!=m_p.end(); ++i) 
     { 
+         (*m_i)(*i)->delete(); 
       (*m_i)(*i)=-1; 
     }
   m_p.clear();
index f2505e052e153b373f6b017daf80ed2dd4213404..33090d5828eb7e8a7b6c44e5e9380c02142107f3 100644 (file)
@@ -4,7 +4,6 @@
 #include <boost/filesystem/operations.hpp>
 #include <boost/utility.hpp>
 
-
 namespace fs = boost::filesystem;
 using boost::filesystem::path;
 
index 3f4ba3ab6413f38c722ab51e41fe848cad3141e3..7daf7403c9429406558d9fe1955ec48a4ee320c6 100644 (file)
@@ -53,7 +53,8 @@ namespace creaImageIO
     // Create the threads
     for (int i=0; i<number_of_threads; i++) 
       {
-       ThreadedImageReader* t = new ThreadedImageReader(this);
+       //ThreadedImageReader* t = new ThreadedImageReader(this);
+       boost::shared_ptr<ThreadedImageReader> t(new ThreadedImageReader(this));
        mThreadedImageReaderList.push_back(t);
         std::cout << "  ===> Thread "<<i
                              <<" successfully added"<< std::endl;
@@ -169,6 +170,7 @@ namespace creaImageIO
     //       <<std::endl;
     Stop();
     if (mReader) delete mReader;
+       mThreadedImageReaderList.clear();
   }
   //=====================================================================
 
index e6505b2702a87d6cb36037102be6855771c0bd86..bd79d04feb0c1a27cb785ca416f680930282765f 100644 (file)
@@ -209,7 +209,7 @@ namespace creaImageIO
                ImageToLoadPtrIndexer> mQueue;
 
     /// The type of list of threaded readers
-    typedef std::vector<ThreadedImageReader*> ThreadedImageReaderListType;
+       typedef std::vector<boost::shared_ptr<ThreadedImageReader> > ThreadedImageReaderListType;
     ThreadedImageReaderListType mThreadedImageReaderList;
     /// The number of currently running threaded readers
     int mNumberOfThreadedReadersRunning;
index 92908785bc43de2a340dfba8254150d64e3ad3a7..69ec28290af24d922aa56e6d2d010ef74d66b060 100644 (file)
@@ -4,6 +4,10 @@
 #include <iostream>
 #include <fstream>
 
+// Memory tracking allocation
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 using namespace boost;
 namespace po = boost::program_options;
 
index f7e1807b0908b5a0ff82324c3fef40004d0bc89e..075bbaf0e28da640a2023034f92b34d5933ee0e7 100644 (file)
@@ -4,7 +4,6 @@
 #include <boost/algorithm/string.hpp>
 //namespace fs = boost::filesystem;
 
-
 //=====================================================================
  
 
@@ -47,7 +46,7 @@ namespace creaImageIO
    //=====================================================================
     Synchronizer::~Synchronizer()
     {
-       
+       delete mDB;
     }
 
        //=====================================================================
index 27ff483ebf91453f30b40e41d92c0e02279415df..2d2789dcdd096fe467cdc14a84e35f2705ec1852 100644 (file)
@@ -15,6 +15,7 @@
   #define CREAIMAGEIO_CDECL
 #endif // defined(_WIN32)
 
+
 namespace creaImageIO
 {
   //==============================================================
index 460fd4f2ac0a719929880a7bd31722599291b3e9..916bb9fb67be3c8712f4c184058fdcc1eedeacc1 100644 (file)
@@ -1,6 +1,10 @@
 #include <creaImageIOTreeLevelDescriptor.h>
 #include <creaImageIOSystem.h>
 
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
 namespace creaImageIO
 {
   namespace tree
index a8cf7929dc6a04e589c0cf228eb3486cbc90a8c3..8b2a29b1ff23f622f05b4551788092ea73080ccc 100644 (file)
@@ -11,8 +11,7 @@ namespace creaImageIO
     //=============================================================
     /// Ctor with parent
     Node::Node(Node* parent)
-      : mParent(parent),
-       mData(0),
+      : mParent(parent),//mData(0),
        mChildrenLoaded(false)
     {
       if (parent) 
@@ -34,12 +33,12 @@ namespace creaImageIO
     //=============================================================
     /// Ctor with parent and attributes map 
     Node::Node(Node* parent, const AttributeMapType& attr)
-     : mParent(parent),
-       mData(0),
+     : mParent(parent),//mData(0),
        mChildrenLoaded(false)
     {
       GimmickDebugMessage(6,"Node constructor (level "<<GetLevel()<<")"
                     << std::endl);
+
      if (parent) 
        {
          // Insert into parent's children list
@@ -76,11 +75,7 @@ namespace creaImageIO
        {
          delete *i;
        }
-      if (mData) 
-       {
-         delete mData;
-         mData = 0;
-       }
+
     }
     //=============================================================
 
index 55d6ab570b36a46c7adad26c00419fb0e5ccf284..5b221de611009e0ef07009df3e944730d1fde3d1 100644 (file)
@@ -3,9 +3,11 @@
 
 #include <creaImageIOTreeDescriptor.h>
 #include <creaImageIOTreeComparators.h>
+#include<boost/filesystem/operations.hpp>
 #include <vector>
 #include <map>
 
+
 namespace creaImageIO
 {
 
@@ -115,7 +117,7 @@ namespace creaImageIO
       { if (mData!=0) return dynamic_cast<T>(mData); return 0; }
 
       /// Sets the node data. Deletes existing data if any.
-      void SetData(NodeData* d) { if (mData) delete mData; mData = d; }
+         void SetData(boost::shared_ptr<NodeData> d) { mData = d; }//{ if (mData) delete mData; mData = d; }
 
       /// Sorts the children of the node 
       void SortChildren(const LexicographicalComparator&);
@@ -135,7 +137,7 @@ namespace creaImageIO
       /// The map of attributes
       AttributeMapType mAttributeMap;
       /// User data
-      NodeData* mData;
+      boost::shared_ptr<NodeData> mData;
       /// Are the children loaded ?
       bool mChildrenLoaded;
       /// The number of children
index b9712103ec03fc566aa691dc5d66a16f31c2def1..44e8f230277c6023ad5bbd6f2cb4e82fdd6c9bd9 100644 (file)
@@ -26,6 +26,8 @@ namespace creaImageIO
 
     virtual ~VtkImageReader();
 
+
+
        /// Add file extensions read by the reader
     virtual void PushBackExtensions(std::vector<std::string>&);
        /// Test if file is read by this reader
index 81d7ae0a2c5769fa22b7ffa8957d667cc9188af7..6db827b7eb9cf608ebc5481d36756cf03f304879 100644 (file)
@@ -1,6 +1,7 @@
 #include <creaImageIOWxEditFieldsPanel.h>
 #include <creaImageIOSystem.h>
 #include <wx/arrstr.h>
+
 //using namespace tree;
 namespace creaImageIO
 {
index e7cd5b8a94691fc5fbc9388afa7ff387b23d7d63..fe84eff3fbbd18d570b93375ddc5db6e17ede9e1 100644 (file)
@@ -1,6 +1,7 @@
 #include <creaImageIOWxGimmickReaderDialog.h>
 #include <creaImageIOSystem.h>
 
+
 namespace creaImageIO
 {
   // CTor
@@ -25,7 +26,7 @@ namespace creaImageIO
                  wxMINIMIZE_BOX | 
                  wxCAPTION  
               ),
-     mGimmick(0),
+    mGimmick(0),
      mView(0)
   {
     GimmickDebugMessage(1,"WxGimmickReaderDialog::WxGimmickReaderDialog"
index 1933a38174f1f1b3862cc1427d7bff64b0fb24d3..fd393eaf4e9c7e7b149244534ad4aa6439ea3cbe 100644 (file)
@@ -55,12 +55,13 @@ namespace creaImageIO
     // void OnButtonCancel(wxCommandEvent& event);
 
   private :
-
-    Gimmick*       mGimmick;
+    
+         Gimmick*      mGimmick;
     WxGimmickView* mView;
 
     wxButton* mOkButton;
     wxButton* mCancelButton;
+       
 
     enum 
       {
index 4c7f57a6b1faf6ce536ff5d213f929b9508e3450..fc978c76c28b9028f54b52c10be9f467ef3b0db3 100644 (file)
@@ -1,5 +1,6 @@
 #include <creaImageIOWxGimmickTools.h>
 
+
 namespace creaImageIO
 {
        /**
index 63e393af5a903cf56e9957139222386dbab610c7..ac204d9227960bcccb940168b6bf7662f5880c2e 100644 (file)
@@ -1,3 +1,5 @@
+#include <creaImageIOPACSConnection.h>
+#include <creaImageIOWxPACSConnectionPanel.h>
 #include <creaImageIOWxGimmickView.h>
 #include <creaImageIOWxTreeView.h>
 #include <creaImageIOSystem.h>
@@ -5,7 +7,6 @@
 #include <creaImageIOWxListenerPanel.h>
 #include <creaImageIOWxEditFieldsPanel.h>
 #include <creaImageIOWxAttributeSelectionPanel.h>
-#include <creaImageIOWxPACSConnectionPanel.h>
 #include <creaImageIOWxDescriptorPanel.h>
 
 using namespace crea;
@@ -29,7 +30,9 @@ using namespace crea;
 #if defined(BUILD_BRUKER)
        #include "bruker2dicom.h"
 #endif
-
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 namespace creaImageIO
 {
    
@@ -142,9 +145,11 @@ namespace creaImageIO
     
     // Previewer
     mViewer = new WxViewer(mBottomPanel, wxID_ANY, wxT("Gimmick! Viewer"),wxDefaultPosition, wxDefaultSize );
-    pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
-    mViewer->SetImageVector(pointers);
-    mViewer->StartPlayer();
+       //pointers.push_back(new ImagePointerHolder(GetDefaultImage())
+       pointers.push_back(boost::shared_ptr<creaImageIO::ImagePointerHolder>(new ImagePointerHolder(GetDefaultImage())));
+
+       mViewer->SetImageVector(pointers);
+       mViewer->StartPlayer();
 
 
     bottom_sizer->Add(mViewer,1,wxGROW,1);
@@ -573,7 +578,8 @@ namespace creaImageIO
                           "Requesting image from selected "
                           <<(*selected)->GetAttribute("FullFileName")
                           <<std::endl);
-          ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          //ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          boost::shared_ptr<ImagePointerHolder> ph(new ImagePointerHolder(GetDefaultImage()));
           pointers.push_back(ph);
        RequestReading(*selected,prio,index,ph);
        //       AddEntryToMap(*selected);
@@ -592,7 +598,8 @@ namespace creaImageIO
                                "Requesting image from neighbors up "
                                <<(*iterUp)->GetAttribute("FullFileName")
                                <<std::endl);
-               ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+//             ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               boost::shared_ptr<ImagePointerHolder> ph(new ImagePointerHolder(GetDefaultImage()));
                RequestReading(*iterUp,prio,-1,ph);
                //              AddEntryToMap(*iterUp);
                prio--;
@@ -610,7 +617,8 @@ namespace creaImageIO
                                "Requesting image from neighbors down "
                                <<(*iterDown)->GetAttribute("FullFileName")
                                <<std::endl);
-               ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               //ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+               boost::shared_ptr<ImagePointerHolder> ph(new ImagePointerHolder(GetDefaultImage()));
                RequestReading(*iterDown,prio,-1,ph);
                //              AddEntryToMap(*iterDown);
                prio--;
@@ -620,7 +628,8 @@ namespace creaImageIO
    else
    {
           pointers.clear();
-          ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          //ImagePointerHolder* ph=new ImagePointerHolder(GetDefaultImage());
+          boost::shared_ptr<ImagePointerHolder> ph(new ImagePointerHolder(GetDefaultImage()));
           pointers.push_back(ph);
           mViewer->SetImageVector(pointers);
    }
@@ -653,7 +662,8 @@ namespace creaImageIO
    void  WxGimmickView::ClearSelection()
    {
        pointers.clear();
-       pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
+       pointers.push_back(boost::shared_ptr<creaImageIO::ImagePointerHolder>(new ImagePointerHolder(GetDefaultImage())));
+       //pointers.push_back(new ImagePointerHolder(GetDefaultImage()));
        mViewer->SetImageVector(pointers);
        mViewer->RefreshIfNecessary();
        ResetExtent();
@@ -1077,6 +1087,7 @@ namespace creaImageIO
   //////////////////////////////////////////////////
   void WxGimmickView::OnCreateDB(wxCommandEvent& event)
   {
+       //  PACSConnection("");
        WxDescriptorPanel * DescriptorPan = new WxDescriptorPanel(this, mGimmick->GetHomeDirectory());
        DescriptorPan->Layout();
        if ( DescriptorPan->ShowModal() == ID_DSCP_APPLY)
index b710bca54d2fe762b82e1fd69901276e1b70ad38..f08e937cfadc2d30eb91b973b75d17a3c354922b 100644 (file)
@@ -201,7 +201,7 @@ namespace creaImageIO
     ///Currently Displayed Node
     tree::Node* mCurImageItemToShow;
     //Pointer holders for images to be shown
-    std::vector<ImagePointerHolder*> pointers;
+       std::vector< boost::shared_ptr<ImagePointerHolder> > pointers;
     
     
     wxString mCurrentDirectory;
index fdf3a5c67ccfd2036071fd683d00f66bb952f8df..c196659863950190bbb9ac0d2a1123333ca3d8be 100644 (file)
@@ -5,26 +5,11 @@
 #include <wx/gdicmn.h>
 #include <boost/date_time/gregorian/gregorian.hpp>
 
-const std::string empty_string("");
 
 //=====================================================================
 namespace creaImageIO
 {
-  //=====================================================================
-  /// Data stored by the list items
-  struct ItemData
-  {
-    ItemData() : node(0), id(-1), attr(&empty_string) {}
-    // The corresponding Node
-    tree::Node* node;
-    // The id ?
-    int id;
-    // The pointer on the current attribute string to sort on
-    const std::string* attr;
-    // Was the item previously selected ?
-    // Useful for reselecting the item after sort
-    bool selected;
-  };
+
   //=====================================================================
 }
 //=====================================================================
@@ -263,6 +248,9 @@ namespace creaImageIO
   {
     GimmickDebugMessage(1,"WxTreeView::~WxTreeView"
                        <<std::endl);
+       delete menu;
+       delete menuItem;
+
   }
   //=====================================================================
   
@@ -275,7 +263,10 @@ namespace creaImageIO
     int l = level - 1;
     // the selection of upper level
        std::vector<tree::Node*>& sel(mLevelList[l].Selected);
-    sel.clear();
+       if (sel.size() > 0)
+       {
+               sel.clear();
+       }
          if (level == 1) 
       {
        sel.push_back(GetTreeHandler()->GetTree().GetTree());
@@ -492,13 +483,13 @@ namespace creaImageIO
                         wxLIST_MASK_FORMAT
                         );
            
-           ItemData* data = new ItemData;
+               ItemData* data = new ItemData();
            data->node = *j;
            data->id = _id;
-           
+               
            item.SetId(_id);
            item.SetData(data);
-           
+
            _id++;
            GetCtrl(l)->InsertItem(item);
            
@@ -545,6 +536,7 @@ namespace creaImageIO
                item.SetText( crea::std2wx(val));
                item.SetColumn(k);
                GetCtrl(l)->SetItem(item);
+               item.Clear();
              } 
            
          }
index 126c9410a6aabe86abfa02274f783ad9c7609874..586eea2b5a8aaba9d4e65b7ffbc13b09de0ed7d5 100644 (file)
@@ -9,10 +9,25 @@
 #include <wx/listctrl.h>
 #include <wx/splitter.h>
 //#include <vector>
-
+const std::string empty_string("");
 namespace creaImageIO
 {
 
+         //=====================================================================
+  /// Data stored by the list items
+  struct ItemData
+  {
+    ItemData() : node(0), id(-1), attr(&empty_string) {}
+    // The corresponding Node
+    tree::Node* node;
+    // The id ?
+    int id;
+    // The pointer on the current attribute string to sort on
+    const std::string* attr;
+    // Was the item previously selected ?
+    // Useful for reselecting the item after sort
+    bool selected;
+  };
   /**
    * \ingroup View
    */
@@ -174,7 +189,6 @@ namespace creaImageIO
       // or sorting
       bool mIgnoreSelectedChanged;
 
-
       DECLARE_EVENT_TABLE()
     };
     // EO class WxTreeView
index cf9f13cf32d38ae8d26227981e4cd82167bba15d..f73e81ebc5093375f2b9fbebe996d16cebbbbe2d 100644 (file)
@@ -11,7 +11,7 @@
 #include <time.h>
 
 using namespace crea;
-
+// Memory tracking allocation
 namespace creaImageIO
 {
   
@@ -92,7 +92,7 @@ namespace creaImageIO
   //=====================================================================
 
   //================================================================
-  void WxViewer::SetImageVector(std::vector<ImagePointerHolder*>& pointers)
+   void WxViewer::SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> >& pointers)
   {
        wxMutexLocker lock(mMutex);
        GimmickDebugMessage(6,"WxViewer::SetImageVector"<<std::endl);
@@ -114,7 +114,8 @@ namespace creaImageIO
        {
                if (mCurrent<imagePointers.size()) 
                {
-                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
+                       //ImagePointerHolder* iph= imagePointers[mCurrent];
                        vtkImageData* currIm=iph->Get();
                        ShowImage(currIm);
                        if ( currIm != mLastImageShown ) 
@@ -127,7 +128,8 @@ namespace creaImageIO
                else
                {
                        mCurrent = 0;
-                       ImagePointerHolder* iph=imagePointers[mCurrent];
+                       //ImagePointerHolder* iph=imagePointers[mCurrent];
+                       boost::shared_ptr<ImagePointerHolder> iph = imagePointers[mCurrent];
                        vtkImageData* currIm=iph->Get();
                        ShowImage(currIm);
                        if ( currIm != mLastImageShown ) 
index 528336455f0fedb5e9cd2be74f5b83b78e83f13b..a13632f16ed8669380875ee7e28ccd68a9723aed 100644 (file)
@@ -44,7 +44,8 @@ namespace creaImageIO
        ///Refreshes the interface if the current image shown has changed
     bool RefreshIfNecessary();
        ///Sets a new image vector to be read
-       void SetImageVector(std::vector<ImagePointerHolder*>& pointers);
+
+       void SetImageVector(std::vector<boost::shared_ptr<ImagePointerHolder> > &pointers);
   
 
   private:
@@ -54,6 +55,7 @@ namespace creaImageIO
     vtkImageViewer2* mViewer;
     /// Associated wxvtk interactor
     crea::creawxVTKRenderWindowInteractor  *mInteractor;
+       
     /// Current extent 
     int mx1,mx2,my1,my2,mz1,mz2;
     /// Current spacing
@@ -69,7 +71,7 @@ namespace creaImageIO
        ///Last image shown
     vtkImageData* mLastImageShown;
        ///The vectors of images to be shown
-       std::vector<ImagePointerHolder*> imagePointers;
+       std::vector< boost::shared_ptr<ImagePointerHolder> > imagePointers;
 
   };