diff --git a/indra/newview/app_settings/settings_alchemy.xml b/indra/newview/app_settings/settings_alchemy.xml index d91336951da6abf2146c68d09e70bfb60a670f39..59c3361f3b12c67b12d365f75dcc9a3c136eca63 100644 --- a/indra/newview/app_settings/settings_alchemy.xml +++ b/indra/newview/app_settings/settings_alchemy.xml @@ -1303,5 +1303,16 @@ <key>Value</key> <integer>1</integer> </map> + <key>ALInspectColumnConfig</key> + <map> + <key>Comment</key> + <string>Stores the column visibility of the inspect window</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>U32</string> + <key>Value</key> + <integer>1023</integer> + </map> </map> </llsd> diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp index 296351014ee4c844f6966ac7a6061d074ae19b63..1a532f0e55013e1ce61e1acc23bcda31cfadd775 100644 --- a/indra/newview/llfloaterinspect.cpp +++ b/indra/newview/llfloaterinspect.cpp @@ -47,6 +47,15 @@ #include "rlvcommon.h" #include "rlvui.h" // [/RLVa:KB] +#include "llresmgr.h" +#include "lltexturectrl.h" +#include "llviewerobjectlist.h" //gObjectList +#include "llviewertexturelist.h" +#include "llvovolume.h" +#include "llmenugl.h" +#include "llmenubutton.h" +#include "lltoggleablemenu.h" +#include "llviewermenu.h" // for gMenuHolder //LLFloaterInspect* LLFloaterInspect::sInstance = NULL; @@ -54,19 +63,39 @@ LLFloaterInspect::LLFloaterInspect(const LLSD& key) : LLFloater(key), mDirty(FALSE), mOwnerNameCacheConnection(), - mCreatorNameCacheConnection() + mCreatorNameCacheConnection(), + mOptionsButton(NULL), + mInspectColumnConfigConnection(), + mLastResizeDelta(0) { mCommitCallbackRegistrar.add("Inspect.OwnerProfile", boost::bind(&LLFloaterInspect::onClickOwnerProfile, this)); mCommitCallbackRegistrar.add("Inspect.CreatorProfile", boost::bind(&LLFloaterInspect::onClickCreatorProfile, this)); mCommitCallbackRegistrar.add("Inspect.SelectObject", boost::bind(&LLFloaterInspect::onSelectObject, this)); + + mCommitCallbackRegistrar.add("Inspect.ToggleColumn", boost::bind(&LLFloaterInspect::onColumnVisibilityChecked, this, _2)); + mEnableCallbackRegistrar.add("Inspect.EnableColumn", boost::bind(&LLFloaterInspect::onEnableColumnVisibilityChecked, this, _2)); + + mColumnBits["object_name"] = 1; + mColumnBits["description"] = 2; + mColumnBits["owner_name"] = 4; + mColumnBits["creator_name"] = 8; + mColumnBits["facecount"] = 16; + mColumnBits["vertexcount"] = 32; + mColumnBits["trianglecount"] = 64; + mColumnBits["tramcount"] = 128; + mColumnBits["vramcount"] = 256; + mColumnBits["creation_date"] = 512; } BOOL LLFloaterInspect::postBuild() { mObjectList = getChild<LLScrollListCtrl>("object_list"); -// childSetAction("button owner",onClickOwnerProfile, this); -// childSetAction("button creator",onClickCreatorProfile, this); -// childSetCommitCallback("object_list", onSelectObject, NULL); + + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + + mInspectColumnConfigConnection = gSavedSettings.getControl("ALInspectColumnConfig")->getSignal()->connect(boost::bind(&LLFloaterInspect::onColumnDisplayModeChanged, this)); + onColumnDisplayModeChanged(); refresh(); @@ -83,6 +112,10 @@ LLFloaterInspect::~LLFloaterInspect(void) { mCreatorNameCacheConnection.disconnect(); } + if (mInspectColumnConfigConnection.connected()) + { + mInspectColumnConfigConnection.disconnect(); + } if(!LLFloaterReg::instanceVisible("build")) { if(LLToolMgr::getInstance()->getBaseTool() == LLToolCompInspect::getInstance()) @@ -281,6 +314,23 @@ void LLFloaterInspect::refresh() { std::string creator_name; S32 pos = mObjectList->getScrollPos(); + LLLocale locale(""); + LLResMgr& res_mgr = LLResMgr::instance(); + LLSelectMgr& sel_mgr = LLSelectMgr::instance(); + S32 fcount = 0; + S32 fcount_visible = 0; + S32 tcount = 0; + S32 vcount = 0; + S32 objcount = 0; + S32 primcount = 0; + U32 complexity = 0; + mTextureList.clear(); + mTextureMemory = 0; + mTextureVRAMMemory = 0; + std::string format_res_string; + static LLCachedControl<F32> max_complexity_setting(gSavedSettings, "MaxAttachmentComplexity"); + F32 max_attachment_complexity = max_complexity_setting; + max_attachment_complexity = llmax(max_attachment_complexity, 1.0e6f); getChildView("button owner")->setEnabled(false); getChildView("button creator")->setEnabled(false); LLUUID selected_uuid; @@ -303,6 +353,7 @@ void LLFloaterInspect::refresh() LLSelectNode* obj = *iter; LLSD row; std::string owner_name, creator_name; + auto vobj = obj->getObject(); if (obj->mCreationDate == 0) { // Don't have valid information from the server, so skip this one @@ -325,7 +376,7 @@ void LLFloaterInspect::refresh() const LLUUID& idGroup = obj->mPermissions->getGroup(); if(gCacheName->getGroupName(idGroup, group_name)) { - owner_name = "[" + group_name + "] (group)"; + owner_name = "[" + group_name + "] " + getString("Group"); } else { @@ -380,12 +431,12 @@ void LLFloaterInspect::refresh() mCreatorNameCacheConnection = LLAvatarNameCache::get(idCreator, boost::bind(&LLFloaterInspect::onGetCreatorNameCallback, this)); } - row["id"] = obj->getObject()->getID(); + row["id"] = vobj->getID(); row["columns"][0]["column"] = "object_name"; row["columns"][0]["type"] = "text"; // make sure we're either at the top of the link chain // or top of the editable chain, for attachments - if(!(obj->getObject()->isRoot() || obj->getObject()->isRootEdit())) + if(!(vobj->isRoot() || vobj->isRootEdit())) { row["columns"][0]["value"] = std::string(" ") + obj->mName; } @@ -402,8 +453,113 @@ void LLFloaterInspect::refresh() row["columns"][3]["column"] = "creation_date"; row["columns"][3]["type"] = "text"; row["columns"][3]["value"] = timeStr; + row["columns"][4]["column"] = "description"; + row["columns"][4]["type"] = "text"; + row["columns"][4]["value"] = obj->mDescription; + row["columns"][5]["column"] = "creation_date_sort"; + row["columns"][5]["type"] = "text"; + row["columns"][5]["value"] = llformat("%d", timestamp); + + res_mgr.getIntegerString(format_res_string, vobj->getNumFaces()); + row["columns"][6]["column"] = "facecount"; + row["columns"][6]["type"] = "text"; + row["columns"][6]["value"] = format_res_string; + + res_mgr.getIntegerString(format_res_string, vobj->getNumVertices()); + row["columns"][7]["column"] = "vertexcount"; + row["columns"][7]["type"] = "text"; + row["columns"][7]["value"] = format_res_string; + + res_mgr.getIntegerString(format_res_string, vobj->getNumIndices() / 3); + row["columns"][8]["column"] = "trianglecount"; + row["columns"][8]["type"] = "text"; + row["columns"][8]["value"] = format_res_string; + + // Poundlife - Get VRAM + U32 texture_memory = 0; + U32 vram_memory = 0; + getObjectTextureMemory(vobj, texture_memory, vram_memory); + res_mgr.getIntegerString(format_res_string, texture_memory / 1024); + row["columns"][9]["column"] = "tramcount"; + row["columns"][9]["type"] = "text"; + row["columns"][9]["value"] = format_res_string; + + res_mgr.getIntegerString(format_res_string, vram_memory / 1024); + row["columns"][10]["column"] = "vramcount"; + row["columns"][10]["type"] = "text"; + row["columns"][10]["value"] = format_res_string; + + row["columns"][11]["column"] = "facecount_sort"; + row["columns"][11]["type"] = "text"; + row["columns"][11]["value"] = LLSD::Integer(vobj->getNumFaces()); + + row["columns"][12]["column"] = "vertexcount_sort"; + row["columns"][12]["type"] = "text"; + row["columns"][12]["value"] = LLSD::Integer(vobj->getNumVertices()); + + row["columns"][13]["column"] = "trianglecount_sort"; + row["columns"][13]["type"] = "text"; + row["columns"][13]["value"] = LLSD::Integer(vobj->getNumIndices() / 3); + + row["columns"][14]["column"] = "tramcount_sort"; + row["columns"][14]["type"] = "text"; + row["columns"][14]["value"] = LLSD::Integer(texture_memory / 1024); + + row["columns"][15]["column"] = "vramcount_sort"; + row["columns"][15]["type"] = "text"; + row["columns"][15]["value"] = LLSD::Integer(vram_memory / 1024); + + primcount = sel_mgr.getSelection()->getObjectCount(); + objcount = sel_mgr.getSelection()->getRootObjectCount(); + fcount += vobj->getNumFaces(); + fcount_visible += vobj->getNumVisibleFaces(); + tcount += vobj->getNumIndices() / 3; + vcount += vobj->getNumVertices(); + mObjectList->addElement(row, ADD_TOP); } + + for (LLObjectSelection::valid_root_iterator root_it = mObjectSelection->valid_root_begin(); root_it != mObjectSelection->valid_root_end(); ++root_it) + { + LLSelectNode* obj = *root_it; + LLVOVolume* volume = dynamic_cast<LLVOVolume*>(obj->getObject()); + if (volume) + { + LLVOVolume::texture_cost_t textures; + F32 attachment_total_cost = 0; + F32 attachment_volume_cost = 0; + F32 attachment_texture_cost = 0; + F32 attachment_children_cost = 0; + + attachment_volume_cost += volume->getRenderCost(textures); + + LLViewerObject::const_child_list_t children = volume->getChildren(); + for (LLViewerObject::const_child_list_t::const_iterator child_iter = children.begin(); + child_iter != children.end(); + ++child_iter) + { + LLViewerObject* child_obj = *child_iter; + LLVOVolume *child = dynamic_cast<LLVOVolume*>(child_obj); + if (child) + { + attachment_children_cost += child->getRenderCost(textures); + } + } + + for (LLVOVolume::texture_cost_t::iterator volume_texture = textures.begin(); + volume_texture != textures.end(); + ++volume_texture) + { + // add the cost of each individual texture in the linkset + attachment_texture_cost += volume_texture->second; + } + attachment_total_cost = attachment_volume_cost + attachment_texture_cost + attachment_children_cost; + + // Limit attachment complexity to avoid signed integer flipping of the wearer's ACI + complexity += (U32)llclamp(attachment_total_cost, 0.f, max_attachment_complexity); + } + } + if(selected_index > -1 && mObjectList->getItemIndex(selected_uuid) == selected_index) { mObjectList->selectNthItem(selected_index); @@ -414,6 +570,111 @@ void LLFloaterInspect::refresh() } onSelectObject(); mObjectList->setScrollPos(pos); + + LLStringUtil::format_map_t args; + res_mgr.getIntegerString(format_res_string, objcount); + args["NUM_OBJECTS"] = format_res_string; + res_mgr.getIntegerString(format_res_string, primcount); + args["NUM_PRIMS"] = format_res_string; + res_mgr.getIntegerString(format_res_string, fcount_visible); + args["NUM_VISIBLE_FACES"] = format_res_string; + res_mgr.getIntegerString(format_res_string, fcount); + args["NUM_FACES"] = format_res_string; + res_mgr.getIntegerString(format_res_string, vcount); + args["NUM_VERTICES"] = format_res_string; + res_mgr.getIntegerString(format_res_string, tcount); + args["NUM_TRIANGLES"] = format_res_string; + res_mgr.getIntegerString(format_res_string, mTextureList.size()); + args["NUM_TEXTURES"] = format_res_string; + res_mgr.getIntegerString(format_res_string, mTextureMemory / 1024); + args["TEXTURE_MEMORY"] = format_res_string; + res_mgr.getIntegerString(format_res_string, mTextureVRAMMemory / 1024); + args["VRAM_USAGE"] = format_res_string; + res_mgr.getIntegerString(format_res_string, complexity); + args["COMPLEXITY"] = format_res_string; + getChild<LLTextBase>("linksetstats_text")->setText(getString("stats_list", args)); +} + +void LLFloaterInspect::getObjectTextureMemory(LLViewerObject* object, U32& object_texture_memory, U32& object_vram_memory) +{ + uuid_vec_t object_texture_list; + + if (!object) + { + return; + } + + LLUUID uuid; + U8 te_count = object->getNumTEs(); + + for (U8 j = 0; j < te_count; j++) + { + LLViewerTexture* img = object->getTEImage(j); + if (img) + { + calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory); + } + + // materials per face + if (object->getTE(j)->getMaterialParams().notNull()) + { + uuid = object->getTE(j)->getMaterialParams()->getNormalID(); + if (uuid.notNull()) + { + LLViewerTexture* img = gTextureList.findImage(uuid, TEX_LIST_STANDARD); + if (img) + { + calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory); + } + } + + uuid = object->getTE(j)->getMaterialParams()->getSpecularID(); + if (uuid.notNull()) + { + LLViewerTexture* img = gTextureList.findImage(uuid, TEX_LIST_STANDARD); + if (img) + { + calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory); + } + } + } + } + + // sculpt map + if (object->isSculpted() && !object->isMesh()) + { + const LLSculptParams* sculpt_params = object->getSculptParams(); + if (sculpt_params) + { + uuid = sculpt_params->getSculptTexture(); + LLViewerTexture* img = gTextureList.findImage(uuid, TEX_LIST_STANDARD); + if (img) + { + calculateTextureMemory(img, object_texture_list, object_texture_memory, object_vram_memory); + } + } + } +} + +void LLFloaterInspect::calculateTextureMemory(LLViewerTexture* texture, uuid_vec_t& object_texture_list, U32& object_texture_memory, U32& object_vram_memory) +{ + const LLUUID uuid = texture->getID(); + U32 vram_memory = (texture->getFullHeight() * texture->getFullWidth() * 32 / 8); + U32 texture_memory = (texture->getFullHeight() * texture->getFullWidth() * texture->getComponents()); + + if (std::find(mTextureList.begin(), mTextureList.end(), uuid) == mTextureList.end()) + { + mTextureList.push_back(uuid); + mTextureMemory += texture_memory; + mTextureVRAMMemory += vram_memory; + } + + if (std::find(object_texture_list.begin(), object_texture_list.end(), uuid) == object_texture_list.end()) + { + object_texture_list.push_back(uuid); + object_texture_memory += texture_memory; + object_vram_memory += vram_memory; + } } void LLFloaterInspect::onFocusReceived() @@ -449,3 +710,101 @@ void LLFloaterInspect::draw() LLFloater::draw(); } + +void LLFloaterInspect::onColumnDisplayModeChanged() +{ + U32 column_config = gSavedSettings.getU32("ALInspectColumnConfig"); + std::vector<LLScrollListColumn::Params> column_params = mObjectList->getColumnInitParams(); + S32 column_padding = mObjectList->getColumnPadding(); + + S32 default_width = 0; + S32 new_width = 0; + S32 min_width, min_height; + getResizeLimits(&min_width, &min_height); + + std::string current_sort_col = mObjectList->getSortColumnName(); + BOOL current_sort_asc = mObjectList->getSortAscending(); + + mObjectList->clearRows(); + mObjectList->clearColumns(); + mObjectList->updateLayout(); + + std::vector<LLScrollListColumn::Params>::iterator param_it; + for (param_it = column_params.begin(); param_it != column_params.end(); ++param_it) + { + LLScrollListColumn::Params p = *param_it; + default_width += (p.width.pixel_width.getValue() + column_padding); + + LLScrollListColumn::Params params; + params.header = p.header; + params.name = p.name; + params.halign = p.halign; + params.sort_direction = p.sort_direction; + params.sort_column = p.sort_column; + params.tool_tip = p.tool_tip; + + if (column_config & mColumnBits[p.name.getValue()]) + { + params.width = p.width; + new_width += (params.width.pixel_width.getValue() + column_padding); + } + else + { + params.width.pixel_width.set(-1, true); + } + + mObjectList->addColumn(params); + } + + min_width -= (default_width - new_width - mLastResizeDelta); + mLastResizeDelta = default_width - new_width; + setResizeLimits(min_width, min_height); + + if (getRect().getWidth() < min_width) + { + reshape(min_width, getRect().getHeight()); + } + + if (!current_sort_col.empty()) + { + if ((current_sort_col == "creation_date_sort" && mObjectList->getColumn("creation_date")->getWidth() == -1) || + mObjectList->getColumn(current_sort_col)->getWidth() == -1) + { + mObjectList->clearSortOrder(); + } + else + { + mObjectList->sortByColumn(current_sort_col, current_sort_asc); + } + } + mObjectList->setFilterColumn(0); + mObjectList->dirtyColumns(); + setDirty(); +} + +void LLFloaterInspect::onColumnVisibilityChecked(const LLSD& userdata) +{ + std::string column = userdata.asString(); + U32 column_config = gSavedSettings.getU32("ALInspectColumnConfig"); + + U32 new_value; + U32 enabled = (mColumnBits[column] & column_config); + if (enabled) + { + new_value = (column_config & ~mColumnBits[column]); + } + else + { + new_value = (column_config | mColumnBits[column]); + } + + gSavedSettings.setU32("ALInspectColumnConfig", new_value); +} + +bool LLFloaterInspect::onEnableColumnVisibilityChecked(const LLSD& userdata) +{ + std::string column = userdata.asString(); + U32 column_config = gSavedSettings.getU32("ALInspectColumnConfig"); + + return (mColumnBits[column] & column_config); +} diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h index d05f9800c36da2e05ae6e35752358992630cc0e0..4da9f292e474a61d666fa69c786fdf0a62d37e2a 100644 --- a/indra/newview/llfloaterinspect.h +++ b/indra/newview/llfloaterinspect.h @@ -31,6 +31,7 @@ #include "llavatarname.h" #include "llfloater.h" +#include "llviewerobject.h" // PoundLife - Improved Object Inspect //class LLTool; class LLObjectSelection; @@ -39,6 +40,7 @@ class LLUICtrl; // [RLVa:KB] - Checked: RLVa-2.0.1 class LLSelectNode; // [/RLVa:KB] +class LLMenuButton; // <FS:Ansariel> FIRE-22292: Configurable columns class LLFloaterInspect final : public LLFloater { @@ -58,6 +60,7 @@ class LLFloaterInspect final : public LLFloater void onClickOwnerProfile(); void onSelectObject(); + U64 mStatsMemoryTotal; LLScrollListCtrl* mObjectList; protected: // protected members @@ -69,6 +72,11 @@ class LLFloaterInspect final : public LLFloater // [/RLVa:KB] private: + void getObjectTextureMemory(LLViewerObject* object, U32& object_texture_memory, U32& object_vram_memory); + void calculateTextureMemory(LLViewerTexture* texture, uuid_vec_t& object_texture_list, U32& object_texture_memory, U32& object_vram_memory); + uuid_vec_t mTextureList; + U32 mTextureMemory; + U32 mTextureVRAMMemory; void onGetOwnerNameCallback(); void onGetCreatorNameCallback(); @@ -78,6 +86,16 @@ class LLFloaterInspect final : public LLFloater LLSafeHandle<LLObjectSelection> mObjectSelection; boost::signals2::connection mOwnerNameCacheConnection; boost::signals2::connection mCreatorNameCacheConnection; + boost::signals2::connection mInspectColumnConfigConnection; + + void onColumnDisplayModeChanged(); + void onColumnVisibilityChecked(const LLSD& userdata); + bool onEnableColumnVisibilityChecked(const LLSD& userdata); + + LLMenuButton* mOptionsButton; + + std::map<std::string, U32> mColumnBits; + S32 mLastResizeDelta; }; #endif //LL_LLFLOATERINSPECT_H diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index 068774d81e71de398b883432bd000c90dced51da..9bc213f82788aa56844bbae33f3bdc4bec600513 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -516,6 +516,23 @@ void LLViewerObject::markDead() } } +S32 LLViewerObject::getNumVisibleFaces() const +{ + int v{0}; + if(mDrawable.notNull()) + { + for (int i = 0;i < mDrawable->getNumFaces();i++) + { + const LLFace* f = mDrawable->getFace(i); + if (f && f->getTextureEntry() && f->getTextureEntry()->getAlpha() != 0.0f) + { + v++; + } + } + } + return v; +}; + void LLViewerObject::dump() const { LL_INFOS() << "Type: " << pCodeToString(mPrimitiveCode) << LL_ENDL; diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 26f46a29ade27474309b6fbe079ed4de27d568ea..18eaaee817feda7068c8fe102b022382fa75f370 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -210,6 +210,7 @@ class LLViewerObject virtual U32 getNumVertices() const; virtual U32 getNumIndices() const; S32 getNumFaces() const { return mNumFaces; } + S32 getNumVisibleFaces() const; // Graphical stuff for objects - maybe broken out into render class later? virtual void updateTextures(); diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml index 802a6649c8ab65c0e2de397bb11fc0915fe1017c..d4a615909872edf954bd337f7071d896e95453ca 100644 --- a/indra/newview/skins/default/xui/en/floater_inspect.xml +++ b/indra/newview/skins/default/xui/en/floater_inspect.xml @@ -2,73 +2,173 @@ <floater legacy_header_height="18" can_resize="true" - height="300" + height="272" layout="topleft" min_height="300" - min_width="400" + min_width="610" name="inspect" help_topic="inspect" save_rect="true" - title="INSPECT OBJECTS" - width="400"> + title="Inspect Objects" + width="610"> <floater.string name="timeStamp"> - [wkday,datetime,slt] [mth,datetime,slt] [day,datetime,slt] [hour,datetime,slt]:[min,datetime,slt]:[second,datetime,slt] [year,datetime,slt] + [year,datetime,slt] [mth,datetime,slt] [day,datetime,slt], [hour,datetime,slt]:[min,datetime,slt]:[second,datetime,slt], [wkday,datetime,slt] </floater.string> + <floater.string + name="Group"> + (Group) + </floater.string> + <floater.string name="stats_list"> + Total stats: + +[NUM_OBJECTS] objects, [NUM_PRIMS] prims + +Faces: [NUM_FACES] +Visible: [NUM_VISIBLE_FACES] +Vertices: [NUM_VERTICES] +Triangles: [NUM_TRIANGLES] +Complex.: [COMPLEXITY] + +Textures: [NUM_TEXTURES] +TMem: [TEXTURE_MEMORY] KB +VRAM: [VRAM_USAGE] KB + </floater.string> + <text_editor + top="24" + left="5" + width="130" + height="189" + layout="topleft" + follows="left|top|bottom" + name="linksetstats_text" + max_length="2048" + bg_visible="false" + border_visible="true" + allow_scroll="true" + h_pad="2" + v_pad="2" + read_only="true" + tab_stop="false" + value="(loading...)" + word_wrap="true"/> <scroll_list - bottom="268" + top="24" + height="243" column_padding="0" draw_heading="true" follows="top|right|left|bottom" layout="topleft" - left="10" + left_pad="6" name="object_list" - right="-10" - tool_tip="Select an object from this list to highlight it in-world" - top="20"> + right="-6" + tool_tip="Select an object from this list to highlight it in-world"> <scroll_list.columns - relative_width="0.25" + dynamic_width="true" label="Object Name" name="object_name" /> <scroll_list.columns - relative_width="0.25" + dynamic_width="true" + label="Description" + name="description" /> + <scroll_list.columns + dynamic_width="true" label="Owner Name" name="owner_name" /> <scroll_list.columns - relative_width="0.25" + dynamic_width="true" label="Creator Name" name="creator_name" /> <scroll_list.columns - relative_width="0.25" + label="Faces" + name="facecount" + width="45" + sort_column="facecount_sort"/> + <scroll_list.columns + label="Vertices" + name="vertexcount" + width="55" + sort_column="vertexcount_sort"/> + <scroll_list.columns + label="Triangles" + name="trianglecount" + width="55" + sort_column="trianglecount_sort"/> + <scroll_list.columns + label="TMem" + name="tramcount" + width="55" + sort_column="tramcount_sort"/> + <scroll_list.columns + label="VRAM" + name="vramcount" + width="55" + sort_column="vramcount_sort"/> + <scroll_list.columns label="Creation Date" - name="creation_date" /> - <scroll_list.commit_callback - function="Inspect.SelectObject" /> + name="creation_date" + dynamic_width="true" + sort_column="creation_date_sort"/> + <scroll_list.columns + label="" + name="facecount_sort" + width="-1" /> + <scroll_list.columns + label="" + name="vertexcount_sort" + width="-1" /> + <scroll_list.columns + label="" + name="trianglecount_sort" + width="-1" /> + <scroll_list.columns + label="" + name="tramcount_sort" + width="-1" /> + <scroll_list.columns + label="" + name="vramcount_sort" + width="-1" /> + <scroll_list.columns + label="" + name="creation_date_sort" + width="-1" /> + <scroll_list.commit_callback + function="Inspect.SelectObject" /> </scroll_list> + <menu_button + menu_filename="menu_inspect_options.xml" + follows="left|top" + height="23" + image_overlay="Conv_toolbar_sort" + layout="topleft" + name="options_btn" + tool_tip="Options" + top="24" + left="103" + width="31" /> <button follows="left|bottom" height="23" label="See Owner Profile..." layout="topleft" - left_delta="-1" + left="4" name="button owner" tool_tip="See profile of the highlighted object's owner" - top_pad="4" - width="150"> - <button.commit_callback - function="Inspect.OwnerProfile" /> - </button> + top="217" + width="130"> + <button.commit_callback + function="Inspect.OwnerProfile" /> + </button> <button follows="left|bottom" height="23" label="See Creator Profile..." layout="topleft" - left_pad="5" name="button creator" tool_tip="See profile of the highlighted object's original creator" - top_delta="0" - width="150"> - <button.commit_callback - function="Inspect.CreatorProfile" /> - </button> + width="130"> + <button.commit_callback + function="Inspect.CreatorProfile" /> + </button> </floater> diff --git a/indra/newview/skins/default/xui/en/menu_inspect_options.xml b/indra/newview/skins/default/xui/en/menu_inspect_options.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8da0dd7c3a3ca5c4f38cf987cdc3a07a31009d1 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_inspect_options.xml @@ -0,0 +1,94 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<toggleable_menu + name="menu_group_plus"> + <menu_item_check + label="Description" + name="description"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="description"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="description"/> + </menu_item_check> + <menu_item_check + label="Owner Name" + name="owner_name"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="owner_name"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="owner_name"/> + </menu_item_check> + <menu_item_check + label="Creator Name" + name="creator_name"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="creator_name"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="creator_name"/> + </menu_item_check> + <menu_item_check + label="Faces" + name="facecount"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="facecount"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="facecount"/> + </menu_item_check> + <menu_item_check + label="Vertices" + name="vertexcount"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="vertexcount"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="vertexcount"/> + </menu_item_check> + <menu_item_check + label="Triangles" + name="trianglecount"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="trianglecount"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="trianglecount"/> + </menu_item_check> + <menu_item_check + label="TMem" + name="tramcount"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="tramcount"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="tramcount"/> + </menu_item_check> + <menu_item_check + label="VRAM" + name="vramcount"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="vramcount"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="vramcount"/> + </menu_item_check> + <menu_item_check + label="Creation Date" + name="creation_date"> + <menu_item_check.on_check + function="Inspect.EnableColumn" + parameter="creation_date"/> + <menu_item_check.on_click + function="Inspect.ToggleColumn" + parameter="creation_date"/> + </menu_item_check> +</toggleable_menu>