336 lines
8.1 KiB
Plaintext
336 lines
8.1 KiB
Plaintext
//////////////////////////////////////////////////////////////////////////
|
|
// DCC++ CONTROLLER: Event Handlers
|
|
//
|
|
// Top-level processing of mouse, keyboard, and serial events.
|
|
// Most of the real functionality is contained in other methods,
|
|
// functions, and classes called by these handlers
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void mouseDragged(){
|
|
if(selectedComponent!=null)
|
|
selectedComponent.drag();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void mousePressed(){
|
|
|
|
if(activeInputBox!=null){
|
|
for(InputBox inputBox : activeInputBox.linkedBoxes)
|
|
inputBox.setIntValue(activeInputBox.getIntValue());
|
|
}
|
|
|
|
activeInputBox=null;
|
|
if(selectedComponent!=null){
|
|
if (keyPressed == true && key == CODED){
|
|
if(keyCode == SHIFT){
|
|
selectedComponent.shiftPressed();
|
|
} else if(keyCode == CONTROL){
|
|
msgBoxMain.setMessage("Component Name: "+selectedComponent.componentName,color(30,30,150));
|
|
}
|
|
}
|
|
else if(mouseButton==LEFT){
|
|
selectedComponent.pressed();
|
|
} else {
|
|
selectedComponent.rightClick();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void mouseReleased(){
|
|
if(selectedComponent!=null)
|
|
selectedComponent.released();
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void keyPressed(){
|
|
keyCommand(key, keyCode);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void keyReleased(){
|
|
keyCommandReleased(key, keyCode);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void serialEvent(Serial p){
|
|
receivedString(p.readString());
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void clientEvent(Client c){
|
|
String s;
|
|
s=c.readStringUntil('>');
|
|
if(s!=null)
|
|
receivedString(s);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void receivedString(String s){
|
|
if(s.charAt(0)!='<')
|
|
return;
|
|
|
|
String c=s.substring(2,s.length()-1);
|
|
|
|
switch(s.charAt(1)){
|
|
|
|
case 'i':
|
|
baseID=c;
|
|
msgBoxMain.setMessage("Found "+baseID,color(0,150,0));
|
|
break;
|
|
|
|
case '*':
|
|
msgBoxDiagIn.setMessage(c,color(30,30,150));
|
|
break;
|
|
|
|
case 'r':
|
|
String[] cs=splitTokens(c,"|");
|
|
callBacks.get(int(cs[0])).execute(int(cs[1]),cs[2]);
|
|
break;
|
|
|
|
case 'T':
|
|
int[] n=int(splitTokens(c));
|
|
if(n[0]>cabButtons.size())
|
|
break;
|
|
CabButton t=cabButtons.get(n[0]-1);
|
|
if(n[2]==1)
|
|
t.speed=n[1];
|
|
else
|
|
t.speed=-n[1];
|
|
break;
|
|
|
|
case 'Q':
|
|
if(sensorsHM.get(int(c))!=null){
|
|
sensorsHM.get(int(c)).pressed();
|
|
}
|
|
break;
|
|
|
|
case 'Y':
|
|
int[] h1=int(splitTokens(c));
|
|
if(remoteButtonsHM.get(h1[0])!=null){
|
|
if(h1[1]==1)
|
|
remoteButtonsHM.get(h1[0]).turnOn();
|
|
else
|
|
remoteButtonsHM.get(h1[0]).turnOff();
|
|
}
|
|
break;
|
|
|
|
case 'H':
|
|
int[] h=int(splitTokens(c));
|
|
|
|
if(trackButtonsHM.get(h[0])!=null){
|
|
trackButtonsHM.get(h[0]).update(h[1]);
|
|
} else if(remoteButtonsHM.get(h[0])!=null){
|
|
if(h[1]==((remoteButtonsHM.get(h[0]).buttonType==ButtonType.T_COMMAND)?1:0))
|
|
remoteButtonsHM.get(h[0]).turnOn();
|
|
else
|
|
remoteButtonsHM.get(h[0]).turnOff();
|
|
}
|
|
|
|
break;
|
|
|
|
case 'L':
|
|
int[] z=int(splitTokens(c));
|
|
color tempColor;
|
|
tempColor=color(z[0],z[1],z[2]);
|
|
colorMode(HSB,1.0,1.0,1.0);
|
|
ledColorButton.hue=hue(tempColor);
|
|
ledColorButton.sat=saturation(tempColor);
|
|
ledColorButton.val=brightness(tempColor);
|
|
ledColorButton.update(0);
|
|
colorMode(RGB,255);
|
|
break;
|
|
|
|
case 'U':
|
|
autoPilot.cabList.clear();
|
|
autoPilot.setProgram(AutoProgram.SINGLE_CAB_RUN);
|
|
autoPilot.turnOn();
|
|
break;
|
|
|
|
case 'p':
|
|
if(c.equals("1")){
|
|
powerButton.isOn=true;
|
|
msgBoxMain.setMessage("Track Power On",color(30,30,150));
|
|
} else if(c.equals("0")){
|
|
powerButton.isOn=false;
|
|
msgBoxMain.setMessage("Track Power Off",color(30,30,150));
|
|
} else if(c.equals("2")){
|
|
msgBoxMain.setMessage("MAIN Track Current Overload - Power Off",color(200,30,30));
|
|
powerButton.isOn=false;
|
|
} else if(c.equals("3")){
|
|
msgBoxMain.setMessage("PROG Track Current Overload - Power Off",color(200,30,30));
|
|
powerButton.isOn=false;
|
|
}
|
|
break;
|
|
|
|
case 'a':
|
|
currentMeter.addSample(int(c));
|
|
break;
|
|
|
|
}
|
|
} // receivedString
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void keyCommand(char k, int kC){
|
|
|
|
if(activeInputBox!=null){
|
|
activeInputBox.keyStroke(k, kC);
|
|
return;
|
|
}
|
|
|
|
if(k==CODED){
|
|
switch(kC){
|
|
case UP:
|
|
if(throttleA.cabButton!=null){
|
|
if(!keyHold)
|
|
throttleA.pressed();
|
|
throttleA.keyControl(1);
|
|
}
|
|
break;
|
|
case DOWN:
|
|
if(throttleA.cabButton!=null){
|
|
if(!keyHold)
|
|
throttleA.pressed();
|
|
throttleA.keyControl(-1);
|
|
}
|
|
break;
|
|
case LEFT:
|
|
if(throttleA.cabButton!=null){
|
|
throttleA.keyControl(0);
|
|
}
|
|
break;
|
|
case RIGHT:
|
|
if(throttleA.cabButton!=null){
|
|
throttleA.cabButton.stopThrottle();
|
|
}
|
|
break;
|
|
}
|
|
} // key is coded
|
|
|
|
else{
|
|
switch(k){
|
|
case 'P':
|
|
powerButton.turnOn();
|
|
break;
|
|
|
|
case 'F':
|
|
aPort.write("<3>");
|
|
break;
|
|
|
|
case 'f':
|
|
aPort.write("<2>");
|
|
break;
|
|
|
|
case ' ':
|
|
powerButton.turnOff();
|
|
break;
|
|
|
|
case 'a':
|
|
accWindow.toggle();
|
|
break;
|
|
|
|
case 'c':
|
|
currentMeter.isOn=!currentMeter.isOn;
|
|
break;
|
|
|
|
case 'e':
|
|
extrasWindow.toggle();
|
|
break;
|
|
|
|
case 'x':
|
|
autoWindow.toggle();
|
|
break;
|
|
|
|
case 'S':
|
|
sensorWindow.toggle();
|
|
break;
|
|
|
|
case 'l':
|
|
ledWindow.toggle();
|
|
break;
|
|
|
|
case 's':
|
|
portWindow.toggle();
|
|
break;
|
|
|
|
case 'h':
|
|
helpWindow.toggle();
|
|
break;
|
|
|
|
case 'q':
|
|
imageWindow.toggle();
|
|
break;
|
|
|
|
case 'd':
|
|
diagWindow.toggle();
|
|
break;
|
|
|
|
case 'i':
|
|
if(layoutBridge.equals(layout2))
|
|
layoutBridge.copy(layout);
|
|
else
|
|
layoutBridge.copy(layout2);
|
|
break;
|
|
|
|
case 'p':
|
|
progWindow.toggle();
|
|
break;
|
|
|
|
case 'o':
|
|
opWindow.toggle();
|
|
break;
|
|
|
|
case 'n':
|
|
if(throttleA.cabButton!=null){
|
|
throttleA.cabButton.fbWindow.close();
|
|
throttleA.cabButton.fbWindow=throttleA.cabButton.windowList.get((throttleA.cabButton.windowList.indexOf(throttleA.cabButton.fbWindow)+1)%throttleA.cabButton.windowList.size());
|
|
throttleA.cabButton.fbWindow.open();
|
|
}
|
|
break;
|
|
|
|
case '1':
|
|
case '2':
|
|
case '3':
|
|
case '4':
|
|
case '5':
|
|
case '6':
|
|
case '7':
|
|
cabButtons.get(int(k)-int('1')).pressed();
|
|
break;
|
|
|
|
}
|
|
} // key not coded
|
|
|
|
keyHold=true;
|
|
} // keyCommand
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
void keyCommandReleased(char k, int kC){
|
|
|
|
keyHold=false;
|
|
|
|
if(k==CODED){
|
|
switch(kC){
|
|
}
|
|
} // key is coded
|
|
|
|
else{
|
|
switch(k){
|
|
}
|
|
} // key not coded
|
|
|
|
} // keyCommandReleased
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////// |