From f642ab589234f8aaf8179f12852dbbcaa493f2ce Mon Sep 17 00:00:00 2001 From: cxl Date: Thu, 23 Mar 2017 20:25:23 +0000 Subject: [PATCH] CtrlLib: ArrayCtrl: ConvertBy git-svn-id: svn://ultimatepp.org/upp/trunk@10968 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/CtrlLib/ArrayCtrl.cpp | 20 ++++++++++++++++---- uppsrc/CtrlLib/ArrayCtrl.h | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/uppsrc/CtrlLib/ArrayCtrl.cpp b/uppsrc/CtrlLib/ArrayCtrl.cpp index d05c2abb6..6a268f621 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.cpp +++ b/uppsrc/CtrlLib/ArrayCtrl.cpp @@ -46,6 +46,15 @@ ArrayCtrl::Column& ArrayCtrl::Column::SetConvert(const Convert& c) { return *this; } +Column& ArrayCtrl::Column::ConvertBy(Function cv) +{ + convertby = cv; + ClearCache(); + arrayctrl->Refresh(); + arrayctrl->SyncInfo(); + return *this; +} + ArrayCtrl::Column& ArrayCtrl::Column::SetFormat(const char *fmt) { FormatConvert::SetFormat(fmt); @@ -515,7 +524,7 @@ Value ArrayCtrl::GetConvertedColumn(int i, int col) const { LTIMING("GetConvertedColumn"); const Column& m = column[col]; Value v = GetColumn(i, col); - if(!m.convert) return v; + if(!m.convert && !m.convertby) return v; if(m.cache.Is< Vector >() && i < m.cache.Get< Vector >().GetCount()) { const String& s = m.cache.Get< Vector >()[i]; if(!s.IsVoid()) return s; @@ -524,16 +533,19 @@ Value ArrayCtrl::GetConvertedColumn(int i, int col) const { const Value& v = m.cache.Get< Vector >()[i]; if(!v.IsVoid()) return v; } - Value r = m.convert->Format(v); + if(m.convertby) + v = m.convertby(v); + if(m.convert) + v = m.convert->Format(v); if(m.cached) { if(m.cache.IsEmpty()) m.cache.Create< Vector >(); if(IsString(r) && m.cache.Is< Vector >()) - m.cache.Get< Vector >().At(i, String::GetVoid()) = r; + m.cache.Get< Vector >().At(i, String::GetVoid()) = v; if(!IsString(r) && m.cache.Is< Vector >()) m.cache.Create< Vector >(); if(m.cache.Is< Vector >()) - m.cache.Get< Vector >().At(i) = r; + m.cache.Get< Vector >().At(i) = v; ASSERT(m.pos.GetCount() || m.cache.IsEmpty()); } return r; diff --git a/uppsrc/CtrlLib/ArrayCtrl.h b/uppsrc/CtrlLib/ArrayCtrl.h index 6905b4032..901d3dc0f 100644 --- a/uppsrc/CtrlLib/ArrayCtrl.h +++ b/uppsrc/CtrlLib/ArrayCtrl.h @@ -57,6 +57,7 @@ public: int index; Mitor pos; const Convert *convert; + Function convertby; Ptr edit; const Display *display; Event&> factory; @@ -88,6 +89,7 @@ public: Column& AddIndex() { Add(arrayctrl->GetIndexCount()); arrayctrl->AddIndex(); return *this; } Column& SetConvert(const Convert& c); + Column& ConvertBy(Function cv); Column& SetFormat(const char *fmt); Column& SetDisplay(const Display& d); Column& NoEdit();