]> 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 35075fb..96d5672 100644 (file)
@@ -6,7 +6,9 @@
 
 #include <creaImageIOTreeAttributeDescriptor.h>
 #include <vtkStringArray.h>
-
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 namespace creaImageIO
 {
 
index a13809b..e168c37 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 4e7ec07..0705046 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 d890f70..5b575d6 100644 (file)
@@ -1,6 +1,9 @@
 #include <creaImageIOGimmickReaderDialog.h>
 #include <creaImageIOWxGimmickReaderDialog.h>
 
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 
 namespace creaImageIO
 {
index 01f868e..e8fdb55 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 9230ba3..6fca802 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 54257c1..1ef6ce4 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 f0823f4..f736642 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 138fc56..8568b67 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 b5b5753..1ca4a2e 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 f2505e0..33090d5 100644 (file)
@@ -4,7 +4,6 @@
 #include <boost/filesystem/operations.hpp>
 #include <boost/utility.hpp>
 
-
 namespace fs = boost::filesystem;
 using boost::filesystem::path;
 
index 3f4ba3a..7daf740 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 e6505b2..bd79d04 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 9290878..69ec282 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 f7e1807..075bbaf 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 27ff483..2d2789d 100644 (file)
@@ -15,6 +15,7 @@
   #define CREAIMAGEIO_CDECL
 #endif // defined(_WIN32)
 
+
 namespace creaImageIO
 {
   //==============================================================
index 460fd4f..916bb9f 100644 (file)
@@ -1,6 +1,10 @@
 #include <creaImageIOTreeLevelDescriptor.h>
 #include <creaImageIOSystem.h>
 
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
 namespace creaImageIO
 {
   namespace tree
index a8cf792..8b2a29b 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 55d6ab5..5b221de 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 b971210..44e8f23 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 81d7ae0..6db827b 100644 (file)
@@ -1,6 +1,7 @@
 #include <creaImageIOWxEditFieldsPanel.h>
 #include <creaImageIOSystem.h>
 #include <wx/arrstr.h>
+
 //using namespace tree;
 namespace creaImageIO
 {
index e7cd5b8..fe84eff 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 1933a38..fd393ea 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 4c7f57a..fc978c7 100644 (file)
@@ -1,5 +1,6 @@
 #include <creaImageIOWxGimmickTools.h>
 
+
 namespace creaImageIO
 {
        /**
index 63e393a..ac204d9 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 b710bca..f08e937 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 fdf3a5c..c196659 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 126c941..586eea2 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 cf9f13c..f73e81e 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 5283364..a13632f 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;
 
   };