diff options
author | Jacek Antonelli | 2008-08-15 23:45:16 -0500 |
---|---|---|
committer | Jacek Antonelli | 2008-08-15 23:45:16 -0500 |
commit | 3f27ba891ac4d032753b219b4b96d1ffbc9fb488 (patch) | |
tree | 504932ee91a0356fba7ea48798887c96867e492f /linden/indra/newview/llpanelplace.cpp | |
parent | Second Life viewer sources 1.18.4.3 (diff) | |
download | meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.zip meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.gz meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.bz2 meta-impy-3f27ba891ac4d032753b219b4b96d1ffbc9fb488.tar.xz |
Second Life viewer sources 1.18.5.0-RC
Diffstat (limited to 'linden/indra/newview/llpanelplace.cpp')
-rw-r--r-- | linden/indra/newview/llpanelplace.cpp | 167 |
1 files changed, 151 insertions, 16 deletions
diff --git a/linden/indra/newview/llpanelplace.cpp b/linden/indra/newview/llpanelplace.cpp index 93a86dc..d08d25e 100644 --- a/linden/indra/newview/llpanelplace.cpp +++ b/linden/indra/newview/llpanelplace.cpp | |||
@@ -38,6 +38,8 @@ | |||
38 | #include "message.h" | 38 | #include "message.h" |
39 | #include "llui.h" | 39 | #include "llui.h" |
40 | #include "llsecondlifeurls.h" | 40 | #include "llsecondlifeurls.h" |
41 | #include "llremoteparcelrequest.h" | ||
42 | #include "llfloater.h" | ||
41 | 43 | ||
42 | #include "llagent.h" | 44 | #include "llagent.h" |
43 | #include "llviewerwindow.h" | 45 | #include "llviewerwindow.h" |
@@ -53,6 +55,7 @@ | |||
53 | #include "llvieweruictrlfactory.h" | 55 | #include "llvieweruictrlfactory.h" |
54 | //#include "llviewermenu.h" // create_landmark() | 56 | //#include "llviewermenu.h" // create_landmark() |
55 | #include "llweb.h" | 57 | #include "llweb.h" |
58 | #include "llsdutil.h" | ||
56 | 59 | ||
57 | //static | 60 | //static |
58 | std::list<LLPanelPlace*> LLPanelPlace::sAllPanels; | 61 | std::list<LLPanelPlace*> LLPanelPlace::sAllPanels; |
@@ -60,8 +63,12 @@ std::list<LLPanelPlace*> LLPanelPlace::sAllPanels; | |||
60 | LLPanelPlace::LLPanelPlace() | 63 | LLPanelPlace::LLPanelPlace() |
61 | : LLPanel("Places Panel"), | 64 | : LLPanel("Places Panel"), |
62 | mParcelID(), | 65 | mParcelID(), |
66 | mRequestedID(), | ||
67 | mRegionID(), | ||
63 | mPosGlobal(), | 68 | mPosGlobal(), |
64 | mAuctionID(0) | 69 | mPosRegion(), |
70 | mAuctionID(0), | ||
71 | mLandmarkAssetID() | ||
65 | { | 72 | { |
66 | sAllPanels.push_back(this); | 73 | sAllPanels.push_back(this); |
67 | } | 74 | } |
@@ -81,13 +88,13 @@ BOOL LLPanelPlace::postBuild() | |||
81 | mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); | 88 | mSnapshotCtrl = LLViewerUICtrlFactory::getTexturePickerByName(this, "snapshot_ctrl"); |
82 | mSnapshotCtrl->setEnabled(FALSE); | 89 | mSnapshotCtrl->setEnabled(FALSE); |
83 | 90 | ||
84 | mNameEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "name_editor"); | 91 | mNameEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "name_editor"); |
85 | 92 | ||
86 | mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); | 93 | mDescEditor = LLUICtrlFactory::getTextEditorByName(this, "desc_editor"); |
87 | 94 | ||
88 | mInfoEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "info_editor"); | 95 | mInfoEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "info_editor"); |
89 | 96 | ||
90 | mLocationEditor = LLViewerUICtrlFactory::getLineEditorByName(this, "location_editor"); | 97 | mLocationEditor = LLViewerUICtrlFactory::getTextBoxByName(this, "location_editor"); |
91 | 98 | ||
92 | mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn"); | 99 | mTeleportBtn = LLViewerUICtrlFactory::getButtonByName(this, "teleport_btn"); |
93 | mTeleportBtn->setClickedCallback(onClickTeleport); | 100 | mTeleportBtn->setClickedCallback(onClickTeleport); |
@@ -108,16 +115,54 @@ BOOL LLPanelPlace::postBuild() | |||
108 | // Default to no auction button. We'll show it if we get an auction id | 115 | // Default to no auction button. We'll show it if we get an auction id |
109 | mAuctionBtn->setVisible(FALSE); | 116 | mAuctionBtn->setVisible(FALSE); |
110 | 117 | ||
118 | // Temporary text to explain why the description panel is blank. | ||
119 | // mDescEditor->setText("Parcel information not available without server update"); | ||
120 | |||
111 | return TRUE; | 121 | return TRUE; |
112 | } | 122 | } |
113 | 123 | ||
124 | void LLPanelPlace::displayItemInfo(const LLInventoryItem* pItem) | ||
125 | { | ||
126 | mNameEditor->setText(pItem->getName()); | ||
127 | mDescEditor->setText(pItem->getDescription()); | ||
128 | } | ||
114 | 129 | ||
130 | // Use this for search directory clicks, because we are totally | ||
131 | // recycling the panel and don't need to use what's there. | ||
132 | // | ||
133 | // For SLURL clicks, don't call this, because we need to cache | ||
134 | // the location info from the user. | ||
135 | void LLPanelPlace::resetLocation() | ||
136 | { | ||
137 | mParcelID.setNull(); | ||
138 | mRequestedID.setNull(); | ||
139 | mRegionID.setNull(); | ||
140 | mLandmarkAssetID.setNull(); | ||
141 | mPosGlobal.clearVec(); | ||
142 | mPosRegion.clearVec(); | ||
143 | mAuctionID = 0; | ||
144 | } | ||
115 | 145 | ||
116 | void LLPanelPlace::setParcelID(const LLUUID& parcel_id) | 146 | void LLPanelPlace::setParcelID(const LLUUID& parcel_id) |
117 | { | 147 | { |
118 | mParcelID = parcel_id; | 148 | mParcelID = parcel_id; |
149 | sendParcelInfoRequest(); | ||
150 | } | ||
151 | |||
152 | void LLPanelPlace::setSnapshot(const LLUUID& snapshot_id) | ||
153 | { | ||
154 | mSnapshotCtrl->setImageAssetID(snapshot_id); | ||
155 | } | ||
156 | |||
157 | void LLPanelPlace::setName(const std::string& name) | ||
158 | { | ||
159 | mNameEditor->setText(name); | ||
119 | } | 160 | } |
120 | 161 | ||
162 | void LLPanelPlace::setLocationString(const std::string& location) | ||
163 | { | ||
164 | mLocationEditor->setText(location); | ||
165 | } | ||
121 | 166 | ||
122 | void LLPanelPlace::sendParcelInfoRequest() | 167 | void LLPanelPlace::sendParcelInfoRequest() |
123 | { | 168 | { |
@@ -136,6 +181,20 @@ void LLPanelPlace::sendParcelInfoRequest() | |||
136 | } | 181 | } |
137 | } | 182 | } |
138 | 183 | ||
184 | void LLPanelPlace::setErrorStatus(U32 status, const std::string& reason) | ||
185 | { | ||
186 | // We only really handle 404 and 499 errors | ||
187 | LLString error_text; | ||
188 | if(status == 404) | ||
189 | { | ||
190 | error_text = childGetText("server_error_text"); | ||
191 | } | ||
192 | else if(status == 499) | ||
193 | { | ||
194 | error_text = childGetText("server_forbidden_text"); | ||
195 | } | ||
196 | mDescEditor->setText(error_text); | ||
197 | } | ||
139 | 198 | ||
140 | //static | 199 | //static |
141 | void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) | 200 | void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) |
@@ -184,19 +243,28 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) | |||
184 | msg->getS32 ("Data", "SalePrice", sale_price); | 243 | msg->getS32 ("Data", "SalePrice", sale_price); |
185 | msg->getS32 ("Data", "AuctionID", auction_id); | 244 | msg->getS32 ("Data", "AuctionID", auction_id); |
186 | 245 | ||
187 | self->mPosGlobal.setVec(global_x, global_y, global_z); | ||
188 | 246 | ||
189 | self->mAuctionID = auction_id; | 247 | self->mAuctionID = auction_id; |
190 | 248 | ||
191 | self->mSnapshotCtrl->setImageAssetID(snapshot_id); | 249 | if(snapshot_id.notNull()) |
250 | { | ||
251 | self->mSnapshotCtrl->setImageAssetID(snapshot_id); | ||
252 | } | ||
253 | |||
254 | // Only assign the name and description if they are not empty and there is not a | ||
255 | // value present (passed in from a landmark, e.g.) | ||
256 | std::string name_str(name); | ||
257 | std::string desc_str(desc); | ||
192 | 258 | ||
193 | self->mNameEditor->setText(LLString(name)); | 259 | if(! name_str.empty() && ! self->mNameEditor->getText().empty()) |
260 | self->mNameEditor->setText(name_str); | ||
194 | 261 | ||
195 | self->mDescEditor->setText(LLString(desc)); | 262 | if(! desc_str.empty() && ! self->mDescEditor->getText().empty()) |
263 | self->mDescEditor->setText(desc_str); | ||
196 | 264 | ||
197 | LLString info_text; | 265 | LLString info_text; |
198 | LLUIString traffic = self->getUIString("traffic_text"); | 266 | LLUIString traffic = self->getUIString("traffic_text"); |
199 | traffic.setArg("[TRAFFIC]", llformat("%.0f", dwell)); | 267 | traffic.setArg("[TRAFFIC]", llformat("%d ", (int)dwell)); |
200 | info_text = traffic; | 268 | info_text = traffic; |
201 | LLUIString area = self->getUIString("area_text"); | 269 | LLUIString area = self->getUIString("area_text"); |
202 | area.setArg("[AREA]", llformat("%d", actual_area)); | 270 | area.setArg("[AREA]", llformat("%d", actual_area)); |
@@ -210,14 +278,11 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) | |||
210 | if (auction_id != 0) | 278 | if (auction_id != 0) |
211 | { | 279 | { |
212 | LLUIString auction = self->getUIString("auction_text"); | 280 | LLUIString auction = self->getUIString("auction_text"); |
213 | auction.setArg("[ID]", llformat("%010d", auction_id)); | 281 | auction.setArg("[ID]", llformat("%010d ", auction_id)); |
214 | info_text += auction; | 282 | info_text += auction; |
215 | } | 283 | } |
216 | self->mInfoEditor->setText(info_text); | 284 | self->mInfoEditor->setText(info_text); |
217 | 285 | ||
218 | S32 region_x = llround(global_x) % REGION_WIDTH_UNITS; | ||
219 | S32 region_y = llround(global_y) % REGION_WIDTH_UNITS; | ||
220 | S32 region_z = llround(global_z); | ||
221 | 286 | ||
222 | // HACK: Flag 0x1 == mature region, otherwise assume PG | 287 | // HACK: Flag 0x1 == mature region, otherwise assume PG |
223 | const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); | 288 | const char* rating = LLViewerRegion::accessToString(SIM_ACCESS_PG); |
@@ -226,8 +291,26 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) | |||
226 | rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); | 291 | rating = LLViewerRegion::accessToString(SIM_ACCESS_MATURE); |
227 | } | 292 | } |
228 | 293 | ||
229 | LLString location = llformat("%s %d, %d, %d (%s)", | 294 | // Just use given region position for display |
230 | sim_name, region_x, region_y, region_z, rating); | 295 | S32 region_x = llround(self->mPosRegion.mV[0]); |
296 | S32 region_y = llround(self->mPosRegion.mV[1]); | ||
297 | S32 region_z = llround(self->mPosRegion.mV[2]); | ||
298 | |||
299 | // If the region position is zero, grab position from the global | ||
300 | if(self->mPosRegion.isExactlyZero()) | ||
301 | { | ||
302 | region_x = llround(global_x) % REGION_WIDTH_UNITS; | ||
303 | region_y = llround(global_y) % REGION_WIDTH_UNITS; | ||
304 | region_z = llround(global_z); | ||
305 | } | ||
306 | |||
307 | if(self->mPosGlobal.isExactlyZero()) | ||
308 | { | ||
309 | self->mPosGlobal.setVec(global_x, global_y, global_z); | ||
310 | } | ||
311 | |||
312 | LLString location = llformat("%s %d, %d, %d (%s)", | ||
313 | sim_name, region_x, region_y, region_z, rating); | ||
231 | self->mLocationEditor->setText(location); | 314 | self->mLocationEditor->setText(location); |
232 | 315 | ||
233 | BOOL show_auction = (auction_id > 0); | 316 | BOOL show_auction = (auction_id > 0); |
@@ -236,12 +319,58 @@ void LLPanelPlace::processParcelInfoReply(LLMessageSystem *msg, void **) | |||
236 | } | 319 | } |
237 | 320 | ||
238 | 321 | ||
322 | void LLPanelPlace::displayParcelInfo(const LLVector3& pos_region, | ||
323 | const LLUUID& landmark_asset_id, | ||
324 | const LLUUID& region_id, | ||
325 | const LLVector3d& pos_global) | ||
326 | { | ||
327 | LLSD body; | ||
328 | mPosRegion = pos_region; | ||
329 | mPosGlobal = pos_global; | ||
330 | mLandmarkAssetID = landmark_asset_id; | ||
331 | std::string url = gAgent.getRegion()->getCapability("RemoteParcelRequest"); | ||
332 | if (!url.empty()) | ||
333 | { | ||
334 | body["location"] = ll_sd_from_vector3(pos_region); | ||
335 | if (!region_id.isNull()) | ||
336 | { | ||
337 | body["region_id"] = region_id; | ||
338 | } | ||
339 | if (!pos_global.isExactlyZero()) | ||
340 | { | ||
341 | U64 region_handle = to_region_handle(pos_global); | ||
342 | body["region_handle"] = ll_sd_from_U64(region_handle); | ||
343 | } | ||
344 | LLHTTPClient::post(url, body, new LLRemoteParcelRequestResponder(this->getHandle())); | ||
345 | } | ||
346 | else | ||
347 | { | ||
348 | mDescEditor->setText(childGetText("server_update_text")); | ||
349 | } | ||
350 | mSnapshotCtrl->setImageAssetID(LLUUID::null); | ||
351 | } | ||
352 | |||
353 | |||
239 | // static | 354 | // static |
240 | void LLPanelPlace::onClickTeleport(void* data) | 355 | void LLPanelPlace::onClickTeleport(void* data) |
241 | { | 356 | { |
242 | LLPanelPlace* self = (LLPanelPlace*)data; | 357 | LLPanelPlace* self = (LLPanelPlace*)data; |
243 | 358 | ||
244 | if (!self->mPosGlobal.isExactlyZero()) | 359 | LLView* parent_viewp = self->getParent(); |
360 | if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER) | ||
361 | { | ||
362 | LLFloater* parent_floaterp = (LLFloater*)parent_viewp; | ||
363 | parent_floaterp->close(); | ||
364 | } | ||
365 | // LLFloater* parent_floaterp = (LLFloater*)self->getParent(); | ||
366 | parent_viewp->setVisible(false); | ||
367 | if(self->mLandmarkAssetID.notNull()) | ||
368 | { | ||
369 | gAgent.teleportViaLandmark(self->mLandmarkAssetID); | ||
370 | gFloaterWorldMap->trackLandmark(self->mLandmarkAssetID); | ||
371 | |||
372 | } | ||
373 | else if (!self->mPosGlobal.isExactlyZero()) | ||
245 | { | 374 | { |
246 | gAgent.teleportViaLocation(self->mPosGlobal); | 375 | gAgent.teleportViaLocation(self->mPosGlobal); |
247 | gFloaterWorldMap->trackLocation(self->mPosGlobal); | 376 | gFloaterWorldMap->trackLocation(self->mPosGlobal); |
@@ -252,6 +381,12 @@ void LLPanelPlace::onClickTeleport(void* data) | |||
252 | void LLPanelPlace::onClickMap(void* data) | 381 | void LLPanelPlace::onClickMap(void* data) |
253 | { | 382 | { |
254 | LLPanelPlace* self = (LLPanelPlace*)data; | 383 | LLPanelPlace* self = (LLPanelPlace*)data; |
384 | LLView* parent_viewp = self->getParent(); | ||
385 | if (parent_viewp->getWidgetType() == WIDGET_TYPE_FLOATER) | ||
386 | { | ||
387 | LLFloater* parent_floaterp = (LLFloater*)parent_viewp; | ||
388 | parent_floaterp->close(); | ||
389 | } | ||
255 | 390 | ||
256 | if (!self->mPosGlobal.isExactlyZero()) | 391 | if (!self->mPosGlobal.isExactlyZero()) |
257 | { | 392 | { |