Automated merge with ssh://hg.lindenlab.com/viewer/viewer-2-0/
commit
aa75245a1a
|
|
@ -1,5 +1,6 @@
|
|||
# -*- cmake -*-
|
||||
include(LLTestCommand)
|
||||
include(GoogleMock)
|
||||
|
||||
MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
|
||||
# Given a project name and a list of sourcefiles (with optional properties on each),
|
||||
|
|
@ -190,6 +191,7 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
|
|||
|
||||
SET(libraries
|
||||
${library_dependencies}
|
||||
${GOOGLEMOCK_LIBRARIES}
|
||||
${PTHREAD_LIBRARY}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@
|
|||
#ifndef LL_LLDATE_H
|
||||
#define LL_LLDATE_H
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include <iosfwd>
|
||||
#include <string>
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
#include "../test/lltut.h"
|
||||
|
||||
#include "../llstring.h"
|
||||
|
|
|
|||
|
|
@ -166,7 +166,21 @@ namespace tut
|
|||
// the main domain name and not do the exact compare
|
||||
|
||||
std::string hostname = host.getHostName();
|
||||
ensure("getHostName failed", hostname.find(hostStr) != std::string::npos);
|
||||
/*==========================================================================*|
|
||||
// nat 2009-10-20: not sure this ensure() is such a good idea, at
|
||||
// least with "google.com". The logic below is failing for me with:
|
||||
// set 'google.com'; reported 'yx-in-f100.1e100.net'
|
||||
// Disabling test until we can replace it with something more robust.
|
||||
try
|
||||
{
|
||||
ensure("getHostName failed", hostname.find(hostStr) != std::string::npos);
|
||||
}
|
||||
catch (const std::exception&)
|
||||
{
|
||||
std::cerr << "set '" << hostStr << "'; reported '" << hostname << "'" << std::endl;
|
||||
throw;
|
||||
}
|
||||
|*==========================================================================*/
|
||||
}
|
||||
|
||||
// setHostByName for dotted IP
|
||||
|
|
|
|||
|
|
@ -2619,3 +2619,13 @@ bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, LLXMLNodePtr o
|
|||
return true; // *TODO: Error checking
|
||||
}
|
||||
|
||||
bool LLFloater::isShown() const
|
||||
{
|
||||
return ! isMinimized() && isInVisibleChain();
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool LLFloater::isShown(const LLFloater* floater)
|
||||
{
|
||||
return floater && floater->isShown();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -185,7 +185,13 @@ public:
|
|||
void addDependentFloater(LLHandle<LLFloater> dependent_handle, BOOL reposition = TRUE);
|
||||
LLFloater* getDependee() { return (LLFloater*)mDependeeHandle.get(); }
|
||||
void removeDependentFloater(LLFloater* dependent);
|
||||
BOOL isMinimized() { return mMinimized; }
|
||||
BOOL isMinimized() const { return mMinimized; }
|
||||
/// isShown() differs from getVisible() in that isShown() also considers
|
||||
/// isMinimized(). isShown() is true only if visible and not minimized.
|
||||
bool isShown() const;
|
||||
/// The static isShown() can accept a NULL pointer (which of course
|
||||
/// returns false). When non-NULL, it calls the non-static isShown().
|
||||
static bool isShown(const LLFloater* floater);
|
||||
BOOL isFrontmost();
|
||||
BOOL isDependent() { return !mDependeeHandle.isDead(); }
|
||||
void setCanMinimize(BOOL can_minimize);
|
||||
|
|
|
|||
|
|
@ -252,7 +252,7 @@ bool LLFloaterReg::hideInstance(const std::string& name, const LLSD& key)
|
|||
bool LLFloaterReg::toggleInstance(const std::string& name, const LLSD& key)
|
||||
{
|
||||
LLFloater* instance = findInstance(name, key);
|
||||
if (instance && !instance->isMinimized() && instance->isInVisibleChain())
|
||||
if (LLFloater::isShown(instance))
|
||||
{
|
||||
// When toggling *visibility*, close the host instead of the floater when hosted
|
||||
if (instance->getHost())
|
||||
|
|
@ -272,14 +272,7 @@ bool LLFloaterReg::toggleInstance(const std::string& name, const LLSD& key)
|
|||
bool LLFloaterReg::instanceVisible(const std::string& name, const LLSD& key)
|
||||
{
|
||||
LLFloater* instance = findInstance(name, key);
|
||||
if (instance && !instance->isMinimized() && instance->isInVisibleChain())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return LLFloater::isShown(instance);
|
||||
}
|
||||
|
||||
//static
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@
|
|||
// external library headers
|
||||
// other Linden headers
|
||||
#include "llfloaterreg.h"
|
||||
#include "llfloater.h"
|
||||
#include "llbutton.h"
|
||||
|
||||
LLFloaterRegListener::LLFloaterRegListener(const std::string& pumpName):
|
||||
LLDispatchListener(pumpName, "op")
|
||||
|
|
@ -28,6 +30,10 @@ LLFloaterRegListener::LLFloaterRegListener(const std::string& pumpName):
|
|||
add("showInstance", &LLFloaterRegListener::showInstance, requiredName);
|
||||
add("hideInstance", &LLFloaterRegListener::hideInstance, requiredName);
|
||||
add("toggleInstance", &LLFloaterRegListener::toggleInstance, requiredName);
|
||||
LLSD requiredNameButton;
|
||||
requiredNameButton["name"] = LLSD();
|
||||
requiredNameButton["button"] = LLSD();
|
||||
add("clickButton", &LLFloaterRegListener::clickButton, requiredNameButton);
|
||||
}
|
||||
|
||||
void LLFloaterRegListener::getBuildMap(const LLSD& event) const
|
||||
|
|
@ -64,3 +70,45 @@ void LLFloaterRegListener::toggleInstance(const LLSD& event) const
|
|||
{
|
||||
LLFloaterReg::toggleInstance(event["name"], event["key"]);
|
||||
}
|
||||
|
||||
void LLFloaterRegListener::clickButton(const LLSD& event) const
|
||||
{
|
||||
// If the caller requests a reply, build the reply.
|
||||
LLReqID reqID(event);
|
||||
LLSD reply(reqID.makeResponse());
|
||||
|
||||
LLFloater* floater = LLFloaterReg::findInstance(event["name"], event["key"]);
|
||||
if (! LLFloater::isShown(floater))
|
||||
{
|
||||
reply["type"] = "LLFloater";
|
||||
reply["name"] = event["name"];
|
||||
reply["key"] = event["key"];
|
||||
reply["error"] = floater? "!isShown()" : "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Here 'floater' points to an LLFloater instance with the specified
|
||||
// name and key which isShown().
|
||||
LLButton* button = floater->findChild<LLButton>(event["button"]);
|
||||
if (! LLButton::isAvailable(button))
|
||||
{
|
||||
reply["type"] = "LLButton";
|
||||
reply["name"] = event["button"];
|
||||
reply["error"] = button? "!isAvailable()" : "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
// Here 'button' points to an isAvailable() LLButton child of
|
||||
// 'floater' with the specified button name. Pretend to click it.
|
||||
button->onCommit();
|
||||
// Leave reply["error"] isUndefined(): no error, i.e. success.
|
||||
}
|
||||
}
|
||||
|
||||
// Send a reply only if caller asked for a reply.
|
||||
LLSD replyPump(event["reply"]);
|
||||
if (replyPump.isString()) // isUndefined() if absent
|
||||
{
|
||||
LLEventPumps::instance().obtain(replyPump).post(reply);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ private:
|
|||
void showInstance(const LLSD& event) const;
|
||||
void hideInstance(const LLSD& event) const;
|
||||
void toggleInstance(const LLSD& event) const;
|
||||
void clickButton(const LLSD& event) const;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_LLFLOATERREGLISTENER_H) */
|
||||
|
|
|
|||
|
|
@ -437,6 +437,18 @@ void LLView::setEnabled(BOOL enabled)
|
|||
mEnabled = enabled;
|
||||
}
|
||||
|
||||
//virtual
|
||||
bool LLView::isAvailable() const
|
||||
{
|
||||
return isInEnabledChain() && isInVisibleChain();
|
||||
}
|
||||
|
||||
//static
|
||||
bool LLView::isAvailable(const LLView* view)
|
||||
{
|
||||
return view && view->isAvailable();
|
||||
}
|
||||
|
||||
//virtual
|
||||
BOOL LLView::setLabelArg( const std::string& key, const LLStringExplicit& text )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -304,6 +304,11 @@ public:
|
|||
BOOL getVisible() const { return mVisible; }
|
||||
virtual void setEnabled(BOOL enabled);
|
||||
BOOL getEnabled() const { return mEnabled; }
|
||||
/// 'available' in this context means 'visible and enabled': in other
|
||||
/// words, can a user actually interact with this?
|
||||
virtual bool isAvailable() const;
|
||||
/// The static isAvailable() tests an LLView* that could be NULL.
|
||||
static bool isAvailable(const LLView* view);
|
||||
U8 getSoundFlags() const { return mSoundFlags; }
|
||||
|
||||
virtual BOOL setLabelArg( const std::string& key, const LLStringExplicit& text );
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@
|
|||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
||||
static LLAppViewerListener sAppViewerListener("LLAppViewer", NULL);
|
||||
static LLAppViewerListener sAppViewerListener("LLAppViewer", LLAppViewer::instance);
|
||||
|
||||
////// Windows-specific includes to the bottom - nasty defines in these pollute the preprocessor
|
||||
//
|
||||
|
|
|
|||
|
|
@ -19,19 +19,22 @@
|
|||
// other Linden headers
|
||||
#include "llappviewer.h"
|
||||
|
||||
LLAppViewerListener::LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer):
|
||||
LLAppViewerListener::LLAppViewerListener(const std::string& pumpname,
|
||||
const LLAppViewerGetter& getter):
|
||||
LLDispatchListener(pumpname, "op"),
|
||||
mAppViewer(llappviewer)
|
||||
mAppViewerGetter(getter)
|
||||
{
|
||||
// add() every method we want to be able to invoke via this event API.
|
||||
add("requestQuit", &LLAppViewerListener::requestQuit);
|
||||
add("forceQuit", &LLAppViewerListener::forceQuit);
|
||||
}
|
||||
|
||||
void LLAppViewerListener::requestQuit(const LLSD& event)
|
||||
{
|
||||
if(mAppViewer == NULL)
|
||||
{
|
||||
mAppViewer = LLAppViewer::instance();
|
||||
}
|
||||
mAppViewer->requestQuit();
|
||||
mAppViewerGetter()->requestQuit();
|
||||
}
|
||||
|
||||
void LLAppViewerListener::forceQuit(const LLSD& event)
|
||||
{
|
||||
mAppViewerGetter()->forceQuit();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@
|
|||
#define LL_LLAPPVIEWERLISTENER_H
|
||||
|
||||
#include "lleventdispatcher.h"
|
||||
#include <boost/function.hpp>
|
||||
|
||||
class LLAppViewer;
|
||||
class LLSD;
|
||||
|
|
@ -21,14 +22,16 @@ class LLSD;
|
|||
class LLAppViewerListener: public LLDispatchListener
|
||||
{
|
||||
public:
|
||||
typedef boost::function<LLAppViewer*(void)> LLAppViewerGetter;
|
||||
/// Specify the pump name on which to listen, and bind the LLAppViewer
|
||||
/// instance to use (e.g. LLAppViewer::instance()).
|
||||
LLAppViewerListener(const std::string& pumpname, LLAppViewer* llappviewer);
|
||||
LLAppViewerListener(const std::string& pumpname, const LLAppViewerGetter& getter);
|
||||
|
||||
private:
|
||||
void requestQuit(const LLSD& event);
|
||||
void forceQuit(const LLSD& event);
|
||||
|
||||
LLAppViewer* mAppViewer;
|
||||
LLAppViewerGetter mAppViewerGetter;
|
||||
};
|
||||
|
||||
#endif /* ! defined(LL_LLAPPVIEWERLISTENER_H) */
|
||||
|
|
|
|||
Loading…
Reference in New Issue