Update KeyToggle & KeyTap

This commit is contained in:
vCaesar 2016-11-13 23:46:33 +08:00
parent b3502d6b7a
commit 67e8918365
2 changed files with 99 additions and 16 deletions

View File

@ -163,18 +163,32 @@ int CheckKeyFlags(char* f, MMKeyFlags* flags)
return 0; return 0;
} }
// //If it's not an array, it should be a single string value. int GetFlagsFromValue(char* value[], MMKeyFlags* flags){
if (!flags) {return -1;}
char* aKeyTap(char *k,char *akey){ for (int i = 0; i <2; i++){
MMKeyFlags f = MOD_NONE;
const int rv = CheckKeyFlags(value[i], &f);
if (rv) return rv;
*flags = (MMKeyFlags)(*flags | f);
}
return 0;
// return CheckKeyFlags(fstr, flags);
}
// If it's not an array, it should be a single string value.
char* aKeyTap(char *k,char *akey,char *akeyt){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
// MMKeyFlags flags = 0; // MMKeyFlags flags = 0;
MMKeyCode key; MMKeyCode key;
// char *k; // char *k;
// k = *kstr; // k = *kstr;
if (strcmp(akey, "null") != 0){ if (strcmp(akey, "null") != 0){
switch (CheckKeyFlags(akey,&flags)){ if (strcmp(akeyt, "null") == 0){
switch (CheckKeyFlags(akey,&flags)){
case -1: case -1:
return "Null pointer in key flag."; return "Null pointer in key flag.";
break; break;
@ -182,6 +196,17 @@ char* aKeyTap(char *k,char *akey){
return "Invalid key flag specified."; return "Invalid key flag specified.";
break; break;
} }
}else{
char* akeyarr[2] = {akey,akeyt};
switch(GetFlagsFromValue(akeyarr,&flags)){
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}
} }
switch(CheckKeyCodes(k, &key)){ switch(CheckKeyCodes(k, &key)){
@ -199,7 +224,7 @@ char* aKeyTap(char *k,char *akey){
return "0"; return "0";
} }
char* aKeyToggle(char *k,char *d){ char* aKeyToggle(char *k,char *d,char *akey,char *akeyt){
MMKeyFlags flags = (MMKeyFlags) MOD_NONE; MMKeyFlags flags = (MMKeyFlags) MOD_NONE;
MMKeyCode key; MMKeyCode key;
@ -219,6 +244,30 @@ char* aKeyToggle(char *k,char *d){
} }
} }
if (strcmp(akey, "null") != 0){
if (strcmp(akeyt, "null") == 0){
switch (CheckKeyFlags(akey,&flags)){
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}else{
char* akeyarr[2] = {akey,akeyt};
switch (GetFlagsFromValue(akeyarr, &flags))
{
case -1:
return "Null pointer in key flag.";
break;
case -2:
return "Invalid key flag specified.";
break;
}
}
}
switch(CheckKeyCodes(k, &key)){ switch(CheckKeyCodes(k, &key)){
case -1: case -1:
return "Null pointer in key code."; return "Null pointer in key code.";

View File

@ -278,9 +278,24 @@ func Try(fun func(), handler func(interface{})) {
} }
func KeyTap(args ...string) { func KeyTap(args ...string) {
// func KeyTap(args ...interface{}) {
var akey string var akey string
var akeyt string
// var ckeyarr []*C.char
// var keyarr []string
Try(func() { Try(func() {
akey = args[1] akey = args[1]
// for i, _ := range keyarr {
// ckeyarr = append(ckeyarr, (*C.char)(unsafe.Pointer(C.CString(keyarr[i]))))
// }
Try(func() {
akeyt = args[2]
}, func(e interface{}) {
// Println("err:::", e)
akeyt = "null"
})
}, func(e interface{}) { }, func(e interface{}) {
// Println("err:::", e) // Println("err:::", e)
akey = "null" akey = "null"
@ -288,31 +303,50 @@ func KeyTap(args ...string) {
zkey := C.CString(args[0]) zkey := C.CString(args[0])
amod := C.CString(akey) amod := C.CString(akey)
// defer func() { amodt := C.CString(akeyt)
C.aKeyTap(zkey, amod)
// }() C.aKeyTap(zkey, amod, amodt)
defer C.free(unsafe.Pointer(zkey)) defer C.free(unsafe.Pointer(zkey))
defer C.free(unsafe.Pointer(amod)) defer C.free(unsafe.Pointer(amod))
defer C.free(unsafe.Pointer(amodt))
} }
func KeyToggle(args ...string) { func KeyToggle(args ...string) {
var akey string var adown string
var amkey string
var amkeyt string
Try(func() { Try(func() {
akey = args[1] adown = args[1]
Try(func() {
amkey = args[2]
Try(func() {
amkeyt = args[3]
}, func(e interface{}) {
// Println("err:::", e)
amkeyt = "null"
})
}, func(e interface{}) {
// Println("err:::", e)
amkey = "null"
})
}, func(e interface{}) { }, func(e interface{}) {
// Println("err:::", e) // Println("err:::", e)
akey = "null" adown = "null"
}) })
zkey := C.CString(args[0]) ckey := C.CString(args[0])
amod := C.CString(akey) cadown := C.CString(adown)
camkey := C.CString(amkey)
camkeyt := C.CString(amkeyt)
// defer func() { // defer func() {
str := C.aKeyToggle(zkey, amod) str := C.aKeyToggle(ckey, cadown, camkey, camkeyt)
Println(str) Println(str)
// }() // }()
defer C.free(unsafe.Pointer(zkey)) defer C.free(unsafe.Pointer(ckey))
defer C.free(unsafe.Pointer(amod)) defer C.free(unsafe.Pointer(cadown))
defer C.free(unsafe.Pointer(camkey))
defer C.free(unsafe.Pointer(camkeyt))
} }
func TypeString(x string) { func TypeString(x string) {