summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelplace.cpp
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
committerJames Cook <james@lindenlab.com>2007-01-02 08:33:20 +0000
commit420b91db29485df39fd6e724e782c449158811cb (patch)
treeb471a94563af914d3ed3edd3e856d21cb1b69945 /indra/newview/llpanelplace.cpp
Print done when done.
Diffstat (limited to 'indra/newview/llpanelplace.cpp')
-rw-r--r--indra/newview/llpanelplace.cpp271
1 files changed, 271 insertions, 0 deletions
diff --git a/indra/newview/llpanelplace.cpp b/indra/newview/llpanelplace.cpp
new file mode 100644
index 0000000000..45ca1b0871
--- /dev/null
+++ b/indra/newview/llpanelplace.cpp
@@ -0,0 +1,271 @@
+/**
+ * @file llpanelplace.cpp
+ * @brief Display of a place in the Find directory.
+ *
+ * Copyright (c) 2004-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llpanelplace.h"
+
+#include "llviewercontrol.h"
+#include "llqueryflags.h"
+#include "message.h"
+#include "llui.h"
+#include "llsecondlifeurls.h"
+
+#include "llagent.h"
+#include "llviewerwindow.h"
+#include "llbutton.h"
+#include "llfloaterworldmap.h"
+#include "lllineeditor.h"
+#include "lluiconstants.h"
+#include "lltextbox.h"
+#include "llviewertexteditor.h"
+#include "lltexturectrl.h"
+#include "llworldmap.h"
+#include "llviewerregion.h"
+#include "llvieweruictrlfactory.h"
+//#include "llviewermenu.h" // create_landmark()
+#include "llweb.h"
+
+//static
+LLLinkedList<LLPanelPlace> LLPanelPlace::sAllPanels;
+
+LLPanelPlace::LLPanelPlace()
+: LLPanel("Places Panel"),
+ mParcelID(),
+ mPosGlobal(),
+ mAuctionID(0)
+{
+ sAllPanels.addData(this);
+}
+
+
+LLPanelPlace::~LLPanelPlace()
+{
+ sAllPanels.removeData(this);
+}
+
+
+BOOL LLPanelPlace::postBuild()
+{
+ // Since this is only used in the directory browser, always
+ // disable the snapshot control. Otherwise clicking on it will
+ // open a texture picker.
+ mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl");
+ mSnapshotCtrl->setEnabled(FALSE);
+
+ mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "name_editor");
+
+ mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor");
+
+ mInfoEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "info_editor");
+
+ mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor");
+
+ mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn");
+ mTeleportBtn->setClickedCallback(onClickTeleport);
+ mTeleportBtn->setCallbackUserData(this);
+
+ mMapBtn = LLViewerUICtrlFactory::getButtonByName(this, "map_btn");
+ mMapBtn->setClickedCallback(onClickMap);
+ mMapBtn->setCallbackUserData(this);
+
+ //mLandmarkBtn = LLViewerUICtrlFactory::getButtonByName(this, "landmark_btn");
+ //mLandmarkBtn->setClickedCallback(onClickLandmark);
+ //mLandmarkBtn->setCallbackUserData(this);
+
+ mAuctionBtn = LLViewerUICtrlFactory::getButtonByName(this, "auction_btn");
+ mAuctionBtn->setClickedCallback(onClickAuction);
+ mAuctionBtn->setCallbackUserData(this);
+
+ // Default to no auction button. We'll show it if we get an auction id
+ mAuctionBtn->setVisible(FALSE);
+
+ return TRUE;
+}
+
+
+
+void LLPanelPlace::setParcelID(const LLUUID& parcel_id)
+{
+ mParcelID = parcel_id;
+}
+
+
+void LLPanelPlace::sendParcelInfoRequest()
+{
+ LLMessageSystem *msg = gMessageSystem;
+
+ if (mParcelID != mRequestedID)
+ {
+ msg->newMessage("ParcelInfoRequest");
+ msg->nextBlockFast(_PREHASH_AgentData);
+ msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID() );
+ msg->addUUID("SessionID", gAgent.getSessionID());
+ msg->nextBlock("Data");
+ msg->addUUID("ParcelID", mParcelID);
+ gAgent.sendReliableMessage();
+ mRequestedID = mParcelID;
+ }
+}
+
+
+//static
+void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **)
+{
+ LLUUID agent_id;
+ LLUUID parcel_id;
+ LLUUID owner_id;
+ char name[MAX_STRING];
+ char desc[MAX_STRING];
+ S32 actual_area;
+ S32 billable_area;
+ U8 flags;
+ F32 global_x;
+ F32 global_y;
+ F32 global_z;
+ char sim_name[MAX_STRING];
+ LLUUID snapshot_id;
+ F32 dwell;
+ S32 sale_price;
+ S32 auction_id;
+ char buffer[256];
+
+ msg->getUUID("AgentData", "AgentID", agent_id );
+ msg->getUUID("Data", "ParcelID", parcel_id);
+
+ // look up all panels which have this avatar
+ LLPanelPlace *self = NULL;
+
+ for (self = sAllPanels.getFirstData(); self; self = sAllPanels.getNextData())
+ {
+ if (self->mParcelID != parcel_id)
+ {
+ continue;
+ }
+
+ msg->getUUID ("Data", "OwnerID", owner_id);
+ msg->getString ("Data", "Name", MAX_STRING, name);
+ msg->getString ("Data", "Desc", MAX_STRING, desc);
+ msg->getS32 ("Data", "ActualArea", actual_area);
+ msg->getS32 ("Data", "BillableArea", billable_area);
+ msg->getU8 ("Data", "Flags", flags);
+ msg->getF32 ("Data", "GlobalX", global_x);
+ msg->getF32 ("Data", "GlobalY", global_y);
+ msg->getF32 ("Data", "GlobalZ", global_z);
+ msg->getString ("Data", "SimName", MAX_STRING, sim_name);
+ msg->getUUID ("Data", "SnapshotID", snapshot_id);
+ msg->getF32 ("Data", "Dwell", dwell);
+ msg->getS32 ("Data", "SalePrice", sale_price);
+ msg->getS32 ("Data", "AuctionID", auction_id);
+
+ self->mPosGlobal.setVec(global_x, global_y, global_z);
+
+ self->mAuctionID = auction_id;
+
+ self->mSnapshotCtrl->setImageAssetID(snapshot_id);
+
+ self->mNameEditor->setText(name);
+
+ self->mDescEditor->setText(desc);
+
+ LLString info;
+ sprintf(buffer, "Traffic: %.0f, Area: %d sq. m.", dwell, actual_area);
+ info.append(buffer);
+ if (flags & DFQ_FOR_SALE)
+ {
+ sprintf(buffer, ", For Sale for L$%d", sale_price);
+ info.append(buffer);
+ }
+ if (auction_id != 0)
+ {
+ sprintf(buffer, ", Auction ID %010d", auction_id);
+ info.append(buffer);
+ }
+ self->mInfoEditor->setText(info);
+
+ S32 region_x = llround(global_x) % REGION_WIDTH_UNITS;
+ S32 region_y = llround(global_y) % REGION_WIDTH_UNITS;
+ S32 region_z = llround(global_z);
+
+ // HACK: Flag 0x1 == mature region, otherwise assume PG
+ const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG);
+ if (flags & 0x1)
+ {
+ rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE);
+ }
+
+ sprintf(buffer, "%s %d, %d, %d (%s)",
+ sim_name, region_x, region_y, region_z, rating);
+ self->mLocationEditor->setText(buffer);
+
+ BOOL show_auction = (auction_id > 0);
+ self->mAuctionBtn->setVisible(show_auction);
+ }
+}
+
+
+// static
+void LLPanelPlace::onClickTeleport(void* data)
+{
+ LLPanelPlace* self = (LLPanelPlace*)data;
+
+ if (!self->mPosGlobal.isExactlyZero())
+ {
+ gAgent.teleportViaLocation(self->mPosGlobal);
+ gFloaterWorldMap->trackLocation(self->mPosGlobal);
+ }
+}
+
+// static
+void LLPanelPlace::onClickMap(void* data)
+{
+ LLPanelPlace* self = (LLPanelPlace*)data;
+
+ if (!self->mPosGlobal.isExactlyZero())
+ {
+ gFloaterWorldMap->trackLocation(self->mPosGlobal);
+ LLFloaterWorldMap::show(NULL, TRUE);
+ }
+}
+
+// static
+/*
+void LLPanelPlace::onClickLandmark(void* data)
+{
+ LLPanelPlace* self = (LLPanelPlace*)data;
+
+ create_landmark(self->mNameEditor->getText(), "", self->mPosGlobal);
+}
+*/
+
+
+// static
+void LLPanelPlace::onClickAuction(void* data)
+{
+ LLPanelPlace* self = (LLPanelPlace*)data;
+
+ gViewerWindow->alertXml("GoToAuctionPage",
+ callbackAuctionWebPage,
+ self);
+}
+
+// static
+void LLPanelPlace::callbackAuctionWebPage(S32 option, void* data)
+{
+ LLPanelPlace* self = (LLPanelPlace*)data;
+
+ if (0 == option)
+ {
+ char url[256];
+ sprintf(url, "%s%010d", AUCTION_URL, self->mAuctionID);
+
+ llinfos << "Loading auction page " << url << llendl;
+
+ LLWeb::loadURL(url);
+ }
+}