From c09636f9469465940b74b2597a4464412f35a28a Mon Sep 17 00:00:00 2001 From: Mark Jansen Date: Mon, 20 Jan 2020 21:43:19 +0100 Subject: [PATCH] [FONTEXT] Add detail view columns to font folder CORE-16476 --- dll/shellext/fontext/CDataObject.cpp | 15 +--- dll/shellext/fontext/CFontCache.cpp | 29 ++++++-- dll/shellext/fontext/CFontCache.hpp | 8 ++- dll/shellext/fontext/CFontExt.cpp | 102 +++++++++++++++++++++++---- dll/shellext/fontext/CFontExt.hpp | 4 +- dll/shellext/fontext/CFontMenu.cpp | 15 +--- dll/shellext/fontext/CMakeLists.txt | 3 +- dll/shellext/fontext/fontext.cpp | 6 +- dll/shellext/fontext/fontpidl.cpp | 8 +-- dll/shellext/fontext/lang/en-US.rc | 9 +++ dll/shellext/fontext/lang/it-IT.rc | 20 ++++++ dll/shellext/fontext/lang/pl-PL.rc | 20 ++++++ dll/shellext/fontext/lang/ro-RO.rc | 20 ++++++ dll/shellext/fontext/lang/tr-TR.rc | 20 ++++++ dll/shellext/fontext/resource.h | 6 ++ 15 files changed, 228 insertions(+), 57 deletions(-) diff --git a/dll/shellext/fontext/CDataObject.cpp b/dll/shellext/fontext/CDataObject.cpp index 252b125fc92..f6851f19985 100644 --- a/dll/shellext/fontext/CDataObject.cpp +++ b/dll/shellext/fontext/CDataObject.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: CFontMenu implementation - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" @@ -45,11 +45,6 @@ HRESULT _CDataObject_CreateInstance(PCIDLIST_ABSOLUTE folder, UINT cidl, PCUITEM // Now that we have an IDataObject with the shell itemid list (CFSTR_SHELLIDLIST, aka HIDA) format // we will augment this IDataObject with the CF_HDROP format. (Full filepaths) // This enabled the objects for the 'copy' and drag to copy actions - WCHAR FontsDir[MAX_PATH]; - hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, FontsDir); - if (FAILED_UNEXPECTEDLY(hr)) - return S_OK; - StringCchCatW(FontsDir, _countof(FontsDir), L"\\"); CComHeapPtr data; @@ -63,15 +58,9 @@ HRESULT _CDataObject_CreateInstance(PCIDLIST_ABSOLUTE folder, UINT cidl, PCUITEM const FontPidlEntry* fontEntry = _FontFromIL(apidl[n]); if (fontEntry) { - CStringW File = g_FontCache->Filename(fontEntry); + CStringW File = g_FontCache->Filename(fontEntry, true); if (!File.IsEmpty()) { - // Ensure this is a full path - if (PathIsRelativeW(File)) - { - File = FontsDir + File; - } - // Now append the path (+ nullterminator) to the buffer UINT len = offset + (File.GetLength() + 1) * sizeof(WCHAR); data.ReallocateBytes(len); diff --git a/dll/shellext/fontext/CFontCache.cpp b/dll/shellext/fontext/CFontCache.cpp index 8bccf346582..218be7bb638 100644 --- a/dll/shellext/fontext/CFontCache.cpp +++ b/dll/shellext/fontext/CFontCache.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: font list cache handling - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" @@ -68,6 +68,12 @@ CFontCache::CFontCache() { } +void CFontCache::SetFontDir(const LPCWSTR Path) +{ + if (m_FontFolderPath.IsEmpty()) + m_FontFolderPath = Path; +} + size_t CFontCache::Size() { if (m_Fonts.GetCount() == 0u) @@ -87,23 +93,34 @@ CStringW CFontCache::Name(size_t Index) return m_Fonts[Index].Name(); } -CStringW CFontCache::Filename(const FontPidlEntry* fontEntry) +CStringW CFontCache::Filename(const FontPidlEntry* fontEntry, bool alwaysFullPath) { + CStringW File; + if (fontEntry->Index < m_Fonts.GetCount()) { CFontInfo& info = m_Fonts[fontEntry->Index]; if (info.Name().CompareNoCase(fontEntry->Name) == 0) - return info.File(); + File = info.File(); } - for (UINT n = 0; n < Size(); ++n) + for (UINT n = 0; File.IsEmpty() && n < Size(); ++n) { if (m_Fonts[n].Name().CompareNoCase(fontEntry->Name) == 0) - return m_Fonts[n].File(); + File = m_Fonts[n].File(); } - return CStringW(); + if (!File.IsEmpty() && alwaysFullPath) + { + // Ensure this is a full path + if (PathIsRelativeW(File)) + { + File = m_FontFolderPath + File; + } + } + + return File; } void CFontCache::Insert(CAtlList& fonts, const CStringW& KeyName) diff --git a/dll/shellext/fontext/CFontCache.hpp b/dll/shellext/fontext/CFontCache.hpp index 226c061f685..9454660a653 100644 --- a/dll/shellext/fontext/CFontCache.hpp +++ b/dll/shellext/fontext/CFontCache.hpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: font list cache handling - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #pragma once @@ -27,6 +27,7 @@ class CFontCache { private: CAtlArray m_Fonts; + CStringW m_FontFolderPath; protected: CFontCache(); @@ -35,9 +36,12 @@ protected: void Read(); public: + void SetFontDir(const LPCWSTR Path); + const CStringW& FontPath() const { return m_FontFolderPath; } + size_t Size(); CStringW Name(size_t Index); - CStringW Filename(const FontPidlEntry* fontEntry); + CStringW Filename(const FontPidlEntry* fontEntry, bool alwaysFullPath = false); friend class CFontExtModule; }; diff --git a/dll/shellext/fontext/CFontExt.cpp b/dll/shellext/fontext/CFontExt.cpp index 1ce5325500a..c157104c7e9 100644 --- a/dll/shellext/fontext/CFontExt.cpp +++ b/dll/shellext/fontext/CFontExt.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: CFontExt implementation - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) * Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ @@ -22,6 +22,10 @@ struct FolderViewColumns static FolderViewColumns g_ColumnDefs[] = { { IDS_COL_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, 25, LVCFMT_LEFT }, + { IDS_COL_FILENAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, 20, LVCFMT_LEFT }, + { IDS_COL_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, 10, LVCFMT_RIGHT }, + { IDS_COL_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, 15, LVCFMT_LEFT }, + { IDS_COL_ATTR, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, 12, LVCFMT_RIGHT }, }; @@ -134,10 +138,83 @@ STDMETHODIMP CFontExt::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDET return E_FAIL; } + // Name, ReactOS specific? + if (iColumn == 0) + return GetDisplayNameOf(pidl, 0, &psd->str); + + const FontPidlEntry* fontEntry = _FontFromIL(pidl); + if (!fontEntry) + { + ERR("ERROR, not a font PIDL!\n"); + return E_FAIL; + } + + // If we got here, we are in details view! + // Let's see if we got info about this file that we can re-use + if (m_LastDetailsFontName != fontEntry->Name) + { + CStringW File = g_FontCache->Filename(fontEntry, true); + HANDLE hFile = FindFirstFileW(File, &m_LastDetailsFileData); + if (hFile == INVALID_HANDLE_VALUE) + { + m_LastDetailsFontName.Empty(); + ERR("Unable to query info about %S\n", File.GetString()); + return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + } + FindClose(hFile); + m_LastDetailsFontName = fontEntry->Name; + } + + // Most code borrowed from CFSFolder::GetDetailsOf + FILETIME lft; + SYSTEMTIME time; + int ret; + LARGE_INTEGER FileSize; + CStringA AttrLetters; switch (iColumn) { - case 0: /* Name, ReactOS specific? */ - return GetDisplayNameOf(pidl, 0, &psd->str); + case 1: // Filename + return SHSetStrRet(&psd->str, m_LastDetailsFileData.cFileName); + case 2: // Size + psd->str.uType = STRRET_CSTR; + FileSize.HighPart = m_LastDetailsFileData.nFileSizeHigh; + FileSize.LowPart = m_LastDetailsFileData.nFileSizeLow; + StrFormatKBSizeA(FileSize.QuadPart, psd->str.cStr, MAX_PATH); + return S_OK; + case 3: // Modified + FileTimeToLocalFileTime(&m_LastDetailsFileData.ftLastWriteTime, &lft); + FileTimeToSystemTime (&lft, &time); + psd->str.uType = STRRET_CSTR; + ret = GetDateFormatA(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, psd->str.cStr, MAX_PATH); + if (ret < 1) + { + ERR("GetDateFormatA failed\n"); + return E_FAIL; + } + psd->str.cStr[ret-1] = ' '; + GetTimeFormatA(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &time, NULL, &psd->str.cStr[ret], MAX_PATH - ret); + return S_OK; + case 4: // Attributes + AttrLetters.LoadString(IDS_COL_ATTR_LETTERS); + if (AttrLetters.GetLength() != 5) + { + ERR("IDS_COL_ATTR_LETTERS does not contain 5 letters!\n"); + return E_FAIL; + } + psd->str.uType = STRRET_CSTR; + ret = 0; + if (m_LastDetailsFileData.dwFileAttributes & FILE_ATTRIBUTE_READONLY) + psd->str.cStr[ret++] = AttrLetters[0]; + if (m_LastDetailsFileData.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) + psd->str.cStr[ret++] = AttrLetters[1]; + if (m_LastDetailsFileData.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) + psd->str.cStr[ret++] = AttrLetters[2]; + if (m_LastDetailsFileData.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE) + psd->str.cStr[ret++] = AttrLetters[3]; + if (m_LastDetailsFileData.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED) + psd->str.cStr[ret++] = AttrLetters[4]; + psd->str.cStr[ret] = '\0'; + return S_OK; default: break; } @@ -332,27 +409,29 @@ STDMETHODIMP CFontExt::GetCurFolder(LPITEMIDLIST *ppidl) // *** IPersistFolder methods *** STDMETHODIMP CFontExt::Initialize(LPCITEMIDLIST pidl) { - WCHAR PidlPath[MAX_PATH + 1] = {0}, Expected[MAX_PATH + 1]; + WCHAR PidlPath[MAX_PATH + 1] = {0}, FontsDir[MAX_PATH + 1]; if (!SHGetPathFromIDListW(pidl, PidlPath)) { ERR("Unable to extract path from pidl\n"); return E_FAIL; } - HRESULT hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, Expected); - if (!SUCCEEDED(hr)) + HRESULT hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, FontsDir); + if (FAILED_UNEXPECTEDLY(hr)) { ERR("Unable to get fonts path (0x%x)\n", hr); return hr; } - if (_wcsicmp(PidlPath, Expected)) + if (_wcsicmp(PidlPath, FontsDir)) { ERR("CFontExt View initializing on unexpected folder: '%S'\n", PidlPath); return E_FAIL; } m_Folder.Attach(ILClone(pidl)); + StringCchCatW(FontsDir, _countof(FontsDir), L"\\"); + g_FontCache->SetFontDir(FontsDir); return S_OK; } @@ -397,13 +476,8 @@ STDMETHODIMP CFontExt::Drop(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, { *pdwEffect = DROPEFFECT_NONE; - WCHAR szFontsDir[MAX_PATH]; - HRESULT hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, szFontsDir); - if (FAILED_UNEXPECTEDLY(hr)) - return E_FAIL; - CComHeapPtr cida; - hr = _GetCidlFromDataObject(pDataObj, &cida); + HRESULT hr = _GetCidlFromDataObject(pDataObj, &cida); if (FAILED_UNEXPECTEDLY(hr)) return hr; @@ -471,7 +545,7 @@ STDMETHODIMP CFontExt::Drop(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, for (size_t iItem = 0; iItem < FontPaths.GetCount(); ++iItem) { - HRESULT hr = DoInstallFontFile(FontPaths[iItem], szFontsDir, keyFonts.m_hKey); + HRESULT hr = DoInstallFontFile(FontPaths[iItem], g_FontCache->FontPath(), keyFonts.m_hKey); if (FAILED_UNEXPECTEDLY(hr)) { bOK = FALSE; diff --git a/dll/shellext/fontext/CFontExt.hpp b/dll/shellext/fontext/CFontExt.hpp index 19d94f6fa1c..6e3a178042d 100644 --- a/dll/shellext/fontext/CFontExt.hpp +++ b/dll/shellext/fontext/CFontExt.hpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: CFontExt definition - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) * Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com) */ @@ -16,6 +16,8 @@ class CFontExt : public IDropTarget { CComHeapPtr m_Folder; + CStringW m_LastDetailsFontName; + WIN32_FIND_DATAW m_LastDetailsFileData; public: diff --git a/dll/shellext/fontext/CFontMenu.cpp b/dll/shellext/fontext/CFontMenu.cpp index 0a2f0e55856..05b968e27d3 100644 --- a/dll/shellext/fontext/CFontMenu.cpp +++ b/dll/shellext/fontext/CFontMenu.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: CFontMenu implementation - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" @@ -69,20 +69,9 @@ static void RunFontViewer(HWND hwnd, const FontPidlEntry* fontEntry) WCHAR FontViewerPath[MAX_PATH] = L"%SystemRoot%\\System32\\fontview.exe"; WCHAR FontPathArg[MAX_PATH + 3]; - CStringW Path = g_FontCache->Filename(fontEntry); + CStringW Path = g_FontCache->Filename(fontEntry, true); if (!Path.IsEmpty()) { - if (PathIsRelativeW(Path)) - { - WCHAR FontsDir[MAX_PATH]; - HRESULT hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, FontsDir); - if (!FAILED_UNEXPECTEDLY(hr)) - { - StringCchCatW(FontsDir, _countof(FontsDir), L"\\"); - Path = FontsDir + Path; - } - } - // '/d' disables the install button StringCchPrintfW(FontPathArg, _countof(FontPathArg), L"/d %s", Path.GetString()); PathQuoteSpacesW(FontPathArg + 3); diff --git a/dll/shellext/fontext/CMakeLists.txt b/dll/shellext/fontext/CMakeLists.txt index 2f2586b2517..e50eebfa95b 100644 --- a/dll/shellext/fontext/CMakeLists.txt +++ b/dll/shellext/fontext/CMakeLists.txt @@ -22,7 +22,8 @@ list(APPEND SOURCE fontext.cpp fontpidl.cpp fontpidl.hpp - precomp.h) + precomp.h + resource.h) add_library(fontext MODULE ${SOURCE} diff --git a/dll/shellext/fontext/fontext.cpp b/dll/shellext/fontext/fontext.cpp index ab1ed51bbc7..d3659199e2d 100644 --- a/dll/shellext/fontext/fontext.cpp +++ b/dll/shellext/fontext/fontext.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: Shell extension entry point - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" @@ -59,11 +59,11 @@ STDAPI DllRegisterServer() HRESULT hr; hr = gModule.DllRegisterServer(FALSE); - if (FAILED(hr)) + if (FAILED_UNEXPECTEDLY(hr)) return hr; hr = SHGetFolderPathW(NULL, CSIDL_FONTS, NULL, 0, Path); - if (FAILED(hr)) + if (FAILED_UNEXPECTEDLY(hr)) return hr; // Make this a system folder: diff --git a/dll/shellext/fontext/fontpidl.cpp b/dll/shellext/fontext/fontpidl.cpp index 021afe128a4..38bb7814c84 100644 --- a/dll/shellext/fontext/fontpidl.cpp +++ b/dll/shellext/fontext/fontpidl.cpp @@ -2,7 +2,7 @@ * PROJECT: ReactOS Font Shell Extension * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later) * PURPOSE: pidl handling - * COPYRIGHT: Copyright 2019 Mark Jansen (mark.jansen@reactos.org) + * COPYRIGHT: Copyright 2019,2020 Mark Jansen (mark.jansen@reactos.org) */ #include "precomp.h" @@ -31,8 +31,8 @@ LPITEMIDLIST _ILCreate(LPCWSTR lpString, ULONG Index) const FontPidlEntry* _FontFromIL(LPCITEMIDLIST pidl) { - const FontPidlEntry* zipPidl = (const FontPidlEntry*)pidl; - if (zipPidl->Magic == 'fp') - return zipPidl; + const FontPidlEntry* fontEntry = (const FontPidlEntry*)pidl; + if (fontEntry->Magic == 'fp') + return fontEntry; return NULL; } diff --git a/dll/shellext/fontext/lang/en-US.rc b/dll/shellext/fontext/lang/en-US.rc index d7fcae09bef..cdc94dbe07a 100644 --- a/dll/shellext/fontext/lang/en-US.rc +++ b/dll/shellext/fontext/lang/en-US.rc @@ -13,6 +13,15 @@ BEGIN IDS_COL_NAME "Name" END +STRINGTABLE +BEGIN + IDS_COL_FILENAME "Filename" + IDS_COL_SIZE "Size" + IDS_COL_MODIFIED "Modified" + IDS_COL_ATTR "Attributes" + IDS_COL_ATTR_LETTERS "RHSAC" +END + STRINGTABLE BEGIN diff --git a/dll/shellext/fontext/lang/it-IT.rc b/dll/shellext/fontext/lang/it-IT.rc index 5c067cdc5f2..8fb1566f13f 100644 --- a/dll/shellext/fontext/lang/it-IT.rc +++ b/dll/shellext/fontext/lang/it-IT.rc @@ -11,3 +11,23 @@ STRINGTABLE BEGIN IDS_REACTOS_FONTS_FOLDER "Cartella dei font di ReactOS" END + +STRINGTABLE +BEGIN + IDS_COL_NAME "Name" +END + +STRINGTABLE +BEGIN + IDS_COL_FILENAME "Filename" + IDS_COL_SIZE "Size" + IDS_COL_MODIFIED "Modified" + IDS_COL_ATTR "Attributes" + IDS_COL_ATTR_LETTERS "RHSAC" +END + + +STRINGTABLE +BEGIN + IDS_FONT_PREVIEW "Preview" +END diff --git a/dll/shellext/fontext/lang/pl-PL.rc b/dll/shellext/fontext/lang/pl-PL.rc index 8a4c6cd170a..73fe7c170fc 100644 --- a/dll/shellext/fontext/lang/pl-PL.rc +++ b/dll/shellext/fontext/lang/pl-PL.rc @@ -6,3 +6,23 @@ STRINGTABLE BEGIN IDS_REACTOS_FONTS_FOLDER "Folder czcionek ReactOS" END + +STRINGTABLE +BEGIN + IDS_COL_NAME "Name" +END + +STRINGTABLE +BEGIN + IDS_COL_FILENAME "Filename" + IDS_COL_SIZE "Size" + IDS_COL_MODIFIED "Modified" + IDS_COL_ATTR "Attributes" + IDS_COL_ATTR_LETTERS "RHSAC" +END + + +STRINGTABLE +BEGIN + IDS_FONT_PREVIEW "Preview" +END diff --git a/dll/shellext/fontext/lang/ro-RO.rc b/dll/shellext/fontext/lang/ro-RO.rc index af1d14c65c6..a6f2e6219cf 100644 --- a/dll/shellext/fontext/lang/ro-RO.rc +++ b/dll/shellext/fontext/lang/ro-RO.rc @@ -11,3 +11,23 @@ STRINGTABLE BEGIN IDS_REACTOS_FONTS_FOLDER "Folder-ul de fonturi de ReactOS" END + +STRINGTABLE +BEGIN + IDS_COL_NAME "Name" +END + +STRINGTABLE +BEGIN + IDS_COL_FILENAME "Filename" + IDS_COL_SIZE "Size" + IDS_COL_MODIFIED "Modified" + IDS_COL_ATTR "Attributes" + IDS_COL_ATTR_LETTERS "RHSAC" +END + + +STRINGTABLE +BEGIN + IDS_FONT_PREVIEW "Preview" +END diff --git a/dll/shellext/fontext/lang/tr-TR.rc b/dll/shellext/fontext/lang/tr-TR.rc index 7f6ec6550d5..1c44a655a2e 100644 --- a/dll/shellext/fontext/lang/tr-TR.rc +++ b/dll/shellext/fontext/lang/tr-TR.rc @@ -6,3 +6,23 @@ STRINGTABLE BEGIN IDS_REACTOS_FONTS_FOLDER "ReactOS Yazı Tipi Klasörü" END + +STRINGTABLE +BEGIN + IDS_COL_NAME "Name" +END + +STRINGTABLE +BEGIN + IDS_COL_FILENAME "Filename" + IDS_COL_SIZE "Size" + IDS_COL_MODIFIED "Modified" + IDS_COL_ATTR "Attributes" + IDS_COL_ATTR_LETTERS "RHSAC" +END + + +STRINGTABLE +BEGIN + IDS_FONT_PREVIEW "Preview" +END diff --git a/dll/shellext/fontext/resource.h b/dll/shellext/fontext/resource.h index 49246c33524..8ff4867ee4e 100644 --- a/dll/shellext/fontext/resource.h +++ b/dll/shellext/fontext/resource.h @@ -4,6 +4,12 @@ #define IDS_REACTOS_FONTS_FOLDER 151 #define IDS_COL_NAME 301 +#define IDS_COL_FILENAME 304 +#define IDS_COL_SIZE 305 +#define IDS_COL_MODIFIED 306 +#define IDS_COL_ATTR 307 +#define IDS_COL_ATTR_LETTERS 308 + #define IDS_FONT_PREVIEW 401 #define IDR_FONTEXT 8000