|
@@ -1684,6 +1684,11 @@ void la_InputMappingGetKeyName(int key, int special, char* name){
|
|
|
case LA_KEY_F10: strcat(name,"F10"); break;
|
|
|
case LA_KEY_F11: strcat(name,"F11"); break;
|
|
|
case LA_KEY_F12: strcat(name,"F12"); break;
|
|
|
+ case LA_KEY_MOUSE_LEFT: strcat(name,"Mouse1"); break;
|
|
|
+ case LA_KEY_MOUSE_MIDDLE: strcat(name,"Mouse2"); break;
|
|
|
+ case LA_KEY_MOUSE_RIGHT: strcat(name,"Mouse3"); break;
|
|
|
+ case LA_KEY_MOUSE_SCROLL|LA_STATE_UP: strcat(name,"MouseWheelUp"); break;
|
|
|
+ case LA_KEY_MOUSE_SCROLL|LA_STATE_DOWN: strcat(name,"MouseWheelDown"); break;
|
|
|
default:
|
|
|
name = name+strlen(name); _next=name;
|
|
|
laToUTF8(key,name,&_next); *_next=0; break;
|
|
@@ -1736,6 +1741,11 @@ int la_InputMappingGetKeyFromName(char* name, int* special){
|
|
|
if(strSame(p,"F10")) return LA_KEY_F10;
|
|
|
if(strSame(p,"F11")) return LA_KEY_F11;
|
|
|
if(strSame(p,"F12")) return LA_KEY_F12;
|
|
|
+ if(strSame(p,"Mouse1")) return LA_KEY_MOUSE_LEFT;
|
|
|
+ if(strSame(p,"Mouse2")) return LA_KEY_MOUSE_MIDDLE;
|
|
|
+ if(strSame(p,"Mouse3")) return LA_KEY_MOUSE_RIGHT;
|
|
|
+ if(strSame(p,"MouseWheelUp")) return LA_KEY_MOUSE_SCROLL|LA_STATE_UP;
|
|
|
+ if(strSame(p,"MouseWheelDown")) return LA_KEY_MOUSE_SCROLL|LA_STATE_DOWN;
|
|
|
int adv;
|
|
|
return laToUnicode(p,&adv);
|
|
|
}
|
|
@@ -1748,9 +1758,10 @@ laCustomSignal* laFindSignalByID(int ID){
|
|
|
return 0;
|
|
|
}
|
|
|
void laInputMappingUpdateSignal(laInputMappingEntry* ime){
|
|
|
- if(ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD){ char* str=SSTR(ime->Key);
|
|
|
+ if(ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD || ime->DeviceType==LA_INPUT_DEVICE_MOUSE){ char* str=SSTR(ime->Key);
|
|
|
if(str&&str[0]){ int adv; ime->KeyValue=la_InputMappingGetKeyFromName(str,&ime->SpecialKeyBits); }else{ ime->KeyValue=0; }
|
|
|
- }elif(ime->DeviceType == LA_INPUT_DEVICE_JOYSTICK){ int key=0; sscanf(SSTR(ime->Key),"%d",&key); ime->KeyValue=key; }
|
|
|
+ }
|
|
|
+ elif(ime->DeviceType == LA_INPUT_DEVICE_JOYSTICK){ int key=0; sscanf(SSTR(ime->Key),"%d",&key); ime->KeyValue=key; }
|
|
|
char* signal = SSTR(ime->Signal);
|
|
|
laCustomSignal *cs=laFindSignal(signal); if(cs){ ime->SignalValue=cs->Signal; }else{ ime->SignalValue=0;}
|
|
|
}
|
|
@@ -1795,13 +1806,24 @@ void laRemoveCustomSignal(laCustomSignal* cs){
|
|
|
}
|
|
|
|
|
|
void la_SendSignalEvent(SYSWINDOW* hwnd, int signal);
|
|
|
+void la_SendOperatorEvent(SYSWINDOW* hwnd, laOperatorType* at, int use_base, char* instructions);
|
|
|
+void la_SendInputMappingSignalsAuto(SYSWINDOW* hwnd, laInputMappingEntry* ime){
|
|
|
+ if(ime->UseOperator){ la_SendOperatorEvent(hwnd, ime->OperatorType, ime->OperatorBase, SSTR(ime->OperatorArguments)); }
|
|
|
+ else{ la_SendSignalEvent(hwnd, ime->SignalValue); }
|
|
|
+}
|
|
|
void la_SendSignalsFromEvent(laEvent* e){
|
|
|
laInputMapping* im = MAIN.InputMapping->CurrentInputMapping;
|
|
|
if(!im){return;}
|
|
|
for(laInputMappingEntry* ime = im->Entries.pFirst;ime;ime=ime->Item.pNext){
|
|
|
if(e->type==LA_KEY_DOWN && ime->DeviceType == LA_INPUT_DEVICE_KEYBOARD){
|
|
|
if(e->key == ime->KeyValue && e->SpecialKeyBit == ime->SpecialKeyBits){
|
|
|
- la_SendSignalEvent(e->window->win,ime->SignalValue);
|
|
|
+ la_SendInputMappingSignalsAuto(e->window->win,ime);
|
|
|
+ }
|
|
|
+ }elif((e->type&LA_MOUSE_EVENT) && ime->DeviceType == LA_INPUT_DEVICE_MOUSE){
|
|
|
+ int matchkey; if(!(e->type&LA_KEY_MOUSE_SCROLL)){ matchkey = (e->type&ime->KeyValue); }
|
|
|
+ else{ matchkey= (e->type==(ime->KeyValue&LA_MOUSE_EVENT)); }
|
|
|
+ if(e->SpecialKeyBit == ime->SpecialKeyBits && matchkey){
|
|
|
+ la_SendInputMappingSignalsAuto(e->window->win,ime);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -2127,6 +2149,13 @@ void la_SendSignalEvent(SYSWINDOW* hwnd, int signal){
|
|
|
e->key = signal;
|
|
|
la_SaveEvent(hwnd, e, 1);
|
|
|
};
|
|
|
+void la_SendOperatorEvent(SYSWINDOW* hwnd, laOperatorType* at, int use_base, char* instructions){
|
|
|
+ if(!at){ return; }
|
|
|
+ laEvent *e = memAcquireSimple(sizeof(laEvent));
|
|
|
+ e->type = LA_OPERATOR_EVENT;
|
|
|
+ e->Operator = at; e->OperatorBase = use_base; e->OperatorInstructions = instructions;
|
|
|
+ la_SaveEvent(hwnd, e, 1);
|
|
|
+};
|
|
|
void laRetriggerOperators(){
|
|
|
MAIN.ReTriggerOperators = 1;
|
|
|
}
|
|
@@ -7117,6 +7146,14 @@ int laKeyMapExecuteEventEx(laOperator *from, laPropPack *UiExtra, laKeyMapper *k
|
|
|
char *instructions;
|
|
|
int inv = 0; int lx = -1, ly = -1;
|
|
|
if(e->type==LA_MOUSEMOVE) return 0;
|
|
|
+ if(e->type == LA_OPERATOR_EVENT && e->OperatorBase){
|
|
|
+ if (e->OperatorBase == LA_KM_SEL_UI_EXTRA){
|
|
|
+ laInvokeP(from, e->Operator, e, UiExtra, e->OperatorInstructions, 0);
|
|
|
+ }elif (e->OperatorBase == LA_KM_SEL_PANEL){
|
|
|
+ laInvokeP(from, e->Operator, e, &((laPanel *)MAIN.ToPanel)->PP, e->OperatorInstructions, 0);
|
|
|
+ }
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
for (kmi = km->Items.pFirst; kmi; kmi = kmi->Item.pNext){
|
|
|
if ((kmi->SpecialKeyBits == e->SpecialKeyBit||kmi->EventType==LA_SIGNAL_EVENT) &&
|
|
|
kmi->EventType == e->type && ((kmi->Key == e->Input) || (kmi->Key == e->key))){
|