https://git.reactos.org/?p=reactos.git;a=commitdiff;h=c09636f9469465940b74b2597a4464412f35a28a

commit c09636f9469465940b74b2597a4464412f35a28a
Author:     Mark Jansen <[email protected]>
AuthorDate: Mon Jan 20 21:43:19 2020 +0100
Commit:     Mark Jansen <[email protected]>
CommitDate: Wed Jan 29 22:55:50 2020 +0100

    [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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #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<BYTE> 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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #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();
+    }
+
+    if (!File.IsEmpty() && alwaysFullPath)
+    {
+        // Ensure this is a full path
+        if (PathIsRelativeW(File))
+        {
+            File = m_FontFolderPath + File;
+        }
     }
 
-    return CStringW();
+    return File;
 }
 
 void CFontCache::Insert(CAtlList<CFontInfo>& 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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #pragma once
@@ -27,6 +27,7 @@ class CFontCache
 {
 private:
     CAtlArray<CFontInfo> 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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  *              Copyright 2019 Katayama Hirofumi MZ 
([email protected])
  */
 
@@ -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> 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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  *              Copyright 2019 Katayama Hirofumi MZ 
([email protected])
  */
 
@@ -16,6 +16,8 @@ class CFontExt :
     public IDropTarget
 {
     CComHeapPtr<ITEMIDLIST> 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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #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 ([email protected])
+ * COPYRIGHT:   Copyright 2019,2020 Mark Jansen ([email protected])
  */
 
 #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

Reply via email to