summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelpick.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llpanelpick.cpp')
-rw-r--r--indra/newview/llpanelpick.cpp668
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
+}