ReactOS 0.4.16-dev-258-g81860b4
view.cpp File Reference
#include "precomp.h"
Include dependency graph for view.cpp:

Go to the source code of this file.

Classes

struct  VIEWTREE_ICON
 
struct  VIEWTREE_ENTRY
 

Macros

#define I_CHECKED   0
 
#define I_UNCHECKED   1
 
#define I_CHECKED_DISABLED   2
 
#define I_UNCHECKED_DISABLED   3
 
#define I_RADIO_CHECKED   4
 
#define I_RADIO_UNCHECKED   5
 
#define I_RADIO_CHECKED_DISABLED   6
 
#define I_RADIO_UNCHECKED_DISABLED   7
 
#define PREDEFINED_ICON_COUNT   8
 

Typedefs

typedef struct VIEWTREE_ICON VIEWTREE_ICON
 
typedef struct VIEWTREE_ICONPVIEWTREE_ICON
 
typedef enum VIEWTREE_ENTRY_TYPE VIEWTREE_ENTRY_TYPE
 
typedef enum VIEWTREE_ENTRY_TYPEPVIEWTREE_ENTRY_TYPE
 
typedef struct VIEWTREE_ENTRY VIEWTREE_ENTRY
 
typedef struct VIEWTREE_ENTRYPVIEWTREE_ENTRY
 

Enumerations

enum  VIEWTREE_ENTRY_TYPE { AETYPE_GROUP , AETYPE_CHECKBOX , AETYPE_RADIO }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (fprop)
 
static INT ViewTree_FindIcon (LPCWSTR pszPath, UINT nIconIndex)
 
static INT ViewTree_AddIcon (LPCWSTR pszPath, UINT nIconIndex)
 
static PVIEWTREE_ENTRY ViewTree_GetItem (DWORD dwID)
 
static INT ViewTree_GetImage (PVIEWTREE_ENTRY pEntry)
 
static VOID ViewTree_InsertEntry (HWND hwndTreeView, PVIEWTREE_ENTRY pEntry)
 
static VOID ViewTree_InsertAll (HWND hwndTreeView)
 
static BOOL ViewTree_LoadTree (HKEY hKey, LPCWSTR pszKeyName, DWORD dwParentID)
 
static BOOL ViewTree_LoadAll (VOID)
 
static int ViewTree_Compare (const void *x, const void *y)
 
static VOID ViewTree_SortAll (VOID)
 
static BOOL ViewDlg_OnInitDialog (HWND hwndDlg, LPPROPSHEETPAGE psp)
 
static BOOL ViewDlg_ToggleCheckItem (HWND hwndDlg, HTREEITEM hItem)
 
static VOID ViewDlg_OnTreeViewClick (HWND hwndDlg)
 
static void ViewDlg_OnTreeViewKeyDown (HWND hwndDlg, TV_KEYDOWN *KeyDown)
 
static INT_PTR ViewDlg_OnTreeCustomDraw (HWND hwndDlg, NMTVCUSTOMDRAW *Draw)
 
static VOID ViewDlg_RestoreDefaults (HWND hwndDlg)
 
static VOID ScanAdvancedSettings (SHELLSTATE *pSS, DWORD *pdwMask)
 
static BOOL CALLBACK PostCabinetMessageCallback (HWND hWnd, LPARAM param)
 
void PostCabinetMessage (UINT Msg, WPARAM wParam, LPARAM lParam)
 
static VOID ViewDlg_Apply (HWND hwndDlg)
 
INT_PTR CALLBACK FolderOptionsViewDlg (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 

Variables

static PVIEWTREE_ENTRY s_ViewTreeEntries = NULL
 
static INT s_ViewTreeEntryCount = 0
 
static PVIEWTREE_ICON s_ViewTreeIcons = NULL
 
static INT s_ViewTreeIconCount = 0
 
static HIMAGELIST s_hTreeImageList = NULL
 
static HIMAGELIST ViewDlg_CreateTreeImageList (VOID)
 

Macro Definition Documentation

◆ I_CHECKED

#define I_CHECKED   0

Definition at line 30 of file view.cpp.

◆ I_CHECKED_DISABLED

#define I_CHECKED_DISABLED   2

Definition at line 32 of file view.cpp.

◆ I_RADIO_CHECKED

#define I_RADIO_CHECKED   4

Definition at line 34 of file view.cpp.

◆ I_RADIO_CHECKED_DISABLED

#define I_RADIO_CHECKED_DISABLED   6

Definition at line 36 of file view.cpp.

◆ I_RADIO_UNCHECKED

#define I_RADIO_UNCHECKED   5

Definition at line 35 of file view.cpp.

◆ I_RADIO_UNCHECKED_DISABLED

#define I_RADIO_UNCHECKED_DISABLED   7

Definition at line 37 of file view.cpp.

◆ I_UNCHECKED

#define I_UNCHECKED   1

Definition at line 31 of file view.cpp.

◆ I_UNCHECKED_DISABLED

#define I_UNCHECKED_DISABLED   3

Definition at line 33 of file view.cpp.

◆ PREDEFINED_ICON_COUNT

#define PREDEFINED_ICON_COUNT   8

Definition at line 38 of file view.cpp.

Typedef Documentation

◆ PVIEWTREE_ENTRY

◆ PVIEWTREE_ENTRY_TYPE

◆ PVIEWTREE_ICON

◆ VIEWTREE_ENTRY

◆ VIEWTREE_ENTRY_TYPE

◆ VIEWTREE_ICON

Enumeration Type Documentation

◆ VIEWTREE_ENTRY_TYPE

Enumerator
AETYPE_GROUP 
AETYPE_CHECKBOX 
AETYPE_RADIO 

Definition at line 48 of file view.cpp.

49{
VIEWTREE_ENTRY_TYPE
Definition: view.cpp:49
@ AETYPE_GROUP
Definition: view.cpp:50
@ AETYPE_CHECKBOX
Definition: view.cpp:51
@ AETYPE_RADIO
Definition: view.cpp:52
enum VIEWTREE_ENTRY_TYPE * PVIEWTREE_ENTRY_TYPE

Function Documentation

◆ FolderOptionsViewDlg()

INT_PTR CALLBACK FolderOptionsViewDlg ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 953 of file view.cpp.

958{
961
962 switch (uMsg)
963 {
964 case WM_INITDIALOG:
966
967 case WM_COMMAND:
968 switch (LOWORD(wParam))
969 {
970 case IDC_VIEW_RESTORE_DEFAULTS: // Restore Defaults
972 break;
973
976 {
979 if (pFO)
980 hr = pFO->ApplyDefFolderSettings(LOWORD(wParam) == IDC_VIEW_RESET_ALL);
981 if (FAILED(hr))
982 SHELL_ErrorBox(hwndDlg, hr);
983 break;
984 }
985 }
986 break;
987
988 case WM_NOTIFY:
989 switch (LPNMHDR(lParam)->code)
990 {
991 case NM_CLICK: // clicked on treeview
993 break;
994
995 case NM_CUSTOMDRAW: // custom draw (for graying)
999 return Result;
1000
1001 case TVN_KEYDOWN: // key is down
1003 break;
1004
1005 case PSN_APPLY: // [Apply] is clicked
1006 ViewDlg_Apply(hwndDlg);
1007 break;
1008
1009 default:
1010 break;
1011 }
1012 break;
1013 }
1014
1015 return FALSE;
1016}
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define FALSE
Definition: types.h:117
#define ERROR_NOT_SUPPORTED
Definition: compat.h:100
FxFileObject * pFO
#define FAILED(hr)
Definition: intsafe.h:51
void Draw(HDC aDc)
Definition: magnifier.c:359
#define LOWORD(l)
Definition: pedump.c:82
#define PSN_APPLY
Definition: prsht.h:117
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define TVN_KEYDOWN
Definition: commctrl.h:3718
#define NM_CLICK
Definition: commctrl.h:130
#define NM_CUSTOMDRAW
Definition: commctrl.h:137
#define TV_KEYDOWN
Definition: commctrl.h:3727
#define WM_NOTIFY
Definition: richedit.h:61
HRESULT hr
Definition: shlfolder.c:183
#define IDC_VIEW_RESET_ALL
Definition: shresdef.h:505
#define IDC_VIEW_RESTORE_DEFAULTS
Definition: shresdef.h:507
#define IDC_VIEW_APPLY_TO_ALL
Definition: shresdef.h:504
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
static void ViewDlg_OnTreeViewKeyDown(HWND hwndDlg, TV_KEYDOWN *KeyDown)
Definition: view.cpp:728
static VOID ViewDlg_RestoreDefaults(HWND hwndDlg)
Definition: view.cpp:774
static INT_PTR ViewDlg_OnTreeCustomDraw(HWND hwndDlg, NMTVCUSTOMDRAW *Draw)
Definition: view.cpp:744
static VOID ViewDlg_Apply(HWND hwndDlg)
Definition: view.cpp:890
static BOOL ViewDlg_OnInitDialog(HWND hwndDlg, LPPROPSHEETPAGE psp)
Definition: view.cpp:621
static VOID ViewDlg_OnTreeViewClick(HWND hwndDlg)
Definition: view.cpp:706
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define GWL_USERDATA
Definition: winuser.h:864
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_INITDIALOG
Definition: winuser.h:1742
struct tagNMHDR * LPNMHDR
#define DWLP_MSGRESULT
Definition: winuser.h:873
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
Definition: wsk.h:409

Referenced by CFolderOptions::AddPages(), and ShowFolderOptionsDialogThreadProc().

◆ PostCabinetMessage()

void PostCabinetMessage ( UINT  Msg,
WPARAM  wParam,
LPARAM  lParam 
)

Definition at line 880 of file view.cpp.

881{
882 MSG data;
883 data.message = Msg;
884 data.wParam = wParam;
885 data.lParam = lParam;
887}
struct @1640 Msg[]
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1829
static BOOL CALLBACK PostCabinetMessageCallback(HWND hWnd, LPARAM param)
Definition: view.cpp:863
LONG_PTR LPARAM
Definition: windef.h:208
BOOL WINAPI EnumWindows(_In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam)

Referenced by GeneralDlg_OnApply(), and ViewDlg_Apply().

◆ PostCabinetMessageCallback()

static BOOL CALLBACK PostCabinetMessageCallback ( HWND  hWnd,
LPARAM  param 
)
static

Definition at line 863 of file view.cpp.

864{
865 MSG &data = *(MSG*)param;
866 WCHAR ClassName[100];
867 if (GetClassNameW(hWnd, ClassName, _countof(ClassName)))
868 {
869 if (!wcscmp(ClassName, L"Progman") ||
870 !wcscmp(ClassName, L"CabinetWClass") ||
871 !wcscmp(ClassName, L"ExploreWClass"))
872 {
873 PostMessage(hWnd, data.message, data.wParam, data.lParam);
874 }
875 }
876 return TRUE;
877}
HWND hWnd
Definition: settings.c:17
#define TRUE
Definition: types.h:120
GLfloat param
Definition: glext.h:5796
#define L(x)
Definition: ntvdm.h:50
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define _countof(array)
Definition: sndvol32.h:70
#define PostMessage
Definition: winuser.h:5844
int WINAPI GetClassNameW(_In_ HWND hWnd, _Out_writes_to_(nMaxCount, return) LPWSTR lpClassName, _In_ int nMaxCount)
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by PostCabinetMessage().

◆ ScanAdvancedSettings()

static VOID ScanAdvancedSettings ( SHELLSTATE pSS,
DWORD pdwMask 
)
static

Definition at line 812 of file view.cpp.

813{
814 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
815 {
817 if (pEntry->dwType == AETYPE_GROUP || pEntry->bGrayed)
818 continue;
819
820 BOOL bChecked = pEntry->bChecked;
821
822 // FIXME: Add more items
823 if (lstrcmpiW(pEntry->szKeyName, L"SuperHidden") == 0)
824 {
825 pSS->fShowSuperHidden = !bChecked ? 1 : 0;
826 *pdwMask |= SSF_SHOWSUPERHIDDEN;
827 continue;
828 }
829 if (lstrcmpiW(pEntry->szKeyName, L"DesktopProcess") == 0)
830 {
831 pSS->fSepProcess = bChecked ? 1 : 0;
832 *pdwMask |= SSF_SEPPROCESS;
833 continue;
834 }
835 if (lstrcmpiW(pEntry->szKeyName, L"SHOWALL") == 0)
836 {
837 pSS->fShowAllObjects = bChecked ? 1 : 0;
838 *pdwMask |= SSF_SHOWALLOBJECTS;
839 continue;
840 }
841 if (lstrcmpiW(pEntry->szKeyName, L"HideFileExt") == 0)
842 {
843 pSS->fShowExtensions = !bChecked ? 1 : 0;
844 *pdwMask |= SSF_SHOWEXTENSIONS;
845 continue;
846 }
847 if (lstrcmpiW(pEntry->szKeyName, L"ShowCompColor") == 0)
848 {
849 pSS->fShowCompColor = bChecked ? 1 : 0;
850 *pdwMask |= SSF_SHOWCOMPCOLOR;
851 continue;
852 }
853 if (lstrcmpiW(pEntry->szKeyName, L"ShowInfoTip") == 0)
854 {
855 pSS->fShowInfoTip = bChecked ? 1 : 0;
856 *pdwMask |= SSF_SHOWINFOTIP;
857 continue;
858 }
859 }
860}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4262
unsigned int BOOL
Definition: ntddk_ex.h:94
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define SSF_SEPPROCESS
Definition: shlobj.h:1622
#define SSF_SHOWCOMPCOLOR
Definition: shlobj.h:1607
#define SSF_SHOWEXTENSIONS
Definition: shlobj.h:1606
#define SSF_SHOWSUPERHIDDEN
Definition: shlobj.h:1621
#define SSF_SHOWALLOBJECTS
Definition: shlobj.h:1605
#define SSF_SHOWINFOTIP
Definition: shlobj.h:1616
BOOL fShowSuperHidden
Definition: shlobj.h:1557
BOOL fShowExtensions
Definition: shlobj.h:1542
BOOL fShowCompColor
Definition: shlobj.h:1546
BOOL fShowInfoTip
Definition: shlobj.h:1553
BOOL fSepProcess
Definition: shlobj.h:1567
BOOL fShowAllObjects
Definition: shlobj.h:1541
Definition: view.cpp:57
int32_t INT
Definition: typedefs.h:58
static PVIEWTREE_ENTRY s_ViewTreeEntries
Definition: view.cpp:81
static INT s_ViewTreeEntryCount
Definition: view.cpp:82

Referenced by ViewDlg_Apply().

◆ ViewDlg_Apply()

static VOID ViewDlg_Apply ( HWND  hwndDlg)
static

Definition at line 890 of file view.cpp.

891{
892 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
893 {
894 // ignore the entry if the type is group or the entry is grayed
896 if (pEntry->dwType == AETYPE_GROUP || pEntry->bGrayed)
897 continue;
898
899 // open the registry key
900 HKEY hkeyTarget;
901 if (RegOpenKeyExW(HKEY(pEntry->hkeyRoot), pEntry->szRegPath, 0,
902 KEY_WRITE, &hkeyTarget) != ERROR_SUCCESS)
903 {
904 continue;
905 }
906
907 // checked or unchecked?
908 DWORD dwValue, dwSize;
909 if (pEntry->bChecked)
910 {
911 dwValue = pEntry->dwCheckedValue;
912 }
913 else
914 {
915 if (pEntry->bHasUncheckedValue)
916 {
917 dwValue = pEntry->dwUncheckedValue;
918 }
919 else
920 {
921 // there is no unchecked value
922 RegCloseKey(hkeyTarget);
923 continue; // ignore
924 }
925 }
926
927 // set the value
928 dwSize = sizeof(dwValue);
929 RegSetValueExW(hkeyTarget, pEntry->szValueName, 0, REG_DWORD,
930 LPBYTE(&dwValue), dwSize);
931
932 // close now
933 RegCloseKey(hkeyTarget);
934 }
935
936 // scan advanced settings for user's settings
937 DWORD dwMask = 0;
938 SHELLSTATE ShellState;
939 ZeroMemory(&ShellState, sizeof(ShellState));
940 ScanAdvancedSettings(&ShellState, &dwMask);
941
942 // update user's settings
943 SHGetSetSettings(&ShellState, dwMask, TRUE);
944
945 // notify all
947
949}
HANDLE HKEY
Definition: registry.h:26
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define FCIDM_DESKBROWSER_REFRESH
Definition: desktop.c:14
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
unsigned long DWORD
Definition: ntddk_ex.h:95
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_WRITE
Definition: nt_native.h:1031
#define REG_DWORD
Definition: sdbapi.c:596
VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
Definition: shellord.c:225
unsigned char * LPBYTE
Definition: typedefs.h:53
static VOID ScanAdvancedSettings(SHELLSTATE *pSS, DWORD *pdwMask)
Definition: view.cpp:812
void PostCabinetMessage(UINT Msg, WPARAM wParam, LPARAM lParam)
Definition: view.cpp:880
#define ZeroMemory
Definition: winbase.h:1737
#define HWND_BROADCAST
Definition: winuser.h:1207
#define WM_WININICHANGE
Definition: winuser.h:1633
#define SendMessage
Definition: winuser.h:5855

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_OnInitDialog()

static BOOL ViewDlg_OnInitDialog ( HWND  hwndDlg,
LPPROPSHEETPAGE  psp 
)
static

Definition at line 621 of file view.cpp.

622{
623 SetWindowLongPtr(hwndDlg, GWL_USERDATA, psp->lParam);
624 CFolderOptions *pFO = (CFolderOptions*)psp->lParam;
625
626 if (!pFO || !pFO->CanSetDefFolderSettings())
627 {
628 // The global options (started from rundll32 or control panel)
629 // has no browser to copy the current settings from.
631 }
632
634
637
641
642 return TRUE; // set focus
643}
HWND hwndTreeView
Definition: eventvwr.c:65
if(dx< 0)
Definition: linetemp.h:194
#define TVSIL_NORMAL
Definition: commctrl.h:3448
#define TreeView_SetImageList(hwnd, himl, iImage)
Definition: commctrl.h:3452
#define IDC_VIEW_TREEVIEW
Definition: shresdef.h:506
static VOID ViewTree_InsertAll(HWND hwndTreeView)
Definition: view.cpp:226
static HIMAGELIST s_hTreeImageList
Definition: view.cpp:87
static BOOL ViewTree_LoadAll(VOID)
Definition: view.cpp:442
static VOID ViewTree_SortAll(VOID)
Definition: view.cpp:539
static HIMAGELIST ViewDlg_CreateTreeImageList(VOID)
Definition: view.cpp:548
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_OnTreeCustomDraw()

static INT_PTR ViewDlg_OnTreeCustomDraw ( HWND  hwndDlg,
NMTVCUSTOMDRAW Draw 
)
static

Definition at line 744 of file view.cpp.

745{
746 NMCUSTOMDRAW& nmcd = Draw->nmcd;
747 switch (nmcd.dwDrawStage)
748 {
749 case CDDS_PREPAINT:
750 return CDRF_NOTIFYITEMDRAW; // for CDDS_ITEMPREPAINT
751
753 if (!(nmcd.uItemState & CDIS_SELECTED)) // not selected
754 {
757 if (pEntry && pEntry->bGrayed) // disabled
758 {
759 // draw as grayed
760 Draw->clrText = GetSysColor(COLOR_GRAYTEXT);
761 Draw->clrTextBk = GetSysColor(COLOR_WINDOW);
762 return CDRF_NEWFONT;
763 }
764 }
765 break;
766
767 default:
768 break;
769 }
770 return CDRF_DODEFAULT;
771}
#define CDDS_ITEMPREPAINT
Definition: commctrl.h:285
#define CDRF_NOTIFYITEMDRAW
Definition: commctrl.h:275
#define CDRF_DODEFAULT
Definition: commctrl.h:268
#define CDIS_SELECTED
Definition: commctrl.h:291
#define CDRF_NEWFONT
Definition: commctrl.h:269
#define CDDS_PREPAINT
Definition: commctrl.h:280
static PVIEWTREE_ENTRY ViewTree_GetItem(DWORD dwID)
Definition: view.cpp:146
DWORD WINAPI GetSysColor(_In_ int)
#define COLOR_GRAYTEXT
Definition: winuser.h:935
#define COLOR_WINDOW
Definition: winuser.h:921

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_OnTreeViewClick()

static VOID ViewDlg_OnTreeViewClick ( HWND  hwndDlg)
static

Definition at line 706 of file view.cpp.

707{
709
710 // do hit test to get the clicked item
711 TV_HITTESTINFO HitTest;
712 ZeroMemory(&HitTest, sizeof(HitTest));
713 DWORD dwPos = GetMessagePos();
714 HitTest.pt.x = LOWORD(dwPos);
715 HitTest.pt.y = HIWORD(dwPos);
716 ScreenToClient(hwndTreeView, &HitTest.pt);
718
719 // toggle the check mark if possible
720 if (ViewDlg_ToggleCheckItem(hwndDlg, hItem))
721 {
722 // property sheet was changed
723 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
724 }
725}
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define TV_HITTESTINFO
Definition: commctrl.h:3521
#define TreeView_HitTest(hwnd, lpht)
Definition: commctrl.h:3518
#define HIWORD(l)
Definition: typedefs.h:247
static BOOL ViewDlg_ToggleCheckItem(HWND hwndDlg, HTREEITEM hItem)
Definition: view.cpp:646
DWORD WINAPI GetMessagePos(void)
Definition: message.c:1351
HWND WINAPI GetParent(_In_ HWND)
BOOL WINAPI ScreenToClient(_In_ HWND, _Inout_ LPPOINT)

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_OnTreeViewKeyDown()

static void ViewDlg_OnTreeViewKeyDown ( HWND  hwndDlg,
TV_KEYDOWN KeyDown 
)
static

Definition at line 728 of file view.cpp.

729{
731
732 if (KeyDown->wVKey == VK_SPACE)
733 {
734 // [Space] key was pressed
736 if (ViewDlg_ToggleCheckItem(hwndDlg, hItem))
737 {
738 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
739 }
740 }
741}
#define TreeView_GetSelection(hwnd)
Definition: commctrl.h:3478
#define VK_SPACE
Definition: winuser.h:2222

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_RestoreDefaults()

static VOID ViewDlg_RestoreDefaults ( HWND  hwndDlg)
static

Definition at line 774 of file view.cpp.

775{
777
778 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
779 {
780 // ignore if the type is group
782 if (pEntry->dwType == AETYPE_GROUP)
783 continue;
784
785 // set default value on registry
786 HKEY hKey;
787 if (RegOpenKeyExW(HKEY(pEntry->hkeyRoot), pEntry->szRegPath,
789 {
790 continue;
791 }
792 RegSetValueExW(hKey, pEntry->szValueName, 0, REG_DWORD,
793 LPBYTE(&pEntry->dwDefaultValue), sizeof(DWORD));
795
796 // update check status
797 pEntry->bChecked = (pEntry->dwCheckedValue == pEntry->dwDefaultValue);
798
799 // update the image
801 ZeroMemory(&Item, sizeof(Item));
803 Item.hItem = pEntry->hItem;
804 Item.iImage = Item.iSelectedImage = ViewTree_GetImage(pEntry);
806 }
807
808 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
809}
FxAutoRegKey hKey
#define TVIF_IMAGE
Definition: commctrl.h:3272
#define TV_ITEM
Definition: commctrl.h:3305
#define TVIF_HANDLE
Definition: commctrl.h:3275
#define TVIF_SELECTEDIMAGE
Definition: commctrl.h:3276
#define TreeView_SetItem(hwnd, pitem)
Definition: commctrl.h:3502
static INT ViewTree_GetImage(PVIEWTREE_ENTRY pEntry)
Definition: view.cpp:161
_In_ WDFCOLLECTION _In_ WDFOBJECT Item

Referenced by FolderOptionsViewDlg().

◆ ViewDlg_ToggleCheckItem()

static BOOL ViewDlg_ToggleCheckItem ( HWND  hwndDlg,
HTREEITEM  hItem 
)
static

Definition at line 646 of file view.cpp.

647{
649
650 // get the item
652 INT i;
653 ZeroMemory(&Item, sizeof(Item));
655 Item.hItem = hItem;
657 return FALSE; // no such item
658
660 if (pEntry == NULL)
661 return FALSE; // no such item
662 if (pEntry->bGrayed)
663 return FALSE; // disabled
664
665 // toggle check mark
667 switch (pEntry->dwType)
668 {
669 case AETYPE_CHECKBOX:
670 pEntry->bChecked = !pEntry->bChecked;
671 break;
672
673 case AETYPE_RADIO:
674 // reset all the entries of the same parent
675 for (i = 0; i < s_ViewTreeEntryCount; ++i)
676 {
678 if (pEntry->dwParentID == pEntry2->dwParentID)
679 {
680 pEntry2->bChecked = FALSE;
681
682 Item.hItem = pEntry2->hItem;
683 INT iImage = ViewTree_GetImage(pEntry2);
684 Item.iImage = Item.iSelectedImage = iImage;
686 }
687 }
688 pEntry->bChecked = TRUE;
689 break;
690
691 default:
692 return FALSE; // failure
693 }
694 Item.iImage = Item.iSelectedImage = ViewTree_GetImage(pEntry);
695 Item.hItem = hItem;
697
698 // redraw the item
699 RECT rcItem;
702 return TRUE; // success
703}
#define NULL
Definition: types.h:112
#define TreeView_GetItem(hwnd, pitem)
Definition: commctrl.h:3495
#define TreeView_GetItemRect(hwnd, hitem, prc, code)
Definition: commctrl.h:3434
#define TVIF_PARAM
Definition: commctrl.h:3273
DWORD dwParentID
Definition: view.cpp:59
BOOL bChecked
Definition: view.cpp:77
HTREEITEM hItem
Definition: view.cpp:75
HTREEITEM hItem
Definition: treelist.h:37
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)

Referenced by ViewDlg_OnTreeViewClick(), and ViewDlg_OnTreeViewKeyDown().

◆ ViewTree_AddIcon()

static INT ViewTree_AddIcon ( LPCWSTR  pszPath,
UINT  nIconIndex 
)
static

Definition at line 105 of file view.cpp.

106{
107 PVIEWTREE_ICON pAllocated;
108
109 // return the ID if already existed
110 INT nIconID = ViewTree_FindIcon(pszPath, nIconIndex);
111 if (nIconID != -1)
112 return nIconID; // already exists
113
114 // extract a small icon
115 HICON hIconSmall = NULL;
116 ExtractIconExW(pszPath, nIconIndex, NULL, &hIconSmall, 1);
117 if (hIconSmall == NULL)
118 return -1; // failure
119
120 // resize s_ViewTreeIcons
121 size_t Size = (s_ViewTreeIconCount + 1) * sizeof(VIEWTREE_ICON);
123 if (pAllocated == NULL)
124 return -1; // failure
125 else
126 s_ViewTreeIcons = pAllocated;
127
128 // save icon information
130 lstrcpynW(pIcon->szPath, pszPath, _countof(pIcon->szPath));
131 pIcon->nIconIndex = nIconIndex;
132
133 // add the icon to the image list
135
136 // increment the counter
137 nIconID = s_ViewTreeIconCount;
139
140 DestroyIcon(hIconSmall);
141
142 return nIconID; // newly-added icon ID
143}
#define realloc
Definition: debug_ros.c:6
#define lstrcpynW
Definition: compat.h:738
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:849
static HICON
Definition: imagelist.c:80
#define ImageList_AddIcon(himl, hicon)
Definition: commctrl.h:415
UINT nIconIndex
Definition: view.cpp:44
WCHAR szPath[MAX_PATH]
Definition: view.cpp:43
static INT s_ViewTreeIconCount
Definition: view.cpp:86
static INT ViewTree_FindIcon(LPCWSTR pszPath, UINT nIconIndex)
Definition: view.cpp:90
struct VIEWTREE_ICON * PVIEWTREE_ICON
static PVIEWTREE_ICON s_ViewTreeIcons
Definition: view.cpp:85
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2105

Referenced by ViewTree_LoadTree().

◆ ViewTree_Compare()

static int ViewTree_Compare ( const void x,
const void y 
)
static

Definition at line 485 of file view.cpp.

486{
489
490 DWORD dwParentID1 = pEntry1->dwParentID;
491 DWORD dwParentID2 = pEntry2->dwParentID;
492
493 if (dwParentID1 == dwParentID2)
494 return lstrcmpi(pEntry1->szText, pEntry2->szText);
495
496 DWORD i, m, n;
497 const UINT MAX_DEPTH = 32;
498 PVIEWTREE_ENTRY pArray1[MAX_DEPTH];
499 PVIEWTREE_ENTRY pArray2[MAX_DEPTH];
500
501 // Make ancestor lists
502 for (i = m = n = 0; i < MAX_DEPTH; ++i)
503 {
504 PVIEWTREE_ENTRY pParent1 = ViewTree_GetItem(dwParentID1);
505 PVIEWTREE_ENTRY pParent2 = ViewTree_GetItem(dwParentID2);
506 if (!pParent1 && !pParent2)
507 break;
508
509 if (pParent1)
510 {
511 pArray1[m++] = pParent1;
512 dwParentID1 = pParent1->dwParentID;
513 }
514 if (pParent2)
515 {
516 pArray2[n++] = pParent2;
517 dwParentID2 = pParent2->dwParentID;
518 }
519 }
520
521 UINT k = min(m, n);
522 for (i = 0; i < k; ++i)
523 {
524 INT nCompare = lstrcmpi(pArray1[m - i - 1]->szText, pArray2[n - i - 1]->szText);
525 if (nCompare < 0)
526 return -1;
527 if (nCompare > 0)
528 return 1;
529 }
530
531 if (m < n)
532 return -1;
533 if (m > n)
534 return 1;
535 return lstrcmpi(pEntry1->szText, pEntry2->szText);
536}
#define MAX_DEPTH
Definition: config.h:145
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLdouble n
Definition: glext.h:7729
const GLfloat * m
Definition: glext.h:10848
#define min(a, b)
Definition: monoChain.cc:55
int k
Definition: mpi.c:3369
unsigned int UINT
Definition: ndis.h:50
WCHAR szText[MAX_PATH]
Definition: view.cpp:63
struct VIEWTREE_ENTRY * PVIEWTREE_ENTRY
#define lstrcmpi
Definition: winbase.h:3898

Referenced by ViewTree_SortAll().

◆ ViewTree_FindIcon()

static INT ViewTree_FindIcon ( LPCWSTR  pszPath,
UINT  nIconIndex 
)
static

Definition at line 90 of file view.cpp.

91{
93 {
95 if (pIcon->nIconIndex == nIconIndex &&
96 lstrcmpiW(pIcon->szPath, pszPath) == 0)
97 {
98 return i; // icon ID
99 }
100 }
101 return -1; // not found
102}
#define PREDEFINED_ICON_COUNT
Definition: view.cpp:38

Referenced by ViewTree_AddIcon().

◆ ViewTree_GetImage()

static INT ViewTree_GetImage ( PVIEWTREE_ENTRY  pEntry)
static

Definition at line 161 of file view.cpp.

162{
163 switch (pEntry->dwType)
164 {
165 case AETYPE_GROUP:
166 return pEntry->nIconID;
167
168 case AETYPE_CHECKBOX:
169 if (pEntry->bGrayed)
170 {
171 if (pEntry->bChecked)
172 return I_CHECKED_DISABLED;
173 else
175 }
176 else
177 {
178 if (pEntry->bChecked)
179 return I_CHECKED;
180 else
181 return I_UNCHECKED;
182 }
183
184 case AETYPE_RADIO:
185 if (pEntry->bGrayed)
186 {
187 if (pEntry->bChecked)
189 else
191 }
192 else
193 {
194 if (pEntry->bChecked)
195 return I_RADIO_CHECKED;
196 else
197 return I_RADIO_UNCHECKED;
198 }
199 }
200 return -1; // failure
201}
#define I_RADIO_UNCHECKED
Definition: view.cpp:35
#define I_CHECKED_DISABLED
Definition: view.cpp:32
#define I_RADIO_CHECKED_DISABLED
Definition: view.cpp:36
#define I_UNCHECKED
Definition: view.cpp:31
#define I_RADIO_UNCHECKED_DISABLED
Definition: view.cpp:37
#define I_UNCHECKED_DISABLED
Definition: view.cpp:33
#define I_CHECKED
Definition: view.cpp:30
#define I_RADIO_CHECKED
Definition: view.cpp:34

Referenced by ViewDlg_RestoreDefaults(), ViewDlg_ToggleCheckItem(), and ViewTree_InsertEntry().

◆ ViewTree_GetItem()

static PVIEWTREE_ENTRY ViewTree_GetItem ( DWORD  dwID)
static

Definition at line 146 of file view.cpp.

147{
148 if (dwID == DWORD(-1))
149 return NULL;
150
151 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
152 {
154 if (pEntry->dwID == dwID)
155 return pEntry;
156 }
157 return NULL; // failure
158}
#define DWORD
Definition: nt_native.h:44

Referenced by ViewDlg_OnTreeCustomDraw(), ViewDlg_ToggleCheckItem(), ViewTree_Compare(), and ViewTree_InsertEntry().

◆ ViewTree_InsertAll()

static VOID ViewTree_InsertAll ( HWND  hwndTreeView)
static

Definition at line 226 of file view.cpp.

227{
229
230 // insert the entries
232 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
233 {
236 }
237
238 // expand all
239 for (INT i = 0; i < s_ViewTreeEntryCount; ++i)
240 {
242 if (pEntry->dwType == AETYPE_GROUP)
243 {
245 }
246 }
247}
#define TreeView_DeleteAllItems(hwnd)
Definition: commctrl.h:3422
#define TreeView_Expand(hwnd, hitem, code)
Definition: commctrl.h:3425
#define TVE_EXPAND
Definition: commctrl.h:3428
static VOID ViewTree_InsertEntry(HWND hwndTreeView, PVIEWTREE_ENTRY pEntry)
Definition: view.cpp:204

Referenced by ViewDlg_OnInitDialog().

◆ ViewTree_InsertEntry()

static VOID ViewTree_InsertEntry ( HWND  hwndTreeView,
PVIEWTREE_ENTRY  pEntry 
)
static

Definition at line 204 of file view.cpp.

205{
207 HTREEITEM hParent = TVI_ROOT;
208 if (pParent)
209 hParent = pParent->hItem;
210
211 TV_INSERTSTRUCT Insertion;
212 ZeroMemory(&Insertion, sizeof(Insertion));
213 Insertion.hParent = hParent;
214 Insertion.hInsertAfter = TVI_LAST;
215 Insertion.item.mask =
217 Insertion.item.pszText = pEntry->szText;
218
219 INT iImage = ViewTree_GetImage(pEntry);
220 Insertion.item.iImage = Insertion.item.iSelectedImage = iImage;
221 Insertion.item.lParam = pEntry->dwID;
222 pEntry->hItem = TreeView_InsertItem(hwndTreeView, &Insertion);
223}
FxObject * pParent
Definition: fxdpcapi.cpp:86
#define TVI_LAST
Definition: commctrl.h:3375
#define TVIF_TEXT
Definition: commctrl.h:3271
#define TV_INSERTSTRUCT
Definition: commctrl.h:3382
#define TVI_ROOT
Definition: commctrl.h:3373
#define TreeView_InsertItem(hwnd, lpis)
Definition: commctrl.h:3417

Referenced by ViewTree_InsertAll().

◆ ViewTree_LoadAll()

static BOOL ViewTree_LoadAll ( VOID  )
static

Definition at line 442 of file view.cpp.

443{
444 // free if already existed
446 {
449 }
451
452 HKEY hKey;
454 L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
455 0, KEY_READ, &hKey) != ERROR_SUCCESS)
456 {
457 return FALSE; // failure
458 }
459
460 // load the children
461 WCHAR szKeyName[64];
462 DWORD dwIndex = 0;
463 while (RegEnumKeyW(hKey, dwIndex, szKeyName,
464 _countof(szKeyName)) == ERROR_SUCCESS)
465 {
466 HKEY hkeyChild;
467 if (RegOpenKeyExW(hKey, szKeyName, 0, KEY_READ,
468 &hkeyChild) != ERROR_SUCCESS)
469 {
470 ++dwIndex;
471 continue; // failure
472 }
473
474 ViewTree_LoadTree(hkeyChild, szKeyName, DWORD(-1));
475 RegCloseKey(hkeyChild);
476
477 ++dwIndex;
478 }
479
481
482 return TRUE; // success
483}
#define free
Definition: debug_ros.c:5
LONG WINAPI RegEnumKeyW(HKEY hKey, DWORD dwIndex, LPWSTR lpName, DWORD cbName)
Definition: reg.c:2393
#define KEY_READ
Definition: nt_native.h:1023
static BOOL ViewTree_LoadTree(HKEY hKey, LPCWSTR pszKeyName, DWORD dwParentID)
Definition: view.cpp:250
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by ViewDlg_OnInitDialog().

◆ ViewTree_LoadTree()

static BOOL ViewTree_LoadTree ( HKEY  hKey,
LPCWSTR  pszKeyName,
DWORD  dwParentID 
)
static

Definition at line 250 of file view.cpp.

251{
252 DWORD dwIndex;
253 WCHAR szKeyName[64], szText[MAX_PATH], *pch;
255 PVIEWTREE_ENTRY pAllocated;
256
257 // resize s_ViewTreeEntries
258 Size = (s_ViewTreeEntryCount + 1) * sizeof(VIEWTREE_ENTRY);
260 if (pAllocated == NULL)
261 return FALSE; // failure
262 else
263 s_ViewTreeEntries = pAllocated;
264
266
267 // dwID, dwParentID, szKeyName
269 pEntry->dwParentID = dwParentID;
270 lstrcpynW(pEntry->szKeyName, pszKeyName, _countof(pEntry->szKeyName));
271
272 // Text, ResourceID
273 pEntry->szText[0] = 0;
274 pEntry->dwResourceID = 0;
275 szText[0] = 0;
276 Size = sizeof(szText);
277 RegQueryValueExW(hKey, L"Text", NULL, NULL, LPBYTE(szText), &Size);
278 if (szText[0] == L'@')
279 {
280 pch = wcsrchr(szText, L',');
281 if (pch)
282 {
283 *pch = 0;
284 dwIndex = abs(_wtoi(pch + 1));
285 pEntry->dwResourceID = dwIndex;
286 }
287 HINSTANCE hInst = LoadLibraryW(&szText[1]);
288 LoadStringW(hInst, dwIndex, szText, _countof(szText));
290 }
291 else
292 {
293 pEntry->dwResourceID = DWORD(-1);
294 }
295 lstrcpynW(pEntry->szText, szText, _countof(pEntry->szText));
296
297 // Type
298 szText[0] = 0;
299 RegQueryValueExW(hKey, L"Type", NULL, NULL, LPBYTE(szText), &Size);
300 if (lstrcmpiW(szText, L"checkbox") == 0)
301 pEntry->dwType = AETYPE_CHECKBOX;
302 else if (lstrcmpiW(szText, L"radio") == 0)
303 pEntry->dwType = AETYPE_RADIO;
304 else if (lstrcmpiW(szText, L"group") == 0)
305 pEntry->dwType = AETYPE_GROUP;
306 else
307 return FALSE; // failure
308
309 pEntry->nIconID = -1;
310 if (pEntry->dwType == AETYPE_GROUP)
311 {
312 // Bitmap (Icon)
313 UINT nIconIndex = 0;
314 Size = sizeof(szText);
315 szText[0] = 0;
316 RegQueryValueExW(hKey, L"Bitmap", NULL, NULL, LPBYTE(szText), &Size);
317
318 WCHAR szExpanded[MAX_PATH];
319 ExpandEnvironmentStringsW(szText, szExpanded, _countof(szExpanded));
320 pch = wcsrchr(szExpanded, L',');
321 if (pch)
322 {
323 *pch = 0;
324 nIconIndex = abs(_wtoi(pch + 1));
325 }
326 pEntry->nIconID = ViewTree_AddIcon(szExpanded, nIconIndex);
327 }
328
329 if (pEntry->dwType == AETYPE_GROUP)
330 {
331 pEntry->hkeyRoot = NULL;
332 pEntry->szRegPath[0] = 0;
333 pEntry->szValueName[0] = 0;
334 pEntry->dwCheckedValue = 0;
335 pEntry->bHasUncheckedValue = FALSE;
336 pEntry->dwUncheckedValue = 0;
337 pEntry->dwDefaultValue = 0;
338 pEntry->hItem = NULL;
339 pEntry->bGrayed = FALSE;
340 pEntry->bChecked = FALSE;
341 }
342 else
343 {
344 // HKeyRoot
345 HKEY HKeyRoot = HKEY_CURRENT_USER;
346 Size = sizeof(HKeyRoot);
347 RegQueryValueExW(hKey, L"HKeyRoot", NULL, NULL, LPBYTE(&HKeyRoot), &Size);
348 pEntry->hkeyRoot = HKeyRoot;
349
350 // RegPath
351 pEntry->szRegPath[0] = 0;
352 Size = sizeof(szText);
353 RegQueryValueExW(hKey, L"RegPath", NULL, NULL, LPBYTE(szText), &Size);
354 lstrcpynW(pEntry->szRegPath, szText, _countof(pEntry->szRegPath));
355
356 // ValueName
357 pEntry->szValueName[0] = 0;
358 Size = sizeof(szText);
359 RegQueryValueExW(hKey, L"ValueName", NULL, NULL, LPBYTE(szText), &Size);
360 lstrcpynW(pEntry->szValueName, szText, _countof(pEntry->szValueName));
361
362 // CheckedValue
363 Size = sizeof(Value);
364 Value = 0x00000001;
365 RegQueryValueExW(hKey, L"CheckedValue", NULL, NULL, LPBYTE(&Value), &Size);
366 pEntry->dwCheckedValue = Value;
367
368 // UncheckedValue
369 Size = sizeof(Value);
370 Value = 0x00000000;
371 pEntry->bHasUncheckedValue = TRUE;
372 if (RegQueryValueExW(hKey, L"UncheckedValue", NULL,
374 {
375 pEntry->bHasUncheckedValue = FALSE;
376 }
377 pEntry->dwUncheckedValue = Value;
378
379 // DefaultValue
380 Size = sizeof(Value);
381 Value = 0x00000001;
382 RegQueryValueExW(hKey, L"DefaultValue", NULL, NULL, LPBYTE(&Value), &Size);
383 pEntry->dwDefaultValue = Value;
384
385 // hItem
386 pEntry->hItem = NULL;
387
388 // bGrayed, bChecked
389 HKEY hkeyTarget;
390 Value = pEntry->dwDefaultValue;
391 pEntry->bGrayed = TRUE;
392 if (RegOpenKeyExW(HKEY(pEntry->hkeyRoot), pEntry->szRegPath, 0,
393 KEY_READ, &hkeyTarget) == ERROR_SUCCESS)
394 {
395 Size = sizeof(Value);
396 if (RegQueryValueExW(hkeyTarget, pEntry->szValueName, NULL, NULL,
398 {
399 pEntry->bGrayed = FALSE;
400 }
401 RegCloseKey(hkeyTarget);
402 }
403 pEntry->bChecked = (Value == pEntry->dwCheckedValue);
404 }
405
406 // Grayed (ReactOS extension)
407 Size = sizeof(Value);
408 Value = FALSE;
409 RegQueryValueExW(hKey, L"Grayed", NULL, NULL, LPBYTE(&Value), &Size);
410 if (!pEntry->bGrayed)
411 pEntry->bGrayed = Value;
412
413 BOOL bIsGroup = (pEntry->dwType == AETYPE_GROUP);
414 dwParentID = pEntry->dwID;
416
417 if (!bIsGroup)
418 return TRUE; // success
419
420 // load the children
421 dwIndex = 0;
422 while (RegEnumKeyW(hKey, dwIndex, szKeyName,
423 _countof(szKeyName)) == ERROR_SUCCESS)
424 {
425 HKEY hkeyChild;
426 if (RegOpenKeyExW(hKey, szKeyName, 0, KEY_READ,
427 &hkeyChild) != ERROR_SUCCESS)
428 {
429 ++dwIndex;
430 continue; // failure
431 }
432
433 ViewTree_LoadTree(hkeyChild, szKeyName, dwParentID);
434 RegCloseKey(hkeyChild);
435
436 ++dwIndex;
437 }
438
439 return TRUE; // success
440}
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
#define wcsrchr
Definition: compat.h:16
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define LoadLibraryW(x)
Definition: compat.h:747
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
HINSTANCE hInst
Definition: dxdiag.c:13
#define abs(i)
Definition: fconv.c:206
_Check_return_ _CRTIMP int __cdecl _wtoi(_In_z_ const wchar_t *_Str)
#define pch(ap)
Definition: match.c:418
static INT ViewTree_AddIcon(LPCWSTR pszPath, UINT nIconIndex)
Definition: view.cpp:105
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
#define HKEY_CURRENT_USER
Definition: winreg.h:11
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)

Referenced by ViewTree_LoadAll(), and ViewTree_LoadTree().

◆ ViewTree_SortAll()

static VOID ViewTree_SortAll ( VOID  )
static

Definition at line 539 of file view.cpp.

540{
542}
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
static int ViewTree_Compare(const void *x, const void *y)
Definition: view.cpp:485

Referenced by ViewDlg_OnInitDialog().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( fprop  )

Variable Documentation

◆ s_hTreeImageList

HIMAGELIST s_hTreeImageList = NULL
static

Definition at line 87 of file view.cpp.

Referenced by ViewDlg_OnInitDialog(), and ViewTree_AddIcon().

◆ s_ViewTreeEntries

◆ s_ViewTreeEntryCount

◆ s_ViewTreeIconCount

INT s_ViewTreeIconCount = 0
static

Definition at line 86 of file view.cpp.

Referenced by ViewTree_AddIcon(), and ViewTree_FindIcon().

◆ s_ViewTreeIcons

PVIEWTREE_ICON s_ViewTreeIcons = NULL
static

Definition at line 85 of file view.cpp.

Referenced by ViewTree_AddIcon(), and ViewTree_FindIcon().

◆ ViewDlg_CreateTreeImageList

HIMAGELIST ViewDlg_CreateTreeImageList(VOID) ( VOID  )
static

Definition at line 548 of file view.cpp.

549{
550 HIMAGELIST hImageList;
551 hImageList = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 9, 1);
552 if (hImageList == NULL)
553 return NULL; // failure
554
555 // free if existed
556 if (s_ViewTreeIcons)
557 {
560 }
562
563 // allocate now
564 PVIEWTREE_ICON pAllocated;
565 size_t Size = PREDEFINED_ICON_COUNT * sizeof(VIEWTREE_ICON);
566 pAllocated = (PVIEWTREE_ICON)calloc(1, Size);
567 if (pAllocated == NULL)
568 return NULL; // failure
569
571 s_ViewTreeIcons = pAllocated;
572
573 // add the predefined icons
574
576 HBITMAP hbmMask = CreateCheckMask(hDC);
577
578 HBITMAP hbmChecked, hbmUnchecked;
579
580 hbmChecked = CreateCheckImage(hDC, TRUE);
581 ImageList_Add(hImageList, hbmChecked, hbmMask);
582 DeleteObject(hbmChecked);
583
584 hbmUnchecked = CreateCheckImage(hDC, FALSE);
585 ImageList_Add(hImageList, hbmUnchecked, hbmMask);
586 DeleteObject(hbmUnchecked);
587
588 hbmChecked = CreateCheckImage(hDC, TRUE, FALSE);
589 ImageList_Add(hImageList, hbmChecked, hbmMask);
590 DeleteObject(hbmChecked);
591
592 hbmUnchecked = CreateCheckImage(hDC, FALSE, FALSE);
593 ImageList_Add(hImageList, hbmUnchecked, hbmMask);
594 DeleteObject(hbmUnchecked);
595
596 DeleteObject(hbmMask);
597 hbmMask = CreateRadioMask(hDC);
598
599 hbmChecked = CreateRadioImage(hDC, TRUE);
600 ImageList_Add(hImageList, hbmChecked, hbmMask);
601 DeleteObject(hbmChecked);
602
603 hbmUnchecked = CreateRadioImage(hDC, FALSE);
604 ImageList_Add(hImageList, hbmUnchecked, hbmMask);
605 DeleteObject(hbmUnchecked);
606
607 hbmChecked = CreateRadioImage(hDC, TRUE, FALSE);
608 ImageList_Add(hImageList, hbmChecked, hbmMask);
609 DeleteObject(hbmChecked);
610
611 hbmUnchecked = CreateRadioImage(hDC, FALSE, FALSE);
612 ImageList_Add(hImageList, hbmUnchecked, hbmMask);
613 DeleteObject(hbmUnchecked);
614
615 DeleteObject(hbmMask);
616
617 return hImageList;
618}
static HDC hDC
Definition: 3dtext.c:33
INT WINAPI ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, HBITMAP hbmMask)
Definition: imagelist.c:448
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
Definition: imagelist.c:804
HBITMAP CreateRadioMask(HDC hDC)
HBITMAP CreateCheckMask(HDC hDC)
HBITMAP CreateRadioImage(HDC hDC, BOOL bCheck, BOOL bEnabled)
HBITMAP CreateCheckImage(HDC hDC, BOOL bCheck, BOOL bEnabled)
pKey DeleteObject()
static HBITMAP
Definition: button.c:44
static HDC
Definition: imagelist.c:88
#define ILC_MASK
Definition: commctrl.h:351
#define ILC_COLOR24
Definition: commctrl.h:357
#define calloc
Definition: rosglue.h:14
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)

Referenced by ViewDlg_OnInitDialog().