Skip to content

Commit

Permalink
cleaning package names; settings now available as panels
Browse files Browse the repository at this point in the history
  • Loading branch information
i-make-robots committed Oct 11, 2024
1 parent 14748ed commit 3afce42
Show file tree
Hide file tree
Showing 24 changed files with 123 additions and 126 deletions.
10 changes: 5 additions & 5 deletions src/main/java/com/marginallyclever/ro3/AllPanels.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.marginallyclever.ro3;

import com.formdev.flatlaf.FlatLightLaf;
import com.marginallyclever.ro3.apps.appsettings.AppSettingsDialog;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -39,7 +40,7 @@ public JPanel buildSet() {
com.marginallyclever.ro3.apps.nodedetailview.CollapsiblePanel.class,
com.marginallyclever.ro3.apps.DockingPanel.class,
com.marginallyclever.ro3.apps.App.class, // abstract
com.marginallyclever.ro3.apps.dialogs.AppSettingsDialog.class
AppSettingsDialog.class
);

Reflections reflections = new Reflections("com.marginallyclever");
Expand Down Expand Up @@ -81,8 +82,8 @@ private Collection<Class<? extends JPanel>> getHandmadeList() {
return new ArrayList<>(List.of(
com.marginallyclever.communications.application.TextInterfaceToSessionLayer.class,
com.marginallyclever.ro3.apps.about.AboutPanel.class,
com.marginallyclever.ro3.apps.editorpanel.EditorPanel.class,
com.marginallyclever.ro3.apps.logpanel.LogPanel.class,
com.marginallyclever.ro3.apps.editor.EditorPanel.class,
com.marginallyclever.ro3.apps.log.LogPanel.class,
com.marginallyclever.ro3.apps.nodedetailview.NodeDetailView.class,
com.marginallyclever.ro3.apps.nodeselector.NodeSelectionDialog.class,
com.marginallyclever.ro3.apps.nodeselector.NodeSelector.class,
Expand All @@ -91,7 +92,7 @@ private Collection<Class<? extends JPanel>> getHandmadeList() {
com.marginallyclever.ro3.apps.viewport.OpenGLPanel.class,
com.marginallyclever.ro3.apps.viewport.Viewport.class,
com.marginallyclever.ro3.apps.viewport.ViewportSettingsPanel.class,
com.marginallyclever.ro3.apps.webcampanel.WebCamPanel.class,
com.marginallyclever.ro3.apps.webcam.WebCamPanel.class,
com.marginallyclever.ro3.mesh.MeshChooserDialog.class,
com.marginallyclever.ro3.node.NodePanel.class,
com.marginallyclever.ro3.node.nodefactory.NodeFactoryPanel.class,
Expand All @@ -106,7 +107,6 @@ private Collection<Class<? extends JPanel>> getHandmadeList() {
com.marginallyclever.ro3.node.nodes.limbplanner.LimbPlannerPanel.class,
com.marginallyclever.ro3.node.nodes.limbsolver.LimbSolverPanel.class,
com.marginallyclever.ro3.node.nodes.marlinrobot.marlinrobotarm.MarlinRobotArmPanel.class,
com.marginallyclever.ro3.apps.ode4j.ODEPhysicsSettingsPanel.class,
com.marginallyclever.ro3.node.nodes.pose.PosePanel.class,
com.marginallyclever.ro3.node.nodes.pose.poses.AttachmentPointPanel.class,
com.marginallyclever.ro3.node.nodes.pose.poses.CameraPanel.class,
Expand Down
17 changes: 10 additions & 7 deletions src/main/java/com/marginallyclever/ro3/apps/MainMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,7 @@ private JMenu buildFileMenu() {
menuFile.add(new JMenuItem(saveAs));
menuFile.add(new JMenuItem(new ExportScene(fileChooser)));

menuFile.add(new JSeparator());
var settingsMenu = new JMenuItem("Settings");
settingsMenu.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource(
"/com/marginallyclever/ro3/apps/actions/icons8-settings-16.png"))));
menuFile.add(settingsMenu);

settingsMenu.addActionListener( e -> frame.runAppSettingsDialog() );
//addSettingsMenu(menuFile);

if(!isMacOS) {
menuFile.add(new JSeparator());
Expand All @@ -97,6 +91,15 @@ public void actionPerformed(java.awt.event.ActionEvent e) {
return menuFile;
}

private void addSettingsMenu(JMenu menuFile) {
menuFile.add(new JSeparator());
var settingsMenu = new JMenuItem("Settings");
settingsMenu.setIcon(new ImageIcon(Objects.requireNonNull(getClass().getResource(
"/com/marginallyclever/ro3/apps/actions/icons8-settings-16.png"))));
menuFile.add(settingsMenu);
settingsMenu.addActionListener( e -> frame.runAppSettingsDialog() );
}

private JMenu buildWindowsMenu() {
JMenu menuWindows = new JMenu("Windows");
// add each panel to the windows menu with a checkbox if the current panel is visible.
Expand Down
17 changes: 11 additions & 6 deletions src/main/java/com/marginallyclever/ro3/apps/RO3Frame.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,18 @@
import ModernDocking.app.RootDockingPanel;
import ModernDocking.exception.DockingLayoutException;
import ModernDocking.ext.ui.DockingUI;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.FlatLightLaf;
import com.marginallyclever.communications.application.TextInterfaceToSessionLayer;
import com.marginallyclever.convenience.helpers.FileHelper;
import com.marginallyclever.ro3.RO3;
import com.marginallyclever.ro3.apps.about.AboutPanel;
import com.marginallyclever.ro3.apps.dialogs.AppSettingsDialog;
import com.marginallyclever.ro3.apps.editorpanel.EditorPanel;
import com.marginallyclever.ro3.apps.logpanel.LogPanel;
import com.marginallyclever.ro3.apps.appsettings.AppSettingsDialog;
import com.marginallyclever.ro3.apps.editor.EditorPanel;
import com.marginallyclever.ro3.apps.log.LogPanel;
import com.marginallyclever.ro3.apps.nodedetailview.NodeDetailView;
import com.marginallyclever.ro3.apps.nodetreeview.NodeTreeView;
import com.marginallyclever.ro3.apps.ode4j.ODE4JPanel;
import com.marginallyclever.ro3.apps.webcampanel.WebCamPanel;
import com.marginallyclever.ro3.apps.viewport.ViewportSettingsPanel;
import com.marginallyclever.ro3.apps.webcam.WebCamPanel;
import com.marginallyclever.ro3.apps.viewport.OpenGLPanel;
import com.marginallyclever.ro3.apps.viewport.Viewport;
import org.slf4j.Logger;
Expand Down Expand Up @@ -49,6 +48,7 @@ public class RO3Frame extends JFrame {
private final WebCamPanel webCamPanel;
private final TextInterfaceToSessionLayer textInterface;
private final ODE4JPanel ode4jPanel;
private final ViewportSettingsPanel viewportSettingsPanel;
public static final FileNameExtensionFilter FILE_FILTER = new FileNameExtensionFilter("RO files", "RO");
public static String VERSION;

Expand All @@ -65,6 +65,7 @@ public RO3Frame() {
webCamPanel = new WebCamPanel();
textInterface = new TextInterfaceToSessionLayer();
ode4jPanel = new ODE4JPanel();
viewportSettingsPanel = new ViewportSettingsPanel();

createDefaultLayout();
resetDefaultLayout();
Expand Down Expand Up @@ -201,6 +202,10 @@ private void createDefaultLayout() {
DockingPanel textInterfaceView = new DockingPanel("7796a733-8e33-417a-b363-b28174901e40", "Serial Interface");
textInterfaceView.add(textInterface, BorderLayout.CENTER);
windows.add(textInterfaceView);

DockingPanel viewportSettingsView = new DockingPanel("c0651f5b-d5f0-49ab-88f9-66ae4a8c095e", "Viewport Settings");
viewportSettingsView.add(viewportSettingsPanel, BorderLayout.CENTER);
windows.add(viewportSettingsView);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.dialogs;
package com.marginallyclever.ro3.apps.appsettings;

import com.marginallyclever.ro3.apps.App;
import com.marginallyclever.ro3.view.View;
Expand All @@ -10,16 +10,15 @@
import java.util.List;
import javax.swing.*;
import java.awt.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Set;

/**
* {@link AppSettingsDialog} is a {@link JPanel} that displays the {@link com.marginallyclever.ro3.view.View}
* for every {@link com.marginallyclever.ro3.apps.App}.
*/
public class AppSettingsDialog extends JPanel {
@Deprecated
public class AppSettingsDialog extends App {
private static final Logger logger = LoggerFactory.getLogger(AppSettingsDialog.class);

public AppSettingsDialog(List<App> apps) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.editorpanel;
package com.marginallyclever.ro3.apps.editor;

import com.marginallyclever.convenience.swing.NumberFormatHelper;
import com.marginallyclever.ro3.Registry;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.editorpanel;
package com.marginallyclever.ro3.apps.editor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.editorpanel;
package com.marginallyclever.ro3.apps.editor;

import javax.swing.*;
import java.awt.event.ActionEvent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.editorpanel;
package com.marginallyclever.ro3.apps.editor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.logpanel;
package com.marginallyclever.ro3.apps.log;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.logpanel;
package com.marginallyclever.ro3.apps.log;

import ch.qos.logback.core.AppenderBase;
import ch.qos.logback.classic.spi.ILoggingEvent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.marginallyclever.ro3.apps.logpanel;
package com.marginallyclever.ro3.apps.log;

import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.spi.ILoggingEvent;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.marginallyclever.ro3.apps.nodeselector;

import com.marginallyclever.ro3.Registry;
import com.marginallyclever.ro3.apps.editorpanel.EditorPanel;
import com.marginallyclever.ro3.node.Node;

import javax.swing.*;
Expand Down
101 changes: 83 additions & 18 deletions src/main/java/com/marginallyclever/ro3/apps/ode4j/ODE4JPanel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.marginallyclever.ro3.apps.ode4j;

import com.marginallyclever.convenience.helpers.MatrixHelper;
import com.marginallyclever.convenience.swing.NumberFormatHelper;
import com.marginallyclever.ro3.PanelHelper;
import com.marginallyclever.ro3.Registry;
import com.marginallyclever.ro3.apps.App;
import com.marginallyclever.ro3.node.Node;
Expand All @@ -14,6 +16,7 @@
import com.marginallyclever.ro3.physics.ODEPhysics;

import javax.swing.*;
import javax.swing.text.NumberFormatter;
import javax.vecmath.Matrix4d;
import javax.vecmath.Vector3d;
import java.awt.*;
Expand All @@ -29,18 +32,78 @@ public class ODE4JPanel extends App {

public ODE4JPanel() {
super(new BorderLayout());
setName("Physics");

JToolBar toolbar = new JToolBar();
JToolBar toolbar = createToolBar();
add(toolbar, BorderLayout.NORTH);

JPanel container = new JPanel(new GridLayout(0,2));
JPanel container = new JPanel(new GridBagLayout());
add(container, BorderLayout.CENTER);

JButton pauseButton = addButtonByNameAndCallback(toolbar, "", (e)->{
GridBagConstraints gbc = new GridBagConstraints();
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.gridx=0;
gbc.gridy=0;
gbc.fill = GridBagConstraints.BOTH;
gbc.gridwidth=2;

container.add(addButtonByNameAndCallback("+Floor", (e)-> Registry.getScene().addChild(new ODEPlane()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Sphere", (e)-> add(new ODESphere()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Box", (e)-> add(new ODEBox()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Cylinder", (e)-> add(new ODECylinder()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Capsule", (e)->add(new ODECapsule()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Hinge", (e)-> add(new ODEHinge()) ),gbc);
gbc.gridy++;
container.add(addButtonByNameAndCallback("+Creature controller", (e)-> add(new CreatureController()) ),gbc);
gbc.gridy++;

gbc.gridwidth=1;

NumberFormatter formatter = NumberFormatHelper.getNumberFormatter();
var physics = Registry.getPhysics();

// cfm
JFormattedTextField cfm = new JFormattedTextField(formatter);
cfm.setValue(physics.getCFM());
PanelHelper.addLabelAndComponent(container, "CFM",cfm,gbc);
cfm.addPropertyChangeListener("value", evt -> setCFM((Double) evt.getNewValue()));
gbc.gridy++;

// erp
JFormattedTextField erp = new JFormattedTextField(formatter);
erp.setValue(physics.getERP());
PanelHelper.addLabelAndComponent(container, "ERP",erp,gbc);
erp.addPropertyChangeListener("value", evt -> setERP((Double) evt.getNewValue()));
gbc.gridy++;

// gravity
JFormattedTextField gravity = new JFormattedTextField(formatter);
gravity.setValue(physics.getGravity());
PanelHelper.addLabelAndComponent(container, "Gravity",gravity,gbc);
gravity.addPropertyChangeListener("value", evt ->setGravity((Double) evt.getNewValue()));
}

private JToolBar createToolBar() {
var toolbar = new JToolBar();

JButton pauseButton = addButtonByNameAndCallback("", (e)->{
ODEPhysics physics = Registry.getPhysics();
physics.setPaused(!physics.isPaused());
updatePauseButton((JButton)e.getSource(), physics);
});
toolbar.add(pauseButton);
// I want to call this next line, but the physics engine might not have been created yet.
// updatePauseButton(pauseButton, ODE4JHelper.guaranteePhysicsWorld());

// The workaround is to manually set the button. Not pretty but it will have to do.
pauseButton.setToolTipText("Play");
pauseButton.setIcon( new ImageIcon(Objects.requireNonNull(getClass().getResource("/com/marginallyclever/ro3/shared/icons8-play-16.png"))) );

JToggleButton randomColorToggle = new JToggleButton("~Color");
randomColorToggle.addActionListener(e->randomColor = !randomColor);
Expand All @@ -52,19 +115,7 @@ public ODE4JPanel() {
toolbar.add(randomOrientationToggle);
randomColorToggle.setSelected(randomOrientation);

// I cannot call this here because the physics world has not been created yet.
// updatePauseButton(pauseButton, ODE4JHelper.guaranteePhysicsWorld());
// The workaround is to manually set the button. Not pretty but it will have to do.
pauseButton.setToolTipText("Play");
pauseButton.setIcon( new ImageIcon(Objects.requireNonNull(getClass().getResource("/com/marginallyclever/ro3/shared/icons8-play-16.png"))) );

addButtonByNameAndCallback(container, "+Floor", (e)-> Registry.getScene().addChild(new ODEPlane()) );
addButtonByNameAndCallback(container, "+Sphere", (e)-> add(new ODESphere()) );
addButtonByNameAndCallback(container, "+Box", (e)-> add(new ODEBox()) );
addButtonByNameAndCallback(container, "+Cylinder", (e)-> add(new ODECylinder()) );
addButtonByNameAndCallback(container, "+Capsule", (e)->add(new ODECapsule()) );
addButtonByNameAndCallback(container, "+Hinge", (e)-> add(new ODEHinge()) );
addButtonByNameAndCallback(container, "+Creature controller", (e)-> add(new CreatureController()) );
return toolbar;
}

private void add(Node node) {
Expand Down Expand Up @@ -105,10 +156,9 @@ private void giveRandomColor(Pose body) {
}
}

private JButton addButtonByNameAndCallback(JComponent parent, String title, ActionListener actionListener) {
private JButton addButtonByNameAndCallback(String title, ActionListener actionListener) {
JButton button = new JButton(title);
button.addActionListener(actionListener);
parent.add(button);
return button;
}

Expand All @@ -121,4 +171,19 @@ private void updatePauseButton(JButton pauseButton, ODEPhysics worldSpace) {
pauseButton.setIcon( new ImageIcon(Objects.requireNonNull(getClass().getResource("/com/marginallyclever/ro3/shared/icons8-pause-16.png"))));
}
}

public void setCFM(double cfm) {
var physics = Registry.getPhysics();
physics.setCFM(cfm);
}

public void setERP(double erp) {
var physics = Registry.getPhysics();
physics.setERP(erp);
}

public void setGravity(double gravity) {
var physics = Registry.getPhysics();
physics.setGravity(gravity);
}
}
Loading

0 comments on commit 3afce42

Please sign in to comment.