From 25e7342fbc71b4cd2f31432cac614150d2ceb076 Mon Sep 17 00:00:00 2001 From: ghazan Date: Tue, 15 Mar 2022 14:42:24 +0300 Subject: file iterators, first version --- include/m_core.h | 1 + include/m_types.h | 25 ++++++++++++++++++++++ include/m_utils.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 85 insertions(+), 5 deletions(-) (limited to 'include') diff --git a/include/m_core.h b/include/m_core.h index 9707efab16..e1f1efdb13 100644 --- a/include/m_core.h +++ b/include/m_core.h @@ -633,6 +633,7 @@ inline int mir_vsnwprintf(_Pre_notnull_ _Always_(_Post_z_) wchar_t(&buffer)[_Siz #endif #else MIR_CORE_DLL(FILE*) _wfopen(const wchar_t *pwszFileName, const wchar_t *pwszMode); + MIR_CORE_DLL(int) _wchdir(const wchar_t *pwszPath); template inline wchar_t* wcsncpy_s(wchar_t(&buffer)[_Size], const wchar_t *src, size_t len) diff --git a/include/m_types.h b/include/m_types.h index 1aa311feb2..f07427c1b3 100644 --- a/include/m_types.h +++ b/include/m_types.h @@ -53,6 +53,29 @@ using namespace std; #define _TRUNCATE size_t(-1) #define INVALID_HANDLE_VALUE HANDLE(-1) +#define MB_OK 0x00000000L +#define MB_OKCANCEL 0x00000001L +#define MB_YESNOCANCEL 0x00000003L +#define MB_YESNO 0x00000004L +#define MB_RETRYCANCEL 0x00000005L + +#define MB_ICONSTOP 0x00000010L +#define MB_ICONERROR 0x00000010L +#define MB_ICONQUESTION 0x00000020L +#define MB_ICONEXCLAMATION 0x00000030L +#define MB_ICONWARNING 0x00000030L +#define MB_ICONINFORMATION 0x00000040L + +#define IDABORT 3 +#define IDCANCEL 2 +#define IDCONTINUE 11 +#define IDIGNORE 5 +#define IDNO 7 +#define IDOK 1 +#define IDRETRY 4 +#define IDTRYAGAIN 10 +#define IDYES 6 + typedef void *HANDLE; typedef int BOOL, SOCKET; typedef uint32_t UINT, COLORREF; @@ -70,6 +93,7 @@ struct SIZE { int width, height; }; struct MSG; struct LOGFONTA; struct LOGFONTW; +struct WIN32_FIND_DATA; #define MIR_EXPORT __attribute__((__visibility__("default"))) #define MIR_IMPORT @@ -87,6 +111,7 @@ struct LOGFONTW; #define _Printf_format_string_ #define _countof(array) (sizeof(array) / sizeof(array[0])) #define __forceinline inline __attribute__ ((always_inline)) +#define __fallthrough #define InterlockedIncrement(x) __sync_fetch_and_add(x, 1) #define InterlockedDecrement(x) __sync_fetch_and_add(x, -1) diff --git a/include/m_utils.h b/include/m_utils.h index 026666bbce..f7b505815e 100644 --- a/include/m_utils.h +++ b/include/m_utils.h @@ -228,11 +228,12 @@ EXTERN_C MIR_CORE_DLL(int) Utils_AssertInsideScreen(RECT *rc); #define WNDCLASS_COLOURPICKER "ColourPicker" -#define CPM_SETCOLOUR 0x1000 //lParam = new colour -#define CPM_GETCOLOUR 0x1001 //returns colour -#define CPM_SETDEFAULTCOLOUR 0x1002 //lParam = default, used as first custom colour -#define CPM_GETDEFAULTCOLOUR 0x1003 //returns colour -#define CPN_COLOURCHANGED 1 //sent through WM_COMMAND +#define CPM_SETCOLOUR 0x1000 //lParam = new colour +#define CPM_GETCOLOUR 0x1001 //returns colour +#define CPM_SETDEFAULTCOLOUR 0x1002 //lParam = default, used as first custom colour +#define CPM_GETDEFAULTCOLOUR 0x1003 //returns colour + +#define CPN_COLOURCHANGED 1 //sent through WM_COMMAND ///////////////////////////////////////////////////////////////////////////////////////// // Gets the filter strings for use in the open file dialog @@ -243,6 +244,50 @@ EXTERN_C MIR_CORE_DLL(int) Utils_AssertInsideScreen(RECT *rc); EXTERN_C MIR_CORE_DLL(HBITMAP) Bitmap_Load(const wchar_t *ptszFileName); EXTERN_C MIR_CORE_DLL(void) Bitmap_GetFilter(wchar_t *dest, size_t destLen); +///////////////////////////////////////////////////////////////////////////////////////// +// Path class + +class MIR_CORE_EXPORT MFilePath : public CMStringW +{ + class MIR_CORE_EXPORT MFileIterator + { + class iterator + { + const MFileIterator &ptr; + int code = 0; + + public: + __inline iterator(const MFileIterator &_p, int code) : ptr(_p) {} + iterator operator++(); + __inline bool operator!=(const iterator &p) { return p.code == code; } + __inline operator const MFileIterator*() const { return &ptr; } + }; + + public: + MFileIterator(const wchar_t*); + ~MFileIterator(); + + wchar_t m_path[MAX_PATH]; + bool isDir() const; + + __inline iterator begin() const; + __inline iterator end() const { return iterator(*this, 0); } + }; + +public: + MFilePath(): CMStringW() {} + MFilePath(const wchar_t *init) : CMStringW(init) {} + MFilePath& operator=(const wchar_t *pszSrc) { + *this = pszSrc; + return *this; + } + + bool isExist() const; + bool move(const wchar_t *pwszDest); + + MFileIterator search(); +}; + ///////////////////////////////////////////////////////////////////////////////////////// // Converts a path to a relative path // Only saves as a relative path if the file is in the miranda directory (or @@ -378,6 +423,15 @@ EXTERN_C MIR_APP_DLL(wchar_t*) Utils_ReplaceVarsW(const wchar_t *szData, MCONTAC }; #endif +///////////////////////////////////////////////////////////////////////////////////////// +// compatibility functions + +#ifndef _WINDOWS +MIR_CORE_DLL(int) GetShortPathNameW(const wchar_t*, wchar_t*, int); +MIR_CORE_DLL(int) MessageBoxW(HWND, const wchar_t*, const wchar_t*, int); +MIR_CORE_DLL(int) WritePrivateProfileString(const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*); +#endif + ///////////////////////////////////////////////////////////////////////////////////////// // enters one string // returns TRUE on pressing OK or FALSE if Cancel was pressed -- cgit v1.2.3