SL_6109 Rebinding
parent
b9294516fc
commit
3633ccf1a1
|
|
@ -52,6 +52,7 @@
|
|||
#include "llfavoritesbar.h"
|
||||
#include "llfloatersidepanelcontainer.h"
|
||||
#include "llfloaterimsession.h"
|
||||
#include "llkeybindings.h"
|
||||
#include "llkeyboard.h"
|
||||
#include "llmodaldialog.h"
|
||||
#include "llnavigationbar.h"
|
||||
|
|
@ -168,6 +169,7 @@ public:
|
|||
/*virtual*/ BOOL postBuild();
|
||||
|
||||
void setParent(LLFloaterPreference* parent) { mParent = parent; }
|
||||
void setTmpParent(LLPanelPreferenceControls* parent) { mTmpParent = parent; } // todo: voice key will be removed, class renamved, so it will have only one parent
|
||||
|
||||
BOOL handleKeyHere(KEY key, MASK mask);
|
||||
BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down);
|
||||
|
|
@ -175,11 +177,13 @@ public:
|
|||
|
||||
private:
|
||||
LLFloaterPreference* mParent;
|
||||
LLPanelPreferenceControls* mTmpParent;// todo: voice key will be removed, class renamved, so it will have only one parent
|
||||
};
|
||||
|
||||
LLVoiceSetKeyDialog::LLVoiceSetKeyDialog(const LLSD& key)
|
||||
: LLModalDialog(key),
|
||||
mParent(NULL)
|
||||
mParent(NULL),
|
||||
mTmpParent(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -201,15 +205,30 @@ LLVoiceSetKeyDialog::~LLVoiceSetKeyDialog()
|
|||
BOOL LLVoiceSetKeyDialog::handleKeyHere(KEY key, MASK mask)
|
||||
{
|
||||
BOOL result = TRUE;
|
||||
|
||||
if (key == KEY_CONTROL || key == KEY_SHIFT || key == KEY_ALT || key == KEY_NONE)
|
||||
{
|
||||
// temp
|
||||
return false;
|
||||
}
|
||||
|
||||
// todo, same for escape
|
||||
if (key == 'Q' && mask == MASK_CONTROL)
|
||||
{
|
||||
result = FALSE;
|
||||
}
|
||||
if (mTmpParent)
|
||||
{
|
||||
mTmpParent->onSetKey(KEY_NONE, MASK_NONE);
|
||||
}
|
||||
}
|
||||
else if (mParent)
|
||||
{
|
||||
mParent->setKey(key);
|
||||
}
|
||||
else if (mTmpParent)
|
||||
{
|
||||
mTmpParent->onSetKey(key, mask);
|
||||
}
|
||||
closeFloater();
|
||||
return result;
|
||||
}
|
||||
|
|
@ -217,11 +236,38 @@ BOOL LLVoiceSetKeyDialog::handleKeyHere(KEY key, MASK mask)
|
|||
BOOL LLVoiceSetKeyDialog::handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down)
|
||||
{
|
||||
BOOL result = FALSE;
|
||||
if (down
|
||||
&& (clicktype == CLICK_MIDDLE || clicktype == CLICK_BUTTON4 || clicktype == CLICK_BUTTON5)
|
||||
&& mask == 0)
|
||||
|
||||
if (clicktype == CLICK_LEFT)
|
||||
{
|
||||
mParent->setMouse(clicktype);
|
||||
if (down)
|
||||
{
|
||||
result = LLView::handleMouseDown(x, y, mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = LLView::handleMouseUp(x, y, mask);
|
||||
}
|
||||
}
|
||||
if (clicktype == LLMouseHandler::CLICK_LEFT)
|
||||
{
|
||||
result = LLView::handleDoubleClick(x, y, mask);
|
||||
}
|
||||
if (result)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
if (down && clicktype != LLMouseHandler::CLICK_RIGHT) //tmp
|
||||
//&& (clicktype == LLMouseHandler::CLICK_MIDDLE || clicktype == LLMouseHandler::CLICK_BUTTON4 || clicktype == LLMouseHandler::CLICK_BUTTON5)
|
||||
//&& mask == 0)
|
||||
{
|
||||
if (mParent)
|
||||
{
|
||||
mParent->setMouse(clicktype);
|
||||
}
|
||||
else if (mTmpParent)
|
||||
{
|
||||
mTmpParent->onSetMouse(clicktype, mask);
|
||||
}
|
||||
result = TRUE;
|
||||
closeFloater();
|
||||
}
|
||||
|
|
@ -237,6 +283,11 @@ BOOL LLVoiceSetKeyDialog::handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseCli
|
|||
void LLVoiceSetKeyDialog::onCancel(void* user_data)
|
||||
{
|
||||
LLVoiceSetKeyDialog* self = (LLVoiceSetKeyDialog*)user_data;
|
||||
// tmp needs 'no key' button
|
||||
if (self->mTmpParent)
|
||||
{
|
||||
self->mTmpParent->onSetKey(KEY_NONE, MASK_NONE);
|
||||
}
|
||||
self->closeFloater();
|
||||
}
|
||||
|
||||
|
|
@ -2863,6 +2914,273 @@ void LLPanelPreferenceGraphics::setHardwareDefaults()
|
|||
resetDirtyChilds();
|
||||
}
|
||||
|
||||
|
||||
//-------------------For LLPanelPreferenceControls' list---------------------------
|
||||
class LLGroupControlsListItem : public LLScrollListItem, public LLHandleProvider<LLGroupControlsListItem>
|
||||
{
|
||||
public:
|
||||
LLGroupControlsListItem(const LLScrollListItem::Params& p)
|
||||
: LLScrollListItem(p)
|
||||
{
|
||||
}
|
||||
|
||||
LLGroupControlsListItem(const LLScrollListItem::Params& p, const LLUUID& icon_id)
|
||||
: LLScrollListItem(p), mIconId(icon_id)
|
||||
{
|
||||
}
|
||||
|
||||
void draw(const LLRect& rect, const LLColor4& fg_color, const LLColor4& bg_color, const LLColor4& highlight_color, S32 column_padding)
|
||||
{
|
||||
// todo: insert image and adjust rect
|
||||
LLScrollListItem::draw(rect, fg_color, bg_color, highlight_color, column_padding);
|
||||
}
|
||||
private:
|
||||
LLUUID mIconId;
|
||||
};
|
||||
|
||||
static const std::string tmp_typetostring[LLControlBindings::CONTROL_NUM_INDICES] = {
|
||||
"control_view_actions",
|
||||
"control_about",
|
||||
"control_orbit",
|
||||
"control_pan",
|
||||
"control_world_map",
|
||||
"control_zoom",
|
||||
"control_interactions",
|
||||
"control_build",
|
||||
"control_drag",
|
||||
"control_edit",
|
||||
"control_menu",
|
||||
"control_open",
|
||||
"control_touch",
|
||||
"control_wear",
|
||||
"control_movements",
|
||||
"control_moveto",
|
||||
"control_sit",
|
||||
"control_teleportto",
|
||||
"control_forward",
|
||||
"control_backward",
|
||||
"control_left",
|
||||
"control_right",
|
||||
"control_lstrafe",
|
||||
"control_rstrafe",
|
||||
"control_jump",
|
||||
"control_down",
|
||||
"control_run",
|
||||
"control_toggle_run",
|
||||
"control_fly",
|
||||
"control_mediacontent",
|
||||
"control_parcel",
|
||||
"control_media",
|
||||
"control_voice",
|
||||
"control_toggle_voice",
|
||||
"control_reserved",
|
||||
"control_menu",
|
||||
"control_reserved_select",
|
||||
"control_shift_select",
|
||||
"control_cntrl_select"
|
||||
};
|
||||
|
||||
//------------------------LLPanelPreferenceControls--------------------------------
|
||||
static LLPanelInjector<LLPanelPreferenceControls> t_pref_contrls("panel_preference_controls");
|
||||
|
||||
BOOL LLPanelPreferenceControls::postBuild()
|
||||
{
|
||||
//todo: on open instead of on the go
|
||||
//todo: add pitch/yaw?
|
||||
//todo: Scroll?
|
||||
//todo: should be auto-expandable with menu items and should pull names from menu when possible
|
||||
|
||||
|
||||
// populate list of controls
|
||||
pControlsTable = getChild<LLScrollListCtrl>("controls_list");
|
||||
populateControlTable();
|
||||
|
||||
pControlsTable->setCommitCallback(boost::bind(&LLPanelPreferenceControls::onListCommit, this));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::populateControlTable()
|
||||
{
|
||||
pControlsTable->clearRows();
|
||||
|
||||
// todo: subsections need sorting?
|
||||
std::string label;
|
||||
LLScrollListCell::Params cell_params;
|
||||
// init basic cell params
|
||||
cell_params.font = LLFontGL::getFontSansSerif();
|
||||
cell_params.font_halign = LLFontGL::LEFT;
|
||||
cell_params.column = "";
|
||||
cell_params.value = label;
|
||||
|
||||
LLScrollListItem::Params item_params_blank;
|
||||
cell_params.enabled = false;
|
||||
item_params_blank.value = LLSD::Integer(-1);
|
||||
item_params_blank.columns.add(cell_params);
|
||||
cell_params.enabled = true;
|
||||
|
||||
for (U32 i = LLControlBindings::CONTROL_VIEW_ACTIONS; i < LLControlBindings::CONTROL_NUM_INDICES; i++)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case LLControlBindings::CONTROL_VIEW_ACTIONS:
|
||||
{
|
||||
// same as below, but without separator
|
||||
LLScrollListItem::Params item_params;
|
||||
item_params.value = LLSD::Integer(i);
|
||||
|
||||
label = getString(tmp_typetostring[i]);
|
||||
cell_params.column = "lst_action";
|
||||
cell_params.value = label;
|
||||
//dummy cells
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl1";
|
||||
cell_params.value = "";
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl2";
|
||||
cell_params.value = "";
|
||||
item_params.columns.add(cell_params);
|
||||
LLUUID id;
|
||||
LLGroupControlsListItem* item = new LLGroupControlsListItem(item_params, id);
|
||||
pControlsTable->addRow(item, item_params, EAddPosition::ADD_BOTTOM);
|
||||
break;
|
||||
}
|
||||
case LLControlBindings::CONTROL_INTERACTIONS:
|
||||
case LLControlBindings::CONTROL_MOVEMENTS:
|
||||
case LLControlBindings::CONTROL_MEDIACONTENT:
|
||||
case LLControlBindings::CONTROL_RESERVED:
|
||||
{
|
||||
// insert blank
|
||||
pControlsTable->addRow(item_params_blank, EAddPosition::ADD_BOTTOM);
|
||||
// inster with icon
|
||||
LLScrollListItem::Params item_params;
|
||||
item_params.value = LLSD::Integer(i);
|
||||
|
||||
label = getString(tmp_typetostring[i]);
|
||||
cell_params.column = "lst_action";
|
||||
cell_params.value = label;
|
||||
//dummy cells
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl1";
|
||||
cell_params.value = "";
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl2";
|
||||
cell_params.value = "";
|
||||
item_params.columns.add(cell_params);
|
||||
LLUUID id;
|
||||
LLGroupControlsListItem* item = new LLGroupControlsListItem(item_params, id);
|
||||
pControlsTable->addRow(item, item_params, EAddPosition::ADD_BOTTOM);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
//default insert
|
||||
LLScrollListItem::Params item_params;
|
||||
item_params.value = LLSD::Integer(i);
|
||||
|
||||
// todo oddset
|
||||
cell_params.column = "lst_action";
|
||||
label = getString(tmp_typetostring[i]);
|
||||
cell_params.value = label;
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl1";
|
||||
cell_params.value = gControlBindings.getPrimaryControl((LLControlBindings::EControlTypes)i).asString();
|
||||
item_params.columns.add(cell_params);
|
||||
cell_params.column = "lst_ctrl2";
|
||||
cell_params.value = gControlBindings.getSecondaryControl((LLControlBindings::EControlTypes)i).asString();
|
||||
item_params.columns.add(cell_params);
|
||||
|
||||
pControlsTable->addRow(item_params, EAddPosition::ADD_BOTTOM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::cancel()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::saveSettings()
|
||||
{
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::resetDirtyChilds()
|
||||
{
|
||||
}
|
||||
|
||||
bool LLPanelPreferenceControls::hasDirtyChilds()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::onListCommit()
|
||||
{
|
||||
LLScrollListItem* item = pControlsTable->getFirstSelected();
|
||||
if (item == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
S32 control = item->getValue().asInteger();
|
||||
|
||||
if (!gControlBindings.canAssignControl((LLControlBindings::EControlTypes)control))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// todo: add code to determine what cell was clicked, probably cells themself should be clickable
|
||||
|
||||
LLVoiceSetKeyDialog* dialog = LLFloaterReg::showTypedInstance<LLVoiceSetKeyDialog>("voice_set_key", LLSD(), TRUE);
|
||||
if (dialog)
|
||||
{
|
||||
dialog->setTmpParent(this); // will be remade from being voice later
|
||||
}
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::onSetKey(KEY key, MASK mask)
|
||||
{
|
||||
LLScrollListItem* item = pControlsTable->getFirstSelected();
|
||||
if (item == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLControlBindings::EControlTypes control = (LLControlBindings::EControlTypes)item->getValue().asInteger();
|
||||
|
||||
if (!gControlBindings.canAssignControl(control))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gControlBindings.registerPrimaryControl(control, LLMouseHandler::CLICK_NONE, key, mask);
|
||||
|
||||
// instead of populating, update single element
|
||||
populateControlTable();
|
||||
}
|
||||
|
||||
void LLPanelPreferenceControls::onSetMouse(LLMouseHandler::EClickType click, MASK mask)
|
||||
{
|
||||
|
||||
LLScrollListItem* item = pControlsTable->getFirstSelected();
|
||||
if (item == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLControlBindings::EControlTypes control = (LLControlBindings::EControlTypes)item->getValue().asInteger();
|
||||
|
||||
if (!gControlBindings.canAssignControl(control))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
gControlBindings.registerPrimaryControl(control, click, KEY_NONE, mask);
|
||||
|
||||
// instead of populating, update single element
|
||||
populateControlTable();
|
||||
}
|
||||
|
||||
LLFloaterPreferenceGraphicsAdvanced::LLFloaterPreferenceGraphicsAdvanced(const LLSD& key)
|
||||
: LLFloater(key)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -294,6 +294,27 @@ private:
|
|||
LOG_CLASS(LLPanelPreferenceGraphics);
|
||||
};
|
||||
|
||||
class LLPanelPreferenceControls : public LLPanelPreference
|
||||
{
|
||||
LOG_CLASS(LLPanelPreferenceControls);
|
||||
public:
|
||||
BOOL postBuild();
|
||||
void populateControlTable();
|
||||
void cancel();
|
||||
void saveSettings();
|
||||
void resetDirtyChilds();
|
||||
|
||||
void onListCommit();
|
||||
void onSetKey(KEY key, MASK mask);
|
||||
void onSetMouse(LLMouseHandler::EClickType click, MASK mask);
|
||||
|
||||
protected:
|
||||
bool hasDirtyChilds();
|
||||
|
||||
private:
|
||||
LLScrollListCtrl* pControlsTable;
|
||||
};
|
||||
|
||||
class LLFloaterPreferenceGraphicsAdvanced : public LLFloater
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -994,7 +994,7 @@ LLSpatialGroup *LLSpatialPartition::put(LLDrawable *drawablep, BOOL was_visible)
|
|||
}
|
||||
|
||||
LLSpatialGroup* group = drawablep->getSpatialGroup();
|
||||
llassert(group != NULL);
|
||||
//llassert(group != NULL);
|
||||
|
||||
if (group && was_visible && group->isOcclusionState(LLSpatialGroup::QUERY_PENDING))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
#include "llnotificationsutil.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llui.h"
|
||||
#include "llkeybindings.h"
|
||||
#include "llkeyboard.h"
|
||||
#include "llagent.h"
|
||||
|
||||
|
|
@ -691,7 +692,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
|
|||
return;
|
||||
}
|
||||
|
||||
if (mPTTMouseButton == 0 && LLAgent::isActionAllowed("speak") && (key == mPTTKey))
|
||||
if (LLAgent::isActionAllowed("speak") && gControlBindings.canHandleKey(LLControlBindings::CONTROL_VOICE, key, mask))
|
||||
{
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (down)
|
||||
|
|
@ -703,7 +704,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
|
|||
}
|
||||
void LLVoiceClient::keyUp(KEY key, MASK mask)
|
||||
{
|
||||
if (mPTTMouseButton == 0 && (key == mPTTKey))
|
||||
if (gControlBindings.canHandleKey(LLControlBindings::CONTROL_VOICE, key, mask))
|
||||
{
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (!down)
|
||||
|
|
@ -714,7 +715,7 @@ void LLVoiceClient::keyUp(KEY key, MASK mask)
|
|||
}
|
||||
void LLVoiceClient::updateMouseState(S32 click, MASK mask, bool down)
|
||||
{
|
||||
if(mPTTMouseButton == click && LLAgent::isActionAllowed("speak"))
|
||||
if(LLAgent::isActionAllowed("speak") && gControlBindings.canHandleMouse(LLControlBindings::CONTROL_VOICE, click, mask))
|
||||
{
|
||||
inputUserControlState(down);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,6 +169,13 @@ https://accounts.secondlife.com/change_email/
|
|||
layout="topleft"
|
||||
help_topic="preferences_uploads_tab"
|
||||
name="uploads" />
|
||||
<panel
|
||||
class="panel_preference_controls"
|
||||
filename="panel_preferences_controls.xml"
|
||||
label="Controls"
|
||||
layout="topleft"
|
||||
help_topic="preferences_controls_tab"
|
||||
name="controls" />
|
||||
</tab_container>
|
||||
|
||||
</floater>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,196 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<panel
|
||||
border="true"
|
||||
follows="all"
|
||||
height="408"
|
||||
label="Controls"
|
||||
layout="topleft"
|
||||
left="102"
|
||||
name="controls"
|
||||
top="1"
|
||||
width="517">
|
||||
<panel.string
|
||||
name="control_view_actions">
|
||||
View Actions
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_about">
|
||||
About/Profile
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_orbit">
|
||||
Orbit
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_pan">
|
||||
Pan
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_world_map">
|
||||
World Map
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_zoom">
|
||||
Zoom
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_interactions">
|
||||
Interactions
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_build">
|
||||
Build
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_drag">
|
||||
Drag
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_edit">
|
||||
Edit
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_menu">
|
||||
Menu
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_open">
|
||||
Open
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_touch">
|
||||
Touch
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_wear">
|
||||
Wear
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_movements">
|
||||
Move Actions
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_moveto">
|
||||
Move To
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_sit">
|
||||
Sit/Stand
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_teleportto">
|
||||
Teleport To
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_forward">
|
||||
Move Forward
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_backward">
|
||||
Move Backward
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_left">
|
||||
Left
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_right">
|
||||
Right
|
||||
</panel.string>
|
||||
<!--(check with move floater)-->
|
||||
<panel.string
|
||||
name="control_lstrafe">
|
||||
Strafe left
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_rstrafe">
|
||||
Strafe right
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_jump">
|
||||
Strafe right
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_down">
|
||||
Strafe right
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_run">
|
||||
Run
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_toggle_run">
|
||||
Toggle Run
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_fly">
|
||||
Fly/Stop flying
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_mediacontent">
|
||||
Sound and Media
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_parcel">
|
||||
Play/Pause Parcel Media
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_media">
|
||||
Play/Stop All Media
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_voice">
|
||||
Voice
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_toggle_voice">
|
||||
Toggle Voice
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_reserved">
|
||||
Reserved Controls
|
||||
</panel.string>
|
||||
<!--
|
||||
name="control_menu" not needed
|
||||
-->
|
||||
<panel.string
|
||||
name="control_reserved_select">
|
||||
Select
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_shift_select">
|
||||
Multi-Select
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="control_cntrl_select">
|
||||
Add to Selection
|
||||
</panel.string>
|
||||
|
||||
<scroll_list
|
||||
draw_heading="true"
|
||||
follows="all"
|
||||
layout="topleft"
|
||||
column_padding="0"
|
||||
top="3"
|
||||
left="3"
|
||||
bottom="-3"
|
||||
right="-3"
|
||||
multi_select="false"
|
||||
name="controls_list">
|
||||
<scroll_list.columns
|
||||
relative_width="0.34"
|
||||
label="Action"
|
||||
name="lst_action" />
|
||||
<scroll_list.columns
|
||||
relative_width="0.33"
|
||||
label="Primary Control Method"
|
||||
name="lst_ctrl1" />
|
||||
<scroll_list.columns
|
||||
relative_width="0.33"
|
||||
label="Secondary Control Method"
|
||||
name="lst_ctrl2" />
|
||||
<scroll_list.commit_callback
|
||||
function="Pref.CommitControl" />
|
||||
</scroll_list>
|
||||
|
||||
</panel>
|
||||
Loading…
Reference in New Issue