LLViewerRegion WIP: Added all headers that are dragged in.
Most in particular llevents.h, which comes along with the demand that the old events in llevent.h are put in a namespace LLOldEvents. Made all changes necessary to compile the rest of the code again (without changing the actual code: it's still using the old events). This patch also removes LLStopWhenHandled and LLStandardSignal from indra/llui/llnotifications.h because those are moved to llevents.h. That seems to be the only change to indra/llui/llnotifications.h that isn't floater related, so I left the rest of that file alone.
This commit is contained in:
166
indra/llcommon/lleventfilter.cpp
Normal file
166
indra/llcommon/lleventfilter.cpp
Normal file
@@ -0,0 +1,166 @@
|
||||
/**
|
||||
* @file lleventfilter.cpp
|
||||
* @author Nat Goodspeed
|
||||
* @date 2009-03-05
|
||||
* @brief Implementation for lleventfilter.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2009&license=viewerlgpl$
|
||||
* Second Life Viewer Source Code
|
||||
* Copyright (C) 2010, Linden Research, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation;
|
||||
* version 2.1 of the License only.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
// Precompiled header
|
||||
#include "linden_common.h"
|
||||
// associated header
|
||||
#include "lleventfilter.h"
|
||||
// STL headers
|
||||
// std headers
|
||||
// external library headers
|
||||
#include <boost/bind.hpp>
|
||||
// other Linden headers
|
||||
#include "llerror.h" // LL_ERRS
|
||||
#include "llsdutil.h" // llsd_matches()
|
||||
|
||||
LLEventFilter::LLEventFilter(LLEventPump& source, const std::string& name, bool tweak):
|
||||
LLEventStream(name, tweak)
|
||||
{
|
||||
source.listen(getName(), boost::bind(&LLEventFilter::post, this, _1));
|
||||
}
|
||||
|
||||
LLEventMatching::LLEventMatching(const LLSD& pattern):
|
||||
LLEventFilter("matching"),
|
||||
mPattern(pattern)
|
||||
{
|
||||
}
|
||||
|
||||
LLEventMatching::LLEventMatching(LLEventPump& source, const LLSD& pattern):
|
||||
LLEventFilter(source, "matching"),
|
||||
mPattern(pattern)
|
||||
{
|
||||
}
|
||||
|
||||
bool LLEventMatching::post(const LLSD& event)
|
||||
{
|
||||
if (! llsd_matches(mPattern, event).empty())
|
||||
return false;
|
||||
|
||||
return LLEventStream::post(event);
|
||||
}
|
||||
|
||||
LLEventTimeoutBase::LLEventTimeoutBase():
|
||||
LLEventFilter("timeout")
|
||||
{
|
||||
}
|
||||
|
||||
LLEventTimeoutBase::LLEventTimeoutBase(LLEventPump& source):
|
||||
LLEventFilter(source, "timeout")
|
||||
{
|
||||
}
|
||||
|
||||
void LLEventTimeoutBase::actionAfter(F32 seconds, const Action& action)
|
||||
{
|
||||
setCountdown(seconds);
|
||||
mAction = action;
|
||||
if (! mMainloop.connected())
|
||||
{
|
||||
LLEventPump& mainloop(LLEventPumps::instance().obtain("mainloop"));
|
||||
mMainloop = mainloop.listen(getName(), boost::bind(&LLEventTimeoutBase::tick, this, _1));
|
||||
}
|
||||
}
|
||||
|
||||
class ErrorAfter
|
||||
{
|
||||
public:
|
||||
ErrorAfter(const std::string& message): mMessage(message) {}
|
||||
|
||||
void operator()()
|
||||
{
|
||||
LL_ERRS("LLEventTimeout") << mMessage << LL_ENDL;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string mMessage;
|
||||
};
|
||||
|
||||
void LLEventTimeoutBase::errorAfter(F32 seconds, const std::string& message)
|
||||
{
|
||||
actionAfter(seconds, ErrorAfter(message));
|
||||
}
|
||||
|
||||
class EventAfter
|
||||
{
|
||||
public:
|
||||
EventAfter(LLEventPump& pump, const LLSD& event):
|
||||
mPump(pump),
|
||||
mEvent(event)
|
||||
{}
|
||||
|
||||
void operator()()
|
||||
{
|
||||
mPump.post(mEvent);
|
||||
}
|
||||
|
||||
private:
|
||||
LLEventPump& mPump;
|
||||
LLSD mEvent;
|
||||
};
|
||||
|
||||
void LLEventTimeoutBase::eventAfter(F32 seconds, const LLSD& event)
|
||||
{
|
||||
actionAfter(seconds, EventAfter(*this, event));
|
||||
}
|
||||
|
||||
bool LLEventTimeoutBase::post(const LLSD& event)
|
||||
{
|
||||
cancel();
|
||||
return LLEventStream::post(event);
|
||||
}
|
||||
|
||||
void LLEventTimeoutBase::cancel()
|
||||
{
|
||||
mMainloop.disconnect();
|
||||
}
|
||||
|
||||
bool LLEventTimeoutBase::tick(const LLSD&)
|
||||
{
|
||||
if (countdownElapsed())
|
||||
{
|
||||
cancel();
|
||||
mAction();
|
||||
}
|
||||
return false; // show event to other listeners
|
||||
}
|
||||
|
||||
LLEventTimeout::LLEventTimeout() {}
|
||||
|
||||
LLEventTimeout::LLEventTimeout(LLEventPump& source):
|
||||
LLEventTimeoutBase(source)
|
||||
{
|
||||
}
|
||||
|
||||
void LLEventTimeout::setCountdown(F32 seconds)
|
||||
{
|
||||
mTimer.setTimerExpirySec(seconds);
|
||||
}
|
||||
|
||||
bool LLEventTimeout::countdownElapsed() const
|
||||
{
|
||||
return mTimer.hasExpired();
|
||||
}
|
||||
Reference in New Issue
Block a user