Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 45 additions & 132 deletions src/main/java/edu/rpi/legup/controller/TreeController.java
Original file line number Diff line number Diff line change
@@ -1,186 +1,99 @@
package edu.rpi.legup.controller;

import static edu.rpi.legup.app.GameBoardFacade.getInstance;

import edu.rpi.legup.model.Puzzle;
import edu.rpi.legup.model.tree.Tree;
import edu.rpi.legup.ui.boardview.BoardView;
import edu.rpi.legup.ui.proofeditorui.treeview.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import javax.swing.*;
import edu.rpi.legup.ui.proofeditorui.treeview.TreeElementView;
import edu.rpi.legup.ui.proofeditorui.treeview.TreePanel;
import edu.rpi.legup.ui.proofeditorui.treeview.TreeView;
import edu.rpi.legup.ui.proofeditorui.treeview.TreeViewSelection;
import org.jetbrains.annotations.NotNull;

import static edu.rpi.legup.app.GameBoardFacade.getInstance;

/**
* The TreeController class handles UI events from a TreePanel. It extends the Controller class to
* provide specific behavior for tree interactions
* The {@code TreeController} class handles UI events from a {@code TreePanel}. It extends the
* {@code Controller} class to provide specific behavior for tree interactions.
*/
public class TreeController extends Controller {
/**
* TreeController Constructor creates a controller object to listen to ui events from a {@link
* TreePanel}
*/
public TreeController() {}
public class TreeController extends ZoomViewController {

/**
* Mouse Clicked event no default action
*
* @param e MouseEvent object
*/
@Override
public void mouseClicked(MouseEvent e) {}

/**
* Mouse Pressed event sets the cursor to the move cursor and stores info for possible panning
*
* @param e MouseEvent object
*/
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
}
/** {@code TreeController} constructor creates a controller object to listen to ui events from a {@link TreePanel}. */
public TreeController() {}

/**
* Mouse Released event sets the cursor back to the default cursor and reset info for panning
* Set board modifiability
*
* @param e MouseEvent object
*/
@Override
public void mouseReleased(MouseEvent e) {
public void mouseReleased(@NotNull ControllerMouseEvent e) {
super.mouseReleased(e);

TreeView treeView = (TreeView) viewer;
Point point = treeView.getActualPoint(e.getPoint());
TreeElementView treeElementView = treeView.getTreeElementView(point);
TreeView treeView = (TreeView) getView();
TreeElementView treeElementView = treeView.getTreeElementView(e.getPrecisePoint());
Puzzle puzzle = getInstance().getPuzzleModule();
TreeViewSelection selection = treeView.getSelection();

if (treeElementView != null) {
if (e.isShiftDown()) {
selection.addToSelection(treeElementView);
} else if (e.isControlDown()) {
selection.toggleSelection(treeElementView);
} else {
if (e.isControlDown()) {
if (!(selection.getSelectedViews().size() == 1
&& treeElementView == selection.getFirstSelection())) {
selection.toggleSelection(treeElementView);
}
} else {
selection.newSelection(treeElementView);
}
selection.newSelection(treeElementView);
}
puzzle.notifyTreeListeners(listener -> listener.onTreeSelectionChanged(selection));
puzzle.notifyBoardListeners(
listener -> listener.onTreeElementChanged(treeElementView.getTreeElement()));
}
}

/**
* Mouse Entered event no default action
*
* @param e MouseEvent object
*/
@Override
public void mouseEntered(MouseEvent e) {
TreeView treeView = (TreeView) viewer;
Point point = treeView.getActualPoint(e.getPoint());
Tree tree = getInstance().getTree();
BoardView boardView = getInstance().getLegupUI().getBoardView();
TreeElementView treeElementView = treeView.getTreeElementView(point);
Puzzle puzzle = getInstance().getPuzzleModule();
if (treeElementView != null) {
puzzle.notifyTreeListeners(listener -> listener.onTreeSelectionChanged(selection));
puzzle.notifyBoardListeners(
listener -> listener.onTreeElementChanged(treeElementView.getTreeElement()));
}
}

/**
* Mouse Exited event no default action
*
* @param e MouseEvent object
*/
@Override
public void mouseExited(MouseEvent e) {
TreeView treeView = (TreeView) viewer;
Point point = treeView.getActualPoint(e.getPoint());
TreeElementView elementView = treeView.getTreeElementView(point);
Puzzle puzzle = getInstance().getPuzzleModule();
public void mouseExited(@NotNull ControllerMouseEvent e) {
TreeView treeView = (TreeView) getView();
TreeViewSelection selection = treeView.getSelection();

selection.setMousePoint(null);
if (elementView != null) {
TreeElementView selectedView = selection.getFirstSelection();
puzzle.notifyBoardListeners(
listener -> listener.onTreeElementChanged(selectedView.getTreeElement()));
}
selection.clearHover();
}

/**
* Mouse Dragged event adjusts the viewport
*
* @param e MouseEvent object
*/
@Override
public void mouseDragged(MouseEvent e) {
TreeView treeView = (TreeView) viewer;
Point point = treeView.getActualPoint(e.getPoint());
TreeElementView treeElementView = treeView.getTreeElementView(point);
public void mouseDragged(@NotNull ControllerMouseEvent e) {
TreeView treeView = (TreeView) getView();
TreeElementView treeElementView = treeView.getTreeElementView(e.getPrecisePoint());
Puzzle puzzle = getInstance().getPuzzleModule();
TreeViewSelection selection = treeView.getSelection();

if (puzzle != null) {
selection.setMousePoint(treeView.getActualPoint(e.getPoint()));
TreeViewSelection selection = treeView.getSelection();
selection.setMousePoint(e.getPrecisePoint());

if (treeElementView != null && treeElementView != selection.getHover()) {
puzzle.notifyBoardListeners(
listener ->
listener.onTreeElementChanged(treeElementView.getTreeElement()));
listener -> listener.onTreeElementChanged(treeElementView.getTreeElement()));
selection.newSelection(treeElementView);
selection.newHover(treeElementView);
puzzle.notifyTreeListeners(listener -> listener.onTreeSelectionChanged(selection));
} else {
if (treeElementView == null && selection.getHover() != null) {
}
else if (treeElementView == null && selection.getHover() != null) {
puzzle.notifyBoardListeners(
listener ->
listener.onTreeElementChanged(
selection.getFirstSelection().getTreeElement()));
listener.onTreeElementChanged(selection.getFirstSelection().getTreeElement()));
selection.clearHover();
}
}
}
}

/**
* Mouse Moved event no default action
*
* @param e MouseEvent object
*/
@Override
public void mouseMoved(MouseEvent e) {
TreeView treeView = (TreeView) viewer;
Point point = treeView.getActualPoint(e.getPoint());
TreeElementView treeElementView = treeView.getTreeElementView(point);
public void mouseMoved(@NotNull ControllerMouseEvent e) {
TreeView treeView = (TreeView) getView();
TreeElementView treeElementView = treeView.getTreeElementView(e.getPrecisePoint());
Puzzle puzzle = getInstance().getPuzzleModule();

if (puzzle != null) {
TreeViewSelection selection = treeView.getSelection();
selection.setMousePoint(treeView.getActualPoint(e.getPoint()));
selection.setMousePoint(e.getPrecisePoint());

if (treeElementView != null && treeElementView != selection.getHover()) {
selection.newHover(treeElementView);
puzzle.notifyTreeListeners(listener -> listener.onTreeSelectionChanged(selection));
} else {
if (treeElementView == null && selection.getHover() != null) {
selection.clearHover();
puzzle.notifyTreeListeners(
listener -> listener.onTreeSelectionChanged(selection));
}
}
else if (treeElementView == null && selection.getHover() != null) {
selection.clearHover();
puzzle.notifyTreeListeners(listener -> listener.onTreeSelectionChanged(selection));
}
}
}

/**
* Mouse Wheel Moved event zooms in on the viewport
*
* @param e MouseEvent object
*/
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
super.viewer.scroll(e.getWheelRotation());
}
}
}
Loading
Loading