3
* $Id: parametrosprincipales.cpp 3526 2011-03-16 19:56:19Z carlos $
6
* Copyright 2008-10 MetaEmotion S.L. All rights reserved.
7
* http://ginkgo-cadx.com
9
* This file is licensed under LGPL v3 license.
10
* See License.txt for details
19
#include <wx/dirdlg.h>
20
#include <wx/msgdlg.h>
21
#include <wx/confbase.h>
22
#include <wx/msgout.h>
23
#include <wx/filename.h>
24
#include <wx/propgrid/propgrid.h>
26
#include <api/ientorno.h>
27
#include <api/ivista.h>
28
#include <export/icontratoscore.h>
29
#include <api/icontextoestudio.h>
33
#include <wx/dirdlg.h>
34
#include <wx/msgdlg.h>
35
#include <wx/confbase.h>
36
#include <wx/msgout.h>
37
#include <wx/filename.h>
38
#include <wx/propgrid/propgrid.h>
39
#include <api/internacionalizacion.h>
40
#include <wx/ginkgostyle/ginkgostyle.h>
42
#include <main/controllers/controladorhistorial.h>
43
#include <main/controllers/controladorcomandos.h>
44
#include <commands/comandoexportacion.h>
45
#include <commands/comandomergediagnosticwithimage.h>
46
#include "parametrosprincipales.h"
51
ParametrosPrincipales::ParametrosPrincipales(wxWindow* pParent,IWizard* pWizard,GnkPtr<TipoWizardExportacion> pDatosPersistentes, GNC::GCS::IEntorno* pEntorno):ParametrosPrincipalesBase(pParent),IPasoWizard(pWizard)
53
m_pEntorno = pEntorno;
54
m_pDatosPersistentes = pDatosPersistentes;
55
//si es IContratoExportacionImages pues se deja a todos los formatos sino solo dicom
56
GNC::GCS::IContratoExportacionImages* pContratoImages = dynamic_cast<GNC::GCS::IContratoExportacionImages*>(m_pDatosPersistentes->m_pVista);
57
if(pContratoImages == NULL){
59
m_pFormatoDestino->Delete(3);
60
m_pFormatoDestino->Delete(2);
61
m_pFormatoDestino->Delete(1);
65
typedef GNC::GCS::IContratoExportacionImages::MapaMapasValoracion MapaMapasValoracion;
66
m_pDatosPersistentes->m_mapasValoracion = pContratoImages->GetMapasValoracion();
67
if(m_pDatosPersistentes->m_mapasValoracion.size() == 0) {
68
m_pTituloMapas->Show(false);
69
m_pMapasCheck->Show(false);
71
for(MapaMapasValoracion::iterator it= m_pDatosPersistentes->m_mapasValoracion.begin(); it!= m_pDatosPersistentes->m_mapasValoracion.end(); it++) {
72
int item = m_pMapasCheck->Append(wxString::FromUTF8((*it).first.c_str()));
73
m_pMapasCheck->Check(item,(*it).second);
78
m_base = (*m_pDatosPersistentes->m_pVista->GetEstudio()->GetTagsImagenDeImagenActiva());
81
std::string pathActivo;
82
GIL::DICOM::IDICOMManager* pDICOMManager= pEntorno->GetControladorImportacionPACS()->CrearInstanciaDeDICOMManager();
85
SetTags(m_base,m_pListaAtributos->GetRoot(),pDICOMManager);
87
pEntorno->GetControladorImportacionPACS()->LiberarInstanciaDeDICOMManager(pDICOMManager);
89
wxConfigBase * config = wxConfigBase::Get();
90
config->Read(wxT("/GinkgoCore/Exportacion/ValorDefectoAnonimizacion"),&m_valorAnonimizado,wxEmptyString);
92
//por defecto el check de configuracion esta checkeado
94
OnCheckConfiguracion(evt);
96
m_pPanelCampos->Enable(false);
97
m_pPanelCampos->Refresh(false);
98
m_pListaAtributos->Refresh(false);
101
std::vector<std::string> listaDiagnosticos = m_pDatosPersistentes->m_pVista->GetRutasDiagnosticos();
102
if(listaDiagnosticos.size()==0) {
103
m_pCheckExportarDiagnostico->SetValue(false);
104
m_pCheckExportarDiagnostico->Enable(false);
106
GNC::GCS::ControladorHistorial::ModeloDCM modelo = GNC::GCS::ControladorHistorial::Instance()->GetModeloDCM(listaDiagnosticos[0]);
107
std::ostringstream ostr;
108
ostr << "(" << modelo.m_nombreMedico << "; " << modelo.m_horaEstudio << "; " << modelo.m_fechaEstudio << "; " << modelo.m_descripcionEstudio << ")";
109
m_pDescripcionDiagnostico->SetLabel(wxString::FromUTF8(ostr.str().c_str()));
114
m_pListaAtributos->Connect(wxEVT_PG_CHANGED,wxPropertyGridEventHandler(ParametrosPrincipales::OnPropertyChanged),NULL,this);
115
m_pListaAtributos->Connect(wxEVT_PG_DOUBLE_CLICK,wxPropertyGridEventHandler(ParametrosPrincipales::OnPropertyDobleClick),NULL,this);
118
ParametrosPrincipales::~ParametrosPrincipales()
120
m_pListaAtributos->Disconnect(wxEVT_PG_CHANGED,wxPropertyGridEventHandler(ParametrosPrincipales::OnPropertyChanged),NULL,this);
121
m_pListaAtributos->Disconnect(wxEVT_PG_DOUBLE_CLICK,wxPropertyGridEventHandler(ParametrosPrincipales::OnPropertyDobleClick),NULL,this);
125
void ParametrosPrincipales::SetTags(GIL::DICOM::TipoJerarquia & base,wxPGPropArg idPadre,GIL::DICOM::IDICOMManager* pDICOMManager) {
126
for(GIL::DICOM::TipoJerarquia::ListaTags::iterator it = base.tags.begin(); it!= base.tags.end(); it++){
127
wxString helpString = wxString::FromUTF8(pDICOMManager->GetDescription((*it).first).c_str());
128
wxStringProperty* prop = NULL;
130
if((*it).second.size()>100) {
133
valor = wxString::FromUTF8((*it).second.c_str());
136
if(helpString.size()>0){
137
helpString = wxT("(") + wxString::FromUTF8((*it).first.c_str()) + wxT(") ") + helpString;
138
prop = new wxStringProperty(helpString,
141
prop = new wxStringProperty(wxString::FromUTF8((*it).first.c_str()),
144
prop->SetHelpString(wxString::FromUTF8((*it).first.c_str()));
145
m_pListaAtributos->AppendIn(idPadre, prop);
148
for(GIL::DICOM::TipoJerarquia::ListaJerarquias::iterator it = base.secuencias.begin(); it!=base.secuencias.end(); it++){
149
wxStringProperty* prop = NULL;
150
wxString helpString = wxString::FromUTF8(pDICOMManager->GetDescription((*it).tagName).c_str());
151
if(helpString.size()>0){
152
helpString = wxT("(") + wxString::FromUTF8((*it).tagName.c_str()) + wxT(") ") + helpString;
153
prop = new wxStringProperty(helpString,
154
wxPG_LABEL,wxEmptyString);
156
prop = new wxStringProperty(wxString::FromUTF8((*it).tagName.c_str()),
157
wxPG_LABEL,wxEmptyString);
159
prop->SetHelpString(wxString::FromUTF8((*it).tagName.c_str()));
160
if(m_pListaAtributos->GetProperty(prop->GetName()) != NULL) {
161
////////////////////////////////////std::cout<<"hasdfasdf";
163
wxPGId pIdSequencia = m_pListaAtributos->AppendIn(idPadre,prop);
167
for(GIL::DICOM::TipoJerarquia::ListaJerarquias::iterator it2 = (*it).items.begin(); it2!= (*it).items.end(); it2++, i++) {
168
wxPGPropArg pIdItem = m_pListaAtributos->AppendIn(pIdSequencia,new wxStringProperty(wxString::Format(wxT("Item %d"),i),wxPG_LABEL,wxEmptyString));
169
SetTags((*it2),pIdItem,pDICOMManager);
174
void ParametrosPrincipales::OnChoiceFormatoDestino(wxCommandEvent &)
176
switch(m_pFormatoDestino->GetSelection()){
178
m_pPanelAnonimizar->Show(true);
179
m_pCheckExportarDiagnostico->Show(true);
180
m_pDescripcionDiagnostico->Show(true);
181
m_pPanelContenido->Show(false);
182
m_pSep1->Show(false);
183
m_pPanelJpeg->Show(false);
186
m_pPanelAnonimizar->Show(false);
187
m_pCheckExportarDiagnostico->Show(false);
188
m_pDescripcionDiagnostico->Show(false);
189
m_pPanelContenido->Show(true);
191
m_pPanelJpeg->Show(true);
195
m_pPanelAnonimizar->Show(false);
196
m_pCheckExportarDiagnostico->Show(false);
197
m_pDescripcionDiagnostico->Show(false);
198
m_pPanelContenido->Show(true);
199
m_pSep1->Show(false);
200
m_pPanelJpeg->Show(false);
208
void ParametrosPrincipales::GetTagsAnonimizados(GIL::DICOM::TipoJerarquia & base)
211
for(wxPGProperty* it=m_pListaAtributos->GetFirst();it!=NULL;it=m_pListaAtributos->GetNextSiblingProperty(it)){
212
if(it->IsFlagSet(wxPG_PROP_MODIFIED)){
213
std::string clave(it->GetHelpString().ToUTF8());
214
std::string valor(it->GetValueAsString().ToUTF8());
215
base.tags[clave] = valor;
220
void ParametrosPrincipales::OnCheckAnonimizar(wxCommandEvent &){
221
m_pPanelCampos->Enable(m_pCheckAnonimizar->GetValue());
225
void ParametrosPrincipales::OnCheckNombreApellidos(wxCommandEvent &){
226
//se anonimiza 0010|0010 (nombre del paciente)
227
std::string clave("0010|0010");
228
Anonimizar(clave,m_pCheckNombrePaciente->IsChecked());
231
void ParametrosPrincipales::OnCheckIdPaciente(wxCommandEvent &){
232
//se anonimiza 0010|0020" (id del paciente)
233
std::string clave("0010|0020");
234
Anonimizar(clave,m_pCheckIdPaciente->IsChecked());
237
void ParametrosPrincipales::OnCheckInstituciones(wxCommandEvent &){
238
//se anonimiza (0008,0080) Institution Name
239
std::string clave("0008|0080");
240
Anonimizar(clave,m_pCheckInstituciones->IsChecked());
243
void ParametrosPrincipales::OnCheckComentarios(wxCommandEvent &){
244
//descripcion del estudio, serie e imagenes
247
std::string clave("0008|1030");
248
Anonimizar(clave,m_pCheckComentarios->IsChecked());
252
std::string clave("0008|103e");
253
Anonimizar(clave,m_pCheckComentarios->IsChecked());
257
std::string clave("0020|4000");
258
Anonimizar(clave,m_pCheckComentarios->IsChecked());
262
void ParametrosPrincipales::OnCheckConfiguracion(wxCommandEvent &){
263
//se cargan los tags y se anonimizan...
264
wxConfigBase * config = wxConfigBase::Get();
265
//se actualiza el fichero de configuracion
266
config->SetPath(wxT("/GinkgoCore/Exportacion/TagsAnonimizacion"));
270
bool bCont = config->GetFirstGroup(str, dummy);
272
config->SetPath(str);
275
config->Read(wxT("Grupo"),&grupo,wxEmptyString);
276
config->Read(wxT("Elemento"),&elemento,wxEmptyString);
278
wxString wxClave = grupo + wxT("|") + elemento;
279
std::string clave(wxClave.ToUTF8());
281
if(clave == std::string("0010|0010")){
282
m_pCheckNombrePaciente->SetValue(m_pCheckConfiguracion->IsChecked());
283
}else if(clave == std::string("0010|0020")){
284
m_pCheckIdPaciente->SetValue(m_pCheckConfiguracion->IsChecked());
285
} else if(clave == std::string("0008|0080")){
286
m_pCheckIdPaciente->SetValue(m_pCheckInstituciones->IsChecked());
289
Anonimizar(clave,m_pCheckConfiguracion->IsChecked());
291
config->SetPath(wxT(".."));
292
bCont = config->GetNextGroup(str, dummy);
297
void ParametrosPrincipales::Anonimizar(std::string& clave, bool anonimizar)
299
wxString value = m_valorAnonimizado;
303
if(m_base.getTag(clave,tmp)){
304
value = wxString::FromUTF8(tmp.c_str());
308
for(wxPGProperty* it=m_pListaAtributos->GetFirst();it!=NULL;it=m_pListaAtributos->GetNextSiblingProperty(it)){
309
if(it->GetHelpString() == wxString::FromUTF8(clave.c_str())){
310
it->SetValueFromString(value);
312
m_pListaAtributos->SetPropertyCell(it->GetId(),0,it->GetLabel(),wxNullBitmap,*wxWHITE,*wxRED);
313
m_pListaAtributos->SetPropertyCell(it->GetId(),1,it->GetValue(),wxNullBitmap,*wxWHITE,*wxRED);
315
m_pListaAtributos->SetPropertyCell(it->GetId(),0,it->GetLabel());
316
m_pListaAtributos->SetPropertyCell(it->GetId(),1,it->GetValue());
318
it->ChangeFlag(wxPG_PROP_MODIFIED,anonimizar);
319
m_pListaAtributos->RefreshProperty(it);
325
void ParametrosPrincipales::OnPropertyChanged(wxPropertyGridEvent& event) {
326
if(m_pCheckAnonimizar->IsChecked()){
327
wxPGProperty* selected= event.GetProperty();
328
m_pListaAtributos->SetPropertyCell(selected->GetId(),0,selected->GetLabel(),wxNullBitmap,*wxWHITE,*wxRED);
329
m_pListaAtributos->SetPropertyCell(selected->GetId(),1,selected->GetValue(),wxNullBitmap,*wxWHITE,*wxRED);
331
std::string clave(event.GetProperty()->GetHelpString().ToUTF8());
332
Anonimizar(clave,false);
336
void ParametrosPrincipales::OnPropertyDobleClick(wxPropertyGridEvent& event){
337
if(m_pCheckAnonimizar->IsChecked()){
338
std::string clave(event.GetProperty()->GetHelpString().ToUTF8());
339
Anonimizar(clave,!event.GetProperty()->IsFlagSet(wxPG_PROP_MODIFIED));
343
//region "Metodos heredados de Ipasowizard"
345
void ParametrosPrincipales::Attach(wxSizer *sizer){
347
sizer->Add(this,10, wxEXPAND);
348
this->GetParent()->Layout();
351
void ParametrosPrincipales::Detach(wxSizer *sizer){
354
sizer->GetContainingWindow()->Layout();
357
std::string ParametrosPrincipales::GetTitle(){
358
return _Std("DICOM Export");
361
std::string ParametrosPrincipales::GetSubTitle(){
362
return _Std("Select the format and the images you want to export");
365
bool ParametrosPrincipales::Siguiente(){
369
bool ParametrosPrincipales::Anterior(){
373
bool ParametrosPrincipales::Cancelar(){
377
bool ParametrosPrincipales::Validar(){
378
switch(m_pFormatoDestino->GetSelection()){
380
m_pDatosPersistentes->m_formatoDestino = DICOM;
381
GetTagsAnonimizados(m_pDatosPersistentes->m_base);
382
m_pDatosPersistentes->m_incluirTagsGinkgo = !m_pCheckAtributosPrivadosGinkgo->IsChecked();
383
m_pDatosPersistentes->m_exportarDiagnostico = m_pCheckExportarDiagnostico->IsChecked();
386
m_pDatosPersistentes->m_formatoDestino = JPEG;
389
m_pDatosPersistentes->m_formatoDestino = BMP;
392
m_pDatosPersistentes->m_formatoDestino = PNG;
395
m_pDatosPersistentes->m_formatoDestino = DICOM;
398
if(m_pOrigen->GetSelection() == 0 ){
399
m_pDatosPersistentes->m_ficheroActual=true;
401
m_pDatosPersistentes->m_ficheroActual=false;
404
//mapas de valoracion
405
if(m_pDatosPersistentes->m_formatoDestino != DICOM) {
406
for(unsigned int i = 0; i< m_pMapasCheck->GetCount(); i++) {
407
std::string strTmp(m_pMapasCheck->GetString(i).ToUTF8());
408
m_pDatosPersistentes->m_mapasValoracion[strTmp] = m_pMapasCheck->IsChecked(i);
411
m_pDatosPersistentes->m_incluirWidgets = m_pIncluirWidgets->IsChecked();
413
if(m_pDatosPersistentes->m_formatoDestino == JPEG){
414
m_pDatosPersistentes->m_jpegCalidad = m_pSliderCalidad->GetValue();
417
//pillamos el directorio...
418
return Seleccionardirectorio();
423
bool ParametrosPrincipales::Seleccionardirectorio()
425
//se pregunta al usuario donde los quiere guardar
426
wxConfigBase * config = wxConfigBase::Get();
427
//se actualiza el fichero de configuracion
428
config->SetPath(wxT("/GinkgoCore/Exportacion"));
430
wxString wxPathDefecto;
431
config->Read(wxT("PathDefecto"),&wxPathDefecto,wxT(""));
432
wxDirDialog seleccionarDirectorio(this,_("Select the directory where the files will be stored"),wxPathDefecto,wxDD_DEFAULT_STYLE|wxDD_NEW_DIR_BUTTON);
433
int response = seleccionarDirectorio.ShowModal();
434
if (response == wxID_OK)
436
wxString wxPath = seleccionarDirectorio.GetPath();
438
if( !wxDirExists(wxPath) ){
439
wxMessageDialog dialog(NULL,_("The selected directory does not exist\nWould you like to create?"),_("Info"),wxYES_NO|wxICON_INFORMATION);
440
if ( dialog.ShowModal() == wxID_NO)
444
if(!wxFileName::Mkdir(wxPath)){
445
wxMessageBox(_("There was an error creating directory"), _("Info"),
446
wxOK | wxICON_INFORMATION, this);
451
m_pDatosPersistentes->m_pathDestino = TOPATH(wxPath);
453
if (m_pDatosPersistentes->m_exportarDiagnostico && m_pDatosPersistentes->m_formatoDestino == GNC::GUI::DICOM) {
454
GADAPI::ComandoMergeDiagnosticWithImageParams* pParams = new GADAPI::ComandoMergeDiagnosticWithImageParams(m_pDatosPersistentes->m_pathDestino, m_pDatosPersistentes->m_pVista->GetEstudio(), m_pDatosPersistentes->m_base, m_pDatosPersistentes->m_incluirTagsGinkgo, m_pDatosPersistentes->m_ficheroActual);
455
GADAPI::ComandoMergeDiagnosticWithImage* pCmd = new GADAPI::ComandoMergeDiagnosticWithImage(pParams);
456
GNC::GCS::ControladorComandos::Instance()->ProcessAsync(_Std("Exporting images ..."), pCmd, m_pDatosPersistentes->m_pVista);
458
GADAPI::ComandoExportacionParams* pParams = new GADAPI::ComandoExportacionParams(m_pDatosPersistentes);
459
GADAPI::ComandoExportacion* pCmd = new GADAPI::ComandoExportacion(pParams);
460
GNC::GCS::ControladorComandos::Instance()->ProcessAsync(_Std("Exporting images ..."), pCmd, m_pDatosPersistentes->m_pVista);
463
wxConfigBase * config = wxConfigBase::Get();
464
//se actualiza el fichero de configuracion
465
config->SetPath(wxT("/GinkgoCore/Exportacion"));
466
config->Write(wxT("PathDefecto"),wxPath);