123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- /*
- * WelcomeDialog.cpp
- * -----------------
- * Purpose: "First run" OpenMPT welcome dialog
- * Notes : (currently none)
- * Authors: OpenMPT Devs
- * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
- */
- #include "stdafx.h"
- #include "WelcomeDialog.h"
- #include "resource.h"
- #include "Mainfrm.h"
- #include "../common/mptStringBuffer.h"
- #include "InputHandler.h"
- #include "CommandSet.h"
- #include "SelectPluginDialog.h"
- #include "UpdateCheck.h"
- OPENMPT_NAMESPACE_BEGIN
- BEGIN_MESSAGE_MAP(WelcomeDlg, CDialog)
- ON_COMMAND(IDC_BUTTON1, &WelcomeDlg::OnOptions)
- ON_COMMAND(IDC_BUTTON2, &WelcomeDlg::OnScanPlugins)
- END_MESSAGE_MAP()
- WelcomeDlg::WelcomeDlg(CWnd *parent)
- {
- Create(IDD_WECLOME, parent);
- CenterWindow(parent);
- }
- static mpt::PathString GetFullKeyPath(const char *keyFile)
- {
- return theApp.GetInstallPkgPath() + P_("extraKeymaps\\") + mpt::PathString::FromUTF8(keyFile) + P_(".mkb");
- }
- BOOL WelcomeDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- #ifdef MPT_WITH_VST
- HKEY hkEnum = NULL;
- TCHAR str[MAX_PATH];
- DWORD datasize = sizeof(str);
- DWORD datatype = REG_SZ;
- if(RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\VST"), &hkEnum) == ERROR_SUCCESS
- && RegQueryValueEx(hkEnum, _T("VSTPluginsPath"), 0, &datatype, (LPBYTE)str, &datasize) == ERROR_SUCCESS)
- {
- m_vstPath = mpt::PathString::FromNative(ParseMaybeNullTerminatedStringFromBufferWithSizeInBytes<mpt::winstring>(str, datasize));
- } else if(SHGetSpecialFolderPath(0, str, CSIDL_PROGRAM_FILES, FALSE))
- {
- m_vstPath = mpt::PathString::FromNative(ParseMaybeNullTerminatedStringFromBufferWithSizeInBytes<mpt::winstring>(str, datasize)) + P_("\\Steinberg\\VstPlugins\\");
- if(!m_vstPath.IsDirectory())
- {
- m_vstPath = mpt::PathString();
- }
- }
- SetDlgItemText(IDC_EDIT2, mpt::ToCString(TrackerSettings::Instance().defaultArtist));
- if(!m_vstPath.empty())
- {
- SetDlgItemText(IDC_EDIT1, m_vstPath.AsNative().c_str());
- if(TrackerSettings::Instance().PathPlugins.GetDefaultDir().empty())
- {
- TrackerSettings::Instance().PathPlugins.SetDefaultDir(m_vstPath);
- }
- } else
- #endif // MPT_WITH_VST
- {
- SetDlgItemText(IDC_EDIT1, _T("No plugin path found!"));
- GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
- }
- const char *keyFile = nullptr;
- const TCHAR *keyFileName = nullptr;
- const uint16 language = LOWORD(GetKeyboardLayout(0)), primaryLang = language & 0x3FF;
- CComboBox *combo = (CComboBox *)GetDlgItem(IDC_COMBO1);
- combo->AddString(_T("OpenMPT / Chromatic (Default)"));
- combo->SetCurSel(0);
- switch(primaryLang)
- {
- case LANG_GERMAN:
- keyFile = "DE_jojo";
- keyFileName = _T("German");
- break;
- case LANG_SPANISH:
- // Spanish latin-american keymap, so we ignore Spain.
- if(language != SUBLANG_SPANISH_MODERN && language != SUBLANG_SPANISH)
- {
- keyFile = "es-LA_mpt_(jmkz)";
- keyFileName = _T("Spanish");
- }
- break;
- case LANG_FRENCH:
- keyFile = "FR_mpt_(legovitch)";
- keyFileName = _T("French");
- break;
- case LANG_NORWEGIAN:
- keyFile = "NO_mpt_classic_(rakib)";
- keyFileName = _T("Norwegian");
- break;
- }
- if(keyFile != nullptr)
- {
- if(GetFullKeyPath(keyFile).IsFile())
- {
- int i = combo->AddString(_T("OpenMPT / Chromatic (") + CString(keyFileName) + _T(")"));
- combo->SetItemDataPtr(i, (void *)keyFile);
- combo->SetCurSel(i);
- // As this is presented as the default, load it right now, even if the user closes the dialog through the close button
- auto cmdSet = std::make_unique<CCommandSet>();
- cmdSet->LoadFile(GetFullKeyPath(keyFile));
- CMainFrame::GetInputHandler()->SetNewCommandSet(cmdSet.get());
- }
- }
- combo->SetItemDataPtr(combo->AddString(_T("Impulse Tracker")), (void*)("US_mpt-it2_classic"));
- combo->SetItemDataPtr(combo->AddString(_T("FastTracker 2")), (void*)("US_mpt-ft2_classic"));
- CheckDlgButton(IDC_CHECK1, BST_CHECKED);
- CheckDlgButton(IDC_CHECK3, BST_CHECKED);
- #if defined(MPT_ENABLE_UPDATE)
- GetDlgItem(IDC_STATIC_WELCOME_STATISTICS)->SetWindowText(mpt::ToCString(mpt::String::Replace(CUpdateCheck::GetStatisticsUserInformation(false), U_("\n"), U_(" "))));
- #endif // MPT_ENABLE_UPDATE
- CheckDlgButton(IDC_CHECK2, (TrackerSettings::Instance().patternFont.Get().name == PATTERNFONT_LARGE) ? BST_CHECKED : BST_UNCHECKED);
- ShowWindow(SW_SHOW);
- return TRUE;
- }
- void WelcomeDlg::OnOptions()
- {
- OnOK();
- CMainFrame::GetMainFrame()->PostMessage(WM_COMMAND, ID_VIEW_OPTIONS);
- }
- void WelcomeDlg::OnScanPlugins()
- {
- #ifdef MPT_WITH_VST
- CSelectPluginDlg::ScanPlugins(m_vstPath, this);
- #endif // MPT_WITH_VST
- }
- void WelcomeDlg::OnOK()
- {
- CDialog::OnOK();
- #if defined(MPT_ENABLE_UPDATE)
- bool runUpdates = IsDlgButtonChecked(IDC_CHECK1) != BST_UNCHECKED;
- TrackerSettings::Instance().UpdateIntervalDays = (runUpdates ? 7 : -1);
- TrackerSettings::Instance().UpdateStatistics = (IsDlgButtonChecked(IDC_CHECK3) != BST_UNCHECKED);
- TrackerSettings::Instance().UpdateShowUpdateHint = false;
- TrackerSettings::Instance().UpdateStatisticsConsentAsked = true;
- CString artistName;
- GetDlgItemText(IDC_EDIT2, artistName);
- TrackerSettings::Instance().defaultArtist = mpt::ToUnicode(artistName);
- #endif // MPT_ENABLE_UPDATE
- if(IsDlgButtonChecked(IDC_CHECK2) != BST_UNCHECKED)
- {
- FontSetting font = TrackerSettings::Instance().patternFont;
- font.name = PATTERNFONT_LARGE;
- TrackerSettings::Instance().patternFont = font;
- }
- CComboBox *combo = (CComboBox *)GetDlgItem(IDC_COMBO1);
- const char *keyFile = static_cast<char *>(combo->GetItemDataPtr(combo->GetCurSel()));
- auto cmdSet = std::make_unique<CCommandSet>();
- if(keyFile != nullptr)
- cmdSet->LoadFile(GetFullKeyPath(keyFile));
- else
- cmdSet->LoadDefaultKeymap();
- CMainFrame::GetInputHandler()->SetNewCommandSet(cmdSet.get());
- #if defined(MPT_ENABLE_UPDATE)
- if(runUpdates)
- {
- CUpdateCheck::DoAutoUpdateCheck();
- }
- #endif // MPT_ENABLE_UPDATE
- CMainFrame::GetMainFrame()->PostMessage(WM_MOD_INVALIDATEPATTERNS, HINT_MPTOPTIONS);
- DestroyWindow();
- }
- void WelcomeDlg::OnCancel()
- {
- CDialog::OnCancel();
- DestroyWindow();
- }
- OPENMPT_NAMESPACE_END
|