Route change events through OpenRocketDocument so Photo Studio can
receive notifications of changes to the rocket. Dispose PhotoStudio windows on close, and add a close event to remove event handlers, to avoid leaking resources.
This commit is contained in:
parent
dcc3c43bc3
commit
51c1c78988
@ -594,6 +594,7 @@ public class OpenRocketDocument implements ComponentChangeListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fireUndoRedoChangeEvent();
|
fireUndoRedoChangeEvent();
|
||||||
|
fireDocumentChangeEvent(new DocumentChangeEvent(e.getSource()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -9,6 +9,8 @@ import java.awt.datatransfer.UnsupportedFlavorException;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -72,6 +74,17 @@ public class PhotoFrame extends JFrame {
|
|||||||
setJMenuBar(getMenu(app));
|
setJMenuBar(getMenu(app));
|
||||||
setContentPane(photoPanel);
|
setContentPane(photoPanel);
|
||||||
|
|
||||||
|
if (!app)
|
||||||
|
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||||
|
|
||||||
|
addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
closeAction();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
GUIUtil.rememberWindowSize(this);
|
GUIUtil.rememberWindowSize(this);
|
||||||
this.setLocationByPlatform(true);
|
this.setLocationByPlatform(true);
|
||||||
GUIUtil.rememberWindowPosition(this);
|
GUIUtil.rememberWindowPosition(this);
|
||||||
@ -305,6 +318,11 @@ public class PhotoFrame extends JFrame {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean closeAction() {
|
||||||
|
photoPanel.clearDoc();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String args[]) throws Exception {
|
public static void main(String args[]) throws Exception {
|
||||||
|
|
||||||
LoggingSystemSetup.setupLoggingAppender();
|
LoggingSystemSetup.setupLoggingAppender();
|
||||||
|
@ -75,6 +75,11 @@ public class PhotoPanel extends JPanel implements GLEventListener {
|
|||||||
|
|
||||||
private List<ImageCallback> imageCallbacks = new java.util.Vector<PhotoPanel.ImageCallback>();
|
private List<ImageCallback> imageCallbacks = new java.util.Vector<PhotoPanel.ImageCallback>();
|
||||||
|
|
||||||
|
private RocketRenderer rr;
|
||||||
|
private PhotoSettings p;
|
||||||
|
private OpenRocketDocument document;
|
||||||
|
private DocumentChangeListener changeListener;
|
||||||
|
|
||||||
interface ImageCallback {
|
interface ImageCallback {
|
||||||
public void performAction(BufferedImage i);
|
public void performAction(BufferedImage i);
|
||||||
}
|
}
|
||||||
@ -84,32 +89,38 @@ public class PhotoPanel extends JPanel implements GLEventListener {
|
|||||||
repaint();
|
repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
private RocketRenderer rr;
|
|
||||||
private PhotoSettings p;
|
|
||||||
|
|
||||||
void setDoc(final OpenRocketDocument doc) {
|
void setDoc(final OpenRocketDocument doc) {
|
||||||
|
document = doc;
|
||||||
|
cachedBounds = null;
|
||||||
|
this.configuration = doc.getSelectedConfiguration();
|
||||||
|
|
||||||
|
changeListener = new DocumentChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void documentChanged(DocumentChangeEvent event) {
|
||||||
|
log.debug("Repainting on document change");
|
||||||
|
needUpdate = true;
|
||||||
|
PhotoPanel.this.repaint();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.addDocumentChangeListener(changeListener);
|
||||||
|
|
||||||
((GLAutoDrawable) canvas).invoke(false, new GLRunnable() {
|
((GLAutoDrawable) canvas).invoke(false, new GLRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final GLAutoDrawable drawable) {
|
public boolean run(final GLAutoDrawable drawable) {
|
||||||
PhotoPanel.this.configuration = doc.getSelectedConfiguration();
|
|
||||||
cachedBounds = null;
|
|
||||||
rr = new RealisticRenderer(doc);
|
rr = new RealisticRenderer(doc);
|
||||||
rr.init(drawable);
|
rr.init(drawable);
|
||||||
|
|
||||||
doc.addDocumentChangeListener(new DocumentChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void documentChanged(DocumentChangeEvent event) {
|
|
||||||
log.debug("Repainting on document change");
|
|
||||||
needUpdate = true;
|
|
||||||
PhotoPanel.this.repaint();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearDoc() {
|
||||||
|
document.removeDocumentChangeListener(changeListener);
|
||||||
|
changeListener = null;
|
||||||
|
document = null;
|
||||||
|
}
|
||||||
|
|
||||||
PhotoSettings getSettings() {
|
PhotoSettings getSettings() {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user