diff --git a/include/nana/filesystem/filesystem.hpp b/include/nana/filesystem/filesystem.hpp index c17efd6d..c4815c94 100644 --- a/include/nana/filesystem/filesystem.hpp +++ b/include/nana/filesystem/filesystem.hpp @@ -175,7 +175,7 @@ namespace nana { namespace experimental { namespace filesystem unknown = 0xFFFF ///< not known, such as when a file_status object is created without specifying the permissions }; //enum class copy_options; - + enum class directory_options { none, @@ -538,13 +538,20 @@ namespace std { namespace filesystem { using namespace std::experimental::filesystem; -#if (defined(_MSC_VER) && ((!defined(_MSVC_LANG)) || (_MSVC_LANG < 201703))) +#if defined(NANA_FILESYSTEM_FORCE) || \ + (defined(_MSC_VER) && ((!defined(_MSVC_LANG)) || (_MSVC_LANG < 201703))) path absolute(const path& p); path absolute(const path& p, std::error_code& err); path canonical(const path& p); path canonical(const path& p, std::error_code& err); #endif + +#if defined(NANA_FILESYSTEM_FORCE) || defined(NANA_MINGW) + bool exists( std::filesystem::file_status s ) noexcept; + bool exists( const std::filesystem::path& p ); + bool exists( const std::filesystem::path& p, std::error_code& ec ) noexcept; +#endif } } // std diff --git a/include/nana/paint/detail/image_impl_interface.hpp b/include/nana/paint/detail/image_impl_interface.hpp index 4a99abaf..6a0e1141 100644 --- a/include/nana/paint/detail/image_impl_interface.hpp +++ b/include/nana/paint/detail/image_impl_interface.hpp @@ -16,7 +16,7 @@ namespace nana{ namespace paint{ public: using graph_reference = nana::paint::graphics&; virtual ~image_impl_interface() = 0; //The destructor is defined in ../image.cpp - virtual bool open(const std::experimental::filesystem::path& file) = 0; + virtual bool open(const std::filesystem::path& file) = 0; virtual bool open(const void* data, std::size_t bytes) = 0; // reads image from memory virtual bool alpha_channel() const = 0; virtual bool empty() const = 0; diff --git a/include/nana/paint/graphics.hpp b/include/nana/paint/graphics.hpp index 4eed26a6..3cec589c 100644 --- a/include/nana/paint/graphics.hpp +++ b/include/nana/paint/graphics.hpp @@ -33,7 +33,7 @@ namespace nana { friend class graphics; public: - using path_type = ::std::experimental::filesystem::path; + using path_type = ::std::filesystem::path; using font_style = ::nana::detail::font_style; diff --git a/source/detail/platform_abstraction.cpp b/source/detail/platform_abstraction.cpp index c9178c2f..515f6ace 100644 --- a/source/detail/platform_abstraction.cpp +++ b/source/detail/platform_abstraction.cpp @@ -158,7 +158,7 @@ namespace nana : public font_interface { public: - using path_type = std::experimental::filesystem::path; + using path_type = std::filesystem::path; internal_font(const path_type& ttf, const std::string& font_family, double font_size, const font_style& fs, native_font_type native_font): ttf_(ttf), diff --git a/source/detail/platform_abstraction.hpp b/source/detail/platform_abstraction.hpp index 290e0a5c..3e22112a 100644 --- a/source/detail/platform_abstraction.hpp +++ b/source/detail/platform_abstraction.hpp @@ -28,7 +28,7 @@ namespace nana public: using font = font_interface; - using path_type = ::std::experimental::filesystem::path; + using path_type = ::std::filesystem::path; static void initialize(); /// Shutdown before destruction of platform_spec diff --git a/source/detail/posix/theme.cpp b/source/detail/posix/theme.cpp index 417bc744..cebcf8f5 100644 --- a/source/detail/posix/theme.cpp +++ b/source/detail/posix/theme.cpp @@ -1,3 +1,5 @@ +#include +#if defined(NANA_POSIX) && defined(NANA_X11) #include "theme.hpp" #include #include @@ -295,4 +297,5 @@ namespace nana } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/source/filesystem/filesystem.cpp b/source/filesystem/filesystem.cpp index aa2c6ab4..a61e2f66 100644 --- a/source/filesystem/filesystem.cpp +++ b/source/filesystem/filesystem.cpp @@ -116,7 +116,7 @@ namespace nana //Windows stores file times using the FILETIME structure, which is a 64 bit value of 100ns intervals from January 1, 1601. //What's worse is that this 1601 date is fairly common to see given that it's the all zeroes value, and it is far before the //earliest date representable with time_t.std::filesystem can't change the reality of the underlying platform. - + try { #if NANA_USING_BOOST_FILESYSTEM @@ -275,7 +275,7 @@ namespace nana { namespace experimental { namespace filesystem return has_root_directory(); #endif } - + bool path::is_relative() const { return !is_absolute(); @@ -310,7 +310,7 @@ namespace nana { namespace experimental { namespace filesystem ; } - + path path::root_name() const { @@ -1123,11 +1123,12 @@ namespace nana { namespace experimental { namespace filesystem } //end namespace experimental }//end namespace nana -#if (defined(_MSC_VER) && ((!defined(_MSVC_LANG)) || (_MSVC_LANG < 201703))) namespace std { namespace filesystem { +#if defined(NANA_FILESYSTEM_FORCE) || \ + (defined(_MSC_VER) && ((!defined(_MSVC_LANG)) || (_MSVC_LANG < 201703))) path absolute(const path& p) { if (p.empty()) @@ -1236,9 +1237,26 @@ namespace std { return canonical(p, &err); } +#endif + +#if defined(NANA_FILESYSTEM_FORCE) || defined(NANA_MINGW) + bool exists( std::filesystem::file_status s ) noexcept + { + return s.type() != file_type::not_found; + } + + bool exists( const std::filesystem::path& p ) + { + return exists(status(p)); + } + + bool exists( const std::filesystem::path& p, std::error_code& ec ) noexcept + { + return exists(status(p, ec)); + } +#endif }//end namespace filesystem }//end namespace std -#endif #endif diff --git a/source/gui/dragdrop.cpp b/source/gui/dragdrop.cpp index d04e5a92..d6266e69 100644 --- a/source/gui/dragdrop.cpp +++ b/source/gui/dragdrop.cpp @@ -19,6 +19,7 @@ #include #include +#include #ifdef NANA_WINDOWS # include @@ -179,7 +180,7 @@ namespace nana win32com_drop_target(bool simple_mode): simple_mode_(simple_mode) { - + } //Implements IUnknown @@ -279,7 +280,7 @@ namespace nana //Drop the object if left button is released. if (0 == (key_state & (MK_LBUTTON))) return DRAGDROP_S_DROP; - + return S_OK; } @@ -468,7 +469,7 @@ namespace nana auto entry = find(*request_format, true); if (entry) return _m_copy_medium(pmedium, &entry->medium, &entry->format); - + return DV_E_FORMATETC; } @@ -481,10 +482,10 @@ namespace nana { if (NULL == pformatetc) return E_INVALIDARG; - + if (!(DVASPECT_CONTENT & pformatetc->dwAspect)) return DV_E_DVASPECT; - + HRESULT result = DV_E_TYMED; for (auto & entry : entries_) @@ -563,7 +564,7 @@ namespace nana { if (!(stgmed_dst && stgmed_src && fmt_src)) return E_INVALIDARG; - + switch (stgmed_src->tymed) { case TYMED_HGLOBAL: @@ -646,7 +647,7 @@ namespace nana { ++ref_count_; } - + std::size_t release() override { std::size_t val = --ref_count_; @@ -768,7 +769,7 @@ namespace nana auto& atombase = _m_spec().atombase(); auto ddrop = dynamic_cast(i->second); - + auto const native_source = reinterpret_cast(API::root(drag_wd)); { @@ -780,7 +781,7 @@ namespace nana hovered_.window_handle = nullptr; hovered_.native_wd = 0; window target_wd = 0; - + if(ddrop->simple_mode()) { @@ -816,7 +817,7 @@ namespace nana { hovered_.window_handle = cur_wd; - icon = (((drag_wd == cur_wd) || ddrop->has(drag_wd, cur_wd)) ? "dnd-move" : "dnd-none"); + icon = (((drag_wd == cur_wd) || ddrop->has(drag_wd, cur_wd)) ? "dnd-move" : "dnd-none"); } } @@ -855,9 +856,9 @@ namespace nana if(icon) { _m_free_cursor(); - hovered_.cursor = ::XcursorFilenameLoadCursor(disp, icons_.cursor(icon).c_str()); - ::XDefineCursor(disp, native_cur_wd, hovered_.cursor); - } + hovered_.cursor = ::XcursorFilenameLoadCursor(disp, icons_.cursor(icon).c_str()); + ::XDefineCursor(disp, native_cur_wd, hovered_.cursor); + } #endif } else if(msg_pkt.u.xevent.type == ButtonRelease) @@ -868,7 +869,7 @@ namespace nana API::release_capture(drag_wd); return detail::propagation_chain::exit; } - + } return detail::propagation_chain::stop; }); @@ -909,7 +910,7 @@ namespace nana { std::cout<<"ButtonRelease"< predicate_fn) { impl_->predicate = predicate_fn; @@ -1277,4 +1278,4 @@ namespace nana { real_data_->files.emplace_back(std::move(path)); } -}//end namespace nana \ No newline at end of file +}//end namespace nana diff --git a/source/paint/detail/image_bmp.hpp b/source/paint/detail/image_bmp.hpp index e3893c61..ac25812e 100644 --- a/source/paint/detail/image_bmp.hpp +++ b/source/paint/detail/image_bmp.hpp @@ -111,11 +111,11 @@ namespace nana{ namespace paint return true; } - bool open(const std::experimental::filesystem::path& filename) override + bool open(const std::filesystem::path& filename) override { std::ifstream ifs(filename.string(), std::ios::binary); - auto const bytes = static_cast(std::experimental::filesystem::file_size(filename)); + auto const bytes = static_cast(std::filesystem::file_size(filename)); if (ifs && (bytes > static_cast(sizeof(bitmap_file_header)))) { std::unique_ptr buffer{ new char[bytes] }; diff --git a/source/paint/detail/image_ico.hpp b/source/paint/detail/image_ico.hpp index 4f78cad6..ffa4d693 100644 --- a/source/paint/detail/image_ico.hpp +++ b/source/paint/detail/image_ico.hpp @@ -241,7 +241,7 @@ public: #endif } - bool open(const std::experimental::filesystem::path& ico_file) override + bool open(const std::filesystem::path& ico_file) override { std::ifstream file(ico_file.string(), std::ios::binary); if (!file.is_open()) return false; @@ -290,7 +290,7 @@ public: #endif } private: - std::experimental::filesystem::path path_; + std::filesystem::path path_; #if defined(NANA_WINDOWS) void* native_handle_{nullptr}; #endif diff --git a/source/paint/detail/image_ico_resource.hpp b/source/paint/detail/image_ico_resource.hpp index dd451bf0..f7e85818 100644 --- a/source/paint/detail/image_ico_resource.hpp +++ b/source/paint/detail/image_ico_resource.hpp @@ -29,7 +29,7 @@ namespace nana{ namespace paint :public image::image_impl_interface { public: - bool open(const std::experimental::filesystem::path& filename) override + bool open(const std::filesystem::path& filename) override { #if defined(NANA_WINDOWS) SHFILEINFO sfi; diff --git a/source/paint/detail/image_jpeg.hpp b/source/paint/detail/image_jpeg.hpp index d63a2c1d..0b1ecd2c 100644 --- a/source/paint/detail/image_jpeg.hpp +++ b/source/paint/detail/image_jpeg.hpp @@ -47,7 +47,7 @@ namespace nana } } public: - bool open(const std::experimental::filesystem::path& jpeg_file) override + bool open(const std::filesystem::path& jpeg_file) override { auto fp = ::fopen(to_osmbstr(to_utf8(jpeg_file.native())).c_str(), "rb"); if(nullptr == fp) return false; diff --git a/source/paint/detail/image_png.hpp b/source/paint/detail/image_png.hpp index f3cff150..91dd8e2b 100644 --- a/source/paint/detail/image_png.hpp +++ b/source/paint/detail/image_png.hpp @@ -123,7 +123,7 @@ namespace nana delete[] row_ptrs; } public: - bool open(const std::experimental::filesystem::path& png_file) override + bool open(const std::filesystem::path& png_file) override { auto fp = ::fopen(to_osmbstr(to_utf8(png_file.native())).c_str(), "rb"); if(nullptr == fp) return false; diff --git a/source/paint/image.cpp b/source/paint/image.cpp index 1781a657..9d19a46c 100644 --- a/source/paint/image.cpp +++ b/source/paint/image.cpp @@ -38,7 +38,7 @@ #include "detail/image_ico_resource.hpp" #include "detail/image_ico.hpp" -namespace fs = std::experimental::filesystem; +namespace fs = std::filesystem; namespace nana { diff --git a/source/paint/truetype.hpp b/source/paint/truetype.hpp index 5b94cd34..d8ce4b9b 100644 --- a/source/paint/truetype.hpp +++ b/source/paint/truetype.hpp @@ -47,7 +47,7 @@ namespace nana std::uint16_t string_offset; //from start of storage area }; public: - using path_type = ::std::experimental::filesystem::path; + using path_type = ::std::filesystem::path; truetype(const path_type& filename) {