From db128e1983e6ab808a790b5e8140395afb97e222 Mon Sep 17 00:00:00 2001 From: luca Date: Thu, 20 Sep 2007 09:53:21 +0000 Subject: [PATCH] Patch level : Files correlati : Ricompilazione Demo : [ ] Commento : git-svn-id: svn://10.65.10.50/trunk@15633 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- setup/Setup.cpp | 1816 +------------------------------ setup/{setupkey.cpp => key.cpp} | 15 +- setup/{setupkey.h => key.h} | 7 +- setup/utils.cpp | 75 ++ setup/utils.h | 21 + setup/wizard.cpp | 1648 ++++++++++++++++++++++++++++ setup/wizard.h | 85 ++ setup/wxinc.h | 13 + 8 files changed, 1849 insertions(+), 1831 deletions(-) rename setup/{setupkey.cpp => key.cpp} (96%) rename setup/{setupkey.h => key.h} (71%) create mode 100755 setup/utils.cpp create mode 100755 setup/utils.h create mode 100755 setup/wizard.cpp create mode 100755 setup/wizard.h diff --git a/setup/Setup.cpp b/setup/Setup.cpp index 235ea4862..a198b8f38 100755 --- a/setup/Setup.cpp +++ b/setup/Setup.cpp @@ -3,1823 +3,13 @@ //Es. wxArrayString 'as' + 'AcceptRefuse' -> asAcceptRefuse #include "wxinc.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #ifdef WIN32 #include #endif -#include "setupkey.h" - -#define HGAP 4 -#define VGAP 2 - -/////////////////////////////////////////////////////////// -// Utilities -/////////////////////////////////////////////////////////// - -wxString GetDefaultDestination() -{ - wxString strDest; -//scelta della directory di installazione di default -#ifdef WIN32 - TCHAR strFolder[MAX_PATH]; - ::SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, strFolder); - strDest = strFolder; -#endif - - if (strDest.IsEmpty()) - { - // Forse è la cartella base dove è installato Word? - wxFileType* pDoc = wxTheMimeTypesManager->GetFileTypeFromExtension(wxT("doc")); - if (pDoc != NULL) - { - wxFileName strFilename = pDoc->GetOpenCommand(wxT("pippo.doc")); - while (strFilename.GetDirCount() > 1) - strFilename.RemoveLastDir(); - strDest = strFilename.GetPath().After('"'); - if (strDest.StartsWith(wxT("C\\"))) - strDest = wxT("C:") + strDest.Mid(1); - } - } - - return strDest; -} - -/////////////////////////////////////////////////////////// -// CampoWizardPage -/////////////////////////////////////////////////////////// -class CampoWizardPage; //predefinizione di CampoWizardPage (magia nera!!) -//predefinizione pure della CampoWizard con tutti i suoi metodi per poterlo usare nel metodo GetWizard (magia nerissima!!) -class CampoWizard : public wxWizard -{ - enum { m_nPages = 10 }; - CampoWizardPage* m_pPage[m_nPages]; - - wxString _strDestinationPath; //path di aggiornamento/installazione - unsigned int _uInstallationType; //tipo di installazione selezionata (standard,server,client,aggiornamento) - unsigned int _uDongleType; //tipo di chiave di protezione (hardlock,eutron,server) - - wxString _strPrgLocPath; //path programmi in locale - wxString _strPrgNetPath; //path programmi in remoto (server programmi directory per client) - wxString _strDataPath; //path dati (creare o usare) - - bool _bInstDemoData; //installa dati dimostrativi - bool _bInstDemoVersion; //installa versione demo - bool _bInstUseAuth; //installa/usa server authoriz - wxString _strSrvAuth; //nome server authoriz - bool _bInstUseDict; //installa/usa server diction - wxString _strSrvDict; //nome server diction - - unsigned int _iSrvAutostartMode; //tipologia di esecuzione dei server - bool _bDesktopShortcut; //crea il link sul desktop - -protected: - DECLARE_EVENT_TABLE(); - void OnNext(wxCommandEvent& e); - - int Pages() const { return m_nPages; } - CampoWizardPage& Page(int p) const { wxASSERT(p >= 0 && p < m_nPages); return *m_pPage[p]; } - -public: - bool Run(); - wxString Get(wxWindowID id) const; - int GetSelection(wxWindowID id) const; - bool GetBool(wxWindowID id) const; - void Set(wxWindowID id, const wxString str); - - //metodi per il passaggio tra le finestre dei parametri di installazione! - void SetDestinationPath(const wxString& strPath); - const wxString& GetDestinationPath() const; - void SetInstallationType(const unsigned int uType); - const unsigned int GetInstallationType() const; - void SetDongleType(const unsigned int uType); - const unsigned int GetDongleType() const; - - void SetPrgLocPath(const wxString& strPrgLocPath); - const wxString& GetPrgLocPath() const; - void SetPrgNetPath(const wxString& strPrgNetPath); - const wxString& GetPrgNetPath() const; - void SetDataPath(const wxString& strDataPath); - const wxString& GetDataPath() const; - - void SetInstDemoData(const bool bInstDemoData); - const bool GetInstDemoData() const; - void SetInstDemoVersion(const bool bInstDemoVersion); - const bool GetInstDemoVersion() const; - - void SetInstUseAuth(const bool bInstUseAuth); - const bool GetInstUseAuth() const; - void SetSrvAuth(const wxString& strSrvAuth); - const wxString& GetSrvAuth() const; - - void SetInstUseDict(const bool bInstUseDict); - const bool GetInstUseDict() const; - void SetSrvDict(const wxString& strSrvDict); - const wxString& GetSrvDict() const; - - void SetSrvAutostartMode(const int iSrvAutostartMode); - const int GetSrvAutostartMode() const; - - void SetDesktopShortcut(const bool bDesktopShortcut); - const bool GetDesktopShortcut() const; - - CampoWizard(wxWindow* pParent); -}; - -//////////////////////////////////////////////////////////////////////////////////////////// -//Classe per la gestione dei files di configurazione tipo campo.ini -class CampoIniFile : public wxFileConfig -{ -protected: -public: - wxString Get(const wxString strVariable) const; - bool GetBool(const wxString strVariable) const; - bool Set(const wxString strVariable, const wxString strValue);//, const wxString strParagraph) const; - bool Set(const wxString strVariable, const int uValue); - - CampoIniFile(const wxString strIniPath, wxString strValue); -}; - -CampoIniFile::CampoIniFile(const wxString strIniPath, const wxString strParagraph) - : wxFileConfig (wxEmptyString, wxEmptyString, strIniPath, wxEmptyString, - wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_NO_ESCAPE_CHARACTERS) -{ - if (!strParagraph.IsEmpty()) - SetPath(strParagraph); -} - -wxString CampoIniFile::Get(const wxString strVariable) const -{ - return Read(strVariable); -} - -bool CampoIniFile::GetBool(const wxString strVariable) const -{ - wxString strBool = Get(strVariable); - return strBool == "X" || strBool == "Y"; -} - -bool CampoIniFile::Set(const wxString strVariable, const wxString strValue)//, const wxString strParagraph) const -{ - return Write(strVariable, strValue); -} - -bool CampoIniFile::Set(const wxString strVariable, const int uValue)//, const wxString strParagraph) const -{ - return Write(strVariable, uValue); -} - -//////////////////////////////////////////////////////////////////////////////////////////// -//Campo wizard page (pagina generica del programma, di cui saranno figlie le singole pagine) -class CampoWizardPage : public wxWizardPageSimple -{ - wxHtmlWindow* m_pText; - -protected: - CampoWizard& GetWizard() const {return *(CampoWizard*)GetParent();} - void SetHTMLText(const wxString strTitle, const wxString strBody); - void SetHTMLPage(const wxString strFile); - wxString Bold(const wxString strStr) const; - 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; - -public: - virtual bool ForwardValidate() { return true; } - wxString Get(wxWindowID id) const; - bool GetBool(wxWindowID id) const; - bool Set(wxWindowID id, const wxString& str); - bool Set(wxWindowID id, const bool bul); - int GetSelection(wxWindowID id) const; - - CampoWizardPage(wxWizard* parent); -}; - -wxString CampoWizardPage::Get(wxWindowID id) const -{ - wxWindow* pWnd = FindWindowById(id); - return pWnd ? pWnd->GetLabel() : wxEmptyString; -} - -bool CampoWizardPage::GetBool(wxWindowID id) const -{ - wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); - return pWnd != NULL && pWnd->IsChecked(); -} - -bool CampoWizardPage::Set(wxWindowID id, const wxString& str) -{ - wxWindow* pWnd = FindWindowById(id); - if (pWnd) - pWnd->SetLabel(str); - return (pWnd != NULL); -} - -bool CampoWizardPage::Set(wxWindowID id, const bool bul) -{ - wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); - if (pWnd) - pWnd->SetValue(bul); - return (pWnd != NULL); -} - -int CampoWizardPage::GetSelection(wxWindowID id) const -{ - int n = -1; - wxWindow* pWnd = FindWindowById(id); - if (pWnd) - { - wxChoice* pList = (wxChoice*)pWnd; - n = pList->GetSelection(); - } - return n; -} - -void CampoWizardPage::SetHTMLPage(const wxString strFile) -{ - m_pText->LoadPage(strFile); -} - -//parte html della finestra standard -void CampoWizardPage::SetHTMLText(wxString strTitle, wxString strBody) -{ - wxString strAppName = wxT(""); strAppName += Bold(APPNAME); strAppName += wxT(""); - strTitle.Replace(wxT("APPNAME"), strAppName); - strBody.Replace(wxT("APPNAME"), strAppName); - - wxString str; - str += wxT(""); - str += wxT("

"); str += strTitle; str += wxT("

"); - str += wxT("
"); - str += wxT("
"); str += strBody; str += wxT("
"); - str += wxT(""); - - m_pText->SetPage(str); -} - -wxString CampoWizardPage::Bold(const wxString strStr) const -{ - wxString strBold; - strBold << "" << strStr << ""; - return strBold; -} - -//metodo per aggiungere i prompt agli oggetti contenuti nelle GridSize e similia -void CampoWizardPage::AddLabel(wxSizer* pSizer, const wxChar* label) -{ - pSizer->Add(new wxStaticText(this, wxID_ANY, label), 0, wxALL|wxALIGN_CENTER_VERTICAL); -} - -void CampoWizardPage::AddLabel(wxGridBagSizer* pSizer, const wxChar* label, unsigned int row, unsigned int column) -{ - pSizer->Add(new wxStaticText(this, wxID_ANY, label), wxGBPosition(row, column)); -} - -//metodo per il controllo della validita' di un'area dati -bool CampoWizardPage::CheckDataDir(wxString& strDataPath) const -{ - wxDir dirDataPath(strDataPath); - bool ok_data = false; - //deve esistere non vuota, e contenere la sottodirectory "com" con i dati comuni - if (dirDataPath.Exists(strDataPath) && dirDataPath.HasSubDirs("com")) - { - strDataPath << "/com"; - wxFileName fnFileToCheck(strDataPath, "tabcom"); - fnFileToCheck.SetExt("dbf"); - if (fnFileToCheck.FileExists()) - ok_data = true; - } - return ok_data; -} - -//costruttore della finestra standard -CampoWizardPage::CampoWizardPage(wxWizard* parent) - : wxWizardPageSimple(parent) -{ - wxBoxSizer* pSizer = new wxBoxSizer(wxVERTICAL); - m_pText = new wxHtmlWindow(this, 100, wxDefaultPosition, wxSize(512, 312)); - pSizer->Add(m_pText, 0, wxALL, 0); - pSizer->AddSpacer(5); - SetSizer(pSizer); -} -/**********************************************************************************************************/ -/* 1 Pagina di benvenuto */ -/**********************************************************************************************************/ -class CampoWizardPage1 : public CampoWizardPage -{ -public: - CampoWizardPage1(wxWizard* parent); -}; - -CampoWizardPage1::CampoWizardPage1(wxWizard* parent) : CampoWizardPage(parent) -{ - //contenuto della prima schermata (pagina benvenuto) - wxString strTitle = wxT("Benvenuti in APPNAME"); - wxString strBody = wxT("

Questo programma vi guiderà passo a passo nell'installazione / aggiornamento del software.

"); - strBody += wxT("

Leggere attentamente le istruzioni che saranno visualizzate nelle finestre di questo programma di installazione!

"); - strBody += wxT("

Prima di proseguire con l'installazione / aggiornamento assicurarsi di avere effettuato il login a Windows con un utente di tipo 'Amministratore' di sistema.

"); - strBody += wxT("

In caso si desideri aggiornare una postazione tipo server di APPNAME su cui sia attivo il gestore dei servizi di APPNAME, arrestare prima tale gestore dei servizi.

"); - SetHTMLText(strTitle, strBody); -} - - -/**********************************************************************************************************/ -// 2 Pagina con Accetta / Rifiuta la licenza -//*********************************************************************************************************/ -class CampoWizardPage2 : public CampoWizardPage -{ -protected: - virtual bool ForwardValidate(); - -public: - CampoWizardPage2(wxWizard* parent); -}; - -bool CampoWizardPage2::ForwardValidate() -{ - if (GetSelection(201) == 1) - return ErrorBox("Impossibile proseguire se non si accetta la licenza sul software!!"); - - return true; -} - -CampoWizardPage2::CampoWizardPage2(wxWizard* parent) : CampoWizardPage(parent) -{ - SetHTMLPage("licenza.htm"); - - //radiobutton Accetta / Rifiuta - wxArrayString asAccRef; - asAccRef.Add("Accetta"); - asAccRef.Add("Rifiuta"); - wxRadioBox* radio_box = new wxRadioBox(this, 201, "Selezionare 'Accetta' per proseguire con l'installazione, 'Rifiuta' per terminare l'installazione", wxDefaultPosition, - wxDefaultSize, asAccRef, 0, wxRA_SPECIFY_COLS); - - radio_box->SetSelection(1); - GetSizer()->Add(radio_box); -} - - -/**********************************************************************************************************/ -/* 3 Pagina con la scelta di Aggiornamento / Tipo Installazione */ -/**********************************************************************************************************/ -class CampoWizardPage3 : public CampoWizardPage -{ - wxRadioBox* m_pRadioBox; - -protected: - virtual bool ForwardValidate(); - bool LocalDongleTest() const; - -public: - CampoWizardPage3(wxWizard* parent); -}; - -//metodo per cercare se c'e' una chiave fisicamente collegata (serve per abilitare l'installazione demo) -bool CampoWizardPage3::LocalDongleTest() const -{ - unsigned short serno = 0xFFFF; - int yearKey = 0; - - serno = HardlockLogin(yearKey); - if (serno == 0xFFFF) - serno = EutronLogin(yearKey); - - return serno != 0xFFFF && yearKey > 0; -} - - -bool CampoWizardPage3::ForwardValidate() -{ - const int iLastRow = m_pRadioBox->GetRowCount() - 1; - const int iSelectedRow = m_pRadioBox->GetSelection(); - wxString strPrgPath; - wxString strStudy; - wxString strSrvAuth; - wxString strSrvDict; - - //analizza il campo.ini dell'installazione selezionata (si usa < perche' l'ultima row e' la nuova installazione!) - if (iSelectedRow < iLastRow) - { - strPrgPath = m_pRadioBox->GetStringSelection(); - CampoIniFile CampoIni(strPrgPath + "/campo.ini", "Main"); - - const bool bTestDatabase = CampoIni.GetBool("TestDatabase"); - - //non si puo' aggiornare un client da cd!! va fatto dal programma - const bool bTestPrograms = CampoIni.GetBool("TestPrograms"); - if (bTestPrograms) - { - CampoIniFile InstallIni(strPrgPath + "/install.ini", "Main"); - wxString strDiskPath = InstallIni.Get("DiskPath"); - wxString strMsg = "Per aggiornare questa stazione di lavoro e' necessario aggiornare prima il Server di "; - strMsg << APPNAME << " in " << strDiskPath << " !\n"; - strMsg << "Questa stazione di lavoro si aggiornera' automaticamente alla prima esecuzione del programma " << APPNAME; - return ErrorBox(strMsg); - } - - strStudy = CampoIni.Get("Study"); - CampoIniFile CampoServerIni(strPrgPath + "/campo.ini", "Server"); - strSrvAuth = CampoServerIni.Get("Dongle"); - strSrvDict = CampoServerIni.Get("Dictionary"); - - 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 APPNAME"); - GetWizard().SetDataPath(strStudy); - - if (!strSrvAuth.IsEmpty()) - GetWizard().SetSrvAuth(strSrvAuth); - if (!strSrvDict.IsEmpty()) - GetWizard().SetSrvDict(strSrvDict); - - //setta alla pagina riassuntiva i valori della pagina attuale... - GetWizard().SetDestinationPath(strPrgPath); //va alla pagina riassuntiva - GetWizard().SetPrgLocPath(strPrgPath); //questo serve solo per la creazione del link sul desktop! - GetWizard().SetInstallationType(3); //e' un aggiornamento!! - GetWizard().SetDesktopShortcut(false); //e' sempre un aggiornamento! - } - else //resetta il path in caso si scelga nuova installazione dopo aver scelto aggiornamento - { - //continuiamo a sconsigliare l'installazione DEMO, ma ognuno fa come crede... - if (GetBool(302)) - { - const wxString strPrgDemoPath = "c:/campodemo"; - wxDir dirPrgDemoPath(strPrgDemoPath); - if (dirPrgDemoPath.Exists(strPrgDemoPath) && (dirPrgDemoPath.HasFiles() || dirPrgDemoPath.HasSubDirs())) - return ErrorBox("Impossibile installare la versione DEMO!\nLa cartella c:/campodemo NON e' vuota!"); - - GetWizard().SetInstDemoVersion(true); - } - - //questo lo fa in ogni caso! - GetWizard().SetDestinationPath(""); - GetWizard().SetDesktopShortcut(true); - - } - - return true; -} - -CampoWizardPage3::CampoWizardPage3(wxWizard* parent) : CampoWizardPage(parent) -{ - //deve cercare campo.stp - CampoIniFile campo_stp("C:\\campo.stp", ""); - wxString group; - long index; - const wxString program = "Program"; - wxArrayString asGroups, asCampi; - - //cerca se esiste campo.stp;se lo trova cerca quelle che sono le installazioni valide;se ne trova.. - //..le aggiunge ad un array di stringhe (asCampi) da cui genera un radiobutton di scelte - for (bool ok = campo_stp.GetFirstGroup(group, index); ok; ok = campo_stp.GetNextGroup(group, index)) - { - asGroups.Add(group); - } - int prechecked = -1; - for (unsigned int i = 0; i < asGroups.GetCount(); i++) - { - CampoIniFile campo_stp("C:\\campo.stp", asGroups[i]); - wxString path = campo_stp.Get(program); - - //sono installazioni valide quelle che presentano la coppia di files campo.ini e campo.aut (senza.. - //..questi 2 soggetti il programma non parte) - wxString campo_ini = path; - campo_ini << "/campo.ini"; - wxString campo_aut = path; - campo_aut << "/campo.aut"; - if (wxFileName::FileExists(campo_ini) && wxFileName::FileExists(campo_aut)) - { - asCampi.Add(path); - //cerca l'eventuale installazione server se ci sono piu' installazioni sulla stessa macchina - if (prechecked < 0) - { - CampoIniFile ini(campo_ini, "Main"); - if (ini.GetBool("TestDatabase") && !ini.GetBool("TestPrograms")) - prechecked = i; - } - } - } - - wxString strTitle, strBody; - //se non ci sono delle installazioni da aggiornare propone solo installazioni.. - if (asCampi.IsEmpty()) - { - strTitle += wxT("Scelta Installazione"); - strBody += wxT("

E' possibile INSTALLARE APPNAME in un nuovo direttorio.

"); - - asCampi.Add("Nuova installazione"); //voce di nuova installazione! - m_pRadioBox = new wxRadioBox(this, 301, "Installazione del software", wxDefaultPosition, - wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS); - } - //..senno' propone di aggiornare - else - { - strTitle += wxT("Scelta Aggiornamento / Installazione"); - strBody += wxT("

E' possibile AGGIORNARE (scelta consigliata) una installazione di APPNAME gia' presente oppure INSTALLARE in un nuovo direttorio.

"); - strBody += wxT("

Selezionare l'opzione desiderata nel riquadro sottostante. In caso di piu' di una installazione "); - strBody += wxT("presente sara' preselezionata la eventuale installazione di tipo Server, in quanto deve essere aggiornata per prima! "); - strBody += wxT("

In questo caso procedere all'aggiornamento di tale installazione Server e aggiornare successivamente le postazioni client "); - strBody += wxT("lanciando il programma APPNAME su di esse

"); - - //radiobutton con le scelte aggiornamento - asCampi.Add("Nuova installazione"); - m_pRadioBox = new wxRadioBox(this, 301, "Selezionare l'installazione da aggiornare (consigliato) o Nuova installazione", wxDefaultPosition, - wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS); - if (prechecked > 0) - m_pRadioBox->SetSelection(prechecked); - } - - strBody += wxT("

Prima di proseguire accertarsi che non vi sia alcuna sessione di APPNAME attiva! "); - strBody += wxT("Terminare quindi le eventuali sessioni di APPNAME attive e proseguire.

"); - - GetSizer()->Add(m_pRadioBox); - - //se NON ci sono installazioni gia' presenti e NON c'e' alcuna chiave collegata -> puo' installare la DEMO - if (asCampi.GetCount() == 1 && !LocalDongleTest()) - { - //checkbox per installare la DEMO (non fatelo, vi prego!!!) - wxCheckBox* chDemoPrg = new wxCheckBox(this, 302, wxT("Installare la versione DEMO")); - chDemoPrg->SetValue(false); - GetSizer()->AddSpacer(16); - GetSizer()->Add(chDemoPrg); - - strBody += wxT("

E' possibile anche installare la versione DEMO di APPNAME. Questa versione e' a scopo puramente "); - strBody += wxT("dimostrativo e NON va di norma installata! Non e' utilizzabile come la versione normale in quanto limitata nel "); - strBody += wxT("numero e nella data delle registrazioni e nel tempo di uso giornaliero (max 2 ore). La cartella di installazione della "); - strBody += wxT("versione dimostrativa e' C:/campodemo e dispone di un'area dati parzialmente precompilata.

"); - } - - SetHTMLText(strTitle, strBody); -} - - -/**********************************************************************************************************/ -/* 4 Pagina con la gestione della chiave di protezione */ -/**********************************************************************************************************/ -class CampoWizardPage4 : public CampoWizardPage -{ - -protected: - DECLARE_EVENT_TABLE(); - void OnHLPick(wxCommandEvent& e); - void OnEUPick(wxCommandEvent& e); - void OnSRPick(wxCommandEvent& e); - - virtual bool ForwardValidate(); - virtual bool TransferDataToWindow(); - - int DongleTest(); - wxString DecodeString(const wxString& data); - int VersionYear(); - void BuildKey(char* key); - -public: - CampoWizardPage4(wxWizard* parent); -}; - -//metodi per la gestione dei bottoni per l'esecuzione dei programmi di installazione delle chiavi -BEGIN_EVENT_TABLE(CampoWizardPage4, CampoWizardPage) - EVT_BUTTON(401, OnHLPick) - EVT_BUTTON(402, OnEUPick) - EVT_BUTTON(403, OnSRPick) -END_EVENT_TABLE() - -void CampoWizardPage4::OnHLPick(wxCommandEvent& e) -{ - wxString path("../../chiavi/hardlock/hldrv32.exe"); - wxExecute(path, wxEXEC_SYNC); -} - -void CampoWizardPage4::OnEUPick(wxCommandEvent& e) -{ - wxString path("../../chiavi/eutron/sdi.exe"); - wxExecute(path, wxEXEC_SYNC); -} - -void CampoWizardPage4::OnSRPick(wxCommandEvent& e) -{ - static bool bSemaforo = false; - if (!bSemaforo) - { - bSemaforo = true; - wxBusyCursor hourglass; - wxString strSrvName; - int year = 0; - unsigned short serno = ServerLogin(year, strSrvName); - if (!strSrvName.IsEmpty()) - Set(404, strSrvName); - bSemaforo = false; - } -} - -bool CampoWizardPage4::ForwardValidate() -{ - //per poter proseguire deve aver trovato una chiave o un server! - - GetWizard().SetSrvAuth(Get(404)); - int nDongleType = DongleTest(); - if (nDongleType == 0) - return ErrorBox("Per proseguire e' NECESSARIO installare una chiave locale o collegarsi ad una chiave di rete!"); - - return true; -} - -bool CampoWizardPage4::TransferDataToWindow() -{ - FindWindowById(401)->Disable(); - FindWindowById(402)->Disable(); - FindWindowById(403)->Disable(); - FindWindowById(404)->Disable(); - - //controlla preventivamente se la chiave c'e' ed eventualmente quale e' (hardlock,eutron,server di chiavi) - const int nDongleType = DongleTest(); - GetWizard().SetDongleType(nDongleType); - - wxString strTitle = wxT("Controllo della chiave hardware di protezione"); - wxString strBody = wxT("

La versione commerciale del software richiede l'installazione e la presenza della chiave hardware di protezione

"); - switch (nDongleType) - { - case 1: - strBody += wxT("

E' stata rilevata una chiave tipo Hardlock:

"); - strBody += wxT("

"); - strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); - break; - case 2: - strBody += wxT("

E' stata rilevata una chiave tipo Eutron:

"); - strBody += wxT("

"); - strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); - break; - case 3: - strBody += wxT("

E' stato rilevata una chiave remota condivisa in rete con il servizio di gestione autorizzazioni:

"); - strBody += wxT("

"); - strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); - Set(404, GetWizard().GetSrvAuth()); - break; - - default: - strBody += wxT("

Non e' stata rilevata alcuna chiave hardware installata sul computer!

"); - strBody += wxT("

Per procedere all'installazione della chiave hardware, collegarla al computer e premere il bottone corrispondente alla tipologia della chiave stessa per installarne i driver.

"); - strBody += wxT("

Se si utilizza una chiave remota collegata ad un altro computer e condivisa in rete attraverso il servizio gestione di autorizzazioni "); - strBody += wxT("premere il bottone Cerca per attivare la ricerca automatica della chiave remota. Qualora tale ricerca fallisse digitare il nome del computer "); - strBody += wxT("(o l'indirizzo IP) cui e' collegata la chiave di rete e su cui e' installato e attivo il gestore di autorizzazioni. "); - FindWindowById(401)->Enable(); - FindWindowById(402)->Enable(); - FindWindowById(403)->Enable(); - FindWindowById(404)->Enable(); - break; - } - - SetHTMLText(strTitle, strBody); - - return true; -} - -void CampoWizardPage4::BuildKey(char* key) -{ - for (int i = 0; i < 8; i++) - key[i] = 'A'+ rand()%26; -} - -wxString CampoWizardPage4::DecodeString(const wxString& data) -{ - char key[8] = ""; - BuildKey(key); - - char tmp[256]; - int i; - for (i = 0; data[i]; i++) - tmp[i] = data[i] - (i < 8 ? key[i] : tmp[i - 8]); - tmp[i] = '\0'; - return tmp; -} - -int CampoWizardPage4::VersionYear() -{ - char ver[32]; - GetPrivateProfileString("ba", "Versione", "", ver, sizeof(ver), "../../program/install.ini"); - ver[4] = '\0'; - return atoi(ver); -} - -int CampoWizardPage4::DongleTest() -{ - int dongle_type = 0; - int yearKey = 0; - - unsigned int serno = 0xFFFF; - - wxString strSrvName = GetWizard().GetSrvAuth(); //nome del server di autorizzazioni (se c'e') - if (!strSrvName.IsEmpty()) - { - serno = ServerLogin(yearKey, strSrvName); - if (serno != 0xFFFF) - dongle_type = 3; //chiave remota - } - - if (serno == 0xFFFF) - { - serno = HardlockLogin(yearKey); - if (serno == 0xFFFF) - { - serno = EutronLogin(yearKey); - if (serno != 0xFFFF) - dongle_type = 2; //chiave eutron - } - else - dongle_type = 1; //chiave hardlock - } - - if (serno == 0) // Chiave di sviluppo - return dongle_type; - if (serno == 0xFFFF) // Chiave inesistente o invisibile = Prima installazione o demo - return dongle_type; - - const int verYear = VersionYear(); - if (yearKey < verYear) // Chiave già programmata con assistenza pagata - { - bool ok = false; - wxFileInputStream file("../dninst.zip"); - if (file.IsOk()) - { - wxTextInputStream keys(file); - wxString line = keys.ReadLine(); - srand(883); - const int ass_year = atoi(DecodeString(line)); - if (ass_year > yearKey) // Non devo abbassare l'anno di assistenza! - { - srand(ass_year); - while (!file.Eof()) - { - line = keys.ReadLine(); - line = DecodeString(line); - unsigned int sn = (unsigned int)atol(line); - if (sn == serno || line[0] == '*') - { - ok = true; - break; - } - } - if (ok) - { - const int n = ass_year%10; - const int y = (ass_year / 1000) * 1000 + (ass_year%1000) /10; - line.Printf("Il contratto di manutenzione %d/%d verrà attivato automaticamente\ndurante l'installazione del software", y, n); - WarningBox(line); - } - else - { - line.Printf("È necessario contattare l'assistenza tecnica\n" - "per l'abilitazione del contratto di manutenzione %d", verYear); - WarningBox(line); - } - } - } - else - { - ErrorBox("Impossibile verificare il contratto di manutenzione"); - } - } - return dongle_type; -} - -CampoWizardPage4::CampoWizardPage4(wxWizard* parent) : CampoWizardPage(parent) -{ - //procedura per la costruzione dei bottoni e delle immagini per l'installazione dei driver di chiave - //"griglia" contenitrice degli oggetti - - //griglia per sistemare i campi - wxGridBagSizer* gbsButtSizer = new wxGridBagSizer(VGAP, HGAP); - GetSizer()->Add(gbsButtSizer); - - //prima riga della griglia - //Hardlock label - AddLabel(gbsButtSizer, "Installa chiave locale di tipo Hardlock", 0, 0); - //Hardlock image - wxBitmap bmp_HL("../servers/hardlock.gif", wxBITMAP_TYPE_GIF); - wxStaticBitmap* s_bmp_HL = new wxStaticBitmap(this, wxID_ANY, bmp_HL); - gbsButtSizer->Add(s_bmp_HL, wxGBPosition(0, 1)); - //bottone Hardlock - wxButton* bHlButton = new wxButton(this, 401, wxT("Hardlock"), wxDefaultPosition, wxSize(64, -1)); - gbsButtSizer->Add(bHlButton, wxGBPosition(0, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - - //seconda riga della griglia - //Eutron label - AddLabel(gbsButtSizer, "Installa chiave locale di tipo Eutron", 1, 0); - //Eutron image - wxBitmap bmp_EU("../servers/eutron.gif", wxBITMAP_TYPE_GIF); - wxStaticBitmap* s_bmp_EU = new wxStaticBitmap(this, wxID_ANY, bmp_EU); - gbsButtSizer->Add(s_bmp_EU, wxGBPosition(1, 1)); - //bottone Eutron - wxButton* bEuButton = new wxButton(this, 402, wxT("Eutron"), wxDefaultPosition, wxSize(64, -1)); - gbsButtSizer->Add(bEuButton, wxGBPosition(1, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - - //terza riga della griglia - //Server label - AddLabel(gbsButtSizer, "Nome o indirizzo IP del server di autorizzazioni", 2, 0); - //nome Server - wxTextCtrl* tcSrvName = new wxTextCtrl(this, 404, "", wxDefaultPosition, wxSize(128,-1)); - gbsButtSizer->Add(tcSrvName, wxGBPosition(2, 1)); - //bottone Eutron - wxButton* bSrvButton = new wxButton(this, 403, wxT("Cerca"), wxDefaultPosition, wxSize(64, -1)); - gbsButtSizer->Add(bSrvButton, wxGBPosition(2, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - -} - -/**********************************************************************************************************/ -// 5 Scelta tipo installazione -/**********************************************************************************************************/ -class CampoWizardPage5 : public CampoWizardPage -{ - wxRadioBox* m_pRadioBox; - -protected: - virtual bool ForwardValidate(); - -public: - CampoWizardPage5(wxWizard* parent); -}; - -bool CampoWizardPage5::ForwardValidate() -{ - const unsigned int type = m_pRadioBox->GetSelection(); - GetWizard().SetInstallationType(type); - return true; -} - -CampoWizardPage5::CampoWizardPage5(wxWizard* parent) : CampoWizardPage(parent) -{ - //Istruzioni per l'uso! - wxString strTitle = wxT("Scelta del tipo di installazione"); - wxString strBody = wxT("

Standard (scelta consigliata). Installazione su postazione singola, con programmi e dati sul disco locale del computer

"); - strBody += wxT("

Installazioni di rete (per utenti esperti)

"); - strBody += wxT("

Server: Computer in rete sul quale sono presenti una copia, utilizzata o meno, dei programmi (server programmi) e l’area dati (server dati). "); - strBody += wxT("In una installazione in rete di APPNAME e' necessario sia presente un unica postazione di tipo server, "); - strBody += wxT("e deve essere installata per prima!

"); - strBody += wxT("

Client: Computer in rete sul quale e' presente una copia dei programmi ma non l'area dati. "); - strBody += wxT("I client possono essere installati solo dopo l'installazione del server!

"); - SetHTMLText(strTitle, strBody); - - //radiobutton con i tipi di installazione - wxArrayString asInstType; - asInstType.Add("Standard"); - asInstType.Add("Server"); - asInstType.Add("Client"); - - m_pRadioBox = new wxRadioBox(this, 501, "Selezionare il tipo di installazione", wxDefaultPosition, - wxDefaultSize, asInstType, 0, wxRA_SPECIFY_ROWS); - //setta il default a Standard - m_pRadioBox->SetSelection(0); - GetSizer()->Add(m_pRadioBox); - -} - - -/**********************************************************************************************************/ -// 6 Installazione standard -/**********************************************************************************************************/ -class CampoWizardPage6 : public CampoWizardPage -{ -protected: - DECLARE_EVENT_TABLE(); - void OnDirPick(wxCommandEvent& e); - virtual bool ForwardValidate(); - -public: - CampoWizardPage6(wxWizard* parent); -}; - -BEGIN_EVENT_TABLE(CampoWizardPage6, CampoWizardPage) - EVT_BUTTON(602, OnDirPick) - EVT_BUTTON(604, OnDirPick) -END_EVENT_TABLE() - -void CampoWizardPage6::OnDirPick(wxCommandEvent& e) -{ - const wxWindowID wiTargetField = e.GetId() - 1; - wxString strPath = Get(wiTargetField); - wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, - wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); - if (dlg.ShowModal() == wxID_OK) - { - strPath = dlg.GetPath(); - Set(wiTargetField, strPath); - } -} - -//metodo per il controllo dell'area dati;se la directory indicata non e' vuota non puoi usarla ne' crearla -bool CampoWizardPage6::ForwardValidate() -{ - //controllo esistenza directory vuota per i programmi in locale - const wxString strPrgLocPath = Get(601); - wxDir dirPrgLocPath(strPrgLocPath); - if (dirPrgLocPath.Exists(Get(601)) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) - return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); - - const wxString strDataPath = Get(603); - wxDir dirDataPath(strDataPath); - if (dirDataPath.Exists(strDataPath) && (dirDataPath.HasFiles() || dirDataPath.HasSubDirs())) - return ErrorBox("La cartella indicata per la creazione dell'area dati non e' vuota! Selezionarne un'altra!"); - - //setta alla pagina riassuntiva i valori della pagina attuale... - GetWizard().SetPrgLocPath(strPrgLocPath); - GetWizard().SetDataPath(strDataPath); - - //...e pure quegli stupidi datidemo che nessuno ha mai installato!! - const bool bInstDemoData = GetBool(605); - GetWizard().SetInstDemoData(bInstDemoData); - - return true; -} - -CampoWizardPage6::CampoWizardPage6(wxWizard* parent) : CampoWizardPage(parent) -{ - wxString strTitle = wxT("Installazione di tipo Standard"); - wxString strBody = wxT("

Digitare nel campo 'Cartella programma' il percorso completo della cartella dove si desidera installare il programma. "); - strBody += wxT("Il percorso di default (consigliato) e' C:\\APPNAME

"); - strBody += wxT("

Digitare nel campo 'Cartella Dati' il percorso completo della cartella dove si desidera installare l'area dati. "); - strBody += wxT("Il percorso di default (consigliato) e' C:\\APPNAME\\dati

"); - strBody += wxT("

Dati dimostrativi: area dati precompilata per installazioni di tipo dimostrativo del funzionamento del software. "); - strBody += wxT("NON vanno caricati nel caso di una normale installazione!

"); - SetHTMLText(strTitle, strBody); - - //griglia per sistemare i campi - wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); - GetSizer()->Add(gbsSizer); - - //prima riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella programmi", 0, 0); - //campo testo - wxString strPath; - strPath = "C:\\"; - strPath += APPNAME; - wxTextCtrl* tcPrgPath = new wxTextCtrl(this, 601, strPath, wxDefaultPosition, wxSize(320,-1)); - gbsSizer->Add(tcPrgPath, wxGBPosition(0, 1)); - //bottone 'sfoglia' - wxButton* bPrgButton = new wxButton(this, 602, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bPrgButton, wxGBPosition(0, 2)); - - //seconda riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella dati", 1, 0); - //campo testo - strPath += "/dati"; - wxTextCtrl* tcDataPath = new wxTextCtrl(this, 603, strPath, wxDefaultPosition, wxSize(320,-1)); - gbsSizer->Add(tcDataPath, wxGBPosition(1, 1)); - //bottone 'sfoglia' - wxButton* bDataButton = new wxButton(this, 604, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bDataButton, wxGBPosition(1, 2)); - - //terza riga della griglia - wxCheckBox* chDataDemo = new wxCheckBox(this, 605, wxT("Carica i dati dimostrativi")); - chDataDemo->SetValue(false); - gbsSizer->Add(chDataDemo, wxGBPosition(2, 1)); -} - -/**********************************************************************************************************/ -// 7 Installazione server -/**********************************************************************************************************/ -class CampoWizardPage7 : public CampoWizardPage -{ - wxRadioBox* m_pRadioBox; - -protected: - DECLARE_EVENT_TABLE(); - virtual bool ForwardValidate(); - void OnDirPick(wxCommandEvent& e); - void OnSrvClick(wxCommandEvent& e); - -public: - CampoWizardPage7(wxWizard* parent); -}; - -BEGIN_EVENT_TABLE(CampoWizardPage7, CampoWizardPage) - EVT_BUTTON(702, OnDirPick) - EVT_BUTTON(704, OnDirPick) - EVT_CHECKBOX(705, OnSrvClick) - EVT_CHECKBOX(707, OnSrvClick) -END_EVENT_TABLE() - -void CampoWizardPage7::OnDirPick(wxCommandEvent& e) -{ - const wxWindowID wiTargetField = e.GetId() - 1; - wxString strPath = Get(wiTargetField); - wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, - wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); - if (dlg.ShowModal() == wxID_OK) - { - strPath = dlg.GetPath(); - Set(wiTargetField, strPath); - } -} - -void CampoWizardPage7::OnSrvClick(wxCommandEvent& e) -{ - //nome del server - wxWindow* pWnd = FindWindowById(e.GetId() + 1); - if (pWnd) - pWnd->Enable(e.IsChecked()); - //tipo installazione server - pWnd = FindWindowById(709); - if (pWnd) - pWnd->Enable(GetBool(705) || GetBool(707)); -} - -bool CampoWizardPage7::ForwardValidate() -{ - //controllo esistenza directory vuota per i programmi in locale - const wxString strPrgLocPath = Get(701); - wxDir dirPrgLocPath(strPrgLocPath); - if (dirPrgLocPath.Exists(strPrgLocPath) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) - return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); - - //controllo della directory dell'area dati: deve essere nuova o vuota affinche' possa essere utilizzata!! - const wxString strDataPath = Get(703); - wxDir dirDataPath(strDataPath); - if (dirDataPath.Exists(strDataPath) && (dirDataPath.HasFiles() || dirDataPath.HasSubDirs())) - return ErrorBox("La cartella indicata per la creazione dell'area dati non e' vuota! Selezionarne un'altra!"); - - //setta alla pagina riassuntiva i valori della pagina attuale... - GetWizard().SetPrgLocPath(strPrgLocPath); - GetWizard().SetDataPath(strDataPath); - //...compresi eventuali stupidi servers! - const bool bInstAuth = GetBool(705); - if (bInstAuth) - { - GetWizard().SetInstUseAuth(bInstAuth); - const wxString strSrvAuth = Get(706); - if (strSrvAuth.IsEmpty()) - return ErrorBox("Specificare il server gestore delle autorizzazioni!"); - GetWizard().SetSrvAuth(strSrvAuth); - } - else - GetWizard().SetSrvAuth(""); - - const bool bInstDict = GetBool(707); - if (bInstDict) - { - GetWizard().SetInstUseDict(bInstDict); - const wxString strSrvDict = Get(708); - if (strSrvDict.IsEmpty()) - return ErrorBox("Specificare il server gestore dei dizionari!"); - GetWizard().SetSrvDict(strSrvDict); - } - else - GetWizard().SetSrvDict(""); - - //..e loro modalita' di esecuzione - if (bInstAuth || bInstDict) - { - GetWizard().SetSrvAutostartMode(m_pRadioBox->GetSelection()); - } - else - GetWizard().SetSrvAutostartMode(-1); - - return true; -} - -CampoWizardPage7::CampoWizardPage7(wxWizard* parent) : CampoWizardPage(parent) -{ - wxString strTitle = wxT("Installazione di tipo Server"); - wxString strBody = wxT("

Digitare nel campo 'Cartella programma' il percorso completo della cartella dove si desidera installare il programma. "); - strBody += wxT("Il percorso consigliato e' C:\\APPNAME

"); - strBody += wxT("

Digitare nel campo 'Cartella dati' il percorso completo della cartella dove si desidera installare l'area dati. "); - strBody += wxT("Il percorso consigliato e' C:\\APPNAME\\dati

"); - strBody += wxT("

Le cartelle del programma e dei dati dovranno essere condivise in modalita' lettura/scrittura agli utenti di sistema e di rete che utilizzeranno il software APPNAME. "); - strBody += wxT("In mancanza di tale condivisione nessun client potra' accedere al server!

"); - strBody += wxT("

Gestore autorizzazioni: e' il software che permette di gestire una chiave di protezione hardware multiutenza condivisa in rete. "); - strBody += wxT("Installando tale software e' necessario specificare il computer su cui e' montata la chiave di protezione multiutenza."); - strBody += wxT("Viene di default proposto il computer su cui si sta eseguendo l'installazione di APPNAME (localhost).

"); - strBody += wxT("

Gestore dizionari: e' il software che permette di utilizzare APPNAME in lingue diverse dall'italiano. "); - strBody += wxT("Per l'installazione di questo software viene di default proposto il computer su cui si sta eseguendo l'installazione di APPNAME (localhost).

"); - strBody += wxT("

Modalita' di esecuzione programmi di gestione
"); - strBody += wxT("Come servizi: i programmi di gestione vengono eseguiti come servizi di Windows; questa e' la modalita' consigliata ed e' obbligatoria in caso di installazione con Windows 2003
"); - strBody += wxT("Nel menu esecuzione automatica: i programmi di gestione vengono eseguiti automaticamente al primo accesso di un utente al server di APPNAME; usare questa modalita' solo nell'impossibilita' di utilizzare la precedente

"); - - SetHTMLText(strTitle, strBody); - - //griglia per sistemare i campi - wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); - GetSizer()->Add(gbsSizer); - - //prima riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella programmi", 0, 0); - //campo testo - wxString strPath; - strPath = "C:\\"; - strPath += APPNAME; - wxTextCtrl* tcPrgPath = new wxTextCtrl(this, 701, strPath, wxDefaultPosition, wxSize(320,-1)); - gbsSizer->Add(tcPrgPath, wxGBPosition(0, 1)); - //bottone 'sfoglia' - wxButton* bPrgButton = new wxButton(this, 702, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bPrgButton, wxGBPosition(0, 2)); - - //seconda riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella dati", 1, 0); - //campo testo - strPath += "/dati"; - wxTextCtrl* tcDataPath = new wxTextCtrl(this, 703, strPath, wxDefaultPosition, wxSize(320,-1)); - gbsSizer->Add(tcDataPath, wxGBPosition(1, 1)); - //bottone 'sfoglia' - wxButton* bDataButton = new wxButton(this, 704, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bDataButton, wxGBPosition(1, 2)); - - //terza riga della griglia - //check installa authoriz - wxCheckBox* chAuthoriz = new wxCheckBox(this, 705, wxT("Installa il gestore delle autorizzazioni")); - chAuthoriz->SetValue(false); - gbsSizer->Add(chAuthoriz, wxGBPosition(2, 1)); - //server authoriz - wxTextCtrl* tcAuthoriz = new wxTextCtrl(this, 706, "localhost", wxDefaultPosition, wxSize(96,-1)); - tcAuthoriz->Disable(); - gbsSizer->Add(tcAuthoriz, wxGBPosition(2, 2)); - - //quarta riga della griglia - //check installa diction - wxCheckBox* chDictionary = new wxCheckBox(this, 707, wxT("Installa il gestore dei dizionari")); - chDictionary->SetValue(false); - gbsSizer->Add(chDictionary, wxGBPosition(3, 1)); - //server diction - wxTextCtrl* tcDiction = new wxTextCtrl(this, 708, "localhost", wxDefaultPosition, wxSize(96,-1)); - tcDiction->Disable(); - gbsSizer->Add(tcDiction, wxGBPosition(3, 2)); - - //quinta riga della griglia - //radiobutton con i tipi di installazione - wxArrayString asInstType; - asInstType.Add("Come servizi (consigliato)"); - asInstType.Add("Nel menu esecuzione automatica"); - - m_pRadioBox = new wxRadioBox(this, 709, "Modalita' di esecuzione gestori", wxDefaultPosition, - wxDefaultSize, asInstType, 0, wxRA_SPECIFY_COLS); - //setta il default a "come servizio" - m_pRadioBox->SetSelection(0); - m_pRadioBox->Disable(); - gbsSizer->Add(m_pRadioBox, wxGBPosition(4, 1)); - -} - - -/**********************************************************************************************************/ -// 8 Installazione client -/**********************************************************************************************************/ -class CampoWizardPage8 : public CampoWizardPage -{ -protected: - DECLARE_EVENT_TABLE(); - virtual bool ForwardValidate(); - virtual bool TransferDataToWindow(); - void OnDirPick(wxCommandEvent& e); - void OnSrvClick(wxCommandEvent& e); - -public: - CampoWizardPage8(wxWizard* parent); -}; - -BEGIN_EVENT_TABLE(CampoWizardPage8, CampoWizardPage) - EVT_BUTTON(802, OnDirPick) - EVT_BUTTON(804, OnDirPick) - EVT_BUTTON(806, OnDirPick) - EVT_CHECKBOX(807, OnSrvClick) -END_EVENT_TABLE() - -void CampoWizardPage8::OnDirPick(wxCommandEvent& e) -{ - const wxWindowID wiTargetField = e.GetId() - 1; - wxString strPath = Get(wiTargetField); - wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, - wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); - if (dlg.ShowModal() == wxID_OK) - { - strPath = dlg.GetPath(); - Set(wiTargetField, strPath); - } -} - -void CampoWizardPage8::OnSrvClick(wxCommandEvent& e) -{ - wxWindow* pWnd = FindWindowById(e.GetId() + 1); - if (pWnd) - pWnd->Enable(e.IsChecked()); -} - -bool CampoWizardPage8::TransferDataToWindow() -{ - return true; -} - -bool CampoWizardPage8::ForwardValidate() -{ - //controllo esistenza directory vuota per i programmi in locale - const wxString strPrgLocPath = Get(801); - wxDir dirPrgLocPath(strPrgLocPath); - if (dirPrgLocPath.Exists(strPrgLocPath) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) - return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); - - //controllo esistenza directory e programmi sul server - const wxString strPrgNetPath = Get(803); - wxDir dirPrgPath(strPrgNetPath); - bool ok_prg = false; - //deve esistere non vuota, e contenere almeno campo.ini,install.ini,campo.aut,ba0.exe - if (dirPrgPath.Exists(strPrgNetPath) && dirPrgPath.HasFiles() && dirPrgPath.HasSubDirs()) - { - wxFileName fnFileToCheck(strPrgNetPath, "campo"); - fnFileToCheck.SetExt("ini"); - if (fnFileToCheck.FileExists()) - { - fnFileToCheck.SetName("install"); - fnFileToCheck.SetExt("ini"); - if (fnFileToCheck.FileExists()) - { - fnFileToCheck.SetName("campo"); - fnFileToCheck.SetExt("aut"); - if (fnFileToCheck.FileExists()) - { - fnFileToCheck.SetName("ba0"); - fnFileToCheck.SetExt("exe"); - if (fnFileToCheck.FileExists()) - { - ok_prg = true; - } - } - } - } - } - if (!ok_prg) - return ErrorBox("La cartella selezionata come origine dei programmi NON e' valida!"); - - //controllo esistenza dati sul server - wxString strDataPath = Get(805); - if (!CheckDataDir(strDataPath)) - return ErrorBox("La cartella selezionata come area dati NON e' valida!"); - - //setta alla pagina riassuntiva i valori della pagina attuale - GetWizard().SetPrgLocPath(strPrgLocPath); - GetWizard().SetPrgNetPath(strPrgNetPath); - GetWizard().SetDataPath(strDataPath); - - //...compresi eventuali stupidi servers! - const wxString strSrvDict = Get(807); - //se c'e' un nome di dictionary server e non lo trova si incazza - if (!strSrvDict.IsEmpty() && !DictionaryLogin(strSrvDict)) - { - wxString strMsg; - strMsg << "Impossibile contattare il server " << strSrvDict << " per la gestione dei dizionari!"; - return ErrorBox(strMsg); - } - else - GetWizard().SetSrvDict(strSrvDict); - - return true; -} - -CampoWizardPage8::CampoWizardPage8(wxWizard* parent) : CampoWizardPage(parent) -{ - wxString strTitle = wxT("Installazione di tipo Client"); - wxString strBody = wxT("

Digitare nel campo 'Cartella locale programma' il percorso completo della cartella dove si desidera installare il programma. "); - strBody += wxT("Il percorso consigliato e' C:\\APPNAME

"); - strBody += wxT("

Digitare nel campo 'Cartella remota origine programmi' il percorso completo della cartella di rete dove sono i files origine del programma. "); - strBody += wxT("E' la cartella di programmi condivisa dal server precedentemente installato.

"); - strBody += wxT("

Digitare nel campo 'Cartella remota dati da utilizzare' il percorso completo della cartella di rete dove sono i dati. "); - strBody += wxT("E' la cartella dei dati condivisa dal server precedentemente installato.

"); - strBody += wxT("

Gestore dizionari: e' il computer gestore dei dizionari di APPNAME in lingue diverse dall'italiano. Generalmente e' il computer agente da server di APPNAME in rete. "); - strBody += wxT("Premere il bottone Cerca per attivare la ricerca automatica di tale computer. Qualora tale ricerca fallisse digitare il nome del computer gestore dei dizionari

"); - - SetHTMLText(strTitle, strBody); - - //griglia per sistemare i campi - wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); - GetSizer()->Add(gbsSizer); - - //prima riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella locale programma", 0, 0); - //campo testo - wxString strPath; - strPath = "C:\\"; - strPath += APPNAME; - wxTextCtrl* tcDestPrgPath = new wxTextCtrl(this, 801, strPath, wxDefaultPosition, wxSize(256,-1)); - gbsSizer->Add(tcDestPrgPath, wxGBPosition(0, 1)); - //bottone 'sfoglia' - wxButton* bDestPrgButton = new wxButton(this, 802, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bDestPrgButton, wxGBPosition(0, 2)); - - //seconda riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella remota origine programmi", 1, 0); - //campo testo - strPath = "Z:\\"; - strPath += APPNAME; - wxTextCtrl* tcSrcPrgPath = new wxTextCtrl(this, 803, strPath, wxDefaultPosition, wxSize(256,-1)); - gbsSizer->Add(tcSrcPrgPath, wxGBPosition(1, 1)); - //bottone 'sfoglia' - wxButton* bSrcPrgButton = new wxButton(this, 804, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bSrcPrgButton, wxGBPosition(1, 2)); - - //terza riga della griglia - //prompt - AddLabel(gbsSizer, "Cartella remota dati da utilizzare", 2, 0); - //campo testo - strPath += "/dati"; - wxTextCtrl* tcDataPath = new wxTextCtrl(this, 805, strPath, wxDefaultPosition, wxSize(256,-1)); - gbsSizer->Add(tcDataPath, wxGBPosition(2, 1)); - //bottone 'sfoglia' - wxButton* bDataButton = new wxButton(this, 806, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bDataButton, wxGBPosition(2, 2)); - - //terza riga della griglia - //Server dizionari label - AddLabel(gbsSizer, "Nome o indirizzo IP del server dei dizionari", 3, 0); - //nome Server dizionari - wxTextCtrl* tcSrvName = new wxTextCtrl(this, 807, "", wxDefaultPosition, wxSize(256,-1)); - gbsSizer->Add(tcSrvName, wxGBPosition(3, 1)); - //bottone Cerca - wxButton* bSrvButton = new wxButton(this, 808, wxT("Cerca"), wxDefaultPosition, wxSize(48, -1)); - gbsSizer->Add(bSrvButton, wxGBPosition(3, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); - -} - - -/**********************************************************************************************************/ -// 9 pagina con la creazione icona sul desktop e lanciatore del lurch -/**********************************************************************************************************/ -class CampoWizardPage9 : public CampoWizardPage -{ -protected: - virtual bool TransferDataToWindow(); - virtual bool ForwardValidate(); - -public: - CampoWizardPage9(wxWizard* parent); -}; - -bool CampoWizardPage9::TransferDataToWindow() -{ - return Set(901, GetWizard().GetDesktopShortcut()); -} - -bool CampoWizardPage9::ForwardValidate() -{ - const bool bDesktopShortcut = GetBool(901); - GetWizard().SetDesktopShortcut(bDesktopShortcut); - return true; -} - -CampoWizardPage9::CampoWizardPage9(wxWizard* parent) : CampoWizardPage(parent) -{ - wxString strTitle = wxT("Collegamenti"); - wxString strBody; - strBody += wxT("

E' possibile creare l'icona di APPNAME sul desktop

"); - - SetHTMLText(strTitle, strBody); - - wxCheckBox* pIcon = new wxCheckBox(this, 901, wxT("Creare l'icona sul desktop")); - GetSizer()->Add(pIcon, 0, wxALL, 0); - - GetSizer()->AddSpacer(5); - - //wxCheckBox* pLink = new wxCheckBox(this, 1002, wxT("Associare i file .caz al programma")); - //pLink->SetValue(true); - //GetSizer()->Add(pLink, 0, wxALL, 0); -} - - -/**********************************************************************************************************/ -// 10 pagina con la selezione di destinazione -/**********************************************************************************************************/ -class CampoWizardPage10 : public CampoWizardPage -{ - unsigned int _uInstallType; - wxString _strInstallType; - wxString _strPrgLocPath; - wxString _strPrgNetPath; - wxString _strDataPath; - wxString _strSrvAuth; - wxString _strSrvDict; - unsigned int _iSrvAutostartMode; - bool _bInstDemoData; - bool _bInstDemoVersion; - bool _bDesktopShortcut; - -protected: - virtual bool TransferDataToWindow(); - -public: - CampoWizardPage10(wxWizard* parent); -}; - -bool CampoWizardPage10::TransferDataToWindow() -{ - CampoWizard& cw = GetWizard(); - - _uInstallType = cw.GetInstallationType(); - switch (_uInstallType) - { - case 1: //server - _strInstallType = "Server"; - _strPrgLocPath = cw.GetPrgLocPath(); - _strDataPath = cw.GetDataPath(); - _strSrvAuth = cw.GetSrvAuth(); - _strSrvDict = cw.GetSrvDict(); - if (!_strSrvAuth.IsEmpty() || !_strSrvDict.IsEmpty()) - _iSrvAutostartMode = cw.GetSrvAutostartMode(); - break; - case 2: //client - _strInstallType = "Client"; - _strPrgLocPath = cw.GetPrgLocPath(); - _strPrgNetPath = cw.GetPrgNetPath(); - _strDataPath = cw.GetDataPath(); - _strSrvAuth = cw.GetSrvAuth(); - _strSrvDict = cw.GetSrvDict(); - break; - case 3: //aggiornamento - _strInstallType = ""; - _strPrgLocPath = cw.GetDestinationPath(); - _strDataPath = cw.GetDataPath(); - _strSrvAuth = cw.GetSrvAuth(); - _strSrvDict = cw.GetSrvDict(); - break; - default: //standard - if (cw.GetInstDemoVersion()) - { - _strInstallType = "DEMO"; - _strPrgLocPath = "c:/campodemo"; - } - else - { - _strInstallType = "Standard"; - _strPrgLocPath = cw.GetPrgLocPath(); - _strDataPath = cw.GetDataPath(); - _bInstDemoData = cw.GetInstDemoData(); - } - break; - } - //questo vale per tutti - _bDesktopShortcut = cw.GetDesktopShortcut(); - - //se installazione o aggiornamento cambia sia il titolo che i contenuti - wxString strTitle; - wxString strBody; - - //Aggiornamento - if (_uInstallType == 3) - { - strTitle += wxT("AGGIORNAMENTO: riepilogo configurazione"); - - strBody = wxT("

Cartella programma da aggiornare: "); - strBody += wxT(Bold(_strPrgLocPath) + "

"); - strBody += wxT("

Cartella dati in uso: "); - strBody += wxT(Bold(_strDataPath) + "

"); - } - else //Installazione - { - strTitle += wxT("INSTALLAZIONE: riepilogo configurazione"); - //DEMO (aaarrgh!) - if (cw.GetInstDemoVersion()) - { - strBody = wxT("

Tipo installazione selezionata: "); - strBody += wxT("DEMO

"); - strBody += wxT("

Cartella dove installare il programma: "); - strBody += wxT("C:/campodemo

"); - } - else //tutte le altre - { - strBody = wxT("

Tipo installazione selezionata: "); - strBody += wxT(Bold(_strInstallType) + "

"); - strBody += wxT("

Cartella dove installare il programma: "); - strBody += wxT(Bold(_strPrgLocPath) + "

"); - if (_uInstallType == 2) - { - strBody += wxT("

Cartella di origine dei files del programma: "); - strBody += wxT(Bold(_strPrgNetPath) + "

"); - } - strBody += wxT("

Cartella dati da creare: "); - strBody += wxT(Bold(_strDataPath) + "

"); - } - } - //installazione servers... - if (!_strSrvAuth.IsEmpty()) - { - strBody += wxT("

Computer gestore delle autorizzazioni: "); - strBody += wxT(Bold(_strSrvAuth) + "

"); - } - if (!_strSrvDict.IsEmpty()) - { - strBody += wxT("

Computer gestore dei dizionari: "); - strBody += wxT(Bold(_strSrvDict) + "

"); - } - //...e loro modalita' di lancio (solo installazione server!) - if (_uInstallType == 1 && (!_strSrvAuth.IsEmpty() || !_strSrvDict.IsEmpty()) && _iSrvAutostartMode >= 0) - { - strBody += wxT("

Modalita' di esecuzione dei programmi di gestione: "); - if (_iSrvAutostartMode == 0) - strBody += wxT(Bold("Come servizi") + "

"); - else - strBody += wxT(Bold("Nel menu esecuzione automatica") + "

"); - } - - //installazione dati demo (solo in postazione singola) - if (_uInstallType == 0 && _bInstDemoData) - strBody += wxT("

Installazione area dati dimostrativa

"); - - if (_bDesktopShortcut) - strBody += wxT("

Creazione dell' icona sul desktop

"); - - SetHTMLText(strTitle, strBody); - - return true; -} - -CampoWizardPage10::CampoWizardPage10(wxWizard* parent) : CampoWizardPage(parent) -{ -} - - -/////////////////////////////////////////////////////////// -// CampoWizard -/////////////////////////////////////////////////////////// -//la dichiarazione della classe e' prima in quanto alcuni suoi metodi sono usati da altre classi scritte piu' su -BEGIN_EVENT_TABLE(CampoWizard, wxWizard) - EVT_BUTTON(wxID_FORWARD, CampoWizard::OnNext) -END_EVENT_TABLE() - -void CampoWizard::OnNext(wxCommandEvent& e) -{ - CampoWizardPage* p = (CampoWizardPage*)GetCurrentPage(); - if (p->ForwardValidate()) - e.Skip(); -} - -bool CampoWizard::Run() -{ return RunWizard(m_pPage[0]); } - -wxString CampoWizard::Get(wxWindowID id) const -{ - wxWindow* pWnd = FindWindowById(id); - return pWnd ? pWnd->GetLabel() : wxEmptyString; -} - -int CampoWizard::GetSelection(wxWindowID id) const -{ - int n = -1; - wxWindow* pWnd = FindWindowById(id); - if (pWnd) - { - wxChoice* pList = (wxChoice*)pWnd; - n = pList->GetSelection(); - } - return n; -} - -bool CampoWizard::GetBool(wxWindowID id) const -{ - wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); - return pWnd != NULL && pWnd->IsChecked(); -} - - -void CampoWizard::Set(wxWindowID id, const wxString str) -{ - wxWindow* pWnd = FindWindowById(id); - if (pWnd != NULL) - pWnd->SetLabel(str); -} - -//lunga litania di metodi per gettare e settare i valori tra le pagine -void CampoWizard::SetDestinationPath(const wxString& path) -{ - _strDestinationPath = path; - //Se il path di destinazione e' vuoto -> nuova installazione, senno' e' un aggiornamento della installazione.. - //..che sta in _strDestinationPath - if (_strDestinationPath.IsEmpty()) - { - if (GetInstDemoVersion()) - wxWizardPageSimple::Chain(m_pPage[2], m_pPage[8]); //installazione DEMO - else - wxWizardPageSimple::Chain(m_pPage[3], m_pPage[4]); //installazione nuova normale - } - else - { - wxWizardPageSimple::Chain(m_pPage[3], m_pPage[8]); //aggiornamento - } -} - -const wxString& CampoWizard::GetDestinationPath() const -{ - return _strDestinationPath; -} - -void CampoWizard::SetInstallationType(const unsigned int type) -{ - _uInstallationType = type; - //in base al tipo di installazione spara l'utente alla pagina corretta - switch (_uInstallationType) - { - case 1: //server - wxWizardPageSimple::Chain(m_pPage[4], m_pPage[6]); //manda l'utente alla pagina server - wxWizardPageSimple::Chain(m_pPage[6], m_pPage[8]); //dal server alla pagina riassuntiva - break; - case 2: //client - wxWizardPageSimple::Chain(m_pPage[4], m_pPage[7]); //manda l'utente alla pagina client - wxWizardPageSimple::Chain(m_pPage[7], m_pPage[8]); //dal client alla pagina riassuntiva - break; - case 3: //aggiornamento installazione precedente - wxWizardPageSimple::Chain(m_pPage[3], m_pPage[8]); //manda l'utente alla pagina riassuntiva - break; - default: //standard - //if demo - if (GetInstDemoVersion()) - { - wxWizardPageSimple::Chain(m_pPage[2], m_pPage[8]); //manda l'utente alla pagina riassuntiva senza controllo chiave - } - else - { - wxWizardPageSimple::Chain(m_pPage[4], m_pPage[5]); //manda l'utente alla pagina standard - wxWizardPageSimple::Chain(m_pPage[5], m_pPage[8]); //dalla standard alla pagina riassuntiva - } - break; - } -} - -const unsigned int CampoWizard::GetInstallationType() const -{ - return _uInstallationType; -} - -void CampoWizard::SetPrgLocPath(const wxString& strPrgLocPath) -{ - _strPrgLocPath = strPrgLocPath; -} - -const unsigned int CampoWizard::GetDongleType() const -{ - return _uDongleType; -} - -void CampoWizard::SetDongleType(const unsigned int uType) -{ - _uDongleType = uType; -} - -const wxString& CampoWizard::GetPrgLocPath() const -{ - return _strPrgLocPath; -} - -void CampoWizard::SetPrgNetPath(const wxString& strPrgNetPath) -{ - _strPrgNetPath = strPrgNetPath; -} - -const wxString& CampoWizard::GetPrgNetPath() const -{ - return _strPrgNetPath; -} - -void CampoWizard::SetDataPath(const wxString& strDataPath) -{ - _strDataPath = strDataPath; -} - -const wxString& CampoWizard::GetDataPath() const -{ - return _strDataPath; -} - -void CampoWizard::SetInstUseAuth(const bool bInstUseAuth) -{ - _bInstUseAuth = bInstUseAuth; -} - -const bool CampoWizard::GetInstUseAuth() const -{ - return _bInstUseAuth; -} - -void CampoWizard::SetSrvAuth(const wxString& strSrvAuth) -{ - _strSrvAuth = strSrvAuth; -} - -const wxString& CampoWizard::GetSrvAuth() const -{ - return _strSrvAuth; -} - -void CampoWizard::SetInstUseDict(const bool bInstUseDict) -{ - _bInstUseDict = bInstUseDict; -} - -const bool CampoWizard::GetInstUseDict() const -{ - return _bInstUseDict; -} - -void CampoWizard::SetSrvDict(const wxString& strSrvDict) -{ - _strSrvDict = strSrvDict; -} - -const wxString& CampoWizard::GetSrvDict() const -{ - return _strSrvDict; -} - -void CampoWizard::SetSrvAutostartMode(const int iSrvAutostartMode) -{ - _iSrvAutostartMode = iSrvAutostartMode; -} - -const int CampoWizard::GetSrvAutostartMode() const -{ - return _iSrvAutostartMode; -} - -void CampoWizard::SetInstDemoData(const bool bInstDemoData) -{ - _bInstDemoData = bInstDemoData; -} - -const bool CampoWizard::GetInstDemoData() const -{ - return _bInstDemoData; -} - -void CampoWizard::SetInstDemoVersion(const bool bInstDemoVersion) -{ - _bInstDemoVersion = bInstDemoVersion; -} - -const bool CampoWizard::GetInstDemoVersion() const -{ - return _bInstDemoVersion; -} - -void CampoWizard::SetDesktopShortcut(const bool bDesktopShortcut) -{ - _bDesktopShortcut = bDesktopShortcut; -} - -const bool CampoWizard::GetDesktopShortcut() const -{ - return _bDesktopShortcut; -} -//...fine litania metodi di passaggio valori tra le finestre - - - -CampoWizard::CampoWizard(wxWindow* pParent) -{ - //resettatore dei booleans (che senno' prendono valore casuale ad ogni esecuzione) - _bInstDemoData = false; //installa dati dimostrativi - _bInstDemoVersion = false; //installa versione demo - _bInstUseAuth = false; //installa/usa server authoriz - _bInstUseDict = false; //installa/usa server diction - _bDesktopShortcut = false; //creazione link sul desktop - - wxBitmap bitmap; - wxString strName = wxT("logo.gif"); - bitmap.LoadFile(strName, wxBITMAP_TYPE_GIF); - - Create(pParent, wxID_ANY, APPNAME, bitmap); - - m_pPage[0] = new CampoWizardPage1(this); //benvenuto con logo - m_pPage[1] = new CampoWizardPage2(this); //licenza - m_pPage[2] = new CampoWizardPage3(this); //scelta aggiornamento/tipo installazione - m_pPage[3] = new CampoWizardPage4(this); //test ed installazione chiavi - m_pPage[4] = new CampoWizardPage5(this); //selezione tipo installazione - m_pPage[5] = new CampoWizardPage6(this); //installazione standard - m_pPage[6] = new CampoWizardPage7(this); //installazione server - m_pPage[7] = new CampoWizardPage8(this); //installazione client - m_pPage[8] = new CampoWizardPage9(this); //creazione icona sul desktop e in start/programmi/campo - m_pPage[9] = new CampoWizardPage10(this); //riassuntino installazione - - - for (int p = 1; p < m_nPages; p++) - wxWizardPageSimple::Chain(m_pPage[p-1], m_pPage[p]); - - GetPageAreaSizer()->Add(m_pPage[0]); - - //bottoni di navigazione - Set(wxID_FORWARD, "Avanti"); - Set(wxID_BACKWARD, "Indietro"); - Set(wxID_CANCEL, "Annulla"); -} - +#include "key.h" +#include "wizard.h" +#include "utils.h" /////////////////////////////////////////////////////////// // CampoFrame diff --git a/setup/setupkey.cpp b/setup/key.cpp similarity index 96% rename from setup/setupkey.cpp rename to setup/key.cpp index da4f8e4da..6827a78c4 100755 --- a/setup/setupkey.cpp +++ b/setup/key.cpp @@ -1,7 +1,8 @@ #include "wxinc.h" #include -#include "setupkey.h" +#include "key.h" +#include "utils.h" extern "C" { @@ -12,18 +13,6 @@ extern "C" /////////////////////////////// // Utilities // /////////////////////////////// -bool ErrorBox(const wxString str) -{ - wxMessageBox(str, APPNAME, wxOK | wxICON_ERROR); - return false; -} - -bool WarningBox(const wxString str) -{ - wxMessageBox(str, APPNAME, wxOK | wxICON_EXCLAMATION); - return false; -} - static int ThisYear() { int anno = 2006; diff --git a/setup/setupkey.h b/setup/key.h similarity index 71% rename from setup/setupkey.h rename to setup/key.h index 9206a4ed2..79001a88d 100755 --- a/setup/setupkey.h +++ b/setup/key.h @@ -1,8 +1,5 @@ -#ifndef __SETUPKEY_H -#define __SETUPKEY_H - -bool ErrorBox(const wxString str); -bool WarningBox(const wxString str); +#ifndef __KEY_H +#define __KEY_H bool HardlockGarble(unsigned short* data); unsigned short HardlockLogin(int& year); diff --git a/setup/utils.cpp b/setup/utils.cpp new file mode 100755 index 000000000..ce267f353 --- /dev/null +++ b/setup/utils.cpp @@ -0,0 +1,75 @@ +#include "wxinc.h" +#include "utils.h" + +#ifdef WIN32 +#include +#endif + +wxString GetDefaultDestination() +{ + wxString strDest; +//scelta della directory di installazione di default +#ifdef WIN32 + TCHAR strFolder[MAX_PATH]; + ::SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, strFolder); + strDest = strFolder; +#endif + + if (strDest.IsEmpty()) + { + // Forse è la cartella base dove è installato Word? + wxFileType* pDoc = wxTheMimeTypesManager->GetFileTypeFromExtension(wxT("doc")); + if (pDoc != NULL) + { + wxFileName strFilename = pDoc->GetOpenCommand(wxT("pippo.doc")); + while (strFilename.GetDirCount() > 1) + strFilename.RemoveLastDir(); + strDest = strFilename.GetPath().After('"'); + if (strDest.StartsWith(wxT("C\\"))) + strDest = wxT("C:") + strDest.Mid(1); + } + } + + return strDest; +} + +bool ErrorBox(const wxString str) +{ + wxMessageBox(str, APPNAME, wxOK | wxICON_ERROR); + return false; +} + +bool WarningBox(const wxString str) +{ + wxMessageBox(str, APPNAME, wxOK | wxICON_EXCLAMATION); + return false; +} + +CampoIniFile::CampoIniFile(const wxString strIniPath, const wxString strParagraph) + : wxFileConfig (wxEmptyString, wxEmptyString, strIniPath, wxEmptyString, + wxCONFIG_USE_LOCAL_FILE|wxCONFIG_USE_NO_ESCAPE_CHARACTERS) +{ + if (!strParagraph.IsEmpty()) + SetPath(strParagraph); +} + +wxString CampoIniFile::Get(const wxString strVariable) const +{ + return Read(strVariable); +} + +bool CampoIniFile::GetBool(const wxString strVariable) const +{ + wxString strBool = Get(strVariable); + return strBool == "X" || strBool == "Y"; +} + +bool CampoIniFile::Set(const wxString strVariable, const wxString strValue)//, const wxString strParagraph) const +{ + return Write(strVariable, strValue); +} + +bool CampoIniFile::Set(const wxString strVariable, const int uValue)//, const wxString strParagraph) const +{ + return Write(strVariable, uValue); +} diff --git a/setup/utils.h b/setup/utils.h new file mode 100755 index 000000000..51c52b222 --- /dev/null +++ b/setup/utils.h @@ -0,0 +1,21 @@ +#ifndef __UTILS_H +#define __UTILS_H + +bool ErrorBox(const wxString str); +bool WarningBox(const wxString str); + +//////////////////////////////////////////////////////////////////////////////////////////// +//Classe per la gestione dei files di configurazione tipo campo.ini +class CampoIniFile : public wxFileConfig +{ +protected: +public: + wxString Get(const wxString strVariable) const; + bool GetBool(const wxString strVariable) const; + bool Set(const wxString strVariable, const wxString strValue);//, const wxString strParagraph) const; + bool Set(const wxString strVariable, const int uValue); + + CampoIniFile(const wxString strIniPath, wxString strValue); +}; + +#endif \ No newline at end of file diff --git a/setup/wizard.cpp b/setup/wizard.cpp new file mode 100755 index 000000000..7d5f6f3f2 --- /dev/null +++ b/setup/wizard.cpp @@ -0,0 +1,1648 @@ +#include "wxinc.h" + +#include "key.h" +#include "wizard.h" +#include "utils.h" + +#define HGAP 4 +#define VGAP 2 + + +//////////////////////////////////////////////////////////////////////////////////////////// +//Campo wizard page (pagina generica del programma, di cui saranno figlie le singole pagine) +class CampoWizardPage : public wxWizardPageSimple +{ + wxHtmlWindow* m_pText; + +protected: + CampoWizard& GetWizard() const {return *(CampoWizard*)GetParent();} + void SetHTMLText(const wxString strTitle, const wxString strBody); + void SetHTMLPage(const wxString strFile); + wxString Bold(const wxString strStr) const; + 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; + +public: + virtual bool ForwardValidate() { return true; } + wxString Get(wxWindowID id) const; + bool GetBool(wxWindowID id) const; + bool Set(wxWindowID id, const wxString& str); + bool Set(wxWindowID id, const bool bul); + int GetSelection(wxWindowID id) const; + + CampoWizardPage(wxWizard* parent); +}; + +wxString CampoWizardPage::Get(wxWindowID id) const +{ + wxWindow* pWnd = FindWindowById(id); + return pWnd ? pWnd->GetLabel() : wxEmptyString; +} + +bool CampoWizardPage::GetBool(wxWindowID id) const +{ + wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); + return pWnd != NULL && pWnd->IsChecked(); +} + +bool CampoWizardPage::Set(wxWindowID id, const wxString& str) +{ + wxWindow* pWnd = FindWindowById(id); + if (pWnd) + pWnd->SetLabel(str); + return (pWnd != NULL); +} + +bool CampoWizardPage::Set(wxWindowID id, const bool bul) +{ + wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); + if (pWnd) + pWnd->SetValue(bul); + return (pWnd != NULL); +} + +int CampoWizardPage::GetSelection(wxWindowID id) const +{ + int n = -1; + wxWindow* pWnd = FindWindowById(id); + if (pWnd) + { + wxChoice* pList = (wxChoice*)pWnd; + n = pList->GetSelection(); + } + return n; +} + +void CampoWizardPage::SetHTMLPage(const wxString strFile) +{ + m_pText->LoadPage(strFile); +} + +//parte html della finestra standard +void CampoWizardPage::SetHTMLText(wxString strTitle, wxString strBody) +{ + wxString strAppName = wxT(""); strAppName += Bold(APPNAME); strAppName += wxT(""); + strTitle.Replace(wxT("APPNAME"), strAppName); + strBody.Replace(wxT("APPNAME"), strAppName); + + wxString str; + str += wxT(""); + str += wxT("

"); str += strTitle; str += wxT("

"); + str += wxT("
"); + str += wxT("
"); str += strBody; str += wxT("
"); + str += wxT(""); + + m_pText->SetPage(str); +} + +wxString CampoWizardPage::Bold(const wxString strStr) const +{ + wxString strBold; + strBold << "" << strStr << ""; + return strBold; +} + +//metodo per aggiungere i prompt agli oggetti contenuti nelle GridSize e similia +void CampoWizardPage::AddLabel(wxSizer* pSizer, const wxChar* label) +{ + pSizer->Add(new wxStaticText(this, wxID_ANY, label), 0, wxALL|wxALIGN_CENTER_VERTICAL); +} + +void CampoWizardPage::AddLabel(wxGridBagSizer* pSizer, const wxChar* label, unsigned int row, unsigned int column) +{ + pSizer->Add(new wxStaticText(this, wxID_ANY, label), wxGBPosition(row, column)); +} + +//metodo per il controllo della validita' di un'area dati +bool CampoWizardPage::CheckDataDir(wxString& strDataPath) const +{ + wxDir dirDataPath(strDataPath); + bool ok_data = false; + //deve esistere non vuota, e contenere la sottodirectory "com" con i dati comuni + if (dirDataPath.Exists(strDataPath) && dirDataPath.HasSubDirs("com")) + { + strDataPath << "/com"; + wxFileName fnFileToCheck(strDataPath, "tabcom"); + fnFileToCheck.SetExt("dbf"); + if (fnFileToCheck.FileExists()) + ok_data = true; + } + return ok_data; +} + +//costruttore della finestra standard +CampoWizardPage::CampoWizardPage(wxWizard* parent) + : wxWizardPageSimple(parent) +{ + wxBoxSizer* pSizer = new wxBoxSizer(wxVERTICAL); + m_pText = new wxHtmlWindow(this, 100, wxDefaultPosition, wxSize(512, 312)); + pSizer->Add(m_pText, 0, wxALL, 0); + pSizer->AddSpacer(5); + SetSizer(pSizer); +} +/**********************************************************************************************************/ +/* 1 Pagina di benvenuto */ +/**********************************************************************************************************/ +class CampoWizardPage1 : public CampoWizardPage +{ +public: + CampoWizardPage1(wxWizard* parent); +}; + +CampoWizardPage1::CampoWizardPage1(wxWizard* parent) : CampoWizardPage(parent) +{ + //contenuto della prima schermata (pagina benvenuto) + wxString strTitle = wxT("Benvenuti in APPNAME"); + wxString strBody = wxT("

Questo programma vi guiderà passo a passo nell'installazione / aggiornamento del software.

"); + strBody += wxT("

Leggere attentamente le istruzioni che saranno visualizzate nelle finestre di questo programma di installazione!

"); + strBody += wxT("

Prima di proseguire con l'installazione / aggiornamento assicurarsi di avere effettuato il login a Windows con un utente di tipo 'Amministratore' di sistema.

"); + strBody += wxT("

In caso si desideri aggiornare una postazione tipo server di APPNAME su cui sia attivo il gestore dei servizi di APPNAME, arrestare prima tale gestore dei servizi.

"); + SetHTMLText(strTitle, strBody); +} + + +/**********************************************************************************************************/ +// 2 Pagina con Accetta / Rifiuta la licenza +//*********************************************************************************************************/ +class CampoWizardPage2 : public CampoWizardPage +{ +protected: + virtual bool ForwardValidate(); + +public: + CampoWizardPage2(wxWizard* parent); +}; + +bool CampoWizardPage2::ForwardValidate() +{ + if (GetSelection(201) == 1) + return ErrorBox("Impossibile proseguire se non si accetta la licenza sul software!!"); + + return true; +} + +CampoWizardPage2::CampoWizardPage2(wxWizard* parent) : CampoWizardPage(parent) +{ + SetHTMLPage("licenza.htm"); + + //radiobutton Accetta / Rifiuta + wxArrayString asAccRef; + asAccRef.Add("Accetta"); + asAccRef.Add("Rifiuta"); + wxRadioBox* radio_box = new wxRadioBox(this, 201, "Selezionare 'Accetta' per proseguire con l'installazione, 'Rifiuta' per terminare l'installazione", wxDefaultPosition, + wxDefaultSize, asAccRef, 0, wxRA_SPECIFY_COLS); + + radio_box->SetSelection(1); + GetSizer()->Add(radio_box); +} + + +/**********************************************************************************************************/ +/* 3 Pagina con la scelta di Aggiornamento / Tipo Installazione */ +/**********************************************************************************************************/ +class CampoWizardPage3 : public CampoWizardPage +{ + wxRadioBox* m_pRadioBox; + +protected: + virtual bool ForwardValidate(); + bool LocalDongleTest() const; + +public: + CampoWizardPage3(wxWizard* parent); +}; + +//metodo per cercare se c'e' una chiave fisicamente collegata (serve per abilitare l'installazione demo) +bool CampoWizardPage3::LocalDongleTest() const +{ + unsigned short serno = 0xFFFF; + int yearKey = 0; + + serno = HardlockLogin(yearKey); + if (serno == 0xFFFF) + serno = EutronLogin(yearKey); + + return serno != 0xFFFF && yearKey > 0; +} + + +bool CampoWizardPage3::ForwardValidate() +{ + const int iLastRow = m_pRadioBox->GetRowCount() - 1; + const int iSelectedRow = m_pRadioBox->GetSelection(); + wxString strPrgPath; + wxString strStudy; + wxString strSrvAuth; + wxString strSrvDict; + + //analizza il campo.ini dell'installazione selezionata (si usa < perche' l'ultima row e' la nuova installazione!) + if (iSelectedRow < iLastRow) + { + strPrgPath = m_pRadioBox->GetStringSelection(); + CampoIniFile CampoIni(strPrgPath + "/campo.ini", "Main"); + + const bool bTestDatabase = CampoIni.GetBool("TestDatabase"); + + //non si puo' aggiornare un client da cd!! va fatto dal programma + const bool bTestPrograms = CampoIni.GetBool("TestPrograms"); + if (bTestPrograms) + { + CampoIniFile InstallIni(strPrgPath + "/install.ini", "Main"); + wxString strDiskPath = InstallIni.Get("DiskPath"); + wxString strMsg = "Per aggiornare questa stazione di lavoro e' necessario aggiornare prima il Server di "; + strMsg << APPNAME << " in " << strDiskPath << " !\n"; + strMsg << "Questa stazione di lavoro si aggiornera' automaticamente alla prima esecuzione del programma " << APPNAME; + return ErrorBox(strMsg); + } + + strStudy = CampoIni.Get("Study"); + CampoIniFile CampoServerIni(strPrgPath + "/campo.ini", "Server"); + strSrvAuth = CampoServerIni.Get("Dongle"); + strSrvDict = CampoServerIni.Get("Dictionary"); + + 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 APPNAME"); + GetWizard().SetDataPath(strStudy); + + if (!strSrvAuth.IsEmpty()) + GetWizard().SetSrvAuth(strSrvAuth); + if (!strSrvDict.IsEmpty()) + GetWizard().SetSrvDict(strSrvDict); + + //setta alla pagina riassuntiva i valori della pagina attuale... + GetWizard().SetDestinationPath(strPrgPath); //va alla pagina riassuntiva + GetWizard().SetPrgLocPath(strPrgPath); //questo serve solo per la creazione del link sul desktop! + GetWizard().SetInstallationType(3); //e' un aggiornamento!! + GetWizard().SetDesktopShortcut(false); //e' sempre un aggiornamento! + } + else //resetta il path in caso si scelga nuova installazione dopo aver scelto aggiornamento + { + //continuiamo a sconsigliare l'installazione DEMO, ma ognuno fa come crede... + if (GetBool(302)) + { + const wxString strPrgDemoPath = "c:/campodemo"; + wxDir dirPrgDemoPath(strPrgDemoPath); + if (dirPrgDemoPath.Exists(strPrgDemoPath) && (dirPrgDemoPath.HasFiles() || dirPrgDemoPath.HasSubDirs())) + return ErrorBox("Impossibile installare la versione DEMO!\nLa cartella c:/campodemo NON e' vuota!"); + + GetWizard().SetInstDemoVersion(true); + } + + //questo lo fa in ogni caso! + GetWizard().SetDestinationPath(""); + GetWizard().SetDesktopShortcut(true); + + } + + return true; +} + +CampoWizardPage3::CampoWizardPage3(wxWizard* parent) : CampoWizardPage(parent) +{ + //deve cercare campo.stp + CampoIniFile campo_stp("C:\\campo.stp", ""); + wxString group; + long index; + const wxString program = "Program"; + wxArrayString asGroups, asCampi; + + //cerca se esiste campo.stp;se lo trova cerca quelle che sono le installazioni valide;se ne trova.. + //..le aggiunge ad un array di stringhe (asCampi) da cui genera un radiobutton di scelte + for (bool ok = campo_stp.GetFirstGroup(group, index); ok; ok = campo_stp.GetNextGroup(group, index)) + { + asGroups.Add(group); + } + int prechecked = -1; + for (unsigned int i = 0; i < asGroups.GetCount(); i++) + { + CampoIniFile campo_stp("C:\\campo.stp", asGroups[i]); + wxString path = campo_stp.Get(program); + + //sono installazioni valide quelle che presentano la coppia di files campo.ini e campo.aut (senza.. + //..questi 2 soggetti il programma non parte) + wxString campo_ini = path; + campo_ini << "/campo.ini"; + wxString campo_aut = path; + campo_aut << "/campo.aut"; + if (wxFileName::FileExists(campo_ini) && wxFileName::FileExists(campo_aut)) + { + asCampi.Add(path); + //cerca l'eventuale installazione server se ci sono piu' installazioni sulla stessa macchina + if (prechecked < 0) + { + CampoIniFile ini(campo_ini, "Main"); + if (ini.GetBool("TestDatabase") && !ini.GetBool("TestPrograms")) + prechecked = i; + } + } + } + + wxString strTitle, strBody; + //se non ci sono delle installazioni da aggiornare propone solo installazioni.. + if (asCampi.IsEmpty()) + { + strTitle += wxT("Scelta Installazione"); + strBody += wxT("

E' possibile INSTALLARE APPNAME in un nuovo direttorio.

"); + + asCampi.Add("Nuova installazione"); //voce di nuova installazione! + m_pRadioBox = new wxRadioBox(this, 301, "Installazione del software", wxDefaultPosition, + wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS); + } + //..senno' propone di aggiornare + else + { + strTitle += wxT("Scelta Aggiornamento / Installazione"); + strBody += wxT("

E' possibile AGGIORNARE (scelta consigliata) una installazione di APPNAME gia' presente oppure INSTALLARE in un nuovo direttorio.

"); + strBody += wxT("

Selezionare l'opzione desiderata nel riquadro sottostante. In caso di piu' di una installazione "); + strBody += wxT("presente sara' preselezionata la eventuale installazione di tipo Server, in quanto deve essere aggiornata per prima! "); + strBody += wxT("

In questo caso procedere all'aggiornamento di tale installazione Server e aggiornare successivamente le postazioni client "); + strBody += wxT("lanciando il programma APPNAME su di esse

"); + + //radiobutton con le scelte aggiornamento + asCampi.Add("Nuova installazione"); + m_pRadioBox = new wxRadioBox(this, 301, "Selezionare l'installazione da aggiornare (consigliato) o Nuova installazione", wxDefaultPosition, + wxDefaultSize, asCampi, 0, wxRA_SPECIFY_ROWS); + if (prechecked > 0) + m_pRadioBox->SetSelection(prechecked); + } + + strBody += wxT("

Prima di proseguire accertarsi che non vi sia alcuna sessione di APPNAME attiva! "); + strBody += wxT("Terminare quindi le eventuali sessioni di APPNAME attive e proseguire.

"); + + GetSizer()->Add(m_pRadioBox); + + //se NON ci sono installazioni gia' presenti e NON c'e' alcuna chiave collegata -> puo' installare la DEMO + if (asCampi.GetCount() == 1 && !LocalDongleTest()) + { + //checkbox per installare la DEMO (non fatelo, vi prego!!!) + wxCheckBox* chDemoPrg = new wxCheckBox(this, 302, wxT("Installare la versione DEMO")); + chDemoPrg->SetValue(false); + GetSizer()->AddSpacer(16); + GetSizer()->Add(chDemoPrg); + + strBody += wxT("

E' possibile anche installare la versione DEMO di APPNAME. Questa versione e' a scopo puramente "); + strBody += wxT("dimostrativo e NON va di norma installata! Non e' utilizzabile come la versione normale in quanto limitata nel "); + strBody += wxT("numero e nella data delle registrazioni e nel tempo di uso giornaliero (max 2 ore). La cartella di installazione della "); + strBody += wxT("versione dimostrativa e' C:/campodemo e dispone di un'area dati parzialmente precompilata.

"); + } + + SetHTMLText(strTitle, strBody); +} + + +/**********************************************************************************************************/ +/* 4 Pagina con la gestione della chiave di protezione */ +/**********************************************************************************************************/ +class CampoWizardPage4 : public CampoWizardPage +{ + +protected: + DECLARE_EVENT_TABLE(); + void OnHLPick(wxCommandEvent& e); + void OnEUPick(wxCommandEvent& e); + void OnSRPick(wxCommandEvent& e); + + virtual bool ForwardValidate(); + virtual bool TransferDataToWindow(); + + int DongleTest(); + wxString DecodeString(const wxString& data); + int VersionYear(); + void BuildKey(char* key); + +public: + CampoWizardPage4(wxWizard* parent); +}; + +//metodi per la gestione dei bottoni per l'esecuzione dei programmi di installazione delle chiavi +BEGIN_EVENT_TABLE(CampoWizardPage4, CampoWizardPage) + EVT_BUTTON(401, OnHLPick) + EVT_BUTTON(402, OnEUPick) + EVT_BUTTON(403, OnSRPick) +END_EVENT_TABLE() + +void CampoWizardPage4::OnHLPick(wxCommandEvent& e) +{ + wxString path("../../chiavi/hardlock/hldrv32.exe"); + wxExecute(path, wxEXEC_SYNC); +} + +void CampoWizardPage4::OnEUPick(wxCommandEvent& e) +{ + wxString path("../../chiavi/eutron/sdi.exe"); + wxExecute(path, wxEXEC_SYNC); +} + +void CampoWizardPage4::OnSRPick(wxCommandEvent& e) +{ + static bool bSemaforo = false; + if (!bSemaforo) + { + bSemaforo = true; + wxBusyCursor hourglass; + wxString strSrvName; + int year = 0; + unsigned short serno = ServerLogin(year, strSrvName); + if (!strSrvName.IsEmpty()) + Set(404, strSrvName); + bSemaforo = false; + } +} + +bool CampoWizardPage4::ForwardValidate() +{ + //per poter proseguire deve aver trovato una chiave o un server! + + GetWizard().SetSrvAuth(Get(404)); + int nDongleType = DongleTest(); + if (nDongleType == 0) + return ErrorBox("Per proseguire e' NECESSARIO installare una chiave locale o collegarsi ad una chiave di rete!"); + + return true; +} + +bool CampoWizardPage4::TransferDataToWindow() +{ + FindWindowById(401)->Disable(); + FindWindowById(402)->Disable(); + FindWindowById(403)->Disable(); + FindWindowById(404)->Disable(); + + //controlla preventivamente se la chiave c'e' ed eventualmente quale e' (hardlock,eutron,server di chiavi) + const int nDongleType = DongleTest(); + GetWizard().SetDongleType(nDongleType); + + wxString strTitle = wxT("Controllo della chiave hardware di protezione"); + wxString strBody = wxT("

La versione commerciale del software richiede l'installazione e la presenza della chiave hardware di protezione

"); + switch (nDongleType) + { + case 1: + strBody += wxT("

E' stata rilevata una chiave tipo Hardlock:

"); + strBody += wxT("

"); + strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); + break; + case 2: + strBody += wxT("

E' stata rilevata una chiave tipo Eutron:

"); + strBody += wxT("

"); + strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); + break; + case 3: + strBody += wxT("

E' stato rilevata una chiave remota condivisa in rete con il servizio di gestione autorizzazioni:

"); + strBody += wxT("

"); + strBody += wxT("

Si puo' procedere con l'installazione /aggiornamento del software APPNAME. Premere il pulsante \"Avanti\".

"); + Set(404, GetWizard().GetSrvAuth()); + break; + + default: + strBody += wxT("

Non e' stata rilevata alcuna chiave hardware installata sul computer!

"); + strBody += wxT("

Per procedere all'installazione della chiave hardware, collegarla al computer e premere il bottone corrispondente alla tipologia della chiave stessa per installarne i driver.

"); + strBody += wxT("

Se si utilizza una chiave remota collegata ad un altro computer e condivisa in rete attraverso il servizio gestione di autorizzazioni "); + strBody += wxT("premere il bottone Cerca per attivare la ricerca automatica della chiave remota. Qualora tale ricerca fallisse digitare il nome del computer "); + strBody += wxT("(o l'indirizzo IP) cui e' collegata la chiave di rete e su cui e' installato e attivo il gestore di autorizzazioni. "); + FindWindowById(401)->Enable(); + FindWindowById(402)->Enable(); + FindWindowById(403)->Enable(); + FindWindowById(404)->Enable(); + break; + } + + SetHTMLText(strTitle, strBody); + + return true; +} + +void CampoWizardPage4::BuildKey(char* key) +{ + for (int i = 0; i < 8; i++) + key[i] = 'A'+ rand()%26; +} + +wxString CampoWizardPage4::DecodeString(const wxString& data) +{ + char key[8] = ""; + BuildKey(key); + + char tmp[256]; + int i; + for (i = 0; data[i]; i++) + tmp[i] = data[i] - (i < 8 ? key[i] : tmp[i - 8]); + tmp[i] = '\0'; + return tmp; +} + +int CampoWizardPage4::VersionYear() +{ + char ver[32]; + GetPrivateProfileString("ba", "Versione", "", ver, sizeof(ver), "../../program/install.ini"); + ver[4] = '\0'; + return atoi(ver); +} + +int CampoWizardPage4::DongleTest() +{ + int dongle_type = 0; + int yearKey = 0; + + unsigned int serno = 0xFFFF; + + wxString strSrvName = GetWizard().GetSrvAuth(); //nome del server di autorizzazioni (se c'e') + if (!strSrvName.IsEmpty()) + { + serno = ServerLogin(yearKey, strSrvName); + if (serno != 0xFFFF) + dongle_type = 3; //chiave remota + } + + if (serno == 0xFFFF) + { + serno = HardlockLogin(yearKey); + if (serno == 0xFFFF) + { + serno = EutronLogin(yearKey); + if (serno != 0xFFFF) + dongle_type = 2; //chiave eutron + } + else + dongle_type = 1; //chiave hardlock + } + + if (serno == 0) // Chiave di sviluppo + return dongle_type; + if (serno == 0xFFFF) // Chiave inesistente o invisibile = Prima installazione o demo + return dongle_type; + + const int verYear = VersionYear(); + if (yearKey < verYear) // Chiave già programmata con assistenza pagata + { + bool ok = false; + wxFileInputStream file("../dninst.zip"); + if (file.IsOk()) + { + wxTextInputStream keys(file); + wxString line = keys.ReadLine(); + srand(883); + const int ass_year = atoi(DecodeString(line)); + if (ass_year > yearKey) // Non devo abbassare l'anno di assistenza! + { + srand(ass_year); + while (!file.Eof()) + { + line = keys.ReadLine(); + line = DecodeString(line); + unsigned int sn = (unsigned int)atol(line); + if (sn == serno || line[0] == '*') + { + ok = true; + break; + } + } + if (ok) + { + const int n = ass_year%10; + const int y = (ass_year / 1000) * 1000 + (ass_year%1000) /10; + line.Printf("Il contratto di manutenzione %d/%d verrà attivato automaticamente\ndurante l'installazione del software", y, n); + WarningBox(line); + } + else + { + line.Printf("È necessario contattare l'assistenza tecnica\n" + "per l'abilitazione del contratto di manutenzione %d", verYear); + WarningBox(line); + } + } + } + else + { + ErrorBox("Impossibile verificare il contratto di manutenzione"); + } + } + return dongle_type; +} + +CampoWizardPage4::CampoWizardPage4(wxWizard* parent) : CampoWizardPage(parent) +{ + //procedura per la costruzione dei bottoni e delle immagini per l'installazione dei driver di chiave + //"griglia" contenitrice degli oggetti + + //griglia per sistemare i campi + wxGridBagSizer* gbsButtSizer = new wxGridBagSizer(VGAP, HGAP); + GetSizer()->Add(gbsButtSizer); + + //prima riga della griglia + //Hardlock label + AddLabel(gbsButtSizer, "Installa chiave locale di tipo Hardlock", 0, 0); + //Hardlock image + wxBitmap bmp_HL("../servers/hardlock.gif", wxBITMAP_TYPE_GIF); + wxStaticBitmap* s_bmp_HL = new wxStaticBitmap(this, wxID_ANY, bmp_HL); + gbsButtSizer->Add(s_bmp_HL, wxGBPosition(0, 1)); + //bottone Hardlock + wxButton* bHlButton = new wxButton(this, 401, wxT("Hardlock"), wxDefaultPosition, wxSize(64, -1)); + gbsButtSizer->Add(bHlButton, wxGBPosition(0, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + + //seconda riga della griglia + //Eutron label + AddLabel(gbsButtSizer, "Installa chiave locale di tipo Eutron", 1, 0); + //Eutron image + wxBitmap bmp_EU("../servers/eutron.gif", wxBITMAP_TYPE_GIF); + wxStaticBitmap* s_bmp_EU = new wxStaticBitmap(this, wxID_ANY, bmp_EU); + gbsButtSizer->Add(s_bmp_EU, wxGBPosition(1, 1)); + //bottone Eutron + wxButton* bEuButton = new wxButton(this, 402, wxT("Eutron"), wxDefaultPosition, wxSize(64, -1)); + gbsButtSizer->Add(bEuButton, wxGBPosition(1, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + + //terza riga della griglia + //Server label + AddLabel(gbsButtSizer, "Nome o indirizzo IP del server di autorizzazioni", 2, 0); + //nome Server + wxTextCtrl* tcSrvName = new wxTextCtrl(this, 404, "", wxDefaultPosition, wxSize(128,-1)); + gbsButtSizer->Add(tcSrvName, wxGBPosition(2, 1)); + //bottone Eutron + wxButton* bSrvButton = new wxButton(this, 403, wxT("Cerca"), wxDefaultPosition, wxSize(64, -1)); + gbsButtSizer->Add(bSrvButton, wxGBPosition(2, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + +} + +/**********************************************************************************************************/ +// 5 Scelta tipo installazione +/**********************************************************************************************************/ +class CampoWizardPage5 : public CampoWizardPage +{ + wxRadioBox* m_pRadioBox; + +protected: + virtual bool ForwardValidate(); + +public: + CampoWizardPage5(wxWizard* parent); +}; + +bool CampoWizardPage5::ForwardValidate() +{ + const unsigned int type = m_pRadioBox->GetSelection(); + GetWizard().SetInstallationType(type); + return true; +} + +CampoWizardPage5::CampoWizardPage5(wxWizard* parent) : CampoWizardPage(parent) +{ + //Istruzioni per l'uso! + wxString strTitle = wxT("Scelta del tipo di installazione"); + wxString strBody = wxT("

Standard (scelta consigliata). Installazione su postazione singola, con programmi e dati sul disco locale del computer

"); + strBody += wxT("

Installazioni di rete (per utenti esperti)

"); + strBody += wxT("

Server: Computer in rete sul quale sono presenti una copia, utilizzata o meno, dei programmi (server programmi) e l’area dati (server dati). "); + strBody += wxT("In una installazione in rete di APPNAME e' necessario sia presente un unica postazione di tipo server, "); + strBody += wxT("e deve essere installata per prima!

"); + strBody += wxT("

Client: Computer in rete sul quale e' presente una copia dei programmi ma non l'area dati. "); + strBody += wxT("I client possono essere installati solo dopo l'installazione del server!

"); + SetHTMLText(strTitle, strBody); + + //radiobutton con i tipi di installazione + wxArrayString asInstType; + asInstType.Add("Standard"); + asInstType.Add("Server"); + asInstType.Add("Client"); + + m_pRadioBox = new wxRadioBox(this, 501, "Selezionare il tipo di installazione", wxDefaultPosition, + wxDefaultSize, asInstType, 0, wxRA_SPECIFY_ROWS); + //setta il default a Standard + m_pRadioBox->SetSelection(0); + GetSizer()->Add(m_pRadioBox); + +} + + +/**********************************************************************************************************/ +// 6 Installazione standard +/**********************************************************************************************************/ +class CampoWizardPage6 : public CampoWizardPage +{ +protected: + DECLARE_EVENT_TABLE(); + void OnDirPick(wxCommandEvent& e); + virtual bool ForwardValidate(); + +public: + CampoWizardPage6(wxWizard* parent); +}; + +BEGIN_EVENT_TABLE(CampoWizardPage6, CampoWizardPage) + EVT_BUTTON(602, OnDirPick) + EVT_BUTTON(604, OnDirPick) +END_EVENT_TABLE() + +void CampoWizardPage6::OnDirPick(wxCommandEvent& e) +{ + const wxWindowID wiTargetField = e.GetId() - 1; + wxString strPath = Get(wiTargetField); + wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, + wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + if (dlg.ShowModal() == wxID_OK) + { + strPath = dlg.GetPath(); + Set(wiTargetField, strPath); + } +} + +//metodo per il controllo dell'area dati;se la directory indicata non e' vuota non puoi usarla ne' crearla +bool CampoWizardPage6::ForwardValidate() +{ + //controllo esistenza directory vuota per i programmi in locale + const wxString strPrgLocPath = Get(601); + wxDir dirPrgLocPath(strPrgLocPath); + if (dirPrgLocPath.Exists(Get(601)) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) + return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); + + const wxString strDataPath = Get(603); + wxDir dirDataPath(strDataPath); + if (dirDataPath.Exists(strDataPath) && (dirDataPath.HasFiles() || dirDataPath.HasSubDirs())) + return ErrorBox("La cartella indicata per la creazione dell'area dati non e' vuota! Selezionarne un'altra!"); + + //setta alla pagina riassuntiva i valori della pagina attuale... + GetWizard().SetPrgLocPath(strPrgLocPath); + GetWizard().SetDataPath(strDataPath); + + //...e pure quegli stupidi datidemo che nessuno ha mai installato!! + const bool bInstDemoData = GetBool(605); + GetWizard().SetInstDemoData(bInstDemoData); + + return true; +} + +CampoWizardPage6::CampoWizardPage6(wxWizard* parent) : CampoWizardPage(parent) +{ + wxString strTitle = wxT("Installazione di tipo Standard"); + wxString strBody = wxT("

Digitare nel campo 'Cartella programma' il percorso completo della cartella dove si desidera installare il programma. "); + strBody += wxT("Il percorso di default (consigliato) e' C:\\APPNAME

"); + strBody += wxT("

Digitare nel campo 'Cartella Dati' il percorso completo della cartella dove si desidera installare l'area dati. "); + strBody += wxT("Il percorso di default (consigliato) e' C:\\APPNAME\\dati

"); + strBody += wxT("

Dati dimostrativi: area dati precompilata per installazioni di tipo dimostrativo del funzionamento del software. "); + strBody += wxT("NON vanno caricati nel caso di una normale installazione!

"); + SetHTMLText(strTitle, strBody); + + //griglia per sistemare i campi + wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); + GetSizer()->Add(gbsSizer); + + //prima riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella programmi", 0, 0); + //campo testo + wxString strPath; + strPath = "C:\\"; + strPath += APPNAME; + wxTextCtrl* tcPrgPath = new wxTextCtrl(this, 601, strPath, wxDefaultPosition, wxSize(320,-1)); + gbsSizer->Add(tcPrgPath, wxGBPosition(0, 1)); + //bottone 'sfoglia' + wxButton* bPrgButton = new wxButton(this, 602, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bPrgButton, wxGBPosition(0, 2)); + + //seconda riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella dati", 1, 0); + //campo testo + strPath += "/dati"; + wxTextCtrl* tcDataPath = new wxTextCtrl(this, 603, strPath, wxDefaultPosition, wxSize(320,-1)); + gbsSizer->Add(tcDataPath, wxGBPosition(1, 1)); + //bottone 'sfoglia' + wxButton* bDataButton = new wxButton(this, 604, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bDataButton, wxGBPosition(1, 2)); + + //terza riga della griglia + wxCheckBox* chDataDemo = new wxCheckBox(this, 605, wxT("Carica i dati dimostrativi")); + chDataDemo->SetValue(false); + gbsSizer->Add(chDataDemo, wxGBPosition(2, 1)); +} + +/**********************************************************************************************************/ +// 7 Installazione server +/**********************************************************************************************************/ +class CampoWizardPage7 : public CampoWizardPage +{ + wxRadioBox* m_pRadioBox; + +protected: + DECLARE_EVENT_TABLE(); + virtual bool ForwardValidate(); + void OnDirPick(wxCommandEvent& e); + void OnSrvClick(wxCommandEvent& e); + +public: + CampoWizardPage7(wxWizard* parent); +}; + +BEGIN_EVENT_TABLE(CampoWizardPage7, CampoWizardPage) + EVT_BUTTON(702, OnDirPick) + EVT_BUTTON(704, OnDirPick) + EVT_CHECKBOX(705, OnSrvClick) + EVT_CHECKBOX(707, OnSrvClick) +END_EVENT_TABLE() + +void CampoWizardPage7::OnDirPick(wxCommandEvent& e) +{ + const wxWindowID wiTargetField = e.GetId() - 1; + wxString strPath = Get(wiTargetField); + wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, + wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + if (dlg.ShowModal() == wxID_OK) + { + strPath = dlg.GetPath(); + Set(wiTargetField, strPath); + } +} + +void CampoWizardPage7::OnSrvClick(wxCommandEvent& e) +{ + //nome del server + wxWindow* pWnd = FindWindowById(e.GetId() + 1); + if (pWnd) + pWnd->Enable(e.IsChecked()); + //tipo installazione server + pWnd = FindWindowById(709); + if (pWnd) + pWnd->Enable(GetBool(705) || GetBool(707)); +} + +bool CampoWizardPage7::ForwardValidate() +{ + //controllo esistenza directory vuota per i programmi in locale + const wxString strPrgLocPath = Get(701); + wxDir dirPrgLocPath(strPrgLocPath); + if (dirPrgLocPath.Exists(strPrgLocPath) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) + return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); + + //controllo della directory dell'area dati: deve essere nuova o vuota affinche' possa essere utilizzata!! + const wxString strDataPath = Get(703); + wxDir dirDataPath(strDataPath); + if (dirDataPath.Exists(strDataPath) && (dirDataPath.HasFiles() || dirDataPath.HasSubDirs())) + return ErrorBox("La cartella indicata per la creazione dell'area dati non e' vuota! Selezionarne un'altra!"); + + //setta alla pagina riassuntiva i valori della pagina attuale... + GetWizard().SetPrgLocPath(strPrgLocPath); + GetWizard().SetDataPath(strDataPath); + //...compresi eventuali stupidi servers! + const bool bInstAuth = GetBool(705); + if (bInstAuth) + { + GetWizard().SetInstUseAuth(bInstAuth); + const wxString strSrvAuth = Get(706); + if (strSrvAuth.IsEmpty()) + return ErrorBox("Specificare il server gestore delle autorizzazioni!"); + GetWizard().SetSrvAuth(strSrvAuth); + } + else + GetWizard().SetSrvAuth(""); + + const bool bInstDict = GetBool(707); + if (bInstDict) + { + GetWizard().SetInstUseDict(bInstDict); + const wxString strSrvDict = Get(708); + if (strSrvDict.IsEmpty()) + return ErrorBox("Specificare il server gestore dei dizionari!"); + GetWizard().SetSrvDict(strSrvDict); + } + else + GetWizard().SetSrvDict(""); + + //..e loro modalita' di esecuzione + if (bInstAuth || bInstDict) + { + GetWizard().SetSrvAutostartMode(m_pRadioBox->GetSelection()); + } + else + GetWizard().SetSrvAutostartMode(-1); + + return true; +} + +CampoWizardPage7::CampoWizardPage7(wxWizard* parent) : CampoWizardPage(parent) +{ + wxString strTitle = wxT("Installazione di tipo Server"); + wxString strBody = wxT("

Digitare nel campo 'Cartella programma' il percorso completo della cartella dove si desidera installare il programma. "); + strBody += wxT("Il percorso consigliato e' C:\\APPNAME

"); + strBody += wxT("

Digitare nel campo 'Cartella dati' il percorso completo della cartella dove si desidera installare l'area dati. "); + strBody += wxT("Il percorso consigliato e' C:\\APPNAME\\dati

"); + strBody += wxT("

Le cartelle del programma e dei dati dovranno essere condivise in modalita' lettura/scrittura agli utenti di sistema e di rete che utilizzeranno il software APPNAME. "); + strBody += wxT("In mancanza di tale condivisione nessun client potra' accedere al server!

"); + strBody += wxT("

Gestore autorizzazioni: e' il software che permette di gestire una chiave di protezione hardware multiutenza condivisa in rete. "); + strBody += wxT("Installando tale software e' necessario specificare il computer su cui e' montata la chiave di protezione multiutenza."); + strBody += wxT("Viene di default proposto il computer su cui si sta eseguendo l'installazione di APPNAME (localhost).

"); + strBody += wxT("

Gestore dizionari: e' il software che permette di utilizzare APPNAME in lingue diverse dall'italiano. "); + strBody += wxT("Per l'installazione di questo software viene di default proposto il computer su cui si sta eseguendo l'installazione di APPNAME (localhost).

"); + strBody += wxT("

Modalita' di esecuzione programmi di gestione
"); + strBody += wxT("Come servizi: i programmi di gestione vengono eseguiti come servizi di Windows; questa e' la modalita' consigliata ed e' obbligatoria in caso di installazione con Windows 2003
"); + strBody += wxT("Nel menu esecuzione automatica: i programmi di gestione vengono eseguiti automaticamente al primo accesso di un utente al server di APPNAME; usare questa modalita' solo nell'impossibilita' di utilizzare la precedente

"); + + SetHTMLText(strTitle, strBody); + + //griglia per sistemare i campi + wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); + GetSizer()->Add(gbsSizer); + + //prima riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella programmi", 0, 0); + //campo testo + wxString strPath; + strPath = "C:\\"; + strPath += APPNAME; + wxTextCtrl* tcPrgPath = new wxTextCtrl(this, 701, strPath, wxDefaultPosition, wxSize(320,-1)); + gbsSizer->Add(tcPrgPath, wxGBPosition(0, 1)); + //bottone 'sfoglia' + wxButton* bPrgButton = new wxButton(this, 702, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bPrgButton, wxGBPosition(0, 2)); + + //seconda riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella dati", 1, 0); + //campo testo + strPath += "/dati"; + wxTextCtrl* tcDataPath = new wxTextCtrl(this, 703, strPath, wxDefaultPosition, wxSize(320,-1)); + gbsSizer->Add(tcDataPath, wxGBPosition(1, 1)); + //bottone 'sfoglia' + wxButton* bDataButton = new wxButton(this, 704, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bDataButton, wxGBPosition(1, 2)); + + //terza riga della griglia + //check installa authoriz + wxCheckBox* chAuthoriz = new wxCheckBox(this, 705, wxT("Installa il gestore delle autorizzazioni")); + chAuthoriz->SetValue(false); + gbsSizer->Add(chAuthoriz, wxGBPosition(2, 1)); + //server authoriz + wxTextCtrl* tcAuthoriz = new wxTextCtrl(this, 706, "localhost", wxDefaultPosition, wxSize(96,-1)); + tcAuthoriz->Disable(); + gbsSizer->Add(tcAuthoriz, wxGBPosition(2, 2)); + + //quarta riga della griglia + //check installa diction + wxCheckBox* chDictionary = new wxCheckBox(this, 707, wxT("Installa il gestore dei dizionari")); + chDictionary->SetValue(false); + gbsSizer->Add(chDictionary, wxGBPosition(3, 1)); + //server diction + wxTextCtrl* tcDiction = new wxTextCtrl(this, 708, "localhost", wxDefaultPosition, wxSize(96,-1)); + tcDiction->Disable(); + gbsSizer->Add(tcDiction, wxGBPosition(3, 2)); + + //quinta riga della griglia + //radiobutton con i tipi di installazione + wxArrayString asInstType; + asInstType.Add("Come servizi (consigliato)"); + asInstType.Add("Nel menu esecuzione automatica"); + + m_pRadioBox = new wxRadioBox(this, 709, "Modalita' di esecuzione gestori", wxDefaultPosition, + wxDefaultSize, asInstType, 0, wxRA_SPECIFY_COLS); + //setta il default a "come servizio" + m_pRadioBox->SetSelection(0); + m_pRadioBox->Disable(); + gbsSizer->Add(m_pRadioBox, wxGBPosition(4, 1)); + +} + + +/**********************************************************************************************************/ +// 8 Installazione client +/**********************************************************************************************************/ +class CampoWizardPage8 : public CampoWizardPage +{ +protected: + DECLARE_EVENT_TABLE(); + virtual bool ForwardValidate(); + virtual bool TransferDataToWindow(); + void OnDirPick(wxCommandEvent& e); + void OnSrvClick(wxCommandEvent& e); + +public: + CampoWizardPage8(wxWizard* parent); +}; + +BEGIN_EVENT_TABLE(CampoWizardPage8, CampoWizardPage) + EVT_BUTTON(802, OnDirPick) + EVT_BUTTON(804, OnDirPick) + EVT_BUTTON(806, OnDirPick) + EVT_CHECKBOX(807, OnSrvClick) +END_EVENT_TABLE() + +void CampoWizardPage8::OnDirPick(wxCommandEvent& e) +{ + const wxWindowID wiTargetField = e.GetId() - 1; + wxString strPath = Get(wiTargetField); + wxDirDialog dlg(this, wxDirSelectorPromptStr, strPath, + wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST); + if (dlg.ShowModal() == wxID_OK) + { + strPath = dlg.GetPath(); + Set(wiTargetField, strPath); + } +} + +void CampoWizardPage8::OnSrvClick(wxCommandEvent& e) +{ + wxWindow* pWnd = FindWindowById(e.GetId() + 1); + if (pWnd) + pWnd->Enable(e.IsChecked()); +} + +bool CampoWizardPage8::TransferDataToWindow() +{ + return true; +} + +bool CampoWizardPage8::ForwardValidate() +{ + //controllo esistenza directory vuota per i programmi in locale + const wxString strPrgLocPath = Get(801); + wxDir dirPrgLocPath(strPrgLocPath); + if (dirPrgLocPath.Exists(strPrgLocPath) && (dirPrgLocPath.HasFiles() || dirPrgLocPath.HasSubDirs())) + return ErrorBox("La cartella selezionata per l'installazione dei programmi NON e' valida! Selezionarne un'altra!"); + + //controllo esistenza directory e programmi sul server + const wxString strPrgNetPath = Get(803); + wxDir dirPrgPath(strPrgNetPath); + bool ok_prg = false; + //deve esistere non vuota, e contenere almeno campo.ini,install.ini,campo.aut,ba0.exe + if (dirPrgPath.Exists(strPrgNetPath) && dirPrgPath.HasFiles() && dirPrgPath.HasSubDirs()) + { + wxFileName fnFileToCheck(strPrgNetPath, "campo"); + fnFileToCheck.SetExt("ini"); + if (fnFileToCheck.FileExists()) + { + fnFileToCheck.SetName("install"); + fnFileToCheck.SetExt("ini"); + if (fnFileToCheck.FileExists()) + { + fnFileToCheck.SetName("campo"); + fnFileToCheck.SetExt("aut"); + if (fnFileToCheck.FileExists()) + { + fnFileToCheck.SetName("ba0"); + fnFileToCheck.SetExt("exe"); + if (fnFileToCheck.FileExists()) + { + ok_prg = true; + } + } + } + } + } + if (!ok_prg) + return ErrorBox("La cartella selezionata come origine dei programmi NON e' valida!"); + + //controllo esistenza dati sul server + wxString strDataPath = Get(805); + if (!CheckDataDir(strDataPath)) + return ErrorBox("La cartella selezionata come area dati NON e' valida!"); + + //setta alla pagina riassuntiva i valori della pagina attuale + GetWizard().SetPrgLocPath(strPrgLocPath); + GetWizard().SetPrgNetPath(strPrgNetPath); + GetWizard().SetDataPath(strDataPath); + + //...compresi eventuali stupidi servers! + const wxString strSrvDict = Get(807); + //se c'e' un nome di dictionary server e non lo trova si incazza + if (!strSrvDict.IsEmpty() && !DictionaryLogin(strSrvDict)) + { + wxString strMsg; + strMsg << "Impossibile contattare il server " << strSrvDict << " per la gestione dei dizionari!"; + return ErrorBox(strMsg); + } + else + GetWizard().SetSrvDict(strSrvDict); + + return true; +} + +CampoWizardPage8::CampoWizardPage8(wxWizard* parent) : CampoWizardPage(parent) +{ + wxString strTitle = wxT("Installazione di tipo Client"); + wxString strBody = wxT("

Digitare nel campo 'Cartella locale programma' il percorso completo della cartella dove si desidera installare il programma. "); + strBody += wxT("Il percorso consigliato e' C:\\APPNAME

"); + strBody += wxT("

Digitare nel campo 'Cartella remota origine programmi' il percorso completo della cartella di rete dove sono i files origine del programma. "); + strBody += wxT("E' la cartella di programmi condivisa dal server precedentemente installato.

"); + strBody += wxT("

Digitare nel campo 'Cartella remota dati da utilizzare' il percorso completo della cartella di rete dove sono i dati. "); + strBody += wxT("E' la cartella dei dati condivisa dal server precedentemente installato.

"); + strBody += wxT("

Gestore dizionari: e' il computer gestore dei dizionari di APPNAME in lingue diverse dall'italiano. Generalmente e' il computer agente da server di APPNAME in rete. "); + strBody += wxT("Premere il bottone Cerca per attivare la ricerca automatica di tale computer. Qualora tale ricerca fallisse digitare il nome del computer gestore dei dizionari

"); + + SetHTMLText(strTitle, strBody); + + //griglia per sistemare i campi + wxGridBagSizer* gbsSizer = new wxGridBagSizer(VGAP, HGAP); + GetSizer()->Add(gbsSizer); + + //prima riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella locale programma", 0, 0); + //campo testo + wxString strPath; + strPath = "C:\\"; + strPath += APPNAME; + wxTextCtrl* tcDestPrgPath = new wxTextCtrl(this, 801, strPath, wxDefaultPosition, wxSize(256,-1)); + gbsSizer->Add(tcDestPrgPath, wxGBPosition(0, 1)); + //bottone 'sfoglia' + wxButton* bDestPrgButton = new wxButton(this, 802, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bDestPrgButton, wxGBPosition(0, 2)); + + //seconda riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella remota origine programmi", 1, 0); + //campo testo + strPath = "Z:\\"; + strPath += APPNAME; + wxTextCtrl* tcSrcPrgPath = new wxTextCtrl(this, 803, strPath, wxDefaultPosition, wxSize(256,-1)); + gbsSizer->Add(tcSrcPrgPath, wxGBPosition(1, 1)); + //bottone 'sfoglia' + wxButton* bSrcPrgButton = new wxButton(this, 804, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bSrcPrgButton, wxGBPosition(1, 2)); + + //terza riga della griglia + //prompt + AddLabel(gbsSizer, "Cartella remota dati da utilizzare", 2, 0); + //campo testo + strPath += "/dati"; + wxTextCtrl* tcDataPath = new wxTextCtrl(this, 805, strPath, wxDefaultPosition, wxSize(256,-1)); + gbsSizer->Add(tcDataPath, wxGBPosition(2, 1)); + //bottone 'sfoglia' + wxButton* bDataButton = new wxButton(this, 806, wxT("Sfoglia"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bDataButton, wxGBPosition(2, 2)); + + //terza riga della griglia + //Server dizionari label + AddLabel(gbsSizer, "Nome o indirizzo IP del server dei dizionari", 3, 0); + //nome Server dizionari + wxTextCtrl* tcSrvName = new wxTextCtrl(this, 807, "", wxDefaultPosition, wxSize(256,-1)); + gbsSizer->Add(tcSrvName, wxGBPosition(3, 1)); + //bottone Cerca + wxButton* bSrvButton = new wxButton(this, 808, wxT("Cerca"), wxDefaultPosition, wxSize(48, -1)); + gbsSizer->Add(bSrvButton, wxGBPosition(3, 2), wxDefaultSpan, wxALIGN_CENTER_VERTICAL); + +} + + +/**********************************************************************************************************/ +// 9 pagina con la creazione icona sul desktop e lanciatore del lurch +/**********************************************************************************************************/ +class CampoWizardPage9 : public CampoWizardPage +{ +protected: + virtual bool TransferDataToWindow(); + virtual bool ForwardValidate(); + +public: + CampoWizardPage9(wxWizard* parent); +}; + +bool CampoWizardPage9::TransferDataToWindow() +{ + return Set(901, GetWizard().GetDesktopShortcut()); +} + +bool CampoWizardPage9::ForwardValidate() +{ + const bool bDesktopShortcut = GetBool(901); + GetWizard().SetDesktopShortcut(bDesktopShortcut); + return true; +} + +CampoWizardPage9::CampoWizardPage9(wxWizard* parent) : CampoWizardPage(parent) +{ + wxString strTitle = wxT("Collegamenti"); + wxString strBody; + strBody += wxT("

E' possibile creare l'icona di APPNAME sul desktop

"); + + SetHTMLText(strTitle, strBody); + + wxCheckBox* pIcon = new wxCheckBox(this, 901, wxT("Creare l'icona sul desktop")); + GetSizer()->Add(pIcon, 0, wxALL, 0); + + GetSizer()->AddSpacer(5); + + //wxCheckBox* pLink = new wxCheckBox(this, 1002, wxT("Associare i file .caz al programma")); + //pLink->SetValue(true); + //GetSizer()->Add(pLink, 0, wxALL, 0); +} + + +/**********************************************************************************************************/ +// 10 pagina con la selezione di destinazione +/**********************************************************************************************************/ +class CampoWizardPage10 : public CampoWizardPage +{ + unsigned int _uInstallType; + wxString _strInstallType; + wxString _strPrgLocPath; + wxString _strPrgNetPath; + wxString _strDataPath; + wxString _strSrvAuth; + wxString _strSrvDict; + unsigned int _iSrvAutostartMode; + bool _bInstDemoData; + bool _bInstDemoVersion; + bool _bDesktopShortcut; + +protected: + virtual bool TransferDataToWindow(); + +public: + CampoWizardPage10(wxWizard* parent); +}; + +bool CampoWizardPage10::TransferDataToWindow() +{ + CampoWizard& cw = GetWizard(); + + _uInstallType = cw.GetInstallationType(); + switch (_uInstallType) + { + case 1: //server + _strInstallType = "Server"; + _strPrgLocPath = cw.GetPrgLocPath(); + _strDataPath = cw.GetDataPath(); + _strSrvAuth = cw.GetSrvAuth(); + _strSrvDict = cw.GetSrvDict(); + if (!_strSrvAuth.IsEmpty() || !_strSrvDict.IsEmpty()) + _iSrvAutostartMode = cw.GetSrvAutostartMode(); + break; + case 2: //client + _strInstallType = "Client"; + _strPrgLocPath = cw.GetPrgLocPath(); + _strPrgNetPath = cw.GetPrgNetPath(); + _strDataPath = cw.GetDataPath(); + _strSrvAuth = cw.GetSrvAuth(); + _strSrvDict = cw.GetSrvDict(); + break; + case 3: //aggiornamento + _strInstallType = ""; + _strPrgLocPath = cw.GetDestinationPath(); + _strDataPath = cw.GetDataPath(); + _strSrvAuth = cw.GetSrvAuth(); + _strSrvDict = cw.GetSrvDict(); + break; + default: //standard + if (cw.GetInstDemoVersion()) + { + _strInstallType = "DEMO"; + _strPrgLocPath = "c:/campodemo"; + } + else + { + _strInstallType = "Standard"; + _strPrgLocPath = cw.GetPrgLocPath(); + _strDataPath = cw.GetDataPath(); + _bInstDemoData = cw.GetInstDemoData(); + } + break; + } + //questo vale per tutti + _bDesktopShortcut = cw.GetDesktopShortcut(); + + //se installazione o aggiornamento cambia sia il titolo che i contenuti + wxString strTitle; + wxString strBody; + + //Aggiornamento + if (_uInstallType == 3) + { + strTitle += wxT("AGGIORNAMENTO: riepilogo configurazione"); + + strBody = wxT("

Cartella programma da aggiornare: "); + strBody += wxT(Bold(_strPrgLocPath) + "

"); + strBody += wxT("

Cartella dati in uso: "); + strBody += wxT(Bold(_strDataPath) + "

"); + } + else //Installazione + { + strTitle += wxT("INSTALLAZIONE: riepilogo configurazione"); + //DEMO (aaarrgh!) + if (cw.GetInstDemoVersion()) + { + strBody = wxT("

Tipo installazione selezionata: "); + strBody += wxT("DEMO

"); + strBody += wxT("

Cartella dove installare il programma: "); + strBody += wxT("C:/campodemo

"); + } + else //tutte le altre + { + strBody = wxT("

Tipo installazione selezionata: "); + strBody += wxT(Bold(_strInstallType) + "

"); + strBody += wxT("

Cartella dove installare il programma: "); + strBody += wxT(Bold(_strPrgLocPath) + "

"); + if (_uInstallType == 2) + { + strBody += wxT("

Cartella di origine dei files del programma: "); + strBody += wxT(Bold(_strPrgNetPath) + "

"); + } + strBody += wxT("

Cartella dati da creare: "); + strBody += wxT(Bold(_strDataPath) + "

"); + } + } + //installazione servers... + if (!_strSrvAuth.IsEmpty()) + { + strBody += wxT("

Computer gestore delle autorizzazioni: "); + strBody += wxT(Bold(_strSrvAuth) + "

"); + } + if (!_strSrvDict.IsEmpty()) + { + strBody += wxT("

Computer gestore dei dizionari: "); + strBody += wxT(Bold(_strSrvDict) + "

"); + } + //...e loro modalita' di lancio (solo installazione server!) + if (_uInstallType == 1 && (!_strSrvAuth.IsEmpty() || !_strSrvDict.IsEmpty()) && _iSrvAutostartMode >= 0) + { + strBody += wxT("

Modalita' di esecuzione dei programmi di gestione: "); + if (_iSrvAutostartMode == 0) + strBody += wxT(Bold("Come servizi") + "

"); + else + strBody += wxT(Bold("Nel menu esecuzione automatica") + "

"); + } + + //installazione dati demo (solo in postazione singola) + if (_uInstallType == 0 && _bInstDemoData) + strBody += wxT("

Installazione area dati dimostrativa

"); + + if (_bDesktopShortcut) + strBody += wxT("

Creazione dell' icona sul desktop

"); + + SetHTMLText(strTitle, strBody); + + return true; +} + +CampoWizardPage10::CampoWizardPage10(wxWizard* parent) : CampoWizardPage(parent) +{ +} + + +/////////////////////////////////////////////////////////// +// CampoWizard +/////////////////////////////////////////////////////////// +//la dichiarazione della classe e' prima in quanto alcuni suoi metodi sono usati da altre classi scritte piu' su +BEGIN_EVENT_TABLE(CampoWizard, wxWizard) + EVT_BUTTON(wxID_FORWARD, CampoWizard::OnNext) +END_EVENT_TABLE() + +void CampoWizard::OnNext(wxCommandEvent& e) +{ + CampoWizardPage* p = (CampoWizardPage*)GetCurrentPage(); + if (p->ForwardValidate()) + e.Skip(); +} + +bool CampoWizard::Run() +{ return RunWizard(m_pPage[0]); } + +wxString CampoWizard::Get(wxWindowID id) const +{ + wxWindow* pWnd = FindWindowById(id); + return pWnd ? pWnd->GetLabel() : wxEmptyString; +} + +int CampoWizard::GetSelection(wxWindowID id) const +{ + int n = -1; + wxWindow* pWnd = FindWindowById(id); + if (pWnd) + { + wxChoice* pList = (wxChoice*)pWnd; + n = pList->GetSelection(); + } + return n; +} + +bool CampoWizard::GetBool(wxWindowID id) const +{ + wxCheckBox* pWnd = (wxCheckBox*)FindWindowById(id); + return pWnd != NULL && pWnd->IsChecked(); +} + + +void CampoWizard::Set(wxWindowID id, const wxString str) +{ + wxWindow* pWnd = FindWindowById(id); + if (pWnd != NULL) + pWnd->SetLabel(str); +} + +//lunga litania di metodi per gettare e settare i valori tra le pagine +void CampoWizard::SetDestinationPath(const wxString& path) +{ + _strDestinationPath = path; + //Se il path di destinazione e' vuoto -> nuova installazione, senno' e' un aggiornamento della installazione.. + //..che sta in _strDestinationPath + if (_strDestinationPath.IsEmpty()) + { + if (GetInstDemoVersion()) + wxWizardPageSimple::Chain(m_pPage[2], m_pPage[8]); //installazione DEMO + else + wxWizardPageSimple::Chain(m_pPage[3], m_pPage[4]); //installazione nuova normale + } + else + { + wxWizardPageSimple::Chain(m_pPage[3], m_pPage[8]); //aggiornamento + } +} + +const wxString& CampoWizard::GetDestinationPath() const +{ + return _strDestinationPath; +} + +void CampoWizard::SetInstallationType(const unsigned int type) +{ + _uInstallationType = type; + //in base al tipo di installazione spara l'utente alla pagina corretta + switch (_uInstallationType) + { + case 1: //server + wxWizardPageSimple::Chain(m_pPage[4], m_pPage[6]); //manda l'utente alla pagina server + wxWizardPageSimple::Chain(m_pPage[6], m_pPage[8]); //dal server alla pagina riassuntiva + break; + case 2: //client + wxWizardPageSimple::Chain(m_pPage[4], m_pPage[7]); //manda l'utente alla pagina client + wxWizardPageSimple::Chain(m_pPage[7], m_pPage[8]); //dal client alla pagina riassuntiva + break; + case 3: //aggiornamento installazione precedente + wxWizardPageSimple::Chain(m_pPage[3], m_pPage[8]); //manda l'utente alla pagina riassuntiva + break; + default: //standard + //if demo + if (GetInstDemoVersion()) + { + wxWizardPageSimple::Chain(m_pPage[2], m_pPage[8]); //manda l'utente alla pagina riassuntiva senza controllo chiave + } + else + { + wxWizardPageSimple::Chain(m_pPage[4], m_pPage[5]); //manda l'utente alla pagina standard + wxWizardPageSimple::Chain(m_pPage[5], m_pPage[8]); //dalla standard alla pagina riassuntiva + } + break; + } +} + +const unsigned int CampoWizard::GetInstallationType() const +{ + return _uInstallationType; +} + +void CampoWizard::SetPrgLocPath(const wxString& strPrgLocPath) +{ + _strPrgLocPath = strPrgLocPath; +} + +const unsigned int CampoWizard::GetDongleType() const +{ + return _uDongleType; +} + +void CampoWizard::SetDongleType(const unsigned int uType) +{ + _uDongleType = uType; +} + +const wxString& CampoWizard::GetPrgLocPath() const +{ + return _strPrgLocPath; +} + +void CampoWizard::SetPrgNetPath(const wxString& strPrgNetPath) +{ + _strPrgNetPath = strPrgNetPath; +} + +const wxString& CampoWizard::GetPrgNetPath() const +{ + return _strPrgNetPath; +} + +void CampoWizard::SetDataPath(const wxString& strDataPath) +{ + _strDataPath = strDataPath; +} + +const wxString& CampoWizard::GetDataPath() const +{ + return _strDataPath; +} + +void CampoWizard::SetInstUseAuth(const bool bInstUseAuth) +{ + _bInstUseAuth = bInstUseAuth; +} + +const bool CampoWizard::GetInstUseAuth() const +{ + return _bInstUseAuth; +} + +void CampoWizard::SetSrvAuth(const wxString& strSrvAuth) +{ + _strSrvAuth = strSrvAuth; +} + +const wxString& CampoWizard::GetSrvAuth() const +{ + return _strSrvAuth; +} + +void CampoWizard::SetInstUseDict(const bool bInstUseDict) +{ + _bInstUseDict = bInstUseDict; +} + +const bool CampoWizard::GetInstUseDict() const +{ + return _bInstUseDict; +} + +void CampoWizard::SetSrvDict(const wxString& strSrvDict) +{ + _strSrvDict = strSrvDict; +} + +const wxString& CampoWizard::GetSrvDict() const +{ + return _strSrvDict; +} + +void CampoWizard::SetSrvAutostartMode(const int iSrvAutostartMode) +{ + _iSrvAutostartMode = iSrvAutostartMode; +} + +const int CampoWizard::GetSrvAutostartMode() const +{ + return _iSrvAutostartMode; +} + +void CampoWizard::SetInstDemoData(const bool bInstDemoData) +{ + _bInstDemoData = bInstDemoData; +} + +const bool CampoWizard::GetInstDemoData() const +{ + return _bInstDemoData; +} + +void CampoWizard::SetInstDemoVersion(const bool bInstDemoVersion) +{ + _bInstDemoVersion = bInstDemoVersion; +} + +const bool CampoWizard::GetInstDemoVersion() const +{ + return _bInstDemoVersion; +} + +void CampoWizard::SetDesktopShortcut(const bool bDesktopShortcut) +{ + _bDesktopShortcut = bDesktopShortcut; +} + +const bool CampoWizard::GetDesktopShortcut() const +{ + return _bDesktopShortcut; +} +//...fine litania metodi di passaggio valori tra le finestre + + + +CampoWizard::CampoWizard(wxWindow* pParent) +{ + //resettatore dei booleans (che senno' prendono valore casuale ad ogni esecuzione) + _bInstDemoData = false; //installa dati dimostrativi + _bInstDemoVersion = false; //installa versione demo + _bInstUseAuth = false; //installa/usa server authoriz + _bInstUseDict = false; //installa/usa server diction + _bDesktopShortcut = false; //creazione link sul desktop + + wxBitmap bitmap; + wxString strName = wxT("logo.gif"); + bitmap.LoadFile(strName, wxBITMAP_TYPE_GIF); + + Create(pParent, wxID_ANY, APPNAME, bitmap); + + m_pPage[0] = new CampoWizardPage1(this); //benvenuto con logo + m_pPage[1] = new CampoWizardPage2(this); //licenza + m_pPage[2] = new CampoWizardPage3(this); //scelta aggiornamento/tipo installazione + m_pPage[3] = new CampoWizardPage4(this); //test ed installazione chiavi + m_pPage[4] = new CampoWizardPage5(this); //selezione tipo installazione + m_pPage[5] = new CampoWizardPage6(this); //installazione standard + m_pPage[6] = new CampoWizardPage7(this); //installazione server + m_pPage[7] = new CampoWizardPage8(this); //installazione client + m_pPage[8] = new CampoWizardPage9(this); //creazione icona sul desktop e in start/programmi/campo + m_pPage[9] = new CampoWizardPage10(this); //riassuntino installazione + + + for (int p = 1; p < m_nPages; p++) + wxWizardPageSimple::Chain(m_pPage[p-1], m_pPage[p]); + + GetPageAreaSizer()->Add(m_pPage[0]); + + //bottoni di navigazione + Set(wxID_FORWARD, "Avanti"); + Set(wxID_BACKWARD, "Indietro"); + Set(wxID_CANCEL, "Annulla"); +} diff --git a/setup/wizard.h b/setup/wizard.h new file mode 100755 index 000000000..b4070329d --- /dev/null +++ b/setup/wizard.h @@ -0,0 +1,85 @@ +#ifndef __WIZARD_H +#define __WIZARD_H + +/////////////////////////////////////////////////////////// +// CampoWizardPage +/////////////////////////////////////////////////////////// +class CampoWizardPage; //predefinizione di CampoWizardPage (magia nera!!) +//predefinizione pure della CampoWizard con tutti i suoi metodi per poterlo usare nel metodo GetWizard (magia nerissima!!) +class CampoWizard : public wxWizard +{ + enum { m_nPages = 10 }; + CampoWizardPage* m_pPage[m_nPages]; + + wxString _strDestinationPath; //path di aggiornamento/installazione + unsigned int _uInstallationType; //tipo di installazione selezionata (standard,server,client,aggiornamento) + unsigned int _uDongleType; //tipo di chiave di protezione (hardlock,eutron,server) + + wxString _strPrgLocPath; //path programmi in locale + wxString _strPrgNetPath; //path programmi in remoto (server programmi directory per client) + wxString _strDataPath; //path dati (creare o usare) + + bool _bInstDemoData; //installa dati dimostrativi + bool _bInstDemoVersion; //installa versione demo + bool _bInstUseAuth; //installa/usa server authoriz + wxString _strSrvAuth; //nome server authoriz + bool _bInstUseDict; //installa/usa server diction + wxString _strSrvDict; //nome server diction + + unsigned int _iSrvAutostartMode; //tipologia di esecuzione dei server + bool _bDesktopShortcut; //crea il link sul desktop + +protected: + DECLARE_EVENT_TABLE(); + void OnNext(wxCommandEvent& e); + + int Pages() const { return m_nPages; } + CampoWizardPage& Page(int p) const { wxASSERT(p >= 0 && p < m_nPages); return *m_pPage[p]; } + +public: + bool Run(); + wxString Get(wxWindowID id) const; + int GetSelection(wxWindowID id) const; + bool GetBool(wxWindowID id) const; + void Set(wxWindowID id, const wxString str); + + //metodi per il passaggio tra le finestre dei parametri di installazione! + void SetDestinationPath(const wxString& strPath); + const wxString& GetDestinationPath() const; + void SetInstallationType(const unsigned int uType); + const unsigned int GetInstallationType() const; + void SetDongleType(const unsigned int uType); + const unsigned int GetDongleType() const; + + void SetPrgLocPath(const wxString& strPrgLocPath); + const wxString& GetPrgLocPath() const; + void SetPrgNetPath(const wxString& strPrgNetPath); + const wxString& GetPrgNetPath() const; + void SetDataPath(const wxString& strDataPath); + const wxString& GetDataPath() const; + + void SetInstDemoData(const bool bInstDemoData); + const bool GetInstDemoData() const; + void SetInstDemoVersion(const bool bInstDemoVersion); + const bool GetInstDemoVersion() const; + + void SetInstUseAuth(const bool bInstUseAuth); + const bool GetInstUseAuth() const; + void SetSrvAuth(const wxString& strSrvAuth); + const wxString& GetSrvAuth() const; + + void SetInstUseDict(const bool bInstUseDict); + const bool GetInstUseDict() const; + void SetSrvDict(const wxString& strSrvDict); + const wxString& GetSrvDict() const; + + void SetSrvAutostartMode(const int iSrvAutostartMode); + const int GetSrvAutostartMode() const; + + void SetDesktopShortcut(const bool bDesktopShortcut); + const bool GetDesktopShortcut() const; + + CampoWizard(wxWindow* pParent); +}; + +#endif diff --git a/setup/wxinc.h b/setup/wxinc.h index 3e5966fdd..4874f6937 100755 --- a/setup/wxinc.h +++ b/setup/wxinc.h @@ -21,5 +21,18 @@ #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #define APPNAME wxT("Campo") #define APPVERSION wxT("4.0") \ No newline at end of file