Allow the octopus to set a channel at floater level to disambiguate between simultaneously open floaters
This commit is contained in:
@@ -64,6 +64,8 @@ class HippoFloaterXmlImpl : public LLFloater
|
|||||||
const std::string &cmds, std::string::size_type &offset,
|
const std::string &cmds, std::string::size_type &offset,
|
||||||
std::string &response);
|
std::string &response);
|
||||||
|
|
||||||
|
U32 mChannel;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string mName;
|
std::string mName;
|
||||||
bool mIsNotifyOnClose;
|
bool mIsNotifyOnClose;
|
||||||
@@ -162,7 +164,7 @@ void XmlData::release(const std::string &floaterName)
|
|||||||
// create HippoFloaterXmlImpl
|
// create HippoFloaterXmlImpl
|
||||||
|
|
||||||
HippoFloaterXmlImpl::HippoFloaterXmlImpl(const std::string &name, const std::string &xml) :
|
HippoFloaterXmlImpl::HippoFloaterXmlImpl(const std::string &name, const std::string &xml) :
|
||||||
mName(name), mIsNotifyOnClose(false)
|
mName(name), mIsNotifyOnClose(false), mChannel(CHANNEL)
|
||||||
{
|
{
|
||||||
gInstances[mName] = this;
|
gInstances[mName] = this;
|
||||||
LLUICtrlFactory::getInstance()->buildFloaterFromBuffer(this, xml);
|
LLUICtrlFactory::getInstance()->buildFloaterFromBuffer(this, xml);
|
||||||
@@ -267,18 +269,22 @@ void HippoFloaterXml::execute(const std::string &cmds)
|
|||||||
// ********************************************************************
|
// ********************************************************************
|
||||||
// generic notification callbacks
|
// generic notification callbacks
|
||||||
|
|
||||||
static void notifyCallback(void *c)
|
static void notifyCallback(void *c, void *f)
|
||||||
{
|
{
|
||||||
|
HippoFloaterXmlImpl* floaterp = (HippoFloaterXmlImpl*)f;
|
||||||
|
|
||||||
LLUICtrl *ctrl = (LLUICtrl *)c;
|
LLUICtrl *ctrl = (LLUICtrl *)c;
|
||||||
std::string msg = "NOTIFY:";
|
std::string msg = "NOTIFY:";
|
||||||
msg += ctrl->getName();
|
msg += ctrl->getName();
|
||||||
msg += ':';
|
msg += ':';
|
||||||
msg += ctrl->getValue().asString();
|
msg += ctrl->getValue().asString();
|
||||||
send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, CHANNEL);
|
send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, floaterp->mChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void callbackAvatarPick(void *c, const uuid_vec_t& ids, const std::vector<LLAvatarName>& names)
|
void callbackAvatarPick(void *c, void *f, const uuid_vec_t& ids, const std::vector<LLAvatarName>& names)
|
||||||
{
|
{
|
||||||
|
HippoFloaterXmlImpl* floaterp = (HippoFloaterXmlImpl*)f;
|
||||||
|
|
||||||
LLUICtrl *ctrl = (LLUICtrl *)c;
|
LLUICtrl *ctrl = (LLUICtrl *)c;
|
||||||
|
|
||||||
LLUUID id = ids[0];
|
LLUUID id = ids[0];
|
||||||
@@ -289,7 +295,7 @@ void callbackAvatarPick(void *c, const uuid_vec_t& ids, const std::vector<LLAvat
|
|||||||
msg += id.asString();
|
msg += id.asString();
|
||||||
msg += ':';
|
msg += ':';
|
||||||
msg += names[0].getCompleteName();
|
msg += names[0].getCompleteName();
|
||||||
send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, CHANNEL);
|
send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, floaterp->mChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pickerCallback(void *c, void *f)
|
static void pickerCallback(void *c, void *f)
|
||||||
@@ -297,7 +303,7 @@ static void pickerCallback(void *c, void *f)
|
|||||||
LLUICtrl *ctrl = (LLUICtrl *)c;
|
LLUICtrl *ctrl = (LLUICtrl *)c;
|
||||||
HippoFloaterXmlImpl* floaterp = (HippoFloaterXmlImpl*)f;
|
HippoFloaterXmlImpl* floaterp = (HippoFloaterXmlImpl*)f;
|
||||||
|
|
||||||
floaterp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&callbackAvatarPick, ctrl, _1, _2), FALSE, TRUE));
|
floaterp->addDependentFloater(LLFloaterAvatarPicker::show(boost::bind(&callbackAvatarPick, ctrl, floaterp, _1, _2), FALSE, TRUE));
|
||||||
//send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, CHANNEL);
|
//send_chat_from_viewer(msg, CHAT_TYPE_WHISPER, CHANNEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -305,7 +311,7 @@ void HippoFloaterXmlImpl::onClose(bool quitting)
|
|||||||
{
|
{
|
||||||
if (mIsNotifyOnClose)
|
if (mIsNotifyOnClose)
|
||||||
send_chat_from_viewer("NOTIFY:" + mName + ":closed",
|
send_chat_from_viewer("NOTIFY:" + mName + ":closed",
|
||||||
CHAT_TYPE_WHISPER, CHANNEL);
|
CHAT_TYPE_WHISPER, mChannel);
|
||||||
LLFloater::onClose(quitting);
|
LLFloater::onClose(quitting);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -342,17 +348,21 @@ bool HippoFloaterXmlImpl::execute(LLFloater *floater, LLUICtrl *ctrl,
|
|||||||
return false;
|
return false;
|
||||||
} else if (key == "setValue") {
|
} else if (key == "setValue") {
|
||||||
ctrl->setValue(value);
|
ctrl->setValue(value);
|
||||||
|
} else if (key == "channel") {
|
||||||
|
if (HippoFloaterXmlImpl *floater = dynamic_cast<HippoFloaterXmlImpl*>(ctrl)) {
|
||||||
|
floater->mChannel = atoi(value.c_str());
|
||||||
|
}
|
||||||
} else if (key == "setLabel") {
|
} else if (key == "setLabel") {
|
||||||
/*ctrl->setLabel(value);*/
|
/*ctrl->setLabel(value);*/
|
||||||
} else if (key == "setVisible") {
|
} else if (key == "setVisible") {
|
||||||
ctrl->setVisible(value != "0");
|
ctrl->setVisible(value != "0");
|
||||||
} else if (key == "notify") {
|
} else if (key == "notify") {
|
||||||
bool set = (value != "0");
|
bool set = (value != "0");
|
||||||
if (HippoFloaterXmlImpl *floater = dynamic_cast<HippoFloaterXmlImpl*>(ctrl)) {
|
if (HippoFloaterXmlImpl *floaterp = dynamic_cast<HippoFloaterXmlImpl*>(ctrl)) {
|
||||||
floater->mIsNotifyOnClose = set;
|
floaterp->mIsNotifyOnClose = set;
|
||||||
} else {
|
} else {
|
||||||
if (set)
|
if (set)
|
||||||
ctrl->setCommitCallback(boost::bind(¬ifyCallback, _1), ctrl);
|
ctrl->setCommitCallback(boost::bind(¬ifyCallback, _1, floater), ctrl);
|
||||||
else
|
else
|
||||||
ctrl->setCommitCallback(0);
|
ctrl->setCommitCallback(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user