Path: blob/main/src/utils/gui/images/GUITextureSubSys.cpp
169684 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GUITextureSubSys.cpp14/// @author Pablo Alvarez Lopez15/// @date Jul 201616///17// Helper for Gifs loading and usage18/****************************************************************************/192021#include "GUITextureSubSys.h"2223#include "textures/E3.cpp"24#include "textures/E3Selected.cpp"25#include "textures/LaneBike.cpp"26#include "textures/LaneBus.cpp"27#include "textures/LanePedestrian.cpp"28#include "textures/Lock.cpp"29#include "textures/NotMoving.cpp"30#include "textures/NotMovingSelected.cpp"31#include "textures/Rerouter.cpp"32#include "textures/RerouterSelected.cpp"33#include "textures/Rerouter_ClosingLaneReroute.cpp"34#include "textures/Rerouter_ClosingReroute.cpp"35#include "textures/Rerouter_DestProbReroute.cpp"36#include "textures/Rerouter_Interval.cpp"37#include "textures/Rerouter_ParkingAreaReroute.cpp"38#include "textures/Rerouter_RouteProbReroute.cpp"39#include "textures/RouteProbe.cpp"40#include "textures/RouteProbeSelected.cpp"41#include "textures/Stop.cpp"42#include "textures/StopContainer.cpp"43#include "textures/StopContainerSelected.cpp"44#include "textures/StopPerson.cpp"45#include "textures/StopPersonSelected.cpp"46#include "textures/StopSelected.cpp"47#include "textures/TLS.cpp"48#include "textures/TractionSubstation.cpp"49#include "textures/TractionSubstationSelected.cpp"50#include "textures/Vaporizer.cpp"51#include "textures/VaporizerSelected.cpp"52#include "textures/VariableSpeedSign.cpp"53#include "textures/VariableSpeedSignSelected.cpp"54#include "textures/VariableSpeedSign_Step.cpp"5556#include "textures/POITextures/Pin.cpp"57#include "textures/POITextures/Nature.cpp"58#include "textures/POITextures/Hotel.cpp"59#include "textures/POITextures/Fuel.cpp"60#include "textures/POITextures/Charging_station.cpp"6162// ===========================================================================63// static member variable definitions64// ===========================================================================6566GUITextureSubSys* GUITextureSubSys::myInstance = nullptr;6768// ===========================================================================69// member definitions70// ===========================================================================7172GUITextureSubSys::GUITextureSubSys(FXApp* app) :73myApp(app) {74}757677GUITextureSubSys::~GUITextureSubSys() {78}798081void82GUITextureSubSys::initTextures(FXApp* a) {83assert(myInstance == 0);84myInstance = new GUITextureSubSys(a);85}868788GUIGlID89GUITextureSubSys::getTexture(GUITexture textureID) {90// If texture isn't loaded, load it91if (myInstance->myTextures.count(textureID) == 0) {92switch (textureID) {93case GUITexture::E3:94myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, E3, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));95break;96case GUITexture::E3_SELECTED:97myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, E3Selected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));98break;99case GUITexture::LOCK:100myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Lock, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));101break;102case GUITexture::NOTMOVING:103myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, NotMoving, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));104break;105case GUITexture::NOTMOVING_SELECTED:106myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, NotMovingSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));107break;108case GUITexture::REROUTER:109myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));110break;111case GUITexture::REROUTER_SELECTED:112myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, RerouterSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));113break;114case GUITexture::REROUTER_INTERVAL:115myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_Interval, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));116break;117case GUITexture::REROUTER_CLOSINGREROUTE:118myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_ClosingReroute, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));119break;120case GUITexture::REROUTER_CLOSINGLANEREROUTE:121myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_ClosingLaneReroute, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));122break;123case GUITexture::REROUTER_ROUTEPROBREROUTE:124myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_RouteProbReroute, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));125break;126case GUITexture::REROUTER_DESTPROBREROUTE:127myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_DestProbReroute, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));128break;129case GUITexture::REROUTER_PARKINGAREAREROUTE:130myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Rerouter_ParkingAreaReroute, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));131break;132case GUITexture::ROUTEPROBE:133myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, RouteProbe, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));134break;135case GUITexture::ROUTEPROBE_SELECTED:136myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, RouteProbeSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));137break;138case GUITexture::TLS:139myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, TLS, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));140break;141case GUITexture::VAPORIZER:142myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Vaporizer, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));143break;144case GUITexture::VAPORIZER_SELECTED:145myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, VaporizerSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));146break;147case GUITexture::VARIABLESPEEDSIGN:148myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, VariableSpeedSign, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));149break;150case GUITexture::VARIABLESPEEDSIGN_SELECTED:151myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, VariableSpeedSignSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));152break;153case GUITexture::VARIABLESPEEDSIGN_STEP:154myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, VariableSpeedSign_Step, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));155break;156case GUITexture::LANE_BIKE:157myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, LaneBike, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));158break;159case GUITexture::LANE_BUS:160myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, LaneBus, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));161break;162case GUITexture::LANE_PEDESTRIAN:163myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, LanePedestrian, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));164break;165case GUITexture::STOP:166myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, Stop, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));167break;168case GUITexture::STOP_SELECTED:169myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, StopSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));170break;171case GUITexture::STOPPERSON:172myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, StopPerson, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));173break;174case GUITexture::STOPPERSON_SELECTED:175myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, StopPersonSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));176break;177case GUITexture::STOPCONTAINER:178myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, StopContainer, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));179break;180case GUITexture::STOPCONTAINER_SELECTED:181myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, StopContainerSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));182break;183case GUITexture::TRACTIONSUBSTATION:184myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, TractionSubstation, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));185break;186case GUITexture::TRACTIONSUBSTATION_SELECTED:187myInstance->myTextures[textureID] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, TractionSubstationSelected, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));188break;189default:190throw ProcessError(TL("Undefined texture"));191}192}193// Return GLID associated to the texture194return myInstance->myTextures.at(textureID);195}196197198GUIGlID199GUITextureSubSys::getPOITexture(POIIcon icon) {200// first check if texture exist201if (myInstance->myPOITextures.count(icon) == 0) {202switch (icon) {203case POIIcon::PIN:204myInstance->myPOITextures[icon] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, POITexture_Pin, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));205break;206case POIIcon::NATURE:207myInstance->myPOITextures[icon] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, POITexture_Nature, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));208break;209case POIIcon::HOTEL:210myInstance->myPOITextures[icon] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, POITexture_Hotel, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));211break;212case POIIcon::FUEL:213myInstance->myPOITextures[icon] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, POITexture_Fuel, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));214break;215case POIIcon::CHARGING_STATION:216myInstance->myPOITextures[icon] = GUITexturesHelper::add(new FXGIFImage(myInstance->myApp, POITexture_Charging_station, IMAGE_KEEP | IMAGE_SHMI | IMAGE_SHMP));217break;218default:219throw ProcessError("Undefined POI texture");220}221}222return myInstance->myPOITextures.at(icon);223}224225226void227GUITextureSubSys::resetTextures() {228// Reset all textures229GUITexturesHelper::clearTextures();230for (auto& texture : myInstance->myTextures) {231texture.second = 0;232}233myInstance->myTextures.clear();234for (auto& POITexture : myInstance->myPOITextures) {235POITexture.second = 0;236}237myInstance->myPOITextures.clear();238}239240241void242GUITextureSubSys::close() {243delete myInstance;244myInstance = nullptr;245}246247/****************************************************************************/248249250