CtrlLib: Bar now supports lambdas

git-svn-id: svn://ultimatepp.org/upp/trunk@9905 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2016-06-06 16:55:45 +00:00
parent caaf1092b8
commit 97e3703f4b
5 changed files with 295 additions and 102 deletions

View file

@ -25,6 +25,7 @@ class Function<Res(ArgTypes...)> : Moveable<Function<Res(ArgTypes...)>> {
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 <class F>
Function& operator<<(const F& fn) { if(!ptr) { Copy(fn); return *this; }
WrapperBase *b = ptr; ptr = new Wrapper2<F>(*this, pick(fn)); Free(b); return *this; }
WrapperBase *b = ptr; ptr = new Wrapper2<F>(*this, fn); Free(b); return *this; }
template <class F>
Function& operator<<(F&& fn) { if(!ptr) { Pick(pick(fn)); return *this; }

View file

@ -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<void ()>& fn)
{
return Add(enable, text, image, Callback() << fn);
}
Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn)
{
return Add(enable, key, image, Callback() << fn);
}
Bar::Item& Bar::Add(const char *text, const UPP::Image& image, const Function<void ()>& fn)
{
return Add(text, image, Callback() << fn);
}
Bar::Item& Bar::Add(const String& text, const UPP::Image& image, const Function<void ()>& fn)
{
return Add(text, image, Callback() << fn);
}
Bar::Item& Bar::Add(KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn)
{
return Add(key, image, Callback() << fn);
}
Bar::Item& Bar::Add(bool enable, const char *text, const Function<void ()>& fn)
{
return Add(enable, text, Callback() << fn);
}
Bar::Item& Bar::Add(bool enable, KeyInfo& (*key)(), const Function<void ()>& fn)
{
return Add(enable, key, Callback() << fn);
}
Bar::Item& Bar::Add(const char *text, const Function<void ()>& fn)
{
return Add(text, Callback() << fn);
}
Bar::Item& Bar::Add(KeyInfo& (*key)(), const Function<void ()>& 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<Bar&> proc)
Bar::Item& Bar::AddMenu(bool enable, const char *text, const UPP::Image& image, const Function<void ()>& fn)
{
return AddMenu(enable, text, image, Callback() << fn);
}
Bar::Item& Bar::AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn)
{
return AddMenu(enable, key, image, Callback() << fn);
}
Bar::Item& Bar::AddMenu(const char *text, const UPP::Image& image, const Function<void ()>& fn)
{
return AddMenu(text, image, Callback() << fn);
}
Bar::Item& Bar::AddMenu(const String& t, const UPP::Image& m, const Function<void ()>& fn)
{
return AddMenu(t, m, Callback() << fn);
}
Bar::Item& Bar::AddMenu(KeyInfo& (*key)(), const UPP::Image& m, const Function<void ()>& fn)
{
return AddMenu(key, m, Callback() << fn);
}
Bar::Item& Bar::Add(bool enable, const char *text, const Event<Bar&>& proc)
{ return AddSubMenu(proc).Text(text).Enable(enable); }
Bar::Item& Bar::Add(const char *text, Callback1<Bar&> proc)
Bar::Item& Bar::Add(const char *text, const Event<Bar&>& proc)
{ return Add(true, text, proc); }
Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, Callback1<Bar&> proc)
Bar::Item& Bar::Add(bool enable, const char *text, const UPP::Image& image, const Event<Bar&>& proc)
{ return Add(enable, text, proc).Image(image); }
Bar::Item& Bar::Add(const char *text, const UPP::Image& image, Callback1<Bar&> proc)
Bar::Item& Bar::Add(const char *text, const UPP::Image& image, const Event<Bar&>& proc)
{ return Add(text, proc).Image(image); }
Bar::Item& Bar::Sub(bool enable, const char *text, const Function<void (Bar&)>& submenu)
{
return Add(enable, text, Event<Bar&>() << submenu);
}
Bar::Item& Bar::Sub(const char *text, const Function<void (Bar&)>& submenu)
{
return Add(text, Event<Bar&>() << submenu);
}
Bar::Item& Bar::Sub(bool enable, const char *text, const UPP::Image& image, const Function<void (Bar&)>& submenu)
{
return Add(enable, text, image, Event<Bar&>() << submenu);
}
Bar::Item& Bar::Sub(const char *text, const UPP::Image& image, const Function<void (Bar&)>& submenu)
{
return Add(text, image, Event<Bar&>() << submenu);
}
void Bar::ToolSeparator() { if(IsToolBar()) Separator(); }
void Bar::ToolBreak() { if(IsToolBar()) Break(); }
void Bar::ToolGap(int size) { if(IsToolBar()) Gap(size); }

View file

@ -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<void ()>& fn);
Item& Add(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn);
Item& Add(const char *text, const UPP::Image& image, const Function<void ()>& fn);
Item& Add(const String& text, const UPP::Image& image, const Function<void ()>& fn);
Item& Add(KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn);
Item& Add(bool enable, const char *text, const Function<void ()>& fn);
Item& Add(bool enable, KeyInfo& (*key)(), const Function<void ()>& fn);
Item& Add(const char *text, const Function<void ()>& fn);
Item& Add(KeyInfo& (*key)(), const Function<void ()>& 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<Bar&> proc);
Item& Add(const char *text, Callback1<Bar&> proc);
Item& Add(bool enable, const char *text, const UPP::Image& image, Callback1<Bar&> proc);
Item& Add(const char *text, const UPP::Image& image, Callback1<Bar&> proc);
Item& AddMenu(bool enable, const char *text, const UPP::Image& image, const Function<void ()>& fn);
Item& AddMenu(bool enable, KeyInfo& (*key)(), const UPP::Image& image, const Function<void ()>& fn);
Item& AddMenu(const char *text, const UPP::Image& image, const Function<void ()>& fn);
Item& AddMenu(const String& t, const UPP::Image& m, const Function<void ()>& fn);
Item& AddMenu(KeyInfo& (*key)(), const UPP::Image& m, const Function<void ()>& fn);
Item& Add(bool enable, const char *text, const Event<Bar&>& proc);
Item& Add(const char *text, const Event<Bar&>& proc);
Item& Add(bool enable, const char *text, const UPP::Image& image, const Event<Bar&>& proc);
Item& Add(const char *text, const UPP::Image& image, const Event<Bar&>& proc);
Item& Sub(bool enable, const char *text, const Function<void (Bar&)>& submenu);
Item& Sub(const char *text, const Function<void (Bar&)>& submenu);
Item& Sub(bool enable, const char *text, const UPP::Image& image, const Function<void (Bar&)>& submenu);
Item& Sub(const char *text, const UPP::Image& image, const Function<void (Bar&)>& submenu);
void ToolSeparator();
void ToolBreak();

View file

@ -469,7 +469,7 @@ void MenuBar::KillDelayedClose()
KillTimeCallback(TIMEID_STOP);
}
void MenuBar::Set(Callback1<Bar&> menu)
void MenuBar::Set(const Callback1<Bar&> menu)
{
if(lock) return;
Clear();

View file

@ -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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`&`>`):%- [_^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`&`>`):%- [_^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`&`>`):%- [_^Bar`:`:Item^ I
[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Event`<Upp`:`:Bar`&`>`&`):%- [_^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`&`>`):%- [_^Bar`:`:Item^ I
ar]_`*[*@3 text], [@(0.0.255) const]_[_^Upp`:`:Event^ Event]<Bar[@(0.0.255) `&]>`&_[*@3 pro
c])&]
[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Event`<Upp`:`:Bar`&`>`&`):%- [_^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]<Bar[@(0.0.255) `&]>`&_[*@3 proc])&]
[s5;:Upp`:`:Bar`:`:Add`(bool`,const char`*`,const Upp`:`:Image`&`,const Upp`:`:Event`<Upp`:`:Bar`&`>`&`):%- [_^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]<Bar[@(0.0.255) `&]>`&_[*@3 proc])&]
[s5;:Upp`:`:Bar`:`:Add`(const char`*`,const Upp`:`:Image`&`,const Upp`:`:Event`<Upp`:`:Bar`&`>`&`):%- [_^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]<Bar[@(0.0.255) `&]>`&_[*@3 proc])&]
[s5;:Upp`:`:Bar`:`:Sub`(bool`,const char`*`,const Upp`:`:Function`<void`(Upp`:`:Bar`&`)`>`&`):%- [_^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`<void`(Upp`:`:Bar`&`)`>`&`):%- [_^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`<void`(Upp`:`:Bar`&`)`>`&`):%- [_^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`<void`(Upp`:`:Bar`&`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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`<void`(`)`>`&`):%- [_^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; &]