diff options
Diffstat (limited to 'docs/release/src/osd/winui/treeview.h')
-rw-r--r-- | docs/release/src/osd/winui/treeview.h | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/docs/release/src/osd/winui/treeview.h b/docs/release/src/osd/winui/treeview.h new file mode 100644 index 00000000000..0ea08fb592c --- /dev/null +++ b/docs/release/src/osd/winui/treeview.h @@ -0,0 +1,212 @@ +// For licensing and usage information, read docs/winui_license.txt +//**************************************************************************** +// NOTE: ifdef MESS doesn't work here +#ifndef TREEVIEW_H +#define TREEVIEW_H + +/* corrections for commctrl.h */ + +#if defined(__GNUC__) +/* fix warning: cast does not match function type */ +#undef TreeView_InsertItem +#define TreeView_InsertItem(w,i) (HTREEITEM)(LRESULT)(int)SendMessage((w),TVM_INSERTITEM,0,(LPARAM)(LPTV_INSERTSTRUCT)(i)) + +#undef TreeView_SetImageList +#define TreeView_SetImageList(w,h,i) (HIMAGELIST)(LRESULT)(int)SendMessage((w),TVM_SETIMAGELIST,i,(LPARAM)(HIMAGELIST)(h)) + +#undef TreeView_GetNextItem +#define TreeView_GetNextItem(w,i,c) (HTREEITEM)(LRESULT)(int)SendMessage((w),TVM_GETNEXTITEM,c,(LPARAM)(HTREEITEM)(i)) + +#undef TreeView_HitTest +#define TreeView_HitTest(hwnd, lpht) \ + (HTREEITEM)(LRESULT)(int)SNDMSG((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht)) + +/* fix wrong return type */ +#undef TreeView_Select +#define TreeView_Select(w,i,c) (BOOL)(int)SendMessage((w),TVM_SELECTITEM,c,(LPARAM)(HTREEITEM)(i)) + +#undef TreeView_EditLabel +#define TreeView_EditLabel(w, i) \ + SNDMSG(w,TVM_EDITLABEL,0,(LPARAM)(i)) + +#endif /* defined(__GNUC__) */ +#include "bitmask.h" +#include <stdint.h> + +/*************************************************************************** + Folder And Filter Definitions + ***************************************************************************/ + +typedef struct +{ + const char *m_lpTitle; // Folder Title + const char *short_name; // for saving in the .ini + UINT m_nFolderId; // ID + UINT m_nIconId; // if >= 0, resource id of icon (IDI_xxx), otherwise index in image list + DWORD m_dwUnset; // Excluded filters + DWORD m_dwSet; // Implied filters + BOOL m_process; // 1 = process only if rebuilding the cache + void (*m_pfnCreateFolders)(int parent_index); // Constructor for special folders + BOOL (*m_pfnQuery)(uint32_t nDriver); // Query function + BOOL m_bExpectedResult; // Expected query result +} FOLDERDATA, *LPFOLDERDATA; + +typedef const FOLDERDATA *LPCFOLDERDATA; + +typedef struct +{ + DWORD m_dwFilterType; /* Filter value */ + DWORD m_dwCtrlID; /* Control ID that represents it */ + BOOL (*m_pfnQuery)(uint32_t nDriver); /* Query function */ + BOOL m_bExpectedResult; /* Expected query result */ +} FILTER_ITEM, *LPFILTER_ITEM; + +typedef const FILTER_ITEM *LPCFILTER_ITEM; + +/*************************************************************************** + Functions to build builtin folder lists + ***************************************************************************/ + +void CreateManufacturerFolders(int parent_index); +void CreateYearFolders(int parent_index); +void CreateSourceFolders(int parent_index); +void CreateScreenFolders(int parent_index); +void CreateResolutionFolders(int parent_index); +void CreateFPSFolders(int parent_index); +void CreateBIOSFolders(int parent_index); +void CreateCPUFolders(int parent_index); +void CreateSoundFolders(int parent_index); +void CreateOrientationFolders(int parent_index); +void CreateDeficiencyFolders(int parent_index); +void CreateDumpingFolders(int parent_index); + +/***************************************************************************/ + +#define MAX_EXTRA_FOLDERS 256 +#define MAX_EXTRA_SUBFOLDERS 256 + +/* TreeView structures */ +enum +{ + FOLDER_NONE = 0, + FOLDER_ALLGAMES, + FOLDER_AVAILABLE, + FOLDER_BIOS, + FOLDER_CLONES, + FOLDER_COMPUTER, + FOLDER_CONSOLE, + FOLDER_CPU, + FOLDER_DEFICIENCY, + FOLDER_DUMPING, + FOLDER_FPS, + FOLDER_HARDDISK, + FOLDER_HORIZONTAL, + FOLDER_LIGHTGUN, + FOLDER_MANUFACTURER, + FOLDER_MECHANICAL, + FOLDER_MODIFIED, + FOLDER_MOUSE, + FOLDER_NONMECHANICAL, + FOLDER_NONWORKING, + FOLDER_ORIGINAL, + FOLDER_RASTER, + FOLDER_RESOLUTION, + FOLDER_SAMPLES, + FOLDER_SAVESTATE, + FOLDER_SCREENS, + FOLDER_SND, + FOLDER_SOURCE, + FOLDER_STEREO, + FOLDER_TRACKBALL, + FOLDER_UNAVAILABLE, + FOLDER_VECTOR, + FOLDER_VERTICAL, + FOLDER_WORKING, + FOLDER_YEAR, + MAX_FOLDERS, +}; + +typedef enum +{ + F_CLONES = 0x00000001, + F_NONWORKING = 0x00000002, + F_UNAVAILABLE = 0x00000004, + F_VECTOR = 0x00000008, + F_RASTER = 0x00000010, + F_ORIGINALS = 0x00000020, + F_WORKING = 0x00000040, + F_AVAILABLE = 0x00000080, + F_HORIZONTAL = 0x00000100, + F_VERTICAL = 0x00000200, + F_MECHANICAL = 0x00000400, + F_ARCADE = 0x00000800, + F_MESS = 0x00001000, + F_COMPUTER = 0x00002000, + F_CONSOLE = 0x00004000, + F_MODIFIED = 0x00008000, + F_MASK = 0x0000FFFF, + F_INIEDIT = 0x00010000, // There is an .ini that can be edited. MSH 20070811 + F_CUSTOM = 0x01000000 // for current .ini custom folders +} FOLDERFLAG; + +typedef struct +{ + LPSTR m_lpTitle; // String contains the folder name + LPTSTR m_lptTitle; // String contains the folder name as TCHAR* + UINT m_nFolderId; // Index / Folder ID number + int m_nParent; // Parent folder index in treeFolders[] + int m_nIconId; // negative icon index into the ImageList, or IDI_xxx resource id + DWORD m_dwFlags; // Misc flags + LPBITS m_lpGameBits; // Game bits, represent game indices +} TREEFOLDER, *LPTREEFOLDER; + +typedef struct +{ + char m_szTitle[64]; // Folder Title + UINT m_nFolderId; // ID + int m_nParent; // Parent Folder index in treeFolders[] + DWORD m_dwFlags; // Flags - Customisable and Filters + int m_nIconId; // negative icon index into the ImageList, or IDI_xxx resource id + int m_nSubIconId; // negative icon index into the ImageList, or IDI_xxx resource id +} EXFOLDERDATA, *LPEXFOLDERDATA; + +void FreeFolders(void); +void ResetFilters(void); +void InitTree(LPCFOLDERDATA lpFolderData, LPCFILTER_ITEM lpFilterList); +void SetCurrentFolder(LPTREEFOLDER lpFolder); +UINT GetCurrentFolderID(void); + +LPTREEFOLDER GetCurrentFolder(void); +int GetNumFolders(void); +LPTREEFOLDER GetFolder(UINT nFolder); +LPTREEFOLDER GetFolderByID(UINT nID); +LPTREEFOLDER GetFolderByName(int nParentId, const char *pszFolderName); + +void AddGame(LPTREEFOLDER lpFolder, UINT nGame); +void RemoveGame(LPTREEFOLDER lpFolder, UINT nGame); +int FindGame(LPTREEFOLDER lpFolder, int nGame); + +void ResetWhichGamesInFolders(void); + +LPCFOLDERDATA FindFilter(DWORD folderID); + +BOOL GameFiltered(int nGame, DWORD dwFlags); +BOOL GetParentFound(int nGame); + +LPCFILTER_ITEM GetFilterList(void); + +void SetTreeIconSize(HWND hWnd, BOOL bLarge); +BOOL GetTreeIconSize(void); + +void GetFolders(TREEFOLDER ***folders,int *num_folders); +BOOL TryRenameCustomFolder(LPTREEFOLDER lpFolder,const char *new_name); +void AddToCustomFolder(LPTREEFOLDER lpFolder,int driver_index); +void RemoveFromCustomFolder(LPTREEFOLDER lpFolder,int driver_index); + +HIMAGELIST GetTreeViewIconList(void); +int GetTreeViewIconIndex(int icon_id); + +void ResetTreeViewFolders(void); +void SelectTreeViewFolder(int folder_id); + +#endif /* TREEVIEW_H */ |