phoenix-firestorm/indra/llui/llviewinject.h

57 lines
1.8 KiB
C++

/**
* @file llviewinject.h
* @author Nat Goodspeed
* @date 2011-08-16
* @brief Supplemental LLView functionality used for simulating UI events.
*
* $LicenseInfo:firstyear=2011&license=viewerlgpl$
* Copyright (c) 2011, Linden Research, Inc.
* $/LicenseInfo$
*/
#if ! defined(LL_LLVIEWINJECT_H)
#define LL_LLVIEWINJECT_H
#include "llview.h"
#include <map>
namespace llview
{
/**
* TargetEvent is a callable with state, specifically intended for use as
* an LLView::TemporaryDrilldownFunc. Instantiate it with the desired
* target LLView*; pass it to a TemporaryDrilldownFunc instance;
* TargetEvent::operator() will then attempt to direct subsequent mouse
* events to the desired target LLView*. (This is an "attempt" because
* LLView will still balk unless the target LLView and every parent are
* visible and enabled.)
*/
class TargetEvent
{
public:
/**
* Construct TargetEvent with the desired target LLView*. (See
* LLUI::getInstance()->resolvePath() to obtain an LLView* given a string pathname.)
* This sets up for operator().
*/
TargetEvent(LLView* view);
/**
* This signature must match LLView::DrilldownFunc. When you install
* this TargetEvent instance using LLView::TemporaryDrilldownFunc,
* LLView will call this method to decide whether to propagate an
* incoming mouse event to the passed child LLView*.
*/
bool operator()(const LLView*, S32 x, S32 y) const;
private:
// For a given parent LLView, identify which child to select.
typedef std::map<LLView*, LLView*> ChildMap;
ChildMap mChildMap;
};
} // llview namespace
#endif /* ! defined(LL_LLVIEWINJECT_H) */