From 97e3703f4b170d7430427ca0544761fe28be1cb6 Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 6 Jun 2016 16:55:45 +0000 Subject: [PATCH] CtrlLib: Bar now supports lambdas git-svn-id: svn://ultimatepp.org/upp/trunk@9905 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/Callback.h | 3 +- uppsrc/CtrlLib/Bar.cpp | 127 +++++++++++++--- uppsrc/CtrlLib/Bar.h | 56 ++++--- uppsrc/CtrlLib/MenuBar.cpp | 2 +- uppsrc/CtrlLib/src.tpp/Bar$en-us.tpp | 209 +++++++++++++++++++-------- 5 files changed, 295 insertions(+), 102 deletions(-) diff --git a/uppsrc/Core/Callback.h b/uppsrc/Core/Callback.h index ad34883d6..7836a8fd3 100644 --- a/uppsrc/Core/Callback.h +++ b/uppsrc/Core/Callback.h @@ -25,6 +25,7 @@ class Function : Moveable> { virtual Res Execute(ArgTypes... args) { l(args...); return fn(args...); } Wrapper2(const Function& l, F&& fn) : l(l), fn(pick(fn)) {} + Wrapper2(const Function& l, const F& fn) : l(l), fn(fn) {} }; WrapperBase *ptr; @@ -60,7 +61,7 @@ public: template Function& operator<<(const F& fn) { if(!ptr) { Copy(fn); return *this; } - WrapperBase *b = ptr; ptr = new Wrapper2(*this, pick(fn)); Free(b); return *this; } + WrapperBase *b = ptr; ptr = new Wrapper2(*this, fn); Free(b); return *this; } template Function& operator<<(F&& fn) { if(!ptr) { Pick(pick(fn)); return *this; } diff --git a/uppsrc/CtrlLib/Bar.cpp b/uppsrc/CtrlLib/Bar.cpp index 254c942a2..0fd34eb8e 100644 --- a/uppsrc/CtrlLib/Bar.cpp +++ b/uppsrc/CtrlLib/Bar.cpp @@ -274,12 +274,12 @@ void Bar::AddNC(Ctrl& ctrl) AddCtrl(&ctrl, (int)Null); } -Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, Callback cb) +Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, const Callback& callback) { - return AddItem(cb).Text(text).Image(image).Enable(enable); + return AddItem(callback).Text(text).Image(image).Enable(enable); } -Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, Callback callback) +Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback) { const char *text = (*key)().name; if(*text == '\3') @@ -287,17 +287,17 @@ Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, Ca return Add(enable, text, image, callback).Key(key); } -Bar::Item& Bar::Add(const char *text, const UPP::Image& image, Callback callback) +Bar::Item& Bar::Add(const char *text, const UPP::Image& image, const Callback& callback) { return AddItem(callback).Text(text).Image(image); } -Bar::Item& Bar::Add(const String& text, const UPP::Image& image, Callback callback) +Bar::Item& Bar::Add(const String& text, const UPP::Image& image, const Callback& callback) { return Add(~text, image, callback); } -Bar::Item& Bar::Add(KeyInfo& (*key)(), const UPP::Image& image, Callback callback) +Bar::Item& Bar::Add(KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback) { const char *text = (*key)().name; if(*text == '\3') @@ -305,18 +305,63 @@ Bar::Item& Bar::Add(KeyInfo& (*key)(), const UPP::Image& image, Callback callba return Add(text, image, callback).Key(key); } -Bar::Item& Bar::Add(bool enable, const char *text, Callback callback) +Bar::Item& Bar::Add(bool enable, const char *text, const Callback& callback) { return IsMenuBar() ? Add(enable, text, Image(), callback) : NilItem(); } -Bar::Item& Bar::Add(const char *text, Callback callback) +Bar::Item& Bar::Add(const char *text, const Callback& callback) { return IsMenuBar() ? Add(true, text, Image(), callback) : NilItem(); } -Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), Callback callback) +Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const Callback& callback) { return IsMenuBar() ? Add(enable, key, Image(), callback) : NilItem(); } -Bar::Item& Bar::Add(KeyInfo& (*key)(), Callback callback) +Bar::Item& Bar::Add(KeyInfo& (*key)(), const Callback& callback) { return IsMenuBar() ? Add(true, key, Image(), callback) : NilItem(); } +Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, const UPP::Function& fn) +{ + return Add(enable, text, image, Callback() << fn); +} + +Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function& fn) +{ + return Add(enable, key, image, Callback() << fn); +} + +Bar::Item& Bar::Add(const char *text, const UPP::Image& image, const Function& fn) +{ + return Add(text, image, Callback() << fn); +} + +Bar::Item& Bar::Add(const String& text, const UPP::Image& image, const Function& fn) +{ + return Add(text, image, Callback() << fn); +} + +Bar::Item& Bar::Add(KeyInfo& (*key)(), const UPP::Image& image, const Function& fn) +{ + return Add(key, image, Callback() << fn); +} + +Bar::Item& Bar::Add(bool enable, const char *text, const Function& fn) +{ + return Add(enable, text, Callback() << fn); +} + +Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const Function& fn) +{ + return Add(enable, key, Callback() << fn); +} + +Bar::Item& Bar::Add(const char *text, const Function& fn) +{ + return Add(text, Callback() << fn); +} + +Bar::Item& Bar::Add(KeyInfo& (*key)(), const Function& fn) +{ + return Add(key, Callback() << fn); +} + void Bar::Break() { AddCtrl(NULL, (int)Null); @@ -333,30 +378,76 @@ void Bar::MenuGap(int size) { if(IsMenuBar()) Gap(size); } void Bar::AddMenu(Ctrl& ctrl) { if(IsMenuBar()) Add(ctrl); } void Bar::AddMenu(Ctrl& ctrl, Size sz) { if(IsMenuBar()) Add(ctrl, sz); } -Bar::Item& Bar::AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, Callback callback) +Bar::Item& Bar::AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback) { return IsMenuBar() ? Add(enable, key, image, callback) : NilItem(); } -Bar::Item& Bar::AddMenu(KeyInfo& (*key)(), const UPP::Image& image, Callback callback) +Bar::Item& Bar::AddMenu(KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback) { return IsMenuBar() ? Add(key, image, callback) : NilItem(); } -Bar::Item& Bar::AddMenu(bool enable, const char *text, const UPP::Image& image, Callback callback) +Bar::Item& Bar::AddMenu(bool enable, const char *text, const UPP::Image& image, const Callback& callback) { return IsMenuBar() ? Add(enable, text, image, callback) : NilItem(); } -Bar::Item& Bar::AddMenu(const char *text, const UPP::Image& image, Callback callback) +Bar::Item& Bar::AddMenu(const char *text, const UPP::Image& image, const Callback& callback) { return IsMenuBar() ? Add(text, image, callback) : NilItem(); } -Bar::Item& Bar::Add(bool enable, const char *text, Callback1 proc) + +Bar::Item& Bar::AddMenu(bool enable, const char *text, const UPP::Image& image, const Function& fn) +{ + return AddMenu(enable, text, image, Callback() << fn); +} + +Bar::Item& Bar::AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function& fn) +{ + return AddMenu(enable, key, image, Callback() << fn); +} + +Bar::Item& Bar::AddMenu(const char *text, const UPP::Image& image, const Function& fn) +{ + return AddMenu(text, image, Callback() << fn); +} + +Bar::Item& Bar::AddMenu(const String& t, const UPP::Image& m, const Function& fn) +{ + return AddMenu(t, m, Callback() << fn); +} + +Bar::Item& Bar::AddMenu(KeyInfo& (*key)(), const UPP::Image& m, const Function& fn) +{ + return AddMenu(key, m, Callback() << fn); +} + +Bar::Item& Bar::Add(bool enable, const char *text, const Event& proc) { return AddSubMenu(proc).Text(text).Enable(enable); } -Bar::Item& Bar::Add(const char *text, Callback1 proc) +Bar::Item& Bar::Add(const char *text, const Event& proc) { return Add(true, text, proc); } -Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, Callback1 proc) +Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, const Event& proc) { return Add(enable, text, proc).Image(image); } -Bar::Item& Bar::Add(const char *text, const UPP::Image& image, Callback1 proc) +Bar::Item& Bar::Add(const char *text, const UPP::Image& image, const Event& proc) { return Add(text, proc).Image(image); } +Bar::Item& Bar::Sub(bool enable, const char *text, const Function& submenu) +{ + return Add(enable, text, Event() << submenu); +} + +Bar::Item& Bar::Sub(const char *text, const Function& submenu) +{ + return Add(text, Event() << submenu); +} + +Bar::Item& Bar::Sub(bool enable, const char *text, const UPP::Image& image, const Function& submenu) +{ + return Add(enable, text, image, Event() << submenu); +} + +Bar::Item& Bar::Sub(const char *text, const UPP::Image& image, const Function& submenu) +{ + return Add(text, image, Event() << submenu); +} + void Bar::ToolSeparator() { if(IsToolBar()) Separator(); } void Bar::ToolBreak() { if(IsToolBar()) Break(); } void Bar::ToolGap(int size) { if(IsToolBar()) Gap(size); } diff --git a/uppsrc/CtrlLib/Bar.h b/uppsrc/CtrlLib/Bar.h index e5bd0293c..9be245f64 100644 --- a/uppsrc/CtrlLib/Bar.h +++ b/uppsrc/CtrlLib/Bar.h @@ -101,17 +101,27 @@ public: void Add(bool en, Ctrl& ctrl, Size sz) { Add(ctrl, sz); ctrl.Enable(en); } void Add(bool en, Ctrl& ctrl, int cx, int cy = 0) { Add(ctrl, cx, cy); ctrl.Enable(en); } + Item& Add(bool enable, const char *text, const UPP::Image& image, const Callback& callback); + Item& Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback); + Item& Add(const char *text, const UPP::Image& image, const Callback& callback); + Item& Add(const String& text, const UPP::Image& image, const Callback& callback); + Item& Add(KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback); - Item& Add(bool enable, const char *text, const UPP::Image& image, Callback callback); - Item& Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, Callback callback); - Item& Add(const char *text, const UPP::Image& image, Callback callback); - Item& Add(const String& text, const UPP::Image& image, Callback callback); - Item& Add(KeyInfo& (*key)(), const UPP::Image& image, Callback callback); + Item& Add(bool enable, const char *text, const Callback& callback); + Item& Add(bool enable, KeyInfo& (*key)(), const Callback& callback); + Item& Add(const char *text, const Callback& callback); + Item& Add(KeyInfo& (*key)(), const Callback& callback); - Item& Add(bool enable, const char *text, Callback callback); - Item& Add(bool enable, KeyInfo& (*key)(), Callback callback); - Item& Add(const char *text, Callback callback); - Item& Add(KeyInfo& (*key)(), Callback callback); + Item& Add(bool enable, const char *text, const UPP::Image& image, const Function& fn); + Item& Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function& fn); + Item& Add(const char *text, const UPP::Image& image, const Function& fn); + Item& Add(const String& text, const UPP::Image& image, const Function& fn); + Item& Add(KeyInfo& (*key)(), const UPP::Image& image, const Function& fn); + + Item& Add(bool enable, const char *text, const Function& fn); + Item& Add(bool enable, KeyInfo& (*key)(), const Function& fn); + Item& Add(const char *text, const Function& fn); + Item& Add(KeyInfo& (*key)(), const Function& fn); void MenuSeparator(); void MenuBreak(); @@ -122,16 +132,26 @@ public: void AddMenu(Ctrl& ctrl, Size sz); void AddMenu(Ctrl& ctrl, int cx, int cy = 0) { AddMenu(ctrl, Size(cx, cy)); } - Item& AddMenu(bool enable, const char *text, const UPP::Image& image, Callback callback); - Item& AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, Callback callback); - Item& AddMenu(const char *text, const UPP::Image& image, Callback callback); - Item& AddMenu(const String& t, const UPP::Image& m, Callback c) { return AddMenu(t, m, c); } - Item& AddMenu(KeyInfo& (*key)(), const UPP::Image& m, Callback c); + Item& AddMenu(bool enable, const char *text, const UPP::Image& image, const Callback& callback); + Item& AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Callback& callback); + Item& AddMenu(const char *text, const UPP::Image& image, const Callback& callback); + Item& AddMenu(const String& t, const UPP::Image& m, const Callback& c) { return AddMenu(~t, m, c); } + Item& AddMenu(KeyInfo& (*key)(), const UPP::Image& m, const Callback& c); - Item& Add(bool enable, const char *text, Callback1 proc); - Item& Add(const char *text, Callback1 proc); - Item& Add(bool enable, const char *text, const UPP::Image& image, Callback1 proc); - Item& Add(const char *text, const UPP::Image& image, Callback1 proc); + Item& AddMenu(bool enable, const char *text, const UPP::Image& image, const Function& fn); + Item& AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function& fn); + Item& AddMenu(const char *text, const UPP::Image& image, const Function& fn); + Item& AddMenu(const String& t, const UPP::Image& m, const Function& fn); + Item& AddMenu(KeyInfo& (*key)(), const UPP::Image& m, const Function& fn); + + Item& Add(bool enable, const char *text, const Event& proc); + Item& Add(const char *text, const Event& proc); + Item& Add(bool enable, const char *text, const UPP::Image& image, const Event& proc); + Item& Add(const char *text, const UPP::Image& image, const Event& proc); + Item& Sub(bool enable, const char *text, const Function& submenu); + Item& Sub(const char *text, const Function& submenu); + Item& Sub(bool enable, const char *text, const UPP::Image& image, const Function& submenu); + Item& Sub(const char *text, const UPP::Image& image, const Function& submenu); void ToolSeparator(); void ToolBreak(); diff --git a/uppsrc/CtrlLib/MenuBar.cpp b/uppsrc/CtrlLib/MenuBar.cpp index 86858226f..604e7fa31 100644 --- a/uppsrc/CtrlLib/MenuBar.cpp +++ b/uppsrc/CtrlLib/MenuBar.cpp @@ -469,7 +469,7 @@ void MenuBar::KillDelayedClose() KillTimeCallback(TIMEID_STOP); } -void MenuBar::Set(Callback1 menu) +void MenuBar::Set(const Callback1 menu) { if(lock) return; Clear(); diff --git a/uppsrc/CtrlLib/src.tpp/Bar$en-us.tpp b/uppsrc/CtrlLib/src.tpp/Bar$en-us.tpp index d6cd95931..32d16e18b 100644 --- a/uppsrc/CtrlLib/src.tpp/Bar$en-us.tpp +++ b/uppsrc/CtrlLib/src.tpp/Bar$en-us.tpp @@ -87,61 +87,120 @@ GetMinSize() for [%-*@3 ctrl] is used. Enable([%-*@3 en]) is called for the widget to enable or disable it.&] [s3; &] [s4;%- &] -[s5;:Bar`:`:Add`(bool`,const char`*`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], -[@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(bool`,KeyInfo`&`(`*`)`(`)`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ I -tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [_^KeyInfo^ KeyInfo][@(0.0.255) `& -]_(`*[*@3 key])(), [@(0.0.255) const]_UPP`::Image[@(0.0.255) `&]_[*@3 image], -Callback_[*@3 callback])&] -[s5;:Bar`:`:Add`(const char`*`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], [@(0.0.255) const]_[_^Image^ UPP -`::Image][@(0.0.255) `&]_[*@3 image], [_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(const String`&`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* Add]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 text], -[@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(KeyInfo`&`(`*`)`(`)`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item -][@(0.0.255) `&]_[* Add]([_^KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), -[@(0.0.255) const]_UPP`::Image[@(0.0.255) `&]_[*@3 image], Callback_[*@3 callback])&] -[s5;:Bar`:`:Add`(bool`,const char`*`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `&]_[* A -dd]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], -[_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(const char`*`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `&]_[* Add]([@(0.0.255) c -onst]_[@(0.0.255) char]_`*[*@3 text], [_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `&]_[* Add]( -[@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:Add`(bool`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `&]_ -[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `& -]_[*@3 image], [_^Callback^ Callback]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image +], [@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_Callback[@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(const Upp`:`:String`&`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 t +ext], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), +[@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], [@(0.0.255) const]_Callback[@(0.0.255) `& +]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 call +back])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Callback[@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), +[@(0.0.255) const]_Callback[@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image +], [@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_Function<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(const Upp`:`:String`&`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_[*@3 t +ext], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), +[@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], [@(0.0.255) const]_Function<[@(0.0.255) v +oid]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`& +_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Function<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:Add`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), +[@(0.0.255) const]_Function<[@(0.0.255) void]_()>`&_[*@3 fn])&] [s2; Adds an item to menu or toolbar. If [%-*@3 text] is present, item is added to menu; if [%-*@3 image] is present, it is added to toolbar. If both are present, [%-*@3 image] is used as icon in menu too and [%-*@3 text] is used as toolbar button tooltip. When menu item -is selected or toolbar button pushed, [%-*@3 cb] is invoked. [%-*@3 enable] -sets the item status and [%-*@3 key] is an accelerator key or adjustable -accelerator info. All variants return a reference to Item which -can be used to further adjust the item.&] +is selected or toolbar button pushed, [%-*@3 callback] or [%-*@3 fn] +is invoked. [%-*@3 enable] sets the item status and [%-*@3 key] is +an accelerator key or adjustable accelerator info. All variants +return a reference to Item which can be used to further adjust +the item.&] [s3; &] [s4;%- &] -[s5;:Bar`:`:Add`(bool`,const char`*`,Callback1``):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], -[_^Callback1^ Callback1][@(0.0.255) <]Bar[@(0.0.255) `&>]_[*@3 proc])&] -[s5;:Bar`:`:Add`(const char`*`,Callback1``):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], [_^Callback1^ Callback1][@(0.0.255) < -]Bar[@(0.0.255) `&>]_[*@3 proc])&] -[s5;:Bar`:`:Add`(bool`,const char`*`,const Image`&`,Callback1``):%- [_^Bar`:`:Item^ I +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Event``&`):%- [_^Upp`:`:Bar`:`:Item^ I tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch -ar]_`*[*@3 text], [@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback1^ Callback1][@(0.0.255) <]Bar[@(0.0.255) `&>]_[*@3 proc])&] -[s5;:Bar`:`:Add`(const char`*`,const Image`&`,Callback1``):%- [_^Bar`:`:Item^ I +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Event^ Event]`&_[*@3 pro +c])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Event``&`):%- [_^Upp`:`:Bar`:`:Item^ I tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], -[@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback1^ Callback1][@(0.0.255) <]Bar[@(0.0.255) `&>]_[*@3 proc])&] -[s2; Adds a submenu. For toolbar, simply adds all items of [%-*@3 proc]. -[%-*@3 enable] sets the item status.&] +[@(0.0.255) const]_[_^Upp`:`:Event^ Event]`&_[*@3 proc])&] +[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Event``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image +], [@(0.0.255) const]_[_^Upp`:`:Event^ Event]`&_[*@3 proc])&] +[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Event``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Event^ Event]`&_[*@3 proc])&] +[s5;:Upp`:`:Bar`:`:Sub`(bool`,const char`*`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Sub]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_(Bar +[@(0.0.255) `&])>`&_[*@3 submenu])&] +[s5;:Upp`:`:Bar`:`:Sub`(const char`*`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Sub]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_(Bar[@(0.0.255) `&])>`& +_[*@3 submenu])&] +[s5;:Upp`:`:Bar`:`:Sub`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Sub]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) ch +ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image +], [@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_(Bar[@(0.0.255) `&]) +>`&_[*@3 submenu])&] +[s5;:Upp`:`:Bar`:`:Sub`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* Sub]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_(Bar[@(0.0.255) `&])>`& +_[*@3 submenu])&] +[s2; Adds a submenu. For toolbar, simply adds all items of [%-*@3 submenu]. +[%-*@3 enable] sets the item status. Note that lambda variants +(with Function) have to be named differently because of overloading +issues.&] [s3; &] [s4;%- &] [s5;:Bar`:`:MenuSeparator`(`):%- [@(0.0.255) void]_[* MenuSeparator]()&] @@ -155,24 +214,46 @@ tem][@(0.0.255) `&]_[* Add]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], ]_[*@3 ctrl], [_^Size^ Size]_[*@3 sz])&] [s5;:Bar`:`:AddMenu`(Ctrl`&`,int`,int`):%- [@(0.0.255) void]_[* AddMenu]([_^Ctrl^ Ctrl][@(0.0.255) `& ]_[*@3 ctrl], [@(0.0.255) int]_[*@3 cx], [@(0.0.255) int]_[*@3 cy]_`=_[@3 0])&] -[s5;:Bar`:`:AddMenu`(bool`,const char`*`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ I +[s5;:Upp`:`:Bar`:`:AddMenu`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) c -har]_`*[*@3 text], [@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 image], -[_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:AddMenu`(bool`,KeyInfo`&`(`*`)`(`)`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ I -tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) bool]_[*@3 enable], [_^KeyInfo^ KeyInfo][@(0.0.255) `& -]_(`*[*@3 key])(), [@(0.0.255) const]_UPP`::Image[@(0.0.255) `&]_[*@3 image], -Callback_[*@3 callback])&] -[s5;:Bar`:`:AddMenu`(const char`*`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* AddMenu]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], [@(0.0.255) const]_[_^Image^ U -PP`::Image][@(0.0.255) `&]_[*@3 image], [_^Callback^ Callback]_[*@3 callback])&] -[s5;:Bar`:`:AddMenu`(const String`&`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ Item][@(0.0.255) `& -]_[* AddMenu]([@(0.0.255) const]_[_^String^ String][@(0.0.255) `&]_[*@3 t], -[@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 m], [_^Callback^ Callback]_[*@3 c -])&] -[s5;:Bar`:`:AddMenu`(KeyInfo`&`(`*`)`(`)`,const Image`&`,Callback`):%- [_^Bar`:`:Item^ I -tem][@(0.0.255) `&]_[* AddMenu]([_^KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), -[@(0.0.255) const]_UPP`::Image[@(0.0.255) `&]_[*@3 m], Callback_[*@3 c])&] +har]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 imag +e], [@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_Callback[@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 callback])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(const Upp`:`:String`&`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_ +[*@3 t], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 m], +[@(0.0.255) const]_[_^Upp`:`:Callback^ Callback][@(0.0.255) `&]_[*@3 c])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Callback`&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), + [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 m], [@(0.0.255) const]_Callback[@(0.0.255) `& +]_[*@3 c])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) bool]_[*@3 enable], [@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 imag +e], [@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(bool`,Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) bool]_[*@3 enable], [_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `& +]_(`*[*@3 key])(), [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_Function<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text], +[@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 image], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(const Upp`:`:String`&`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([@(0.0.255) const]_[_^Upp`:`:String^ String][@(0.0.255) `&]_ +[*@3 t], [@(0.0.255) const]_[_^Upp`:`:Image^ Upp`::Image][@(0.0.255) `&]_[*@3 m], +[@(0.0.255) const]_[_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>`&_[*@3 fn])&] +[s5;:Upp`:`:Bar`:`:AddMenu`(Upp`:`:KeyInfo`&`(`*`)`(`)`,const Upp`:`:Image`&`,const Upp`:`:Function``&`):%- [_^Upp`:`:Bar`:`:Item^ I +tem][@(0.0.255) `&]_[* AddMenu]([_^Upp`:`:KeyInfo^ KeyInfo][@(0.0.255) `&]_(`*[*@3 key])(), + [@(0.0.255) const]_Upp`::Image[@(0.0.255) `&]_[*@3 m], [@(0.0.255) const]_Function<[@(0.0.255) v +oid]_()>`&_[*@3 fn])&] [s2; These methods are equivalents to methods without [* Menu][*/ ]in the name, but perform respective operations only if Bar is menu.&] [s3; &]