SL-6109 Extended Key-to-string functionality
parent
31e0cefb6c
commit
5322f41250
|
|
@ -263,13 +263,13 @@ BOOL LLMenuItemGL::handleRightMouseUp(S32 x, S32 y, MASK mask)
|
|||
|
||||
// This function checks to see if the accelerator key is already in use;
|
||||
// if not, it will be added to the list
|
||||
BOOL LLMenuItemGL::addToAcceleratorList(std::list <LLKeyBinding*> *listp)
|
||||
BOOL LLMenuItemGL::addToAcceleratorList(std::list <LLMenuKeyboardBinding*> *listp)
|
||||
{
|
||||
LLKeyBinding *accelerator = NULL;
|
||||
LLMenuKeyboardBinding *accelerator = NULL;
|
||||
|
||||
if (mAcceleratorKey != KEY_NONE)
|
||||
{
|
||||
std::list<LLKeyBinding*>::iterator list_it;
|
||||
std::list<LLMenuKeyboardBinding*>::iterator list_it;
|
||||
for (list_it = listp->begin(); list_it != listp->end(); ++list_it)
|
||||
{
|
||||
accelerator = *list_it;
|
||||
|
|
@ -293,7 +293,7 @@ BOOL LLMenuItemGL::addToAcceleratorList(std::list <LLKeyBinding*> *listp)
|
|||
}
|
||||
if (!accelerator)
|
||||
{
|
||||
accelerator = new LLKeyBinding;
|
||||
accelerator = new LLMenuKeyboardBinding;
|
||||
if (accelerator)
|
||||
{
|
||||
accelerator->mKey = mAcceleratorKey;
|
||||
|
|
@ -1024,7 +1024,7 @@ BOOL LLMenuItemBranchGL::handleAcceleratorKey(KEY key, MASK mask)
|
|||
|
||||
// This function checks to see if the accelerator key is already in use;
|
||||
// if not, it will be added to the list
|
||||
BOOL LLMenuItemBranchGL::addToAcceleratorList(std::list<LLKeyBinding*> *listp)
|
||||
BOOL LLMenuItemBranchGL::addToAcceleratorList(std::list<LLMenuKeyboardBinding*> *listp)
|
||||
{
|
||||
LLMenuGL* branch = getBranch();
|
||||
if (!branch)
|
||||
|
|
|
|||
|
|
@ -42,6 +42,13 @@
|
|||
extern S32 MENU_BAR_HEIGHT;
|
||||
extern S32 MENU_BAR_WIDTH;
|
||||
|
||||
class LLMenuKeyboardBinding
|
||||
{
|
||||
public:
|
||||
KEY mKey;
|
||||
MASK mMask;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLMenuItemGL
|
||||
//
|
||||
|
|
@ -109,7 +116,7 @@ public:
|
|||
virtual void setBriefItem(BOOL brief);
|
||||
virtual BOOL isBriefItem() const;
|
||||
|
||||
virtual BOOL addToAcceleratorList(std::list<LLKeyBinding*> *listp);
|
||||
virtual BOOL addToAcceleratorList(std::list<LLMenuKeyboardBinding*> *listp);
|
||||
void setAllowKeyRepeat(BOOL allow) { mAllowKeyRepeat = allow; }
|
||||
BOOL getAllowKeyRepeat() const { return mAllowKeyRepeat; }
|
||||
|
||||
|
|
@ -631,7 +638,7 @@ public:
|
|||
virtual BOOL handleAcceleratorKey(KEY key, MASK mask);
|
||||
|
||||
// check if we've used these accelerators already
|
||||
virtual BOOL addToAcceleratorList(std::list <LLKeyBinding*> *listp);
|
||||
virtual BOOL addToAcceleratorList(std::list <LLMenuKeyboardBinding*> *listp);
|
||||
|
||||
// called to rebuild the draw label
|
||||
virtual void buildDrawLabel( void );
|
||||
|
|
@ -797,7 +804,7 @@ private:
|
|||
|
||||
void checkMenuTrigger();
|
||||
|
||||
std::list <LLKeyBinding*> mAccelerators;
|
||||
std::list <LLMenuKeyboardBinding*> mAccelerators;
|
||||
BOOL mAltKeyTrigger;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -347,7 +347,48 @@ std::string LLKeyboard::stringFromKey(KEY key)
|
|||
return res;
|
||||
}
|
||||
|
||||
//static
|
||||
std::string LLKeyboard::stringFromAccelerator(MASK accel_mask)
|
||||
{
|
||||
std::string res;
|
||||
|
||||
LLKeyStringTranslatorFunc *trans = gKeyboard->mStringTranslator;
|
||||
|
||||
if (trans == NULL)
|
||||
{
|
||||
LL_ERRS() << "No mKeyStringTranslator" << LL_ENDL;
|
||||
return res;
|
||||
}
|
||||
|
||||
// Append any masks
|
||||
#ifdef LL_DARWIN
|
||||
// Standard Mac names for modifier keys in menu equivalents
|
||||
// We could use the symbol characters, but they only exist in certain fonts.
|
||||
if (accel_mask & MASK_CONTROL)
|
||||
{
|
||||
if (accel_mask & MASK_MAC_CONTROL)
|
||||
{
|
||||
res.append(trans("accel-mac-control"));
|
||||
}
|
||||
else
|
||||
{
|
||||
res.append(trans("accel-mac-command")); // Symbol would be "\xE2\x8C\x98"
|
||||
}
|
||||
}
|
||||
if (accel_mask & MASK_ALT)
|
||||
res.append(trans("accel-mac-option")); // Symbol would be "\xE2\x8C\xA5"
|
||||
if (accel_mask & MASK_SHIFT)
|
||||
res.append(trans("accel-mac-shift")); // Symbol would be "\xE2\x8C\xA7"
|
||||
#else
|
||||
if (accel_mask & MASK_CONTROL)
|
||||
res.append(trans("accel-win-control"));
|
||||
if (accel_mask & MASK_ALT)
|
||||
res.append(trans("accel-win-alt"));
|
||||
if (accel_mask & MASK_SHIFT)
|
||||
res.append(trans("accel-win-shift"));
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
//static
|
||||
std::string LLKeyboard::stringFromAccelerator( MASK accel_mask, KEY key )
|
||||
{
|
||||
|
|
@ -359,41 +400,7 @@ std::string LLKeyboard::stringFromAccelerator( MASK accel_mask, KEY key )
|
|||
return res;
|
||||
}
|
||||
|
||||
LLKeyStringTranslatorFunc *trans = gKeyboard->mStringTranslator;
|
||||
|
||||
if( trans == NULL )
|
||||
{
|
||||
LL_ERRS() << "No mKeyStringTranslator" << LL_ENDL;
|
||||
return res;
|
||||
}
|
||||
|
||||
// Append any masks
|
||||
#ifdef LL_DARWIN
|
||||
// Standard Mac names for modifier keys in menu equivalents
|
||||
// We could use the symbol characters, but they only exist in certain fonts.
|
||||
if( accel_mask & MASK_CONTROL )
|
||||
{
|
||||
if ( accel_mask & MASK_MAC_CONTROL )
|
||||
{
|
||||
res.append( trans("accel-mac-control") );
|
||||
}
|
||||
else
|
||||
{
|
||||
res.append( trans("accel-mac-command") ); // Symbol would be "\xE2\x8C\x98"
|
||||
}
|
||||
}
|
||||
if( accel_mask & MASK_ALT )
|
||||
res.append( trans("accel-mac-option") ); // Symbol would be "\xE2\x8C\xA5"
|
||||
if( accel_mask & MASK_SHIFT )
|
||||
res.append( trans("accel-mac-shift") ); // Symbol would be "\xE2\x8C\xA7"
|
||||
#else
|
||||
if( accel_mask & MASK_CONTROL )
|
||||
res.append( trans("accel-win-control") );
|
||||
if( accel_mask & MASK_ALT )
|
||||
res.append( trans("accel-win-alt") );
|
||||
if( accel_mask & MASK_SHIFT )
|
||||
res.append( trans("accel-win-shift") );
|
||||
#endif
|
||||
res.append(stringFromAccelerator(accel_mask));
|
||||
std::string key_string = LLKeyboard::stringFromKey(key);
|
||||
if ((accel_mask & MASK_NORMALKEYS) &&
|
||||
(key_string[0] == '-' || key_string[0] == '=' || key_string[0] == '+'))
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ enum EKeystate
|
|||
{
|
||||
KEYSTATE_DOWN,
|
||||
KEYSTATE_LEVEL,
|
||||
KEYSTATE_UP
|
||||
KEYSTATE_UP
|
||||
};
|
||||
|
||||
typedef boost::function<void(EKeystate keystate)> LLKeyFunc;
|
||||
typedef boost::function<bool(EKeystate keystate)> LLKeyFunc;
|
||||
typedef std::string (LLKeyStringTranslatorFunc)(const char *label);
|
||||
|
||||
enum EKeyboardInsertMode
|
||||
|
|
@ -50,15 +50,6 @@ enum EKeyboardInsertMode
|
|||
LL_KIM_OVERWRITE
|
||||
};
|
||||
|
||||
class LLKeyBinding
|
||||
{
|
||||
public:
|
||||
KEY mKey;
|
||||
MASK mMask;
|
||||
// const char *mName; // unused
|
||||
LLKeyFunc mFunction;
|
||||
};
|
||||
|
||||
class LLWindowCallbacks;
|
||||
|
||||
class LLKeyboard
|
||||
|
|
@ -104,6 +95,7 @@ public:
|
|||
static BOOL maskFromString(const std::string& str, MASK *mask); // False on failure
|
||||
static BOOL keyFromString(const std::string& str, KEY *key); // False on failure
|
||||
static std::string stringFromKey(KEY key);
|
||||
static std::string stringFromAccelerator( MASK accel_mask ); // separated for convinience, returns with "+": "Shift+" or "Shift+Alt+"...
|
||||
static std::string stringFromAccelerator( MASK accel_mask, KEY key );
|
||||
|
||||
void setCallbacks(LLWindowCallbacks *cbs) { mCallbacks = cbs; }
|
||||
|
|
|
|||
Loading…
Reference in New Issue