mirror of https://gitlab.com/cppit/jucipp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.4 KiB
66 lines
1.4 KiB
#ifndef JUCI_DIALOG_H_ |
|
#define JUCI_DIALOG_H_ |
|
#include <string> |
|
|
|
class Dialog { |
|
public: |
|
static std::string select_folder(); |
|
static std::string select_file(); |
|
static std::string new_file(); |
|
static std::string new_folder(); |
|
static std::string save_file(); |
|
}; // Dialog |
|
|
|
#ifdef _WIN32 |
|
#define NTDDI_VERSION NTDDI_VISTA |
|
#define _WIN32_WINNT _WIN32_WINNT_VISTA |
|
|
|
#include <windows.h> |
|
#include <shobjidl.h> |
|
|
|
#include <memory> |
|
#include <sstream> |
|
#include <codecvt> |
|
|
|
class WinString { |
|
public: |
|
WinString() : str(nullptr) { } |
|
WinString(const std::string &string); |
|
~WinString() { CoTaskMemFree(static_cast<void*>(str)); } |
|
std::string operator()(); |
|
wchar_t** operator&() { return &str; } |
|
private: |
|
wchar_t* str; |
|
std::wstring s2ws(const std::string& str); |
|
std::string ws2s(const std::wstring& wstr); |
|
}; |
|
|
|
class CommonDialog { |
|
public: |
|
CommonDialog(CLSID type); |
|
void add_option(unsigned option); |
|
void set_title(const std::string &title); |
|
std::string show(); |
|
|
|
private: |
|
IFileDialog * dialog; |
|
DWORD options; |
|
}; |
|
|
|
class OpenDialog : public CommonDialog { |
|
public: |
|
OpenDialog(const std::string &title, unsigned option) : CommonDialog(CLSID_FileOpenDialog) { |
|
set_title(title); |
|
add_option(option); |
|
} |
|
}; |
|
|
|
class SaveDialog : public CommonDialog { |
|
public: |
|
SaveDialog(const std::string &title, unsigned option) : CommonDialog(CLSID_FileSaveDialog) { |
|
set_title(title); |
|
add_option(option); |
|
} |
|
}; |
|
#endif // __WIN32 |
|
#endif // JUCI_DIALOG_H_
|
|
|