Working version of the refactoring DrawboxEditor. Added ToolBar in Editor
This commit is contained in:
@ -2,7 +2,7 @@
|
|||||||
<objecttypes>
|
<objecttypes>
|
||||||
<objecttype color="#a0a0a4" name="misato">
|
<objecttype color="#a0a0a4" name="misato">
|
||||||
<property default="Solid" name="class" type="string"/>
|
<property default="Solid" name="class" type="string"/>
|
||||||
<property default="22 10 232 3 264 199 5 198 " name="drawbox" type="string"/>
|
<property default="15 4 217 0 209 197 30 180 " name="drawbox" type="string"/>
|
||||||
<property default="Circle 4 6 24" name="hitbox" type="string"/>
|
<property default="Circle 4 6 24" name="hitbox" type="string"/>
|
||||||
</objecttype>
|
</objecttype>
|
||||||
<objecttype color="#a0a0a4" name="starlight">
|
<objecttype color="#a0a0a4" name="starlight">
|
||||||
@ -22,7 +22,7 @@
|
|||||||
</objecttype>
|
</objecttype>
|
||||||
<objecttype color="000000" name="newtest">
|
<objecttype color="000000" name="newtest">
|
||||||
<property default="solid" name="class" type="string"/>
|
<property default="solid" name="class" type="string"/>
|
||||||
<property default="0 0 0 0 0 0 0 0" name="drawbox" type="string"/>
|
<property default="93 15 404 57 389 162 207 164 " name="drawbox" type="string"/>
|
||||||
<property default="Rectangle 0 0 0 0" name="hitbox" type="string"/>
|
<property default="Rectangle 0 0 0 0" name="hitbox" type="string"/>
|
||||||
</objecttype>
|
</objecttype>
|
||||||
</objecttypes>
|
</objecttypes>
|
||||||
|
|||||||
@ -28,12 +28,21 @@ public class DrawboxEditor extends Editable {
|
|||||||
|
|
||||||
DrawboxEditor(ListGUI listGUI) {
|
DrawboxEditor(ListGUI listGUI) {
|
||||||
super(listGUI);
|
super(listGUI);
|
||||||
//Если будет ошибка, попробовать в Editable прокинуть canvas, как сделано с ListGUI
|
|
||||||
canvas = new EditableCanvas(entity, image);
|
canvas = new EditableCanvas();
|
||||||
add(canvas,BorderLayout.CENTER);
|
add(canvas);
|
||||||
canvas.setBackground(Color.GRAY);
|
//canvas.setBackground(Color.GRAY);
|
||||||
canvas.setDrawboxRectengleRenderingFunction();
|
canvas.setDrawboxRectengleRenderingFunction();
|
||||||
canvas.setVisible(true);
|
canvas.setVisible(true);
|
||||||
|
|
||||||
|
clearLinesJButton.addActionListener((e)->{
|
||||||
|
if(entity != null) {
|
||||||
|
entity.getDrawbox().getDrawboxlistPoints().clear();
|
||||||
|
entity.getDrawbox().getbaseListPoints().clear();
|
||||||
|
canvas.repaint();
|
||||||
|
}});
|
||||||
|
|
||||||
|
|
||||||
logger.setLevel(Level.CONFIG);
|
logger.setLevel(Level.CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,22 +62,4 @@ 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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
package gui;
|
package gui;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.awt.event.MouseListener;
|
import java.awt.event.MouseListener;
|
||||||
@ -11,10 +10,12 @@ import java.awt.image.BufferedImage;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import javax.swing.BorderFactory;
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
import javax.swing.JButton;
|
import javax.swing.JButton;
|
||||||
import javax.swing.JList;
|
import javax.swing.JList;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JToolBar;
|
||||||
import javax.swing.event.ListSelectionEvent;
|
import javax.swing.event.ListSelectionEvent;
|
||||||
import javax.swing.event.ListSelectionListener;
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
|
||||||
@ -28,15 +29,22 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot
|
|||||||
protected String selectedEntityName;
|
protected String selectedEntityName;
|
||||||
protected BufferedImage image;
|
protected BufferedImage image;
|
||||||
EditableCanvas canvas;
|
EditableCanvas canvas;
|
||||||
|
JToolBar toolbar = new JToolBar("Toolbar",JToolBar.VERTICAL);
|
||||||
|
JButton clearLinesJButton;
|
||||||
|
|
||||||
private static Logger logger = Logger.getLogger("gui.Editable");
|
private static Logger logger = Logger.getLogger("gui.Editable");
|
||||||
|
|
||||||
|
|
||||||
Editable(ListGUI listGUI){
|
Editable(ListGUI listGUI){
|
||||||
this.listGUI = listGUI;
|
this.listGUI = listGUI;
|
||||||
|
setLayout(new BorderLayout());
|
||||||
|
|
||||||
addMouseListener(this);
|
clearLinesJButton = createButton("Clear lines",null,"res/destroy.png");
|
||||||
addMouseMotionListener(this);
|
|
||||||
|
toolbar.setBorder(BorderFactory.createLoweredBevelBorder());
|
||||||
|
toolbar.addSeparator();
|
||||||
|
toolbar.add(clearLinesJButton);
|
||||||
|
this.add(toolbar,BorderLayout.EAST);
|
||||||
|
|
||||||
// РАСКОММЕНТИТЬ ЕСЛИ НУЖНО ВЫВОДИТЬ ПОДРОБНЫЕ ЛОГИ
|
// РАСКОММЕНТИТЬ ЕСЛИ НУЖНО ВЫВОДИТЬ ПОДРОБНЫЕ ЛОГИ
|
||||||
logger.setLevel(Level.ALL);
|
logger.setLevel(Level.ALL);
|
||||||
@ -90,11 +98,13 @@ public abstract class Editable extends JPanel implements MouseListener, MouseMot
|
|||||||
}
|
}
|
||||||
image = Project.getInstance().loadImageByName(selectedEntityName);
|
image = Project.getInstance().loadImageByName(selectedEntityName);
|
||||||
//TODO: if(image == null) вызов FileChooser'a и выбор изображения
|
//TODO: if(image == null) вызов FileChooser'a и выбор изображения
|
||||||
this.repaint();
|
canvas.setEntity(entity);
|
||||||
//canvas.repaint();
|
canvas.setImage(image);
|
||||||
System.out.println(" Edit image = " + image);
|
canvas.repaint();
|
||||||
System.out.println("---");
|
// System.out.println(" Canvas image = " + canvas.image);
|
||||||
System.out.println(" Canvas image = " + 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.addActionListener(listener);
|
||||||
button.setContentAreaFilled(false);
|
button.setContentAreaFilled(false);
|
||||||
button.setFocusPainted(false);
|
button.setFocusPainted(false);
|
||||||
button.setPreferredSize(new Dimension(72, 38));
|
button.setPreferredSize(new Dimension(38, 38));
|
||||||
return button;
|
return button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -8,34 +8,38 @@ import java.awt.event.MouseMotionListener;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.event.ListSelectionEvent;
|
|
||||||
import javax.swing.event.ListSelectionListener;
|
|
||||||
|
|
||||||
import gui.render.DrawboxRectengleRenderingFunction;
|
import gui.render.DrawboxRectengleRenderingFunction;
|
||||||
|
import gui.render.HitboxCircleRenderingFunction;
|
||||||
|
import gui.render.HitboxRectengleRenderingFunction;
|
||||||
import gui.render.ShapeRenderingFunction;
|
import gui.render.ShapeRenderingFunction;
|
||||||
import model.Entity;
|
import model.Entity;
|
||||||
import repository.Project;
|
import repository.Project;
|
||||||
|
|
||||||
public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener, ListSelectionListener {
|
public class EditableCanvas extends JPanel implements MouseListener, MouseMotionListener {
|
||||||
|
|
||||||
DrawboxRectengleRenderingFunction drawboxRectengleRenderFunct;
|
DrawboxRectengleRenderingFunction drawboxRectengleRenderFunct;
|
||||||
|
HitboxRectengleRenderingFunction hitboxRectengleRenderFunct;
|
||||||
|
HitboxCircleRenderingFunction hitboxCircleRenderFunct;
|
||||||
ShapeRenderingFunction renderingFunction;
|
ShapeRenderingFunction renderingFunction;
|
||||||
Entity entity;
|
Entity entity;
|
||||||
BufferedImage image;
|
BufferedImage image;
|
||||||
|
|
||||||
|
|
||||||
public EditableCanvas(Entity entity, BufferedImage image) {
|
public EditableCanvas() {
|
||||||
this.entity = entity;
|
drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction();
|
||||||
this.image = image;
|
hitboxRectengleRenderFunct = new HitboxRectengleRenderingFunction();
|
||||||
drawboxRectengleRenderFunct = new DrawboxRectengleRenderingFunction(entity);
|
hitboxCircleRenderFunct = new HitboxCircleRenderingFunction();
|
||||||
drawboxRectengleRenderFunct.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий данные drawbox при отрисовке последней точки из 4-х.
|
drawboxRectengleRenderFunct.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий данные drawbox при отрисовке последней точки из 4-х.
|
||||||
//hitboxPanel.subscribe(Project.getInstance());
|
//hitboxPanel.subscribe(Project.getInstance());
|
||||||
|
addMouseListener(this);
|
||||||
|
addMouseMotionListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void drawing(Graphics2D g) {
|
public void drawing(Graphics2D g) {
|
||||||
if(renderingFunction!=null) {
|
if(renderingFunction!=null&&entity!=null) {
|
||||||
renderingFunction.drawing(g);
|
renderingFunction.drawing(g);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,38 +47,59 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion
|
|||||||
public void setDrawboxRectengleRenderingFunction() {
|
public void setDrawboxRectengleRenderingFunction() {
|
||||||
renderingFunction = drawboxRectengleRenderFunct;
|
renderingFunction = drawboxRectengleRenderFunct;
|
||||||
}
|
}
|
||||||
|
public void setHitboxRectengleRenderingFunction() {
|
||||||
|
renderingFunction = hitboxRectengleRenderFunct;
|
||||||
|
}
|
||||||
|
public void setHitboxCircleRenderingFunction() {
|
||||||
|
renderingFunction = hitboxCircleRenderFunct;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseMoved(MouseEvent e) {
|
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);
|
renderingFunction.mouseMoved(e);
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
if(renderingFunction!=null) {
|
//System.out.println("Clicked");
|
||||||
|
if(renderingFunction!=null&&entity!=null) {
|
||||||
renderingFunction.mouseClicked(e);
|
renderingFunction.mouseClicked(e);
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mousePressed(MouseEvent e) {
|
public void mousePressed(MouseEvent e) {
|
||||||
if(renderingFunction!=null) {
|
//System.out.println("mousePressed");
|
||||||
|
if(renderingFunction!=null&&entity!=null) {
|
||||||
renderingFunction.mousePressed(e);
|
renderingFunction.mousePressed(e);
|
||||||
|
repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintComponent(Graphics g) {
|
protected void paintComponent(Graphics g) {
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
g.drawImage(image, 0, 0, this);
|
g.drawImage(image, 0, 0, this);
|
||||||
if(entity != null) {
|
if(entity != null) {
|
||||||
drawing((Graphics2D)g);
|
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) {}
|
public void mouseEntered(MouseEvent e) {}
|
||||||
@Override
|
@Override
|
||||||
public void mouseExited(MouseEvent e) {}
|
public void mouseExited(MouseEvent e) {}
|
||||||
@Override
|
|
||||||
public void valueChanged(ListSelectionEvent e) {
|
|
||||||
//this.repaint();
|
|
||||||
//System.out.println(" Canvas image = " + image);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.JTabbedPane;
|
import javax.swing.JTabbedPane;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
|
||||||
import events.EntityDrawboxChangedEvent;
|
import events.EntityDrawboxChangedEvent;
|
||||||
import events.EntityDrawboxChangedListener;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -24,7 +24,7 @@ public class MainGUI extends JFrame{
|
|||||||
ActionListener OpenXMLFileButtonListener;
|
ActionListener OpenXMLFileButtonListener;
|
||||||
JButton openXMLJButton;
|
JButton openXMLJButton;
|
||||||
JButton saveXMLJButton;
|
JButton saveXMLJButton;
|
||||||
JButton clearLinesJButton;
|
|
||||||
public static JTabbedPane editorPane;
|
public static JTabbedPane editorPane;
|
||||||
DrawboxEditor drawBoxPanel;
|
DrawboxEditor drawBoxPanel;
|
||||||
HitboxEditor hitboxPanel;
|
HitboxEditor hitboxPanel;
|
||||||
@ -50,7 +50,6 @@ public class MainGUI extends JFrame{
|
|||||||
|
|
||||||
openXMLJButton = createButton("XML", OpenXMLFileButtonListener,"res/xml.png");
|
openXMLJButton = createButton("XML", OpenXMLFileButtonListener,"res/xml.png");
|
||||||
saveXMLJButton = createButton("Save",(e)-> Project.getInstance().writeXML(),"res/download.png");
|
saveXMLJButton = createButton("Save",(e)-> Project.getInstance().writeXML(),"res/download.png");
|
||||||
clearLinesJButton = createButton("Clear lines",null,"res/destroy.png");
|
|
||||||
|
|
||||||
gridButtonBar.add(openXMLJButton);
|
gridButtonBar.add(openXMLJButton);
|
||||||
gridButtonBar.add(saveXMLJButton);
|
gridButtonBar.add(saveXMLJButton);
|
||||||
@ -67,8 +66,8 @@ public class MainGUI extends JFrame{
|
|||||||
editorPane.setVisible(true);
|
editorPane.setVisible(true);
|
||||||
add(editorPane,BorderLayout.CENTER);
|
add(editorPane,BorderLayout.CENTER);
|
||||||
|
|
||||||
editorPane.addTab("Hitbox", hitboxPanel);
|
|
||||||
editorPane.addTab("Drawbox", drawBoxPanel);
|
editorPane.addTab("Drawbox", drawBoxPanel);
|
||||||
|
editorPane.addTab("Hitbox", hitboxPanel);
|
||||||
repaint();
|
repaint();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,8 +21,8 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction
|
|||||||
private List<EntityDrawboxChangedListener> listeners = new ArrayList<>();
|
private List<EntityDrawboxChangedListener> listeners = new ArrayList<>();
|
||||||
Entity entity;
|
Entity entity;
|
||||||
Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor");
|
Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor");
|
||||||
public DrawboxRectengleRenderingFunction(Entity entity) {
|
public DrawboxRectengleRenderingFunction() {
|
||||||
this.entity = entity;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -147,4 +147,8 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction
|
|||||||
entity.setDrawbox(new Drawbox(drawboxPoints));
|
entity.setDrawbox(new Drawbox(drawboxPoints));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setEntity(Entity e) {
|
||||||
|
entity = e;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user