Project get event modification drawbox.Preparation for new drawing for drawbox

This commit is contained in:
2024-09-12 05:43:17 +03:00
parent 2fab9b13d9
commit 7f7937c652
6 changed files with 80 additions and 7 deletions

View File

@ -1,5 +1,11 @@
package events; package events;
public class EntityDrawboxChangedEvent { import model.Drawbox;
public class EntityDrawboxChangedEvent {
Drawbox drawbox;
public EntityDrawboxChangedEvent(Drawbox drawbox) {
// TODO Auto-generated constructor stub
this.drawbox = drawbox;
}
} }

View File

@ -1,5 +1,7 @@
package events; package events;
public interface EntityDrawboxChangedListener { public interface EntityDrawboxChangedListener {
void getEvent(EntityDrawboxChangedEvent event);
} }

View File

@ -4,27 +4,33 @@ import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.concurrent.Flow.Subscriber;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import events.EntityDrawboxChangedEvent;
import events.EntityDrawboxChangedListener;
import model.Drawbox; import model.Drawbox;
import model.Point; import model.Point;
import repository.Project;
public class DrawboxEditor extends Editable { public class DrawboxEditor extends Editable {
private List<Point> drawboxPoints; private List<Point> drawboxPoints;
private List<Point> basePoints; private List<Point> basePoints;
Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor"); Logger logger = Logger.getLogger("gui.DrawboxRectangleEditor");
Point currentPoint = new Point(0, 0); Point currentPoint = new Point(0, 0);
private List<EntityDrawboxChangedListener> listeners = new ArrayList<>();
DrawboxEditor(ListGUI listGUI) { DrawboxEditor(ListGUI listGUI) {
super(listGUI); super(listGUI);
logger.setLevel(Level.CONFIG); logger.setLevel(Level.CONFIG);
} }
@ -95,17 +101,56 @@ public class DrawboxEditor extends Editable {
basePoints.add(baseEnd); basePoints.add(baseEnd);
saveDataInEntity(); saveDataInEntity();
//при выборе 4-й точки и формировании данных drawbox, уведомляем всех подписчит
if(listeners!=null) {
notifySubscribers();
}
} }
} }
} }
/*Точки должны идти в определенном порядке:
* левая верхняя точка, правая верхняя, нижняя правая, нижняя левая;
* Обе нижние точки, т.е. 3 и 4 являются основанием - хардкод.
* P.s. возможно это не критично, и в сторе предусмотрено, что бы они сортировались,
* но на данном этапе на всякий случай стоит так поступить*/
private void sortingDrawboxPoints() {
//окей, это написано плохо, но... Похуй, пляшем)
for(int i = 0; i<3; i++) {
Point leftTopPoint = drawboxPoints.get(i);
for(int j = i+1; j<4; j++) {
if((leftTopPoint.x>drawboxPoints.get(j).x)&&(leftTopPoint.y>drawboxPoints.get(j).y)) {
Collections.swap(drawboxPoints, 0, j);
}
}
}
}
@Override @Override
public void mouseMoved(MouseEvent e) { public void mouseMoved(MouseEvent e) {
currentPoint.x = e.getX(); currentPoint.x = e.getX();
currentPoint.y = e.getY(); currentPoint.y = e.getY();
repaint(); repaint();
} }
public void subscribe(EntityDrawboxChangedListener listener) {
listeners.add(listener);
}
public void unsubscribe(EntityDrawboxChangedListener listener) {
listeners.remove(listener);
}
private void notifySubscribers() {
for (EntityDrawboxChangedListener listener : listeners) {
listener.getEvent(new EntityDrawboxChangedEvent(entity.getDrawbox()));
}
}
// эта штука очищает точки при нажатии универскальной кнопки очистки в Main GUI. Это следует рефакторнуть и вместо передачи события сюда, // эта штука очищает точки при нажатии универскальной кнопки очистки в Main GUI. Это следует рефакторнуть и вместо передачи события сюда,
// обрабатывать его прямо в Main GUI(лямбдой) вызывая отсюда только метод в духе clearPoints() // обрабатывать его прямо в Main GUI(лямбдой) вызывая отсюда только метод в духе clearPoints()

View File

@ -87,6 +87,9 @@ public class MainGUI extends JFrame{
hitdrawPane.addTab(null, new ImageIcon("res/formless.png"),hitboxPoligonPanel, null); hitdrawPane.addTab(null, new ImageIcon("res/formless.png"),hitboxPoligonPanel, null);
hitdrawPane.setTabPlacement(JTabbedPane.LEFT); hitdrawPane.setTabPlacement(JTabbedPane.LEFT);
//Оформление подписок к издателям.
drawBoxPanel.subscribe(Project.getInstance()); // подписка: Project получит данные ввиде обьекта Event, содержащий аднные drawbox при отрисовке последней точки из 4-х.
} }
@Override @Override
public void paint(Graphics g){ public void paint(Graphics g){

View File

@ -44,6 +44,15 @@ public class Drawbox {
} }
} }
} }
//Возвращает все точки дравбокса через пробел.
@Override
public String toString() {
String stringDrawbox="";
for (Point point : drawboxlistPoints) {
stringDrawbox+=point.x+" "+point.y+" ";
}
return stringDrawbox;
}
public List<Point> getDrawboxlistPoints() { public List<Point> getDrawboxlistPoints() {
return drawboxlistPoints; return drawboxlistPoints;

View File

@ -28,6 +28,8 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import events.EntityDrawboxChangedEvent;
import events.EntityDrawboxChangedListener;
import exception.DuplicateEntryException; import exception.DuplicateEntryException;
import launch.Launcher; import launch.Launcher;
import model.Entity; import model.Entity;
@ -37,7 +39,7 @@ import model.Entity;
* Класс данных, который оперирует их сохранением, загрузкой, и хранением в памяти. * Класс данных, который оперирует их сохранением, загрузкой, и хранением в памяти.
* ВАЖНО: данный класс хранит так же актуальную копию XML-представления файла * ВАЖНО: данный класс хранит так же актуальную копию XML-представления файла
* */ * */
public class Project implements Iterable<Entity> { public class Project implements Iterable<Entity>, EntityDrawboxChangedListener {
/** /**
* Путь к XML по-умолчанию. * Путь к XML по-умолчанию.
@ -331,6 +333,12 @@ public class Project implements Iterable<Entity> {
public List<Entity> getListEntity() { public List<Entity> getListEntity() {
return listEntity; return listEntity;
} }
@Override
public void getEvent(EntityDrawboxChangedEvent event) {
// TODO Auto-generated method stub
}
} }
//в момент окончания рисования, в зависимости в какой мы рисуем вкладке хитбокса, //в момент окончания рисования, в зависимости в какой мы рисуем вкладке хитбокса,
//в зависимости от того в какой панельке(jpanel)и подклассе интерфейса Editable //в зависимости от того в какой панельке(jpanel)и подклассе интерфейса Editable