From 68ba944e2a2c46b6722aa4ff2d2efdec45f5a8e0 Mon Sep 17 00:00:00 2001 From: Scott Hanson Date: Fri, 20 Dec 2024 17:01:07 -0500 Subject: [PATCH] My attempt at Paul's Search Log files for Show Folder Paths Dialog, Sort Backups Folder List, remove boost build configs, start experimenting with building ARM64 --- xLights/RestoreBackupDialog.cpp | 27 ++- xLights/RestoreBackupDialog.h | 22 +- xLights/ShowFolderSearchDialog.cpp | 224 +++++++++++++++++++ xLights/ShowFolderSearchDialog.h | 71 ++++++ xLights/Xlights.vcxproj | 246 +++++++++++++++++++++ xLights/Xlights.vcxproj.filters | 34 ++- xLights/tmGridCell.cpp | 4 +- xLights/tmGridCell.h | 4 +- xLights/wxsmith/ShowFolderSearchDialog.wxs | 69 ++++++ xLights/wxsmith/xLightsframe.wxs | 4 + xLights/xLights.cbp | 4 + xLights/xLights.sln | 28 +-- xLights/xLightsMain.cpp | 71 +++--- xLights/xLightsMain.h | 4 + 14 files changed, 727 insertions(+), 85 deletions(-) create mode 100644 xLights/ShowFolderSearchDialog.cpp create mode 100644 xLights/ShowFolderSearchDialog.h create mode 100644 xLights/wxsmith/ShowFolderSearchDialog.wxs diff --git a/xLights/RestoreBackupDialog.cpp b/xLights/RestoreBackupDialog.cpp index 1c4a87b643..b5bdc45cde 100644 --- a/xLights/RestoreBackupDialog.cpp +++ b/xLights/RestoreBackupDialog.cpp @@ -89,17 +89,17 @@ struct BModel { }; //(*IdInit(RestoreBackupDialog) -const long RestoreBackupDialog::ID_STATICTEXT1 = wxNewId(); -const long RestoreBackupDialog::ID_LISTBOX_BACKUPS = wxNewId(); -const long RestoreBackupDialog::ID_PANEL1 = wxNewId(); -const long RestoreBackupDialog::ID_CHECKLISTBOX_LAYOUT = wxNewId(); -const long RestoreBackupDialog::ID_TREECTRL_LAYOUT = wxNewId(); -const long RestoreBackupDialog::ID_SPLITTERWINDOW2 = wxNewId(); -const long RestoreBackupDialog::ID_CHECKLISTBOX_SEQUENCES = wxNewId(); -const long RestoreBackupDialog::ID_NOTEBOOK1 = wxNewId(); -const long RestoreBackupDialog::ID_SPLITTERWINDOW1 = wxNewId(); -const long RestoreBackupDialog::ID_STATICTEXT_BACKUPFOLDER = wxNewId(); -const long RestoreBackupDialog::ID_BUTTON_RUN = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_STATICTEXT1 = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_LISTBOX_BACKUPS = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_PANEL1 = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_CHECKLISTBOX_LAYOUT = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_TREECTRL_LAYOUT = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_SPLITTERWINDOW2 = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_CHECKLISTBOX_SEQUENCES = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_NOTEBOOK1 = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_SPLITTERWINDOW1 = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_STATICTEXT_BACKUPFOLDER = wxNewId(); +const wxWindowID RestoreBackupDialog::ID_BUTTON_RUN = wxNewId(); //*) BEGIN_EVENT_TABLE(RestoreBackupDialog,wxDialog) @@ -258,10 +258,13 @@ void RestoreBackupDialog::ListBackupDir() wxString folder; bool fcont = directory.GetFirst(&folder, "*"); + wxArrayString dirList; while (fcont) { - ListBoxBackups->Append(folder); + dirList.Add(folder); fcont = directory.GetNext(&folder); } + dirList.Sort(true); + ListBoxBackups->Append(dirList); } void RestoreBackupDialog::PopulateLayoutDataBox(wxString const& folder) diff --git a/xLights/RestoreBackupDialog.h b/xLights/RestoreBackupDialog.h index 38b7020406..66f6e21263 100644 --- a/xLights/RestoreBackupDialog.h +++ b/xLights/RestoreBackupDialog.h @@ -56,17 +56,17 @@ class RestoreBackupDialog: public wxDialog protected: //(*Identifiers(RestoreBackupDialog) - static const long ID_STATICTEXT1; - static const long ID_LISTBOX_BACKUPS; - static const long ID_PANEL1; - static const long ID_CHECKLISTBOX_LAYOUT; - static const long ID_TREECTRL_LAYOUT; - static const long ID_SPLITTERWINDOW2; - static const long ID_CHECKLISTBOX_SEQUENCES; - static const long ID_NOTEBOOK1; - static const long ID_SPLITTERWINDOW1; - static const long ID_STATICTEXT_BACKUPFOLDER; - static const long ID_BUTTON_RUN; + static const wxWindowID ID_STATICTEXT1; + static const wxWindowID ID_LISTBOX_BACKUPS; + static const wxWindowID ID_PANEL1; + static const wxWindowID ID_CHECKLISTBOX_LAYOUT; + static const wxWindowID ID_TREECTRL_LAYOUT; + static const wxWindowID ID_SPLITTERWINDOW2; + static const wxWindowID ID_CHECKLISTBOX_SEQUENCES; + static const wxWindowID ID_NOTEBOOK1; + static const wxWindowID ID_SPLITTERWINDOW1; + static const wxWindowID ID_STATICTEXT_BACKUPFOLDER; + static const wxWindowID ID_BUTTON_RUN; //*) private: diff --git a/xLights/ShowFolderSearchDialog.cpp b/xLights/ShowFolderSearchDialog.cpp new file mode 100644 index 0000000000..ccd6db48c6 --- /dev/null +++ b/xLights/ShowFolderSearchDialog.cpp @@ -0,0 +1,224 @@ +/*************************************************************** + * This source files comes from the xLights project + * https://www.xlights.org + * https://github.com/xLightsSequencer/xLights + * See the github commit history for a record of contributing + * developers. + * Copyright claimed based on commit dates recorded in Github + * License: https://github.com/xLightsSequencer/xLights/blob/master/License.txt + **************************************************************/ + +#include "ShowFolderSearchDialog.h" + +//(*InternalHeaders(ShowFolderSearchDialog) +#include +#include +//*) + +#include +#include +#include +#include "ExternalHooks.h" +#include "xLightsMain.h" + +#include +#include + +//(*IdInit(ShowFolderSearchDialog) +const wxWindowID ShowFolderSearchDialog::ID_LISTCTRL_FOLDERS = wxNewId(); +const wxWindowID ShowFolderSearchDialog::ID_STATICTEXT_BACKUPFOLDER = wxNewId(); +const wxWindowID ShowFolderSearchDialog::ID_BUTTON_TEMP = wxNewId(); +const wxWindowID ShowFolderSearchDialog::ID_BUTTON_PERMANENT = wxNewId(); +const wxWindowID ShowFolderSearchDialog::ID_BUTTON_OPEN = wxNewId(); +//*) + +BEGIN_EVENT_TABLE(ShowFolderSearchDialog,wxDialog) + //(*EventTable(ShowFolderSearchDialog) + //*) + +END_EVENT_TABLE() + +ShowFolderSearchDialog::ShowFolderSearchDialog(xLightsFrame* parent) +{ + //(*Initialize(ShowFolderSearchDialog) + wxBoxSizer* BoxSizer1; + wxFlexGridSizer* FlexGridSizer1; + + Create(parent, wxID_ANY, _("Find Show Folder Dialog"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX, _T("wxID_ANY")); + SetClientSize(wxDLG_UNIT(parent,wxSize(400,400))); + SetMinSize(wxSize(800,400)); + FlexGridSizer1 = new wxFlexGridSizer(3, 1, 0, 0); + FlexGridSizer1->AddGrowableCol(0); + FlexGridSizer1->AddGrowableRow(0); + ListCtrl_Folders = new wxListCtrl(this, ID_LISTCTRL_FOLDERS, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_SINGLE_SEL, wxDefaultValidator, _T("ID_LISTCTRL_FOLDERS")); + FlexGridSizer1->Add(ListCtrl_Folders, 0, wxEXPAND, 5); + StaticTextBackUpFolder = new wxStaticText(this, ID_STATICTEXT_BACKUPFOLDER, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT, _T("ID_STATICTEXT_BACKUPFOLDER")); + FlexGridSizer1->Add(StaticTextBackUpFolder, 1, wxALL|wxEXPAND, 5); + BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); + ButtonTemp = new wxButton(this, ID_BUTTON_TEMP, _("Change Temporary"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON_TEMP")); + BoxSizer1->Add(ButtonTemp, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + ButtonPermanent = new wxButton(this, ID_BUTTON_PERMANENT, _("Change Permanently"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON_PERMANENT")); + BoxSizer1->Add(ButtonPermanent, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + ButtonOpen = new wxButton(this, ID_BUTTON_OPEN, _("Open in Explorer"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON_OPEN")); + BoxSizer1->Add(ButtonOpen, 0, wxALL, 5); + BoxSizer1->Add(-1,-1,1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); + FlexGridSizer1->Add(BoxSizer1, 1, wxALL|wxEXPAND, 5); + SetSizer(FlexGridSizer1); + Layout(); + + Connect(ID_LISTCTRL_FOLDERS, wxEVT_COMMAND_LIST_ITEM_SELECTED, (wxObjectEventFunction)&ShowFolderSearchDialog::OnListCtrl_FoldersItemSelect); + Connect(ID_BUTTON_TEMP, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&ShowFolderSearchDialog::OnButtonTempClick); + Connect(ID_BUTTON_PERMANENT, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&ShowFolderSearchDialog::OnButtonPermanentClick); + Connect(ID_BUTTON_OPEN, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&ShowFolderSearchDialog::OnButtonOpenClick); + //*) + + ListCtrl_Folders->AppendColumn("Folder", wxLIST_FORMAT_LEFT, + wxLIST_AUTOSIZE); + ListCtrl_Folders->AppendColumn("Opens", wxLIST_FORMAT_CENTRE); + + _xLights = parent; + auto const& folder = FindLogFolder(); + auto const& files = FindLogFiles(folder); + FindShowFolders(files, folder); + ValidateWindow(); +} + + +ShowFolderSearchDialog::~ShowFolderSearchDialog() +{ + //(*Destroy(ShowFolderSearchDialog) + //*) +} + +void ShowFolderSearchDialog::OnInit(wxInitDialogEvent& event) +{ + Layout(); +} + +void ShowFolderSearchDialog::ValidateWindow() +{ + ButtonOpen->Enable(ListCtrl_Folders->GetSelectedItemCount() > 0); + ButtonPermanent->Enable(ListCtrl_Folders->GetSelectedItemCount() > 0); + ButtonTemp->Enable(ListCtrl_Folders->GetSelectedItemCount() > 0); +} + +wxString ShowFolderSearchDialog::FindLogFolder() const +{ + static log4cpp::Category& logger_base = log4cpp::Category::getInstance(std::string("log_base")); + wxString dir; +#ifdef __WXMSW__ + wxGetEnv("APPDATA", &dir); + if (dir.EndsWith("/") || dir.EndsWith("\\")) { + dir = dir.Left(dir.Length() - 1); + } + dir = dir + wxFileName::GetPathSeparator(); +#endif +#ifdef __WXOSX__ + wxFileName home; + home.AssignHomeDir(); + dir = home.GetFullPath(); + if (dir.EndsWith("/")) { + dir = dir.Left(dir.Length() - 1); + } + dir = dir + "/Library/Logs/"; +#endif +#ifdef __LINUX__ + dir = "/tmp/"; +#endif + if (!wxDir::Exists(dir)) { + if (wxDir::Exists(xLightsFrame::CurrentDir + wxFileName::GetPathSeparator())) { + dir = xLightsFrame::CurrentDir + wxFileName::GetPathSeparator(); + } else if (wxDir::Exists(wxGetCwd() + wxFileName::GetPathSeparator())) { + dir = wxGetCwd() + wxFileName::GetPathSeparator(); + } + } + return dir; +} + +wxArrayString ShowFolderSearchDialog::FindLogFiles(wxString const& folder) const{ + wxArrayString files; + GetAllFilesInDir(folder, files, "xLights_l4cpp.log*", wxDIR_DEFAULT); + files.Sort(); + return files; +} + +void ShowFolderSearchDialog::FindShowFolders(wxArrayString const& logs, wxString const& folder) { + std::map showFolders; + //Show directory set to : D:\lights_data\cubicle. + static wxRegEx logregex("Show directory set to : (.*)\\."); + wxProgressDialog dlg("Searching " + folder, "Searching " + folder, logs.size(), this, wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT); + dlg.Show(); + int i{ 0 }; + for (auto const& log : logs) { + if (FileExists(log)) { + dlg.Update(i, "Reading " + log); + wxFileName fn(log); + wxFileInputStream input(fn.GetFullPath()); + if (input.IsOk()) { + wxTextInputStream text(input); + while (!input.Eof()) { + wxString const& line = text.ReadLine(); + dlg.Pulse(); + if (line.Contains("Show directory set to")) { + if (logregex.Matches(line)) { + wxString const& folder = logregex.GetMatch(line, 1); + if (wxDir::Exists(folder)) { + if (showFolders.find(folder) == showFolders.end()) { + showFolders[folder] = 1; + } else { + showFolders[folder]++; + } + } + } + } + } + } + } + if (dlg.WasCancelled()) { + break; + } +#if defined(_DEBUG) + break; +#endif + ++i; + } + + ListCtrl_Folders->Freeze(); + ListCtrl_Folders->DeleteAllItems(); + + for (auto const& [folder,opens ]: showFolders) { + auto item = ListCtrl_Folders->InsertItem(ListCtrl_Folders->GetItemCount(), folder); + ListCtrl_Folders->SetItem(item, 1, wxString::Format("%i", opens)); + } + ListCtrl_Folders->SetColumnWidth(0, wxLIST_AUTOSIZE); + ListCtrl_Folders->Thaw(); +} + +void ShowFolderSearchDialog::OnListCtrl_FoldersItemSelect(wxListEvent& event) +{ + StaticTextBackUpFolder->SetLabelText(event.GetLabel()); + _selectedFolder = event.GetLabel(); + ValidateWindow(); +} + +void ShowFolderSearchDialog::OnButtonTempClick(wxCommandEvent& event) +{ + if (!_selectedFolder.empty()) { + _xLights->SetDir(_selectedFolder, false); + } + EndDialog(0); +} + +void ShowFolderSearchDialog::OnButtonPermanentClick(wxCommandEvent& event) +{ + if (!_selectedFolder.empty()) { + _xLights->SetDir(_selectedFolder, true); + } + EndDialog(0); +} + +void ShowFolderSearchDialog::OnButtonOpenClick(wxCommandEvent& event) { + if (!_selectedFolder.empty()) { + wxLaunchDefaultApplication(_selectedFolder); + } +} diff --git a/xLights/ShowFolderSearchDialog.h b/xLights/ShowFolderSearchDialog.h new file mode 100644 index 0000000000..77df380f39 --- /dev/null +++ b/xLights/ShowFolderSearchDialog.h @@ -0,0 +1,71 @@ +#pragma once + +/*************************************************************** + * This source files comes from the xLights project + * https://www.xlights.org + * https://github.com/xLightsSequencer/xLights + * See the github commit history for a record of contributing + * developers. + * Copyright claimed based on commit dates recorded in Github + * License: https://github.com/xLightsSequencer/xLights/blob/master/License.txt + **************************************************************/ + + //(*Headers(ShowFolderSearchDialog) + #include + #include + #include + #include + #include + //*) + + #include + #include + +class wxMouseEvent; +class wxCommandEvent; +class xLightsFrame; + +class ShowFolderSearchDialog: public wxDialog +{ + xLightsFrame* _xLights = nullptr; + wxString _selectedFolder; + + public: + ShowFolderSearchDialog(xLightsFrame* parent); + virtual ~ShowFolderSearchDialog(); + + //(*Declarations(ShowFolderSearchDialog) + wxButton* ButtonOpen; + wxButton* ButtonPermanent; + wxButton* ButtonTemp; + wxListCtrl* ListCtrl_Folders; + wxStaticText* StaticTextBackUpFolder; + //*) + +protected: + //(*Identifiers(ShowFolderSearchDialog) + static const wxWindowID ID_LISTCTRL_FOLDERS; + static const wxWindowID ID_STATICTEXT_BACKUPFOLDER; + static const wxWindowID ID_BUTTON_TEMP; + static const wxWindowID ID_BUTTON_PERMANENT; + static const wxWindowID ID_BUTTON_OPEN; + //*) + + +private: + + void ValidateWindow(); + wxString FindLogFolder() const; + wxArrayString FindLogFiles(wxString const& folder) const; + void FindShowFolders(wxArrayString const& logs, wxString const& folder); + + public: + //(*Handlers(ShowFolderSearchDialog) + void OnInit(wxInitDialogEvent& event); + void OnListCtrl_FoldersItemSelect(wxListEvent& event); + void OnButtonTempClick(wxCommandEvent& event); + void OnButtonPermanentClick(wxCommandEvent& event); + void OnButtonOpenClick(wxCommandEvent& event); + //*) + DECLARE_EVENT_TABLE() +}; diff --git a/xLights/Xlights.vcxproj b/xLights/Xlights.vcxproj index bafeafad50..6786446bf1 100644 --- a/xLights/Xlights.vcxproj +++ b/xLights/Xlights.vcxproj @@ -1,10 +1,26 @@ + + Debug + ARM + + + Debug + ARM64EC + Debug Win32 + + Release + ARM + + + Release + ARM64EC + Release Win32 @@ -54,6 +70,24 @@ + + Application + true + v143 + Unicode + false + x64 + + + + Application + true + v143 + Unicode + false + x64 + + Application false @@ -65,6 +99,26 @@ + + Application + false + v143 + true + Unicode + false + x64 + + + + Application + false + v143 + true + Unicode + false + x64 + + @@ -79,9 +133,21 @@ + + + + + + + + + + + + true @@ -94,6 +160,18 @@ $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\lib\windows;./ffmpeg-dev/lib;$(VCToolsInstallDir)lib\x64;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs true + + true + $(WXWIDGETS_ROOT)\include;$(WXWIDGETS_ROOT)\include\msvc;$(WXWIDGETS_ROOT)\3rdparty;..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;..\..\wxWidgets\3rdparty;$(IncludePath);..\include;..\include\ffmpeg-6\include;$(ProjectDir);..\include\zlib;..\dependencies\libxlsxwriter\include;..\dependencies\lua\src;..\include\sol2-3.2.2\;..\dependencies\pybind11\include;$(Python_ROOT_DIR)\include + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\lib\windows;./ffmpeg-dev/lib;$(VCToolsInstallDir)lib\x64;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs + true + + + true + $(WXWIDGETS_ROOT)\include;$(WXWIDGETS_ROOT)\include\msvc;$(WXWIDGETS_ROOT)\3rdparty;..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;..\..\wxWidgets\3rdparty;$(IncludePath);..\include;..\include\ffmpeg-6\include;$(ProjectDir);..\include\zlib;..\dependencies\libxlsxwriter\include;..\dependencies\lua\src;..\include\sol2-3.2.2\;..\dependencies\pybind11\include;$(Python_ROOT_DIR)\include + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\lib\windows;./ffmpeg-dev/lib;$(VCToolsInstallDir)lib\x64;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs + true + false ..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;$(IncludePath);ffmpeg-dev\include;..\include;$(ProjectDir);..\include\zlib @@ -104,6 +182,16 @@ $(WXWIDGETS_ROOT)\include;$(WXWIDGETS_ROOT)\include\msvc;$(WXWIDGETS_ROOT)\3rdparty;..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;..\..\wxWidgets\3rdparty;$(IncludePath);..\include\ffmpeg-6\include;..\include;$(ProjectDir);..\include\zlib;..\dependencies\libxlsxwriter\include;..\include\sol2-3.2.2\;..\dependencies\lua\src;..\dependencies\pybind11\include;$(Python_ROOT_DIR)\include $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs + + false + $(WXWIDGETS_ROOT)\include;$(WXWIDGETS_ROOT)\include\msvc;$(WXWIDGETS_ROOT)\3rdparty;..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;..\..\wxWidgets\3rdparty;$(IncludePath);..\include\ffmpeg-6\include;..\include;$(ProjectDir);..\include\zlib;..\dependencies\libxlsxwriter\include;..\include\sol2-3.2.2\;..\dependencies\lua\src;..\dependencies\pybind11\include;$(Python_ROOT_DIR)\include + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs + + + false + $(WXWIDGETS_ROOT)\include;$(WXWIDGETS_ROOT)\include\msvc;$(WXWIDGETS_ROOT)\3rdparty;..\..\wxWidgets\include;..\..\wxWidgets\include\msvc;..\..\wxWidgets\3rdparty;$(IncludePath);..\include\ffmpeg-6\include;..\include;$(ProjectDir);..\include\zlib;..\dependencies\libxlsxwriter\include;..\include\sol2-3.2.2\;..\dependencies\lua\src;..\dependencies\pybind11\include;$(Python_ROOT_DIR)\include + $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;..\..\wxWidgets\lib\vc_x64_lib;$(WXWIDGETS_ROOT)\lib\vc_x64_lib;..\lib\windows64;GL;..\dependencies\lua\src;$(Python_ROOT_DIR)\libs + false @@ -155,6 +243,74 @@ copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + + + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;%(PreprocessorDefinitions);WXDEBUG;__WXDEBUG__;_CRT_SECURE_NO_WARNINGS;IGNORE_VENDORS;$(DefineConstants);wxUSE_WEBP + true + stdcpp20 + /D "NOMINMAX" + Async + + + Windows + true + libcmt.lib + false + + + xLightsApp64.manifest %(AdditionalManifestFiles) + true + + + copy "$(SolutionDir)..\bin\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin64\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*.cfg" "$(TargetDir)" +copy "$(SolutionDir)..\bin\xlights.windows.properties" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" +copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" +xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + + + + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;%(PreprocessorDefinitions);WXDEBUG;__WXDEBUG__;_CRT_SECURE_NO_WARNINGS;IGNORE_VENDORS;$(DefineConstants);wxUSE_WEBP + true + stdcpp20 + /D "NOMINMAX" + Async + + + Windows + true + libcmt.lib + false + + + xLightsApp64.manifest %(AdditionalManifestFiles) + true + + + copy "$(SolutionDir)..\bin\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin64\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*.cfg" "$(TargetDir)" +copy "$(SolutionDir)..\bin\xlights.windows.properties" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" +copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" +xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + @@ -222,6 +378,94 @@ copy "$(SolutionDir)..\bin\xlights.windows.properties" "$(TargetDir)" copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + + + + + + Level3 + NotUsing + MaxSpeed + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;IGNORE_VENDORS;$(DefineConstants) + true + stdcpp20 + /D "NOMINMAX" %(AdditionalOptions) + Async + AnySuitable + Speed + true + + + Windows + true + true + false + true + libcmt.lib + true + + + xLightsApp64.manifest %(AdditionalManifestFiles) + $(IntDir)$(TargetName)$(TargetExt).embed.manifest + true + + + $(IntDir)$(TargetName)$(TargetExt).embed.manifest.res + + + copy "$(SolutionDir)..\bin\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin64\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*.cfg" "$(TargetDir)" +copy "$(SolutionDir)..\bin\xlights.windows.properties" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" +copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" +xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + + + + + + Level3 + NotUsing + MaxSpeed + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS;IGNORE_VENDORS;$(DefineConstants) + true + stdcpp20 + /D "NOMINMAX" %(AdditionalOptions) + Async + AnySuitable + Speed + true + + + Windows + true + true + false + true + libcmt.lib + true + + + xLightsApp64.manifest %(AdditionalManifestFiles) + $(IntDir)$(TargetName)$(TargetExt).embed.manifest + true + + + $(IntDir)$(TargetName)$(TargetExt).embed.manifest.res + + + copy "$(SolutionDir)..\bin\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin64\*.dll" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*.cfg" "$(TargetDir)" +copy "$(SolutionDir)..\bin\xlights.windows.properties" "$(TargetDir)" +copy "$(SolutionDir)..\bin\*_dictionary" "$(TargetDir)" +copy "$(SolutionDir)..\bin\phoneme_mapping" "$(TargetDir)" +xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r @@ -359,6 +603,7 @@ xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + @@ -875,6 +1120,7 @@ xcopy "$(SolutionDir)..\bin64\Vamp\" "$(TargetDir)Vamp\" /e /y /i /r + diff --git a/xLights/Xlights.vcxproj.filters b/xLights/Xlights.vcxproj.filters index 8d4e86eb35..7979697e28 100644 --- a/xLights/Xlights.vcxproj.filters +++ b/xLights/Xlights.vcxproj.filters @@ -1095,6 +1095,7 @@ Effects\MovingHeadPanels + @@ -2154,20 +2155,12 @@ - - - - - - - - @@ -2176,6 +2169,31 @@ Models\DMX + + Effects + + + Effects + + + Models\DMX + + + Models\DMX + + + Effects\MovingHeadPanels + + + Effects\MovingHeadPanels + + + Effects\MovingHeadPanels + + + Effects\MovingHeadPanels + + diff --git a/xLights/tmGridCell.cpp b/xLights/tmGridCell.cpp index a5b14b2277..03e54d0849 100644 --- a/xLights/tmGridCell.cpp +++ b/xLights/tmGridCell.cpp @@ -20,7 +20,7 @@ wxGridCellButtonRenderer(wxString label) } wxGridCellButtonRenderer:: -~wxGridCellButtonRenderer(void) +~wxGridCellButtonRenderer() { } @@ -58,7 +58,7 @@ wxGridCellButtonEditor(wxString label) } wxGridCellButtonEditor:: -~wxGridCellButtonEditor(void) +~wxGridCellButtonEditor() { } diff --git a/xLights/tmGridCell.h b/xLights/tmGridCell.h index 49d454cafb..c7f6c58a16 100644 --- a/xLights/tmGridCell.h +++ b/xLights/tmGridCell.h @@ -22,7 +22,7 @@ class wxGridCellButtonRenderer : public wxGridCellRenderer { public: wxGridCellButtonRenderer(wxString label); - virtual ~wxGridCellButtonRenderer(void); + virtual ~wxGridCellButtonRenderer(); virtual void Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc, const wxRect &rect, int row, int col, bool isSelected); virtual wxSize GetBestSize(wxGrid &grid, wxGridCellAttr& attr, wxDC &dc, int row, int col); @@ -38,7 +38,7 @@ class wxGridCellButtonEditor : public wxEvtHandler, public wxGridCellEditor { public: wxGridCellButtonEditor(wxString label); - virtual ~wxGridCellButtonEditor(void); + virtual ~wxGridCellButtonEditor(); virtual void Create(wxWindow *parent, wxWindowID id, wxEvtHandler* pEvtHandler); void OnButton(wxCommandEvent &evt); diff --git a/xLights/wxsmith/ShowFolderSearchDialog.wxs b/xLights/wxsmith/ShowFolderSearchDialog.wxs new file mode 100644 index 0000000000..114c0db4a6 --- /dev/null +++ b/xLights/wxsmith/ShowFolderSearchDialog.wxs @@ -0,0 +1,69 @@ + + + + Find Show Folder Dialog + 400,400d + 800,400 + 0 + + + 1 + 3 + 0 + 0 + + + + + + wxEXPAND + 5 + + + + + + + wxALL|wxEXPAND + 5 + + + + + + + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + + + + wxALL + 5 + + + wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL + 5 + + + + wxALL|wxEXPAND + 5 + + + + + diff --git a/xLights/wxsmith/xLightsframe.wxs b/xLights/wxsmith/xLightsframe.wxs index deed87526d..89529a21ab 100755 --- a/xLights/wxsmith/xLightsframe.wxs +++ b/xLights/wxsmith/xLightsframe.wxs @@ -1318,6 +1318,10 @@ + + + + diff --git a/xLights/xLights.cbp b/xLights/xLights.cbp index 4d2efb3994..63db253a73 100755 --- a/xLights/xLights.cbp +++ b/xLights/xLights.cbp @@ -413,6 +413,8 @@ + + @@ -1285,6 +1287,7 @@ + @@ -1547,6 +1550,7 @@ + diff --git a/xLights/xLights.sln b/xLights/xLights.sln index 1d854e3b95..ba52f843ac 100644 --- a/xLights/xLights.sln +++ b/xLights/xLights.sln @@ -11,42 +11,30 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xLights-Test", "..\xLights- EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug with Boost|x64 = Debug with Boost|x64 - Debug with Boost|x86 = Debug with Boost|x86 + Debug|ARM64EC = Debug|ARM64EC Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 - Release with Boost|x64 = Release with Boost|x64 - Release with Boost|x86 = Release with Boost|x86 + Release|ARM64EC = Release|ARM64EC Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug with Boost|x64.ActiveCfg = Debug|x64 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug with Boost|x64.Build.0 = Debug|x64 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug with Boost|x86.ActiveCfg = Debug|Win32 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug with Boost|x86.Build.0 = Debug|Win32 + {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC + {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|ARM64EC.Build.0 = Debug|ARM64EC {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|x64.ActiveCfg = Debug|x64 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|x64.Build.0 = Debug|x64 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|x86.ActiveCfg = Debug|Win32 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Debug|x86.Build.0 = Debug|Win32 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release with Boost|x64.ActiveCfg = Release|x64 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release with Boost|x64.Build.0 = Release|x64 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release with Boost|x86.ActiveCfg = Release|Win32 - {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release with Boost|x86.Build.0 = Release|Win32 + {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|ARM64EC.ActiveCfg = Release|ARM64EC + {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|ARM64EC.Build.0 = Release|ARM64EC {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|x64.ActiveCfg = Release|x64 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|x64.Build.0 = Release|x64 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|x86.ActiveCfg = Release|Win32 {48F219FA-C28E-457B-9A85-DC3A8F949F9B}.Release|x86.Build.0 = Release|Win32 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug with Boost|x64.ActiveCfg = Debug|x64 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug with Boost|x64.Build.0 = Debug|x64 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug with Boost|x86.ActiveCfg = Debug|Win32 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug with Boost|x86.Build.0 = Debug|Win32 + {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug|ARM64EC.ActiveCfg = Debug|ARM64EC {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug|x64.ActiveCfg = Debug|x64 {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Debug|x86.ActiveCfg = Debug|Win32 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release with Boost|x64.ActiveCfg = Release|x64 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release with Boost|x64.Build.0 = Release|x64 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release with Boost|x86.ActiveCfg = Release|Win32 - {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release with Boost|x86.Build.0 = Release|Win32 + {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release|ARM64EC.ActiveCfg = Release|ARM64EC {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release|x64.ActiveCfg = Release|x64 {F6E38B1E-E34C-428D-B081-5719BDDCE385}.Release|x86.ActiveCfg = Release|Win32 EndGlobalSection diff --git a/xLights/xLightsMain.cpp b/xLights/xLightsMain.cpp index 7bc40501a9..fe2851797f 100755 --- a/xLights/xLightsMain.cpp +++ b/xLights/xLightsMain.cpp @@ -78,6 +78,7 @@ #include "ShaderDownloadDialog.h" #include "SpecialOptions.h" #include "SplashDialog.h" +#include "ShowFolderSearchDialog.h" #include "TopEffectsPanel.h" #include "TraceLog.h" #include "UpdaterDialog.h" @@ -274,6 +275,7 @@ const wxWindowID xLightsFrame::ID_MNU_GENERATELYRICS = wxNewId(); const wxWindowID xLightsFrame::ID_MENUITEM_CONVERT = wxNewId(); const wxWindowID xLightsFrame::ID_MNU_PREPAREAUDIO = wxNewId(); const wxWindowID xLightsFrame::ID_MENU_USER_DICT = wxNewId(); +const wxWindowID xLightsFrame::ID_MENU_FIND_SHOW_FOLDER = wxNewId(); const wxWindowID xLightsFrame::ID_MNU_XSCHEDULE = wxNewId(); const wxWindowID xLightsFrame::ID_MENU_XCAPTURE = wxNewId(); const wxWindowID xLightsFrame::ID_MNU_XSCANNER = wxNewId(); @@ -696,37 +698,37 @@ xLightsFrame::xLightsFrame(wxWindow* parent, int ab, wxWindowID id, bool renderO MainAuiManager->AddPane(EditToolBar, wxAuiPaneInfo().Name(_T("Edit Tool Bar")).ToolbarPane().Caption(_("Pane caption")).CloseButton(false).Layer(10).Position(5).Top().Gripper()); ACToolbar = new xlAuiToolBar(this, ID_AUITOOLBAR_AC, wxPoint(1,30), wxDefaultSize, wxAUI_TB_DEFAULT_STYLE); ChoiceParm1 = new wxChoice(ACToolbar, ID_CHOICE_PARM1, wxPoint(276,12), wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE_PARM1")); - ChoiceParm1->SetSelection( ChoiceParm1->Append(_("0")) ); - ChoiceParm1->Append(_("10")); - ChoiceParm1->Append(_("20")); - ChoiceParm1->Append(_("25")); - ChoiceParm1->Append(_("30")); - ChoiceParm1->Append(_("33")); - ChoiceParm1->Append(_("40")); - ChoiceParm1->Append(_("50")); - ChoiceParm1->Append(_("60")); - ChoiceParm1->Append(_("66")); - ChoiceParm1->Append(_("70")); - ChoiceParm1->Append(_("75")); - ChoiceParm1->Append(_("80")); - ChoiceParm1->Append(_("90")); - ChoiceParm1->Append(_("100")); + ChoiceParm1->SetSelection( ChoiceParm1->Append(_T("0")) ); + ChoiceParm1->Append(_T("10")); + ChoiceParm1->Append(_T("20")); + ChoiceParm1->Append(_T("25")); + ChoiceParm1->Append(_T("30")); + ChoiceParm1->Append(_T("33")); + ChoiceParm1->Append(_T("40")); + ChoiceParm1->Append(_T("50")); + ChoiceParm1->Append(_T("60")); + ChoiceParm1->Append(_T("66")); + ChoiceParm1->Append(_T("70")); + ChoiceParm1->Append(_T("75")); + ChoiceParm1->Append(_T("80")); + ChoiceParm1->Append(_T("90")); + ChoiceParm1->Append(_T("100")); ChoiceParm2 = new wxChoice(ACToolbar, ID_CHOICE_PARM2, wxPoint(476,11), wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE_PARM2")); - ChoiceParm2->Append(_("0")); - ChoiceParm2->Append(_("10")); - ChoiceParm2->Append(_("20")); - ChoiceParm2->Append(_("25")); - ChoiceParm2->Append(_("30")); - ChoiceParm2->Append(_("33")); - ChoiceParm2->Append(_("40")); - ChoiceParm2->Append(_("50")); - ChoiceParm2->Append(_("60")); - ChoiceParm2->Append(_("66")); - ChoiceParm2->Append(_("70")); - ChoiceParm2->Append(_("75")); - ChoiceParm2->Append(_("80")); - ChoiceParm2->Append(_("90")); - ChoiceParm2->SetSelection( ChoiceParm2->Append(_("100")) ); + ChoiceParm2->Append(_T("0")); + ChoiceParm2->Append(_T("10")); + ChoiceParm2->Append(_T("20")); + ChoiceParm2->Append(_T("25")); + ChoiceParm2->Append(_T("30")); + ChoiceParm2->Append(_T("33")); + ChoiceParm2->Append(_T("40")); + ChoiceParm2->Append(_T("50")); + ChoiceParm2->Append(_T("60")); + ChoiceParm2->Append(_T("66")); + ChoiceParm2->Append(_T("70")); + ChoiceParm2->Append(_T("75")); + ChoiceParm2->Append(_T("80")); + ChoiceParm2->Append(_T("90")); + ChoiceParm2->SetSelection( ChoiceParm2->Append(_T("100")) ); ACToolbar->AddTool(ID_AUITOOLBARITEM_ACDISABLED, _("Disable"), GetToolbarBitmapBundle("xlAC_DISABLED"), wxNullBitmap, wxITEM_CHECK, wxEmptyString, wxEmptyString, NULL); ACToolbar->AddSeparator(); ACToolbar->AddTool(ID_AUITOOLBARITEM_ACSELECT, _("Select"), GetToolbarBitmapBundle("xlAC_SELECT"), wxNullBitmap, wxITEM_CHECK, _("Select - SHIFT L"), wxEmptyString, NULL); @@ -1025,6 +1027,8 @@ xLightsFrame::xLightsFrame(wxWindow* parent, int ab, wxWindowID id, bool renderO Menu1->Append(MenuItem_PrepareAudio); MenuItemUserDict = new wxMenuItem(Menu1, ID_MENU_USER_DICT, _("User Lyric Dictionary"), wxEmptyString, wxITEM_NORMAL); Menu1->Append(MenuItemUserDict); + MenuItemFindShowFolder = new wxMenuItem(Menu1, ID_MENU_FIND_SHOW_FOLDER, _("Search for Show Folders"), wxEmptyString, wxITEM_NORMAL); + Menu1->Append(MenuItemFindShowFolder); Menu1->AppendSeparator(); MenuItem_xSchedule = new wxMenuItem(Menu1, ID_MNU_XSCHEDULE, _("xSchedu&le"), wxEmptyString, wxITEM_NORMAL); Menu1->Append(MenuItem_xSchedule); @@ -1290,6 +1294,7 @@ xLightsFrame::xLightsFrame(wxWindow* parent, int ab, wxWindowID id, bool renderO Connect(ID_MENUITEM_CONVERT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItemConvertSelected); Connect(ID_MNU_PREPAREAUDIO, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItem_PrepareAudioSelected); Connect(ID_MENU_USER_DICT, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItemUserDictSelected); + Connect(ID_MENU_FIND_SHOW_FOLDER, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItemFindShowFolderSelected); Connect(ID_MNU_XSCHEDULE, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItem_xScheduleSelected); Connect(ID_MENU_XCAPTURE, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItem_xCaptureSelected); Connect(ID_MNU_XSCANNER, wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&xLightsFrame::OnMenuItem_xScannerSelected); @@ -10557,3 +10562,9 @@ void xLightsFrame::UpdateReadOnlyState() Button_CheckShowFolderTemporarily->Enable(!readOnlyMode); Button_ChangeShowDirPermanently->Enable(!readOnlyMode); } + +void xLightsFrame::OnMenuItemFindShowFolderSelected(wxCommandEvent& event) +{ + ShowFolderSearchDialog dlg(this); + dlg.ShowModal(); +} diff --git a/xLights/xLightsMain.h b/xLights/xLightsMain.h index 34ccdc9ab8..c536f6dae4 100755 --- a/xLights/xLightsMain.h +++ b/xLights/xLightsMain.h @@ -427,6 +427,7 @@ class xLightsFrame: public xlFrame void ImportLSP(const wxFileName &filename); void ImportVsa(const wxFileName &filename); void ImportSuperStar(const wxFileName &filename); + void ImportMidi(const wxFileName& filename); void CloneXLightsEffects(EffectLayer* target, EffectLayer* src, bool eraseExisting); bool CloneXLightsEffects(const std::string& target, const std::string& source, @@ -639,6 +640,7 @@ class xLightsFrame: public xlFrame void ShowHideSelectEffectsWindow(wxCommandEvent& event); void OnButtonFPPConnectClick(wxCommandEvent& event); void OnButton_OpenBaseShowDirClick(wxCommandEvent& event); + void OnMenuItemFindShowFolderSelected(wxCommandEvent& event); //*) void OnCharHook(wxKeyEvent& event); void OnHelp(wxHelpEvent& event); @@ -788,6 +790,7 @@ private : static const wxWindowID ID_MENUITEM_CONVERT; static const wxWindowID ID_MNU_PREPAREAUDIO; static const wxWindowID ID_MENU_USER_DICT; + static const wxWindowID ID_MENU_FIND_SHOW_FOLDER; static const wxWindowID ID_MNU_XSCHEDULE; static const wxWindowID ID_MENU_XCAPTURE; static const wxWindowID ID_MNU_XSCANNER; @@ -944,6 +947,7 @@ private : wxMenuItem* MenuItemEffectDropper; wxMenuItem* MenuItemEffectSettings; wxMenuItem* MenuItemFindData; + wxMenuItem* MenuItemFindShowFolder; wxMenuItem* MenuItemHinksPixExport; wxMenuItem* MenuItemHousePreview; wxMenuItem* MenuItemJukebox;