Some Callback parameters now are Function<void ()>

git-svn-id: svn://ultimatepp.org/upp/trunk@9945 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2016-06-15 18:23:44 +00:00
parent d720a38c65
commit fa2f875bfc
5 changed files with 55 additions and 48 deletions

View file

@ -99,24 +99,24 @@ enum {
DELAY_MINIMAL = 0 DELAY_MINIMAL = 0
}; };
void SetTimeCallback(int delay_ms, Callback cb, void *id = NULL); // delay_ms < 0 -> periodic void SetTimeCallback(int delay_ms, Function<void ()> cb, void *id = NULL); // delay_ms < 0 -> periodic
void KillTimeCallback(void *id); void KillTimeCallback(void *id);
bool ExistsTimeCallback(void *id); bool ExistsTimeCallback(void *id);
dword GetTimeClick(); dword GetTimeClick();
inline inline
void PostCallback(Callback cb, void *id = NULL) { SetTimeCallback(1, cb, id); } void PostCallback(Function<void ()> cb, void *id = NULL) { SetTimeCallback(1, cb, id); }
class TimeCallback class TimeCallback
{ {
public: public:
~TimeCallback() { Kill(); (void)dummy; } ~TimeCallback() { Kill(); (void)dummy; }
void Set(int delay, Callback cb) { UPP::SetTimeCallback(delay, cb, this); } void Set(int delay, Function<void ()> cb) { UPP::SetTimeCallback(delay, cb, this); }
void Post(Callback cb) { UPP::PostCallback(cb, this); } void Post(Function<void ()> cb) { UPP::PostCallback(cb, this); }
void Kill() { UPP::KillTimeCallback(this); } void Kill() { UPP::KillTimeCallback(this); }
void KillSet(int delay, Callback cb) { Kill(); Set(delay, cb); } void KillSet(int delay, Function<void ()> cb) { Kill(); Set(delay, cb); }
void KillPost(Callback cb) { Kill(); Post(cb); } void KillPost(Function<void ()> cb) { Kill(); Post(cb); }
private: private:
byte dummy; byte dummy;
@ -780,7 +780,7 @@ public:
static void InstallStateHook(StateHook hook); static void InstallStateHook(StateHook hook);
static void DeinstallStateHook(StateHook hook); static void DeinstallStateHook(StateHook hook);
static int RegisterSystemHotKey(dword key, Callback cb); static int RegisterSystemHotKey(dword key, Function<void ()> cb);
static void UnregisterSystemHotKey(int id); static void UnregisterSystemHotKey(int id);
virtual bool Accept(); virtual bool Accept();
@ -1140,15 +1140,14 @@ public:
Callback operator<<=(Callback action) { WhenAction = action; return action; } Callback operator<<=(Callback action) { WhenAction = action; return action; }
Callback& operator<<(Callback action) { return WhenAction << action; } Callback& operator<<(Function<void ()> action) { return WhenAction << action; }
Callback& operator<<(Upp::Function<void ()> action) { return WhenAction << action; }
void SetTimeCallback(int delay_ms, Callback cb, int id = 0); void SetTimeCallback(int delay_ms, Function<void ()> cb, int id = 0);
void KillTimeCallback(int id = 0); void KillTimeCallback(int id = 0);
void KillSetTimeCallback(int delay_ms, Callback cb, int id); void KillSetTimeCallback(int delay_ms, Function<void ()> cb, int id);
bool ExistsTimeCallback(int id = 0) const; bool ExistsTimeCallback(int id = 0) const;
void PostCallback(Callback cb, int id = 0); void PostCallback(Function<void ()> cb, int id = 0);
void KillPostCallback(Callback cb, int id); void KillPostCallback(Function<void ()> cb, int id);
enum { TIMEID_COUNT = 1 }; enum { TIMEID_COUNT = 1 };

View file

@ -39,11 +39,11 @@ static void sTimeCallback(dword time, int delay, Callback cb, void *id) {
LLOG("sTimeCalllback " << ne->time << " " << ne->delay << " " << ne->id); LLOG("sTimeCalllback " << ne->time << " " << ne->delay << " " << ne->id);
} }
void SetTimeCallback(int delay_ms, Callback cb, void *id) { void SetTimeCallback(int delay_ms, Function<void ()> cb, void *id) {
Mutex::Lock __(sTimerLock); Mutex::Lock __(sTimerLock);
ASSERT(abs(delay_ms) < 0x40000000); ASSERT(abs(delay_ms) < 0x40000000);
LLOG("SetTimeCallback " << delay_ms << " " << id); LLOG("SetTimeCallback " << delay_ms << " " << id);
sTimeCallback(GetTickCount() + abs(delay_ms), delay_ms, cb, id); sTimeCallback(GetTickCount() + abs(delay_ms), delay_ms, Callback() << cb, id);
} }
void KillTimeCallbacks(void *id, void *idlim) { void KillTimeCallbacks(void *id, void *idlim) {
@ -145,7 +145,7 @@ void Ctrl::InitTimer()
tevents(); tevents();
} }
void Ctrl::SetTimeCallback(int delay_ms, Callback cb, int id) { void Ctrl::SetTimeCallback(int delay_ms, Function<void ()> cb, int id) {
ASSERT(id >= 0 && (size_t)id < (int)sizeof(Ctrl)); ASSERT(id >= 0 && (size_t)id < (int)sizeof(Ctrl));
UPP::SetTimeCallback(delay_ms, cb, (byte *)this + id); UPP::SetTimeCallback(delay_ms, cb, (byte *)this + id);
} }
@ -155,18 +155,18 @@ void Ctrl::KillTimeCallback(int id) {
UPP::KillTimeCallback((byte *)this + id); UPP::KillTimeCallback((byte *)this + id);
} }
void Ctrl::KillSetTimeCallback(int delay_ms, Callback cb, int id) void Ctrl::KillSetTimeCallback(int delay_ms, Function<void ()> cb, int id)
{ {
KillTimeCallback(id); KillTimeCallback(id);
SetTimeCallback(delay_ms, cb, id); SetTimeCallback(delay_ms, cb, id);
} }
void Ctrl::PostCallback(Callback cb, int id) void Ctrl::PostCallback(Function<void ()> cb, int id)
{ {
SetTimeCallback(0, cb, id); SetTimeCallback(0, cb, id);
} }
void Ctrl::KillPostCallback(Callback cb, int id) void Ctrl::KillPostCallback(Function<void ()> cb, int id)
{ {
KillSetTimeCallback(0, cb, id); KillSetTimeCallback(0, cb, id);
} }

View file

@ -716,7 +716,7 @@ bool PassWindowsKey(int wParam)
Vector<Callback> Ctrl::hotkey; Vector<Callback> Ctrl::hotkey;
int Ctrl::RegisterSystemHotKey(dword key, Callback cb) int Ctrl::RegisterSystemHotKey(dword key, Function<void ()> cb)
{ {
ASSERT(key >= K_DELTA); ASSERT(key >= K_DELTA);
int q = hotkey.GetCount(); int q = hotkey.GetCount();
@ -725,7 +725,7 @@ int Ctrl::RegisterSystemHotKey(dword key, Callback cb)
q = i; q = i;
break; break;
} }
hotkey.At(q) = cb; hotkey.At(q) = Callback() << cb;
dword mod = 0; dword mod = 0;
if(key & K_ALT) if(key & K_ALT)
mod |= MOD_ALT; mod |= MOD_ALT;

View file

@ -2224,33 +2224,18 @@ trl])&]
[s2;b17;a17; Same as SetData(v).&] [s2;b17;a17; Same as SetData(v).&]
[s7;i1120;a17; [%-*C@3 v]-|New Value of Ctrl.&] [s7;i1120;a17; [%-*C@3 v]-|New Value of Ctrl.&]
[s7;i1120;a17; [*/ Return value]-|Reference to v.&] [s7;i1120;a17; [*/ Return value]-|Reference to v.&]
[s3;%- &]
[s4;%- &]
[s5;:Ctrl`:`:operator`<`<`=`(Callback`):%- [_^`:`:Callback^ Callback]_[* operator<<`=]([_^`:`:Callback^ C
allback]_[*@3 action])&]
[s2;b17;a17; Same as WhenAction `= action;&]
[s7;i1120;a17; [%-*C@3 action]-|Callback that is invoked when user changes
value of Ctrl.&]
[s7;i1120;a17; [*/ Return value]-|The value of callback, so that it
can be assigned to several Ctrls in one statement.&]
[s3;%- &]
[s4;%- &]
[s5;:Ctrl`:`:operator`<`<`(Callback`):%- [_^`:`:Callback^ Callback][@(0.0.255) `&]_[* opera
tor<<]([_^`:`:Callback^ Callback]_[*@3 action])&]
[s5;:Upp`:`:Ctrl`:`:operator`<`<`(std`:`:function`<void`(`)`>`):%- [_^Upp`:`:Callback^ C
allback][@(0.0.255) `&]_[* operator<<]([_^std`:`:function^ std`::function]<[@(0.0.255) voi
d]_()>_[*@3 action])&]
[s2;b17;a17; Same as WhenAction << action, second variant suitable
for C`+`+11 lambdas.&]
[s7;i1120;a17; [%-*C@3 action]-|Callback that is to be added to callbacks
that are invoked when user changes value of Ctrl.&]
[s7;i1120;a17; [*/ Return value]-|Reference to WhenAction.&]
[s3;%- &]
[s3; &] [s3; &]
[s4;%- &] [s4;%- &]
[s5;:Ctrl`:`:SetTimeCallback`(int`,Callback`,int`):%- [@(0.0.255) void]_[* SetTimeCallbac [s5;:Upp`:`:Ctrl`:`:operator`<`<`(Upp`:`:Function`<void`(`)`>`):%- [_^Upp`:`:Callback^ C
k]([@(0.0.255) int]_[*@3 delay`_ms], [_^`:`:Callback^ Callback]_[*@3 cb], allback][@(0.0.255) `&]_[* operator<<]([_^Upp`:`:Function^ Upp`::Function]<[@(0.0.255) voi
[@(0.0.255) int]_[*@3 id]_`=_[@3 0])&] d]_()>_[*@3 action])&]
[s2; Same as WhenAction << action, can be used both with lambdas
and Events (former Callbacks)..&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Ctrl`:`:SetTimeCallback`(int`,Upp`:`:Function`<void`(`)`>`,int`):%- [@(0.0.255) v
oid]_[* SetTimeCallback]([@(0.0.255) int]_[*@3 delay`_ms], [_^Upp`:`:Function^ Function]<
[@(0.0.255) void]_()>_[*@3 cb], [@(0.0.255) int]_[*@3 id]_`=_[@3 0])&]
[s2;b17;a17; Puts delayed callback to the timer queue. As an identifier [s2;b17;a17; Puts delayed callback to the timer queue. As an identifier
of callback, which is void `* in timer queue, [* this] `+ [* id] of callback, which is void `* in timer queue, [* this] `+ [* id]
is used. When Ctrl is destroyed, all callbacks with [* id] in range is used. When Ctrl is destroyed, all callbacks with [* id] in range
@ -2277,6 +2262,12 @@ nt]_[*@3 id]_`=_[@3 0])&]
[s7;i1120;a17; [%-*C@3 id]-|Id of callback.&] [s7;i1120;a17; [%-*C@3 id]-|Id of callback.&]
[s3;%- &] [s3;%- &]
[s4;%- &] [s4;%- &]
[s5;:Upp`:`:Ctrl`:`:KillSetTimeCallback`(int`,Upp`:`:Function`<void`(`)`>`,int`):%- [@(0.0.255) v
oid]_[* KillSetTimeCallback]([@(0.0.255) int]_[*@3 delay`_ms], [_^Upp`:`:Function^ Functi
on]<[@(0.0.255) void]_()>_[*@3 cb], [@(0.0.255) int]_[*@3 id])&]
[s2; Removes callback with [%-*@3 id] and sets it again.&]
[s3; &]
[s4;%- &]
[s5;:Ctrl`:`:ExistsTimeCallback`(int`)const:%- [@(0.0.255) bool]_[* ExistsTimeCallback]([@(0.0.255) i [s5;:Ctrl`:`:ExistsTimeCallback`(int`)const:%- [@(0.0.255) bool]_[* ExistsTimeCallback]([@(0.0.255) i
nt]_[*@3 id]_`=_[@3 0])_[@(0.0.255) const]&] nt]_[*@3 id]_`=_[@3 0])_[@(0.0.255) const]&]
[s2;b17;a17; Tests whether Ctrl has associated callback in timer [s2;b17;a17; Tests whether Ctrl has associated callback in timer
@ -2285,6 +2276,20 @@ queue.&]
[s7;i1120;a17; [*/ Return value]-|true when id is found in timer queue.&] [s7;i1120;a17; [*/ Return value]-|true when id is found in timer queue.&]
[s3;%- &] [s3;%- &]
[s4;%- &] [s4;%- &]
[s5;:Upp`:`:Ctrl`:`:PostCallback`(Upp`:`:Function`<void`(`)`>`,int`):%- [@(0.0.255) voi
d]_[* PostCallback]([_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>_[*@3 cb],
[@(0.0.255) int]_[*@3 id]_`=_[@3 0])&]
[s2; Posts callback to be executed immediately (but in the main loop
after all current GUI events).&]
[s3; &]
[s4;%- &]
[s5;:Upp`:`:Ctrl`:`:KillPostCallback`(Upp`:`:Function`<void`(`)`>`,int`):%- [@(0.0.255) v
oid]_[* KillPostCallback]([_^Upp`:`:Function^ Function]<[@(0.0.255) void]_()>_[*@3 cb],
[@(0.0.255) int]_[*@3 id])&]
[s2; Similar to PostCallback, but removes callback(s) with the same
id from the queue first.&]
[s3; &]
[s4;%- &]
[s5;:Ctrl`:`:GetActiveCtrl`(`):%- [@(0.0.255) static] [_^`:`:Ctrl^ Ctrl]_`*[* GetActiveCtrl [s5;:Ctrl`:`:GetActiveCtrl`(`):%- [@(0.0.255) static] [_^`:`:Ctrl^ Ctrl]_`*[* GetActiveCtrl
]()&] ]()&]
[s2;b17;a17; Returns pointer to active Ctrl. Active Ctrl is top`-level [s2;b17;a17; Returns pointer to active Ctrl. Active Ctrl is top`-level

View file

@ -307,6 +307,9 @@ mage]([@(0.0.255) const]_[_^Image^ UPP`::Image][@(0.0.255) `&]_[*@3 img])&]
[s4;%- &] [s4;%- &]
[s5;:Bar`:`:Item`:`:Text`(const char`*`):%- [@(0.0.255) virtual] [_^Bar`:`:Item^ Item][@(0.0.255) `& [s5;:Bar`:`:Item`:`:Text`(const char`*`):%- [@(0.0.255) virtual] [_^Bar`:`:Item^ Item][@(0.0.255) `&
]_[* Text]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text])&] ]_[* Text]([@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 text])&]
[s5;:Upp`:`:Bar`:`:Item`:`:Text`(const Upp`:`:String`&`):%- [@(0.0.255) virtual]
[_^Upp`:`:Bar`:`:Item^ Item][@(0.0.255) `&]_[* Text]([@(0.0.255) const]_[_^Upp`:`:String^ S
tring][@(0.0.255) `&]_[*@3 text])&]
[s2; Sets the [%-*@3 text] of item.&] [s2; Sets the [%-*@3 text] of item.&]
[s3; &] [s3; &]
[s4;%- &] [s4;%- &]