aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview/llfloaterinspect.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/llfloaterinspect.cpp132
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
164void 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
164BOOL LLFloaterInspect::postBuild() 197BOOL 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
360void 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
284void LLFloaterInspect::onFocusReceived() 390void 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}