BOOL COptionsSystem::OnInitDialog() { COptions_PropertyPage::OnInitDialog(); PWSprefs *prefs = PWSprefs::GetInstance(); if (!m_bShowConfigFile) { GetDlgItem(IDC_STATIC_CONFIGFILE)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_RWSTATUS)->ShowWindow(SW_HIDE); GetDlgItem(IDC_CONFIGFILE)->ShowWindow(SW_HIDE); } else { PWSprefs::ConfigOption configoption; std::wstring wsCF = prefs->GetConfigFile(configoption); std::wstring wsCO(L""); switch (configoption) { case PWSprefs::CF_NONE: LoadAString(wsCF, IDS_NONE); break; case PWSprefs::CF_REGISTRY: LoadAString(wsCF, IDS_REGISTRY); break; case PWSprefs::CF_FILE_RO: LoadAString(wsCO, IDS_READ_ONLY); break; case PWSprefs::CF_FILE_RW: case PWSprefs::CF_FILE_RW_NEW: LoadAString(wsCO, IDS_READ_WRITE); break; default: ASSERT(0); } GetDlgItem(IDC_CONFIGFILE)->SetWindowText(wsCF.c_str()); GetDlgItem(IDC_STATIC_RWSTATUS)->SetWindowText(wsCO.c_str()); } bool bofferdeleteregistry = prefs->OfferDeleteRegistry(); bool boffermigrate2appdata = OfferConfigMigration(); if (!bofferdeleteregistry) { GetDlgItem(IDC_REGDEL)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REGDEL)->EnableWindow(FALSE); } if (!boffermigrate2appdata) { GetDlgItem(IDC_MIGRATETOAPPDATA)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MIGRATETOAPPDATA)->EnableWindow(FALSE); } if (!bofferdeleteregistry && !boffermigrate2appdata) { GetDlgItem(IDC_CONFIG_GRP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_APPLYCONFIGCHANGES)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_APPLYCONFIGCHANGES)->ShowWindow(SW_SHOW); } GetDlgItem(IDC_APPLYCONFIGCHANGES)->EnableWindow(FALSE); CSpinButtonCtrl *pspin = (CSpinButtonCtrl *)GetDlgItem(IDC_RESPIN); pspin->SetBuddy(GetDlgItem(IDC_MAXREITEMS)); pspin->SetRange(0, ID_TRAYRECENT_ENTRYMAX - ID_TRAYRECENT_ENTRY1 + 1); pspin->SetBase(10); pspin->SetPos(m_MaxREItems); pspin = (CSpinButtonCtrl *)GetDlgItem(IDC_MRUSPIN); pspin->SetBuddy(GetDlgItem(IDC_MAXMRUITEMS)); pspin->SetRange(0, ID_FILE_MRU_ENTRYMAX - ID_FILE_MRU_ENTRY1 + 1); pspin->SetBase(10); pspin->SetPos(m_MaxMRUItems); OnUseSystemTray(); InitToolTip(TTS_BALLOON | TTS_NOPREFIX, 2); AddTool(IDC_REGDEL, IDS_REGDEL); AddTool(IDC_MIGRATETOAPPDATA, IDS_MIGRATETOAPPDATA); ActivateToolTip(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
bool PerformConfigMigration() { /** * * We're here after the application's started and the conditions * listed above (in OfferConfigMigration) hold. * This constrains what we can assume and what we have to check. */ ASSERT(OfferConfigMigration()); // should not be here otherwise! if (!OfferConfigMigration()) return false; // I mean it! PWSprefs::ConfigOption configoption; // Note value meaningless at this point! std::wstring wsCnfgFile = PWSprefs::GetConfigFile(configoption); const std::wstring wsExecDir = pws_os::getexecdir(); const std::wstring wsUserCfgDir = pws_os::getuserprefsdir(); if (wsUserCfgDir.empty()) // couldn't find or create !? return false; std::wstring wsDefaultCfgFile = wsUserCfgDir + PWSprefs::cfgFileName; std::wstring wsExecDirCfgFile = wsExecDir + PWSprefs::cfgFileName; bool bRetVal(false); bool bExecCFRO(false); pws_os::FileExists(wsExecDirCfgFile, bExecCFRO); /** * MIGRATE **/ bRetVal = false; bool bNoMoreNodes(false); CXMLprefs newXMLConfig(wsExecDirCfgFile.c_str()); // for migrating user/host to new CXMLprefs oldXMLConfig(wsExecDirCfgFile.c_str()); // for removing user/host from old // Create the new one from it just containing our host/user if (!newXMLConfig.XML_Load()) return false; // WTF?!? const SysInfo *si = SysInfo::GetInstance(); stringT hn = si->GetEffectiveHost(); PWSprefs::XMLify(charT('H'), hn); stringT un = si->GetEffectiveUser(); PWSprefs::XMLify(charT('u'), un); stringT csHKCU_PREF = _T("Pwsafe_Settings\\"); csHKCU_PREF += hn.c_str(); csHKCU_PREF += _T("\\"); csHKCU_PREF += un.c_str(); csHKCU_PREF += _T("\\Preferences"); bool rc = newXMLConfig.MigrateSettings(wsDefaultCfgFile, hn, un); if (rc) { // That worked, now remove us from the old one config file // in the Installation directory newXMLConfig.Unlock(); // Since we now have new config file, remove host/user from old. if (!oldXMLConfig.XML_Load()) { rc = false; if (!oldXMLConfig.getReason().empty()) { CGeneralMsgBox gmb; gmb.SetMsg(oldXMLConfig.getReason().c_str()); gmb.AddButton(IDS_CONTINUE, IDS_CONTINUE); gmb.AddButton(IDS_EXIT, IDS_EXIT, TRUE, TRUE); if (gmb.DoModal() == IDS_EXIT) { goto exit; } // Problem loading XML file but user says continue rather than Exit PWS! // But we will not remove them from the old file and we will // delete the new file - better luck next time! pws_os::DeleteAFile(wsDefaultCfgFile); } } // Load failed // Now remove this hostname/username from old configuration file in the // installation directory (as long as everything OK and it is not R-O) if (rc && !bExecCFRO) { rc = oldXMLConfig.RemoveHostnameUsername(hn, un, bNoMoreNodes); if (rc) { oldXMLConfig.XML_Store(csHKCU_PREF); // However, if no more host/user nodes in this file - delete the // configuration file from the installation directory! if (bNoMoreNodes) { pws_os::DeleteAFile(wsExecDirCfgFile); } bRetVal = true; } // RemoveHostnameUsername } // rc && !bExecCFRO } // MigrateSettings // If this all worked, now copy autoload_filters.xml if it exists and not // already in the new location. // This is ONLY done when we migrate the user's settings. if (bRetVal == true) { bool bALFRO(false); std::wstring wsOldAutoLoadFilters = wsExecDir + L"autoload_filters.xml"; std::wstring wsNewAutoLoadFilters = wsUserCfgDir + L"autoload_filters.xml"; if (pws_os::FileExists(wsOldAutoLoadFilters, bALFRO) && !pws_os::FileExists(wsNewAutoLoadFilters)) { bool bCopyAutoloadFilters = pws_os::CopyAFile(wsOldAutoLoadFilters, wsNewAutoLoadFilters); // If we have copied it, there are no more nodes in the old configuration file // and it isn't read only - delete it from the installation directory if (bCopyAutoloadFilters && bNoMoreNodes && !bALFRO) pws_os::DeleteAFile(wsOldAutoLoadFilters); } } // Migration all done! exit: // Clean up newXMLConfig.Unlock(); oldXMLConfig.Unlock(); // Set config file if (bRetVal) PWSprefs::SetConfigFile(wsDefaultCfgFile); return bRetVal; }
BOOL COptionsSystem::OnInitDialog() { COptions_PropertyPage::OnInitDialog(); PWSprefs *prefs = PWSprefs::GetInstance(); PWSprefs::ConfigOption configoption; StringX sx_CF = prefs->GetConfigFile(configoption).c_str(); std::wstring wsCO(L""); switch (configoption) { case PWSprefs::CF_NONE: LoadAString(sx_CF, IDS_NONE); break; case PWSprefs::CF_REGISTRY: LoadAString(sx_CF, IDS_REGISTRY); break; case PWSprefs::CF_FILE_RO: LoadAString(wsCO, IDS_READ_ONLY); break; case PWSprefs::CF_FILE_RW: case PWSprefs::CF_FILE_RW_NEW: LoadAString(wsCO, IDS_READ_WRITE); break; default: ASSERT(0); } CString cs_text; // R/W status GetDlgItem(IDC_STATIC_RWSTATUS)->SetWindowText(wsCO.c_str()); // Config file name & location cs_text = PWSUtil::NormalizeTTT(sx_CF, 60).c_str(); GetDlgItem(IDC_CONFIGFILE)->SetWindowText(cs_text); // Effective host & user used in config file if (configoption == PWSprefs::CF_FILE_RO || configoption == PWSprefs::CF_FILE_RW || configoption == PWSprefs::CF_FILE_RW_NEW) { stringT hn = SysInfo::GetInstance()->GetEffectiveHost(); PWSprefs::XMLify(charT('H'), hn); stringT un = SysInfo::GetInstance()->GetEffectiveUser(); PWSprefs::XMLify(charT('u'), un); cs_text.Format(IDS_HOSTUSER, static_cast<LPCWSTR>(hn.c_str()), static_cast<LPCWSTR>(un.c_str())); GetDlgItem(IDC_STATIC_HOSTUSER)->SetWindowText(cs_text); } bool bofferdeleteregistry = prefs->OfferDeleteRegistry(); bool boffermigrate2appdata = OfferConfigMigration(); if (!bofferdeleteregistry) { GetDlgItem(IDC_REGDEL)->ShowWindow(SW_HIDE); GetDlgItem(IDC_REGDEL)->EnableWindow(FALSE); } if (!boffermigrate2appdata) { GetDlgItem(IDC_MIGRATETOAPPDATA)->ShowWindow(SW_HIDE); GetDlgItem(IDC_MIGRATETOAPPDATA)->EnableWindow(FALSE); } if (!bofferdeleteregistry && !boffermigrate2appdata) { GetDlgItem(IDC_CONFIG_GRP)->ShowWindow(SW_HIDE); GetDlgItem(IDC_APPLYCONFIGCHANGES)->ShowWindow(SW_HIDE); } else { GetDlgItem(IDC_APPLYCONFIGCHANGES)->ShowWindow(SW_SHOW); } GetDlgItem(IDC_APPLYCONFIGCHANGES)->EnableWindow(FALSE); CSpinButtonCtrl *pspin = (CSpinButtonCtrl *)GetDlgItem(IDC_RESPIN); pspin->SetBuddy(GetDlgItem(IDC_MAXREITEMS)); pspin->SetRange(M_prefminREItems(), M_prefmaxREItems()); pspin->SetBase(10); pspin->SetPos(m_MaxREItems); pspin = (CSpinButtonCtrl *)GetDlgItem(IDC_MRUSPIN); pspin->SetBuddy(GetDlgItem(IDC_MAXMRUITEMS)); pspin->SetRange(M_prefminMRU(), M_prefmaxMRU()); pspin->SetBase(10); pspin->SetPos(m_MaxMRUItems); OnUseSystemTray(); if (InitToolTip(TTS_BALLOON | TTS_NOPREFIX, 0)) { m_Help1.Init(IDB_QUESTIONMARK); m_Help2.Init(IDB_QUESTIONMARK); // Note naming convention: string IDS_xxx corresponds to control IDC_xxx_HELP AddTool(IDC_REGDELHELP, IDS_REGDEL); AddTool(IDC_MIGRATETOAPPDATAHELP, IDS_MIGRATETOAPPDATA); ActivateToolTip(); } else { m_Help1.EnableWindow(FALSE); m_Help1.ShowWindow(SW_HIDE); m_Help2.EnableWindow(FALSE); m_Help2.ShowWindow(SW_HIDE); } if (!bofferdeleteregistry) { m_Help1.EnableWindow(FALSE); m_Help1.ShowWindow(SW_HIDE); } if (!boffermigrate2appdata) { m_Help2.EnableWindow(FALSE); m_Help2.ShowWindow(SW_HIDE); } return TRUE; // return TRUE unless you set the focus to a control }