Merge branch 'cmake-dev' of https://github.com/qPCR4vir/nana into qPCR4vir-cmake-dev
This commit is contained in:
commit
32c03b49aa
@ -113,79 +113,27 @@ foreach(subdir ${NANA_INCLUDE_SUBDIRS})
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
### Some nana compilation options ###
|
### Some nana compilation options ###
|
||||||
option(NANA_CMAKE_VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." OFF)
|
|
||||||
option(NANA_CMAKE_STOP_VERBOSE_PREPROCESSOR "Stop compilation after showing the annoying debug messages." OFF)
|
|
||||||
option(NANA_CMAKE_AUTOMATIC_GUI_TESTING "Activate automatic GUI testing?" OFF)
|
option(NANA_CMAKE_AUTOMATIC_GUI_TESTING "Activate automatic GUI testing?" OFF)
|
||||||
option(NANA_CMAKE_ENABLE_MINGW_STD_THREADS_WITH_MEGANZ "replaced boost.thread with meganz's mingw-std-threads." OFF) # deprecate?
|
option(NANA_CMAKE_ENABLE_MINGW_STD_THREADS_WITH_MEGANZ "replaced boost.thread with meganz's mingw-std-threads." OFF) # deprecate?
|
||||||
|
|
||||||
######## Nana options
|
######## Nana options
|
||||||
|
|
||||||
target_compile_definitions(nana PRIVATE NANA_IGNORE_CONF) # really ?
|
target_compile_definitions(nana PRIVATE NANA_IGNORE_CONF) # really ?
|
||||||
if(NANA_CMAKE_VERBOSE_PREPROCESSOR)
|
|
||||||
target_compile_definitions(nana PRIVATE VERBOSE_PREPROCESSOR)
|
|
||||||
endif()
|
|
||||||
if(NANA_CMAKE_AUTOMATIC_GUI_TESTING)
|
if(NANA_CMAKE_AUTOMATIC_GUI_TESTING)
|
||||||
target_compile_definitions(nana PUBLIC NANA_AUTOMATIC_GUI_TESTING)
|
target_compile_definitions(nana PUBLIC NANA_AUTOMATIC_GUI_TESTING)
|
||||||
# todo: enable_testing() # ??
|
# todo: enable_testing() # ??
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/build/cmake/Modules)
|
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/build/cmake/Modules)
|
||||||
include(build/cmake/install_nana.cmake) # includes and libs, or just expose the nana target
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/install_nana.cmake) # includes and libs, or just expose the nana target
|
||||||
include(build/cmake/OS.cmake) # windows, unix, linux, apple, ...
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/OS.cmake) # windows, unix, linux, apple, ...
|
||||||
include(build/cmake/shared_libs.cmake) # static and shared
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/shared_libs.cmake) # static vs shared
|
||||||
include(build/cmake/compilers.cmake) # VC, gcc, clang
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/compilers.cmake) # VC, gcc, clang
|
||||||
|
|
||||||
############# Optional libraries #####################
|
############# Optional libraries #####################
|
||||||
include(build/cmake/enable_png.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/enable_png.cmake)
|
||||||
include(build/cmake/enable_jpeg.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/enable_jpeg.cmake)
|
||||||
include(build/cmake/enable_audio.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/enable_audio.cmake)
|
||||||
include(build/cmake/select_filesystem.cmake)
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/select_filesystem.cmake)
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/build/cmake/verbose.cmake) # Just for information
|
||||||
|
|
||||||
|
|
||||||
### Just for information: ########################################
|
|
||||||
include(CMakePrintHelpers)
|
|
||||||
# see: https://cmake.org/cmake/help/v3.12/manual/cmake-properties.7.html#properties-on-targets
|
|
||||||
cmake_print_properties(TARGETS nana PROPERTIES
|
|
||||||
COMPILE_DEFINITIONS COMPILE_OPTIONS COMPILE_FLAGS LINK_LIBRARIES
|
|
||||||
INCLUDE_DIRECTORIES INSTALL_NAME_DIR LINK_FLAGS VERSION
|
|
||||||
)
|
|
||||||
|
|
||||||
#message ("")
|
|
||||||
# cmake_print_variables(SOURCES)
|
|
||||||
cmake_print_variables(HEADERS)
|
|
||||||
cmake_print_variables(PUBLIC_HEADERS)
|
|
||||||
cmake_print_variables(NANA_CMAKE_INSTALL)
|
|
||||||
|
|
||||||
cmake_print_variables(Boost_INCLUDE_DIR)
|
|
||||||
cmake_print_variables(Boost_LIBRARIES)
|
|
||||||
cmake_print_variables(Boost::filesystem)
|
|
||||||
|
|
||||||
cmake_print_variables(PNG_INCLUDE_DIRS)
|
|
||||||
cmake_print_variables(PNG_LIBRARIES)
|
|
||||||
cmake_print_variables(PNG::PNG)
|
|
||||||
|
|
||||||
|
|
||||||
message ( "CMAKE_CXX_COMPILER_ID = " ${CMAKE_CXX_COMPILER_ID})
|
|
||||||
message ( "COMPILER_IS_CLANG = " ${COMPILER_IS_CLANG})
|
|
||||||
message ( "CMAKE_COMPILER_IS_GNUCXX = " ${CMAKE_COMPILER_IS_GNUCXX})
|
|
||||||
message ( "CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS})
|
|
||||||
message ( "CMAKE_EXE_LINKER_FLAGS = " ${CMAKE_EXE_LINKER_FLAGS})
|
|
||||||
message ( "CMAKE_STATIC_LINKER_FLAGS = " ${CMAKE_STATIC_LINKER_FLAGS})
|
|
||||||
|
|
||||||
message ( "DESTDIR = " ${DESTDIR})
|
|
||||||
message ( "CMAKE_INSTALL_PREFIX = " ${CMAKE_INSTALL_PREFIX})
|
|
||||||
message ( "NANA_INCLUDE_DIR = " ${NANA_INCLUDE_DIR})
|
|
||||||
message ( "CMAKE_CURRENT_SOURCE_DIR = " ${CMAKE_CURRENT_SOURCE_DIR})
|
|
||||||
message ( "NANA_CMAKE_ENABLE_AUDIO = " ${NANA_CMAKE_ENABLE_AUDIO})
|
|
||||||
message ( "NANA_CMAKE_SHARED_LIB = " ${NANA_CMAKE_SHARED_LIB})
|
|
||||||
message ( "NANA_CLION = " ${NANA_CLION})
|
|
||||||
message ( "CMAKE_MAKE_PROGRAM = " ${CMAKE_MAKE_PROGRAM})
|
|
||||||
message ( "CMAKE_CXX_COMPILER_VERSION = " ${CMAKE_CXX_COMPILER_VERSION})
|
|
||||||
|
|
||||||
message ( "NANA_CMAKE_NANA_FILESYSTEM_FORCE = " ${NANA_CMAKE_NANA_FILESYSTEM_FORCE})
|
|
||||||
message ( "NANA_CMAKE_FIND_BOOST_FILESYSTEM = " ${NANA_CMAKE_FIND_BOOST_FILESYSTEM})
|
|
||||||
message ( "NANA_CMAKE_BOOST_FILESYSTEM_FORCE = " ${NANA_CMAKE_BOOST_FILESYSTEM_FORCE})
|
|
||||||
message ( "NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT = " ${NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT})
|
|
||||||
message ( "NANA_CMAKE_BOOST_FILESYSTEM_LIB = " ${NANA_CMAKE_BOOST_FILESYSTEM_LIB})
|
|
||||||
message ( "NANA_CMAKE_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_AUTOMATIC_GUI_TESTING})
|
|
||||||
message ( "NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING})
|
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
# the previus were selected or available.
|
# the previus were selected or available.
|
||||||
# You can change that default if you change one of the following
|
# You can change that default if you change one of the following
|
||||||
# (please don't define more than one of the _XX_FORCE options):
|
# (please don't define more than one of the _XX_FORCE options):
|
||||||
option(NANA_CMAKE_FIND_BOOST_FILESYSTEM "Search: Is Boost filesystem available?" OFF)
|
|
||||||
option(NANA_CMAKE_NANA_FILESYSTEM_FORCE "Force nana filesystem over ISO and boost?" OFF)
|
option(NANA_CMAKE_NANA_FILESYSTEM_FORCE "Force nana filesystem over ISO and boost?" OFF)
|
||||||
option(NANA_CMAKE_STD_FILESYSTEM_FORCE "Use of STD filesystem?(a compilation error will ocurre if not available)" OFF)
|
option(NANA_CMAKE_STD_FILESYSTEM_FORCE "Use of STD filesystem?(a compilation error will ocurre if not available)" OFF)
|
||||||
option(NANA_CMAKE_BOOST_FILESYSTEM_FORCE "Force use of Boost filesystem if available (over STD)?" OFF)
|
option(NANA_CMAKE_BOOST_FILESYSTEM_FORCE "Force use of Boost filesystem if available (over STD)?" OFF)
|
||||||
|
option(NANA_CMAKE_FIND_BOOST_FILESYSTEM "Search: Is Boost filesystem available?" OFF)
|
||||||
|
|
||||||
if(NANA_CMAKE_NANA_FILESYSTEM_FORCE)
|
if(NANA_CMAKE_NANA_FILESYSTEM_FORCE)
|
||||||
target_compile_definitions(nana PUBLIC NANA_FILESYSTEM_FORCE)
|
target_compile_definitions(nana PUBLIC NANA_FILESYSTEM_FORCE)
|
||||||
@ -32,9 +32,11 @@ elseif(NANA_CMAKE_BOOST_FILESYSTEM_FORCE)
|
|||||||
find_package(Boost REQUIRED COMPONENTS filesystem)
|
find_package(Boost REQUIRED COMPONENTS filesystem)
|
||||||
if(Boost_FOUND)
|
if(Boost_FOUND)
|
||||||
target_compile_definitions(nana PUBLIC BOOST_FILESYSTEM_AVAILABLE)
|
target_compile_definitions(nana PUBLIC BOOST_FILESYSTEM_AVAILABLE)
|
||||||
target_include_directories(nana PUBLIC "${Boost_INCLUDE_DIR}") # ?? SYSTEM
|
# SYSTEM - ignore warnings from here
|
||||||
|
target_include_directories(nana SYSTEM PUBLIC "${Boost_INCLUDE_DIR}") # ?? SYSTEM
|
||||||
target_link_libraries (nana PUBLIC ${Boost_LIBRARIES})
|
target_link_libraries (nana PUBLIC ${Boost_LIBRARIES})
|
||||||
# target_link_libraries (nana PUBLIC Boost::Boost)
|
# target_include_directories (nana SYSTEM PUBLIC Boost::Boost)
|
||||||
|
# message("boost found true")
|
||||||
endif()
|
endif()
|
||||||
set(Boost_USE_STATIC_LIBS ON)
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
set(Boost_USE_STATIC_RUNTIME ON)
|
set(Boost_USE_STATIC_RUNTIME ON)
|
||||||
|
57
build/cmake/verbose.cmake
Normal file
57
build/cmake/verbose.cmake
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
option(NANA_CMAKE_VERBOSE_PREPROCESSOR "Show annoying debug messages during compilation." OFF)
|
||||||
|
option(NANA_CMAKE_STOP_VERBOSE_PREPROCESSOR "Stop compilation after showing the annoying debug messages." OFF)
|
||||||
|
|
||||||
|
|
||||||
|
if (NANA_CMAKE_VERBOSE_PREPROCESSOR)
|
||||||
|
|
||||||
|
target_compile_definitions(nana PRIVATE VERBOSE_PREPROCESSOR)
|
||||||
|
|
||||||
|
### Just for information: ########################################
|
||||||
|
include(CMakePrintHelpers)
|
||||||
|
# see: https://cmake.org/cmake/help/v3.12/manual/cmake-properties.7.html#properties-on-targets
|
||||||
|
cmake_print_properties(TARGETS nana PROPERTIES
|
||||||
|
COMPILE_DEFINITIONS COMPILE_OPTIONS COMPILE_FLAGS LINK_LIBRARIES
|
||||||
|
INCLUDE_DIRECTORIES INSTALL_NAME_DIR LINK_FLAGS VERSION
|
||||||
|
)
|
||||||
|
|
||||||
|
#message ("")
|
||||||
|
# cmake_print_variables(SOURCES)
|
||||||
|
cmake_print_variables(HEADERS)
|
||||||
|
cmake_print_variables(PUBLIC_HEADERS)
|
||||||
|
cmake_print_variables(NANA_CMAKE_INSTALL)
|
||||||
|
|
||||||
|
cmake_print_variables(Boost_INCLUDE_DIR)
|
||||||
|
cmake_print_variables(Boost_LIBRARIES)
|
||||||
|
cmake_print_variables(Boost::filesystem)
|
||||||
|
|
||||||
|
cmake_print_variables(PNG_INCLUDE_DIRS)
|
||||||
|
cmake_print_variables(PNG_LIBRARIES)
|
||||||
|
cmake_print_variables(PNG::PNG)
|
||||||
|
|
||||||
|
cmake_print_variables(CMAKE_BUILD_TYPE)
|
||||||
|
cmake_print_variables(CMAKE_CONFIGURATION_TYPES)
|
||||||
|
message ( "CMAKE_CXX_COMPILER_ID = " ${CMAKE_CXX_COMPILER_ID})
|
||||||
|
message ( "COMPILER_IS_CLANG = " ${COMPILER_IS_CLANG})
|
||||||
|
message ( "CMAKE_COMPILER_IS_GNUCXX = " ${CMAKE_COMPILER_IS_GNUCXX})
|
||||||
|
message ( "CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS})
|
||||||
|
message ( "CMAKE_EXE_LINKER_FLAGS = " ${CMAKE_EXE_LINKER_FLAGS})
|
||||||
|
message ( "CMAKE_STATIC_LINKER_FLAGS = " ${CMAKE_STATIC_LINKER_FLAGS})
|
||||||
|
|
||||||
|
message ( "DESTDIR = " ${DESTDIR})
|
||||||
|
message ( "CMAKE_INSTALL_PREFIX = " ${CMAKE_INSTALL_PREFIX})
|
||||||
|
message ( "NANA_INCLUDE_DIR = " ${NANA_INCLUDE_DIR})
|
||||||
|
message ( "CMAKE_CURRENT_SOURCE_DIR = " ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
message ( "NANA_CMAKE_ENABLE_AUDIO = " ${NANA_CMAKE_ENABLE_AUDIO})
|
||||||
|
message ( "NANA_CMAKE_SHARED_LIB = " ${NANA_CMAKE_SHARED_LIB})
|
||||||
|
message ( "CMAKE_MAKE_PROGRAM = " ${CMAKE_MAKE_PROGRAM})
|
||||||
|
message ( "CMAKE_CXX_COMPILER_VERSION = " ${CMAKE_CXX_COMPILER_VERSION})
|
||||||
|
|
||||||
|
message ( "NANA_CMAKE_NANA_FILESYSTEM_FORCE = " ${NANA_CMAKE_NANA_FILESYSTEM_FORCE})
|
||||||
|
message ( "NANA_CMAKE_FIND_BOOST_FILESYSTEM = " ${NANA_CMAKE_FIND_BOOST_FILESYSTEM})
|
||||||
|
message ( "NANA_CMAKE_BOOST_FILESYSTEM_FORCE = " ${NANA_CMAKE_BOOST_FILESYSTEM_FORCE})
|
||||||
|
message ( "NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT = " ${NANA_CMAKE_BOOST_FILESYSTEM_INCLUDE_ROOT})
|
||||||
|
message ( "NANA_CMAKE_BOOST_FILESYSTEM_LIB = " ${NANA_CMAKE_BOOST_FILESYSTEM_LIB})
|
||||||
|
message ( "NANA_CMAKE_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_AUTOMATIC_GUI_TESTING})
|
||||||
|
message ( "NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING = " ${NANA_CMAKE_ADD_DEF_AUTOMATIC_GUI_TESTING})
|
||||||
|
|
||||||
|
endif(NANA_CMAKE_VERBOSE_PREPROCESSOR)
|
@ -23,7 +23,7 @@
|
|||||||
<ProjectGuid>{42D0520F-EFA5-4831-84FE-2B9085301C5D}</ProjectGuid>
|
<ProjectGuid>{42D0520F-EFA5-4831-84FE-2B9085301C5D}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>nana</RootNamespace>
|
<RootNamespace>nana</RootNamespace>
|
||||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
<WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*
|
*
|
||||||
* @file nana/gui/filebox.hpp
|
* @file nana/gui/filebox.hpp
|
||||||
* @author Jinhao
|
* @author Jinhao
|
||||||
* @brief a dialog to chose file(s), implemented "native" in windows but using nana for X11
|
* @brief dialogs to chose file(s) or a directory, implemented "native" in windows but using nana for X11
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NANA_GUI_FILEBOX_HPP
|
#ifndef NANA_GUI_FILEBOX_HPP
|
||||||
@ -31,7 +31,7 @@ namespace nana
|
|||||||
public:
|
public:
|
||||||
using filters = std::vector<std::pair< ::std::string, ::std::string>>;
|
using filters = std::vector<std::pair< ::std::string, ::std::string>>;
|
||||||
|
|
||||||
filebox(bool is_open_mode);
|
explicit filebox(bool is_open_mode);
|
||||||
filebox(window owner, bool is_open_mode);
|
filebox(window owner, bool is_open_mode);
|
||||||
filebox(const filebox&);
|
filebox(const filebox&);
|
||||||
~filebox();
|
~filebox();
|
||||||
@ -56,8 +56,8 @@ namespace nana
|
|||||||
|
|
||||||
/// \brief Add a filetype filter.
|
/// \brief Add a filetype filter.
|
||||||
/// To specify multiple filter in a single description, use a semicolon to separate the patterns(for example,"*.TXT;*.DOC;*.BAK").
|
/// To specify multiple filter in a single description, use a semicolon to separate the patterns(for example,"*.TXT;*.DOC;*.BAK").
|
||||||
filebox& add_filter(const ::std::string& description, ///< for example. "Text File"
|
filebox& add_filter(const ::std::string& description, ///< for example: "Text File"
|
||||||
const ::std::string& filetype ///< filter pattern(for example, "*.TXT")
|
const ::std::string& filetype ///< filter pattern(for example: "*.TXT")
|
||||||
);
|
);
|
||||||
|
|
||||||
filebox& add_filter(const filters &ftres)
|
filebox& add_filter(const filters &ftres)
|
||||||
@ -94,7 +94,7 @@ namespace nana
|
|||||||
public:
|
public:
|
||||||
using path_type = std::experimental::filesystem::path;
|
using path_type = std::experimental::filesystem::path;
|
||||||
|
|
||||||
folderbox(window owner = nullptr, const path_type& init_path = {});
|
explicit folderbox(window owner = nullptr, const path_type& init_path = {}, std::string title={});
|
||||||
~folderbox();
|
~folderbox();
|
||||||
|
|
||||||
std::optional<path_type> show() const;
|
std::optional<path_type> show() const;
|
||||||
@ -103,6 +103,11 @@ namespace nana
|
|||||||
{
|
{
|
||||||
return show();
|
return show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set a new title for the dialog
|
||||||
|
/// @param string a text for title
|
||||||
|
/// @return the old title.
|
||||||
|
::std::string title( ::std::string new_title);
|
||||||
private:
|
private:
|
||||||
implement* impl_;
|
implement* impl_;
|
||||||
};
|
};
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
* @file: nana/gui/filebox.cpp
|
* @file: nana/gui/filebox.cpp
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include <nana/gui.hpp>
|
#include <nana/gui.hpp>
|
||||||
#include <nana/gui/filebox.hpp>
|
#include <nana/gui/filebox.hpp>
|
||||||
#include <nana/filesystem/filesystem_ext.hpp>
|
#include <nana/filesystem/filesystem_ext.hpp>
|
||||||
@ -1114,29 +1116,29 @@ namespace nana
|
|||||||
for(auto & f : impl_->filters)
|
for(auto & f : impl_->filters)
|
||||||
{
|
{
|
||||||
filter_holder += to_wstring(f.des);
|
filter_holder += to_wstring(f.des);
|
||||||
filter_holder += static_cast<std::wstring::value_type>('\0');
|
filter_holder += static_cast<std::wstring::value_type>('\0'); // separator
|
||||||
std::wstring fs = to_wstring(f.type);
|
std::wstring ff = to_wstring(f.type);
|
||||||
std::size_t pos = 0;
|
std::size_t pos = 0;
|
||||||
while(true)
|
while(true) // eliminate spaces
|
||||||
{
|
{
|
||||||
pos = fs.find(L" ", pos);
|
pos = ff.find(L" ", pos);
|
||||||
if(pos == fs.npos)
|
if(pos == ff.npos)
|
||||||
break;
|
break;
|
||||||
fs.erase(pos);
|
ff.erase(pos);
|
||||||
}
|
}
|
||||||
filter_holder += fs;
|
filter_holder += ff;
|
||||||
filter_holder += static_cast<std::wstring::value_type>('\0');
|
filter_holder += static_cast<std::wstring::value_type>('\0'); // separator
|
||||||
|
|
||||||
//Get the default file extentsion
|
//Get the default file extension
|
||||||
if (default_extension.empty())
|
if (default_extension.empty())
|
||||||
{
|
{
|
||||||
pos = fs.find_last_of('.');
|
pos = ff.find_last_of('.');
|
||||||
if (pos != fs.npos)
|
if (pos != ff.npos)
|
||||||
{
|
{
|
||||||
fs = fs.substr(pos + 1);
|
ff = ff.substr(pos + 1);
|
||||||
if (fs != L"*")
|
if (ff != L"*")
|
||||||
{
|
{
|
||||||
default_extension = fs;
|
default_extension = ff;
|
||||||
ofn.lpstrDefExt = default_extension.data();
|
ofn.lpstrDefExt = default_extension.data();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1207,25 +1209,33 @@ namespace nana
|
|||||||
}//end class filebox
|
}//end class filebox
|
||||||
|
|
||||||
|
|
||||||
//class directory_picker
|
//class directory picker
|
||||||
struct folderbox::implement
|
struct folderbox::implement
|
||||||
{
|
{
|
||||||
window owner;
|
window owner;
|
||||||
path_type init_path;
|
path_type init_path;
|
||||||
|
std::string title;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
folderbox::folderbox(window owner, const path_type& init_path)
|
folderbox::folderbox(window owner, const path_type& init_path, std::string title)
|
||||||
: impl_(new implement)
|
: impl_(new implement{ owner, fs::canonical(init_path).make_preferred(), title })
|
||||||
{
|
{}
|
||||||
impl_->owner = owner;
|
|
||||||
impl_->init_path = init_path;
|
|
||||||
}
|
|
||||||
|
|
||||||
folderbox::~folderbox()
|
folderbox::~folderbox()
|
||||||
{
|
{
|
||||||
delete impl_;
|
delete impl_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string folderbox::title(std::string s)
|
||||||
|
{
|
||||||
|
impl_->title.swap(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef NANA_MINGW
|
#ifdef NANA_MINGW
|
||||||
static int CALLBACK browse_folder_callback(HWND hwnd, UINT msg, LPARAM lparam, LPARAM data)
|
static int CALLBACK browse_folder_callback(HWND hwnd, UINT msg, LPARAM lparam, LPARAM data)
|
||||||
{
|
{
|
||||||
@ -1235,7 +1245,9 @@ namespace nana
|
|||||||
{
|
{
|
||||||
case BFFM_INITIALIZED:
|
case BFFM_INITIALIZED:
|
||||||
if (data)
|
if (data)
|
||||||
|
{
|
||||||
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, data);
|
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, data);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1278,17 +1290,22 @@ namespace nana
|
|||||||
fd->Release();
|
fd->Release();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
BROWSEINFO brw = { 0 };
|
|
||||||
wchar_t display_text[MAX_PATH];
|
wchar_t display_text[MAX_PATH];
|
||||||
brw.hwndOwner = reinterpret_cast<HWND>(API::root(impl_->owner));
|
auto title = to_wstring( impl_->title ) ;
|
||||||
brw.pszDisplayName = display_text;
|
|
||||||
brw.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
|
|
||||||
brw.lpfn = browse_folder_callback;
|
|
||||||
|
|
||||||
std::wstring init_path = impl_->init_path.wstring();
|
std::wstring init_path = impl_->init_path.wstring();
|
||||||
brw.lParam = reinterpret_cast<LPARAM>(init_path.c_str());
|
|
||||||
auto pidl = ::SHBrowseForFolder(&brw);
|
|
||||||
|
|
||||||
|
// https://docs.microsoft.com/en-us/windows/desktop/api/shlobj_core/ns-shlobj_core-_browseinfoa
|
||||||
|
BROWSEINFO brw = { 0 };
|
||||||
|
brw.hwndOwner = reinterpret_cast<HWND>(API::root(impl_->owner));
|
||||||
|
//brw.pidlRoot; // specifies the location of the root folder from which to start browsing.
|
||||||
|
brw.pszDisplayName = display_text; // buffer to receive the display name of the folder selected by the user.
|
||||||
|
brw.lpszTitle = title.data();
|
||||||
|
brw.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; // | BIF_EDITBOX;
|
||||||
|
brw.lpfn = browse_folder_callback;
|
||||||
|
brw.lParam = reinterpret_cast<LPARAM>(init_path.c_str());
|
||||||
|
//brw.iImage; //
|
||||||
|
|
||||||
|
auto pidl = ::SHBrowseForFolder(&brw);
|
||||||
if (pidl)
|
if (pidl)
|
||||||
{
|
{
|
||||||
wchar_t folder_path[MAX_PATH];
|
wchar_t folder_path[MAX_PATH];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user