aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ml/fileview_internal.h
blob: 5526bf32eedf1d1e6a409fdcedf2cf2f72ca7ff6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#ifndef NULLOSFT_MEDIALIBRARY_FILEVIEW_CONTROL_INTERNAL_HEADER
#define NULLOSFT_MEDIALIBRARY_FILEVIEW_CONTROL_INTERNAL_HEADER

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#include <windows.h>
#include "../winamp/gen.h"
#include "api__gen_ml.h"
#include "./ml_ipc_0313.h"
#include "../nu/trace.h"
#include "./ml_imagelist.h"
#include "./ml_imagefilter.h"
#include "./skinning.h"

#ifndef LONGX86
#ifdef _WIN64
  #define LONGX86	LONG_PTR
#else /*_WIN64*/
  #define LONGX86	 LONG	
#endif  /*_WIN64*/
#endif // LONGX86

#define METADATA_SOURCE_UNKNOWN				0
#define METADATA_SOURCE_FILEINFO			1
#define METADATA_SOURCE_MLDB				2


#define FVM_GETIDEALHEIGHT		(MLFVM_FIRST + 101)	// internal use

#define CSTR_INVARIANT		MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)

#define METATYPE_AUDIO		0
#define METATYPE_VIDEO		1
#define METATYPE_PLAYLIST	2

#define MF_NAME				0
#define MF_SIZE				1
#define MF_TYPE				2
#define MF_MODIFIED			3
#define MF_CREATED			4
#define MF_EXTENSION			5
#define MF_ATTRIBUTES		6
#define MF_ARTIST			7
#define MF_ALBUM				8
#define MF_TITLE				9
#define MF_INMLDB			10
#define MF_GENRE				11
#define MF_COMMENT			12
#define MF_LENGTH			13
#define MF_BITRATE			14
#define MF_TRACKNUM			15
#define MF_TRACKCOUNT		16
#define MF_DISCNUM			17
#define MF_DISCCOUNT			18
#define MF_YEAR				19
#define MF_PUBLISHER			20
#define MF_COMPOSER			21
#define MF_ALBUMARTIST		22
#define MF_SOURCE			23

typedef struct __AUDIOMETA
{
	UINT	nSource;
	LPWSTR	pszArtist;
	LPWSTR	pszTitle;
	LPWSTR	pszAlbum;
	LPWSTR  pszGenre;
	LPWSTR  pszComment;
	INT		nLength;
	INT		nBitrate;
	INT		nTrackNum;
	INT		nTrackCount;
	INT		nDiscNum;
	INT		nDiscCount;
	INT		nYear;
	LPWSTR	pszAlbumArtist;
	LPWSTR pszPublisher;
	LPWSTR pszComposer;
} AUDIOMETA;

typedef __AUDIOMETA VIDEOMETA;

#define MAX_PLAYLIST_ENTRIES		20
typedef struct __PLENTRY
{
	LPWSTR	pszTitle;
	INT		nLength;
} PLENTRY;
typedef struct __PLAYLISTMETA
{
	UINT	nCount;
	LPWSTR	pszTitle;
	INT		nLength;
	PLENTRY	szEntries[MAX_PLAYLIST_ENTRIES];
} PLAYLISTMETA;


typedef struct _FILEMETARECORD
{ 
	DWORD type; 
	union 
	{
		AUDIOMETA		audio; 
		VIDEOMETA		video;
		PLAYLISTMETA		playlist;
	};
}FILEMETARECORD;

typedef struct _FILERECORD
{	
	WIN32_FIND_DATAW		Info;
	INT					fileType;
	size_t				extOffset;
	FILEMETARECORD		*pMeta;
} FILERECORD;

typedef struct _FILEDATA
{	
	size_t			count;
	size_t			allocated;
	FILERECORD		*pRec;
	size_t			*pSort;
	ULONGLONG		folderSize;
	WCHAR			szPath[MAX_PATH*2];
} FILEDATA;

#ifdef __cplusplus
extern "C" {
#endif

extern winampGeneralPurposePlugin plugin;

#ifdef __cplusplus
}
#endif
extern HWND g_hwnd;
extern HMLIMGFLTRMNGR hmlifMngr;	// default gen_ml fitler manager




// toolbar
HWND FileViewToolbar_Create(HWND hwndParent);

// filesystem 
size_t FileView_ReadFileData(FILEDATA *pfd, LPCWSTR pszPath, UINT fStyle, FILESYSTEMINFO *pfsi);
LPCWSTR FileView_GetTypeFamily(LPCWSTR pszExtension);

// metadata
typedef void (CALLBACK *DISCOVERCALLBACK)(LPCWSTR /*pszFileName*/, ULONG_PTR /*param*/);

void FileViewMeta_InitializeStorage(HWND hView);
void FileViewMeta_ReleaseStorage(HWND hView);
FILEMETARECORD *FileViewMeta_GetFromCache(LPCWSTR pszPath, FILERECORD *pfr);
BOOL FileViewMeta_Discover(LPCWSTR pszPath, FILERECORD *pfr, DISCOVERCALLBACK fnCallback, ULONG_PTR param, INT queueMax);
void FileViewMeta_TruncateQueue(size_t max);
BOOL FileViewMeta_GetString(FILEMETARECORD *pMeta, UINT uMetaField, LPCWSTR *ppszOut);
BOOL FileViewMeta_GetInt(FILEMETARECORD *pMeta, UINT uMetaField, INT *pOut);

// formatting
INT FileView_FormatFileTime(FILETIME *pft, LPWSTR pszDest, INT cchDest);
INT FileView_FormatType(UINT fileType, LPWSTR pszDest, INT cchDest);
INT FileView_FormatAttributes(UINT uAttributes, LPWSTR pszDest, INT cchDest);
INT FileView_FormatYesNo(BOOL bValue, LPWSTR pszDest, INT cchDest);
INT FileView_FormatYear(INT nYear, LPWSTR pszDest, INT cchDest);
INT FileView_FormatBitrate(INT nBitrate, LPWSTR pszDest, INT cchDest);
INT FileView_FormatLength(INT nLength, LPWSTR pszDest, INT cchDest);
INT FileView_FormatIntSlashInt(INT part1, INT part2, LPWSTR pszDest, INT cchDest);

#define FIF_TOOLTIP		0
#define FIF_STATUS		1
void FileView_FormatFileInfo(FILERECORD *pfr, LPWSTR pszText, size_t cchTextMax, UINT mode);
void FileView_FormatAudioTip(FILERECORD *pfr, LPWSTR pszText, size_t cchTextMax, LPCWSTR pszSeparator);
void FileView_FormatDefaultTip(FILERECORD *pfr, LPWSTR pszText, size_t cchTextMax, LPCWSTR pszSeparator);

// sorting
void FileView_SortByColumn(FILEDATA *pFileData, UINT uColumn);
void FileView_SortByColumnEx(FILEDATA *pFileData, UINT uColumn, size_t *pOrder, size_t count);

// menu
HMENU FileViewMenu_Initialize();
HMENU FileViewMenu_GetSubMenu(HWND hView, HMENU hViewMenu, UINT uMenuType);
UINT FileViewMenu_GetMenuType(HWND hView, HMENU hViewMenu, HMENU hMenu);
// view
void FileView_DisplayPopupMenu(HWND hdlg, UINT uMenu, UINT uFlags, POINT pt);

// registered columns

typedef struct _FILEVIEWCOLUMN
{
	UINT	id;
	LPWSTR	pszText;
	INT		width;
	UINT	format;
	INT		order;
	INT		widthMin;
	INT		widthMax;
} FILEVIEWCOLUMN;

extern const FILEVIEWCOLUMN szRegisteredColumns[];
extern const INT RegisteredColumnsCount;



#endif // NULLOSFT_MEDIALIBRARY_FILEVIEW_CONTROL_INTERNAL_HEADER