]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxGimmickView.cpp
export from storage to storage functionality
[creaImageIO.git] / src2 / creaImageIOWxGimmickView.cpp
index 63e393af5a903cf56e9957139222386dbab610c7..77f2a5234c010e0f9be2ca1ea64b5100ca64e081 100644 (file)
@@ -1,3 +1,5 @@
+#include <creaImageIOPACSConnection.h>
+#include <creaImageIOWxPACSConnectionPanel.h>
 #include <creaImageIOWxGimmickView.h>
 #include <creaImageIOWxTreeView.h>
 #include <creaImageIOSystem.h>
@@ -5,8 +7,9 @@
 #include <creaImageIOWxListenerPanel.h>
 #include <creaImageIOWxEditFieldsPanel.h>
 #include <creaImageIOWxAttributeSelectionPanel.h>
-#include <creaImageIOWxPACSConnectionPanel.h>
 #include <creaImageIOWxDescriptorPanel.h>
+#include <creaImageIOWxDumpPanel.h>
+#include <creaImageIOWxExportDlg.h>
 
 using namespace crea;
 // Icons
@@ -30,6 +33,12 @@ using namespace crea;
        #include "bruker2dicom.h"
 #endif
 
+
+#include <creaImageIOGimmick.h>
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
 namespace creaImageIO
 {
    
@@ -46,6 +55,7 @@ namespace creaImageIO
         TOOL_SETTINGS_ID    = 7,
         TOOL_TOOLS_ID       = 8,
         TOOL_CREATEDB_ID    = 9,
+        TOOL_PACS_ID        = 10
     };
   //======================================================================
 
@@ -83,7 +93,7 @@ namespace creaImageIO
 
   //======================================================================
   // CTor
-  WxGimmickView::WxGimmickView(Gimmick* gimmick,
+       WxGimmickView::WxGimmickView(boost::shared_ptr<Gimmick> gimmick,
                               wxWindow *parent, 
                               const wxWindowID id,
                               const wxPoint& pos, 
@@ -102,34 +112,32 @@ namespace creaImageIO
     mCurrentDirectory =  std2wx(gimmick->GetHomeDirectory());
 
      // Connect the AddProgress callback
-    gimmick->ConnectAddProgressObserver
-      ( boost::bind( &WxGimmickView::OnAddProgress , this, _1 ) );
+    gimmick->ConnectAddProgressObserver 
+     ( boost::bind( &WxGimmickView::OnAddProgress , this, _1 ) );
 
     // Create the list of icons (mIcon)
     CreateIconList();
 
     // Global sizer
-    wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+    msizer = new wxBoxSizer(wxVERTICAL);
 
     // Create the tool bar
     CreateToolBar(); 
-    sizer->Add( mToolBar ,0, wxGROW  ,0);
+    msizer->Add( mToolBar, 0, wxGROW, 0);
 
     // Split part below toolbar into notebook for views and panel
     // for preview, messages...
     mSplitter = new wxSplitterWindow( this , -1);
-   
+
     // Notebook
     mNotebook = new wxNotebook(mSplitter,
-                              -1,wxDefaultPosition, wxDefaultSize, 0);
+                              -1, wxDefaultPosition, wxDefaultSize, 0);
 
     //Gimmick
     mGimmick=gimmick;
 
-      
-    mSelectionMaxDimension= max_dim;
-    mSelectionMinDimension= min_dim;
+    mSelectionMaxDimension = max_dim;
+    mSelectionMinDimension = min_dim;
     
     // Create the views
     CreateTreeViews();
@@ -137,25 +145,27 @@ namespace creaImageIO
     // Bottom panel 
     mBottomPanel = new wxPanel(mSplitter,-1);
     
-    wxBoxSizer *bottom_sizer = new wxBoxSizer(wxVERTICAL); //HORIZONTAL);
+    mbottom_sizer = new wxBoxSizer(wxVERTICAL); //HORIZONTAL);
     
     
     // 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);
+    mbottom_sizer->Add(mViewer,1,wxGROW,1);
     //    mViewer->Show();
 
     mText = new wxStaticText(mBottomPanel, wxID_ANY, wxT("Welcome to Gimmick!"));
-    bottom_sizer->Add(mText,0,wxGROW,0);
+    mbottom_sizer->Add(mText,0,wxGROW,0);
 
          
          
-    mBottomPanel->SetSizer(bottom_sizer);
+    mBottomPanel->SetSizer(mbottom_sizer);
 
     // Splitting
     int hsize = size.GetHeight();
@@ -167,17 +177,17 @@ namespace creaImageIO
     mSplitter->SplitHorizontally( mNotebook, mBottomPanel, 
                                  top_minsize);
 
-    sizer->Add( mSplitter,1,wxGROW  ,0);
+    msizer->Add( mSplitter, 1, wxGROW, 0);
 
     mProgressDialog=0;
-    SetSizer( sizer );     
+    SetSizer( msizer );     
     SetAutoLayout(true);
     Layout();
-    mListener=new Listener();
-    mListener->ConnectObserver(boost::bind( &WxGimmickView::OnDriveMount , this, _1 ) );
-    mListener->Create();
-    mListener->Run();
-    mListener->Pause();
+    //mListener=new Listener();
+    //mListener->ConnectObserver(boost::bind( &WxGimmickView::OnDriveMount, this, _1 ) );
+    //mListener->Create();
+   // mListener->Run();
+   // mListener->Pause();
 
     mConstructed = true;
   }
@@ -191,10 +201,9 @@ namespace creaImageIO
     mViewer->StopPlayer();
     GimmickDebugMessage(1,"WxGimmickView::~WxGimmickView"
                        <<std::endl);
-    if(mListener->IsAlive())
-    {
-        mListener->Delete();
-    }
+       delete mIcon;
+       delete mViewer;
+    //if(mListener->IsAlive())   {        mListener->Delete();    }
   }
   //======================================================================
   
@@ -251,7 +260,13 @@ namespace creaImageIO
                                      mIcon->GetBitmap(Icon_create_database),
                                      _T("Create DB from an Attributes Descriptor file")
                                      );
-
+#if defined(BUILD_PACS)
+       mToolAddFile = mToolBar->AddTool( TOOL_PACS_ID, 
+                                     _T("PACS Connection,"),
+                                     mIcon->GetBitmap(Icon_create_database),
+                                     _T("Echo, Find and Get to a PACS")
+                                     );
+#endif
     //const wxBitmap& bitmap1, const wxString& shortHelpString = "", wxItemKind kind = wxITEM_NORMAL)
 
     mToolBar->Realize();
@@ -267,7 +282,7 @@ namespace creaImageIO
     GimmickMessage(2,"Creating the tree view for '"<<
                   name<<"'"<<std::endl);
     // Create the WxTreeView
-    WxTreeView* view = new WxTreeView(h,this,mNotebook,-1);
+    WxTreeView* view = new WxTreeView(h, this, mNotebook, -1);
 
     // TO DO : TEST THAT A VIEW WITH SAME NAME IS NOT
     // ALREADY IN THE MAP
@@ -283,7 +298,15 @@ namespace creaImageIO
   {
        std::vector<std::string> files;
        GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetSelectedAsString(files);
-       ReadImagesNotThreaded(s,files,dim);
+       ReadImagesNotThreaded(s, files, dim);
+  }
+
+  //======================================================================
+  void WxGimmickView::GetSelectedImagesInVector(std::vector<vtkImageData*>& s, int dim)
+  {
+       std::vector<std::string> files;
+       GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->GetSelectedAsString(files);
+       ReadImagesNotThreadedInVector(s, files, dim);
   }
   //======================================================================
 
@@ -312,17 +335,17 @@ namespace creaImageIO
 
     wxIcon icons[20];
     // should correspond to Icon_xxx enum
-    icons[Icon_accept] = wxIcon(accept_xpm);
-    icons[Icon_add] = wxIcon(add_xpm);
-    icons[Icon_folder_down] = wxIcon(folder_down_xpm);
-    icons[Icon_page_down] = wxIcon(page_down_xpm);
-    icons[Icon_remove] = wxIcon(remove_xpm);
-    icons[Icon_database_add] = wxIcon(database_add_xpm);
-    icons[Icon_help] = wxIcon(help_xpm);
-    icons[Icon_synchronize] = wxIcon(synchronize_xpm);
+    icons[Icon_accept]          = wxIcon(accept_xpm);
+    icons[Icon_add]             = wxIcon(add_xpm);
+    icons[Icon_folder_down]     = wxIcon(folder_down_xpm);
+    icons[Icon_page_down]       = wxIcon(page_down_xpm);
+    icons[Icon_remove]          = wxIcon(remove_xpm);
+    icons[Icon_database_add]    = wxIcon(database_add_xpm);
+    icons[Icon_help]            = wxIcon(help_xpm);
+    icons[Icon_synchronize]     = wxIcon(synchronize_xpm);
     icons[Icon_create_database] = wxIcon(create_database_xpm);
-    icons[Icon_settings] = wxIcon(settings_xpm);
-    icons[Icon_tools] = wxIcon(tools_xpm);
+    icons[Icon_settings]        = wxIcon(settings_xpm);
+    icons[Icon_tools]           = wxIcon(tools_xpm);
 
     //   unsigned int NbIcons = 8;
     // Make an image list containing small icons
@@ -379,8 +402,8 @@ namespace creaImageIO
                               1000,
                               this,
                               wxPD_ELAPSED_TIME |
-                              //                              wxPD_ESTIMATED_TIME | 
-                              //                              wxPD_REMAINING_TIME |
+                              // wxPD_ESTIMATED_TIME |
+                              // wxPD_REMAINING_TIME |
                               wxPD_CAN_ABORT );
 
        // TO DO : select the current tree handler
@@ -411,15 +434,13 @@ namespace creaImageIO
     
     if (FD->ShowModal()==wxID_OK)
     {
-
-       
        std::string dirname = wx2std (FD->GetPath());
        bool recurse =  isNeedRecursive(dirname);
        if (recurse)
        {
-             recurse = wxMessageBox(_T("Recurse into sub-directories ?"),  _T("Scan directory"),        wxYES_NO,this ) == wxYES ? true : false;
+             recurse = wxMessageBox(_T("Recurse into sub-directories ?"), _T("Scan directory"), wxYES_NO,this ) == wxYES ? true : false;
        }
-               
+
                wxBusyCursor busy;
                wxString title(_T("Adding directory"));
                if (recurse) 
@@ -431,24 +452,24 @@ namespace creaImageIO
                                        this,
                                        wxPD_ELAPSED_TIME | 
                                        wxPD_SMOOTH |
-                                       //                             wxPD_ESTIMATED_TIME | 
-                                       //                             wxPD_REMAINING_TIME |
+                                       // wxPD_ESTIMATED_TIME |
+                                       // wxPD_REMAINING_TIME |
                                        wxPD_CAN_ABORT );
-               
+
                mCurrentDirectory = FD->GetPath();  
                mGimmick->AddDir(crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection())),dirname,recurse);
                mProgressDialog->Pulse(_T("Updating view..."));
-               
+
                UpdateTreeViewLevel(crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection())),1);
                delete mProgressDialog;
                DisplayAddSummary();
-
          }
     mViewer->StartPlayer();
+       delete FD;
   }
 
 
-   //=================================================
+  //=================================================
   // Determines number of files potentially to add to database
    int WxGimmickView::NumberFilesToAdd(const std::string &dirpath, bool recursive)
   {
@@ -471,10 +492,9 @@ namespace creaImageIO
                }
          }
        return nb;
-
   }
 
-    //=================================================
+   //=================================================
    // Test a directory to know if contains sub-directory to analyze
   bool WxGimmickView::isNeedRecursive(std::string i_name)
   {
@@ -544,8 +564,6 @@ namespace creaImageIO
                  ClearSelection();
       }*/
        ReadImageThreaded(sel);
-
-    
    }
 
   //==================================================
@@ -573,7 +591,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 +611,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 +630,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 +641,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,12 +675,13 @@ 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();
   }
-  
+
   //=================================================
  
   //=================================================
@@ -666,17 +689,20 @@ namespace creaImageIO
   {
        //TODO Select current tree handler       
      wxBusyCursor busy;
-     GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->RemoveSelected();
+        std::string remove;
+        mGimmick->GetSetting(SETTINGS_REMOVE_PATIENT_DISPLAY,remove);
+        GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->RemoveSelected(remove);
+        mGimmick->UpdateSetting(SETTINGS_REMOVE_PATIENT_DISPLAY,remove);
      ClearSelection();
   }
   //=================================================
 
-  
+
   //=================================================
   void WxGimmickView::AddIgnoreFile(tree::Node* toRemove)
   {
      mGimmick->RemoveFile(crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection())),toRemove);
-     GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->UpdateLevel(1);
+   //  GetTreeViewMap()[crea::wx2std(mNotebook->GetPageText(mNotebook->GetSelection()))]->UpdateLevel(1);
   }
 
   //=================================================
@@ -718,6 +744,7 @@ namespace creaImageIO
 
     if (dialog.ShowModal() == wxID_OK)
     {
+                       wxBusyCursor busy;
         int sel=dialog.GetSelection();
        bool repair=false;
        bool checkAttributes=false;
@@ -746,6 +773,7 @@ namespace creaImageIO
     dial->SetSizer(siz);
     dial->ShowModal();
   }
+
   //=================================================
   void WxGimmickView::OnImportExport(wxCommandEvent &Event)
   {
@@ -812,7 +840,7 @@ namespace creaImageIO
                        std::string inputDir  = crea::wx2std(gimmickTools->getInputDir());
                        std::string outputDir = crea::wx2std(gimmickTools->getOutputDir());
                        
-                       bool addToDB = gimmickTools->getCheckBoxValue();
+                       bool addToDB = gimmickTools->getAddToDBCheckBoxValue();
 
                        if (inputDir.compare("")!=0 && outputDir.compare("")!=0)
                        {
@@ -839,7 +867,6 @@ namespace creaImageIO
                                        }       
                                }
                        }
-
                        else
                        {
                                wxMessageBox(_T("One or both of the directory fields are empty"),_T("Empty Fields"),wxOK,this);
@@ -848,9 +875,9 @@ namespace creaImageIO
        delete gimmickTools;
 #endif
        }
-
        mViewer->StartPlayer();
   }
+
   //=================================================
 
   void WxGimmickView::CreateSettingsDialog(wxNotebook* nb, wxDialog* dial)
@@ -882,7 +909,7 @@ namespace creaImageIO
          nb->AddPage( pacs, crea::std2wx("Connect to PACS") );
 
          //Third page: CD/DVD Watch
-         WxListenerPanel* cdWatch=new WxListenerPanel(nb,dial, this, mListener->IsPaused());
+         WxListenerPanel* cdWatch=new WxListenerPanel(nb,dial, this,true);//, mListener->IsPaused());
          nb->AddPage( cdWatch, crea::std2wx("CD/DVD") );
 
          //Fourth page: Selection of attributes to show
@@ -992,6 +1019,46 @@ namespace creaImageIO
     dial->ShowModal();  
   }
 
+ //========================================================================
+  void WxGimmickView::DumpTags(std::string i_filename)
+  {
+    WxDumpPanel* pan= new WxDumpPanel (this,i_filename);
+    pan->ShowModal();  
+  }
+
+  //========================================================================
+  void WxGimmickView::ExportToStorage(const std::vector<std::string> i_filenames)
+  {
+       std::vector<std::string> storages;
+       Gimmick::TreeHandlerMapType::iterator it = mGimmick->GetTreeHandlerMap().begin();
+       for(;it != mGimmick->GetTreeHandlerMap().end(); it++)
+       {
+               storages.push_back(it->first);
+       }
+
+    WxExportDlg* exp= new WxExportDlg(this,storages);
+       if ( exp->ShowModal() ==ID_EXPORT_OK)
+       {
+               std::string storage = exp->GetStorage();
+               mProgressDialog = 
+           new wxProgressDialog(_T("Adding file(s)"),
+                              _T(""),
+                              1000,
+                              this,
+                              wxPD_ELAPSED_TIME |
+                              // wxPD_ESTIMATED_TIME |
+                              // wxPD_REMAINING_TIME |
+                              wxPD_CAN_ABORT );
+               mGimmick->AddFiles(storage,i_filenames);
+               mProgressDialog->Pulse(_T("Updating view..."));
+               UpdateTreeViewLevel(storage,1);
+               delete mProgressDialog;
+               DisplayAddSummary();    
+       }
+  }
+
+
+
   //========================================================================
   void WxGimmickView::OnFieldsEdited(tree::Node* node, const std::string& name, const std::string& key, const std::string& val)
   {
@@ -1077,6 +1144,7 @@ namespace creaImageIO
   //////////////////////////////////////////////////
   void WxGimmickView::OnCreateDB(wxCommandEvent& event)
   {
+       //  PACSConnection("");
        WxDescriptorPanel * DescriptorPan = new WxDescriptorPanel(this, mGimmick->GetHomeDirectory());
        DescriptorPan->Layout();
        if ( DescriptorPan->ShowModal() == ID_DSCP_APPLY)
@@ -1119,4 +1187,3 @@ namespace creaImageIO
 
 } // EO namespace creaImageIO
 
-