summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/llui/llscrolllistctrl.cpp15
-rw-r--r--indra/llui/llscrolllistctrl.h1
-rw-r--r--indra/newview/llfloaterluascripts.cpp16
-rw-r--r--indra/newview/skins/default/xui/en/floater_lua_scripts.xml1
4 files changed, 27 insertions, 6 deletions
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
index 8093536868..3ed328e37f 100644
--- a/indra/llui/llscrolllistctrl.cpp
+++ b/indra/llui/llscrolllistctrl.cpp
@@ -423,6 +423,19 @@ std::vector<LLScrollListItem*> LLScrollListCtrl::getAllSelected() const
return ret;
}
+std::vector<LLSD> LLScrollListCtrl::getAllSelectedValues() const
+{
+ std::vector<LLSD> ret;
+ for (LLScrollListItem* item : mItemList)
+ {
+ if (item->getSelected())
+ {
+ ret.push_back(item->getValue());
+ }
+ }
+ return ret;
+}
+
S32 LLScrollListCtrl::getNumSelected() const
{
S32 numSelected = 0;
@@ -1510,7 +1523,7 @@ bool LLScrollListCtrl::setSelectedByValue(const LLSD& value, bool selected)
{
if (selected)
{
- selectItem(item, -1);
+ selectItem(item, -1, !mAllowMultipleSelection);
}
else
{
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
index bfae08ab5b..badaf31657 100644
--- a/indra/llui/llscrolllistctrl.h
+++ b/indra/llui/llscrolllistctrl.h
@@ -284,6 +284,7 @@ public:
LLScrollListItem* getFirstSelected() const;
virtual S32 getFirstSelectedIndex() const;
std::vector<LLScrollListItem*> getAllSelected() const;
+ std::vector<LLSD> getAllSelectedValues() const;
S32 getNumSelected() const;
LLScrollListItem* getLastSelectedItem() const { return mLastSelected; }
diff --git a/indra/newview/llfloaterluascripts.cpp b/indra/newview/llfloaterluascripts.cpp
index 0eba45ec29..6b3d87543a 100644
--- a/indra/newview/llfloaterluascripts.cpp
+++ b/indra/newview/llfloaterluascripts.cpp
@@ -51,9 +51,9 @@ LLFloaterLUAScripts::LLFloaterLUAScripts(const LLSD &key)
}, cb_info::UNTRUSTED_BLOCK });
mCommitCallbackRegistrar.add("Script.Terminate", {[this](LLUICtrl*, const LLSD &userdata)
{
- if (mScriptList->hasSelectedItem())
+ std::vector<LLSD> coros = mScriptList->getAllSelectedValues();
+ for (auto coro_name : coros)
{
- std::string coro_name = mScriptList->getSelectedValue();
LLCoros::instance().killreq(coro_name);
}
}, cb_info::UNTRUSTED_BLOCK });
@@ -97,7 +97,7 @@ void LLFloaterLUAScripts::draw()
void LLFloaterLUAScripts::populateScriptList()
{
S32 prev_pos = mScriptList->getScrollPos();
- LLSD prev_selected = mScriptList->getSelectedValue();
+ std::vector<LLSD> prev_selected = mScriptList->getAllSelectedValues();
mScriptList->clearRows();
mScriptList->updateColumns(true);
std::map<std::string, std::string> scripts = LLLUAmanager::getScriptNames();
@@ -112,7 +112,10 @@ void LLFloaterLUAScripts::populateScriptList()
mScriptList->addElement(row);
}
mScriptList->setScrollPos(prev_pos);
- mScriptList->setSelectedByValue(prev_selected, true);
+ for (auto value : prev_selected)
+ {
+ mScriptList->setSelectedByValue(value, true);
+ }
}
void LLFloaterLUAScripts::onScrollListRightClicked(LLUICtrl *ctrl, S32 x, S32 y)
@@ -120,10 +123,13 @@ void LLFloaterLUAScripts::onScrollListRightClicked(LLUICtrl *ctrl, S32 x, S32 y)
LLScrollListItem *item = mScriptList->hitItem(x, y);
if (item)
{
- mScriptList->selectItemAt(x, y, MASK_NONE);
+ if (!item->getSelected())
+ mScriptList->selectItemAt(x, y, MASK_NONE);
+
auto menu = mContextMenuHandle.get();
if (menu)
{
+ menu->setItemEnabled(std::string("open_folder"), (mScriptList->getNumSelected() == 1));
menu->show(x, y);
LLMenuGL::showPopup(this, menu, x, y);
}
diff --git a/indra/newview/skins/default/xui/en/floater_lua_scripts.xml b/indra/newview/skins/default/xui/en/floater_lua_scripts.xml
index 6859201650..211cea75d8 100644
--- a/indra/newview/skins/default/xui/en/floater_lua_scripts.xml
+++ b/indra/newview/skins/default/xui/en/floater_lua_scripts.xml
@@ -22,6 +22,7 @@
follows="all"
layout="topleft"
sort_column="script_name"
+ multi_select="true"
name="scripts_list"
top_pad="10"
width="535">