Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/arranger/jarl/shell/views/mainShellPanes/MSPRenderStatusPane.java


1   package com.arranger.jarl.shell.views.mainShellPanes;
2   
3   import com.arranger.jarl.Jarl;
4   import com.arranger.jarl.widget.container.EchoCollection;
5   import com.arranger.jarl.base.*;
6   import com.arranger.jarl.filter.IFilter;
7   import com.arranger.jarl.shell.models.BaseModel;
8   import com.arranger.jarl.shell.models.JarlContextModel;
9   import com.arranger.jarl.util.Debug;
10  import com.arranger.jarl.util.JarlInfoUtil;
11  
12  import javax.swing.*;
13  import java.awt.*;
14  import java.util.Collection;
15  import java.util.Iterator;
16  
17  /**
18   * MSPRenderStatusPane created on Apr 21, 2003
19   */
20  public class MSPRenderStatusPane extends BaseMSP implements IStatusListener, IRenderListener {
21      protected static final int PREP_RANGE = 30;
22      protected static final int RENDER_RANGE = 70;
23  
24      protected JTextField m_textField;
25      protected JProgressBar m_progressBar;
26      protected double m_increment = 10;
27      protected int m_incrementCount = 0;
28  
29      /**
30       * Create a component
31       * @return
32       */
33      public Component createComponent() {
34          JPanel renderStatusPanel = new JPanel(new GridLayout(2, 1));
35  
36          //status field
37          m_textField = new JTextField("<status>");
38          m_textField.setEditable(false);
39          renderStatusPanel.add(m_textField);
40  
41          //progress bar
42          m_progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
43          m_progressBar.setMinimum(0);
44          m_progressBar.setMaximum(100);
45          renderStatusPanel.add(m_progressBar);
46  
47          //title
48          renderStatusPanel.setBorder(BorderFactory.createTitledBorder("Render Status"));
49          return renderStatusPanel;
50      }
51  
52      /**
53       * Events have been fired
54       * @param baseModel
55       * @param propertyName
56       */
57      public void onChange(BaseModel baseModel, String propertyName) {
58          if (!(baseModel instanceof JarlContextModel)) {
59              return;
60          }
61  
62          JarlContextModel jarlContextModel = (JarlContextModel) baseModel;
63          if (JarlContextModel.RENDER_PREPARING.equals(propertyName)) {
64              m_textField.setText("Preparing...");
65              m_progressBar.setValue(0);
66              m_increment = 10;
67              m_incrementCount = 0;
68          } else if (JarlContextModel.RENDER_PROCESSING_CONFIG.equals(propertyName)) {  //this is matched with initialized
69              m_textField.setText("Started...");
70              Jarl jarl = jarlContextModel.getJarl();
71              jarl.getContext().addStatusListener(this);
72              jarl.getRenderManager().addRenderListener(this);
73              increment();
74              m_progressBar.setIndeterminate(true);
75          } else if (JarlContextModel.INITIALIZED.equals(propertyName)) {
76              m_textField.setText("Jarl Project Initialized...");
77  
78              m_progressBar.setIndeterminate(false);
79          } else if (JarlContextModel.RENDER_STARTING.equals(propertyName)) {
80  
81              //determine what the increment will be
82              double totalSize = calculateNumOfRenderingWidgets(jarlContextModel);
83              //totalSize += 3; // i think there are 3 extra calls to onStatus
84              m_increment = (double) RENDER_RANGE / totalSize;
85  
86          } else if (JarlContextModel.RENDER_COMPLETED.equals(propertyName)) {
87              m_progressBar.setIndeterminate(false);  //just in case
88              m_progressBar.setValue(100);
89              m_textField.setText("Completed.");
90          } else if (JarlContextModel.ERROR.equals(propertyName)) {
91              m_progressBar.setIndeterminate(false);  //just in case
92          }
93      }
94  
95      /**
96       * This is to determine how many widgets will be rendered
97       * @param jarlContextModel
98       */
99      private double calculateNumOfRenderingWidgets(JarlContextModel jarlContextModel) {
100         IRenderManager renderManager = jarlContextModel.getJarl().getRenderManager();
101         Collection widgets = renderManager.getRegisteredWidgets();
102         Collection filters = renderManager.getRegisteredFilters();
103         double totalSize = filters.size() * 3; //triple weight filters
104         totalSize += widgets.size();
105         totalSize += countCollection(widgets);
106         return totalSize;
107     }
108 
109     /**
110      * Recurse through collections
111      * @param widgets
112      */
113     private double countCollection(Collection widgets) {
114         double totalSize = 0;
115         for (Iterator it = widgets.iterator(); it.hasNext();) {
116             Object obj = it.next();
117             if (obj instanceof IJarlObjectCollection) {
118                 IJarlObjectCollection col = (IJarlObjectCollection) obj;
119                 double childrenCount = col.getChildren().size();
120                 childrenCount += countCollection(col.getChildren());
121                 totalSize += childrenCount;
122 
123                 if (col instanceof EchoCollection) {
124                     EchoCollection echoCollection = (EchoCollection)col;
125                     totalSize += (echoCollection.getNumEchos().getFrame() * childrenCount);
126                 }
127             }
128         }
129         return totalSize;
130     }
131 
132     protected void increment() {
133         m_incrementCount++;
134         m_progressBar.setValue(PREP_RANGE + (int) (m_increment * m_incrementCount));
135     }
136 
137     /**
138      * A simple message
139      * @param message
140      */
141     public void onStatus(String message) {
142         m_textField.setText(message);
143         //increment();
144     }
145 
146     /**
147      * An error occurred
148      * @param throwable
149      */
150     public void onError(Throwable throwable) {
151         m_progressBar.setIndeterminate(false);  //just in case
152         m_textField.setText("Error Occurred...");
153         String title = throwable.getMessage();
154         if (title == null) {
155             title = "Null Pointer Exception";
156         }
157         JOptionPane.showMessageDialog(null, Debug.getStackTrace(throwable), title, JOptionPane.ERROR_MESSAGE);
158     }
159 
160     /**
161      * Rendering the jarl object at this context
162      * @param jarlObject
163      * @param context
164      */
165     public void onRender(IJarlObject jarlObject, IContext context) {
166         onStatus("Rendering: " + JarlInfoUtil.getName(jarlObject));
167         increment();
168         if (jarlObject instanceof IFilter) {
169             increment();
170             increment(); //times 3 total
171         }
172     }
173 
174     public void onRenderFrameStart(IContext context) {
175         onStatus("Starting Frame Rendering.");
176     }
177 
178     public void onRenderFrameStop(IContext context, Image image) {
179         onStatus("Finished Frame Rendering.");
180     }
181 }