completed

This commit is contained in:
rozenkranzz 2025-02-15 17:46:26 +04:00
parent c8998395cc
commit 3935381e31
7 changed files with 195 additions and 10 deletions

View File

@ -0,0 +1,22 @@
package projectliner.Drawings;
import javax.swing.*;
import java.awt.datatransfer.*;
public class AdditionalElementsTransferHandler extends TransferHandler {
private final IAdditionalElements additionalElements;
public AdditionalElementsTransferHandler(IAdditionalElements additionalElements) {
this.additionalElements = additionalElements;
}
@Override
protected Transferable createTransferable(JComponent c) {
return new AdditionalElementsTransferable(additionalElements);
}
@Override
public int getSourceActions(JComponent c) {
return COPY;
}
}

View File

@ -0,0 +1,31 @@
package projectliner.Drawings;
import java.awt.datatransfer.*;
import java.io.IOException;
public class AdditionalElementsTransferable implements Transferable {
public static final DataFlavor additionalElementsFlavor = new DataFlavor(IAdditionalElements.class, "IAdditionalElements");
private final IAdditionalElements additionalElements;
public AdditionalElementsTransferable(IAdditionalElements additionalElements) {
this.additionalElements = additionalElements;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{additionalElementsFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return flavor.equals(additionalElementsFlavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
if (!isDataFlavorSupported(flavor)) {
throw new UnsupportedFlavorException(flavor);
}
return additionalElements;
}
}

View File

@ -14,7 +14,7 @@ public class DrawingBaseLiner {
protected Integer startPosY;
private int drawingLinerWidth;
private int drawingLinerHeight;
private IAdditionalElements deck;
protected IAdditionalElements deck;
private DrawingBaseLiner() {
this.drawingLinerWidth = 140;
@ -103,6 +103,11 @@ public class DrawingBaseLiner {
}
}
public void setDeck(IAdditionalElements deck, int deckNum) {
this.deck = deck;
this.deck.setNumericalValue(deckNum);
}
public void drawTransport(Graphics g) {
if (this.baseLiner != null && this.startPosX != null && this.startPosY != null) {
int x = this.startPosX;

View File

@ -12,7 +12,6 @@ import projectliner.Entities.LinerEntityType;
import javax.swing.*;
public class DrawingLiner extends DrawingBaseLiner {
private IAdditionalElements deck;
public DrawingLiner(int speed, double weight, Color primaryColor,
Color secondaryColor, LinerEntityType type, int capacity,
@ -46,7 +45,10 @@ public class DrawingLiner extends DrawingBaseLiner {
case "Square Deck" -> this.deck = new SquareDeckDrawing();
default -> throw new IllegalArgumentException("Invalid deck form: " + form);
}
}
public void setDeckNum(int deckNum) {
this.deck.setNumericalValue(deckNum);
}
public void drawTransport(Graphics g) {

View File

@ -29,6 +29,14 @@ public class BaseLinerEntity {
return (double)this.speed / (this.weight / (double)100.0F);
}
public void setSpeed(int speed) {
this.speed = speed;
}
public void setWeight(double weight) {
this.weight = weight;
}
public void setPrimaryColor(Color primaryColor) {
this.primaryColor = primaryColor;
}

View File

@ -51,7 +51,27 @@ public class LinerEntity extends BaseLinerEntity {
return this.hasPool;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
public void setMaxPassengers(int maxPassengers) {
this.maxPassengers = maxPassengers;
}
public void setExtraDeck(boolean extraDeck) {
this.hasExtraDeck = extraDeck;
}
public void setPool(boolean pool) {
this.hasPool = pool;
}
public void setSecondaryColor(Color secondaryColor) {
this.secondaryColor = secondaryColor;
}
public void setType(LinerEntityType type) {
this.type = type;
}
}

View File

@ -1,12 +1,8 @@
package projectliner;
import projectliner.Drawings.DrawingBaseLiner;
import projectliner.Drawings.ColorTransferable;
import projectliner.Drawings.DrawingLiner;
import projectliner.Drawings.LabelTransferHandler;
import projectliner.Drawings.*;
import projectliner.Entities.LinerEntity;
import projectliner.Entities.LinerEntityType;
import projectliner.Drawings.ILinerDelegate;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
@ -20,6 +16,7 @@ import java.awt.image.BufferedImage;
public class FormLinerConfig extends JFrame {
private DrawingBaseLiner liner;
private ILinerDelegate linerDelegate;
private IAdditionalElements deck;
private ColorTransferable colorTransferable;
private JButton buttonCancel;
@ -116,7 +113,7 @@ public class FormLinerConfig extends JFrame {
}
private void panelObjectDragEnter(DropTargetDragEvent e) {
if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) {
if (e.isDataFlavorSupported(DataFlavor.stringFlavor) || e.isDataFlavorSupported(AdditionalElementsTransferable.additionalElementsFlavor)) {
e.acceptDrag(DnDConstants.ACTION_COPY);
} else {
e.rejectDrag();
@ -136,7 +133,7 @@ public class FormLinerConfig extends JFrame {
liner = new DrawingLiner((int) numericUpDownSpeed.getValue(), ((Integer) numericUpDownWeight.getValue()).doubleValue(),
Color.WHITE, Color.BLACK, LinerEntityType.values()[comboBoxLinerType.getSelectedIndex()],
(int) numericUpDownCapacity.getValue(), (int) numericUpDownMaxPassengers.getValue(),
checkBoxExtraDeck.isSelected(), checkBoxPool.isSelected(), (int) numericUpDownDeckNum.getValue(), "Triangular Deck");
checkBoxExtraDeck.isSelected(), checkBoxPool.isSelected(), (int) numericUpDownDeckNum.getValue(), "Square Deck");
break;
}
drawObject();
@ -147,6 +144,23 @@ public class FormLinerConfig extends JFrame {
}
}
private void panelObjectDropAdditionalElements(DropTargetDropEvent e) {
try {
e.acceptDrop(DnDConstants.ACTION_COPY);
IAdditionalElements deck = (IAdditionalElements) e.getTransferable().getTransferData(AdditionalElementsTransferable.additionalElementsFlavor);
if (deck != null) {
liner.setDeck(deck, (int) numericUpDownDeckNum.getValue());
drawObject();
e.dropComplete(true);
} else {
e.dropComplete(false);
}
} catch (Exception ex) {
ex.printStackTrace();
e.dropComplete(false);
}
}
private void panelMouseDown(JPanel panel) {
Color color = panel.getBackground();
Transferable transferable = new ColorTransferable(color);
@ -327,6 +341,47 @@ public class FormLinerConfig extends JFrame {
}
});
JLabel labelSquareDeck = new JLabel("Square Deck");
labelSquareDeck.setHorizontalAlignment(SwingConstants.CENTER);
labelSquareDeck.setMaximumSize(new Dimension(200, 20));
labelSquareDeck.setBorder(new LineBorder(Color.BLACK));
labelSquareDeck.setTransferHandler(new AdditionalElementsTransferHandler(new SquareDeckDrawing()));
labelSquareDeck.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
labelObjectMouseDown(e);
}
});
JLabel labelCircularDeck = new JLabel("Circular Deck");
labelCircularDeck.setHorizontalAlignment(SwingConstants.CENTER);
labelCircularDeck.setMaximumSize(new Dimension(200, 20));
labelCircularDeck.setBorder(new LineBorder(Color.BLACK));
labelCircularDeck.setTransferHandler(new AdditionalElementsTransferHandler(new CircularDeckDrawing()));
labelCircularDeck.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
labelObjectMouseDown(e);
}
});
JLabel labelTriangularDeck = new JLabel("Triangular Deck");
labelTriangularDeck.setHorizontalAlignment(SwingConstants.CENTER);
labelTriangularDeck.setMaximumSize(new Dimension(200, 20));
labelTriangularDeck.setBorder(new LineBorder(Color.BLACK));
labelTriangularDeck.setTransferHandler(new AdditionalElementsTransferHandler(new TriangularDeckDrawing()));
labelTriangularDeck.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
labelObjectMouseDown(e);
}
});
JPanel additionalElements = new JPanel();
additionalElements.setLayout(new BoxLayout(additionalElements, BoxLayout.X_AXIS));
additionalElements.add(labelSquareDeck);
additionalElements.add(Box.createHorizontalStrut(10));
additionalElements.add(labelCircularDeck);
additionalElements.add(Box.createHorizontalStrut(10));
additionalElements.add(labelTriangularDeck);
JPanel objectEntities = new JPanel();
objectEntities.setLayout(new BoxLayout(objectEntities, BoxLayout.X_AXIS));
objectEntities.add(labelBasicObject);
@ -340,6 +395,8 @@ public class FormLinerConfig extends JFrame {
middlePanel.add(panelColorsDown);
middlePanel.add(Box.createVerticalStrut(10));
middlePanel.add(objectEntities);
middlePanel.add(Box.createVerticalStrut(10));
middlePanel.add(additionalElements);
add(middlePanel, BorderLayout.CENTER);
@ -397,7 +454,18 @@ public class FormLinerConfig extends JFrame {
}
public void drop(DropTargetDropEvent e) {
panelObjectDragDrop(e);
try {
if (e.isDataFlavorSupported(DataFlavor.stringFlavor)) {
panelObjectDragDrop(e);
} else if (e.isDataFlavorSupported(AdditionalElementsTransferable.additionalElementsFlavor)) {
panelObjectDropAdditionalElements(e);
} else {
e.rejectDrop();
}
} catch (Exception ex) {
ex.printStackTrace();
e.dropComplete(false);
}
}
});
@ -429,9 +497,38 @@ public class FormLinerConfig extends JFrame {
}
});
numericUpDownSpeed.addChangeListener(e -> updateLinerParameters());
numericUpDownWeight.addChangeListener(e -> updateLinerParameters());
numericUpDownCapacity.addChangeListener(e -> updateLinerParameters());
numericUpDownMaxPassengers.addChangeListener(e -> updateLinerParameters());
numericUpDownDeckNum.addChangeListener(e -> updateLinerParameters());
comboBoxLinerType.addItemListener(e -> updateLinerParameters());
checkBoxExtraDeck.addItemListener(e -> updateLinerParameters());
checkBoxPool.addItemListener(e -> updateLinerParameters());
add(panelObject, BorderLayout.EAST);
}
private void updateLinerParameters() {
if (liner != null) {
liner.baseLiner.setSpeed((int) numericUpDownSpeed.getValue());
liner.baseLiner.setWeight(((Integer) numericUpDownWeight.getValue()).doubleValue());
if (liner instanceof DrawingLiner drawingLiner) {
if (drawingLiner.getBaseLiner() instanceof LinerEntity linerEntity) {
linerEntity.setType(LinerEntityType.values()[comboBoxLinerType.getSelectedIndex()]);
linerEntity.setCapacity((int) numericUpDownCapacity.getValue());
linerEntity.setMaxPassengers((int) numericUpDownMaxPassengers.getValue());
linerEntity.setExtraDeck(checkBoxExtraDeck.isSelected());
linerEntity.setPool(checkBoxPool.isSelected());
}
drawingLiner.setDeckNum((int) numericUpDownDeckNum.getValue());
}
drawObject();
}
}
private JPanel createColorPanel(Color color) {
JPanel panel = new JPanel();
panel.setBackground(color);