Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others. 4 : // This program and the accompanying materials are made available under the 5 : // terms of the Eclipse Public License 2.0 which is available at 6 : // https://www.eclipse.org/legal/epl-2.0/ 7 : // This Source Code may also be made available under the following Secondary 8 : // Licenses when the conditions for such availability set forth in the Eclipse 9 : // Public License 2.0 are satisfied: GNU General Public License, version 2 10 : // or later which is available at 11 : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html 12 : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later 13 : /****************************************************************************/ 14 : /// @file Command_Hotkey_TrafficLight.cpp 15 : /// @author Jakob Erdmann 16 : /// @date 31 Jan 2022 17 : /// 18 : // Registers custom hotkey for aborting current traffic light phase 19 : /****************************************************************************/ 20 : #include <config.h> 21 : 22 : #include <fxkeys.h> 23 : #include <microsim/traffic_lights/MSTrafficLightLogic.h> 24 : #include <guisim/GUINet.h> 25 : #include "Command_Hotkey_TrafficLight.h" 26 : 27 : 28 : // =========================================================================== 29 : // method definitions 30 : // =========================================================================== 31 0 : Command_Hotkey_TrafficLight::Command_Hotkey_TrafficLight(MSTrafficLightLogic& tll) : 32 0 : myLogic(tll) 33 0 : { } 34 : 35 : 36 0 : Command_Hotkey_TrafficLight::~Command_Hotkey_TrafficLight() { } 37 : 38 : 39 : SUMOTime 40 0 : Command_Hotkey_TrafficLight::execute(SUMOTime currentTime) { 41 0 : int next = (myLogic.getCurrentPhaseIndex() + 1) % myLogic.getPhaseNumber(); 42 0 : myLogic.changeStepAndDuration(MSNet::getInstance()->getTLSControl(), currentTime, next, -1); 43 0 : return 1; 44 : } 45 : 46 : 47 : bool 48 0 : Command_Hotkey_TrafficLight::registerHotkey(const std::string& key, MSTrafficLightLogic& tll) { 49 : int hotkey = -1; 50 0 : if (key.size() == 1) { 51 0 : char c = key[0]; 52 0 : if ('a' <= c && c <= 'z') { 53 : // see FXAccelTable::parseAccel 54 0 : hotkey = c + FX::KEY_space - ' '; 55 : } else { 56 0 : WRITE_WARNINGF(TL("Hotkey '%' is not supported"), key); 57 0 : return false; 58 : } 59 : } else { 60 0 : WRITE_WARNINGF(TL("Hotkey '%' is not supported"), key); 61 0 : return false; 62 : } 63 0 : GUINet* gn = dynamic_cast<GUINet*>(MSNet::getInstance()); 64 0 : if (gn != nullptr) { 65 0 : gn->addHotkey(hotkey, new Command_Hotkey_TrafficLight(tll)); 66 : } 67 : return true; 68 : } 69 : 70 : 71 : /****************************************************************************/