Implement dark component icons

This commit is contained in:
SiboVG 2023-09-28 18:50:35 +02:00
parent 10c9b918be
commit 382600f866
24 changed files with 471 additions and 42 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 419 B

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 464 B

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 284 B

After

Width:  |  Height:  |  Size: 284 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 446 B

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 244 B

After

Width:  |  Height:  |  Size: 244 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 768 B

After

Width:  |  Height:  |  Size: 768 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 628 B

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -9,6 +9,8 @@ import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import net.sf.openrocket.gui.util.GUIUtil;
import net.sf.openrocket.gui.util.UITheme;
import net.sf.openrocket.l10n.Translator;
import net.sf.openrocket.rocketcomponent.AxialStage;
import net.sf.openrocket.rocketcomponent.BodyTube;
@ -41,77 +43,138 @@ public class ComponentIcons {
private static final String SMALL_SUFFIX = "-small.png";
private static final String LARGE_SUFFIX = "-large.png";
// Component image file keys
private static String noseCone;
private static String bodyTube;
private static String transition;
private static String trapezoidFinSet;
private static String ellipticalFinSet;
private static String freeformFinSet;
private static String tubeFinSet;
private static String launchLug;
private static String railButton;
private static String innerTube;
private static String tubeCoupler;
private static String centeringRing;
private static String bulkhead;
private static String engineBlock;
private static String parachute;
private static String streamer;
private static String shockCord;
private static String mass;
private static String stage;
private static String boosters;
private static String pods;
private static String mass_altimeter;
private static String mass_battery;
private static String mass_deployment_charge;
private static String mass_payload;
private static String mass_flight_comp;
private static String mass_recovery_hardware;
private static String mass_tracker;
private static final HashMap<Class<?>, ImageIcon> SMALL_ICONS = new HashMap<Class<?>, ImageIcon>();
private static final HashMap<Class<?>, ImageIcon> LARGE_ICONS = new HashMap<Class<?>, ImageIcon>();
private static final HashMap<Class<?>, ImageIcon> DISABLED_ICONS = new HashMap<Class<?>, ImageIcon>();
private static final HashMap<MassComponentType, ImageIcon> MASS_COMPONENT_SMALL_ICONS = new HashMap<MassComponentType, ImageIcon>();
static {
initColors();
// // Nose cone
load("nosecone", trans.get("ComponentIcons.Nosecone"), NoseCone.class);
load(noseCone, trans.get("ComponentIcons.Nosecone"), NoseCone.class);
// // Body tube
load("bodytube", trans.get("ComponentIcons.Bodytube"), BodyTube.class);
load(bodyTube, trans.get("ComponentIcons.Bodytube"), BodyTube.class);
//// Transition
load("transition", trans.get("ComponentIcons.Transition"), Transition.class);
load(transition, trans.get("ComponentIcons.Transition"), Transition.class);
//// Trapezoidal fin set
load("trapezoidfin", trans.get("ComponentIcons.Trapezoidalfinset"), TrapezoidFinSet.class);
load(trapezoidFinSet, trans.get("ComponentIcons.Trapezoidalfinset"), TrapezoidFinSet.class);
//// Elliptical fin set
load("ellipticalfin", trans.get("ComponentIcons.Ellipticalfinset"), EllipticalFinSet.class);
load(ellipticalFinSet, trans.get("ComponentIcons.Ellipticalfinset"), EllipticalFinSet.class);
//// Freeform fin set
load("freeformfin", trans.get("ComponentIcons.Freeformfinset"), FreeformFinSet.class);
load(freeformFinSet, trans.get("ComponentIcons.Freeformfinset"), FreeformFinSet.class);
//// Tube fin set
load("tubefin", trans.get("ComponentIcons.Tubefinset"), TubeFinSet.class);
load(tubeFinSet, trans.get("ComponentIcons.Tubefinset"), TubeFinSet.class);
//// Launch lug
load("launchlug", trans.get("ComponentIcons.Launchlug"), LaunchLug.class);
load(launchLug, trans.get("ComponentIcons.Launchlug"), LaunchLug.class);
//// Rail Button
load("railbutton", trans.get("ComponentIcons.RailButton"), RailButton.class);
load(railButton, trans.get("ComponentIcons.RailButton"), RailButton.class);
//// Inner tube
load("innertube", trans.get("ComponentIcons.Innertube"), InnerTube.class);
load(innerTube, trans.get("ComponentIcons.Innertube"), InnerTube.class);
//// Tube coupler
load("tubecoupler", trans.get("ComponentIcons.Tubecoupler"), TubeCoupler.class);
load(tubeCoupler, trans.get("ComponentIcons.Tubecoupler"), TubeCoupler.class);
//// Centering ring
load("centeringring", trans.get("ComponentIcons.Centeringring"), CenteringRing.class);
load(centeringRing, trans.get("ComponentIcons.Centeringring"), CenteringRing.class);
//// Bulkhead
load("bulkhead", trans.get("ComponentIcons.Bulkhead"), Bulkhead.class);
load(bulkhead, trans.get("ComponentIcons.Bulkhead"), Bulkhead.class);
// // Engine block
load("engineblock", trans.get("ComponentIcons.Engineblock"),
load(engineBlock, trans.get("ComponentIcons.Engineblock"),
EngineBlock.class);
// // Parachute
load("parachute", trans.get("ComponentIcons.Parachute"),
load(parachute, trans.get("ComponentIcons.Parachute"),
Parachute.class);
// // Streamer
load("streamer", trans.get("ComponentIcons.Streamer"), Streamer.class);
load(streamer, trans.get("ComponentIcons.Streamer"), Streamer.class);
// // Shock cord
load("shockcord", trans.get("ComponentIcons.Shockcord"),
load(shockCord, trans.get("ComponentIcons.Shockcord"),
ShockCord.class);
load("mass", trans.get("ComponentIcons.Masscomponent"),
load(mass, trans.get("ComponentIcons.Masscomponent"),
MassComponent.class);
// // Component Assemblies
load("stage", trans.get("ComponentIcons.Stage"),
load(stage, trans.get("ComponentIcons.Stage"),
AxialStage.class);
load("boosters", trans.get("ComponentIcons.Boosters"),
load(boosters, trans.get("ComponentIcons.Boosters"),
ParallelStage.class);
load("pods", trans.get("ComponentIcons.Pods"),
load(pods, trans.get("ComponentIcons.Pods"),
PodSet.class);
// // Mass components
loadMassTypeIcon("mass", trans.get("ComponentIcons.Masscomponent"),
MassComponentType.MASSCOMPONENT);
loadMassTypeIcon("altimeter", trans.get("ComponentIcons.Altimeter"),
MassComponentType.ALTIMETER);
loadMassTypeIcon("battery", trans.get("ComponentIcons.Battery"),
MassComponentType.BATTERY);
loadMassTypeIcon("deployment-charge",
trans.get("ComponentIcons.Deploymentcharge"),
loadMassTypeIcon(mass, trans.get("ComponentIcons.Masscomponent"), MassComponentType.MASSCOMPONENT);
loadMassTypeIcon(mass_altimeter, trans.get("ComponentIcons.Altimeter"), MassComponentType.ALTIMETER);
loadMassTypeIcon(mass_battery, trans.get("ComponentIcons.Battery"), MassComponentType.BATTERY);
loadMassTypeIcon(mass_deployment_charge, trans.get("ComponentIcons.Deploymentcharge"),
MassComponentType.DEPLOYMENTCHARGE);
loadMassTypeIcon("payload", trans.get("ComponentIcons.Payload"),
MassComponentType.PAYLOAD);
loadMassTypeIcon("flight-comp",
trans.get("ComponentIcons.Flightcomputer"),
MassComponentType.FLIGHTCOMPUTER);
loadMassTypeIcon("recovery-hardware",
trans.get("ComponentIcons.Recoveryhardware"),
MassComponentType.RECOVERYHARDWARE);
loadMassTypeIcon("tracker", trans.get("ComponentIcons.Tracker"),
MassComponentType.TRACKER);
loadMassTypeIcon(mass_payload, trans.get("ComponentIcons.Payload"), MassComponentType.PAYLOAD);
loadMassTypeIcon(mass_flight_comp,
trans.get("ComponentIcons.Flightcomputer"), MassComponentType.FLIGHTCOMPUTER);
loadMassTypeIcon(mass_recovery_hardware,
trans.get("ComponentIcons.Recoveryhardware"), MassComponentType.RECOVERYHARDWARE);
loadMassTypeIcon(mass_tracker, trans.get("ComponentIcons.Tracker"), MassComponentType.TRACKER);
}
private static void initColors() {
updateColors();
UITheme.Theme.addUIThemeChangeListener(ComponentIcons::updateColors);
}
private static void updateColors() {
noseCone = GUIUtil.getUITheme().getComponentIconNoseCone();
bodyTube = GUIUtil.getUITheme().getComponentIconBodyTube();
transition = GUIUtil.getUITheme().getComponentIconTransition();
trapezoidFinSet = GUIUtil.getUITheme().getComponentIconTrapezoidFinSet();
ellipticalFinSet = GUIUtil.getUITheme().getComponentIconEllipticalFinSet();
freeformFinSet = GUIUtil.getUITheme().getComponentIconFreeformFinSet();
tubeFinSet = GUIUtil.getUITheme().getComponentIconTubeFinSet();
launchLug = GUIUtil.getUITheme().getComponentIconLaunchLug();
railButton = GUIUtil.getUITheme().getComponentIconRailButton();
innerTube = GUIUtil.getUITheme().getComponentIconInnerTube();
tubeCoupler = GUIUtil.getUITheme().getComponentIconTubeCoupler();
centeringRing = GUIUtil.getUITheme().getComponentIconCenteringRing();
bulkhead = GUIUtil.getUITheme().getComponentIconBulkhead();
engineBlock = GUIUtil.getUITheme().getComponentIconEngineBlock();
parachute = GUIUtil.getUITheme().getComponentIconParachute();
streamer = GUIUtil.getUITheme().getComponentIconStreamer();
shockCord = GUIUtil.getUITheme().getComponentIconShockCord();
mass = GUIUtil.getUITheme().getComponentIconMass();
stage = GUIUtil.getUITheme().getComponentIconStage();
boosters = GUIUtil.getUITheme().getComponentIconBoosters();
pods = GUIUtil.getUITheme().getComponentIconPods();
mass_altimeter = GUIUtil.getUITheme().getComponentIconMassAltimeter();
mass_battery = GUIUtil.getUITheme().getComponentIconMassBattery();
mass_deployment_charge = GUIUtil.getUITheme().getComponentIconMassDeploymentCharge();
mass_payload = GUIUtil.getUITheme().getComponentIconMassPayload();
mass_flight_comp = GUIUtil.getUITheme().getComponentIconMassFlightComp();
mass_recovery_hardware = GUIUtil.getUITheme().getComponentIconMassRecoveryHardware();
mass_tracker = GUIUtil.getUITheme().getComponentIconMassTracker();
}
private static void load(String filename, String name,

View File

@ -11,19 +11,16 @@ import org.slf4j.LoggerFactory;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.Border;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
public class UITheme {
private static final Translator trans = Application.getTranslator();
@ -87,6 +84,36 @@ public class UITheme {
void formatScriptTextArea(RSyntaxTextArea textArea);
// Rocket component icons
String getComponentIconNoseCone();
String getComponentIconBodyTube();
String getComponentIconTransition();
String getComponentIconTrapezoidFinSet();
String getComponentIconEllipticalFinSet();
String getComponentIconFreeformFinSet();
String getComponentIconTubeFinSet();
String getComponentIconLaunchLug();
String getComponentIconRailButton();
String getComponentIconInnerTube();
String getComponentIconTubeCoupler();
String getComponentIconCenteringRing();
String getComponentIconBulkhead();
String getComponentIconEngineBlock();
String getComponentIconParachute();
String getComponentIconStreamer();
String getComponentIconShockCord();
String getComponentIconMass();
String getComponentIconStage();
String getComponentIconBoosters();
String getComponentIconPods();
String getComponentIconMassAltimeter();
String getComponentIconMassBattery();
String getComponentIconMassDeploymentCharge();
String getComponentIconMassPayload();
String getComponentIconMassFlightComp();
String getComponentIconMassRecoveryHardware();
String getComponentIconMassTracker();
// Static list of listeners
static List<Runnable> themeChangeListeners = new ArrayList<>();
@ -361,6 +388,119 @@ public class UITheme {
log.warn("Unable to load RSyntaxTextArea theme", ioe);
}
}
@Override
public String getComponentIconNoseCone() {
return "nosecone";
}
@Override
public String getComponentIconBodyTube() {
return "bodytube";
}
@Override
public String getComponentIconTransition() {
return "transition";
}
@Override
public String getComponentIconTrapezoidFinSet() {
return "trapezoidfin";
}
@Override
public String getComponentIconEllipticalFinSet() {
return "ellipticalfin";
}
@Override
public String getComponentIconFreeformFinSet() {
return "freeformfin";
}
@Override
public String getComponentIconTubeFinSet() {
return "tubefin";
}
@Override
public String getComponentIconLaunchLug() {
return "launchlug";
}
@Override
public String getComponentIconRailButton() {
return "railbutton";
}
@Override
public String getComponentIconInnerTube() {
return "innertube";
}
@Override
public String getComponentIconTubeCoupler() {
return "tubecoupler";
}
@Override
public String getComponentIconCenteringRing() {
return "centeringring";
}
@Override
public String getComponentIconBulkhead() {
return "bulkhead";
}
@Override
public String getComponentIconEngineBlock() {
return "engineblock";
}
@Override
public String getComponentIconParachute() {
return "parachute";
}
@Override
public String getComponentIconStreamer() {
return "streamer";
}
@Override
public String getComponentIconShockCord() {
return "shockcord";
}
@Override
public String getComponentIconMass() {
return "mass";
}
@Override
public String getComponentIconStage() {
return "stage";
}
@Override
public String getComponentIconBoosters() {
return "boosters";
}
@Override
public String getComponentIconPods() {
return "pods";
}
@Override
public String getComponentIconMassAltimeter() {
return "altimeter";
}
@Override
public String getComponentIconMassBattery() {
return "battery";
}
@Override
public String getComponentIconMassDeploymentCharge() {
return "deployment-charge";
}
@Override
public String getComponentIconMassPayload() {
return "payload";
}
@Override
public String getComponentIconMassFlightComp() {
return "flight-comp";
}
@Override
public String getComponentIconMassRecoveryHardware() {
return "recovery-hardware";
}
@Override
public String getComponentIconMassTracker() {
return "tracker";
}
},
DARK {
private final String displayName = trans.get("UITheme.Dark");
@ -591,6 +731,119 @@ public class UITheme {
log.warn("Unable to load RSyntaxTextArea theme", ioe);
}
}
@Override
public String getComponentIconNoseCone() {
return "nosecone";
}
@Override
public String getComponentIconBodyTube() {
return "bodytube";
}
@Override
public String getComponentIconTransition() {
return "transition";
}
@Override
public String getComponentIconTrapezoidFinSet() {
return "trapezoidfin";
}
@Override
public String getComponentIconEllipticalFinSet() {
return "ellipticalfin_dark";
}
@Override
public String getComponentIconFreeformFinSet() {
return "freeformfin_dark";
}
@Override
public String getComponentIconTubeFinSet() {
return "tubefin";
}
@Override
public String getComponentIconLaunchLug() {
return "launchlug_dark";
}
@Override
public String getComponentIconRailButton() {
return "railbutton";
}
@Override
public String getComponentIconInnerTube() {
return "innertube";
}
@Override
public String getComponentIconTubeCoupler() {
return "tubecoupler";
}
@Override
public String getComponentIconCenteringRing() {
return "centeringring";
}
@Override
public String getComponentIconBulkhead() {
return "bulkhead";
}
@Override
public String getComponentIconEngineBlock() {
return "engineblock";
}
@Override
public String getComponentIconParachute() {
return "parachute_dark";
}
@Override
public String getComponentIconStreamer() {
return "streamer_dark";
}
@Override
public String getComponentIconShockCord() {
return "shockcord_dark";
}
@Override
public String getComponentIconMass() {
return "mass_dark";
}
@Override
public String getComponentIconStage() {
return "stage";
}
@Override
public String getComponentIconBoosters() {
return "boosters";
}
@Override
public String getComponentIconPods() {
return "pods_dark";
}
@Override
public String getComponentIconMassAltimeter() {
return "altimeter_dark";
}
@Override
public String getComponentIconMassBattery() {
return "battery_dark";
}
@Override
public String getComponentIconMassDeploymentCharge() {
return "deployment-charge_dark";
}
@Override
public String getComponentIconMassPayload() {
return "payload";
}
@Override
public String getComponentIconMassFlightComp() {
return "flight-comp_dark";
}
@Override
public String getComponentIconMassRecoveryHardware() {
return "recovery-hardware_dark";
}
@Override
public String getComponentIconMassTracker() {
return "tracker_dark";
}
},
AUTO {
private final String displayName = trans.get("UITheme.Auto");
@ -833,6 +1086,119 @@ public class UITheme {
public void formatScriptTextArea(RSyntaxTextArea textArea) {
getCurrentTheme().formatScriptTextArea(textArea);
}
@Override
public String getComponentIconNoseCone() {
return getCurrentTheme().getComponentIconNoseCone();
}
@Override
public String getComponentIconBodyTube() {
return getCurrentTheme().getComponentIconBodyTube();
}
@Override
public String getComponentIconTransition() {
return getCurrentTheme().getComponentIconTransition();
}
@Override
public String getComponentIconTrapezoidFinSet() {
return getCurrentTheme().getComponentIconTrapezoidFinSet();
}
@Override
public String getComponentIconEllipticalFinSet() {
return getCurrentTheme().getComponentIconEllipticalFinSet();
}
@Override
public String getComponentIconFreeformFinSet() {
return getCurrentTheme().getComponentIconFreeformFinSet();
}
@Override
public String getComponentIconTubeFinSet() {
return getCurrentTheme().getComponentIconTubeFinSet();
}
@Override
public String getComponentIconLaunchLug() {
return getCurrentTheme().getComponentIconLaunchLug();
}
@Override
public String getComponentIconRailButton() {
return getCurrentTheme().getComponentIconRailButton();
}
@Override
public String getComponentIconInnerTube() {
return getCurrentTheme().getComponentIconInnerTube();
}
@Override
public String getComponentIconTubeCoupler() {
return getCurrentTheme().getComponentIconTubeCoupler();
}
@Override
public String getComponentIconCenteringRing() {
return getCurrentTheme().getComponentIconCenteringRing();
}
@Override
public String getComponentIconBulkhead() {
return getCurrentTheme().getComponentIconBulkhead();
}
@Override
public String getComponentIconEngineBlock() {
return getCurrentTheme().getComponentIconEngineBlock();
}
@Override
public String getComponentIconParachute() {
return getCurrentTheme().getComponentIconParachute();
}
@Override
public String getComponentIconStreamer() {
return getCurrentTheme().getComponentIconStreamer();
}
@Override
public String getComponentIconShockCord() {
return getCurrentTheme().getComponentIconShockCord();
}
@Override
public String getComponentIconMass() {
return getCurrentTheme().getComponentIconMass();
}
@Override
public String getComponentIconStage() {
return getCurrentTheme().getComponentIconStage();
}
@Override
public String getComponentIconBoosters() {
return getCurrentTheme().getComponentIconBoosters();
}
@Override
public String getComponentIconPods() {
return getCurrentTheme().getComponentIconPods();
}
@Override
public String getComponentIconMassAltimeter() {
return getCurrentTheme().getComponentIconMassAltimeter();
}
@Override
public String getComponentIconMassBattery() {
return getCurrentTheme().getComponentIconMassBattery();
}
@Override
public String getComponentIconMassDeploymentCharge() {
return getCurrentTheme().getComponentIconMassDeploymentCharge();
}
@Override
public String getComponentIconMassPayload() {
return getCurrentTheme().getComponentIconMassPayload();
}
@Override
public String getComponentIconMassFlightComp() {
return getCurrentTheme().getComponentIconMassFlightComp();
}
@Override
public String getComponentIconMassRecoveryHardware() {
return getCurrentTheme().getComponentIconMassRecoveryHardware();
}
@Override
public String getComponentIconMassTracker() {
return getCurrentTheme().getComponentIconMassTracker();
}
}
}