Source code: com/arranger/jarl/ui/RenderButtonListener.java
1 package com.arranger.jarl.ui;
2
3 import com.arranger.jarl.Jarl;
4 import com.arranger.jarl.base.IContext;
5 import com.arranger.jarl.util.XMLUtil;
6
7 import javax.swing.*;
8 import java.awt.event.ActionListener;
9 import java.awt.event.ActionEvent;
10 import java.awt.*;
11 import java.io.File;
12 import java.util.Stack;
13
14 /**
15 * RenderButtonListener created on Apr 15, 2003
16 */
17 class RenderButtonListener implements ActionListener {
18
19 protected String m_lastRawXmlText = null;
20 protected Jarl m_jarl;
21 private MainPanel m_mainPanel;
22
23 public RenderButtonListener(MainPanel mainPanel) {
24 m_mainPanel = mainPanel;
25 }
26
27 public void actionPerformed(ActionEvent e) {
28 new Thread() {
29 public void run() {
30 Cursor oldCursor = m_mainPanel.getCursor();
31 m_mainPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
32 try {
33 String rawXmlText = XMLUtil.preprocesXML(new File(m_mainPanel.m_compConfigFile.getText()), new Stack());
34 if (m_lastRawXmlText != null && rawXmlText.equals(m_lastRawXmlText)) {
35 //skip creating a new jarl
36 } else {
37 //reset status
38 m_mainPanel.m_compStatus.setRows(100);
39 m_mainPanel.m_compDescription.setRows(100);
40 m_mainPanel.m_compStatus.setText("");
41
42 m_jarl = new Jarl();
43 m_jarl.getContext().addStatusListener(m_mainPanel.m_statusListener);
44 m_jarl.init(m_mainPanel.m_compConfigFile.getText());
45 m_lastRawXmlText = rawXmlText;
46
47 m_mainPanel.m_compDescription.setText(m_jarl.getDescription());
48
49 //update properties
50 m_mainPanel.m_preferences.setProperty("configFile", m_mainPanel.m_compConfigFile.getText());
51 m_mainPanel.m_prefManager.storePreferences(m_mainPanel.m_preferences);
52 }
53
54 IContext context = m_jarl.getContext();
55 m_mainPanel.m_imageWidth = context.getWidth();
56 m_mainPanel.m_imageHeight = context.getHeight();
57
58 int max = m_jarl.getEndTime().getFrame();
59 m_mainPanel.m_compFPSSlider.setMaximum(max);
60 m_mainPanel.m_compFPSSlider.setPaintTrack(false);
61 m_mainPanel.m_compFPSSlider.setMajorTickSpacing(max / 4);
62 m_mainPanel.m_renderedImage = m_jarl.getRenderManager().renderOneFrame(context, m_mainPanel.m_frameToRender);
63 m_mainPanel.refresh();
64 } catch (Throwable exc) {
65 m_mainPanel.m_statusListener.onError(exc);
66 String message = exc.getMessage();
67 if (message == null) {
68 message = "null";
69 }
70 JOptionPane.showMessageDialog(m_mainPanel, message);
71 } finally {
72 m_mainPanel.setCursor(oldCursor);
73 }
74 }
75 }.start();
76 }
77 }