From 745edeb56f13a4881063ffb47eb677af09b5be77 Mon Sep 17 00:00:00 2001 From: Chung Tran Phuong Date: Wed, 25 Dec 2024 22:45:38 +0900 Subject: [PATCH 1/4] make the application more portable --- src/AppSettings.cpp | 12 +++++++++- src/AppSettings.h | 8 ++++++- src/CommandLine.cpp | 5 ++++ src/CommandLine.h | 1 + src/GeneralSettingDlg.cpp | 2 +- src/MainFrm.cpp | 7 +++++- src/OSUtil.cpp | 47 +++++++++++++++++++++++++++++++++++--- src/OSUtil.h | 2 ++ src/VinaTextApp.cpp | 16 ++++++------- src/VinaTextSettingDlg.cpp | 28 ++++++++++++++++++++++- 10 files changed, 111 insertions(+), 17 deletions(-) diff --git a/src/AppSettings.cpp b/src/AppSettings.cpp index 83f058e..63d9dca 100644 --- a/src/AppSettings.cpp +++ b/src/AppSettings.cpp @@ -51,7 +51,7 @@ void CAppSettings::ResetAllSettings() m_bEnableShowHideFoldingMargin = FALSE; m_bAutoSaveFileWhenCloseApp = TRUE; m_bAutoAddNewLineAtTheEOF = FALSE; - m_bUseInstallPathAsAppDataPath = FALSE; + m_bUseInstallPathAsAppDataPath = TRUE; m_bUseUserIndentationSettings = FALSE; // folder bar @@ -375,6 +375,16 @@ void CAppSettings::ResetEditorCaretInfo() m_RecentEditorCaretInfo.clear(); } +void CAppSettings::ResetWindowPlacements() +{ + m_bResetWindowPlacements = TRUE; +} + +BOOL CAppSettings::ShouldResetWindowPlacements() const +{ + return m_bResetWindowPlacements; +} + void CAppSettings::SaveRecentEditorCaretInfo(const CString& strPathName) { CEditorDoc* pDoc = dynamic_cast(AppUtils::GetExistedDocument(strPathName)); diff --git a/src/AppSettings.h b/src/AppSettings.h index c0837d7..a8b1d7b 100644 --- a/src/AppSettings.h +++ b/src/AppSettings.h @@ -54,6 +54,8 @@ class CAppSettings void SaveRecentEditorCaretInfo(const CString& strPathName); RecentEditorInfo GetRecentEditorCaretInfo(const CString& strPathName); void ResetEditorCaretInfo(); + void ResetWindowPlacements(); + BOOL ShouldResetWindowPlacements() const; // save/load from file BOOL SaveSettingData(); @@ -106,7 +108,7 @@ class CAppSettings BOOL m_bEnableShowHideFoldingMargin = FALSE; BOOL m_bAutoSaveFileWhenCloseApp = TRUE; BOOL m_bAutoAddNewLineAtTheEOF = FALSE; - BOOL m_bUseInstallPathAsAppDataPath = FALSE; + BOOL m_bUseInstallPathAsAppDataPath = TRUE; BOOL m_bUseUserIndentationSettings = FALSE; // editor style @@ -179,6 +181,10 @@ class CAppSettings // Document ID typedef std::unordered_set DocumentEmptyIDBuffer; DocumentEmptyIDBuffer m_DocIDBuffer; + + // reset workspace + BOOL m_bResetWindowPlacements = FALSE; + // singleton SINGLETON_IMPLEMENT(CAppSettings) }; diff --git a/src/CommandLine.cpp b/src/CommandLine.cpp index 9c9464c..1bbde8a 100644 --- a/src/CommandLine.cpp +++ b/src/CommandLine.cpp @@ -35,6 +35,11 @@ void CCommandLineInfoEx::ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLas m_cmdOption = VINATEXT_CMD_OPTION::VINATEXT_CMD_REOPEN_WITH_ADMIN_RIGHT; return; } + else if (strParam == _T("restartApplication")) + { + m_cmdOption = VINATEXT_CMD_OPTION::VINATEXT_CMD_RESTART_APP; + return; + } } CCommandLineInfo::ParseParam(pszParam, bFlag, bLast); } diff --git a/src/CommandLine.h b/src/CommandLine.h index 07efc21..efa66a6 100644 --- a/src/CommandLine.h +++ b/src/CommandLine.h @@ -16,6 +16,7 @@ enum class VINATEXT_CMD_OPTION : unsigned int VINATEXT_CMD_OPTION_INIT = 0, VINATEXT_CMD_MOVE_TO_NEW_WINDOW = 1, VINATEXT_CMD_REOPEN_WITH_ADMIN_RIGHT = 2, + VINATEXT_CMD_RESTART_APP = 3, }; class CCommandLineInfoEx : public CCommandLineInfo diff --git a/src/GeneralSettingDlg.cpp b/src/GeneralSettingDlg.cpp index 1f8c7b8..100ccb8 100644 --- a/src/GeneralSettingDlg.cpp +++ b/src/GeneralSettingDlg.cpp @@ -22,7 +22,7 @@ constexpr int DEFAULT_LFWEIGHT = 10; IMPLEMENT_DYNAMIC(GeneralSettingDlg, CDialogEx) GeneralSettingDlg::GeneralSettingDlg(CWnd* pParent /*=nullptr*/) - : CDialogEx(IDD_DIALOG_SETTING_GENERAL, pParent), m_bUseInstallPathAsAppDataPath(FALSE) + : CDialogEx(IDD_DIALOG_SETTING_GENERAL, pParent) { m_pScrollHelper = std::make_unique(); m_pScrollHelper->AttachWnd(this); diff --git a/src/MainFrm.cpp b/src/MainFrm.cpp index 9dc82a7..e1ec776 100644 --- a/src/MainFrm.cpp +++ b/src/MainFrm.cpp @@ -1506,6 +1506,11 @@ void CMainFrame::OnDestroy() m_wndSearchAndReplaceWindow.SaveDialogState(); } + if (AppSettingMgr.ShouldResetWindowPlacements()) + { + OSUtils::DeleteRegistryKey(_T("VinaText-Vinadevs")); + } + CMDIFrameWndEx::OnDestroy(); } @@ -3749,7 +3754,7 @@ void CMainFrame::OnMDITabMoveToNewVinaText() if (PathFileExists(strPathVinaTextExe)) { // Open new app instance... - BOOL bRet = OSUtils::CreateWin32Process(strPathVinaTextExe + _T(" -moveFileToNewInstance ") + +_T(" \"") + strPathName + _T("\"")); + BOOL bRet = OSUtils::CreateWin32Process(strPathVinaTextExe + _T(" -moveFileToNewInstance ") + _T(" \"") + strPathName + _T("\"")); if (bRet) { // Create new instance fine so close current doc diff --git a/src/OSUtil.cpp b/src/OSUtil.cpp index 0a42851..d9222eb 100644 --- a/src/OSUtil.cpp +++ b/src/OSUtil.cpp @@ -281,6 +281,25 @@ CString OSUtils::GetRegistryAppPath(const CString & strEXEName) return strFullPath; } +void OSUtils::DeleteRegistryKey(const CString& lpSubKey) +{ + HKEY hKey; + LONG result = RegOpenKeyEx(HKEY_CURRENT_USER, _T("Software"), 0, KEY_WRITE, &hKey); + if (result == ERROR_SUCCESS) + { + result = RegDeleteTree(hKey, lpSubKey); + if (result != ERROR_SUCCESS) + { + assert(FALSE); + } + RegCloseKey(hKey); + } + else + { + assert(FALSE); + } +} + void OSUtils::OpenFileInWebBrowser(const CString& strEXEName, const CString& strFilePath) { if (strEXEName.Find(_T("MicrosoftEdge")) != -1) @@ -394,7 +413,7 @@ void OSUtils::UseAdministrationHandler() CString strPathVinaTextExe = PathUtils::GetVinaTextExePath(); if (PathFileExists(strPathVinaTextExe)) { - intptr_t bRet = reinterpret_cast(::ShellExecute(AppUtils::GetMainFrame()->GetSafeHwnd(), TEXT("runas"), strPathVinaTextExe, _T(" -openWithAdminRight "), NULL, SW_SHOW)); + const intptr_t bRet = reinterpret_cast(::ShellExecute(AppUtils::GetMainFrame()->GetSafeHwnd(), TEXT("runas"), strPathVinaTextExe, _T(" -openWithAdminRight "), NULL, SW_SHOW)); if (bRet) { if (bRet < SUCCESS_SHELL_EXEC_RET) @@ -403,7 +422,7 @@ void OSUtils::UseAdministrationHandler() } else { - ::PostQuitMessage(0); + AppUtils::GetMainFrame()->DestroyWindow(); } } } @@ -413,4 +432,26 @@ void OSUtils::UseAdministrationHandler() LOG_OUTPUT_MESSAGE_ACTIVE_PANE(strMsg, BasicColors::orange); } } -} \ No newline at end of file +} + +void OSUtils::RestartAppplication() +{ + CString strPathVinaTextExe = PathUtils::GetVinaTextExePath(); + if (PathFileExists(strPathVinaTextExe)) + { + const BOOL bRet = OSUtils::CreateWin32Process(strPathVinaTextExe + _T(" -restartApplication ")); + if (!bRet) + { + AfxMessageBox(_T("[Error] Could not restart VinaText.")); + } + else + { + AppUtils::GetMainFrame()->DestroyWindow(); + } + } + else + { + CString strMsg; strMsg.Format(_T("[Path Error] \"%s\" does not exist...\n"), strPathVinaTextExe); + LOG_OUTPUT_MESSAGE_ACTIVE_PANE(strMsg, BasicColors::orange); + } +} diff --git a/src/OSUtil.h b/src/OSUtil.h index a5a33f0..98a62cd 100644 --- a/src/OSUtil.h +++ b/src/OSUtil.h @@ -40,7 +40,9 @@ namespace OSUtils void PatseClipboardToCMD(HWND hCMD); void ChangeIME(HWND hWnd, DWORD dwNewKeybLayout, BOOL bOpen); CString GetRegistryAppPath(const CString& strEXEName); + void DeleteRegistryKey(const CString& lpSubKey); void OpenFileInWebBrowser(const CString & strEXEName, const CString & strFilePath); std::wstring GetCMDConsoleResult(const wchar_t * cmd); void UseAdministrationHandler(); + void RestartAppplication(); } \ No newline at end of file diff --git a/src/VinaTextApp.cpp b/src/VinaTextApp.cpp index 481918a..08f60b9 100644 --- a/src/VinaTextApp.cpp +++ b/src/VinaTextApp.cpp @@ -202,16 +202,12 @@ BOOL CVinaTextApp::InitInstance() if (g_SingleInstanceVinaText.IsAppAlreadyRunning() && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_MOVE_TO_NEW_WINDOW - && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_REOPEN_WITH_ADMIN_RIGHT) + && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_REOPEN_WITH_ADMIN_RIGHT + && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_RESTART_APP) { - if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew || - cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) + if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) { - WPARAM wpCmdLine = NULL; - if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileOpen) - { - g_SingleInstanceVinaText.SendMessageToExistedInstance(cmdInfo.m_strFileName); - } + g_SingleInstanceVinaText.SendMessageToExistedInstance(cmdInfo.m_strFileName); } return FALSE; } @@ -328,7 +324,9 @@ BOOL CVinaTextApp::InitInstance() m_pEditorDocTemplate->OpenNewDocument(NULL, FALSE, TRUE); } } - else if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_MOVE_TO_NEW_WINDOW) + else if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew + && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_MOVE_TO_NEW_WINDOW + && cmdInfo.m_cmdOption != VINATEXT_CMD_OPTION::VINATEXT_CMD_RESTART_APP) { if (!pMainFrame->LoadMDIState(GetRegSectionPath())) { diff --git a/src/VinaTextSettingDlg.cpp b/src/VinaTextSettingDlg.cpp index a7b92f0..345cece 100644 --- a/src/VinaTextSettingDlg.cpp +++ b/src/VinaTextSettingDlg.cpp @@ -15,6 +15,7 @@ #include "AppSettings.h" #include "RAIIUtils.h" #include "MainFrm.h" +#include "afxtaskdialog.h" // VinaTextSettingDlg dialog @@ -128,7 +129,25 @@ void VinaTextSettingDlg::OnBnClickedOk() void VinaTextSettingDlg::OnBnClickedButtonResetSettings() { - if (IDYES == AfxMessageBox(_T("[Warning] This operation will reset all your settings to original default state, do you want to reset?"), MB_YESNO | MB_ICONWARNING)) + constexpr int RESET_SETTINGS_ONLY_APP_ID = 501; + constexpr int RESET_ALL_AND_RESTART_APP_ID = 502; + constexpr int CANCEL_ID = 503; + auto fTaskResetDialog = [&]() -> BOOL + { + CString strMessage = _T("[Warning] This operation will reset all your settings to original default state, please choose an action:"); + CTaskDialog dlg(_T(""), strMessage, _T("VinaText"), 0/*TDCBF_OK_BUTTON*/); + dlg.SetMainIcon(TD_WARNING_ICON); + dlg.AddCommandControl(RESET_SETTINGS_ONLY_APP_ID, _T("Reset all settings but do NOT restart Vinatext.")); + dlg.AddCommandControl(RESET_ALL_AND_RESTART_APP_ID, _T("Reset all settings and window placements then restart Vinatext.")); + dlg.AddCommandControl(CANCEL_ID, _T("Cancel")); + dlg.SetDialogWidth(300); + dlg.SetDefaultCommandControl(RESET_SETTINGS_ONLY_APP_ID); + dlg.DoModal(); + return dlg.GetSelectedCommandControlID(); + }; + + int nUserOption = fTaskResetDialog(); + if (nUserOption == RESET_SETTINGS_ONLY_APP_ID) { AppSettingMgr.ResetAllSettings(); // Load original settings to dialog setting @@ -137,6 +156,13 @@ void VinaTextSettingDlg::OnBnClickedButtonResetSettings() UpdateSettings(TRUE); LOG_OUTPUT_MESSAGE_ACTIVE_PANE(_T("> [Prerefence] all settings reset to original default state...")); } + else if (nUserOption == RESET_ALL_AND_RESTART_APP_ID) + { + AppSettingMgr.ResetAllSettings(); + AppSettingMgr.ResetWindowPlacements(); + AppUtils::CloseAllDocument(); + OSUtils::RestartAppplication(); + } } void VinaTextSettingDlg::OnTcnSelchangeTab(NMHDR * pNMHDR, LRESULT * pResult) From 448291a255115e75110d48d9b96fb9b8a1ca836a Mon Sep 17 00:00:00 2001 From: Chung Tran Phuong Date: Sat, 28 Dec 2024 13:05:55 +0900 Subject: [PATCH 2/4] supported syntax highlight user customization --- src/Editor.cpp | 39 +++++++++++++++++++++++++++-------- src/EditorCommonDef.h | 2 +- src/EditorView.cpp | 14 +++++++++++++ src/EditorView.h | 1 + src/OSUtil.cpp | 2 +- src/OSUtil.h | 2 +- src/PathUtil.cpp | 5 +++++ src/PathUtil.h | 1 + src/Resource.h | 1 + src/UserCustomizeData.cpp | 40 ++++++++++++++++++++++++++++++++++++ src/UserCustomizeData.h | 12 +++++++++++ src/VinaText.rc | 2 ++ src/VinaText.vcxproj | 2 ++ src/VinaText.vcxproj.filters | 6 ++++++ src/VinaTextApp.cpp | 7 ++++++- src/VinaTextApp.h | 7 +++++++ src/VinaTextSettingDlg.cpp | 2 +- 17 files changed, 132 insertions(+), 13 deletions(-) create mode 100644 src/UserCustomizeData.cpp create mode 100644 src/UserCustomizeData.h diff --git a/src/Editor.cpp b/src/Editor.cpp index cdbc7c9..4becdda 100644 --- a/src/Editor.cpp +++ b/src/Editor.cpp @@ -33,6 +33,8 @@ #include "EditorColorDark.h" #include "EditorColorLight.h" +#include "UserCustomizeData.h" + CEditorCtrl::CEditorCtrl() { m_wideBuf = std::make_unique(m_wideBufSize); @@ -3050,19 +3052,40 @@ BOOL CEditorCtrl::SaveEditorDataToFile(const CString& szFile, CString& m_strLexe CString CEditorCtrl::GetLexerNameFromExtension(const CString& szExtension) { int lexerIndex = 0; - CString pExtension = EditorLanguageDef::arrLangExtensions[lexerIndex]; - while (!pExtension.IsEmpty()) + const auto& userArrLangExtensions = AppUtils::GetVinaTextApp()->m_userCustomizeData->GetSyntaxHighlightUserData(); + if (userArrLangExtensions.empty()) + { + CString extension = EditorLanguageDef::arrLangExtensions[lexerIndex]; + while (!extension.IsEmpty()) + { + CLexingParser parser(EditorLanguageDef::arrLangExtensions[lexerIndex], _T("|")); + while (parser.HasMoreTokens()) + { + if (parser.Next().CompareNoCase(szExtension) == 0) + { + return AppUtils::StdToCString(EditorLanguageDef::arrLexerNames[lexerIndex]); + } + } + lexerIndex++; + extension = EditorLanguageDef::arrLangExtensions[lexerIndex]; + } + } + else { - CLexingParser parser(EditorLanguageDef::arrLangExtensions[lexerIndex], _T("|")); - while (parser.HasMoreTokens()) + CString extension = userArrLangExtensions[lexerIndex]; + while (!extension.IsEmpty()) { - if (parser.Next().CompareNoCase(szExtension) == 0) + CLexingParser parser(userArrLangExtensions[lexerIndex], _T("|")); + while (parser.HasMoreTokens()) { - return AppUtils::StdToCString(EditorLanguageDef::arrLexerNames[lexerIndex]); + if (parser.Next().CompareNoCase(szExtension) == 0) + { + return AppUtils::StdToCString(EditorLanguageDef::arrLexerNames[lexerIndex]); + } } + lexerIndex++; + extension = userArrLangExtensions[lexerIndex]; } - lexerIndex++; - pExtension = EditorLanguageDef::arrLangExtensions[lexerIndex]; } return LEXER_PLAIN_TEXT; } diff --git a/src/EditorCommonDef.h b/src/EditorCommonDef.h index 5d91e9a..3f04186 100644 --- a/src/EditorCommonDef.h +++ b/src/EditorCommonDef.h @@ -87,7 +87,7 @@ namespace EditorLanguageDef _T("js|jsx"), // SCLEX_CPP _T("ts|tsx"), // SCLEX_CPP _T("lua"), // SCLEX_LUA - _T("m"), // SCLEX_MATLAB// SCLEX_LUA + _T("m"), // SCLEX_MATLAB _T("pas|inc|pp"), // SCLEX_PASCAL _T("pl|pm|cgi|pod"), // SCLEX_PERL _T("php|php3|php4|php5|phps|phpt|phtml"), // SCLEX_PHP diff --git a/src/EditorView.cpp b/src/EditorView.cpp index dbaed08..827bda3 100644 --- a/src/EditorView.cpp +++ b/src/EditorView.cpp @@ -299,6 +299,7 @@ BEGIN_MESSAGE_MAP(CEditorView, CViewBase) ON_COMMAND(ID_DOCUMENT_TEXT_LEXER_BASH_BATCH, OnEnableUserLexerLexerBashBatch) ON_COMMAND(ID_DOCUMENT_TEXT_LEXER_VB_PASCAL, OnEnableUserLexerLexerVBPascal) ON_COMMAND(ID_DOCUMENT_TEXT_LEXER_NON, OnDisableUserLexer) + ON_COMMAND(ID_DOCUMENT_TEXT_LEXER_EXTENSION, OnAddLexerForFileExtension) ON_COMMAND(ID_EDIT_ALIGN_LEFT, OnOptionAlignLeft) ON_COMMAND(ID_EDIT_ALIGN_RIGHT, OnOptionAlignRight) ON_COMMAND(ID_EDIT_ALIGN_CENTER, OnOptionAlignCenter) @@ -9064,6 +9065,19 @@ void CEditorView::OnDisableUserLexer() ChangeUserLexer(_T("")); } +void CEditorView::OnAddLexerForFileExtension() +{ + const CString syntaxHighlightUserDataPath = PathUtils::GetSyntaxHighlightUserDataPath(); + if (PathFileExists(syntaxHighlightUserDataPath)) + { + AppUtils::CreateDocumentFromFile(syntaxHighlightUserDataPath); + } + else + { + AfxMessageBoxFormat(MB_ICONWARNING, _T("[Path Error] \"%s\" does not exist!\n"), syntaxHighlightUserDataPath); + } +} + void CEditorView::ChangeToEditorReadOnly() { m_EditorCtrl.SetReadOnlyEditor(TRUE); diff --git a/src/EditorView.h b/src/EditorView.h index 4d78bd2..38cdd4e 100644 --- a/src/EditorView.h +++ b/src/EditorView.h @@ -257,6 +257,7 @@ class CEditorView : public CViewBase afx_msg void OnEnableUserLexerLexerBashBatch(); afx_msg void OnEnableUserLexerLexerVBPascal(); afx_msg void OnDisableUserLexer(); + afx_msg void OnAddLexerForFileExtension(); afx_msg void OnOptionAlignLeft(); afx_msg void OnOptionAlignRight(); afx_msg void OnOptionAlignCenter(); diff --git a/src/OSUtil.cpp b/src/OSUtil.cpp index d9222eb..56dd9e4 100644 --- a/src/OSUtil.cpp +++ b/src/OSUtil.cpp @@ -434,7 +434,7 @@ void OSUtils::UseAdministrationHandler() } } -void OSUtils::RestartAppplication() +void OSUtils::RestartApplication() { CString strPathVinaTextExe = PathUtils::GetVinaTextExePath(); if (PathFileExists(strPathVinaTextExe)) diff --git a/src/OSUtil.h b/src/OSUtil.h index 98a62cd..1dbab06 100644 --- a/src/OSUtil.h +++ b/src/OSUtil.h @@ -44,5 +44,5 @@ namespace OSUtils void OpenFileInWebBrowser(const CString & strEXEName, const CString & strFilePath); std::wstring GetCMDConsoleResult(const wchar_t * cmd); void UseAdministrationHandler(); - void RestartAppplication(); + void RestartApplication(); } \ No newline at end of file diff --git a/src/PathUtil.cpp b/src/PathUtil.cpp index 480edbb..0f2317b 100644 --- a/src/PathUtil.cpp +++ b/src/PathUtil.cpp @@ -359,6 +359,11 @@ CString PathUtils::GetVinaTextLocalizationPath() return strPath; } +CString PathUtils::GetSyntaxHighlightUserDataPath() +{ + return PathUtils::GetVinaTextPackagePath() + _T("data-packages\\syntax-highlight-file-extension.dat");; +} + CString PathUtils::GetAbsolutePath(const CString& strPath) { TCHAR path[_MAX_PATH]; diff --git a/src/PathUtil.h b/src/PathUtil.h index 47dff7a..a203aad 100644 --- a/src/PathUtil.h +++ b/src/PathUtil.h @@ -26,6 +26,7 @@ namespace PathUtils CString GetUserExtensionPath(); CString GetVinaTextPackagePath(); CString GetVinaTextLocalizationPath(); + CString GetSyntaxHighlightUserDataPath(); CString GetAbsolutePath(const CString& strPath); CString GetDataBaseFileFilter(); CString GetWindowSystemPath(); diff --git a/src/Resource.h b/src/Resource.h index 7a49aeb..90b2e68 100644 --- a/src/Resource.h +++ b/src/Resource.h @@ -799,6 +799,7 @@ #define ID_DOCUMENT_TEXT_LEXER_HTML_XML 36198 #define ID_DOCUMENT_TEXT_LEXER_NON 36199 #define ID_DOCUMENT_ADD_AC_DATASET_FROM_FOLDER 36200 +#define ID_DOCUMENT_TEXT_LEXER_EXTENSION 36201 #define ID_DOCUMENT_ADD_AC_DATASET_ENGLISH 36202 #define ID_DOCUMENT_TRANSLATE_GENERATE 36203 #define ID_OPTIONS_ADD_BOOKMARK 36204 diff --git a/src/UserCustomizeData.cpp b/src/UserCustomizeData.cpp new file mode 100644 index 0000000..a133240 --- /dev/null +++ b/src/UserCustomizeData.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" +#include "UserCustomizeData.h" +#include "PathUtil.h" + +#include +#include + +void CUserCustomizeData::LoadSyntaxHighlightUserData() +{ + std::ifstream file(PathUtils::GetSyntaxHighlightUserDataPath().GetString()); + if (!file.is_open()) + { + return; + } + std::string line; + while (std::getline(file, line)) + { + CString cstrLine(line.c_str()); // Convert std::string to CString + cstrLine.Trim(); // Remove leading/trailing whitespace + // Ignore lines starting with "//" + if (cstrLine.Left(2) == _T("//")) + { + continue; + } + const int colonPos = cstrLine.Find(':'); + if (colonPos != -1) + { + CString value = cstrLine.Mid(colonPos + 1); // Extract the substring after ':' + value.Trim(); // Remove any leading/trailing whitespace + m_syntaxHighlightUserData.emplace_back(value); + } + } + m_syntaxHighlightUserData.emplace_back(_T("")); // empty CString to end while loop + file.close(); // Close the file +} + +const std::vector& CUserCustomizeData::GetSyntaxHighlightUserData() const +{ + return m_syntaxHighlightUserData; +} diff --git a/src/UserCustomizeData.h b/src/UserCustomizeData.h new file mode 100644 index 0000000..d61adb4 --- /dev/null +++ b/src/UserCustomizeData.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +class CUserCustomizeData final +{ +public: + void LoadSyntaxHighlightUserData(); + const std::vector& GetSyntaxHighlightUserData() const; +private: + std::vector m_syntaxHighlightUserData; +}; diff --git a/src/VinaText.rc b/src/VinaText.rc index 27fc842..73d39e8 100644 --- a/src/VinaText.rc +++ b/src/VinaText.rc @@ -504,6 +504,8 @@ BEGIN MENUITEM "Color Style VisualBasic/Pascal", ID_DOCUMENT_TEXT_LEXER_VB_PASCAL MENUITEM SEPARATOR MENUITEM "Remove Current Color Style", ID_DOCUMENT_TEXT_LEXER_NON + MENUITEM SEPARATOR + MENUITEM "Syntax Highlight For File Extension...", ID_DOCUMENT_TEXT_LEXER_EXTENSION END MENUITEM SEPARATOR POPUP "Convert" diff --git a/src/VinaText.vcxproj b/src/VinaText.vcxproj index 279c623..2ca9d02 100644 --- a/src/VinaText.vcxproj +++ b/src/VinaText.vcxproj @@ -224,6 +224,7 @@ + @@ -411,6 +412,7 @@ + diff --git a/src/VinaText.vcxproj.filters b/src/VinaText.vcxproj.filters index 02d3a19..19d472f 100644 --- a/src/VinaText.vcxproj.filters +++ b/src/VinaText.vcxproj.filters @@ -728,6 +728,9 @@ Component GUI\MFC GUI + + Settings + @@ -1264,6 +1267,9 @@ Component GUI\MFC GUI + + Settings + diff --git a/src/VinaTextApp.cpp b/src/VinaTextApp.cpp index 08f60b9..617f7ce 100644 --- a/src/VinaTextApp.cpp +++ b/src/VinaTextApp.cpp @@ -44,6 +44,8 @@ #include "pdf/UXReader/UXReaderLibrary.h" +#include "UserCustomizeData.h" + // COM/ATL #include #include "VinaText_i.c" @@ -140,7 +142,7 @@ END_MESSAGE_MAP() // CVinaTextApp construction -CVinaTextApp::CVinaTextApp() +CVinaTextApp::CVinaTextApp() : m_userCustomizeData{ std::make_unique() } { // support Restart Manager m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS; @@ -302,6 +304,9 @@ BOOL CVinaTextApp::InitInstance() EnableLoadWindowPlacement(FALSE); + // load user customized data + m_userCustomizeData->LoadSyntaxHighlightUserData(); + // create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame; if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) diff --git a/src/VinaTextApp.h b/src/VinaTextApp.h index 3335a38..2db8a5e 100644 --- a/src/VinaTextApp.h +++ b/src/VinaTextApp.h @@ -17,6 +17,10 @@ #include "HostManager.h" #include "VinaText_i.h" +#include + +class CUserCustomizeData; + class CVinaTextApp : public CWinAppEx { public: @@ -91,6 +95,9 @@ class CVinaTextApp : public CWinAppEx CMultiDocTemplateEx* m_pFileExplorerDocTemplate = NULL; CMultiDocTemplateEx* m_pWebDocTemplate = NULL; + // Customize User Data + std::unique_ptr m_userCustomizeData; + DECLARE_MESSAGE_MAP() protected: BOOL OnAnotherInstanceMessage(LPMSG pMsg); diff --git a/src/VinaTextSettingDlg.cpp b/src/VinaTextSettingDlg.cpp index 345cece..7c5e98c 100644 --- a/src/VinaTextSettingDlg.cpp +++ b/src/VinaTextSettingDlg.cpp @@ -161,7 +161,7 @@ void VinaTextSettingDlg::OnBnClickedButtonResetSettings() AppSettingMgr.ResetAllSettings(); AppSettingMgr.ResetWindowPlacements(); AppUtils::CloseAllDocument(); - OSUtils::RestartAppplication(); + OSUtils::RestartApplication(); } } From de0ab27867cd033ca6ca5225497612f787ba6cb6 Mon Sep 17 00:00:00 2001 From: Chung Tran Phuong Date: Sat, 28 Dec 2024 13:09:12 +0900 Subject: [PATCH 3/4] release 1.16 --- src/UserCustomizeData.cpp | 8 ++++++++ src/UserCustomizeData.h | 8 ++++++++ src/VinaText.rc | 10 +++++----- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/UserCustomizeData.cpp b/src/UserCustomizeData.cpp index a133240..e18a027 100644 --- a/src/UserCustomizeData.cpp +++ b/src/UserCustomizeData.cpp @@ -1,3 +1,11 @@ +/*#******************************************************************************* +# COPYRIGHT NOTES +# --------------- +# This is a part of VinaText Project +# Copyright(C) - free open source - vinadevs +# This source code can be used, distributed or modified under MIT license +#*******************************************************************************/ + #include "stdafx.h" #include "UserCustomizeData.h" #include "PathUtil.h" diff --git a/src/UserCustomizeData.h b/src/UserCustomizeData.h index d61adb4..79d45a1 100644 --- a/src/UserCustomizeData.h +++ b/src/UserCustomizeData.h @@ -1,3 +1,11 @@ +/*#******************************************************************************* +# COPYRIGHT NOTES +# --------------- +# This is a part of VinaText Project +# Copyright(C) - free open source - vinadevs +# This source code can be used, distributed or modified under MIT license +#*******************************************************************************/ + #pragma once #include diff --git a/src/VinaText.rc b/src/VinaText.rc index 73d39e8..d8e2059 100644 --- a/src/VinaText.rc +++ b/src/VinaText.rc @@ -1390,10 +1390,10 @@ BEGIN DEFPUSHBUTTON "Close",IDOK,102,123,55,19,WS_GROUP CONTROL "https://www.vinatext.dev",IDC_MFCLINK_VINATEXT,"MfcLink",WS_TABSTOP,112,102,105,12 LTEXT "Home Page:",IDC_STATIC,64,103,40,8 - LTEXT "Release Version: 1.15",IDC_STATIC,64,32,125,8 + LTEXT "Release Version: 1.16",IDC_STATIC,64,32,125,8 LTEXT "License Note: Freeware (MIT)",IDC_STATIC,64,50,100,8 - LTEXT "Commit Hash: 6cb1d54f806599e",IDC_STATIC,63,67,180,8 - LTEXT "Release Date: 22/09/2024",IDC_STATIC,64,84,139,8 + LTEXT "Commit Hash: 448291a255115e7",IDC_STATIC,63,67,180,8 + LTEXT "Release Date: 28/12/2024",IDC_STATIC,64,84,139,8 END IDD_BRACKET_OUTLINE DIALOGEX 0, 0, 227, 216 @@ -2137,12 +2137,12 @@ BEGIN BEGIN VALUE "CompanyName", "Vinadevs" VALUE "FileDescription", "VinaText" - VALUE "FileVersion", "1.15" + VALUE "FileVersion", "1.16" VALUE "InternalName", "VinaText.exe" VALUE "LegalCopyright", "Vinadevs. All rights reserved." VALUE "OriginalFilename", "VinaText.exe" VALUE "ProductName", "VinaText" - VALUE "ProductVersion", "1.15" + VALUE "ProductVersion", "1.16" END END BLOCK "VarFileInfo" From 8bc658989f17b65a867569f9be737f9ba3eae96a Mon Sep 17 00:00:00 2001 From: Chung Tran Phuong Date: Sat, 28 Dec 2024 13:13:35 +0900 Subject: [PATCH 4/4] add Package files --- .../syntax-highlight-file-extension.dat | 55 +++++++++++++++++++ .../syntax-highlight-file-extension.dat | 55 +++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 bin/x64/Debug/Packages/data-packages/syntax-highlight-file-extension.dat create mode 100644 bin/x64/Release/Packages/data-packages/syntax-highlight-file-extension.dat diff --git a/bin/x64/Debug/Packages/data-packages/syntax-highlight-file-extension.dat b/bin/x64/Debug/Packages/data-packages/syntax-highlight-file-extension.dat new file mode 100644 index 0000000..70c9321 --- /dev/null +++ b/bin/x64/Debug/Packages/data-packages/syntax-highlight-file-extension.dat @@ -0,0 +1,55 @@ +////////////////////////////////////////////////////////////////////////// +// +// Vinatext Syntax Highlight Settings +// ----------------------------------------------------------------------- +// This is a part of Vinatext Project +// Copyright(C) www.vinatext.dev - vinadevs +// This file can be used, distributed or modified under MIT license +// +// HOW TO SUPPORT SYNTAX HIGHLIGHT FOR A NEW FILE FORMAT +// IF YOU WANT FILE EXTENTION .vala USING CSHAPE (C#) HIGHLIGHT SYNTAX +// - 1. ADD "vala" AFTER "|" EX: SYNTAX_HIGHLIGHT_CSHAPE : cs|vala +// - 2. SAVE THIS FILE AND REOPEN VINATEXT +////////////////////////////////////////////////////////////////////////// + +SYNTAX_HIGHLIGHT_PYTHON : py|pyw| +SYNTAX_HIGHLIGHT_CPP : cpp|cxx|h|hh|hpp|hxx|cc| +SYNTAX_HIGHLIGHT_ADA : ada|ads|adb| +SYNTAX_HIGHLIGHT_ASM : asm| +SYNTAX_HIGHLIGHT_INNOSETUP : iss| +SYNTAX_HIGHLIGHT_BASH : sh| +SYNTAX_HIGHLIGHT_BATCH : bat|cmd|nt| +SYNTAX_HIGHLIGHT_C : c| +SYNTAX_HIGHLIGHT_CMAKE : cmake| +SYNTAX_HIGHLIGHT_CSHAPE : cs|vala| +SYNTAX_HIGHLIGHT_CSS : css| +SYNTAX_HIGHLIGHT_ERLANG : erl|hrl| +SYNTAX_HIGHLIGHT_FORTRAN : f|for|f90|f95|f77| +SYNTAX_HIGHLIGHT_HTML : htm|html|shtml|htt|cfm|tpl|hta| +SYNTAX_HIGHLIGHT_JAVA : java| +SYNTAX_HIGHLIGHT_JAVASCRIPT : js|jsx| +SYNTAX_HIGHLIGHT_TYPESCRIPT : ts|tsx| +SYNTAX_HIGHLIGHT_LUA : lua| +SYNTAX_HIGHLIGHT_MATLAB : m| +SYNTAX_HIGHLIGHT_PASCAL : pas|inc|pp| +SYNTAX_HIGHLIGHT_PERL : pl|pm|cgi|pod| +SYNTAX_HIGHLIGHT_PHP : php|php3|php4|php5|phps|phpt|phtml| +SYNTAX_HIGHLIGHT_POWERSHELL : ps1|psm1| +SYNTAX_HIGHLIGHT_RUBY : rb| +SYNTAX_HIGHLIGHT_RUST : rs| +SYNTAX_HIGHLIGHT_SQL : sql|spec|body|sps|spb|sf|sp| +SYNTAX_HIGHLIGHT_TCL : tcl| +SYNTAX_HIGHLIGHT_VISUALBASIC : vb|vbs|frm|cls|ctl|pag|dsr|dob| +SYNTAX_HIGHLIGHT_VERILOG : v|sv|vh|svh| +SYNTAX_HIGHLIGHT_VHDL : vhd|vhdl| +SYNTAX_HIGHLIGHT_XML : xml|gcl|xsl|svg|xul|xsd|dtd|xslt|axl| +SYNTAX_HIGHLIGHT_JSON : json| +SYNTAX_HIGHLIGHT_GOLANG : go| +SYNTAX_HIGHLIGHT_MARKDOWN : md|markdown|rmd| +SYNTAX_HIGHLIGHT_PROTOBUF : proto| +SYNTAX_HIGHLIGHT_R : r| +SYNTAX_HIGHLIGHT_LICENSE : lic| +SYNTAX_HIGHLIGHT_RESOURCE : rc| +SYNTAX_HIGHLIGHT_AUTOIT : au3| +SYNTAX_HIGHLIGHT_BASIC : bas| +SYNTAX_HIGHLIGHT_VCPROJECT : vcxproj|filters|user|vcproj|csproj|csxproj|vbproj|dbproj|sln| diff --git a/bin/x64/Release/Packages/data-packages/syntax-highlight-file-extension.dat b/bin/x64/Release/Packages/data-packages/syntax-highlight-file-extension.dat new file mode 100644 index 0000000..70c9321 --- /dev/null +++ b/bin/x64/Release/Packages/data-packages/syntax-highlight-file-extension.dat @@ -0,0 +1,55 @@ +////////////////////////////////////////////////////////////////////////// +// +// Vinatext Syntax Highlight Settings +// ----------------------------------------------------------------------- +// This is a part of Vinatext Project +// Copyright(C) www.vinatext.dev - vinadevs +// This file can be used, distributed or modified under MIT license +// +// HOW TO SUPPORT SYNTAX HIGHLIGHT FOR A NEW FILE FORMAT +// IF YOU WANT FILE EXTENTION .vala USING CSHAPE (C#) HIGHLIGHT SYNTAX +// - 1. ADD "vala" AFTER "|" EX: SYNTAX_HIGHLIGHT_CSHAPE : cs|vala +// - 2. SAVE THIS FILE AND REOPEN VINATEXT +////////////////////////////////////////////////////////////////////////// + +SYNTAX_HIGHLIGHT_PYTHON : py|pyw| +SYNTAX_HIGHLIGHT_CPP : cpp|cxx|h|hh|hpp|hxx|cc| +SYNTAX_HIGHLIGHT_ADA : ada|ads|adb| +SYNTAX_HIGHLIGHT_ASM : asm| +SYNTAX_HIGHLIGHT_INNOSETUP : iss| +SYNTAX_HIGHLIGHT_BASH : sh| +SYNTAX_HIGHLIGHT_BATCH : bat|cmd|nt| +SYNTAX_HIGHLIGHT_C : c| +SYNTAX_HIGHLIGHT_CMAKE : cmake| +SYNTAX_HIGHLIGHT_CSHAPE : cs|vala| +SYNTAX_HIGHLIGHT_CSS : css| +SYNTAX_HIGHLIGHT_ERLANG : erl|hrl| +SYNTAX_HIGHLIGHT_FORTRAN : f|for|f90|f95|f77| +SYNTAX_HIGHLIGHT_HTML : htm|html|shtml|htt|cfm|tpl|hta| +SYNTAX_HIGHLIGHT_JAVA : java| +SYNTAX_HIGHLIGHT_JAVASCRIPT : js|jsx| +SYNTAX_HIGHLIGHT_TYPESCRIPT : ts|tsx| +SYNTAX_HIGHLIGHT_LUA : lua| +SYNTAX_HIGHLIGHT_MATLAB : m| +SYNTAX_HIGHLIGHT_PASCAL : pas|inc|pp| +SYNTAX_HIGHLIGHT_PERL : pl|pm|cgi|pod| +SYNTAX_HIGHLIGHT_PHP : php|php3|php4|php5|phps|phpt|phtml| +SYNTAX_HIGHLIGHT_POWERSHELL : ps1|psm1| +SYNTAX_HIGHLIGHT_RUBY : rb| +SYNTAX_HIGHLIGHT_RUST : rs| +SYNTAX_HIGHLIGHT_SQL : sql|spec|body|sps|spb|sf|sp| +SYNTAX_HIGHLIGHT_TCL : tcl| +SYNTAX_HIGHLIGHT_VISUALBASIC : vb|vbs|frm|cls|ctl|pag|dsr|dob| +SYNTAX_HIGHLIGHT_VERILOG : v|sv|vh|svh| +SYNTAX_HIGHLIGHT_VHDL : vhd|vhdl| +SYNTAX_HIGHLIGHT_XML : xml|gcl|xsl|svg|xul|xsd|dtd|xslt|axl| +SYNTAX_HIGHLIGHT_JSON : json| +SYNTAX_HIGHLIGHT_GOLANG : go| +SYNTAX_HIGHLIGHT_MARKDOWN : md|markdown|rmd| +SYNTAX_HIGHLIGHT_PROTOBUF : proto| +SYNTAX_HIGHLIGHT_R : r| +SYNTAX_HIGHLIGHT_LICENSE : lic| +SYNTAX_HIGHLIGHT_RESOURCE : rc| +SYNTAX_HIGHLIGHT_AUTOIT : au3| +SYNTAX_HIGHLIGHT_BASIC : bas| +SYNTAX_HIGHLIGHT_VCPROJECT : vcxproj|filters|user|vcproj|csproj|csxproj|vbproj|dbproj|sln|