diff options
Diffstat (limited to 'indra/newview/llfloatertelehub.cpp')
-rw-r--r-- | indra/newview/llfloatertelehub.cpp | 348 |
1 files changed, 174 insertions, 174 deletions
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp index b845fd132d..20e281f454 100644 --- a/indra/newview/llfloatertelehub.cpp +++ b/indra/newview/llfloatertelehub.cpp @@ -1,4 +1,4 @@ -/** +/** * @file llfloatertelehub.cpp * @author James Cook * @brief LLFloaterTelehub class implementation @@ -6,21 +6,21 @@ * $LicenseInfo:firstyear=2005&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$ */ @@ -44,236 +44,236 @@ #include "lluictrlfactory.h" LLFloaterTelehub::LLFloaterTelehub(const LLSD& key) -: LLFloater(key), - mTelehubObjectID(), - mTelehubObjectName(), - mTelehubPos(), - mTelehubRot(), - mNumSpawn(0) +: LLFloater(key), + mTelehubObjectID(), + mTelehubObjectName(), + mTelehubPos(), + mTelehubRot(), + mNumSpawn(0) { } BOOL LLFloaterTelehub::postBuild() { - gMessageSystem->setHandlerFunc("TelehubInfo", processTelehubInfo); + gMessageSystem->setHandlerFunc("TelehubInfo", processTelehubInfo); - getChild<LLUICtrl>("connect_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickConnect, this)); - getChild<LLUICtrl>("disconnect_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickDisconnect, this)); - getChild<LLUICtrl>("add_spawn_point_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickAddSpawnPoint, this)); - getChild<LLUICtrl>("remove_spawn_point_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickRemoveSpawnPoint, this)); + getChild<LLUICtrl>("connect_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickConnect, this)); + getChild<LLUICtrl>("disconnect_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickDisconnect, this)); + getChild<LLUICtrl>("add_spawn_point_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickAddSpawnPoint, this)); + getChild<LLUICtrl>("remove_spawn_point_btn")->setCommitCallback(boost::bind(&LLFloaterTelehub::onClickRemoveSpawnPoint, this)); - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); - if (list) - { - // otherwise you can't walk with arrow keys while floater is up - list->setAllowKeyboardMovement(FALSE); - } + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); + if (list) + { + // otherwise you can't walk with arrow keys while floater is up + list->setAllowKeyboardMovement(FALSE); + } - return TRUE; + return TRUE; } void LLFloaterTelehub::onOpen(const LLSD& key) { - // Show tools floater by selecting translate (select) tool - LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); - LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompTranslate::getInstance() ); + // Show tools floater by selecting translate (select) tool + LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); + LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolCompTranslate::getInstance() ); + + sendTelehubInfoRequest(); - sendTelehubInfoRequest(); - - mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); + mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); } LLFloaterTelehub::~LLFloaterTelehub() { - // no longer interested in this message - gMessageSystem->setHandlerFunc("TelehubInfo", NULL); + // no longer interested in this message + gMessageSystem->setHandlerFunc("TelehubInfo", NULL); } void LLFloaterTelehub::draw() { - if (!isMinimized()) - { - refresh(); - } - LLFloater::draw(); + if (!isMinimized()) + { + refresh(); + } + LLFloater::draw(); } // Per-frame updates, because we don't have a selection manager observer. void LLFloaterTelehub::refresh() { - const BOOL children_ok = TRUE; - LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok); - - BOOL have_selection = (object != NULL); - BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); - getChildView("connect_btn")->setEnabled(have_selection && all_volume); - - BOOL have_telehub = mTelehubObjectID.notNull(); - getChildView("disconnect_btn")->setEnabled(have_telehub); - - BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB); - getChildView("add_spawn_point_btn")->setEnabled(have_selection && all_volume && space_avail); - - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); - if (list) - { - BOOL enable_remove = (list->getFirstSelected() != NULL); - getChildView("remove_spawn_point_btn")->setEnabled(enable_remove); - } + const BOOL children_ok = TRUE; + LLViewerObject* object = mObjectSelection->getFirstRootObject(children_ok); + + BOOL have_selection = (object != NULL); + BOOL all_volume = LLSelectMgr::getInstance()->selectionAllPCode( LL_PCODE_VOLUME ); + getChildView("connect_btn")->setEnabled(have_selection && all_volume); + + BOOL have_telehub = mTelehubObjectID.notNull(); + getChildView("disconnect_btn")->setEnabled(have_telehub); + + BOOL space_avail = (mNumSpawn < MAX_SPAWNPOINTS_PER_TELEHUB); + getChildView("add_spawn_point_btn")->setEnabled(have_selection && all_volume && space_avail); + + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); + if (list) + { + BOOL enable_remove = (list->getFirstSelected() != NULL); + getChildView("remove_spawn_point_btn")->setEnabled(enable_remove); + } } // static BOOL LLFloaterTelehub::renderBeacons() { - // only render if we've got a telehub - LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); - return floater && floater->mTelehubObjectID.notNull(); + // only render if we've got a telehub + LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); + return floater && floater->mTelehubObjectID.notNull(); } // static void LLFloaterTelehub::addBeacons() { - LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); - if (!floater) - return; - - // Find the telehub position, either our cached old position, or - // an updated one based on the actual object position. - LLVector3 hub_pos_region = floater->mTelehubPos; - LLQuaternion hub_rot = floater->mTelehubRot; - LLViewerObject* obj = gObjectList.findObject(floater->mTelehubObjectID); - if (obj) - { - hub_pos_region = obj->getPositionRegion(); - hub_rot = obj->getRotationRegion(); - } - // Draw nice thick 3-pixel lines. - gObjectList.addDebugBeacon(hub_pos_region, "", LLColor4::yellow, LLColor4::white, 4); - - LLScrollListCtrl* list = floater->getChild<LLScrollListCtrl>("spawn_points_list"); - if (list) - { - S32 spawn_index = list->getFirstSelectedIndex(); - if (spawn_index >= 0) - { - LLVector3 spawn_pos = hub_pos_region + (floater->mSpawnPointPos[spawn_index] * hub_rot); - gObjectList.addDebugBeacon(spawn_pos, "", LLColor4::orange, LLColor4::white, 4); - } - } + LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); + if (!floater) + return; + + // Find the telehub position, either our cached old position, or + // an updated one based on the actual object position. + LLVector3 hub_pos_region = floater->mTelehubPos; + LLQuaternion hub_rot = floater->mTelehubRot; + LLViewerObject* obj = gObjectList.findObject(floater->mTelehubObjectID); + if (obj) + { + hub_pos_region = obj->getPositionRegion(); + hub_rot = obj->getRotationRegion(); + } + // Draw nice thick 3-pixel lines. + gObjectList.addDebugBeacon(hub_pos_region, "", LLColor4::yellow, LLColor4::white, 4); + + LLScrollListCtrl* list = floater->getChild<LLScrollListCtrl>("spawn_points_list"); + if (list) + { + S32 spawn_index = list->getFirstSelectedIndex(); + if (spawn_index >= 0) + { + LLVector3 spawn_pos = hub_pos_region + (floater->mSpawnPointPos[spawn_index] * hub_rot); + gObjectList.addDebugBeacon(spawn_pos, "", LLColor4::orange, LLColor4::white, 4); + } + } } void LLFloaterTelehub::sendTelehubInfoRequest() { - LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "info ui"); + LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "info ui"); } void LLFloaterTelehub::onClickConnect() { - LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "connect"); + LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "connect"); } void LLFloaterTelehub::onClickDisconnect() { - LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "delete"); + LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "delete"); } void LLFloaterTelehub::onClickAddSpawnPoint() { - LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "spawnpoint add"); - LLSelectMgr::getInstance()->deselectAll(); + LLSelectMgr::getInstance()->sendGodlikeRequest("telehub", "spawnpoint add"); + LLSelectMgr::getInstance()->deselectAll(); } void LLFloaterTelehub::onClickRemoveSpawnPoint() { - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); - if (!list) - return; - - S32 spawn_index = list->getFirstSelectedIndex(); - if (spawn_index < 0) return; // nothing selected - - LLMessageSystem* msg = gMessageSystem; - - // Could be god or estate owner. If neither, server will reject message. - if (gAgent.isGodlike()) - { - msg->newMessage("GodlikeMessage"); - } - else - { - msg->newMessage("EstateOwnerMessage"); - } - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used - msg->nextBlock("MethodData"); - msg->addString("Method", "telehub"); - msg->addUUID("Invoice", LLUUID::null); - - msg->nextBlock("ParamList"); - msg->addString("Parameter", "spawnpoint remove"); - - std::string buffer; - buffer = llformat("%d", spawn_index); - msg->nextBlock("ParamList"); - msg->addString("Parameter", buffer); - - gAgent.sendReliableMessage(); + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); + if (!list) + return; + + S32 spawn_index = list->getFirstSelectedIndex(); + if (spawn_index < 0) return; // nothing selected + + LLMessageSystem* msg = gMessageSystem; + + // Could be god or estate owner. If neither, server will reject message. + if (gAgent.isGodlike()) + { + msg->newMessage("GodlikeMessage"); + } + else + { + msg->newMessage("EstateOwnerMessage"); + } + msg->nextBlock("AgentData"); + msg->addUUID("AgentID", gAgent.getID()); + msg->addUUID("SessionID", gAgent.getSessionID()); + msg->addUUIDFast(_PREHASH_TransactionID, LLUUID::null); //not used + msg->nextBlock("MethodData"); + msg->addString("Method", "telehub"); + msg->addUUID("Invoice", LLUUID::null); + + msg->nextBlock("ParamList"); + msg->addString("Parameter", "spawnpoint remove"); + + std::string buffer; + buffer = llformat("%d", spawn_index); + msg->nextBlock("ParamList"); + msg->addString("Parameter", buffer); + + gAgent.sendReliableMessage(); } -// static +// static void LLFloaterTelehub::processTelehubInfo(LLMessageSystem* msg, void**) { - LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); - if (floater) - { - floater->unpackTelehubInfo(msg); - } + LLFloaterTelehub* floater = LLFloaterReg::findTypedInstance<LLFloaterTelehub>("telehubs"); + if (floater) + { + floater->unpackTelehubInfo(msg); + } } void LLFloaterTelehub::unpackTelehubInfo(LLMessageSystem* msg) { - msg->getUUID("TelehubBlock", "ObjectID", mTelehubObjectID); - msg->getString("TelehubBlock", "ObjectName", mTelehubObjectName); - msg->getVector3("TelehubBlock", "TelehubPos", mTelehubPos); - msg->getQuat("TelehubBlock", "TelehubRot", mTelehubRot); - - mNumSpawn = msg->getNumberOfBlocks("SpawnPointBlock"); - for (S32 i = 0; i < mNumSpawn; i++) - { - msg->getVector3("SpawnPointBlock", "SpawnPointPos", mSpawnPointPos[i], i); - } - - // Update parts of the UI that change only when message received. - - if (mTelehubObjectID.isNull()) - { - getChildView("status_text_connected")->setVisible( false); - getChildView("status_text_not_connected")->setVisible( true); - getChildView("help_text_connected")->setVisible( false); - getChildView("help_text_not_connected")->setVisible( true); - } - else - { - getChild<LLUICtrl>("status_text_connected")->setTextArg("[OBJECT]", mTelehubObjectName); - getChildView("status_text_connected")->setVisible( true); - getChildView("status_text_not_connected")->setVisible( false); - getChildView("help_text_connected")->setVisible( true); - getChildView("help_text_not_connected")->setVisible( false); - } - - LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); - if (list) - { - list->deleteAllItems(); - for (S32 i = 0; i < mNumSpawn; i++) - { - std::string pos = llformat("%.1f, %.1f, %.1f", - mSpawnPointPos[i].mV[VX], - mSpawnPointPos[i].mV[VY], - mSpawnPointPos[i].mV[VZ]); - list->addSimpleElement(pos); - } - list->selectNthItem(mNumSpawn - 1); - } + msg->getUUID("TelehubBlock", "ObjectID", mTelehubObjectID); + msg->getString("TelehubBlock", "ObjectName", mTelehubObjectName); + msg->getVector3("TelehubBlock", "TelehubPos", mTelehubPos); + msg->getQuat("TelehubBlock", "TelehubRot", mTelehubRot); + + mNumSpawn = msg->getNumberOfBlocks("SpawnPointBlock"); + for (S32 i = 0; i < mNumSpawn; i++) + { + msg->getVector3("SpawnPointBlock", "SpawnPointPos", mSpawnPointPos[i], i); + } + + // Update parts of the UI that change only when message received. + + if (mTelehubObjectID.isNull()) + { + getChildView("status_text_connected")->setVisible( false); + getChildView("status_text_not_connected")->setVisible( true); + getChildView("help_text_connected")->setVisible( false); + getChildView("help_text_not_connected")->setVisible( true); + } + else + { + getChild<LLUICtrl>("status_text_connected")->setTextArg("[OBJECT]", mTelehubObjectName); + getChildView("status_text_connected")->setVisible( true); + getChildView("status_text_not_connected")->setVisible( false); + getChildView("help_text_connected")->setVisible( true); + getChildView("help_text_not_connected")->setVisible( false); + } + + LLScrollListCtrl* list = getChild<LLScrollListCtrl>("spawn_points_list"); + if (list) + { + list->deleteAllItems(); + for (S32 i = 0; i < mNumSpawn; i++) + { + std::string pos = llformat("%.1f, %.1f, %.1f", + mSpawnPointPos[i].mV[VX], + mSpawnPointPos[i].mV[VY], + mSpawnPointPos[i].mV[VZ]); + list->addSimpleElement(pos); + } + list->selectNthItem(mNumSpawn - 1); + } } |