diff --git a/pom.xml b/pom.xml index 324202e..aa8a9df 100644 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,17 @@ 6.0.0 test + + net.bytebuddy + byte-buddy + 1.18.4 + + + org.jetbrains + annotations + 26.0.2 + compile + \ No newline at end of file diff --git a/src/main/java/org/openautonomousconnection/oacswing/JAnimatedComponent.java b/src/main/java/org/openautonomousconnection/oacswing/JAnimatedComponent.java deleted file mode 100644 index e12ef8b..0000000 --- a/src/main/java/org/openautonomousconnection/oacswing/JAnimatedComponent.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.openautonomousconnection.oacswing; - -public interface JAnimatedComponent { - void play(double speed, boolean loop); - - default void play(double speed) { - this.play(speed, false); - } - - default void play() { - this.play(1, false); - } - - void stop(); -} diff --git a/src/main/java/org/openautonomousconnection/oacswing/JTitledComponent.java b/src/main/java/org/openautonomousconnection/oacswing/JTitledComponent.java deleted file mode 100644 index 510ac63..0000000 --- a/src/main/java/org/openautonomousconnection/oacswing/JTitledComponent.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.openautonomousconnection.oacswing; - -import lombok.Getter; -import lombok.Setter; - -import javax.swing.*; -import java.awt.*; - -public class JTitledComponent extends JPanel { - @Getter @Setter - private JLabel title; - - @Getter @Setter - private C component; - - public JTitledComponent(String title, C component) { - this.setLayout(new FlowLayout()); - - this.title = new JLabel(title); - - this.component = component; - - this.add(this.title); - this.add(this.component); - } -} diff --git a/src/main/java/org/openautonomousconnection/oacswing/ModifiableImageIcon.java b/src/main/java/org/openautonomousconnection/oacswing/ModifiableImageIcon.java new file mode 100644 index 0000000..917ab80 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/ModifiableImageIcon.java @@ -0,0 +1,96 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing; + +import org.openautonomousconnection.oacswing.icons.IconSize; + +import javax.swing.*; +import java.awt.*; +import java.net.URL; + +/** + * Image icon with several (planned) modification methods, like resize(x, y) + */ +public class ModifiableImageIcon extends ImageIcon { + public ModifiableImageIcon(String filename, String description) { + super(filename, description); + } + + public ModifiableImageIcon(String filename) { + super(filename); + } + + public ModifiableImageIcon(URL location, String description) { + super(location, description); + } + + public ModifiableImageIcon(URL location) { + super(location); + } + + public ModifiableImageIcon(Image image, String description) { + super(image, description); + } + + public ModifiableImageIcon(Image image) { + super(image); + } + + public ModifiableImageIcon(byte[] imageData, String description) { + super(imageData, description); + } + + public ModifiableImageIcon(byte[] imageData) { + super(imageData); + } + + public ModifiableImageIcon() { + super(); + } + + public ModifiableImageIcon ofSize(IconSize iconSize, int hints) { + return this.ofSize(iconSize.getScale(), iconSize.getScale(), hints); + } + + public ModifiableImageIcon ofSize(IconSize iconSize) { + return this.ofSize(iconSize.getScale(), iconSize.getScale()); + } + + public ModifiableImageIcon ofSize(int newWidth, int newHeight) { + return this.ofSize(newWidth, newHeight, Image.SCALE_SMOOTH); + } + + public ModifiableImageIcon ofSize(int newWidth, int newHeight, int hints) { + ModifiableImageIcon icon = this.clone(); + + icon.resize(newWidth, newHeight, hints); + + return icon; + } + + public void resize(int newWidth, int newHeight) { + this.resize(newWidth, newHeight, Image.SCALE_SMOOTH); + } + + public void resize(int newWidth, int newHeight, int hints) { + Image image = this.getImage(); + + this.setImage(image.getScaledInstance(newWidth, newHeight, hints)); + } + + public void resize(IconSize iconSize) { + this.resize(iconSize.getScale(), iconSize.getScale()); + } + + public void resize(IconSize iconSize, int hints) { + this.resize(iconSize.getScale(), iconSize.getScale(), hints); + } + + @Override + public ModifiableImageIcon clone() { + return new ModifiableImageIcon(this.getImage(), this.getDescription()); + } + +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/animated/AnimatedComponent.java b/src/main/java/org/openautonomousconnection/oacswing/animated/AnimatedComponent.java new file mode 100644 index 0000000..5061724 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/animated/AnimatedComponent.java @@ -0,0 +1,62 @@ +/* Author: Maple + * Jan. 23 2026 + * */ + +package org.openautonomousconnection.oacswing.animated; + +import javax.swing.*; +import java.util.concurrent.atomic.AtomicInteger; + +public interface AnimatedComponent { + void setCurrentRun(Timer timer); + Timer getCurrentRun(); + + void setAnimationPath(AnimationPath animationPath); + AnimationPath getAnimationPath(); + + void setBounds(int x, int y, int width, int height); + + default void play(double speed, boolean loop) { + AtomicInteger ticksPassed = new AtomicInteger(); + + this.setCurrentRun(new Timer(0, e -> { + + if(ticksPassed.get() * speed / (100) < 1) { + ticksPassed.addAndGet(this.getAnimationPath().getInbetweens()); + return; + } + + KeyFrame next = this.getAnimationPath().getNext(); + + if(next == null) { + if(loop) + this.getAnimationPath().reset(); + else + ((Timer) e.getSource()).stop(); + return; + } + + this.setBounds(next.position().x, next.position().y, next.width(), next.height()); + + ticksPassed.set(0); + })); + + this.getCurrentRun().start(); + } + + default void play(double speed) { + this.play(speed, false); + } + + default void play() { + this.play(1, false); + } + + default void stop() { + if(this.getCurrentRun() != null) + if(this.getCurrentRun().isRunning()) + this.getCurrentRun().stop(); + + this.getAnimationPath().reset(); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/animated/AnimationPath.java b/src/main/java/org/openautonomousconnection/oacswing/animated/AnimationPath.java index 5fb90a2..db9c37c 100644 --- a/src/main/java/org/openautonomousconnection/oacswing/animated/AnimationPath.java +++ b/src/main/java/org/openautonomousconnection/oacswing/animated/AnimationPath.java @@ -1,3 +1,7 @@ +/* Author: Maple + * Jan. 24 2026 + * */ + package org.openautonomousconnection.oacswing.animated; import lombok.Getter; diff --git a/src/main/java/org/openautonomousconnection/oacswing/animated/JAnimatedPanel.java b/src/main/java/org/openautonomousconnection/oacswing/animated/JAnimatedPanel.java index fc016c9..5ad2f35 100644 --- a/src/main/java/org/openautonomousconnection/oacswing/animated/JAnimatedPanel.java +++ b/src/main/java/org/openautonomousconnection/oacswing/animated/JAnimatedPanel.java @@ -1,56 +1,22 @@ +/* Author: Maple + * Jan. 23 2026 + * */ + package org.openautonomousconnection.oacswing.animated; import lombok.Getter; import lombok.Setter; -import org.openautonomousconnection.oacswing.JAnimatedComponent; import javax.swing.*; -import java.util.concurrent.atomic.AtomicInteger; -public class JAnimatedPanel extends JPanel implements JAnimatedComponent { +public class JAnimatedPanel extends JPanel implements AnimatedComponent { @Getter @Setter private AnimationPath animationPath; + @Getter @Setter private Timer currentRun = null; public JAnimatedPanel(AnimationPath animationPath) { this.animationPath = animationPath; } - - - @Override - public void play(double speed, boolean loop) { - - AtomicInteger ticksPassed = new AtomicInteger(); - - this.currentRun = new Timer(0, e -> { - - if(ticksPassed.get() * speed / (100) < 1) { - ticksPassed.addAndGet(animationPath.getInbetweens()); - return; - } - - KeyFrame next = animationPath.getNext(); - - if(next == null) { - ((Timer) e.getSource()).stop(); - return; - } - - setBounds(next.position().x, next.position().y, next.width(), next.height()); - - ticksPassed.set(0); - }); - - this.currentRun.start(); - } - - @Override - public void stop() { - if(this.currentRun != null) - if(this.currentRun.isRunning()) - this.currentRun.stop(); - - this.animationPath.reset(); - } } diff --git a/src/main/java/org/openautonomousconnection/oacswing/animated/KeyFrame.java b/src/main/java/org/openautonomousconnection/oacswing/animated/KeyFrame.java index 87ab3f3..ee0ed6e 100644 --- a/src/main/java/org/openautonomousconnection/oacswing/animated/KeyFrame.java +++ b/src/main/java/org/openautonomousconnection/oacswing/animated/KeyFrame.java @@ -1,3 +1,7 @@ +/* Author: Maple + * Jan. 24 2026 + * */ + package org.openautonomousconnection.oacswing.animated; import javax.swing.*; diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACAnimatedPanel.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACAnimatedPanel.java new file mode 100644 index 0000000..b04dfee --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACAnimatedPanel.java @@ -0,0 +1,25 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import lombok.Getter; +import lombok.Setter; +import org.openautonomousconnection.oacswing.animated.AnimatedComponent; +import org.openautonomousconnection.oacswing.animated.AnimationPath; + +import javax.swing.*; + +public class OACAnimatedPanel extends OACPanel implements AnimatedComponent { + @Getter + @Setter + private AnimationPath animationPath; + + @Getter @Setter + private Timer currentRun = null; + + public OACAnimatedPanel(AnimationPath animationPath) { + this.animationPath = animationPath; + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACButton.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACButton.java new file mode 100644 index 0000000..7726528 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACButton.java @@ -0,0 +1,65 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; +import org.openautonomousconnection.oacswing.component.design.Design; + +import javax.swing.*; +import java.awt.*; +import java.beans.ConstructorProperties; + +public class OACButton extends JButton implements OACComponent { + public OACButton() { + super(null, null); + } + + public OACButton(Design design, Icon icon) { + super(null, icon); + } + + @ConstructorProperties({"text"}) + public OACButton(String text) { + super(text, null); + } + + public OACButton(Action a) { + super(a); + } + + public OACButton(String text, Icon icon) { + super(text, icon); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBox.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBox.java new file mode 100644 index 0000000..f088402 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBox.java @@ -0,0 +1,69 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACCheckBox extends JCheckBox implements OACComponent { + public OACCheckBox() { + super(); + } + + public OACCheckBox(Icon icon) { + super(icon); + } + + public OACCheckBox(Icon icon, boolean selected) { + super(icon, selected); + } + + public OACCheckBox(String text) { + super(text); + } + + public OACCheckBox(Action a) { + super(a); + } + + public OACCheckBox(String text, boolean selected) { + super(text, selected); + } + + public OACCheckBox(String text, Icon icon) { + super(text, icon); + } + + public OACCheckBox(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + + @Override + public Component add(Component comp) { + return OACComponent.super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + return OACComponent.super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + OACComponent.super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + return OACComponent.super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + OACComponent.super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBoxMenuItem.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBoxMenuItem.java new file mode 100644 index 0000000..21dafa3 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACCheckBoxMenuItem.java @@ -0,0 +1,65 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACCheckBoxMenuItem extends JCheckBoxMenuItem implements OACComponent { + public OACCheckBoxMenuItem() { + super(); + } + + public OACCheckBoxMenuItem(Icon icon) { + super(icon); + } + + public OACCheckBoxMenuItem(String text) { + super(text); + } + + public OACCheckBoxMenuItem(Action a) { + super(a); + } + + public OACCheckBoxMenuItem(String text, Icon icon) { + super(text, icon); + } + + public OACCheckBoxMenuItem(String text, boolean b) { + super(text, b); + } + + public OACCheckBoxMenuItem(String text, Icon icon, boolean b) { + super(text, icon, b); + } + + @Override + public Component add(Component comp) { + return OACComponent.super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + return OACComponent.super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + OACComponent.super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + return OACComponent.super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + OACComponent.super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACColorChooser.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACColorChooser.java new file mode 100644 index 0000000..0729043 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACColorChooser.java @@ -0,0 +1,37 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACColorChooser extends JColorChooser implements OACComponent { + @Override + public Component add(Component comp) { + return OACComponent.super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + return OACComponent.super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + OACComponent.super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + return OACComponent.super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + OACComponent.super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACComboBox.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACComboBox.java new file mode 100644 index 0000000..c40bb0b --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACComboBox.java @@ -0,0 +1,54 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; +import java.util.Vector; + +public class OACComboBox extends JComboBox implements OACComponent { + public OACComboBox(ComboBoxModel aModel) { + super(aModel); + } + + public OACComboBox(E[] items) { + super(items); + } + + public OACComboBox(Vector items) { + super(items); + } + + public OACComboBox() { + super(); + } + + @Override + public Component add(Component comp) { + return OACComponent.super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + return OACComponent.super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + OACComponent.super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + return OACComponent.super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + OACComponent.super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACComponent.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACComponent.java new file mode 100644 index 0000000..6e9084a --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACComponent.java @@ -0,0 +1,106 @@ +package org.openautonomousconnection.oacswing.component; + +import jdk.jshell.spi.ExecutionControl; +import org.jetbrains.annotations.Nullable; +import org.openautonomousconnection.oacswing.component.design.Design; +import org.openautonomousconnection.oacswing.component.design.DesignManager; + +import javax.swing.*; +import java.awt.*; +import java.util.Optional; +import java.util.OptionalInt; + +public interface OACComponent { + default void initDesign() { + DesignManager.apply(this); +// Design design = DesignManager.getGlobalDesign(); +// +// this.setBackground(design.getElements().get(this.getClass()).getColor()); + } + + void setBackground(Color color); + + default void initOther(Component comp) { + if(comp instanceof OACComponent component) + component.initDesign(); + } + + default @Nullable Component add(Optional name, Component comp, OptionalInt index, Optional constrains) throws ExecutionControl.NotImplementedException { + JComponent superclass = this.getSuperclass(); + + if(comp instanceof OACComponent component) + component.initDesign(); + + if(name.isPresent()) + return superclass.add(name.get(), comp); + else if(constrains.isPresent()) + if(index.isPresent()) { + superclass.add(comp, constrains.get(), index.getAsInt()); + return null; + } + else { + superclass.add(comp, constrains.get()); + return null; + } + + else if(index.isPresent()) + return superclass.add(comp, index.getAsInt()); + + else + return superclass.add(comp); + } + + default Component add(Component comp) { + try { + return this.add(Optional.empty(), comp, OptionalInt.empty(), Optional.empty()); + } catch (ExecutionControl.NotImplementedException e) { + throw new RuntimeException(e); + } + } + + default Component add(String name, Component comp) { + try { + return this.add(Optional.of(name), comp, OptionalInt.empty(), Optional.empty()); + } catch (ExecutionControl.NotImplementedException e) { + throw new RuntimeException(e); + } + } + + default Component add(Component comp, int index) { + try { + return this.add(Optional.empty(), comp, OptionalInt.of(index), Optional.empty()); + } catch (ExecutionControl.NotImplementedException e) { + throw new RuntimeException(e); + } + } + + default void add(Component comp, Object constraints, int index) { + try { + this.add(Optional.empty(), comp, OptionalInt.of(index), Optional.of(constraints)); + } catch (ExecutionControl.NotImplementedException e) { + throw new RuntimeException(e); + } + } + + default void add(Component comp, Object constraints) { + try { + this.add(Optional.empty(), comp, OptionalInt.empty(), Optional.of(constraints)); + } catch (ExecutionControl.NotImplementedException e) { + throw new RuntimeException(e); + } + } + + /** + * Needed to run JComponent / Component methods + * @return JComponent type superclass + * @throws ExecutionControl.NotImplementedException superclass is not of type JComponent + */ + default JComponent getSuperclass() throws ExecutionControl.NotImplementedException { + if(this instanceof JComponent superClass) + return superClass; + else + throw new ExecutionControl.NotImplementedException("Trying to implement OACComponent interface for non-JComponent class"); + + } + +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACFrame.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACFrame.java new file mode 100644 index 0000000..f56cfe3 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACFrame.java @@ -0,0 +1,105 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; +import org.openautonomousconnection.oacswing.component.design.DesignManager; + +import javax.swing.*; +import java.awt.*; +import java.awt.geom.RoundRectangle2D; + +public class OACFrame extends JFrame { + public OACFrame() { + super(); + + this.init(); + } + + private void initIfOACComponent(Component comp) { + if(comp instanceof OACComponent component) + component.initDesign(); + } + + @Override + protected OACRootPane createRootPane() { + OACRootPane rp = new OACRootPane(); + + rp.setOpaque(true); + return rp; + } + + @Override + public OACRootPane getRootPane() { + return (OACRootPane) this.rootPane; + } + + @Override + public Component add(Component comp) { + this.initIfOACComponent(comp); + + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initIfOACComponent(comp); + + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initIfOACComponent(comp); + + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initIfOACComponent(comp); + + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initIfOACComponent(comp); + + super.add(comp, constraints, index); + } + + public OACFrame(GraphicsConfiguration gc) { + super(gc); + + this.init(); + } + + public OACFrame(String title) { + super(title); + + this.init(); + } + + public OACFrame(String title, GraphicsConfiguration gc) { + super(title, gc); + + this.init(); + } + + private void init() { + this.setUndecorated(true); + +// DesignManager.apply(this.getRootPane()); + DesignManager.apply(this); + this.setShape(new RoundRectangle2D.Double( + 0, 0, + this.getWidth(), + this.getHeight(), + 30, 30 + )); + + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACLabel.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACLabel.java new file mode 100644 index 0000000..556f83b --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACLabel.java @@ -0,0 +1,33 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import javax.swing.*; + +public class OACLabel extends JLabel implements OACComponent { + public OACLabel(String text, Icon icon, int horizontalAlignment) { + super(text, icon, horizontalAlignment); + } + + public OACLabel(String text, int horizontalAlignment) { + super(text, null, horizontalAlignment); + } + + public OACLabel(String text) { + super(text, null, LEADING); + } + + public OACLabel(Icon image, int horizontalAlignment) { + super(null, image, horizontalAlignment); + } + + public OACLabel(Icon image) { + super(null, image, CENTER); + } + + public OACLabel() { + super("", null, LEADING); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACLayeredPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACLayeredPane.java new file mode 100644 index 0000000..6c62596 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACLayeredPane.java @@ -0,0 +1,46 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACLayeredPane extends JLayeredPane implements OACComponent { + public OACLayeredPane() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACList.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACList.java new file mode 100644 index 0000000..f8bcd1f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACList.java @@ -0,0 +1,59 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; +import java.util.Vector; + +public class OACList extends JList implements OACComponent { + public OACList(ListModel dataModel) { + super(dataModel); + } + + public OACList(E[] listData) { + super(listData); + } + + public OACList(Vector listData) { + super(listData); + } + + public OACList() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACMenu.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenu.java new file mode 100644 index 0000000..13c86fa --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenu.java @@ -0,0 +1,58 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACMenu extends JMenu implements OACComponent { + public OACMenu() { + super(); + } + + public OACMenu(String s) { + super(s); + } + + public OACMenu(Action a) { + super(a); + } + + public OACMenu(String s, boolean b) { + super(s, b); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuBar.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuBar.java new file mode 100644 index 0000000..eb82df9 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuBar.java @@ -0,0 +1,46 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACMenuBar extends JMenuBar implements OACComponent { + public OACMenuBar() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuItem.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuItem.java new file mode 100644 index 0000000..19ecd81 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACMenuItem.java @@ -0,0 +1,66 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACMenuItem extends JMenuItem implements OACComponent { + public OACMenuItem() { + super(); + } + + public OACMenuItem(Icon icon) { + super(icon); + } + + public OACMenuItem(String text) { + super(text); + } + + public OACMenuItem(Action a) { + super(a); + } + + public OACMenuItem(String text, Icon icon) { + super(text, icon); + } + + public OACMenuItem(String text, int mnemonic) { + super(text, mnemonic); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACOptionPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACOptionPane.java new file mode 100644 index 0000000..abfa499 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACOptionPane.java @@ -0,0 +1,70 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACOptionPane extends JOptionPane implements OACComponent { + public OACOptionPane() { + super(); + } + + public OACOptionPane(Object message) { + super(message); + } + + public OACOptionPane(Object message, int messageType) { + super(message, messageType); + } + + public OACOptionPane(Object message, int messageType, int optionType) { + super(message, messageType, optionType); + } + + public OACOptionPane(Object message, int messageType, int optionType, Icon icon) { + super(message, messageType, optionType, icon); + } + + public OACOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options) { + super(message, messageType, optionType, icon, options); + } + + public OACOptionPane(Object message, int messageType, int optionType, Icon icon, Object[] options, Object initialValue) { + super(message, messageType, optionType, icon, options, initialValue); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACPanel.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACPanel.java new file mode 100644 index 0000000..861b015 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACPanel.java @@ -0,0 +1,58 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACPanel extends JPanel implements OACComponent { + public OACPanel(LayoutManager layout, boolean isDoubleBuffered) { + super(layout, isDoubleBuffered); + } + + public OACPanel(LayoutManager layout) { + super(layout); + } + + public OACPanel(boolean isDoubleBuffered) { + super(isDoubleBuffered); + } + + public OACPanel() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACPasswordField.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACPasswordField.java new file mode 100644 index 0000000..56ed836 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACPasswordField.java @@ -0,0 +1,63 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.text.Document; +import java.awt.*; + +public class OACPasswordField extends JPasswordField implements OACComponent { + public OACPasswordField() { + super(); + } + + public OACPasswordField(String text) { + super(text); + } + + public OACPasswordField(int columns) { + super(columns); + } + + public OACPasswordField(String text, int columns) { + super(text, columns); + } + + public OACPasswordField(Document doc, String txt, int columns) { + super(doc, txt, columns); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACPopupMenu.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACPopupMenu.java new file mode 100644 index 0000000..62ed59f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACPopupMenu.java @@ -0,0 +1,50 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACPopupMenu extends JPopupMenu implements OACComponent { + public OACPopupMenu() { + super(); + } + + public OACPopupMenu(String label) { + super(label); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACProgressBar.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACProgressBar.java new file mode 100644 index 0000000..3b61948 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACProgressBar.java @@ -0,0 +1,62 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACProgressBar extends JProgressBar implements OACComponent { + public OACProgressBar() { + super(); + } + + public OACProgressBar(int orient) { + super(orient); + } + + public OACProgressBar(int min, int max) { + super(min, max); + } + + public OACProgressBar(int orient, int min, int max) { + super(orient, min, max); + } + + public OACProgressBar(BoundedRangeModel newModel) { + super(newModel); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButton.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButton.java new file mode 100644 index 0000000..e341f3f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButton.java @@ -0,0 +1,74 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACRadioButton extends JRadioButton implements OACComponent { + public OACRadioButton() { + super(); + } + + public OACRadioButton(Icon icon) { + super(icon); + } + + public OACRadioButton(Action a) { + super(a); + } + + public OACRadioButton(Icon icon, boolean selected) { + super(icon, selected); + } + + public OACRadioButton(String text) { + super(text); + } + + public OACRadioButton(String text, boolean selected) { + super(text, selected); + } + + public OACRadioButton(String text, Icon icon) { + super(text, icon); + } + + public OACRadioButton(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButtonMenuItem.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButtonMenuItem.java new file mode 100644 index 0000000..6a5f42c --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACRadioButtonMenuItem.java @@ -0,0 +1,74 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACRadioButtonMenuItem extends JRadioButtonMenuItem implements OACComponent { + public OACRadioButtonMenuItem() { + super(); + } + + public OACRadioButtonMenuItem(Icon icon) { + super(icon); + } + + public OACRadioButtonMenuItem(String text) { + super(text); + } + + public OACRadioButtonMenuItem(Action a) { + super(a); + } + + public OACRadioButtonMenuItem(String text, Icon icon) { + super(text, icon); + } + + public OACRadioButtonMenuItem(String text, boolean selected) { + super(text, selected); + } + + public OACRadioButtonMenuItem(Icon icon, boolean selected) { + super(icon, selected); + } + + public OACRadioButtonMenuItem(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACRootPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACRootPane.java new file mode 100644 index 0000000..2683294 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACRootPane.java @@ -0,0 +1,129 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACRootPane extends JRootPane implements OACComponent { + public OACRootPane() { + super(); + } + + @Override + protected OACLayeredPane createLayeredPane() { + OACLayeredPane p = new OACLayeredPane(); + p.setName(this.getName()+".layeredPane"); + return p; + } + + @Override + protected Container createContentPane() { + JComponent c = new OACPanel(); + c.setName(this.getName()+".contentPane"); + c.setLayout(new BorderLayout() { + /* This BorderLayout subclass maps a null constraint to CENTER. + * Although the reference BorderLayout also does this, some VMs + * throw an IllegalArgumentException. + */ + public void addLayoutComponent(Component comp, Object constraints) { + if (constraints == null) { + constraints = BorderLayout.CENTER; + } + super.addLayoutComponent(comp, constraints); + } + }); + return c; + } + +// public void setOACMenuBar(OACMenuBar menu) { +// super.setJMenuBar(menu); +// } + + @Deprecated + @Override + public JMenuBar getJMenuBar() { + if(this.menuBar instanceof OACMenuBar oacMenuBar) + return oacMenuBar; + else + return this.menuBar; + } + + public OACMenuBar getOACMenuBar() { + return (OACMenuBar) this.menuBar; + } + + @Deprecated + @Override + public void setLayeredPane(JLayeredPane layered) { + if(layered instanceof OACLayeredPane) + super.setLayeredPane(layered); + } + + public void setLayeredPane(OACLayeredPane layeredPane) { + super.setLayeredPane(layeredPane); + } + + @Deprecated + @Override + public void setDefaultButton(JButton defaultButton) { + if(defaultButton instanceof OACButton) + super.setDefaultButton(defaultButton); + } + + public void setDefaultButton(OACButton defaultButton) { + super.setDefaultButton(defaultButton); + } + + @Override + public OACButton getDefaultButton() { + return (OACButton) this.defaultButton; + } + + + @Override + public OACLayeredPane getLayeredPane() { return (OACLayeredPane) this.layeredPane; } + + @Override + protected Component createGlassPane() { + OACPanel c = new OACPanel(); + c.setName(this.getName()+".glassPane"); + c.setVisible(false); + c.setOpaque(false); + return c; + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollBar.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollBar.java new file mode 100644 index 0000000..0e651cb --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollBar.java @@ -0,0 +1,54 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACScrollBar extends JScrollBar implements OACComponent { + public OACScrollBar(int orientation, int value, int extent, int min, int max) { + super(orientation, value, extent, min, max); + } + + public OACScrollBar(int orientation) { + super(orientation); + } + + public OACScrollBar() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollPane.java new file mode 100644 index 0000000..a3a50a9 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACScrollPane.java @@ -0,0 +1,58 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACScrollPane extends JScrollPane implements OACComponent { + public OACScrollPane(Component view, int vsbPolicy, int hsbPolicy) { + super(view, vsbPolicy, hsbPolicy); + } + + public OACScrollPane(Component view) { + super(view); + } + + public OACScrollPane(int vsbPolicy, int hsbPolicy) { + super(vsbPolicy, hsbPolicy); + } + + public OACScrollPane() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACSeparator.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACSeparator.java new file mode 100644 index 0000000..2a36d72 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACSeparator.java @@ -0,0 +1,50 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACSeparator extends JSeparator implements OACComponent { + public OACSeparator() { + super(); + } + + public OACSeparator(int orientation) { + super(orientation); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACSlider.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACSlider.java new file mode 100644 index 0000000..7b8a47f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACSlider.java @@ -0,0 +1,66 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACSlider extends JSlider implements OACComponent { + public OACSlider() { + super(); + } + + public OACSlider(int orientation) { + super(orientation); + } + + public OACSlider(int min, int max) { + super(min, max); + } + + public OACSlider(int min, int max, int value) { + super(min, max, value); + } + + public OACSlider(int orientation, int min, int max, int value) { + super(orientation, min, max, value); + } + + public OACSlider(BoundedRangeModel brm) { + super(brm); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACSpinner.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACSpinner.java new file mode 100644 index 0000000..430f31e --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACSpinner.java @@ -0,0 +1,50 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACSpinner extends JSpinner implements OACComponent { + public OACSpinner(SpinnerModel model) { + super(model); + } + + public OACSpinner() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACSplitPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACSplitPane.java new file mode 100644 index 0000000..e202a01 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACSplitPane.java @@ -0,0 +1,62 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACSplitPane extends JSplitPane implements OACComponent { + public OACSplitPane() { + super(); + } + + public OACSplitPane(int newOrientation) { + super(newOrientation); + } + + public OACSplitPane(int newOrientation, boolean newContinuousLayout) { + super(newOrientation, newContinuousLayout); + } + + public OACSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent) { + super(newOrientation, newLeftComponent, newRightComponent); + } + + public OACSplitPane(int newOrientation, boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent) { + super(newOrientation, newContinuousLayout, newLeftComponent, newRightComponent); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTabbedPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTabbedPane.java new file mode 100644 index 0000000..89819c0 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTabbedPane.java @@ -0,0 +1,54 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACTabbedPane extends JTabbedPane implements OACComponent { + public OACTabbedPane() { + super(); + } + + public OACTabbedPane(int tabPlacement) { + super(tabPlacement); + } + + public OACTabbedPane(int tabPlacement, int tabLayoutPolicy) { + super(tabPlacement, tabLayoutPolicy); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTable.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTable.java new file mode 100644 index 0000000..9c3a515 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTable.java @@ -0,0 +1,73 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.table.TableColumnModel; +import javax.swing.table.TableModel; +import java.awt.*; +import java.util.Vector; + +public class OACTable extends JTable implements OACComponent { + public OACTable() { + super(); + } + + public OACTable(TableModel dm) { + super(dm); + } + + public OACTable(TableModel dm, TableColumnModel cm) { + super(dm, cm); + } + + public OACTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm) { + super(dm, cm, sm); + } + + public OACTable(int numRows, int numColumns) { + super(numRows, numColumns); + } + + public OACTable(Vector rowData, Vector columnNames) { + super(rowData, columnNames); + } + + public OACTable(@NotNull Object[][] rowData, @NotNull Object[] columnNames) { + super(rowData, columnNames); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTextArea.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextArea.java new file mode 100644 index 0000000..44918c2 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextArea.java @@ -0,0 +1,67 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.text.Document; +import java.awt.*; + +public class OACTextArea extends JTextArea implements OACComponent { + public OACTextArea() { + super(); + } + + public OACTextArea(String text) { + super(text); + } + + public OACTextArea(int rows, int columns) { + super(rows, columns); + } + + public OACTextArea(String text, int rows, int columns) { + super(text, rows, columns); + } + + public OACTextArea(Document doc) { + super(doc); + } + + public OACTextArea(Document doc, String text, int rows, int columns) { + super(doc, text, rows, columns); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTextField.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextField.java new file mode 100644 index 0000000..dedd5fb --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextField.java @@ -0,0 +1,63 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.text.Document; +import java.awt.*; + +public class OACTextField extends JTextField implements OACComponent { + public OACTextField() { + super(); + } + + public OACTextField(String text) { + super(text); + } + + public OACTextField(int columns) { + super(columns); + } + + public OACTextField(String text, int columns) { + super(text, columns); + } + + public OACTextField(Document doc, String text, int columns) { + super(doc, text, columns); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTextPane.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextPane.java new file mode 100644 index 0000000..e0d154b --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTextPane.java @@ -0,0 +1,50 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.text.StyledDocument; +import java.awt.*; + +public class OACTextPane extends JTextPane implements OACComponent { + public OACTextPane() { + } + + public OACTextPane(StyledDocument doc) { + super(doc); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTitledComponent.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTitledComponent.java new file mode 100644 index 0000000..2d7f992 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTitledComponent.java @@ -0,0 +1,34 @@ +/* Author: Maple + * Jan. 22 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import lombok.Getter; +import lombok.Setter; + +import javax.swing.*; +import java.awt.*; + +public class OACTitledComponent extends OACPanel { + @Getter @Setter + private OACLabel title; + + @Getter @Setter + private C component; + + public OACTitledComponent(String title, C component, int alignment) { + this.setLayout(new BorderLayout()); + + this.title = new OACLabel(title, alignment); + + this.component = component; + + this.add(this.title, BorderLayout.NORTH); + this.add(this.component); + } + + public OACTitledComponent(String title, C component) { + this(title, component, SwingConstants.CENTER); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACToggleButton.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACToggleButton.java new file mode 100644 index 0000000..9a00c4f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACToggleButton.java @@ -0,0 +1,74 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACToggleButton extends JToggleButton implements OACComponent { + public OACToggleButton() { + super(); + } + + public OACToggleButton(Icon icon) { + super(icon); + } + + public OACToggleButton(Icon icon, boolean selected) { + super(icon, selected); + } + + public OACToggleButton(String text) { + super(text); + } + + public OACToggleButton(String text, boolean selected) { + super(text, selected); + } + + public OACToggleButton(Action a) { + super(a); + } + + public OACToggleButton(String text, Icon icon) { + super(text, icon); + } + + public OACToggleButton(String text, Icon icon, boolean selected) { + super(text, icon, selected); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACToolBar.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACToolBar.java new file mode 100644 index 0000000..8721c46 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACToolBar.java @@ -0,0 +1,58 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACToolBar extends JToolBar implements OACComponent { + public OACToolBar() { + super(); + } + + public OACToolBar(int orientation) { + super(orientation); + } + + public OACToolBar(String name) { + super(name); + } + + public OACToolBar(String name, int orientation) { + super(name, orientation); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACToolTip.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACToolTip.java new file mode 100644 index 0000000..d1c38ff --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACToolTip.java @@ -0,0 +1,45 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACToolTip extends JToolTip implements OACComponent { + public OACToolTip() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + }} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACTree.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACTree.java new file mode 100644 index 0000000..1479d10 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACTree.java @@ -0,0 +1,74 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreeNode; +import java.awt.*; +import java.util.Hashtable; +import java.util.Vector; + +public class OACTree extends JTree implements OACComponent { + public OACTree() { + super(); + } + + public OACTree(Object[] value) { + super(value); + } + + public OACTree(Vector value) { + super(value); + } + + public OACTree(Hashtable value) { + super(value); + } + + public OACTree(TreeNode root) { + super(root); + } + + public OACTree(TreeNode root, boolean asksAllowsChildren) { + super(root, asksAllowsChildren); + } + + public OACTree(TreeModel newModel) { + super(newModel); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACViewport.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACViewport.java new file mode 100644 index 0000000..2b93a84 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACViewport.java @@ -0,0 +1,45 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACViewport extends JViewport implements OACComponent { + public OACViewport() { + super(); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + }} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/OACWindow.java b/src/main/java/org/openautonomousconnection/oacswing/component/OACWindow.java new file mode 100644 index 0000000..e6dd74f --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/OACWindow.java @@ -0,0 +1,62 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component; + +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +public class OACWindow extends JWindow implements OACComponent { + public OACWindow() { + super(); + } + + public OACWindow(GraphicsConfiguration gc) { + super(gc); + } + + public OACWindow(Frame owner) { + super(owner); + } + + public OACWindow(Window owner) { + super(owner); + } + + public OACWindow(Window owner, GraphicsConfiguration gc) { + super(owner, gc); + } + + @Override + public Component add(Component comp) { + this.initOther(comp); + return super.add(comp); + } + + @Override + public Component add(Component comp, int index) { + this.initOther(comp); + return super.add(comp, index); + } + + @Override + public void add(@NotNull Component comp, Object constraints) { + this.initOther(comp); + super.add(comp, constraints); + } + + @Override + public Component add(String name, Component comp) { + this.initOther(comp); + return super.add(name, comp); + } + + @Override + public void add(Component comp, Object constraints, int index) { + this.initOther(comp); + super.add(comp, constraints, index); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/design/Design.java b/src/main/java/org/openautonomousconnection/oacswing/component/design/Design.java new file mode 100644 index 0000000..55b548e --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/design/Design.java @@ -0,0 +1,52 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component.design; + +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public final class Design { + public static final Design LIGHT = new Design("light", new HashMap<>()); + + public static final Design DARK = new Design("dark", new HashMap<>()); + + public static final Design CONTRAST = new Design("contrast", new HashMap<>()); + + @Getter + private final String name; + + @Getter + private final Map, OACColor> elements; + + public Design(String name, Map, OACColor> elements) { + this.name = name; + this.elements = elements; + } + + @Override + public boolean equals(Object obj) { + if (obj == this) return true; + if (obj == null || obj.getClass() != this.getClass()) return false; + var that = (Design) obj; + return Objects.equals(this.name, that.name) && + Objects.equals(this.elements, that.elements); + } + + @Override + public int hashCode() { + return Objects.hash(name, elements); + } + + @Override + public String toString() { + return "Design[" + + "name=" + name + ", " + + "elements=" + elements + ']'; + } + +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/design/DesignManager.java b/src/main/java/org/openautonomousconnection/oacswing/component/design/DesignManager.java new file mode 100644 index 0000000..187b361 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/design/DesignManager.java @@ -0,0 +1,80 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component.design; + +import lombok.Getter; +import lombok.Setter; +import org.openautonomousconnection.oacswing.component.OACAnimatedPanel; +import org.openautonomousconnection.oacswing.component.OACButton; +import org.openautonomousconnection.oacswing.component.OACComponent; +import org.openautonomousconnection.oacswing.component.OACFrame; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +public class DesignManager { + @Getter @Setter + private static Design globalDesign; + + public static DesignManager getInstance() { + return Objects.requireNonNullElseGet(instance, DesignManager::new); + } + + private static DesignManager instance; + + private DesignManager() { + instance = this; + } + + @Getter + private List designs; + + public static void apply(OACComponent component) { + OACColor color; + + if(globalDesign != null && ((color = globalDesign.getElements().get(component.getClass())) != null)) + component.setBackground(color.getColor()); + } + + public static void apply(OACFrame frame) { + OACColor color; + + if(globalDesign != null && ((color = globalDesign.getElements().get(frame.getClass())) != null)) + frame.getContentPane().setBackground(color.getColor()); + + + } + + public void registerDesign(Design design) { + this.designs.add(design); + } + + public void registerComponent(Class componentClass, OACColor color) { + Style.Design eDesign = Style.Design.DARK; + + if(componentClass.isAnnotationPresent(Style.class)) + eDesign = componentClass.getAnnotation(Style.class).design(); + + Design design = switch (eDesign) { + case LIGHT -> Design.LIGHT; + case DARK -> Design.DARK; + case CONTRAST -> Design.CONTRAST; + }; + + design.getElements().putIfAbsent(componentClass, null); + + design.getElements().replace(componentClass, color); + } + + static { + Design.DARK.getElements().putAll(Map.of( + OACButton.class, OACColor.DARK_GREY, + OACAnimatedPanel.class, OACColor.LIGHT_GREY, + OACFrame.class, OACColor.GREY + + )); + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/design/OACColor.java b/src/main/java/org/openautonomousconnection/oacswing/component/design/OACColor.java new file mode 100644 index 0000000..eae3061 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/design/OACColor.java @@ -0,0 +1,47 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component.design; + +import lombok.Getter; + +import java.awt.*; + +public enum OACColor { + WEAK_RED(Color.getHSBColor(355, 0.5f, 0.7f)), + STRONG_RED(Color.getHSBColor(350, 0.7f, 0.6f)), + + WEAK_ORANGE(Color.getHSBColor(37, 0.6f, 0.8f)), + STRONG_ORANGE(Color.getHSBColor(30, 0.9f, 0.8f)), + + WEAK_YELLOW(Color.getHSBColor(56, 0.45f, 0.80f)), + STRONG_YELLOW(Color.getHSBColor(45, 0.65f, 0.85f)), + + WEAK_GREEN(Color.getHSBColor(125,0.35f,0.5f)), + STRONG_GREEN(Color.getHSBColor(110, 0.5f, 0.55f)), + + WEAK_AQUA(Color.getHSBColor(175, 0.35f, 0.75f)), + STRONG_AQUA(Color.getHSBColor(195, 0.62f, 0.65f)), + + WEAK_BLUE(Color.getHSBColor(225, 0.45f, 0.6f)), + STRONG_BLUE(Color.getHSBColor(215, 0.7f, 0.55f)), + + WEAK_MAGENTA(Color.getHSBColor(277,0.35f,0.65f)), + STRONG_MAGENTA(Color.getHSBColor(266, 0.45f, 0.66f)), + + DARK_GREY(Color.getHSBColor(0,0,0.25f)), + + GREY(Color.getHSBColor(0, 0f, 0.44f)), + + LIGHT_GREY(Color.getHSBColor(0, 0f, 0.60f)), + + VERY_LIGHT_GREY(Color.getHSBColor(0, 0, 0.9f)); + + @Getter + private final Color color; + + OACColor(Color color) { + this.color = color; + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/component/design/Style.java b/src/main/java/org/openautonomousconnection/oacswing/component/design/Style.java new file mode 100644 index 0000000..acba3b3 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/component/design/Style.java @@ -0,0 +1,22 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.component.design; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Style { + enum Design { + LIGHT, + DARK, + CONTRAST + } + + Design design(); +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/icons/IconSize.java b/src/main/java/org/openautonomousconnection/oacswing/icons/IconSize.java new file mode 100644 index 0000000..6fc7c5c --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/icons/IconSize.java @@ -0,0 +1,30 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.icons; + +import lombok.Getter; + +/** + * Preset icon scales + */ +public enum IconSize { + SUPER_TINY(8), + TINY(16), + SMALLER(32), + SMALL(64), + LESS_MEDIUM(128), + MEDIUM(256), + MORE_MEDIUM(512), + LARGE(1024), + LARGER(2048), + HUGE(4096), + SUPER_HUGE(8192); + + @Getter + private final int scale; + IconSize(int scale) { + this.scale = scale; + } +} diff --git a/src/main/java/org/openautonomousconnection/oacswing/icons/temp/TempIcons.java b/src/main/java/org/openautonomousconnection/oacswing/icons/temp/TempIcons.java new file mode 100644 index 0000000..c1b91c7 --- /dev/null +++ b/src/main/java/org/openautonomousconnection/oacswing/icons/temp/TempIcons.java @@ -0,0 +1,22 @@ +/* Author: Maple + * Feb. 2 2026 + * */ + +package org.openautonomousconnection.oacswing.icons.temp; + +import org.openautonomousconnection.oacswing.ModifiableImageIcon; + +import javax.swing.*; + +/** + * Class containing testing / placeholder icons + */ +public class TempIcons { + public static final ModifiableImageIcon TEMP_HOLE_ICON; + + static { + ClassLoader classloader = Thread.currentThread().getContextClassLoader(); + + TEMP_HOLE_ICON = new ModifiableImageIcon(classloader.getResource("defaults/icons/temp_hole.png")); + } +} diff --git a/src/main/resources/defaults/icons/temp_hole.png b/src/main/resources/defaults/icons/temp_hole.png new file mode 100644 index 0000000..472f247 Binary files /dev/null and b/src/main/resources/defaults/icons/temp_hole.png differ diff --git a/src/test/java/org/openautonomousconnection/oacswing/test/AnimationTests.java b/src/test/java/org/openautonomousconnection/oacswing/test/AnimationTests.java index 55f6162..9e7ec15 100644 --- a/src/test/java/org/openautonomousconnection/oacswing/test/AnimationTests.java +++ b/src/test/java/org/openautonomousconnection/oacswing/test/AnimationTests.java @@ -15,9 +15,10 @@ public class AnimationTests { AnimationPath animationPath = new AnimationPath(50); - animationPath.add(new KeyFrame(new Point(0, 0), 400, 400)); - animationPath.add(new KeyFrame(new Point(0, 0), 800, 600)); - animationPath.add(new KeyFrame(new Point(0, 0), 400, 400)); + animationPath.add(new KeyFrame(new Point(400, 400), 400, 400)); + animationPath.add(new KeyFrame(new Point(400, 300), 400, 400)); + animationPath.add(new KeyFrame(new Point(100, 100), 400, 400)); + animationPath.add(new KeyFrame(new Point(400, 400), 400, 400)); JAnimatedPanel animatedPanel = new JAnimatedPanel(animationPath); @@ -25,10 +26,10 @@ public class AnimationTests { frame.add(animatedPanel); - animatedPanel.play(0.1); + animatedPanel.play(0.1, true); frame.setVisible(true); - wait(5000); + wait(15000); } } diff --git a/src/test/java/org/openautonomousconnection/oacswing/test/CustomizedTests.java b/src/test/java/org/openautonomousconnection/oacswing/test/CustomizedTests.java new file mode 100644 index 0000000..a2f7a31 --- /dev/null +++ b/src/test/java/org/openautonomousconnection/oacswing/test/CustomizedTests.java @@ -0,0 +1,34 @@ +package org.openautonomousconnection.oacswing.test; + +import org.junit.jupiter.api.Test; +import org.openautonomousconnection.oacswing.component.OACTitledComponent; +import org.openautonomousconnection.oacswing.component.*; +import org.openautonomousconnection.oacswing.component.design.Design; +import org.openautonomousconnection.oacswing.component.design.DesignManager; +import org.openautonomousconnection.oacswing.icons.IconSize; +import org.openautonomousconnection.oacswing.icons.temp.TempIcons; + +import java.awt.*; + +public class CustomizedTests { + @Test + public synchronized void testCustomElements() throws InterruptedException { + DesignManager designManager = DesignManager.getInstance(); + + DesignManager.setGlobalDesign(Design.DARK); + + OACFrame frame = TestUtils.mockOacFrame(); + + frame.setLayout(new FlowLayout(FlowLayout.CENTER)); + + frame.add(new OACButton()); + + OACLabel imageLabel = new OACLabel(TempIcons.TEMP_HOLE_ICON.ofSize(IconSize.MEDIUM)); + + frame.add(new OACTitledComponent<>("Titled", imageLabel)); + + frame.setVisible(true); + + wait(5000); + } +} diff --git a/src/test/java/org/openautonomousconnection/oacswing/test/TestUtils.java b/src/test/java/org/openautonomousconnection/oacswing/test/TestUtils.java index 05c2d99..79ebd5f 100644 --- a/src/test/java/org/openautonomousconnection/oacswing/test/TestUtils.java +++ b/src/test/java/org/openautonomousconnection/oacswing/test/TestUtils.java @@ -1,5 +1,7 @@ package org.openautonomousconnection.oacswing.test; +import org.openautonomousconnection.oacswing.component.OACFrame; + import javax.swing.*; import java.awt.*; @@ -13,4 +15,14 @@ public class TestUtils { return frame; } + + public static OACFrame mockOacFrame() { + OACFrame frame = new OACFrame(); + + frame.setBounds(new Rectangle(800, 600)); + + frame.setLocationRelativeTo(null); + + return frame; + } }