* Added IBM Laptop international keyboard layout.

* Added LEDs to the 105-key internal one.
* Always choose the variable with the longest matching name instead of the
  first.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29711 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2009-03-25 22:22:59 +00:00
parent 4acbaafd89
commit c31467186f
2 changed files with 62 additions and 15 deletions
+61 -13
View File
@@ -93,6 +93,13 @@ KeyboardLayout::DefaultKeySize()
} }
int32
KeyboardLayout::IndexForModifier(int32 modifier)
{
return 0;
}
status_t status_t
KeyboardLayout::Load(const char* path) KeyboardLayout::Load(const char* path)
{ {
@@ -137,6 +144,7 @@ KeyboardLayout::Load(const char* path)
void void
KeyboardLayout::_SetDefault() KeyboardLayout::_SetDefault()
{ {
#if 1
static const char* kDefaultLayout104 = "name = Generic 104-key\n" static const char* kDefaultLayout104 = "name = Generic 104-key\n"
// Size shortcuts // Size shortcuts
"default-size = 10,10\n" "default-size = 10,10\n"
@@ -157,18 +165,23 @@ KeyboardLayout::_SetDefault()
" 15,10:-; :+3; d$f:+1 ]\n" " 15,10:-; :+3; d$f:+1 ]\n"
"[ 0,60; d$g:0x5c; d$g:0x66; d$g:0x5d; 59,10:+1; d$g:+1; d$g:0x67+1; " "[ 0,60; d$g:0x5c; d$g:0x66; d$g:0x5d; 59,10:+1; d$g:+1; d$g:0x67+1; "
"d$g:0x60; $b:-; d:+3; $b:-; $c:+1; :+1 ]\n"; "d$g:0x60; $b:-; d:+3; $b:-; $c:+1; :+1 ]\n";
_InitFrom(kDefaultLayout104);
#endif
#if 0 #if 0
static const char* kDefaultLayout105 = "name = 105 Keys International\n" static const char* kDefaultLayout105 =
"name = Generic 105-key International\n"
// Size shortcuts // Size shortcuts
"default-size = 10,10\n" "default-size = 10,10\n"
"$b = 5,10\n" "$b = 5,10\n"
"$c = 20,10\n" "$c = 20,10\n"
"$d = 15,10\n" "$d = 15,10\n"
"$e = l15,20,13\n" "$e = l15,20,9\n"
"$f = 10,20\n" "$f = 10,20\n"
"$g = 13,10\n" "$g = 13,10\n"
// Key rows // Key rows
"[ 0,0; d:0x01; :-; :+4; $b:-; d:+4; $b:-; :+4; $b:-; d:+3 ]\n" "[ 0,0; d:0x01; :-; :+4; $b:-; d:+4; $b:-; :+4; $b:-; d:+3; $b:-; "
"$g:led-num; $g:led-caps; $g:led-scroll ]\n"
"[ 0,20; :+13; d$c:+; $b:-; d:+3; $b:-; d:+4 ]\n" "[ 0,20; :+13; d$c:+; $b:-; d:+3; $b:-; d:+4 ]\n"
"[ 0,30; d$d:0x26; :+12; d$e:0x47; $b:-; d:0x34-0x36; $b:-; :+3; " "[ 0,30; d$d:0x26; :+12; d$e:0x47; $b:-; d:0x34-0x36; $b:-; :+3; "
"d$f:+1 ]\n" "d$f:+1 ]\n"
@@ -177,9 +190,38 @@ KeyboardLayout::_SetDefault()
" 15,10:-; :+3; d$f:+1 ]\n" " 15,10:-; :+3; d$f:+1 ]\n"
"[ 0,60; d$g:0x5c; d$g:0x66; d$g:0x5d; 59,10:+1; d$g:+1; d$g:0x67+1; " "[ 0,60; d$g:0x5c; d$g:0x66; d$g:0x5d; 59,10:+1; d$g:+1; d$g:0x67+1; "
"d$g:0x60; $b:-; d:+3; $b:-; $c:+1; :+1 ]\n"; "d$g:0x60; $b:-; d:+3; $b:-; $c:+1; :+1 ]\n";
#endif
_InitFrom(kDefaultLayout104); _InitFrom(kDefaultLayout105);
#endif
#if 0
static const char* kIBMLaptop = "name = IBM Laptop International\n"
// Size shortcuts
"default-size = 18,18\n"
"$s = 17,10\n"
"$gap = 6,10\n"
"$sgap = 5,10\n"
"$backspace = 38,18\n"
"$tab = 28,18\n"
"$caps = 32,18\n"
"$enter = l28,36,22\n"
"$l-shift-ctrl = 23,18\n"
"$r-shift = 51,18\n"
"$option = 13,18\n"
"$space = 95,18\n"
// Key rows
"[ 0,0; $s:0x01; 148,10:-; $s:0x0e+2; $sgap:-; $s:0x1f+2; ]\n"
"[ 0,10; $s:0x02+3; $gap:-; $s:+4; $gap:-; $s:+4; $sgap:-; "
"$s:0x34+2; ]\n"
"[ 0,20; :0x11+12; $backspace:+1 ]\n"
"[ 0,38; $tab:+1; :+12; $enter:0x47; ]\n"
"[ 0,56; $caps:0x3b; :+11; :0x33 ]\n"
"[ 0,74; $l-shift-ctrl:0x4b; :0x69; :0x4c+9; $r-shift:+1 ]\n"
"[ 0,92; :0x99; $l-shift-ctrl:0x5c; $option:0x66; :0x5d; $space:+1; "
":+1; :0x67; :0x60; $s:0x9a; $s:0x57; $s:0x9b ]\n"
"[ 221,102; $s:0x61+2; ]\n";
_InitFrom(kIBMLaptop);
#endif
} }
@@ -568,21 +610,27 @@ KeyboardLayout::_SubstituteVariables(BString& term, VariableMap& variables,
int32 index = term.FindFirst('$'); int32 index = term.FindFirst('$');
if (index < 0) if (index < 0)
break; break;
// find variable name // find variable name
VariableMap::iterator iterator = variables.begin(); VariableMap::iterator iterator = variables.begin();
VariableMap::iterator best = variables.end();
int32 bestLength = 0;
for (; iterator != variables.end(); iterator++) { for (; iterator != variables.end(); iterator++) {
const BString& name = iterator->first; const BString& name = iterator->first;
if (!name.Compare(&term[index], name.Length())) { if (!name.Compare(&term[index], name.Length())
// got one, replace it && name.Length() > bestLength) {
term.Remove(index, name.Length()); best = iterator;
term.Insert(iterator->second.String(), index); bestLength = name.Length();
break;
} }
} }
if (iterator == variables.end()) { if (best != variables.end()) {
// got one, replace it
term.Remove(index, bestLength);
term.Insert(best->second.String(), index);
} else {
// variable has not been found // variable has not been found
unknown = &term[index]; unknown = &term[index];
int32 length = 1; int32 length = 1;
+1 -2
View File
@@ -52,10 +52,9 @@ public:
BRect Bounds(); BRect Bounds();
BSize DefaultKeySize(); BSize DefaultKeySize();
int32 IndexForModifier(int32 modifier);
status_t Load(const char* path); status_t Load(const char* path);
int32 IndexForModifier(int32 modifier);
private: private:
enum parse_mode { enum parse_mode {