summaryrefslogtreecommitdiffstats
path: root/src/osd/winui/treeview.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/winui/treeview.h')
-rw-r--r--src/osd/winui/treeview.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/src/osd/winui/treeview.h b/src/osd/winui/treeview.h
new file mode 100644
index 00000000000..0ea08fb592c
--- /dev/null
+++ b/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 */