diff options
Diffstat (limited to '')
-rw-r--r-- | linden/indra/newview/llfloaterinspect.cpp | 132 |
1 files changed, 120 insertions, 12 deletions
diff --git a/linden/indra/newview/llfloaterinspect.cpp b/linden/indra/newview/llfloaterinspect.cpp index 51c7835..e22b8f6 100644 --- a/linden/indra/newview/llfloaterinspect.cpp +++ b/linden/indra/newview/llfloaterinspect.cpp | |||
@@ -161,10 +161,44 @@ void LLFloaterInspect::onClickOwnerProfile(void* ctrl) | |||
161 | } | 161 | } |
162 | } | 162 | } |
163 | 163 | ||
164 | void LLFloaterInspect::onClickLastOwnerProfile(void* ctrl) | ||
165 | { | ||
166 | if(sInstance->mObjectList->getAllSelected().size() == 0) return; | ||
167 | LLScrollListItem* first_selected = | ||
168 | sInstance->mObjectList->getFirstSelected(); | ||
169 | |||
170 | if (first_selected) | ||
171 | { | ||
172 | LLUUID selected_id = first_selected->getUUID(); | ||
173 | struct f : public LLSelectedNodeFunctor | ||
174 | { | ||
175 | LLUUID obj_id; | ||
176 | f(const LLUUID& id) : obj_id(id) {} | ||
177 | virtual bool apply(LLSelectNode* node) | ||
178 | { | ||
179 | return (obj_id == node->getObject()->getID()); | ||
180 | } | ||
181 | } func(selected_id); | ||
182 | LLSelectNode* node = sInstance->mObjectSelection->getFirstNode(&func); | ||
183 | if(node) | ||
184 | { | ||
185 | const LLUUID& last_owner_id = node->mPermissions->getLastOwner(); | ||
186 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | ||
187 | if (!gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)) | ||
188 | { | ||
189 | LLFloaterAvatarInfo::showFromDirectory(last_owner_id); | ||
190 | } | ||
191 | // [/RLVa:KB] | ||
192 | // LLFloaterAvatarInfo::showFromDirectory(owner_id); | ||
193 | } | ||
194 | } | ||
195 | } | ||
196 | |||
164 | BOOL LLFloaterInspect::postBuild() | 197 | BOOL LLFloaterInspect::postBuild() |
165 | { | 198 | { |
166 | mObjectList = getChild<LLScrollListCtrl>("object_list"); | 199 | mObjectList = getChild<LLScrollListCtrl>("object_list"); |
167 | childSetAction("button owner",onClickOwnerProfile, this); | 200 | childSetAction("button owner",onClickOwnerProfile, this); |
201 | childSetAction("button_last_owner",onClickLastOwnerProfile, this); | ||
168 | childSetAction("button creator",onClickCreatorProfile, this); | 202 | childSetAction("button creator",onClickCreatorProfile, this); |
169 | childSetCommitCallback("object_list", onSelectObject); | 203 | childSetCommitCallback("object_list", onSelectObject); |
170 | return TRUE; | 204 | return TRUE; |
@@ -175,8 +209,10 @@ void LLFloaterInspect::onSelectObject(LLUICtrl* ctrl, void* user_data) | |||
175 | if(LLFloaterInspect::getSelectedUUID() != LLUUID::null) | 209 | if(LLFloaterInspect::getSelectedUUID() != LLUUID::null) |
176 | { | 210 | { |
177 | //sInstance->childSetEnabled("button owner", true); | 211 | //sInstance->childSetEnabled("button owner", true); |
212 | //sInstance->childSetEnabled("button_last_owner", true); | ||
178 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e | 213 | // [RLVa:KB] - Checked: 2009-07-08 (RLVa-1.0.0e) | Added: RLVa-1.0.0e |
179 | sInstance->childSetEnabled("button owner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | 214 | sInstance->childSetEnabled("button owner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); |
215 | sInstance->childSetEnabled("button_last_owner", !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNAMES)); | ||
180 | // [/RLVa:KB] | 216 | // [/RLVa:KB] |
181 | sInstance->childSetEnabled("button creator", true); | 217 | sInstance->childSetEnabled("button creator", true); |
182 | } | 218 | } |
@@ -205,6 +241,7 @@ void LLFloaterInspect::refresh() | |||
205 | std::string creator_name; | 241 | std::string creator_name; |
206 | S32 pos = mObjectList->getScrollPos(); | 242 | S32 pos = mObjectList->getScrollPos(); |
207 | childSetEnabled("button owner", false); | 243 | childSetEnabled("button owner", false); |
244 | childSetEnabled("button_last_owner", false); | ||
208 | childSetEnabled("button creator", false); | 245 | childSetEnabled("button creator", false); |
209 | LLUUID selected_uuid; | 246 | LLUUID selected_uuid; |
210 | S32 selected_index = mObjectList->getFirstSelectedIndex(); | 247 | S32 selected_index = mObjectList->getFirstSelectedIndex(); |
@@ -226,7 +263,7 @@ void LLFloaterInspect::refresh() | |||
226 | LLSelectNode* obj = *iter; | 263 | LLSelectNode* obj = *iter; |
227 | LLSD row; | 264 | LLSD row; |
228 | char time[MAX_STRING]; | 265 | char time[MAX_STRING]; |
229 | std::string owner_name, creator_name; | 266 | std::string owner_name, creator_name, last_owner_name; |
230 | 267 | ||
231 | if (obj->mCreationDate == 0) | 268 | if (obj->mCreationDate == 0) |
232 | { // Don't have valid information from the server, so skip this one | 269 | { // Don't have valid information from the server, so skip this one |
@@ -245,12 +282,13 @@ void LLFloaterInspect::refresh() | |||
245 | } | 282 | } |
246 | // [/RLVa:KB] | 283 | // [/RLVa:KB] |
247 | gCacheName->getFullName(obj->mPermissions->getCreator(), creator_name); | 284 | gCacheName->getFullName(obj->mPermissions->getCreator(), creator_name); |
285 | gCacheName->getFullName(obj->mPermissions->getLastOwner(), last_owner_name); | ||
248 | row["id"] = obj->getObject()->getID(); | 286 | row["id"] = obj->getObject()->getID(); |
249 | row["columns"][0]["column"] = "object_name"; | 287 | row["columns"][0]["column"] = "object_name"; |
250 | row["columns"][0]["type"] = "text"; | 288 | row["columns"][0]["type"] = "text"; |
251 | // make sure we're either at the top of the link chain | 289 | // make sure we're either at the top of the link chain |
252 | // or top of the editable chain, for attachments | 290 | // or top of the editable chain, for attachments |
253 | if(!(obj->getObject()->isRoot() || obj->getObject()->isRootEdit())) | 291 | if (!(obj->getObject()->isRoot() || obj->getObject()->isRootEdit())) |
254 | { | 292 | { |
255 | row["columns"][0]["value"] = std::string(" ") + obj->mName; | 293 | row["columns"][0]["value"] = std::string(" ") + obj->mName; |
256 | } | 294 | } |
@@ -258,18 +296,56 @@ void LLFloaterInspect::refresh() | |||
258 | { | 296 | { |
259 | row["columns"][0]["value"] = obj->mName; | 297 | row["columns"][0]["value"] = obj->mName; |
260 | } | 298 | } |
261 | row["columns"][1]["column"] = "owner_name"; | 299 | S32 i = 1; |
262 | row["columns"][1]["type"] = "text"; | 300 | row["columns"][i]["column"] = "owner_name"; |
263 | row["columns"][1]["value"] = owner_name; | 301 | row["columns"][i]["type"] = "text"; |
264 | row["columns"][2]["column"] = "creator_name"; | 302 | row["columns"][i]["value"] = owner_name; |
265 | row["columns"][2]["type"] = "text"; | 303 | ++i; |
266 | row["columns"][2]["value"] = creator_name; | 304 | row["columns"][i]["column"] = "last_owner_name"; |
267 | row["columns"][3]["column"] = "creation_date"; | 305 | row["columns"][i]["type"] = "text"; |
268 | row["columns"][3]["type"] = "text"; | 306 | row["columns"][i]["value"] = last_owner_name; |
269 | row["columns"][3]["value"] = time; | 307 | ++i; |
308 | row["columns"][i]["column"] = "creator_name"; | ||
309 | row["columns"][i]["type"] = "text"; | ||
310 | row["columns"][i]["value"] = creator_name; | ||
311 | ++i; | ||
312 | row["columns"][i]["column"] = "face_num"; | ||
313 | row["columns"][i]["type"] = "text"; | ||
314 | row["columns"][i]["value"] = llformat("%d", obj->getObject()->getNumFaces()); | ||
315 | ++i; | ||
316 | row["columns"][i]["column"] = "vertex_num"; | ||
317 | row["columns"][i]["type"] = "text"; | ||
318 | row["columns"][i]["value"] = llformat("%d", obj->getObject()->getNumVertices()); | ||
319 | ++i; | ||
320 | // inventory silliness | ||
321 | S32 scripts = 0; | ||
322 | S32 total_inv = 0; | ||
323 | std::map<LLUUID, std::pair<S32, S32> >::iterator itr = mInventoryNums.find(obj->getObject()->getID()); | ||
324 | if (itr != mInventoryNums.end()) | ||
325 | { | ||
326 | scripts = itr->second.first; | ||
327 | total_inv = itr->second.second; | ||
328 | } | ||
329 | else if (std::find(mQueue.begin(), mQueue.end(), obj->getObject()->getID()) == mQueue.end()) | ||
330 | { | ||
331 | mQueue.push_back(obj->getObject()->getID()); | ||
332 | registerVOInventoryListener(obj->getObject(), NULL); | ||
333 | requestVOInventory(); | ||
334 | } | ||
335 | row["columns"][i]["column"] = "script_num"; | ||
336 | row["columns"][i]["type"] = "text"; | ||
337 | row["columns"][i]["value"] = llformat("%d", scripts); | ||
338 | ++i; | ||
339 | row["columns"][i]["column"] = "inv_num"; | ||
340 | row["columns"][i]["type"] = "text"; | ||
341 | row["columns"][i]["value"] = llformat("%d", total_inv); | ||
342 | ++i; | ||
343 | row["columns"][i]["column"] = "creation_date"; | ||
344 | row["columns"][i]["type"] = "text"; | ||
345 | row["columns"][i]["value"] = time; | ||
270 | mObjectList->addElement(row, ADD_TOP); | 346 | mObjectList->addElement(row, ADD_TOP); |
271 | } | 347 | } |
272 | if(selected_index > -1 && mObjectList->getItemIndex(selected_uuid) == selected_index) | 348 | if (selected_index > -1 && mObjectList->getItemIndex(selected_uuid) == selected_index) |
273 | { | 349 | { |
274 | mObjectList->selectNthItem(selected_index); | 350 | mObjectList->selectNthItem(selected_index); |
275 | } | 351 | } |
@@ -281,6 +357,36 @@ void LLFloaterInspect::refresh() | |||
281 | mObjectList->setScrollPos(pos); | 357 | mObjectList->setScrollPos(pos); |
282 | } | 358 | } |
283 | 359 | ||
360 | void LLFloaterInspect::inventoryChanged(LLViewerObject* viewer_object, | ||
361 | InventoryObjectList* inv, | ||
362 | S32, | ||
363 | void* q_id) | ||
364 | { | ||
365 | if (viewer_object && inv && !mQueue.empty()) | ||
366 | { | ||
367 | std::vector<LLUUID>::iterator vIt = std::find(mQueue.begin(), mQueue.end(), viewer_object->getID()); | ||
368 | if (vIt != mQueue.end() ) | ||
369 | { | ||
370 | S32 scripts = 0; | ||
371 | S32 inv_size = (inv->empty()) ? 0 : inv->size(); | ||
372 | |||
373 | InventoryObjectList::const_iterator it = inv->begin(); | ||
374 | InventoryObjectList::const_iterator end = inv->end(); | ||
375 | for ( ; it != end; ++it) | ||
376 | { | ||
377 | if ((*it)->getType() == LLAssetType::AT_LSL_TEXT) | ||
378 | { | ||
379 | scripts++; | ||
380 | } | ||
381 | } | ||
382 | |||
383 | mInventoryNums[viewer_object->getID()] = std::make_pair(scripts, inv_size); | ||
384 | mQueue.erase(vIt); | ||
385 | mDirty = TRUE; | ||
386 | } | ||
387 | } | ||
388 | } | ||
389 | |||
284 | void LLFloaterInspect::onFocusReceived() | 390 | void LLFloaterInspect::onFocusReceived() |
285 | { | 391 | { |
286 | LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance()); | 392 | LLToolMgr::getInstance()->setTransientTool(LLToolCompInspect::getInstance()); |
@@ -291,6 +397,8 @@ void LLFloaterInspect::dirty() | |||
291 | { | 397 | { |
292 | if(sInstance) | 398 | if(sInstance) |
293 | { | 399 | { |
400 | sInstance->mInventoryNums.clear(); | ||
401 | sInstance->mQueue.clear(); | ||
294 | sInstance->setDirty(); | 402 | sInstance->setDirty(); |
295 | } | 403 | } |
296 | } | 404 | } |