From 1d31809051ce6045f2918fe81fee65c1bc85f7e2 Mon Sep 17 00:00:00 2001 From: Jinhao Date: Fri, 17 Feb 2017 07:17:47 +0800 Subject: [PATCH] improve text_editor set_accept --- include/nana/system/dataexch.hpp | 4 ++- source/gui/widgets/skeletons/text_editor.cpp | 29 +++++++++++++------- source/system/dataexch.cpp | 10 ++++++- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/include/nana/system/dataexch.hpp b/include/nana/system/dataexch.hpp index 7d9ded94..7ce6be72 100644 --- a/include/nana/system/dataexch.hpp +++ b/include/nana/system/dataexch.hpp @@ -1,6 +1,6 @@ /* * Data Exchanger Implementation - * Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com) + * Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com) * * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at @@ -38,6 +38,8 @@ namespace system{ void get(std::string& text_utf8); void get(std::wstring& text); + + std::wstring wget(); private: bool _m_set(format, const void* buf, std::size_t size, native_window_type); void* _m_get(format, size_t& size); diff --git a/source/gui/widgets/skeletons/text_editor.cpp b/source/gui/widgets/skeletons/text_editor.cpp index 051e8d1b..11723089 100644 --- a/source/gui/widgets/skeletons/text_editor.cpp +++ b/source/gui/widgets/skeletons/text_editor.cpp @@ -1,7 +1,7 @@ /* * A text editor implementation * Nana C++ Library(http://www.nanapro.org) - * Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com) + * Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com) * * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at @@ -2344,24 +2344,29 @@ namespace nana{ namespace widgets void text_editor::paste() { - std::wstring text; - nana::system::dataexch().get(text); + auto text = system::dataexch{}.wget(); //If it is required check the acceptable - if (accepts::no_restrict != impl_->capacities.acceptive) + if ((accepts::no_restrict != impl_->capacities.acceptive) || impl_->capacities.pred_acceptive) { for (auto i = text.begin(); i != text.end(); ++i) { - if (!_m_accepts(*i)) + if (_m_accepts(*i)) + { + if (accepts::no_restrict == impl_->capacities.acceptive) + put(*i); + + continue; + } + + if (accepts::no_restrict != impl_->capacities.acceptive) { text.erase(i, text.end()); - break; + put(std::move(text)); } + break; } } - - if (!text.empty()) - put(std::move(text)); } void text_editor::enter(bool record_undo) @@ -2814,8 +2819,12 @@ namespace nana{ namespace widgets bool text_editor::_m_accepts(char_type ch) const { - if(accepts::no_restrict == impl_->capacities.acceptive) + if (accepts::no_restrict == impl_->capacities.acceptive) + { + if (impl_->capacities.pred_acceptive) + return impl_->capacities.pred_acceptive(ch); return true; + } //Checks the input whether it meets the requirement for a numeric. auto str = text(); diff --git a/source/system/dataexch.cpp b/source/system/dataexch.cpp index e4872f93..f622de63 100644 --- a/source/system/dataexch.cpp +++ b/source/system/dataexch.cpp @@ -1,6 +1,6 @@ /* * Data Exchanger Implementation - * Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com) + * Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com) * * Distributed under the Boost Software License, Version 1.0. * (See accompanying file LICENSE_1_0.txt or copy at @@ -183,6 +183,14 @@ namespace nana{ namespace system{ #endif } } + + std::wstring dataexch::wget() + { + std::wstring str; + this->get(str); + return str; + } + //private: bool dataexch::_m_set(format fmt, const void* buf, std::size_t size, native_window_type owner) {