3
* $Id: LocalDatabaseConfigurationPanel.cpp $
6
* Copyright 2008-14 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
16
#include <wx/checkbox.h>
17
#include <wx/msgdlg.h>
18
#include <wx/msgout.h>
19
#include <wx/dirdlg.h>
20
#include <wx/filename.h>
21
#include <wx/wxhttpengine/proxysettingsdlg.h>
22
#include <main/controllers/configurationcontroller.h>
26
#include <wx/stdpaths.h>
27
#include <wx/xml/xml.h>
29
#include <wx/ginkgostyle/ginkgostyle.h>
31
#include "localdatabaseconfigurationpanel.h"
33
#include <main/controllers/controladorextensiones.h>
34
#include <main/controllers/controladoreventos.h>
35
#include <main/controllers/controladorvistas.h>
36
#include <main/controllers/commandcontroller.h>
37
#include <main/controllers/historycontroller.h>
38
#include <main/controllers/autocleaningcontroller.h>
39
#include <main/gui/history3/historypanel3.h>
40
#include <main/entorno.h>
41
#include <api/controllers/icontroladorinternacionalizacion.h>
42
#include <api/internationalization/internationalization.h>
47
LocalDatabaseConfigurationPanel::LocalDatabaseConfigurationPanel(wxWindow* pParent,IDialogoConfiguracion* pDialogo): LocalDatabaseConfigurationPanelBase(pParent), IPasoConfiguracion(pDialogo)
49
if (GNC::GCS::ControladorVistas::Instance()->GetVistas().size() > 0)
51
m_pDICOMDir->Enable(false);
52
m_buttonSeleccionarDICOMDir->Enable(false);
53
m_pstaticTextAdvertencia->Show(true);
57
m_pstaticTextAdvertencia->Show(false);
60
m_mapTimePeriods[1] = _Std("One day");
61
m_mapTimePeriods[2] = _Std("Two days");
62
m_mapTimePeriods[3] = _Std("Three days");
63
m_mapTimePeriods[7] = _Std("One week");
64
m_mapTimePeriods[14] = _Std("Two weeks");
65
m_mapTimePeriods[30] = _Std("One month");
66
m_mapTimePeriods[90] = _Std("Three months");
67
m_mapTimePeriods[365] = _Std("One year");
69
for (std::map<int, std::string>::const_iterator it = m_mapTimePeriods.begin(); it != m_mapTimePeriods.end(); ++it) {
70
m_pChoiceDeleteOlder->AppendString(wxString::FromUTF8((*it).second.c_str()));
72
m_pChoiceDeleteOlder->SetSelection(6);
78
LocalDatabaseConfigurationPanel::~LocalDatabaseConfigurationPanel()
82
void LocalDatabaseConfigurationPanel::Recargar()
86
if(!GNC::GCS::ConfigurationController::Instance()->readStringUser("/GinkgoCore/Estacion","DicomDir", dicomDir)) {
87
m_pathDicomDir = FROMPATH(GNC::GCS::HistoryController::Instance()->GetGinkgoDicomDir());
89
m_pathDicomDir = wxString::FromUTF8(dicomDir.c_str());
91
m_pDICOMDir->SetValue(m_pathDicomDir);
93
//autocleaning dicomdir
96
GNC::GCS::ConfigurationController::Instance()->readIntUser("/GinkgoCore/Station/CleanDicomDir", "AcquisitionOlderThan", tmp, -1);
99
for (std::map<int, std::string>::const_iterator it = m_mapTimePeriods.begin(); it != m_mapTimePeriods.end(); ++it,i++) {
100
if ((*it).first == tmp) {
101
m_pChoiceDeleteOlder->SetSelection(i);
105
m_pChoiceDeleteOlder->Enable(true);
106
m_pCheckDeleteOlder->SetValue(true);
108
m_pChoiceDeleteOlder->Enable(false);
109
m_pCheckDeleteOlder->SetValue(false);
112
GNC::GCS::ConfigurationController::Instance()->readIntUser("/GinkgoCore/Station/CleanDicomDir", "HDFreeSpace", tmp, -1);
114
m_pSpinHDSpace->SetValue(tmp);
115
m_pSpinHDSpace->Enable(true);
116
m_pCheckHDFreeSpace->SetValue(true);
118
m_pSpinHDSpace->Enable(false);
119
m_pCheckHDFreeSpace->SetValue(false);
122
GNC::GCS::ConfigurationController::Instance()->readIntUser("/GinkgoCore/Station/CleanDicomDir", "DicomDirSize", tmp, -1);
124
m_pSpinDicomDirSize->SetValue(tmp);
125
m_pSpinDicomDirSize->Enable(true);
126
m_pCheckDicomDirSize->SetValue(true);
128
m_pSpinDicomDirSize->Enable(false);
129
m_pCheckDicomDirSize->SetValue(false);
133
//region "Metodos de IPasoConfiguracion"
134
wxWindow* LocalDatabaseConfigurationPanel::GetPanel()
139
std::string LocalDatabaseConfigurationPanel::GetTitle()
141
return _Std("Local database");
144
std::string LocalDatabaseConfigurationPanel::GetCabecera()
146
return _Std("Local DICOM Dir setup");
149
bool LocalDatabaseConfigurationPanel::Validar()
151
wxString path = m_pDICOMDir->GetValue();
152
wxFileName fileName(path);
153
if(!fileName.IsAbsolute()) {
154
wxFileName pathOfExec(wxStandardPaths::Get().GetExecutablePath());
155
fileName.MakeAbsolute(pathOfExec.GetPath());
156
path = fileName.GetFullPath();
159
if(!wxDir::Exists(path)) {
160
//se pregunta si desea crearlo
161
int answer = wxMessageBox(_("The selected directory does not exist\nWould you like to create it?"),_("Info"),wxYES_NO,this);
168
wxMkDir(path.ToUTF8(), 0770);
170
if(!wxDirExists(path))
172
wxMessageBox(_("Failed to create directory, make sure the path is correct and you have permissions on parent directory"), _("Info"));
177
//se comprueba que puede escribir(escribimos y borramos un fichero chorra)
178
wxString pathFicheroPrueba = path + wxFileName::GetPathSeparator() + wxString::Format(wxT("%d"),rand());
179
while(wxFileExists(pathFicheroPrueba)) {
180
pathFicheroPrueba = path + wxFileName::GetPathSeparator() + wxString::Format(wxT("%d"),rand());
184
if(!ficheroTmp.Create(pathFicheroPrueba,false)){
185
if(!wxFileExists(pathFicheroPrueba) ) {
186
wxMessageBox(_("There was an error reading the directory, make sure you have write permissions on it"), _("Info"));
190
ficheroTmp.Write(wxT("prueba"));
193
wxRemoveFile(pathFicheroPrueba);
199
bool LocalDatabaseConfigurationPanel::Guardar()
201
//se actualiza el fichero de configuracion
202
wxFileName dirAnterior(m_pathDicomDir);
203
wxFileName dirNuevo(m_pDICOMDir->GetValue());
204
if(dirAnterior != dirNuevo)
206
GNC::GCS::ConfigurationController::Instance()->writeStringUser("/GinkgoCore/Estacion", "DicomDir",std::string(m_pDICOMDir->GetValue().ToUTF8()));
207
//se vacia el dicomdir actual y se carga el nuevo...
208
GNC::GCS::HistoryController::FreeInstance();
209
if (!GNC::GCS::HistoryController::Instance()->IsOk()) {
211
GNC::GCS::ConfigurationController::Instance()->writeStringUser("/GinkgoCore/Estacion", "DicomDir", std::string(m_pathDicomDir.ToUTF8()));
212
//se vacia el dicomdir actual y se carga el nuevo...
213
GNC::GCS::HistoryController::FreeInstance();
215
GNC::GUI::HistoryPanel3::Instance()->ReloadHistory();
219
//dicomdir auto cleaning
222
if (m_pChoiceDeleteOlder->IsEnabled()) {
223
for (std::map<int, std::string>::const_iterator it = m_mapTimePeriods.begin(); it != m_mapTimePeriods.end(); ++it) {
224
if (wxString::FromUTF8((*it).second.c_str()).CompareTo(m_pChoiceDeleteOlder->GetString(m_pChoiceDeleteOlder->GetSelection())) == 0) {
230
GNC::GCS::ConfigurationController::Instance()->writeIntUser("/GinkgoCore/Station/CleanDicomDir", "AcquisitionOlderThan", tmp);
233
if (m_pSpinHDSpace->IsEnabled()) {
234
tmp = m_pSpinHDSpace->GetValue();
236
GNC::GCS::ConfigurationController::Instance()->writeIntUser("/GinkgoCore/Station/CleanDicomDir", "HDFreeSpace", tmp);
239
if (m_pSpinDicomDirSize->IsEnabled()) {
240
tmp = m_pSpinDicomDirSize->GetValue();
242
GNC::GCS::ConfigurationController::Instance()->writeIntUser("/GinkgoCore/Station/CleanDicomDir", "DicomDirSize", tmp);
244
GNC::GCS::AutoCleaningController::Instance()->Reset();
250
void LocalDatabaseConfigurationPanel::OnTextoCambiado(wxCommandEvent &)
253
OnPropiedadCambiada();
257
void LocalDatabaseConfigurationPanel::OnSeleccionarDirectorio(wxCommandEvent &)
259
wxDirDialog seleccionarDirectorio(this,_("Select DICOMDIR"),m_pDICOMDir->GetValue(),wxDD_DEFAULT_STYLE|wxDD_NEW_DIR_BUTTON);
260
int response = seleccionarDirectorio.ShowModal();
261
if (response == wxID_OK)
263
m_pDICOMDir->SetValue(seleccionarDirectorio.GetPath());
267
void LocalDatabaseConfigurationPanel::OnSize(wxSizeEvent & event){
268
wxSize oldSize = m_pstaticTextAdvertencia->GetSize();
270
m_pstaticTextAdvertencia->Freeze();
271
m_pstaticTextAdvertencia->SetLabel(_("Warning, to update the directory, you must close current opened series."));
272
m_pstaticTextAdvertencia->Wrap( event.GetSize().x - 25 );
273
m_pstaticTextAdvertencia->Thaw();
275
wxSize newSize = m_pstaticTextAdvertencia->GetSize();
276
if (newSize != oldSize) {
285
void LocalDatabaseConfigurationPanel::OnCheckOlderStudies( wxCommandEvent& event )
287
m_pChoiceDeleteOlder->Enable(m_pCheckDeleteOlder->GetValue());
288
OnPropiedadCambiada();
292
void LocalDatabaseConfigurationPanel::OnCheckDicomDirSize(wxCommandEvent& event)
294
m_pSpinDicomDirSize->Enable(m_pCheckDicomDirSize->GetValue());
295
OnPropiedadCambiada();
299
void LocalDatabaseConfigurationPanel::OnCheckHDSpace(wxCommandEvent& event)
301
m_pSpinHDSpace->Enable(m_pCheckHDFreeSpace->GetValue());
302
OnPropiedadCambiada();
306
void LocalDatabaseConfigurationPanel::OnSpinCtrl(wxSpinEvent& /*evt*/)
308
OnPropiedadCambiada();
311
void LocalDatabaseConfigurationPanel::OnOptionModified(wxCommandEvent& /*evt*/)
313
OnPropiedadCambiada();