diff options
author | Bryan O'Sullivan <bos@lindenlab.com> | 2009-08-31 13:47:47 -0700 |
---|---|---|
committer | Bryan O'Sullivan <bos@lindenlab.com> | 2009-08-31 13:47:47 -0700 |
commit | 30ff6cabd61f2f083df5df1e6e70cc94742af477 (patch) | |
tree | 631935f1cf59d19a91cdad65e9a75fe825afda7d /indra/newview/llpanelpick.cpp | |
parent | ff11d74820c89822cd067b51727d9df1dc87d0d0 (diff) | |
parent | 3ac3a4b206c08ed06b889bdaa24074b6aa0e020a (diff) |
Merge with trunk
Diffstat (limited to 'indra/newview/llpanelpick.cpp')
-rw-r--r-- | indra/newview/llpanelpick.cpp | 668 |
1 files changed, 317 insertions, 351 deletions
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp index 43ecd273c2..f7ca54c732 100644 --- a/indra/newview/llpanelpick.cpp +++ b/indra/newview/llpanelpick.cpp @@ -35,481 +35,447 @@ // profile. #include "llviewerprecompiledheaders.h" - -#include "llpanelpick.h" - -#include "lldir.h" -#include "llparcel.h" +#include "llpanel.h" #include "message.h" - #include "llagent.h" #include "llbutton.h" -#include "llcheckboxctrl.h" -#include "llviewercontrol.h" -#include "lllineeditor.h" -#include "lltabcontainervertical.h" -#include "lltextbox.h" -#include "llviewertexteditor.h" +#include "llparcel.h" +#include "llviewerparcelmgr.h" #include "lltexturectrl.h" #include "lluiconstants.h" -#include "llviewergenericmessage.h" -#include "lluictrlfactory.h" -#include "llviewerparcelmgr.h" #include "llworldmap.h" #include "llfloaterworldmap.h" -#include "llviewerregion.h" -#include "llviewerwindow.h" +#include "llfloaterreg.h" +#include "llavatarpropertiesprocessor.h" +#include "llpanelpick.h" -//static -std::list<LLPanelPick*> LLPanelPick::sAllPanels; - -LLPanelPick::LLPanelPick(BOOL top_pick) -: LLPanel(std::string("Top Picks Panel")), - mTopPick(top_pick), - mPickID(), - mCreatorID(), - mParcelID(), - mDataRequested(FALSE), - mDataReceived(FALSE), - mPosGlobal(), - mSnapshotCtrl(NULL), - mNameEditor(NULL), - mDescEditor(NULL), - mLocationEditor(NULL), - mTeleportBtn(NULL), - mMapBtn(NULL), - //mLandmarkBtn(NULL), - mSortOrderText(NULL), - mSortOrderEditor(NULL), - mEnabledCheck(NULL), - mSetBtn(NULL) -{ - sAllPanels.push_back(this); - std::string pick_def_file; - if (top_pick) +#define XML_PANEL_EDIT_PICK "panel_edit_pick.xml" +#define XML_PANEL_PICK_INFO "panel_pick_info.xml" + +#define XML_NAME "pick_name" +#define XML_DESC "pick_desc" +#define XML_SNAPSHOT "pick_snapshot" +#define XML_LOCATION "pick_location" + +#define XML_BTN_SAVE "save_changes_btn" + +#define SAVE_BTN_LABEL "[WHAT]" +#define LABEL_PICK = "Pick" +#define LABEL_CHANGES = "Changes" + + +LLPanelPick::LLPanelPick(BOOL edit_mode/* = FALSE */) +: LLPanel(), LLAvatarPropertiesObserver(), LLRemoteParcelInfoObserver(), + mEditMode(edit_mode), + mSnapshotCtrl(NULL), + mPickId(LLUUID::null), + mCreatorId(LLUUID::null), + mDataReceived(FALSE) +{ + if (edit_mode) { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_top_pick.xml"); + LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_EDIT_PICK); + LLAvatarPropertiesProcessor::instance().addObserver(gAgentID, this); } else { - LLUICtrlFactory::getInstance()->buildPanel(this, "panel_avatar_pick.xml"); - } -} + LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_PICK_INFO); + } +} LLPanelPick::~LLPanelPick() { - sAllPanels.remove(this); + if (mCreatorId.notNull()) LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorId, this); } - void LLPanelPick::reset() { - mPickID.setNull(); - mCreatorID.setNull(); - mParcelID.setNull(); + setEditMode(FALSE); + + mPickId.setNull(); + mCreatorId.setNull(); + mParcelId.setNull(); + + setPickName(""); + setPickDesc(""); + setPickLocation(""); + mSnapshotCtrl->setImageAssetID(LLUUID::null); + + //*HACK just setting asset id to NULL not enough to clear + //the texture controls, w/o setValid(FALSE) it continues to + //draw the previously set image + mSnapshotCtrl->setValid(FALSE); - // Don't request data, this isn't valid - mDataRequested = TRUE; mDataReceived = FALSE; mPosGlobal.clearVec(); - clearCtrls(); + childSetValue("maturity", ""); } - BOOL LLPanelPick::postBuild() { - mSnapshotCtrl = getChild<LLTextureCtrl>("snapshot_ctrl"); - mSnapshotCtrl->setCommitCallback(onCommitAny); - mSnapshotCtrl->setCallbackUserData(this); + mSnapshotCtrl = getChild<LLTextureCtrl>(XML_SNAPSHOT); - mNameEditor = getChild<LLLineEditor>("given_name_editor"); - mNameEditor->setCommitOnFocusLost(TRUE); - mNameEditor->setCommitCallback(onCommitAny); - mNameEditor->setCallbackUserData(this); + if (mEditMode) + { + childSetAction("cancel_btn", boost::bind(&LLPanelPick::onClickCancel, this)); + childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPick::onClickSet, this)); + childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPick::onClickSave, this)); - mDescEditor = getChild<LLTextEditor>("desc_editor"); - mDescEditor->setCommitOnFocusLost(TRUE); - mDescEditor->setCommitCallback(onCommitAny); - mDescEditor->setCallbackUserData(this); - mDescEditor->setTabsToNextField(TRUE); + mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPick::childSetVisible, this, "edit_icon", true)); + mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPick::childSetVisible, this, "edit_icon", false)); + } + else + { + childSetAction("edit_btn", boost::bind(&LLPanelPick::onClickEdit, this)); + childSetAction("teleport_btn", boost::bind(&LLPanelPick::onClickTeleport, this)); + childSetAction("show_on_map_btn", boost::bind(&LLPanelPick::onClickMap, this)); - mLocationEditor = getChild<LLLineEditor>("location_editor"); + if (!mBackCb.empty()) + { + LLButton* button = findChild<LLButton>("back_btn"); + if (button) button->setClickedCallback(mBackCb); + } + } - mSetBtn = getChild<LLButton>( "set_location_btn"); - mSetBtn->setClickedCallback(onClickSet); - mSetBtn->setCallbackUserData(this); + return TRUE; +} + +void LLPanelPick::init(LLUUID creator_id, LLUUID pick_id) +{ + mCreatorId = creator_id; + mPickId = pick_id; - mTeleportBtn = getChild<LLButton>( "pick_teleport_btn"); - mTeleportBtn->setClickedCallback(onClickTeleport); - mTeleportBtn->setCallbackUserData(this); + //*TODO consider removing this, already called by setEditMode() + updateButtons(); - mMapBtn = getChild<LLButton>( "pick_map_btn"); - mMapBtn->setClickedCallback(onClickMap); - mMapBtn->setCallbackUserData(this); + requestData(); +} + +void LLPanelPick::requestData() +{ + mDataReceived = FALSE; + LLAvatarPropertiesProcessor::instance().addObserver(mCreatorId, this); + LLAvatarPropertiesProcessor::instance().sendDataRequest(mCreatorId, APT_PICK_INFO, &mPickId); +} - mSortOrderText = getChild<LLTextBox>("sort_order_text"); +void LLPanelPick::init(LLPickData *pick_data) +{ + mPickId = pick_data->pick_id; + mCreatorId = pick_data->creator_id; - mSortOrderEditor = getChild<LLLineEditor>("sort_order_editor"); - mSortOrderEditor->setPrevalidate(LLLineEditor::prevalidateInt); - mSortOrderEditor->setCommitOnFocusLost(TRUE); - mSortOrderEditor->setCommitCallback(onCommitAny); - mSortOrderEditor->setCallbackUserData(this); + setPickName(pick_data->name); + setPickDesc(pick_data->desc); + setPickLocation(pick_data->location_text); + mSnapshotCtrl->setImageAssetID(pick_data->snapshot_id); - mEnabledCheck = getChild<LLCheckBoxCtrl>( "enabled_check"); - mEnabledCheck->setCommitCallback(onCommitAny); - mEnabledCheck->setCallbackUserData(this); + //*HACK see reset() where the texture control was set to FALSE + mSnapshotCtrl->setValid(TRUE); - return TRUE; + mPosGlobal = pick_data->pos_global; + mSimName = pick_data->sim_name; + mParcelId = pick_data->parcel_id; } - // Fill in some reasonable defaults for a new pick. -void LLPanelPick::initNewPick() +void LLPanelPick::createNewPick() { - mPickID.generate(); - - mCreatorID = gAgent.getID(); - + mPickId.generate(); + mCreatorId = gAgent.getID(); mPosGlobal = gAgent.getPositionGlobal(); // Try to fill in the current parcel LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); if (parcel) { - mNameEditor->setText(parcel->getName()); - mDescEditor->setText(parcel->getDesc()); + setPickName(parcel->getName()); + setPickDesc(parcel->getDesc()); mSnapshotCtrl->setImageAssetID(parcel->getSnapshotID()); } - // Commit to the database, since we've got "new" values. - sendPickInfoUpdate(); -} - + sendUpdate(); -void LLPanelPick::setPickID(const LLUUID& pick_id, const LLUUID& creator_id) -{ - mPickID = pick_id; - mCreatorID = creator_id; + childSetLabelArg(XML_BTN_SAVE, SAVE_BTN_LABEL, std::string("Pick")); } - -// Schedules the panel to request data -// from the server next time it is drawn. -void LLPanelPick::markForServerRequest() +/*virtual*/ void LLPanelPick::processProperties(void* data, EAvatarProcessorType type) { - mDataRequested = FALSE; - mDataReceived = FALSE; -} + if (APT_PICK_INFO != type) return; + if (!data) return; + LLPickData* pick_data = static_cast<LLPickData *>(data); + if (!pick_data) return; + if (mPickId != pick_data->pick_id) return; -std::string LLPanelPick::getPickName() -{ - return mNameEditor->getText(); + init(pick_data); + mDataReceived = TRUE; + LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorId, this); + + if (!mEditMode) + { + LLRemoteParcelInfoProcessor::getInstance()->addObserver(pick_data->parcel_id, this); + LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(pick_data->parcel_id); + } } -void LLPanelPick::sendPickInfoRequest() +void LLPanelPick::setEditMode( BOOL edit_mode ) { - // Must ask for a pick based on the creator id because - // the pick database is distributed to the inventory cluster. JC - std::vector<std::string> strings; - strings.push_back( mCreatorID.asString() ); - strings.push_back( mPickID.asString() ); - send_generic_message("pickinforequest", strings); - - mDataRequested = TRUE; -} + if (mEditMode == edit_mode) return; + mEditMode = edit_mode; + // preserve data before killing controls + LLUUID snapshot_id = mSnapshotCtrl->getImageAssetID(); + LLRect old_rect = getRect(); -void LLPanelPick::sendPickInfoUpdate() -{ - // If we don't have a pick id yet, we'll need to generate one, - // otherwise we'll keep overwriting pick_id 00000 in the database. - if (mPickID.isNull()) + deleteAllChildren(); + + if (edit_mode) { - mPickID.generate(); + LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_EDIT_PICK); + } + else + { + LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_PICK_INFO); } - LLMessageSystem* msg = gMessageSystem; - - msg->newMessage("PickInfoUpdate"); - msg->nextBlock("AgentData"); - msg->addUUID("AgentID", gAgent.getID()); - msg->addUUID("SessionID", gAgent.getSessionID()); - msg->nextBlock("Data"); - msg->addUUID("PickID", mPickID); - msg->addUUID("CreatorID", mCreatorID); - msg->addBOOL("TopPick", mTopPick); - // fills in on simulator if null - msg->addUUID("ParcelID", mParcelID); - msg->addString("Name", mNameEditor->getText()); - msg->addString("Desc", mDescEditor->getText()); - msg->addUUID("SnapshotID", mSnapshotCtrl->getImageAssetID()); - msg->addVector3d("PosGlobal", mPosGlobal); - - // Only top picks have a sort order - S32 sort_order; - if (mTopPick) + //*NOTE this code is from LLPanelMeProfile.togglePanel()... doubt this is a right way to do things + reshape(old_rect.getWidth(), old_rect.getHeight()); + old_rect.setLeftTopAndSize(0, old_rect.getHeight(), old_rect.getWidth(), old_rect.getHeight()); + setRect(old_rect); + + // time to restore data + setPickName(mName); + setPickDesc(mDesc); + setPickLocation(mLocation); + mSnapshotCtrl->setImageAssetID(snapshot_id); + + updateButtons(); +} + +void LLPanelPick::setPickName(std::string name) +{ + if (mEditMode) { - sort_order = atoi(mSortOrderEditor->getText().c_str()); + childSetValue(XML_NAME, name); } else { - sort_order = 0; + childSetWrappedText(XML_NAME, name); } - msg->addS32("SortOrder", sort_order); - msg->addBOOL("Enabled", mEnabledCheck->get()); - gAgent.sendReliableMessage(); + + //preserving non-wrapped text for info/edit modes switching + mName = name; } - -//static -void LLPanelPick::processPickInfoReply(LLMessageSystem *msg, void **) +void LLPanelPick::setPickDesc(std::string desc) { - // Extract the agent id and verify the message is for this - // client. - LLUUID agent_id; - msg->getUUID("AgentData", "AgentID", agent_id ); - if (agent_id != gAgent.getID()) - { - llwarns << "Agent ID mismatch in processPickInfoReply" - << llendl; - return; - } - - LLUUID pick_id; - msg->getUUID("Data", "PickID", pick_id); - - LLUUID creator_id; - msg->getUUID("Data", "CreatorID", creator_id); - - BOOL top_pick; - msg->getBOOL("Data", "TopPick", top_pick); - - LLUUID parcel_id; - msg->getUUID("Data", "ParcelID", parcel_id); - - std::string name; - msg->getString("Data", "Name", name); - - std::string desc; - msg->getString("Data", "Desc", desc); - - LLUUID snapshot_id; - msg->getUUID("Data", "SnapshotID", snapshot_id); - - // "Location text" is actually the owner name, the original - // name that owner gave the parcel, and the location. - std::string location_text; - msg->getString("Data", "User", location_text); - location_text.append(", "); - - std::string original_name; - msg->getString("Data", "OriginalName", original_name); - if (!original_name.empty()) + if (mEditMode) { - location_text.append(original_name); - location_text.append(", "); + childSetValue(XML_DESC, desc); } - - std::string sim_name; - msg->getString("Data", "SimName", sim_name); - location_text.append(sim_name); - location_text.append(" "); - - LLVector3d pos_global; - msg->getVector3d("Data", "PosGlobal", pos_global); - - S32 region_x = llround((F32)pos_global.mdV[VX]) % REGION_WIDTH_UNITS; - S32 region_y = llround((F32)pos_global.mdV[VY]) % REGION_WIDTH_UNITS; - S32 region_z = llround((F32)pos_global.mdV[VZ]); - - location_text.append(llformat("(%d, %d, %d)", region_x, region_y, region_z)); - - S32 sort_order; - msg->getS32("Data", "SortOrder", sort_order); - - BOOL enabled; - msg->getBOOL("Data", "Enabled", enabled); - - // Look up the panel to fill in - for (panel_list_t::iterator iter = sAllPanels.begin(); iter != sAllPanels.end(); ++iter) + else { - LLPanelPick* self = *iter; - // For top picks, must match pick id - if (self->mPickID != pick_id) - { - continue; - } - - self->mDataReceived = TRUE; - - // Found the panel, now fill in the information - self->mPickID = pick_id; - self->mCreatorID = creator_id; - self->mParcelID = parcel_id; - self->mSimName.assign(sim_name); - self->mPosGlobal = pos_global; - - // Update UI controls - self->mNameEditor->setText(std::string(name)); - self->mDescEditor->setText(std::string(desc)); - self->mSnapshotCtrl->setImageAssetID(snapshot_id); - self->mLocationEditor->setText(location_text); - self->mEnabledCheck->set(enabled); + childSetWrappedText(XML_DESC, desc); + } - self->mSortOrderEditor->setText(llformat("%d", sort_order)); - } + //preserving non-wrapped text for info/edit modes switching + mDesc = desc; } -void LLPanelPick::draw() +void LLPanelPick::setPickLocation(std::string location) { - refresh(); + childSetWrappedText(XML_LOCATION, location); - LLPanel::draw(); + //preserving non-wrapped text for info/edit modes switching + mLocation = location; } - -void LLPanelPick::refresh() +std::string LLPanelPick::getPickName() { - if (!mDataRequested) - { - sendPickInfoRequest(); - } - - // Check for god mode - BOOL godlike = gAgent.isGodlike(); - BOOL is_self = (gAgent.getID() == mCreatorID); + return childGetValue(XML_NAME).asString(); +} - // Set button visibility/enablement appropriately - if (mTopPick) - { - mSnapshotCtrl->setEnabled(godlike); - mNameEditor->setEnabled(godlike); - mDescEditor->setEnabled(godlike); +std::string LLPanelPick::getPickDesc() +{ + return childGetValue(XML_DESC).asString(); +} - mSortOrderText->setVisible(godlike); +std::string LLPanelPick::getPickLocation() +{ + return childGetValue(XML_LOCATION).asString(); +} - mSortOrderEditor->setVisible(godlike); - mSortOrderEditor->setEnabled(godlike); +void LLPanelPick::sendUpdate() +{ + LLPickData pick_data; - mEnabledCheck->setVisible(godlike); - mEnabledCheck->setEnabled(godlike); + // If we don't have a pick id yet, we'll need to generate one, + // otherwise we'll keep overwriting pick_id 00000 in the database. + if (mPickId.isNull()) mPickId.generate(); + + pick_data.agent_id = gAgent.getID(); + pick_data.session_id = gAgent.getSessionID(); + pick_data.pick_id = mPickId; + pick_data.creator_id = gAgentID; + + //legacy var need to be deleted + pick_data.top_pick = FALSE; + pick_data.parcel_id = mParcelId; + pick_data.name = getPickName(); + pick_data.desc = getPickDesc(); + pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID(); + pick_data.pos_global = mPosGlobal; + pick_data.sort_order = 0; + pick_data.enabled = TRUE; - mSetBtn->setVisible(godlike); - mSetBtn->setEnabled(godlike); - } - else - { - mSnapshotCtrl->setEnabled(is_self); - mNameEditor->setEnabled(is_self); - mDescEditor->setEnabled(is_self); + mDataReceived = FALSE; + LLAvatarPropertiesProcessor::instance().addObserver(gAgentID, this); - mSortOrderText->setVisible(FALSE); + LLAvatarPropertiesProcessor::instance().sendDataUpdate(&pick_data, APT_PICK_INFO); +} - mSortOrderEditor->setVisible(FALSE); - mSortOrderEditor->setEnabled(FALSE); - mEnabledCheck->setVisible(FALSE); - mEnabledCheck->setEnabled(FALSE); +//----------------------------------------- +// "PICK INFO" (VIEW MODE) BUTTON HANDLERS +//----------------------------------------- - mSetBtn->setVisible(is_self); - mSetBtn->setEnabled(is_self); - } +//static +void LLPanelPick::onClickEdit() +{ + if (mEditMode) return; + if (!mDataReceived) return; + setEditMode(TRUE); } - -// static -void LLPanelPick::onClickTeleport(void* data) +//static +void LLPanelPick::onClickTeleport() { - LLPanelPick* self = (LLPanelPick*)data; - - if (!self->mPosGlobal.isExactlyZero()) - { - gAgent.teleportViaLocation(self->mPosGlobal); - gFloaterWorldMap->trackLocation(self->mPosGlobal); - } + teleport(mPosGlobal); } - -// static -void LLPanelPick::onClickMap(void* data) +//static +void LLPanelPick::onClickMap() { - LLPanelPick* self = (LLPanelPick*)data; - gFloaterWorldMap->trackLocation(self->mPosGlobal); - LLFloaterWorldMap::show(NULL, TRUE); + showOnMap(mPosGlobal); } -// static -/* -void LLPanelPick::onClickLandmark(void* data) + +//----------------------------------------- +// "EDIT PICK" (EDIT MODE) BUTTON HANDLERS +//----------------------------------------- + +//static +void LLPanelPick::onClickCancel() { - LLPanelPick* self = (LLPanelPick*)data; - create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal); + if (!mEditMode) return; + + LLUUID pick_id = mPickId; + LLUUID creator_id = mCreatorId; + reset(); + init(creator_id, pick_id); } -*/ // static -void LLPanelPick::onClickSet(void* data) +void LLPanelPick::onClickSet() { - LLPanelPick* self = (LLPanelPick*)data; + if (!mEditMode) return; + if (!mDataReceived) return; // Save location for later. - self->mPosGlobal = gAgent.getPositionGlobal(); - - std::string location_text; - location_text.assign("(will update after save)"); - location_text.append(", "); + mPosGlobal = gAgent.getPositionGlobal(); - S32 region_x = llround((F32)self->mPosGlobal.mdV[VX]) % REGION_WIDTH_UNITS; - S32 region_y = llround((F32)self->mPosGlobal.mdV[VY]) % REGION_WIDTH_UNITS; - S32 region_z = llround((F32)self->mPosGlobal.mdV[VZ]); + S32 region_x = llround((F32)mPosGlobal.mdV[VX]) % REGION_WIDTH_UNITS; + S32 region_y = llround((F32)mPosGlobal.mdV[VY]) % REGION_WIDTH_UNITS; + S32 region_z = llround((F32)mPosGlobal.mdV[VZ]); - location_text.append(self->mSimName); - location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z)); + std::string location_text = "(will update after save), "; + location_text.append(mSimName); + location_text.append(llformat(" (%d, %d, %d)", region_x, region_y, region_z)); - // if sim name in pick is different from current sim name - // make sure it's clear that all that's being changed - // is the location and nothing else - if ( gAgent.getRegion ()->getName () != self->mSimName ) - { - LLNotifications::instance().add("SetPickLocation"); - }; + setPickLocation(location_text); +} - self->mLocationEditor->setText(location_text); +// static +void LLPanelPick::onClickSave() +{ + if (!mEditMode) return; + if (!mDataReceived) return; - onCommitAny(NULL, data); + sendUpdate(); + setEditMode(FALSE); } - -// static -void LLPanelPick::onCommitAny(LLUICtrl* ctrl, void* data) +void LLPanelPick::updateButtons() { - LLPanelPick* self = (LLPanelPick*)data; - // have we received up to date data for this pick? - if (self->mDataReceived) + // on Pick Info panel (for non-Agent picks) edit_btn should be invisible + if (mEditMode) { - self->sendPickInfoUpdate(); - - // Big hack - assume that top picks are always in a browser, - // and non-top-picks are always in a tab container. - /*if (self->mTopPick) + childSetLabelArg(XML_BTN_SAVE, SAVE_BTN_LABEL, std::string("Changes")); + } + else + { + if (mCreatorId != gAgentID) { - LLPanelDirPicks* panel = (LLPanelDirPicks*)self->getParent(); - panel->renamePick(self->mPickID, self->mNameEditor->getText()); + childSetEnabled("edit_btn", FALSE); + childSetVisible("edit_btn", FALSE); } - else - {*/ - LLTabContainer* tab = (LLTabContainer*)self->getParent(); - if (tab) + else { - if(tab) tab->setCurrentTabName(self->mNameEditor->getText()); + childSetEnabled("edit_btn", TRUE); + childSetVisible("edit_btn", TRUE); } - //} } } + +void LLPanelPick::setExitCallback(commit_callback_t cb) +{ + mBackCb = cb; + if (!mEditMode) + { + LLButton* button = findChild<LLButton>("back_btn"); + if (button) button->setClickedCallback(mBackCb); + } +} + +//static +void LLPanelPick::teleport(const LLVector3d& position) +{ + if (!position.isExactlyZero()) + { + gAgent.teleportViaLocation(position); + LLFloaterWorldMap::getInstance()->trackLocation(position); + } +} + +//static +void LLPanelPick::showOnMap(const LLVector3d& position) +{ + LLFloaterWorldMap::getInstance()->trackLocation(position); + LLFloaterReg::showInstance("world_map", "center"); +} + +void LLPanelPick::processParcelInfo(const LLParcelData& parcel_data) +{ + if (mEditMode) return; + + // HACK: Flag 0x2 == adult region, + // Flag 0x1 == mature region, otherwise assume PG + std::string rating_icon = "icon_event.tga"; + if (parcel_data.flags & 0x2) + { + rating_icon = "icon_event_adult.tga"; + } + else if (parcel_data.flags & 0x1) + { + rating_icon = "icon_event_mature.tga"; + } + + childSetValue("maturity", rating_icon); + + //*NOTE we don't removeObserver(...) ourselves cause LLRemoveParcelProcessor does it for us +} |