From eb1836b9ecab4a8bf7b5591d7b2638e160504735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lien=20Sell=C3=A6g?= Date: Mon, 2 Nov 2015 21:51:52 +0100 Subject: [PATCH] Add default file extensions --- src/dialogs.h | 6 +++--- src/dialogs_win.cc | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/dialogs.h b/src/dialogs.h index be61bad..5d4420e 100644 --- a/src/dialogs.h +++ b/src/dialogs.h @@ -36,11 +36,9 @@ public: /** Returns the selected item's path as a string */ std::string show(); -private: +protected: IFileDialog * dialog; DWORD options; - const std::vector text_files = {L"Text files", L"*.txt;*.c"}; - const std::vector all_files = {L"", L""}; }; class OpenDialog : public CommonDialog { @@ -50,6 +48,8 @@ public: class SaveDialog : public CommonDialog { public: SaveDialog(std::string &&title, unsigned option); +private: + std::vector extensions; }; #endif // __WIN32 diff --git a/src/dialogs_win.cc b/src/dialogs_win.cc index 5ea7e57..ecee64c 100644 --- a/src/dialogs_win.cc +++ b/src/dialogs_win.cc @@ -24,8 +24,9 @@ void CommonDialog::set_title(std::string &&title) { void CommonDialog::add_option(unsigned option) { check(dialog->SetOptions(options | option), "Failed to set options"); } -void CommonDialog::set_default_file_extension(std::string &&file_extensions) { - +void CommonDialog::set_default_file_extension(std::string &&file_extension) { + auto ptr = boost::locale::conv::utf_to_utf(file_extension).data(); + check(dialog->SetDefaultExtension(ptr), "Failed to set file extension"); } void CommonDialog::set_default_folder(const std::string &directory_path) { IShellItem * folder = nullptr; @@ -62,6 +63,12 @@ SaveDialog::SaveDialog(std::string &&title, unsigned option) : CommonDialog(CLSI add_option(option); auto dirs = Singleton::directories()->current_path; set_default_folder(dirs.empty() ? boost::filesystem::current_path().string() : dirs.string()); + extensions.emplace_back(COMDLG_FILTERSPEC{L"Default", L"*.h;*.cpp"}); + extensions.emplace_back(COMDLG_FILTERSPEC{L"GoogleStyle", L"*.cc;*.h"}); + extensions.emplace_back(COMDLG_FILTERSPEC{L"BoostStyle", L"*.hpp;*.cpp"}); + extensions.emplace_back(COMDLG_FILTERSPEC{L"Other", L"*.cxx;*.c"}); + check(dialog->SetFileTypes(extensions.size(), extensions.data()), "Failed to set extensions"); + set_default_file_extension("Default"); } // DIALOGS }}