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.cpp680
1 files changed, 333 insertions, 347 deletions
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
index 424e453a2f..f5c4f89702 100644
--- a/indra/newview/llpanelpick.cpp
+++ b/indra/newview/llpanelpick.cpp
@@ -38,13 +38,16 @@
#include "llpanel.h"
#include "message.h"
#include "llagent.h"
+#include "llagentpicksinfo.h"
#include "llbutton.h"
+#include "lliconctrl.h"
#include "lllineeditor.h"
#include "llparcel.h"
#include "llviewerparcelmgr.h"
#include "lltexteditor.h"
#include "lltexturectrl.h"
#include "lluiconstants.h"
+#include "llviewerregion.h"
#include "llworldmap.h"
#include "llfloaterworldmap.h"
#include "llfloaterreg.h"
@@ -60,6 +63,7 @@
#define XML_SNAPSHOT "pick_snapshot"
#define XML_LOCATION "pick_location"
+#define XML_BTN_ON_TXTR "edit_icon"
#define XML_BTN_SAVE "save_changes_btn"
#define SAVE_BTN_LABEL "[WHAT]"
@@ -68,265 +72,161 @@
std::string SET_LOCATION_NOTICE("(will update after save)");
-LLPanelPick::LLPanelPick(BOOL edit_mode/* = FALSE */)
-: LLPanel(), LLAvatarPropertiesObserver(), LLRemoteParcelInfoObserver(),
- mEditMode(edit_mode),
- mSnapshotCtrl(NULL),
- mPickId(LLUUID::null),
- mCreatorId(LLUUID::null),
- mDataReceived(FALSE),
- mIsPickNew(false),
- mLocationChanged(false)
-{
- if (edit_mode)
- {
- LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_EDIT_PICK);
- LLAvatarPropertiesProcessor::instance().addObserver(gAgentID, this);
- }
- else
- {
- LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_PICK_INFO);
- }
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//static
+LLPanelPickInfo* LLPanelPickInfo::create()
+{
+ LLPanelPickInfo* panel = new LLPanelPickInfo();
+ LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_PICK_INFO);
+ return panel;
}
-LLPanelPick::~LLPanelPick()
+LLPanelPickInfo::LLPanelPickInfo()
+ : LLPanel()
+ , LLAvatarPropertiesObserver()
+ , LLRemoteParcelInfoObserver()
+ , mAvatarId(LLUUID::null)
+ , mSnapshotCtrl(NULL)
+ , mPickId(LLUUID::null)
{
- if (mCreatorId.notNull()) LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorId, this);
}
-void LLPanelPick::reset()
+LLPanelPickInfo::~LLPanelPickInfo()
{
- 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);
-
- mDataReceived = FALSE;
-
- mPosGlobal.clearVec();
-
- childSetValue("maturity", "");
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
}
-BOOL LLPanelPick::postBuild()
+void LLPanelPickInfo::onOpen(const LLSD& key)
{
- mSnapshotCtrl = getChild<LLTextureCtrl>(XML_SNAPSHOT);
-
- if (mEditMode)
+ LLUUID avatar_id = key["avatar_id"];
+ if(avatar_id.isNull())
{
- enableSaveButton(FALSE);
-
- mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelPick::onPickChanged, this, _1));
-
- LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name");
- line_edit->setKeystrokeCallback(boost::bind(&LLPanelPick::onPickChanged, this, _1), NULL);
-
- LLTextEditor* text_edit = getChild<LLTextEditor>("pick_desc");
- text_edit->setKeystrokeCallback(boost::bind(&LLPanelPick::onPickChanged, this, _1));
-
- 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));
-
- 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));
-
+ return;
}
- // EXT-822. We have to process "Back" button click in both Edit & View Modes
- if (!mBackCb.empty())
+ if(getAvatarId().notNull())
{
- LLButton* button = findChild<LLButton>("back_btn");
- if (button) button->setClickedCallback(mBackCb);
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(
+ getAvatarId(), this);
}
- return TRUE;
-}
-
-void LLPanelPick::init(LLUUID creator_id, LLUUID pick_id)
-{
- mCreatorId = creator_id;
- mPickId = pick_id;
+ setAvatarId(avatar_id);
- //*TODO consider removing this, already called by setEditMode()
- updateButtons();
+ resetData();
+ resetControls();
- requestData();
-}
+ setPickId(key["pick_id"]);
+ setPickName(key["pick_name"]);
+ setPickDesc(key["pick_desc"]);
+ setSnapshotId(key["snapshot_id"]);
-void LLPanelPick::requestData()
-{
- mDataReceived = FALSE;
- LLAvatarPropertiesProcessor::instance().addObserver(mCreatorId, this);
- LLAvatarPropertiesProcessor::instance().sendPickInfoRequest(mCreatorId, mPickId);
+ LLAvatarPropertiesProcessor::getInstance()->addObserver(
+ getAvatarId(), this);
+ LLAvatarPropertiesProcessor::getInstance()->sendPickInfoRequest(
+ getAvatarId(), getPickId());
}
-void LLPanelPick::init(LLPickData *pick_data)
+BOOL LLPanelPickInfo::postBuild()
{
- mPickId = pick_data->pick_id;
- mCreatorId = pick_data->creator_id;
-
- setPickName(pick_data->name);
- setPickDesc(pick_data->desc);
-
- mSnapshotCtrl->setImageAssetID(pick_data->snapshot_id);
-
- //*HACK see reset() where the texture control was set to FALSE
- mSnapshotCtrl->setValid(TRUE);
-
- mPosGlobal = pick_data->pos_global;
- mSimName = pick_data->sim_name;
- mParcelId = pick_data->parcel_id;
-
- setPickLocation(createLocationText(pick_data->user_name, pick_data->original_name,
- pick_data->sim_name, pick_data->pos_global));
-}
-
-void LLPanelPick::prepareNewPick(const LLVector3d pos_global,
- const std::string& name,
- const std::string& desc,
- const LLUUID& snapshot_id,
- const LLUUID& parcel_id)
-{
- mPickId.generate();
- mCreatorId = gAgent.getID();
- mPosGlobal = pos_global;
- setPickName(name);
- setPickDesc(desc);
- mSnapshotCtrl->setImageAssetID(snapshot_id);
- mParcelId = parcel_id;
-
- setPickLocation(createLocationText(std::string(""), SET_LOCATION_NOTICE, name, pos_global));
+ mSnapshotCtrl = getChild<LLTextureCtrl>(XML_SNAPSHOT);
childSetLabelArg(XML_BTN_SAVE, SAVE_BTN_LABEL, std::string("Pick"));
- mIsPickNew = true;
+ childSetAction("teleport_btn", boost::bind(&LLPanelPickInfo::onClickTeleport, this));
+ childSetAction("show_on_map_btn", boost::bind(&LLPanelPickInfo::onClickMap, this));
+ childSetAction("back_btn", boost::bind(&LLPanelPickInfo::onClickBack, this));
+
+ return TRUE;
}
-// Fill in some reasonable defaults for a new pick.
-void LLPanelPick::prepareNewPick()
+void LLPanelPickInfo::processProperties(void* data, EAvatarProcessorType type)
{
- // Try to fill in the current parcel
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (parcel)
+ if(APT_PICK_INFO != type)
{
- prepareNewPick(gAgent.getPositionGlobal(),
- parcel->getName(),
- parcel->getDesc(),
- parcel->getSnapshotID(),
- parcel->getID());
+ return;
}
-}
-
-/*virtual*/ void LLPanelPick::processProperties(void* data, EAvatarProcessorType type)
-{
- 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;
-
- init(pick_data);
- mDataReceived = TRUE;
- LLAvatarPropertiesProcessor::instance().removeObserver(mCreatorId, this);
-
- if (!mEditMode)
+ LLPickData* pick_info = static_cast<LLPickData*>(data);
+ if(!pick_info
+ || pick_info->creator_id != getAvatarId()
+ || pick_info->pick_id != getPickId())
{
- LLRemoteParcelInfoProcessor::getInstance()->addObserver(pick_data->parcel_id, this);
- LLRemoteParcelInfoProcessor::getInstance()->sendParcelInfoRequest(pick_data->parcel_id);
+ return;
}
-}
+ setSnapshotId(pick_info->snapshot_id);
+ setPickName(pick_info->name);
+ setPickDesc(pick_info->desc);
+ setPosGlobal(pick_info->pos_global);
+ setPickLocation(createLocationText(pick_info->user_name, pick_info->original_name,
+ pick_info->sim_name, pick_info->pos_global));
-void LLPanelPick::setEditMode( BOOL edit_mode )
-{
- if (mEditMode == edit_mode) return;
- mEditMode = edit_mode;
-
- // preserve data before killing controls
- LLUUID snapshot_id = mSnapshotCtrl->getImageAssetID();
- LLRect old_rect = getRect();
-
- deleteAllChildren();
+ // *NOTE dzaporozhan
+ // We want to keep listening to APT_PICK_INFO because user may
+ // edit the Pick and we have to update Pick info panel.
+ // revomeObserver is called from onClickBack
+}
- // *WORKAROUND: for EXT-931. Children are created for both XML_PANEL_EDIT_PICK & XML_PANEL_PICK_INFO files
- // The reason is in LLPanel::initPanelXML called from the LLUICtrlFactory::buildPanel().
- // It creates children from the xml file stored while previous initializing in the "mXMLFilename" member
- // and then in creates children from the parameters passed from the LLUICtrlFactory::buildPanel().
- // Xml filename is stored after LLPanel::initPanelXML is called (added with export-from-ll/viewer-2-0, r1594 into LLUICtrlFactory::buildPanel & LLUICtrlFactory::buildFloater)
- // In case panel creates children from the different xml files they appear from both files.
- // So, let clear xml filename related to this instance.
- setXMLFilename("");
+void LLPanelPickInfo::setExitCallback(const commit_callback_t& cb)
+{
+ getChild<LLButton>("back_btn")->setClickedCallback(cb);
+}
- if (edit_mode)
+void LLPanelPickInfo::processParcelInfo(const LLParcelData& parcel_data)
+{
+ // HACK: Flag 0x2 == adult region,
+ // Flag 0x1 == mature region, otherwise assume PG
+ std::string rating_icon = "icon_event.tga";
+ if (parcel_data.flags & 0x2)
{
- LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_EDIT_PICK);
+ rating_icon = "icon_event_adult.tga";
}
- else
+ else if (parcel_data.flags & 0x1)
{
- LLUICtrlFactory::getInstance()->buildPanel(this, XML_PANEL_PICK_INFO);
+ rating_icon = "icon_event_mature.tga";
}
- //*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);
+ childSetValue("maturity", rating_icon);
- updateButtons();
+ //*NOTE we don't removeObserver(...) ourselves cause LLRemoveParcelProcessor does it for us
}
-void LLPanelPick::onPickChanged(LLUICtrl* ctrl)
+void LLPanelPickInfo::setEditPickCallback(const commit_callback_t& cb)
{
- if(mLocationChanged)
- {
- // Pick was enabled in onClickSet
- return;
- }
+ getChild<LLButton>("edit_btn")->setClickedCallback(cb);
+}
- if( mSnapshotCtrl->isDirty()
- || getChild<LLLineEditor>("pick_name")->isDirty()
- || getChild<LLTextEditor>("pick_desc")->isDirty() )
+// PROTECTED AREA
+
+void LLPanelPickInfo::resetControls()
+{
+ if(getAvatarId() == gAgent.getID())
{
- enableSaveButton(TRUE);
+ childSetEnabled("edit_btn", TRUE);
+ childSetVisible("edit_btn", TRUE);
}
else
{
- enableSaveButton(FALSE);
+ childSetEnabled("edit_btn", FALSE);
+ childSetVisible("edit_btn", FALSE);
}
}
-//////////////////////////////////////////////////////////////////////////
-// PROTECTED AREA
-//////////////////////////////////////////////////////////////////////////
+void LLPanelPickInfo::resetData()
+{
+ setPickName(LLStringUtil::null);
+ setPickDesc(LLStringUtil::null);
+ setPickLocation(LLStringUtil::null);
+ setPickId(LLUUID::null);
+ setSnapshotId(LLUUID::null);
+ mPosGlobal.clearVec();
+ childSetValue("maturity", LLStringUtil::null);
+}
-//static
-std::string LLPanelPick::createLocationText(const std::string& owner_name, const std::string& original_name,
- const std::string& sim_name, const LLVector3d& pos_global)
+// static
+std::string LLPanelPickInfo::createLocationText(const std::string& owner_name, const std::string& original_name, const std::string& sim_name, const LLVector3d& pos_global)
{
std::string location_text;
location_text.append(owner_name);
@@ -354,23 +254,23 @@ std::string LLPanelPick::createLocationText(const std::string& owner_name, const
return location_text;
}
-void LLPanelPick::setPickName(std::string name)
+void LLPanelPickInfo::setSnapshotId(const LLUUID& id)
+{
+ mSnapshotCtrl->setImageAssetID(id);
+ mSnapshotCtrl->setValid(TRUE);
+}
+
+void LLPanelPickInfo::setPickName(const std::string& name)
{
childSetValue(XML_NAME, name);
-
- //preserving non-wrapped text for info/edit modes switching
- mName = name;
}
-void LLPanelPick::setPickDesc(std::string desc)
+void LLPanelPickInfo::setPickDesc(const std::string& desc)
{
childSetValue(XML_DESC, desc);
-
- //preserving non-wrapped text for info/edit modes switching
- mDesc = desc;
}
-void LLPanelPick::setPickLocation(const std::string& location)
+void LLPanelPickInfo::setPickLocation(const std::string& location)
{
childSetValue(XML_LOCATION, location);
@@ -378,208 +278,294 @@ void LLPanelPick::setPickLocation(const std::string& location)
mLocation = location;
}
-std::string LLPanelPick::getPickName()
+void LLPanelPickInfo::onClickMap()
{
- return childGetValue(XML_NAME).asString();
+ LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
+ LLFloaterReg::showInstance("world_map", "center");
}
-std::string LLPanelPick::getPickDesc()
+void LLPanelPickInfo::onClickTeleport()
{
- return childGetValue(XML_DESC).asString();
+ if (!getPosGlobal().isExactlyZero())
+ {
+ gAgent.teleportViaLocation(getPosGlobal());
+ LLFloaterWorldMap::getInstance()->trackLocation(getPosGlobal());
+ }
}
-std::string LLPanelPick::getPickLocation()
+void LLPanelPickInfo::onClickBack()
{
- return childGetValue(XML_LOCATION).asString();
+ LLAvatarPropertiesProcessor::getInstance()->removeObserver(getAvatarId(), this);
}
-void LLPanelPick::sendUpdate()
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////
+
+//static
+LLPanelPickEdit* LLPanelPickEdit::create()
{
- LLPickData pick_data;
+ LLPanelPickEdit* panel = new LLPanelPickEdit();
+ LLUICtrlFactory::getInstance()->buildPanel(panel, XML_PANEL_EDIT_PICK);
+ return panel;
+}
- // 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();
+LLPanelPickEdit::LLPanelPickEdit()
+ : LLPanelPickInfo()
+ , mLocationChanged(false)
+ , mNeedData(true)
+ , mNewPick(false)
+{
+}
- pick_data.agent_id = gAgent.getID();
- pick_data.session_id = gAgent.getSessionID();
- pick_data.pick_id = mPickId;
- pick_data.creator_id = gAgentID;
+LLPanelPickEdit::~LLPanelPickEdit()
+{
+}
- //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;
+void LLPanelPickEdit::onOpen(const LLSD& key)
+{
+ LLUUID pick_id = key["pick_id"];
+ mNeedData = true;
- mDataReceived = FALSE;
- LLAvatarPropertiesProcessor::instance().addObserver(gAgentID, this);
+ // creating new Pick
+ if(pick_id.isNull())
+ {
+ mNewPick = true;
- LLAvatarPropertiesProcessor::instance().sendPickInfoUpdate(&pick_data);
+ setAvatarId(gAgent.getID());
+
+ resetData();
+ resetControls();
+
+ setPosGlobal(gAgent.getPositionGlobal());
+
+ LLUUID parcel_id = LLUUID::null, snapshot_id = LLUUID::null;
+ std::string pick_name, pick_desc;
+
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+ if(parcel)
+ {
+ parcel_id = parcel->getID();
+ pick_name = parcel->getName();
+ pick_desc = parcel->getDesc();
+ snapshot_id = parcel->getSnapshotID();
+ }
+
+ if(pick_name.empty())
+ {
+ LLViewerRegion* region = gAgent.getRegion();
+ if(region)
+ {
+ pick_name = region->getName();
+ }
+ }
+
+ setParcelID(parcel_id);
+ childSetValue("pick_name", pick_name);
+ childSetValue("pick_desc", pick_desc);
+ setSnapshotId(snapshot_id);
+ setPickLocation(createLocationText(LLStringUtil::null, SET_LOCATION_NOTICE,
+ pick_name, getPosGlobal()));
+
+ enableSaveButton(true);
+ }
+ // editing existing pick
+ else
+ {
+ mNewPick = false;
+ LLPanelPickInfo::onOpen(key);
+
+ enableSaveButton(false);
+ }
+
+ resetDirty();
}
+void LLPanelPickEdit::setPickData(const LLPickData* pick_data)
+{
+ if(!pick_data)
+ {
+ return;
+ }
-//-----------------------------------------
-// "PICK INFO" (VIEW MODE) BUTTON HANDLERS
-//-----------------------------------------
+ mNeedData = false;
-//static
-void LLPanelPick::onClickEdit()
+ setParcelID(pick_data->parcel_id);
+ childSetValue("pick_name", pick_data->name);
+ childSetValue("pick_desc", pick_data->desc);
+ setSnapshotId(pick_data->snapshot_id);
+ setPickLocation(createLocationText(pick_data->user_name, pick_data->original_name, /*pick_data->sim_name,*/
+ pick_data->name, pick_data->pos_global));
+}
+
+BOOL LLPanelPickEdit::postBuild()
{
- if (mEditMode) return;
- if (!mDataReceived) return;
- setEditMode(TRUE);
+ LLPanelPickInfo::postBuild();
+
+ mSnapshotCtrl->setOnSelectCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1));
+
+ LLLineEditor* line_edit = getChild<LLLineEditor>("pick_name");
+ line_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1), NULL);
+
+ LLTextEditor* text_edit = getChild<LLTextEditor>("pick_desc");
+ text_edit->setKeystrokeCallback(boost::bind(&LLPanelPickEdit::onPickChanged, this, _1));
+
+ childSetAction(XML_BTN_SAVE, boost::bind(&LLPanelPickEdit::onClickSave, this));
+ childSetAction("set_to_curr_location_btn", boost::bind(&LLPanelPickEdit::onClickSetLocation, this));
+
+ initTexturePickerMouseEvents();
+
+ return TRUE;
}
-//static
-void LLPanelPick::onClickTeleport()
+void LLPanelPickEdit::setSaveCallback(const commit_callback_t& cb)
{
- teleport(mPosGlobal);
+ getChild<LLButton>("save_changes_btn")->setClickedCallback(cb);
}
-//static
-void LLPanelPick::onClickMap()
+void LLPanelPickEdit::setCancelCallback(const commit_callback_t& cb)
{
- showOnMap(mPosGlobal);
+ getChild<LLButton>("cancel_btn")->setClickedCallback(cb);
}
+void LLPanelPickEdit::resetDirty()
+{
+ LLPanelPickInfo::resetDirty();
-//-----------------------------------------
-// "EDIT PICK" (EDIT MODE) BUTTON HANDLERS
-//-----------------------------------------
+ getChild<LLLineEditor>("pick_name")->resetDirty();
+ getChild<LLTextEditor>("pick_desc")->resetDirty();
+ mSnapshotCtrl->resetDirty();
+ mLocationChanged = false;
+}
-//static
-void LLPanelPick::onClickCancel()
+BOOL LLPanelPickEdit::isDirty() const
{
- if (!mEditMode) return;
-
- if (mIsPickNew)
+ if( LLPanelPickInfo::isDirty()
+ || mLocationChanged
+ || mSnapshotCtrl->isDirty()
+ || getChild<LLLineEditor>("pick_name")->isDirty()
+ || getChild<LLTextEditor>("pick_desc")->isDirty())
{
- mBackCb(this, LLSD());
- return;
+ return TRUE;
}
-
- LLUUID pick_id = mPickId;
- LLUUID creator_id = mCreatorId;
- reset();
- init(creator_id, pick_id);
+ return FALSE;
}
-// static
-void LLPanelPick::onClickSet()
-{
- if (!mEditMode) return;
- if (!mIsPickNew && !mDataReceived) return;
+// PROTECTED AREA
- // Save location for later.
- mPosGlobal = gAgent.getPositionGlobal();
+void LLPanelPickEdit::sendUpdate()
+{
+ LLPickData pick_data;
- LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
- if (parcel)
+ // 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 (getPickId().isNull())
{
- mParcelId = parcel->getID();
- mSimName = parcel->getName();
+ getPickId().generate();
}
- setPickLocation(createLocationText(std::string(""), SET_LOCATION_NOTICE, mSimName, mPosGlobal));
- mLocationChanged = true;
- enableSaveButton(TRUE);
-}
+ pick_data.agent_id = gAgent.getID();
+ pick_data.session_id = gAgent.getSessionID();
+ pick_data.pick_id = getPickId();
+ pick_data.creator_id = gAgent.getID();;
-// static
-void LLPanelPick::onClickSave()
-{
- if (!mEditMode) return;
- if (!mIsPickNew && !mDataReceived) return;
+ //legacy var need to be deleted
+ pick_data.top_pick = FALSE;
+ pick_data.parcel_id = mParcelId;
+ pick_data.name = childGetValue(XML_NAME).asString();
+ pick_data.desc = childGetValue(XML_DESC).asString();
+ pick_data.snapshot_id = mSnapshotCtrl->getImageAssetID();
+ pick_data.pos_global = getPosGlobal();
+ pick_data.sort_order = 0;
+ pick_data.enabled = TRUE;
- sendUpdate();
-
- if (mIsPickNew)
+ LLAvatarPropertiesProcessor::instance().sendPickInfoUpdate(&pick_data);
+
+ if(mNewPick)
{
- mBackCb(this, LLSD());
- return;
+ // Assume a successful create pick operation, make new number of picks
+ // available immediately. Actual number of picks will be requested in
+ // LLAvatarPropertiesProcessor::sendPickInfoUpdate and updated upon server respond.
+ LLAgentPicksInfo::getInstance()->incrementNumberOfPicks();
}
-
- setEditMode(FALSE);
}
-void LLPanelPick::updateButtons()
+void LLPanelPickEdit::onPickChanged(LLUICtrl* ctrl)
{
-
- // on Pick Info panel (for non-Agent picks) edit_btn should be invisible
- if (mEditMode)
+ if(isDirty())
{
- childSetLabelArg(XML_BTN_SAVE, SAVE_BTN_LABEL, std::string("Changes"));
+ enableSaveButton(true);
}
- else
+ else
{
- if (mCreatorId != gAgentID)
- {
- childSetEnabled("edit_btn", FALSE);
- childSetVisible("edit_btn", FALSE);
- }
- else
- {
- childSetEnabled("edit_btn", TRUE);
- childSetVisible("edit_btn", TRUE);
- }
+ enableSaveButton(false);
}
}
-void LLPanelPick::setExitCallback(commit_callback_t cb)
+void LLPanelPickEdit::resetData()
{
- mBackCb = cb;
- LLButton* button = findChild<LLButton>("back_btn");
- if (button) button->setClickedCallback(mBackCb);
+ LLPanelPickInfo::resetData();
+ mLocationChanged = false;
}
-//static
-void LLPanelPick::teleport(const LLVector3d& position)
+void LLPanelPickEdit::enableSaveButton(bool enable)
{
- if (!position.isExactlyZero())
+ childSetEnabled(XML_BTN_SAVE, enable);
+}
+
+void LLPanelPickEdit::onClickSetLocation()
+{
+ // Save location for later use.
+ setPosGlobal(gAgent.getPositionGlobal());
+
+ LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
+ if (parcel)
{
- gAgent.teleportViaLocation(position);
- LLFloaterWorldMap::getInstance()->trackLocation(position);
+ mParcelId = parcel->getID();
+ mSimName = parcel->getName();
}
+ setPickLocation(createLocationText(
+ LLStringUtil::null, SET_LOCATION_NOTICE, mSimName, getPosGlobal()));
+
+ mLocationChanged = true;
+ enableSaveButton(TRUE);
}
-//static
-void LLPanelPick::showOnMap(const LLVector3d& position)
+void LLPanelPickEdit::onClickSave()
{
- LLFloaterWorldMap::getInstance()->trackLocation(position);
- LLFloaterReg::showInstance("world_map", "center");
+ sendUpdate();
+
+ mLocationChanged = false;
+
+ LLSD params;
+ params["action"] = "save_new_pick";
+ notifyParent(params);
}
-void LLPanelPick::processParcelInfo(const LLParcelData& parcel_data)
+void LLPanelPickEdit::processProperties(void* data, EAvatarProcessorType type)
{
- 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)
+ if(mNeedData)
{
- rating_icon = "icon_event_adult.tga";
+ LLPanelPickInfo::processProperties(data, type);
}
- 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
+// PRIVATE AREA
+
+void LLPanelPickEdit::initTexturePickerMouseEvents()
+{
+ text_icon = getChild<LLIconCtrl>(XML_BTN_ON_TXTR);
+ mSnapshotCtrl->setMouseEnterCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseEnter, this, _1));
+ mSnapshotCtrl->setMouseLeaveCallback(boost::bind(&LLPanelPickEdit::onTexturePickerMouseLeave, this, _1));
+ text_icon->setVisible(FALSE);
+}
+
+void LLPanelPickEdit::onTexturePickerMouseEnter(LLUICtrl* ctrl)
+{
+ text_icon->setVisible(TRUE);
}
-void LLPanelPick::enableSaveButton(bool enable)
+void LLPanelPickEdit::onTexturePickerMouseLeave(LLUICtrl* ctrl)
{
- if(!mEditMode)
- {
- return;
- }
- childSetEnabled(XML_BTN_SAVE, enable);
+ text_icon->setVisible(FALSE);
}