diff --git a/setup/wizard.cpp b/setup/wizard.cpp index 5e1e93007..7d7c498db 100755 --- a/setup/wizard.cpp +++ b/setup/wizard.cpp @@ -21,7 +21,7 @@ protected: void AddLabel(wxSizer* pSizer, const wxChar* label); void AddLabel(wxGridBagSizer* pSizer, const wxChar* label, unsigned int row, unsigned int column); bool CheckDataDir(wxString strDataPath) const; - bool CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath) const; + void CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath, wxArrayString& asPersonalizedFiles) const; bool CheckPrgDir(const wxString& strPrgPath) const; public: @@ -138,59 +138,58 @@ bool CampoWizardPage::CheckDataDir(wxString strDataPath) const return bOkData; } + //metodo per il controllo di eventuali personalizzazioni presenti nelle custom e relative ad una versione.. //..antecedente la 209110 (prima versione 10.0) -bool CampoWizardPage::CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath) const +void CampoWizardPage::CheckCustomDir(const wxString strCustomPath, const wxString& strPrgPath, + wxArrayString& asPersonalizedFiles) const { - //parametro di controllo generale sulla bontà della custom - bool bOkCustom = true; + //se la directory non c'è ciao ciciuz!! + if (!::wxDirExists(strCustomPath)) + return; + //controlla la directory custom che gli viene passata alla ricerca del file custver.ini che contiene le info.. //..necessarie per sapere se le personalizzazioni sono a posto o meno - if (::wxDirExists(strCustomPath)) + CampoIniFile ciCustomVer(strCustomPath + "/custver.ini", "Main"); + const long lCustomVer = ciCustomVer.GetInt("Versione"); //il dio dei programmatori perdoni il type mismatch! + //se le personalizzazioni sono a posto esce felicemente + if (lCustomVer >= 209110) + return; + + //se le personalizzazioni non sono a posto (file custver.ini non esiste o è di una vecchia versione)... + //riempie la lista delle personalizzazioni da controllare + wxArrayString asFileList; + const size_t uFiles = wxDir::GetAllFiles(strCustomPath, &asFileList, "*.*"); + + for (size_t i = 0; i < uFiles; i++) { - //solo i file di tipo .msk possono creare casini - wxArrayString asMaskList; + const wxString strFile = asFileList[i].Lower(); + //per prima cosa cerca i files che abbiano un'omonimo tra gli eseguibili: ad es. sono maschere che,.. + //..ad aggiornamento concluso,non potrebbero funzionare + const wxFileName fnFileCurr(strFile); + const wxString strExt = fnFileCurr.GetExt(); - //parametro di controllo sulla bontà della personalizzazione;se trova almeno 1 file personalizzato che crea.. - //..la necessità di controllare la versione della custom - bool bPersonalized = false; - const size_t uMaskFiles = wxDir::GetAllFiles(strCustomPath, &asMaskList, "*.msk"); - for (size_t i = 0; i < uMaskFiles; i++) - { - const wxString strMask = asMaskList[i].Lower(); - //se c'è un verig.msk è sicuramente una personalizzazione e quindi esce per bloccare l'installazione - if (strMask.StartsWith("verig")) - { - bPersonalized = true; - break; - } - //solo le maschere che hanno un omonimo .ini possono dare errore - wxFileName fnIni(strMask); - fnIni.SetExt("ini"); - //per prima cosa cerca l'ini nella custom corrente - if (fnIni.FileExists()) - { - bPersonalized = true; - break; - } - //poi lo prova a cercare sotto i programmi (ci vuole un matto a fare una cosa simile) - fnIni.SetPath(strPrgPath); - if (fnIni.FileExists()) - { - bPersonalized = true; - break; - } - } - - if (bPersonalized) + wxFileName fnPrgDual = fnFileCurr; + fnPrgDual.SetPath(strPrgPath); + if (fnPrgDual.FileExists()) { - CampoIniFile ciCustomVer(strCustomPath + "/custver.ini", "Main"); - const long lCustomVer = ciCustomVer.GetInt("Versione"); //il dio dei programmatori perdoni il type mismatch! - if (lCustomVer < 209110) - bOkCustom = false; + asPersonalizedFiles.Add(strFile); } - } - return bOkCustom; + + //poi controlla se c'è un ??rig*.ini/msk è sicuramente una personalizzazione + if (strFile.Mid(2,3) == "rig" && (strExt == "ini" || strExt == "msk")) + { + asPersonalizedFiles.Add(strFile); + } + + //poi controlla che non vi sia un .exe, che potrebbe non funzionare con le nuove .dll + if (strExt == "exe") + { + asPersonalizedFiles.Add(strFile); + } + + } //for(size_t i=0... + } //metodo per il controllo della validita' di un'area programmi @@ -367,10 +366,11 @@ bool CampoWizardPage3::ForwardValidate() if (!CheckDataDir(strStudy)) return ErrorBox("La cartella indicata come area dati NON e' valida!\nInterrompere l'installazione e selezionare un'area dati valida\ncon il programma"); //custom directories + wxArrayString asPersonalizedFiles; + //a) custom di studio - if (!CheckCustomDir(strStudy + "custom", strPrgPath)) - return ErrorBox("Sono presenti personalizzazioni relative ai documenti di vendita.\n" - "Richiedere l'intervento dell'assistenza tecnica.\nImpossibile proseguire l'aggiornamento."); + CheckCustomDir(strStudy + "custom", strPrgPath, asPersonalizedFiles); + //b) custom di ditta wxDir dirStudy(strStudy); wxString strDir; @@ -380,14 +380,47 @@ bool CampoWizardPage3::ForwardValidate() strDir.MakeLower(); if (strDir.EndsWith("a") && atol(strDir) > 0) { - if (!CheckCustomDir(strStudy + strDir + "/custom", strPrgPath)) - { - wxString strMsg = "Sono presenti personalizzazioni relative ai documenti di vendita nella ditta "; - strMsg << strDir << ".\nRichiedere l'intervento dell'assistenza tecnica.\nImpossibile proseguire l'aggiornamento."; - return ErrorBox(strMsg); - } + CheckCustomDir(strStudy + strDir + "/custom", strPrgPath, asPersonalizedFiles); } } + //se ci sono files personalizzati pericolosi avverte l'utente ed interrompe l'aggiornamento!! + if (asPersonalizedFiles.GetCount() > 0) + { + //finestra con la lista dei files personalizzati + wxDialog dlgList(NULL, wxID_ANY, wxString("Lista files personalizzati"), wxDefaultPosition); + wxBoxSizer* pSizer = new wxBoxSizer(wxVERTICAL); + //testo con il fatale annuncio per l'utonto + wxStaticText* stText = new wxStaticText (&dlgList, 100, "Sono presenti personalizzazioni create per una " + "precedente versione del programma.\nE' necessario richiedere l'intervento dell'assistenza tecnica" + ".\nImpossibile proseguire l'aggiornamento! Salvare la lista e ANNULLARE l'aggiornamento"); + pSizer->Add(stText, 0, wxALL, 5); + //lista dei file pericolosi + wxListBox* lbList = new wxListBox(&dlgList, 101, wxDefaultPosition, wxSize(480, 320), asPersonalizedFiles); + pSizer->Add(lbList, 0, wxALL, 5); + //bottone di conferma + wxButton* buOk = new wxButton(&dlgList, wxID_OK, "Salva lista", wxDefaultPosition, wxSize(96,-1)); + pSizer->Add(buOk, 0, wxALL|wxALIGN_CENTRE, 5); + + dlgList.SetSizerAndFit(pSizer); + dlgList.Centre(); + dlgList.ShowModal(); + //finestra per il salvataggio della lista in un file di testo + wxFileDialog fdSave(NULL, "Selezionare la cartella dove salvare la lista", wxEmptyString, + "listapers.txt", "*.txt", wxFD_SAVE|wxFD_OVERWRITE_PROMPT); + if (fdSave.ShowModal() == wxID_OK) + { + const wxString strFileName = fdSave.GetPath(); + wxTextFile tfLista(strFileName); + //aggiunge i files della lista al file di testo + for (size_t i = 0; i < asPersonalizedFiles.GetCount(); i++) + tfLista.AddLine(asPersonalizedFiles[i]); + //scrive 'sto benedetto file di testo! + tfLista.Write(); + } + //blocca l'aggiornamento + return false; + } + //se ha superato i severi controlli prosegue GetWizard().SetDataPath(strStudy);