diff --git a/res/objecttypes.xml b/res/objecttypes.xml index 7c07663..c06b117 100644 --- a/res/objecttypes.xml +++ b/res/objecttypes.xml @@ -2,7 +2,7 @@ - + @@ -22,7 +22,7 @@ - + diff --git a/src/gui/DrawboxEditor.java b/src/gui/DrawboxEditor.java index fea35e2..0530f74 100644 --- a/src/gui/DrawboxEditor.java +++ b/src/gui/DrawboxEditor.java @@ -28,12 +28,21 @@ public class DrawboxEditor extends Editable { DrawboxEditor(ListGUI listGUI) { super(listGUI); - //Если будет ошибка, попробовать в Editable прокинуть canvas, как сделано с ListGUI - canvas = new EditableCanvas(entity, image); - add(canvas,BorderLayout.CENTER); - canvas.setBackground(Color.GRAY); + + canvas = new EditableCanvas(); + add(canvas); + //canvas.setBackground(Color.GRAY); canvas.setDrawboxRectengleRenderingFunction(); canvas.setVisible(true); + + clearLinesJButton.addActionListener((e)->{ + if(entity != null) { + entity.getDrawbox().getDrawboxlistPoints().clear(); + entity.getDrawbox().getbaseListPoints().clear(); + canvas.repaint(); + }}); + + logger.setLevel(Level.CONFIG); } @@ -51,24 +60,6 @@ public class DrawboxEditor extends Editable { } - - - public void clearPoints(){ - - } - // эта штука очищает точки при нажатии универскальной кнопки очистки в Main GUI. Это следует рефакторнуть и вместо передачи события сюда, - // обрабатывать его прямо в Main GUI(лямбдой) вызывая отсюда только метод в духе clearPoints() - /*@Override - public void actionPerformed(ActionEvent e) { - JTabbedPane parent = (JTabbedPane) getParent(); - if(parent.getSelectedComponent() == this){ - if(entity != null) { - entity.getDrawbox().getDrawboxlistPoints().clear(); - entity.getDrawbox().getbaseListPoints().clear(); - repaint(); - } - } - }*/ } diff --git a/src/gui/Editable.java b/src/gui/Editable.java index d65732d..2301368 100644 --- a/src/gui/Editable.java +++ b/src/gui/Editable.java @@ -1,8 +1,7 @@ package gui; +import java.awt.BorderLayout; import java.awt.Dimension; -import java.awt.Graphics; -import java.awt.Graphics2D; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -11,10 +10,12 @@ import java.awt.image.BufferedImage; import java.util.logging.Level; import java.util.logging.Logger; +import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JList; import javax.swing.JPanel; +import javax.swing.JToolBar; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; @@ -28,15 +29,22 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot protected String selectedEntityName; protected BufferedImage image; EditableCanvas canvas; - + JToolBar toolbar = new JToolBar("Toolbar",JToolBar.VERTICAL); + JButton clearLinesJButton; + private static Logger logger = Logger.getLogger("gui.Editable"); Editable(ListGUI listGUI){ this.listGUI = listGUI; - - addMouseListener(this); - addMouseMotionListener(this); + setLayout(new BorderLayout()); + + clearLinesJButton = createButton("Clear lines",null,"res/destroy.png"); + + toolbar.setBorder(BorderFactory.createLoweredBevelBorder()); + toolbar.addSeparator(); + toolbar.add(clearLinesJButton); + this.add(toolbar,BorderLayout.EAST); // РАСКОММЕНТИТЬ ЕСЛИ НУЖНО ВЫВОДИТЬ ПОДРОБНЫЕ ЛОГИ logger.setLevel(Level.ALL); @@ -90,11 +98,13 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot } image = Project.getInstance().loadImageByName(selectedEntityName); //TODO: if(image == null) вызов FileChooser'a и выбор изображения - this.repaint(); - //canvas.repaint(); - System.out.println(" Edit image = " + image); - System.out.println("---"); - System.out.println(" Canvas image = " + image); + canvas.setEntity(entity); + canvas.setImage(image); + canvas.repaint(); +// System.out.println(" Canvas image = " + canvas.image); +// System.out.println(" Canvas entity = " + canvas.entity); +// System.out.println(" Editable image = " + image); +// System.out.println(" Editable entity = " + entity); } } @@ -103,7 +113,7 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot button.addActionListener(listener); button.setContentAreaFilled(false); button.setFocusPainted(false); - button.setPreferredSize(new Dimension(72, 38)); + button.setPreferredSize(new Dimension(38, 38)); return button; } diff --git a/src/gui/EditableCanvas.java b/src/gui/EditableCanvas.java index a5e45fa..0178f66 100644 --- a/src/gui/EditableCanvas.java +++ b/src/gui/EditableCanvas.java @@ -8,73 +8,98 @@ import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import javax.swing.JPanel; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; import gui.render.DrawboxRectengleRenderingFunction; +import gui.render.HitboxCircleRenderingFunction; +import gui.render.HitboxRectengleRenderingFunction; import gui.render.ShapeRenderingFunction; import model.Entity; import repository.Project; -public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener, ListSelectionListener { +public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener { DrawboxRectengleRenderingFunction drawboxRectengleRenderFunct; + HitboxRectengleRenderingFunction hitboxRectengleRenderFunct; + HitboxCircleRenderingFunction hitboxCircleRenderFunct; ShapeRenderingFunction renderingFunction; Entity entity; BufferedImage image; - public EditableCanvas(Entity entity, BufferedImage image) { - this.entity = entity; - this.image = image; - drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction(entity); + public EditableCanvas() { + drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction(); + hitboxRectengleRenderFunct = new HitboxRectengleRenderingFunction(); + hitboxCircleRenderFunct = new HitboxCircleRenderingFunction(); drawboxRectengleRenderFunct.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий данные drawbox при отрисовке последней точки из 4-х. //hitboxPanel.subscribe(Project.getInstance()); + addMouseListener(this); + addMouseMotionListener(this); } public void drawing(Graphics2D g) { - if(renderingFunction!=null) { + if(renderingFunction!=null&&entity!=null) { renderingFunction.drawing(g); } } public void setDrawboxRectengleRenderingFunction() { renderingFunction = drawboxRectengleRenderFunct; + } + public void setHitboxRectengleRenderingFunction() { + renderingFunction = hitboxRectengleRenderFunct; + } + public void setHitboxCircleRenderingFunction() { + renderingFunction = hitboxCircleRenderFunct; } @Override public void mouseMoved(MouseEvent e) { - if(renderingFunction!=null) { + //System.out.println("moved"); + if(renderingFunction!=null&&entity!=null) { + System.out.println("x="+e.getX()+"y="+e.getY()); renderingFunction.mouseMoved(e); + repaint(); } } @Override public void mouseClicked(MouseEvent e) { - if(renderingFunction!=null) { + //System.out.println("Clicked"); + if(renderingFunction!=null&&entity!=null) { renderingFunction.mouseClicked(e); + repaint(); } } @Override public void mousePressed(MouseEvent e) { - if(renderingFunction!=null) { + //System.out.println("mousePressed"); + if(renderingFunction!=null&&entity!=null) { renderingFunction.mousePressed(e); + repaint(); } } - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - g.drawImage(image, 0, 0, this); - if(entity != null) { - drawing((Graphics2D)g); - } - } + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + g.drawImage(image, 0, 0, this); + if(entity != null) { + drawing((Graphics2D)g); + } + } + public void setEntity(Entity e) { + entity = e; + drawboxRectengleRenderFunct.setEntity(e); + } + + public void setImage(BufferedImage image) { + this.image = image; + } @@ -86,11 +111,7 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion public void mouseEntered(MouseEvent e) {} @Override public void mouseExited(MouseEvent e) {} - @Override - public void valueChanged(ListSelectionEvent e) { - //this.repaint(); - //System.out.println(" Canvas image = " + image); - } + } diff --git a/src/gui/HitboxEditor.java b/src/gui/HitboxEditor.java index 9b7b573..88cf2fd 100644 --- a/src/gui/HitboxEditor.java +++ b/src/gui/HitboxEditor.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.List; import javax.swing.JTabbedPane; +import javax.swing.event.ListSelectionEvent; import events.EntityDrawboxChangedEvent; import events.EntityDrawboxChangedListener; @@ -117,6 +118,10 @@ public class HitboxEditor extends Editable { } } }*/ - + @Override + public void valueChanged(ListSelectionEvent e) { + // TODO Auto-generated method stub + //super.valueChanged(e); + } } diff --git a/src/gui/MainGUI.java b/src/gui/MainGUI.java index d9b4fb9..aead57f 100644 --- a/src/gui/MainGUI.java +++ b/src/gui/MainGUI.java @@ -24,7 +24,7 @@ public class MainGUI extends JFrame{ ActionListener OpenXMLFileButtonListener; JButton openXMLJButton; JButton saveXMLJButton; - JButton clearLinesJButton; + public static JTabbedPane editorPane; DrawboxEditor drawBoxPanel; HitboxEditor hitboxPanel; @@ -50,7 +50,6 @@ public class MainGUI extends JFrame{ openXMLJButton = createButton("XML", OpenXMLFileButtonListener,"res/xml.png"); saveXMLJButton = createButton("Save",(e)-> Project.getInstance().writeXML(),"res/download.png"); - clearLinesJButton = createButton("Clear lines",null,"res/destroy.png"); gridButtonBar.add(openXMLJButton); gridButtonBar.add(saveXMLJButton); @@ -67,8 +66,8 @@ public class MainGUI extends JFrame{ editorPane.setVisible(true); add(editorPane,BorderLayout.CENTER); - editorPane.addTab("Hitbox", hitboxPanel); editorPane.addTab("Drawbox", drawBoxPanel); + editorPane.addTab("Hitbox", hitboxPanel); repaint(); } diff --git a/src/gui/render/DrawboxRectengleRenderingFunction.java b/src/gui/render/DrawboxRectengleRenderingFunction.java index c6356b2..bbeec4c 100644 --- a/src/gui/render/DrawboxRectengleRenderingFunction.java +++ b/src/gui/render/DrawboxRectengleRenderingFunction.java @@ -21,8 +21,8 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction private List listeners = new ArrayList<>(); Entity entity; Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor"); - public DrawboxRectengleRenderingFunction(Entity entity) { - this.entity = entity; + public DrawboxRectengleRenderingFunction() { + } @Override @@ -147,4 +147,8 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction entity.setDrawbox(new Drawbox(drawboxPoints)); } + public void setEntity(Entity e) { + entity = e; + } + }