gui: allow listbox to be used as menu and as read-only list

Also enable string insertion for list items.

Example how to make a menu item:
<listitem name="Lights on!">
	<action>
		<action function="setbrightness">255</action>
	</action>
</listitem>

If no <data> element and no actions on any items exist, the list is
read only and no item selection is possible.

Change-Id: Ib2668a982df2514484d44faa0396dd17550f39f3
This commit is contained in:
that
2015-07-09 00:19:58 +02:00
committed by Dees Troy
parent f6b2066ff3
commit c01391c123
2 changed files with 18 additions and 6 deletions

View File

@@ -58,6 +58,8 @@ GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node)
// Get the currently selected value for the list
DataManager::GetValue(mVariable, currentValue);
}
else
allowSelection = false; // allows using listbox as a read-only list
// Get the data for the list
child = FindNode(node, "listitem");
@@ -66,15 +68,21 @@ GUIListBox::GUIListBox(xml_node<>* node) : GUIScrollList(node)
ListData data;
attr = child->first_attribute("name");
if (!attr) return;
data.displayName = attr->value();
data.variableValue = child->value();
if (!attr)
continue;
data.displayName = gui_parse_text(attr->value());
data.variableValue = gui_parse_text(child->value());
if (child->value() == currentValue) {
data.selected = 1;
} else {
data.selected = 0;
}
data.action = NULL;
xml_node<>* action = child->first_node("action");
if (action) {
data.action = new GUIAction(action);
allowSelection = true;
}
mList.push_back(data);
@@ -157,9 +165,12 @@ void GUIListBox::NotifySelect(size_t item_selected)
mList.at(i).selected = 0;
}
if (item_selected < mList.size()) {
mList.at(item_selected).selected = 1;
string str = mList.at(item_selected).variableValue;
ListData& data = mList.at(item_selected);
data.selected = 1;
string str = data.variableValue; // [check] should this set currentValue instead?
DataManager::SetValue(mVariable, str);
if (data.action)
data.action->doActions();
}
mUpdate = 1;
}

View File

@@ -634,6 +634,7 @@ protected:
std::string displayName;
std::string variableValue;
unsigned int selected;
GUIAction* action;
};
protected: