]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOWxTreeView.cpp
move directory
[creaImageIO.git] / src2 / creaImageIOWxTreeView.cpp
index b583a7c0775f48d08515030467e4b3efb97ea8ce..86850e4192e795c7691f69567ea2f7dab904860e 100644 (file)
@@ -4,8 +4,10 @@
 #include <wx/splitter.h>
 #include <wx/gdicmn.h>
 #include <boost/date_time/gregorian/gregorian.hpp>
-
-
+#include <creaImageIOGimmick.h>
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
 //=====================================================================
 namespace creaImageIO
 {
@@ -107,7 +109,7 @@ namespace creaImageIO
     //    mSplitter = new wxSplitterWindow( this , -1);
 
     // Global sizer
-    wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
+    msizer = new wxBoxSizer(wxHORIZONTAL);
     
     int ctrl_style = wxLC_REPORT | wxLC_VRULES;
     int col_style = wxLIST_FORMAT_LEFT;
@@ -206,25 +208,35 @@ namespace creaImageIO
        Connect( mFilterID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnPopupFilter) );
 
 
+       ////SubMenuItem EXPORT
+       subExportMenu = new wxMenu;
+       wxMenuItem *subExp1 = subExportMenu->Append(wxID_ANY, _T("&Export to Storage"));
+       Connect( subExp1->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnExportToStorage) );
 
        //ItemMenu
        menuItem =new wxMenu;
        wxMenuItem* m1Item=menuItem->Append(wxID_ANY, _T("&Anonymize"));
        wxMenuItem* m2Item=menuItem->Append(wxID_ANY, _T("&Local Copy"));
        wxMenuItem* m3Item=menuItem->Append(wxID_ANY, _T("&Edit Fields"));
-       
+       wxMenuItem* m4Item=menuItem->Append(wxID_ANY, _T("&Display Dicom Tags"));
+       menuItem->AppendSubMenu(subExportMenu, wxT("&Export"));
+
        mAnonymizingID=m1Item->GetId();
        mLocalCopyID=m2Item->GetId();
        mEditFieldID=m3Item->GetId();
+       mDumpID=m4Item->GetId();
+       
        //Connect( mAnonymizingID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnAnonymize) );
        Connect( mLocalCopyID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnLocalCopy) );
        Connect( mEditFieldID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnEditField) );
+       Connect( mDumpID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(WxTreeView::OnDumpTags) );
        
+
        
 #endif // wxUSE_MENUS
        /// Initialize the first level splitter
          
-       sizer->Add( mLevelList[0].wxSplitter ,1, wxGROW  ,0);
+       msizer->Add( mLevelList[0].wxSplitter ,1, wxGROW  ,0);
        //      mColumnSelected=1;
        mLastSelected=0;
        mLastLevel=0;
@@ -235,7 +247,7 @@ namespace creaImageIO
        //CreateColorPalette();
     UpdateLevel(1);
 
-    SetSizer( sizer );     
+    SetSizer( msizer );     
     SetAutoLayout(true);
     Layout();
 
@@ -336,15 +348,17 @@ namespace creaImageIO
   //=====================================================================
   ///Removes selected nodes on last selected level
    // NOT SPECIFIC 
-  void WxTreeView::RemoveSelected()
+  void WxTreeView::RemoveSelected(std::string &i_save)
   {
-         unsigned int tempLevel = mLastLevel;
+        bool erase=false;
+        
+        unsigned int tempLevel = mLastLevel;
     mLastLevel+=1;
     const std::vector<tree::Node*>& sel=GetSelected(mLastLevel+1);
        // if no selection, no remove action.
     if(sel.size() != 0)
        {
-           bool erase=false;
+       
            std::stringstream out;
            std::string levelName=GetTreeHandler()->GetTree().GetLevelDescriptor(mLastLevel).GetName();
            out<<"Delete ";
@@ -406,6 +420,17 @@ namespace creaImageIO
                mLastLevel = tempLevel;
        }
     
+       if (erase && mLastLevel == 1 && i_save == "0")
+       {
+       
+               RemoveAlertDlg *dial = new RemoveAlertDlg(this,  crea::std2wx("Remove files"), wxSize(370,100));
+               //dial->ShowModal();
+               if (dial->ShowModal() == wxID_OK)
+               {
+                       i_save = dial->isChecked() == false? "0" : "1";
+               }
+               
+       }
   }
   
   
@@ -853,6 +878,46 @@ namespace creaImageIO
        GetGimmickView()->CreateEditFieldsDialog(node,names,keys);
        }
   }
+
+  //================================================================
+
+  //================================================================
+
+  void WxTreeView::OnExportToStorage(wxCommandEvent &event)
+  {
+       std::vector<std::string> filesname;
+       std::vector<tree::Node*> nodes;
+       nodes.push_back(((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node);
+       GetFilenamesAsString(nodes,filesname);
+       GetGimmickView()->ExportToStorage(filesname);
+  }
+
+  //================================================================
+
+  //================================================================
+
+  void WxTreeView::OnDumpTags(wxCommandEvent &event)
+  {
+         if(mLastRightSelected!=-1)
+       {
+               tree::Node* node=((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node;
+               tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a;
+               std::vector<std::string> names;
+               std::vector<std::string> keys;
+               for (a  = GetTreeHandler()->GetTree().GetAttributeDescriptorList(mLastRightLevel+1).begin();
+                        a != GetTreeHandler()->GetTree().GetAttributeDescriptorList(mLastRightLevel+1).end();
+                        ++a)
+                       {
+                               if(a->GetKey()=="FullFileName")
+                               {
+                                       GetGimmickView()->DumpTags(node->GetAttribute("FullFileName"));
+                                       return;
+                               }
+                       }
+         }
+  }
+  
+
   //================================================================
 
   //================================================================
@@ -1038,8 +1103,8 @@ namespace creaImageIO
          if(event.GetKeyCode() == WXK_DELETE)
          {
                   wxBusyCursor busy;
-                 
-                  RemoveSelected();
+                  std::string temp = "0";
+                  RemoveSelected(temp);
                   GetGimmickView()->ClearSelection();
          }
                  
@@ -1171,6 +1236,47 @@ namespace creaImageIO
 
          return !found;
   }
+ //================================================================
+  //================================================================
+
+       RemoveAlertDlg::RemoveAlertDlg(wxWindow *parent, 
+                                              wxString title,    
+                                                  const wxSize& size)
+ :   wxDialog( parent, 
+                 wxID_ANY, 
+                 title,
+                 wxDefaultPosition,
+                 size,
+                 wxDEFAULT_DIALOG_STYLE)
+       {
+           wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
+
+               //std::string out("To reload deleted patient, you should synchronize your database before.");  // JPR
+               //wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY,crea::std2wx(out),wxDefaultPosition, wxSize(500,20));
+               wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY,
+                                       _T("To reload deleted patient, you should synchronize your database before."),
+                                       wxDefaultPosition, wxSize(500,20));
+               mcheck = new wxCheckBox(this, 5478, _T("Do not display this warning again!"));
+               Connect( mcheck->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED , (wxObjectEventFunction) &RemoveAlertDlg::onCheck ); 
+               wxSizer* buttonsSizer = this->CreateSeparatedButtonSizer(wxOK|wxCANCEL);
+               
+               topsizer->Add(text);
+               topsizer->Add(mcheck,0,wxGROW);
+               topsizer->Add(buttonsSizer,0,wxGROW);
+               SetSizer(topsizer, true);
+               mSave = false;
+               Layout();
+       }
+       RemoveAlertDlg::~RemoveAlertDlg(){};
+       bool RemoveAlertDlg::isChecked()
+       {
+               return mSave;
+       }
+       void RemoveAlertDlg::onCheck(wxCommandEvent &Event)
+       {
+               mSave = mcheck->IsChecked();
+       }
+       
 
   //================================================================
   //================================================================