From b35ec7826a56a4684ee8e3295a5f513a57ebc9f0 Mon Sep 17 00:00:00 2001 From: Radek Oslejsek <oslejsek@fi.muni.cz> Date: Thu, 10 Jun 2021 07:37:03 +0200 Subject: [PATCH] Finished control panel buttons --- .../cz/fidentis/analyst/canvas/Canvas.java | 241 +++++------------- .../analyst/canvas/ControlButtonsAction.java | 43 +++- 2 files changed, 98 insertions(+), 186 deletions(-) diff --git a/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java index de7e6e99..001a7633 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/Canvas.java @@ -19,22 +19,22 @@ import javax.swing.JPanel; * @author Radek Oslejsek */ public class Canvas extends JPanel { - - private GLCanvas glCanvas; + + // Scene components: + private Scene scene; private final SceneRenderer sceneRenderer; private final Camera camera = new Camera(); - private Scene scene; // Listeners: private final CanvasListener listener; private final MouseRotationListener manipulator; - private final RotationAnimator animator; - private ControlButtons controlButtonsPanel; - - private JLayeredPane layeredPane; - private JPanel canvasPanel; - + // GUI elements: + private final JLayeredPane layeredPane; + private final JPanel canvasPanel; + private final ControlButtons controlButtonsPanel; + private GLCanvas glCanvas; + /** * Constructor. @@ -50,7 +50,7 @@ public class Canvas extends JPanel { canvasPanel = getCanvasPanel(); canvasPanel.add(glCanvas); - controlButtonsPanel = getButtonsPanel(); + controlButtonsPanel = getButtonsPanel(this); layeredPane = getLayeredPane(); layeredPane.add(canvasPanel, 1); @@ -60,61 +60,9 @@ public class Canvas extends JPanel { setDarkBackground(true); - animator = new RotationAnimator(this.glCanvas); - validate(); } - private ControlButtons getButtonsPanel() { - ControlButtonsAction controlButtonsListener = new ControlButtonsAction(); - ControlButtons ret = new ControlButtons(controlButtonsListener); - ret.setOpaque(false); - ret.setBounds(20, 20, ControlButtons.SIZE.width, ControlButtons.SIZE.height); - return ret; - } - - private JLayeredPane getLayeredPane() { - JLayeredPane pane = new JLayeredPane(); - pane.addComponentListener(new java.awt.event.ComponentAdapter() { - @Override - public void componentResized(java.awt.event.ComponentEvent evt) { - jLayeredPane1ComponentResized(evt); - } - @Override - public void componentShown(java.awt.event.ComponentEvent evt) { - jLayeredPane1ComponentShown(evt); - } - }); - return pane; - } - - private JPanel getCanvasPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new BorderLayout()); - panel.setBounds(0, 0, 0, 0); - return panel; - } - - private void initGLCanvas() { - // gl version 2 is used - GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2)); - capabilities.setDoubleBuffered(true); - - // creates new glCanvas panel for displaying model - glCanvas = new GLCanvas(capabilities); - glCanvas.setVisible(true); - - // enables glCanvas to react to events - glCanvas.requestFocusInWindow(); - glCanvas.setSize(getWidth() - getInsets().left - getInsets().right, getHeight() - getInsets().top - getInsets().bottom); - - glCanvas.addGLEventListener(listener); - - glCanvas.addMouseListener(manipulator); - glCanvas.addMouseMotionListener(manipulator); - glCanvas.addMouseWheelListener(manipulator); - } - /** * Initializes the scene for a single face. Can be called only once. * @@ -177,6 +125,16 @@ public class Canvas extends JPanel { return camera; } + /** + * Returns the underlying OpenGL canvas. + * + * @return the underlying OpenGL canvas. + */ + public GLCanvas getGLCanvas() { + return this.glCanvas; + } + + /** * Sets background color * @@ -192,123 +150,56 @@ public class Canvas extends JPanel { } } - /** - * Returns the underlying OpenGL canvas. - * - * @return the underlying OpenGL canvas. - */ - /* - public GLCanvas getGLCanvas() { - return this.glCanvas; - }*/ + private ControlButtons getButtonsPanel(Canvas canvas) { + ControlButtonsAction controlButtonsListener = new ControlButtonsAction(canvas); + ControlButtons ret = new ControlButtons(controlButtonsListener); + ret.setOpaque(false); + ret.setBounds(20, 20, ControlButtons.SIZE.width, ControlButtons.SIZE.height); + return ret; + } + private JLayeredPane getLayeredPane() { + JLayeredPane pane = new JLayeredPane(); + pane.addComponentListener(new java.awt.event.ComponentAdapter() { + @Override + public void componentResized(java.awt.event.ComponentEvent evt) { + canvasPanel.setBounds(0, 0, layeredPane.getWidth(), layeredPane.getHeight()); + glCanvas.setBounds(layeredPane.getX(), layeredPane.getY(), layeredPane.getWidth(), layeredPane.getHeight()); + } + @Override + public void componentShown(java.awt.event.ComponentEvent evt) { + canvasPanel.setBounds(0, 0, layeredPane.getWidth(), layeredPane.getHeight()); + glCanvas.setBounds(layeredPane.getX(), layeredPane.getY(), layeredPane.getWidth(), layeredPane.getHeight()); + } + }); + return pane; + } - /** - * Changing the size of glCanvas - * - * @param d New size of glCanvas - */ - /* - public void resizeCanvas(Dimension d) { - jPanel1.setSize(d); - glCanvas.setSize(d); - this.validate(); - this.repaint(); + private JPanel getCanvasPanel() { + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout()); + panel.setBounds(0, 0, 0, 0); + return panel; } - */ - private void jLayeredPane1ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentResized - canvasPanel.setBounds(0, 0, layeredPane.getWidth(), layeredPane.getHeight()); - glCanvas.setBounds(layeredPane.getX(), layeredPane.getY(), layeredPane.getWidth(), layeredPane.getHeight()); - }//GEN-LAST:event_jLayeredPane1ComponentResized - - private void jLayeredPane1ComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jLayeredPane1ComponentShown - canvasPanel.setBounds(0, 0, layeredPane.getWidth(), layeredPane.getHeight()); - glCanvas.setBounds(layeredPane.getX(), layeredPane.getY(), layeredPane.getWidth(), layeredPane.getHeight()); - }//GEN-LAST:event_jLayeredPane1ComponentShown - - private void leftNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMousePressed - animator.startAnimation(Direction.ROTATE_LEFT, this.camera); - //leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButtonPressed.png"))); - }//GEN-LAST:event_leftNavigationButtonMousePressed - - private void upNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMousePressed - animator.startAnimation(Direction.ROTATE_UP, this.camera); - //upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButtonPressed.png"))); - }//GEN-LAST:event_upNavigationButtonMousePressed - - private void downNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMousePressed - animator.startAnimation(Direction.ROTATE_DOWN, this.camera); - //downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButtonPressed.png"))); - }//GEN-LAST:event_downNavigationButtonMousePressed - - private void plusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMousePressed - animator.startAnimation(Direction.ZOOM_IN, this.camera); - //plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plusPressed.png"))); - }//GEN-LAST:event_plusNavigationButtonMousePressed - - private void minusNavigationButtonMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMousePressed - animator.startAnimation(Direction.ZOOM_OUT, this.camera); - //minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minusPressed.png"))); - }//GEN-LAST:event_minusNavigationButtonMousePressed - - private void leftNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_leftNavigationButtonMouseReleased - animator.stopAnimation(this.camera); - //leftNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/leftButton.png"))); - }//GEN-LAST:event_leftNavigationButtonMouseReleased - - private void upNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_upNavigationButtonMouseReleased - animator.stopAnimation(this.camera); - //upNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/upButton.png"))); - }//GEN-LAST:event_upNavigationButtonMouseReleased - - private void downNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_downNavigationButtonMouseReleased - animator.stopAnimation(this.camera); - //downNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/downButton.png"))); - }//GEN-LAST:event_downNavigationButtonMouseReleased - - private void plusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_plusNavigationButtonMouseReleased - animator.stopAnimation(this.camera); - //plusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/plus.png"))); - }//GEN-LAST:event_plusNavigationButtonMouseReleased - - private void minusNavigationButtonMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_minusNavigationButtonMouseReleased - animator.stopAnimation(this.camera); - //minusNavigationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/minus.png"))); - }//GEN-LAST:event_minusNavigationButtonMouseReleased - - private void rightNavigationButton1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MousePressed - animator.startAnimation(Direction.ROTATE_RIGHT, this.camera); - //rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButtonPressed.png"))); - }//GEN-LAST:event_rightNavigationButton1MousePressed - - private void rightNavigationButton1MouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_rightNavigationButton1MouseReleased - animator.stopAnimation(this.camera); - //rightNavigationButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/rightButton.png"))); - }//GEN-LAST:event_rightNavigationButton1MouseReleased - - private void resetButtonMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseClicked - camera.initLocation(); - renderScene(); - }//GEN-LAST:event_resetButtonMouseClicked - - private void resetButtonMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseMoved - //resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButtonPressed.png"))); - //resetButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - }//GEN-LAST:event_resetButtonMouseMoved + private void initGLCanvas() { + // gl version 2 is used + GLCapabilities capabilities = new GLCapabilities(GLProfile.get(GLProfile.GL2)); + capabilities.setDoubleBuffered(true); + + // creates new glCanvas panel for displaying model + glCanvas = new GLCanvas(capabilities); + glCanvas.setVisible(true); + + // enables glCanvas to react to events + glCanvas.requestFocusInWindow(); + glCanvas.setSize(getWidth() - getInsets().left - getInsets().right, getHeight() - getInsets().top - getInsets().bottom); - private void resetButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_resetButtonMouseExited - //resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resetButton.png"))); - }//GEN-LAST:event_resetButtonMouseExited + glCanvas.addGLEventListener(listener); - // Variables declaration - do not modify//GEN-BEGIN:variables - //private javax.swing.JButton downNavigationButton; - //private javax.swing.JLabel jLabel1; - //private javax.swing.JButton leftNavigationButton; - //private javax.swing.JButton minusNavigationButton; - //private javax.swing.JButton plusNavigationButton; - //private javax.swing.JLabel resetButton; - //private javax.swing.JButton rightNavigationButton1; - //private javax.swing.JButton upNavigationButton; - // End of variables declaration//GEN-END:variables + glCanvas.addMouseListener(manipulator); + glCanvas.addMouseMotionListener(manipulator); + glCanvas.addMouseWheelListener(manipulator); + } + } diff --git a/GUI/src/main/java/cz/fidentis/analyst/canvas/ControlButtonsAction.java b/GUI/src/main/java/cz/fidentis/analyst/canvas/ControlButtonsAction.java index 2344328a..1c3d14ab 100644 --- a/GUI/src/main/java/cz/fidentis/analyst/canvas/ControlButtonsAction.java +++ b/GUI/src/main/java/cz/fidentis/analyst/canvas/ControlButtonsAction.java @@ -23,6 +23,23 @@ public class ControlButtonsAction extends AbstractAction { public static final String ACTION_COMMAND_MINUS_PRESSED = "zoom out pressed"; public static final String ACTION_COMMAND_MINUS_RELEASED = "zoom out released"; public static final String ACTION_COMMAND_RESET = "reset"; + + private final RotationAnimator animator; + private final Canvas canvas; + + /** + * Constructor. + * + * @param canvas OpenGL canvas + * @throws IllegalArgumentException if some param is missing + */ + public ControlButtonsAction(Canvas canvas) { + if (canvas == null) { + throw new IllegalArgumentException("canvas"); + } + this.canvas = canvas; + this.animator = new RotationAnimator(canvas.getGLCanvas()); + } @Override public void actionPerformed(ActionEvent e) { @@ -30,33 +47,37 @@ public class ControlButtonsAction extends AbstractAction { switch (command) { case ACTION_COMMAND_LEFT_PRESSED: - break; - case ACTION_COMMAND_LEFT_RELEASED: + animator.startAnimation(Direction.ROTATE_LEFT, canvas.getCamera()); break; case ACTION_COMMAND_RIGHT_PRESSED: - break; - case ACTION_COMMAND_RIGHT_RELEASED: + animator.startAnimation(Direction.ROTATE_RIGHT, canvas.getCamera()); break; case ACTION_COMMAND_UP_PRESSED: - break; - case ACTION_COMMAND_UP_RELEASED: + animator.startAnimation(Direction.ROTATE_UP, canvas.getCamera()); break; case ACTION_COMMAND_DOWN_PRESSED: - break; - case ACTION_COMMAND_DOWN_RELEASED: + animator.startAnimation(Direction.ROTATE_DOWN, canvas.getCamera()); break; case ACTION_COMMAND_RESET: + canvas.getCamera().initLocation(); + canvas.renderScene(); break; case ACTION_COMMAND_PLUS_PRESSED: - break; - case ACTION_COMMAND_PLUS_RELEASED: + animator.startAnimation(Direction.ZOOM_IN, canvas.getCamera()); break; case ACTION_COMMAND_MINUS_PRESSED: + animator.startAnimation(Direction.ZOOM_OUT, canvas.getCamera()); break; + case ACTION_COMMAND_LEFT_RELEASED: + case ACTION_COMMAND_RIGHT_RELEASED: + case ACTION_COMMAND_UP_RELEASED: + case ACTION_COMMAND_DOWN_RELEASED: + case ACTION_COMMAND_PLUS_RELEASED: case ACTION_COMMAND_MINUS_RELEASED: + animator.stopAnimation(canvas.getCamera()); break; default: - throw new UnsupportedOperationException(command); + // do nothing } } -- GitLab