aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp
diff options
context:
space:
mode:
authorJean-Francois Mauguit <jfmauguit@mac.com>2024-09-24 09:03:25 -0400
committerGitHub <noreply@github.com>2024-09-24 09:03:25 -0400
commitbab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp
parent4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff)
parent20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff)
downloadwinamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp')
-rw-r--r--Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp202
1 files changed, 202 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp b/Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp
new file mode 100644
index 00000000..fa589f57
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/mptrack/WelcomeDialog.cpp
@@ -0,0 +1,202 @@
+/*
+ * 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