From: Frederic Cervenansky Date: Mon, 25 Jan 2010 16:22:30 +0000 (+0000) Subject: export from storage to storage functionality X-Git-Tag: CREATOOLS.2-0-3~63 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=creaImageIO.git;a=commitdiff_plain;h=e79fb1c492e93cdd1a5a95ba0ab491b868cf5992 export from storage to storage functionality --- diff --git a/src2/CMakeLists.txt b/src2/CMakeLists.txt index b9cf63c..8908fc5 100644 --- a/src2/CMakeLists.txt +++ b/src2/CMakeLists.txt @@ -51,19 +51,20 @@ FILE(GLOB SOURCES_CREAIMAGEIO_IMG_READER # The wxWidgets-based components if (USE_WXWIDGETS) FILE(GLOB SOURCES_CREAIMAGEIO_WX + creaImageIOWxAttributeSelectionPanel.cpp + creaImageIOWxCustomizeConfigPanel.cpp + creaImageIOWxDescriptorPanel.cpp + creaImageIOWxEditFieldsPanel.cpp + creaImageIOWxExportDlg.cpp + creaImageIOWxDumpPanel.cpp creaImageIOWxGimmickView.cpp - creaImageIOWxTreeView.cpp - creaImageIOWxGimmickReaderDialog.cpp + creaImageIOWxGimmickReaderDialog.cpp creaImageIOWxGimmickFrame.cpp creaImageIOWxGimmickPanel.cpp creaImageIOWxGimmickTools.cpp - creaImageIOWxCustomizeConfigPanel.cpp creaImageIOWxListenerPanel.cpp - creaImageIOWxEditFieldsPanel.cpp - creaImageIOWxAttributeSelectionPanel.cpp - creaImageIOWxPACSConnectionPanel.cpp - creaImageIOWxDescriptorPanel.cpp - creaImageIOWxDumpPanel.cpp + creaImageIOWxPACSConnectionPanel.cpp + creaImageIOWxTreeView.cpp ) endif() diff --git a/src2/creaImageIOGimmick.h b/src2/creaImageIOGimmick.h index 0a88087..017d153 100644 --- a/src2/creaImageIOGimmick.h +++ b/src2/creaImageIOGimmick.h @@ -111,8 +111,11 @@ namespace creaImageIO /// Type of map from TreeHandler name to TreeHandler* typedef std::map TreeHandlerMapType; + typedef std::map::const_iterator ItTreeHandlerMap; + /// Returns the TreeHandlerMap (ref) TreeHandlerMapType& GetTreeHandlerMap() { return mTreeHandlerMap; } + /// Returns the TreeHandlerMap (const ref) const TreeHandlerMapType& GetTreeHandlerMap() const { return mTreeHandlerMap; } diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index 47b74ca..0510c17 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -98,6 +98,10 @@ namespace creaImageIO virtual void DumpTags(const std::string filename) {GimmickError("INTERNAL ERROR : DumpTags not implemented"); } + ///Edits the fields of a given node + virtual void ExportToStorage(const std::vector keys) + { GimmickError("INTERNAL ERROR : ExportToStorage not implemented"); } + ///Copies selected files virtual void SaveAs(const std::vector& filenames) { GimmickError("INTERNAL ERROR : SaveAs not implemented"); } diff --git a/src2/creaImageIOWxDescriptorPanel.h b/src2/creaImageIOWxDescriptorPanel.h index 626c44d..203a409 100644 --- a/src2/creaImageIOWxDescriptorPanel.h +++ b/src2/creaImageIOWxDescriptorPanel.h @@ -31,7 +31,7 @@ namespace creaImageIO //===================================================================== //===================================================================== /// Gimmick DB are based on descriptors with a tree structure . - /// Ecah level contains attributes (DICOM or other) to identify data + /// Each level contains attributes (DICOM or other) to identify data /// WxDescriptorPanel allows creation, modification and save of descriptors. /// diff --git a/src2/creaImageIOWxExportDlg.cpp b/src2/creaImageIOWxExportDlg.cpp new file mode 100644 index 0000000..c2e06e8 --- /dev/null +++ b/src2/creaImageIOWxExportDlg.cpp @@ -0,0 +1,42 @@ +#include + +namespace creaImageIO +{ + // CTor + WxExportDlg::WxExportDlg(wxWindow *parent, const std::vector storages) + : wxDialog(parent, -1,_T("EXPORT FILES TO STORAGE"), wxDefaultPosition, wxSize(260,150)) + { + int size = 16; + + wxStaticText * ExportText=new wxStaticText(this,-1,_T(" Storage to export: "), wxPoint(5,10)); + wxArrayString names; + std::vector::const_iterator it = storages.begin(); + for(;it != storages.end(); it++) + { + names.Add(crea::std2wx(*it)); + } + ExportCombo = new wxComboBox(this, ID_EXPORTCOMBO_CTRL,_T(""),wxPoint(120,10), wxSize(120,25),names); + ExportCombo->SetSelection(0); + // Connect( ExportCombo->GetId(), wxEVT_COMMAND_TEXT_UPDATED , (wxObjectEventFunction) &WxDescriptorPanel::OnDicomAttribute ); + + // VALIDATION BUTTON + wxButton *Ok = new wxButton(this, -1,_T("OK"), wxPoint(5,50) ); + Connect( Ok->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &WxExportDlg::OnOk ); + + wxButton *Cancel = new wxButton(this, wxID_CANCEL,_T("CANCEL"), wxPoint(100,50) ); + Layout(); + + } + + WxExportDlg::~WxExportDlg(){} + + + void WxExportDlg::OnOk(wxCommandEvent &event) + { + m_name = crea::wx2std(ExportCombo->GetValue()); + Close(); + SetReturnCode(ID_EXPORT_OK); + } + + +} \ No newline at end of file diff --git a/src2/creaImageIOWxExportDlg.h b/src2/creaImageIOWxExportDlg.h new file mode 100644 index 0000000..6c5c9cd --- /dev/null +++ b/src2/creaImageIOWxExportDlg.h @@ -0,0 +1,45 @@ +#ifndef __creaImageIOWxExportDlg_h_INCLUDED__ +#define __creaImageIOWxExportDlg_h_INCLUDED__ + +#ifdef USE_WXWIDGETS +#include +#include + +#define ID_EXPORTCOMBO_CTRL 1801 +#define ID_EXPORT_OK 1802 + +namespace creaImageIO{ + /** + * \ingroup GUI + */ + //===================================================================== + //===================================================================== + /// Gimmick can handle multiple database with different organisations. + /// WxDescriptorPanel allows to select the storage to export data. + /// + class WxExportDlg : public wxDialog + { + public: + ///CTor + WxExportDlg(wxWindow *parent, const std::vector storages); + ///DTor + ~WxExportDlg(); + + /// Get selected storage + const std::string& GetStorage(){ return m_name;} + + private: + + /// Storage ComboBox + wxComboBox *ExportCombo; + + ///Validate selected storage + void OnOk(wxCommandEvent &event); + + /// Storage name + std::string m_name; + }; +} +#endif // USE_WIDGETS +// EOF +#endif diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index 0d9efc8..77f2a52 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -9,6 +9,7 @@ #include #include #include +#include using namespace crea; // Icons @@ -1025,6 +1026,39 @@ namespace creaImageIO pan->ShowModal(); } + //======================================================================== + void WxGimmickView::ExportToStorage(const std::vector i_filenames) + { + std::vector 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) { diff --git a/src2/creaImageIOWxGimmickView.h b/src2/creaImageIOWxGimmickView.h index fa7d4d7..61fcc7d 100644 --- a/src2/creaImageIOWxGimmickView.h +++ b/src2/creaImageIOWxGimmickView.h @@ -203,6 +203,9 @@ namespace creaImageIO /// Display all Dicom Tags void DumpTags(const std::string i_filename); + /// Export from Storage to Storage + void ExportToStorage(const std::vector i_filenames); + /// Progress dialog wxProgressDialog* mProgressDialog; diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 9b1f54e..86850e4 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -208,6 +208,10 @@ 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; @@ -215,16 +219,19 @@ namespace creaImageIO 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 @@ -872,27 +879,44 @@ namespace creaImageIO } } + //================================================================ + + //================================================================ + + void WxTreeView::OnExportToStorage(wxCommandEvent &event) + { + std::vector filesname; + std::vector 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 names; - std::vector 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; - } - } + tree::Node* node=((ItemData*)GetCtrl(mLastRightLevel)->GetItemData(mLastRightSelected))->node; + tree::LevelDescriptor::AttributeDescriptorListType::const_iterator a; + std::vector names; + std::vector 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; + } + } } - } + //================================================================ diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index 49dd62b..e620a4a 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -78,6 +78,9 @@ namespace creaImageIO ///Callback when the user needs to display alll dicom tags for a file void OnDumpTags(wxCommandEvent &event); + ///Callback when the user needs to transfer data from storage to storage + void OnExportToStorage(wxCommandEvent &event); + ///Callback on mouse click void OnMouseClick(wxMouseEvent& event); @@ -184,10 +187,13 @@ namespace creaImageIO unsigned int mLastLevel; wxMenu* menuItem; + wxMenu *subExportMenu; int mAnonymizingID; int mLocalCopyID; int mEditFieldID; int mDumpID; + int mExportID; + int mExport2StorageID; // If set to true then OnSelectedChanged returns immediately. // Used to do avoid useless process during multiple selections