diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f2b8b146eb..3b097f9cd3 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -24692,6 +24692,17 @@ Change of this parameter will affect the layout of buttons in notification toast
Value
0
+ FSInspectColumnConfig
+
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 4ce7ea5edc..174fca669c 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -55,17 +55,42 @@
// PoundLife END
#include "llvovolume.h"
+// FIRE-22292: Configurable columns
+#include "llmenugl.h"
+#include "llmenubutton.h"
+#include "lltoggleablemenu.h"
+#include "llviewermenu.h" // for gMenuHolder
+//
+
//LLFloaterInspect* LLFloaterInspect::sInstance = NULL;
LLFloaterInspect::LLFloaterInspect(const LLSD& key)
: LLFloater(key),
mDirty(FALSE),
mOwnerNameCacheConnection(),
- mCreatorNameCacheConnection()
+ mCreatorNameCacheConnection(),
+ // FIRE-22292: Configurable columns
+ mOptionsButton(NULL),
+ mFSInspectColumnConfigConnection(),
+ 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));
+
+ // FIRE-22292: Configurable columns
+ 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()
@@ -74,6 +99,26 @@ BOOL LLFloaterInspect::postBuild()
// childSetAction("button owner",onClickOwnerProfile, this);
// childSetAction("button creator",onClickCreatorProfile, this);
// childSetCommitCallback("object_list", onSelectObject, NULL);
+
+ // FIRE-22292: Configurable columns
+ LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
+ LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar;
+
+ registrar.add("Inspect.ToggleColumn", boost::bind(&LLFloaterInspect::onColumnVisibilityChecked, this, _2));
+ enable_registrar.add("Inspect.EnableColumn", boost::bind(&LLFloaterInspect::onEnableColumnVisibilityChecked, this, _2));
+
+ mOptionsButton = getChild("options_btn");
+
+ LLToggleableMenu* options_menu = LLUICtrlFactory::getInstance()->createFromFile("menu_fs_inspect_options.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
+ if (options_menu)
+ {
+ mOptionsMenuHandle = options_menu->getHandle();
+ mOptionsButton->setMenu(options_menu, LLMenuButton::MP_BOTTOM_LEFT);
+ }
+
+ mFSInspectColumnConfigConnection = gSavedSettings.getControl("FSInspectColumnConfig")->getSignal()->connect(boost::bind(&LLFloaterInspect::onColumnDisplayModeChanged, this));
+ onColumnDisplayModeChanged();
+ //
refresh();
@@ -103,6 +148,15 @@ LLFloaterInspect::~LLFloaterInspect(void)
{
LLFloaterReg::showInstance("build", LLSD(), TRUE);
}
+
+ // FIRE-22292: Configurable columns
+ if (mFSInspectColumnConfigConnection.connected())
+ {
+ mFSInspectColumnConfigConnection.disconnect();
+ }
+
+ if (mOptionsMenuHandle.get()) mOptionsMenuHandle.get()->die();
+ //
}
void LLFloaterInspect::onOpen(const LLSD& key)
@@ -671,3 +725,103 @@ void LLFloaterInspect::draw()
LLFloater::draw();
}
+
+// FIRE-22292: Configurable columns
+void LLFloaterInspect::onColumnDisplayModeChanged()
+{
+ U32 column_config = gSavedSettings.getU32("FSInspectColumnConfig");
+ std::vector 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::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("FSInspectColumnConfig");
+
+ 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("FSInspectColumnConfig", new_value);
+}
+
+bool LLFloaterInspect::onEnableColumnVisibilityChecked(const LLSD& userdata)
+{
+ std::string column = userdata.asString();
+ U32 column_config = gSavedSettings.getU32("FSInspectColumnConfig");
+
+ return (mColumnBits[column] & column_config);
+}
+//
diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h
index 4ac6c2446c..a5316fe625 100644
--- a/indra/newview/llfloaterinspect.h
+++ b/indra/newview/llfloaterinspect.h
@@ -40,6 +40,7 @@ class LLUICtrl;
// [RLVa:KB] - Checked: RLVa-2.0.1
class LLSelectNode;
// [/RLVa:KB]
+class LLMenuButton; // FIRE-22292: Configurable columns
class LLFloaterInspect : public LLFloater
{
@@ -88,6 +89,19 @@ private:
LLSafeHandle mObjectSelection;
boost::signals2::connection mOwnerNameCacheConnection;
boost::signals2::connection mCreatorNameCacheConnection;
+
+ // FIRE-22292: Configurable columns
+ void onColumnDisplayModeChanged();
+ void onColumnVisibilityChecked(const LLSD& userdata);
+ bool onEnableColumnVisibilityChecked(const LLSD& userdata);
+
+ LLMenuButton* mOptionsButton;
+ LLHandle mOptionsMenuHandle;
+
+ std::map mColumnBits;
+ S32 mLastResizeDelta;
+ boost::signals2::connection mFSInspectColumnConfigConnection;
+ //
};
#endif //LL_LLFLOATERINSPECT_H
diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml
index d81372a9c2..d93fe2d26d 100644
--- a/indra/newview/skins/default/xui/de/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/de/floater_inspect.xml
@@ -35,4 +35,5 @@ VRAM: [VRAM_USAGE] KB
+
diff --git a/indra/newview/skins/default/xui/de/menu_fs_inspect_options.xml b/indra/newview/skins/default/xui/de/menu_fs_inspect_options.xml
new file mode 100644
index 0000000000..9a93b6652c
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_fs_inspect_options.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml
index 6932cd0353..aafcee22d3 100644
--- a/indra/newview/skins/default/xui/en/floater_inspect.xml
+++ b/indra/newview/skins/default/xui/en/floater_inspect.xml
@@ -107,12 +107,14 @@ VRAM: [VRAM_USAGE] KB
label=""
name="creation_date_sort"
width="-1" />
-
+
+
+
+
+
+
+
diff --git a/indra/newview/skins/default/xui/en/menu_fs_inspect_options.xml b/indra/newview/skins/default/xui/en/menu_fs_inspect_options.xml
new file mode 100644
index 0000000000..e8da0dd7c3
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_fs_inspect_options.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+