001: /*
002: Copyright (C) 2004 David Bucciarelli (davibu@interfree.it)
003:
004: This program is free software; you can redistribute it and/or
005: modify it under the terms of the GNU General Public License
006: as published by the Free Software Foundation; either version 2
007: of the License, or (at your option) any later version.
008:
009: This program is distributed in the hope that it will be useful,
010: but WITHOUT ANY WARRANTY; without even the implied warranty of
011: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: GNU General Public License for more details.
013:
014: You should have received a copy of the GNU General Public License
015: along with this program; if not, write to the Free Software
016: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: */
018:
019: package org.homedns.dade.jcgrid.cmd.povray;
020:
021: import java.io.*;
022: import java.text.*;
023: import java.util.*;
024: import java.awt.*;
025: import javax.swing.*;
026: import javax.swing.text.*;
027:
028: import org.apache.log4j.*;
029:
030: import org.homedns.dade.jcgrid.*;
031: import org.homedns.dade.jcgrid.client.*;
032: import org.homedns.dade.jcgrid.message.*;
033: import org.homedns.dade.jcgrid.worker.impl.povray.*;
034: import org.homedns.dade.jcgrid.server.*;
035:
036: public class guiRenderingSetting extends javax.swing.JDialog {
037: private final static String className = guiRenderingSetting.class
038: .getName();
039: private static Logger log = Logger.getLogger(className);
040: private static Logger logDetail = Logger.getLogger("DETAIL."
041: + className);
042:
043: //--------------------------------------------------------------------------
044:
045: private class RenderingThreadFeedback implements
046: POVRenderingClientFeedback {
047: public RenderingThreadFeedback() {
048: }
049:
050: public void error(String msg, Exception ex) {
051: log.warn(msg, ex);
052:
053: JOptionPane.showMessageDialog(guiRenderingSetting.this ,
054: msg, "Rendering error", JOptionPane.ERROR_MESSAGE);
055: }
056:
057: public void receivedFragmentResult(POVWorkRequest req,
058: POVWorkResult res, int idx, POVRenderingFrame frame) {
059: pPic.updateImage(frame);
060: }
061:
062: public void renderingBegin() {
063: pbStatus.setValue(pbStatus.getMinimum());
064: }
065:
066: public void renderingEnd() {
067: rendThread = null;
068: bStartStop.setText("Start rendering");
069: }
070:
071: public void sendingFrgamentRequest(POVWorkRequest req) {
072: }
073:
074: public void setProgressMaximum(int max) {
075: pbStatus.setMaximum(max);
076: }
077:
078: public void setProgressMinimum(int min) {
079: pbStatus.setMinimum(min);
080: }
081:
082: public void setProgressValue(int val) {
083: pbStatus.setValue(val);
084: }
085:
086: public void setRenderingTime(POVWorkRequest req, long msdt) {
087: double dt = msdt / 1000.0;
088: double pixsec = req.getWidth() * req.getHeight() / dt;
089:
090: DecimalFormat df = new DecimalFormat("0.00");
091:
092: if (dt > 0)
093: lRenderTime.setText(df.format(dt / 60.0) + " min ("
094: + df.format(pixsec) + "pixel/sec)");
095: else
096: lRenderTime.setText("N/A");
097: }
098:
099: public void completeFrame(int idx, POVRenderingFrame frame) {
100: pPic.updateImage(frame);
101: }
102: }
103:
104: //--------------------------------------------------------------------------
105:
106: private static final long serialVersionUID = 1L;
107:
108: private GridNodeClientConfig clientConfig;
109:
110: private guiPOVRenderingPannel pPic;
111: private POVRenderingClient rendThread;
112:
113: /** Creates new form guiRenderingSetting */
114: public guiRenderingSetting(GridNodeClientConfig cfg,
115: java.awt.Frame parent, boolean modal,
116: guiPOVRenderingPannel rendPannel) {
117: super (parent, modal);
118:
119: clientConfig = cfg;
120: pPic = rendPannel;
121: rendThread = null;
122:
123: initComponents();
124: }
125:
126: public void saveSettings(String fileName) {
127: try {
128: Properties prop = clientConfig.toProperties();
129:
130: prop.put("povray.scene.sessionname", tSessionName.getText()
131: .trim());
132: prop.put("povray.scene.workingdirectory", tWorkDir
133: .getText().trim());
134: prop.put("povray.scene.inifile", tINIFile.getText().trim());
135:
136: prop.put("povray.image.width", tWidth.getText().trim());
137: prop.put("povray.image.height", tHeight.getText().trim());
138: prop.put("povray.image.fragment", tFragmentSize.getText()
139: .trim());
140: prop.put("povray.image.startcolumn", tStartX.getText()
141: .trim());
142: prop.put("povray.image.endcolumn", tEndX.getText().trim());
143: prop.put("povray.image.startrow", tStartY.getText().trim());
144: prop.put("povray.image.endrow", tEndY.getText().trim());
145:
146: prop.store(new FileOutputStream(new File(fileName)),
147: "JCGrid GUI Client Settings");
148: } catch (Exception ex) {
149: log.warn("Error while saving settings.", ex);
150:
151: JOptionPane.showMessageDialog(this ,
152: "Error while saving settings.", "IO error",
153: JOptionPane.ERROR_MESSAGE);
154: }
155: }
156:
157: public GridNodeClientConfig loadSettings(String fileName) {
158: try {
159: Properties prop = new Properties();
160: prop.load(new FileInputStream(new File(fileName)));
161: clientConfig = new GridNodeClientConfig(prop);
162:
163: tSessionName.setText(prop.getProperty(
164: "povray.scene.sessionname", ""));
165: tWorkDir.setText(prop.getProperty(
166: "povray.scene.workingdirectory", ""));
167: tINIFile.setText(prop.getProperty("povray.scene.inifile",
168: ""));
169:
170: tWidth.setText(prop.getProperty("povray.image.width", ""));
171: tHeight
172: .setText(prop
173: .getProperty("povray.image.height", ""));
174: tFragmentSize.setText(prop.getProperty(
175: "povray.image.fragment", ""));
176: tStartX.setText(prop.getProperty(
177: "povray.image.startcolumn", ""));
178: tEndX.setText(prop
179: .getProperty("povray.image.endcolumn", ""));
180: tStartY.setText(prop.getProperty("povray.image.startrow",
181: ""));
182: tEndY.setText(prop.getProperty("povray.image.endrow", ""));
183: } catch (Exception ex) {
184: log.warn("Error while loading settings.", ex);
185:
186: JOptionPane.showMessageDialog(this ,
187: "Error while loading settings.", "IO error",
188: JOptionPane.ERROR_MESSAGE);
189:
190: return null;
191: }
192:
193: return clientConfig;
194: }
195:
196: public String getSessionName() {
197: String sessionName = tSessionName.getText().trim();
198: if (!sessionName.matches("[a-zA-Z0-9_]+")) {
199: JOptionPane.showMessageDialog(this ,
200: "Syntax error in the session name.",
201: "Settings error", JOptionPane.ERROR_MESSAGE);
202: return null;
203: }
204:
205: return sessionName;
206: }
207:
208: /** This method is called from within the constructor to
209: * initialize the form.
210: * WARNING: Do NOT modify this code. The content of this method is
211: * always regenerated by the Form Editor.
212: */
213: private void initComponents() {//GEN-BEGIN:initComponents
214: java.awt.GridBagConstraints gridBagConstraints;
215:
216: pScene = new javax.swing.JPanel();
217: jLabel9 = new javax.swing.JLabel();
218: tSessionName = new javax.swing.JTextField();
219: bAutoSessionName = new javax.swing.JButton();
220: jLabel8 = new javax.swing.JLabel();
221: tWorkDir = new javax.swing.JTextField();
222: bWorkDir = new javax.swing.JButton();
223: jLabel12 = new javax.swing.JLabel();
224: tINIFile = new javax.swing.JTextField();
225: bINIFile = new javax.swing.JButton();
226: pImage = new javax.swing.JPanel();
227: jLabel1 = new javax.swing.JLabel();
228: tWidth = new javax.swing.JTextField();
229: jLabel2 = new javax.swing.JLabel();
230: tHeight = new javax.swing.JTextField();
231: bDefaultImageSize = new javax.swing.JButton();
232: jLabel3 = new javax.swing.JLabel();
233: tFragmentSize = new javax.swing.JTextField();
234: bDefaultFragSize = new javax.swing.JButton();
235: jLabel4 = new javax.swing.JLabel();
236: tStartX = new javax.swing.JTextField();
237: jLabel5 = new javax.swing.JLabel();
238: tEndX = new javax.swing.JTextField();
239: jLabel6 = new javax.swing.JLabel();
240: tStartY = new javax.swing.JTextField();
241: jLabel7 = new javax.swing.JLabel();
242: tEndY = new javax.swing.JTextField();
243: bDefaultStartEnd = new javax.swing.JButton();
244: bClearImage = new javax.swing.JButton();
245: pRendering = new javax.swing.JPanel();
246: bStartStop = new javax.swing.JButton();
247: pbStatus = new javax.swing.JProgressBar();
248: jLabel13 = new javax.swing.JLabel();
249: lRenderTime = new javax.swing.JLabel();
250:
251: getContentPane().setLayout(new java.awt.GridBagLayout());
252:
253: setTitle("Rendering settings");
254: setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
255: setName("dSetting");
256: pScene.setLayout(new java.awt.GridBagLayout());
257:
258: pScene.setBorder(new javax.swing.border.TitledBorder("Scene"));
259: jLabel9
260: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
261: jLabel9.setText("Session name:");
262: gridBagConstraints = new java.awt.GridBagConstraints();
263: gridBagConstraints.gridx = 0;
264: gridBagConstraints.gridy = 0;
265: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
266: gridBagConstraints.weighty = 1.0;
267: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
268: pScene.add(jLabel9, gridBagConstraints);
269:
270: gridBagConstraints = new java.awt.GridBagConstraints();
271: gridBagConstraints.gridx = 1;
272: gridBagConstraints.gridy = 0;
273: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
274: gridBagConstraints.weightx = 1.0;
275: gridBagConstraints.weighty = 1.0;
276: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
277: pScene.add(tSessionName, gridBagConstraints);
278:
279: bAutoSessionName.setText("Auto");
280: bAutoSessionName
281: .addActionListener(new java.awt.event.ActionListener() {
282: public void actionPerformed(
283: java.awt.event.ActionEvent evt) {
284: bAutoSessionNameActionPerformed(evt);
285: }
286: });
287:
288: gridBagConstraints = new java.awt.GridBagConstraints();
289: gridBagConstraints.gridx = 2;
290: gridBagConstraints.gridy = 0;
291: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
292: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
293: pScene.add(bAutoSessionName, gridBagConstraints);
294:
295: jLabel8
296: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
297: jLabel8.setText("Working directory:");
298: gridBagConstraints = new java.awt.GridBagConstraints();
299: gridBagConstraints.gridx = 0;
300: gridBagConstraints.gridy = 1;
301: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
302: gridBagConstraints.weighty = 1.0;
303: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
304: pScene.add(jLabel8, gridBagConstraints);
305:
306: gridBagConstraints = new java.awt.GridBagConstraints();
307: gridBagConstraints.gridx = 1;
308: gridBagConstraints.gridy = 1;
309: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
310: gridBagConstraints.weightx = 1.0;
311: gridBagConstraints.weighty = 1.0;
312: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
313: pScene.add(tWorkDir, gridBagConstraints);
314:
315: bWorkDir.setText("Select");
316: bWorkDir.addActionListener(new java.awt.event.ActionListener() {
317: public void actionPerformed(java.awt.event.ActionEvent evt) {
318: bWorkDirActionPerformed(evt);
319: }
320: });
321:
322: gridBagConstraints = new java.awt.GridBagConstraints();
323: gridBagConstraints.gridx = 2;
324: gridBagConstraints.gridy = 1;
325: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
326: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
327: pScene.add(bWorkDir, gridBagConstraints);
328:
329: jLabel12
330: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
331: jLabel12.setText("INI file:");
332: gridBagConstraints = new java.awt.GridBagConstraints();
333: gridBagConstraints.gridx = 0;
334: gridBagConstraints.gridy = 2;
335: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
336: gridBagConstraints.weighty = 1.0;
337: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
338: pScene.add(jLabel12, gridBagConstraints);
339:
340: gridBagConstraints = new java.awt.GridBagConstraints();
341: gridBagConstraints.gridx = 1;
342: gridBagConstraints.gridy = 2;
343: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
344: gridBagConstraints.weightx = 1.0;
345: gridBagConstraints.weighty = 1.0;
346: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
347: pScene.add(tINIFile, gridBagConstraints);
348:
349: bINIFile.setText("Default");
350: bINIFile.addActionListener(new java.awt.event.ActionListener() {
351: public void actionPerformed(java.awt.event.ActionEvent evt) {
352: bINIFileActionPerformed(evt);
353: }
354: });
355:
356: gridBagConstraints = new java.awt.GridBagConstraints();
357: gridBagConstraints.gridx = 2;
358: gridBagConstraints.gridy = 2;
359: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
360: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
361: pScene.add(bINIFile, gridBagConstraints);
362:
363: gridBagConstraints = new java.awt.GridBagConstraints();
364: gridBagConstraints.gridx = 0;
365: gridBagConstraints.gridy = 1;
366: gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
367: gridBagConstraints.weightx = 1.0;
368: gridBagConstraints.weighty = 1.0;
369: getContentPane().add(pScene, gridBagConstraints);
370:
371: pImage.setLayout(new java.awt.GridBagLayout());
372:
373: pImage.setBorder(new javax.swing.border.TitledBorder("Image"));
374: jLabel1
375: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
376: jLabel1.setText("Width:");
377: gridBagConstraints = new java.awt.GridBagConstraints();
378: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
379: gridBagConstraints.weightx = 0.5;
380: gridBagConstraints.weighty = 1.0;
381: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
382: pImage.add(jLabel1, gridBagConstraints);
383:
384: gridBagConstraints = new java.awt.GridBagConstraints();
385: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
386: gridBagConstraints.weightx = 1.0;
387: gridBagConstraints.weighty = 1.0;
388: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
389: pImage.add(tWidth, gridBagConstraints);
390:
391: jLabel2
392: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
393: jLabel2.setText("Height:");
394: gridBagConstraints = new java.awt.GridBagConstraints();
395: gridBagConstraints.gridy = 1;
396: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
397: gridBagConstraints.weightx = 0.5;
398: gridBagConstraints.weighty = 1.0;
399: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
400: pImage.add(jLabel2, gridBagConstraints);
401:
402: gridBagConstraints = new java.awt.GridBagConstraints();
403: gridBagConstraints.gridy = 1;
404: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
405: gridBagConstraints.weightx = 1.0;
406: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
407: pImage.add(tHeight, gridBagConstraints);
408:
409: bDefaultImageSize.setText("Default");
410: bDefaultImageSize
411: .addActionListener(new java.awt.event.ActionListener() {
412: public void actionPerformed(
413: java.awt.event.ActionEvent evt) {
414: bDefaultImageSizeActionPerformed(evt);
415: }
416: });
417:
418: gridBagConstraints = new java.awt.GridBagConstraints();
419: gridBagConstraints.gridx = 2;
420: gridBagConstraints.gridy = 0;
421: gridBagConstraints.gridheight = 2;
422: gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
423: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
424: pImage.add(bDefaultImageSize, gridBagConstraints);
425:
426: jLabel3
427: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
428: jLabel3.setText("Fragment size:");
429: gridBagConstraints = new java.awt.GridBagConstraints();
430: gridBagConstraints.gridy = 2;
431: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
432: gridBagConstraints.weightx = 0.5;
433: gridBagConstraints.weighty = 1.0;
434: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
435: pImage.add(jLabel3, gridBagConstraints);
436:
437: gridBagConstraints = new java.awt.GridBagConstraints();
438: gridBagConstraints.gridy = 2;
439: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
440: gridBagConstraints.weightx = 1.0;
441: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
442: pImage.add(tFragmentSize, gridBagConstraints);
443:
444: bDefaultFragSize.setText("Default");
445: bDefaultFragSize
446: .addActionListener(new java.awt.event.ActionListener() {
447: public void actionPerformed(
448: java.awt.event.ActionEvent evt) {
449: bDefaultFragSizeActionPerformed(evt);
450: }
451: });
452:
453: gridBagConstraints = new java.awt.GridBagConstraints();
454: gridBagConstraints.gridx = 2;
455: gridBagConstraints.gridy = 2;
456: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
457: pImage.add(bDefaultFragSize, gridBagConstraints);
458:
459: jLabel4
460: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
461: jLabel4.setText("Start column:");
462: gridBagConstraints = new java.awt.GridBagConstraints();
463: gridBagConstraints.gridy = 3;
464: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
465: gridBagConstraints.weightx = 0.5;
466: gridBagConstraints.weighty = 1.0;
467: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
468: pImage.add(jLabel4, gridBagConstraints);
469:
470: gridBagConstraints = new java.awt.GridBagConstraints();
471: gridBagConstraints.gridy = 3;
472: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
473: gridBagConstraints.weightx = 1.0;
474: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
475: pImage.add(tStartX, gridBagConstraints);
476:
477: jLabel5
478: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
479: jLabel5.setText("End column:");
480: gridBagConstraints = new java.awt.GridBagConstraints();
481: gridBagConstraints.gridy = 4;
482: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
483: gridBagConstraints.weightx = 0.5;
484: gridBagConstraints.weighty = 1.0;
485: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
486: pImage.add(jLabel5, gridBagConstraints);
487:
488: gridBagConstraints = new java.awt.GridBagConstraints();
489: gridBagConstraints.gridy = 4;
490: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
491: gridBagConstraints.weightx = 1.0;
492: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
493: pImage.add(tEndX, gridBagConstraints);
494:
495: jLabel6
496: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
497: jLabel6.setText("Start row:");
498: gridBagConstraints = new java.awt.GridBagConstraints();
499: gridBagConstraints.gridy = 5;
500: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
501: gridBagConstraints.weightx = 0.5;
502: gridBagConstraints.weighty = 1.0;
503: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
504: pImage.add(jLabel6, gridBagConstraints);
505:
506: gridBagConstraints = new java.awt.GridBagConstraints();
507: gridBagConstraints.gridy = 5;
508: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
509: gridBagConstraints.weightx = 1.0;
510: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
511: pImage.add(tStartY, gridBagConstraints);
512:
513: jLabel7
514: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
515: jLabel7.setText("End row:");
516: gridBagConstraints = new java.awt.GridBagConstraints();
517: gridBagConstraints.gridy = 6;
518: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
519: gridBagConstraints.weightx = 0.5;
520: gridBagConstraints.weighty = 1.0;
521: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
522: pImage.add(jLabel7, gridBagConstraints);
523:
524: gridBagConstraints = new java.awt.GridBagConstraints();
525: gridBagConstraints.gridy = 6;
526: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
527: gridBagConstraints.weightx = 1.0;
528: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
529: pImage.add(tEndY, gridBagConstraints);
530:
531: bDefaultStartEnd.setText("Default");
532: bDefaultStartEnd
533: .addActionListener(new java.awt.event.ActionListener() {
534: public void actionPerformed(
535: java.awt.event.ActionEvent evt) {
536: bDefaultStartEndActionPerformed(evt);
537: }
538: });
539:
540: gridBagConstraints = new java.awt.GridBagConstraints();
541: gridBagConstraints.gridx = 2;
542: gridBagConstraints.gridy = 3;
543: gridBagConstraints.gridheight = 4;
544: gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL;
545: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
546: pImage.add(bDefaultStartEnd, gridBagConstraints);
547:
548: bClearImage.setText("Clear image");
549: bClearImage
550: .addActionListener(new java.awt.event.ActionListener() {
551: public void actionPerformed(
552: java.awt.event.ActionEvent evt) {
553: bClearImageActionPerformed(evt);
554: }
555: });
556:
557: gridBagConstraints = new java.awt.GridBagConstraints();
558: gridBagConstraints.gridx = 1;
559: gridBagConstraints.gridy = 7;
560: gridBagConstraints.gridwidth = 2;
561: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
562: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
563: pImage.add(bClearImage, gridBagConstraints);
564:
565: gridBagConstraints = new java.awt.GridBagConstraints();
566: gridBagConstraints.gridx = 0;
567: gridBagConstraints.gridy = 2;
568: gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
569: gridBagConstraints.weightx = 0.1;
570: gridBagConstraints.weighty = 1.0;
571: getContentPane().add(pImage, gridBagConstraints);
572:
573: pRendering.setLayout(new java.awt.GridBagLayout());
574:
575: pRendering.setBorder(new javax.swing.border.TitledBorder(
576: "Rendering"));
577: bStartStop.setText("Start rendering");
578: bStartStop
579: .addActionListener(new java.awt.event.ActionListener() {
580: public void actionPerformed(
581: java.awt.event.ActionEvent evt) {
582: bStartStopActionPerformed(evt);
583: }
584: });
585:
586: gridBagConstraints = new java.awt.GridBagConstraints();
587: gridBagConstraints.gridx = 0;
588: gridBagConstraints.gridy = 0;
589: gridBagConstraints.gridwidth = 2;
590: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
591: pRendering.add(bStartStop, gridBagConstraints);
592:
593: pbStatus.setStringPainted(true);
594: gridBagConstraints = new java.awt.GridBagConstraints();
595: gridBagConstraints.gridx = 0;
596: gridBagConstraints.gridy = 1;
597: gridBagConstraints.gridwidth = 2;
598: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
599: gridBagConstraints.weightx = 1.0;
600: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
601: pRendering.add(pbStatus, gridBagConstraints);
602:
603: jLabel13
604: .setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
605: jLabel13.setText("Last rendering time:");
606: gridBagConstraints = new java.awt.GridBagConstraints();
607: gridBagConstraints.gridx = 0;
608: gridBagConstraints.gridy = 2;
609: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
610: gridBagConstraints.weightx = 0.5;
611: gridBagConstraints.weighty = 1.0;
612: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
613: pRendering.add(jLabel13, gridBagConstraints);
614:
615: lRenderTime
616: .setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
617: lRenderTime.setForeground(java.awt.SystemColor.activeCaption);
618: gridBagConstraints = new java.awt.GridBagConstraints();
619: gridBagConstraints.gridx = 1;
620: gridBagConstraints.gridy = 2;
621: gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
622: gridBagConstraints.weightx = 0.5;
623: gridBagConstraints.weighty = 1.0;
624: gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
625: pRendering.add(lRenderTime, gridBagConstraints);
626:
627: gridBagConstraints = new java.awt.GridBagConstraints();
628: gridBagConstraints.gridx = 0;
629: gridBagConstraints.gridy = 3;
630: gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
631: gridBagConstraints.weightx = 1.0;
632: gridBagConstraints.weighty = 1.0;
633: getContentPane().add(pRendering, gridBagConstraints);
634:
635: setBounds(50, 50, 400, 500);
636: }//GEN-END:initComponents
637:
638: private void bAutoSessionNameActionPerformed(
639: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bAutoSessionNameActionPerformed
640: clientConfig.autoSessioName();
641: tSessionName.setText(clientConfig.getSessionName());
642: }//GEN-LAST:event_bAutoSessionNameActionPerformed
643:
644: private void bDefaultFragSizeActionPerformed(
645: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDefaultFragSizeActionPerformed
646: tFragmentSize.setText("64");
647: }//GEN-LAST:event_bDefaultFragSizeActionPerformed
648:
649: private void bClearImageActionPerformed(
650: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bClearImageActionPerformed
651: pPic.clearImage();
652: }//GEN-LAST:event_bClearImageActionPerformed
653:
654: private void bDefaultImageSizeActionPerformed(
655: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDefaultImageSizeActionPerformed
656: tWidth.setText(Integer.toString(pPic.getWidth()));
657: tHeight.setText(Integer.toString(pPic.getHeight()));
658: }//GEN-LAST:event_bDefaultImageSizeActionPerformed
659:
660: private void bINIFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bINIFileActionPerformed
661: tINIFile.setText("jcgrid.ini");
662: }//GEN-LAST:event_bINIFileActionPerformed
663:
664: private void bDefaultStartEndActionPerformed(
665: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bDefaultStartEndActionPerformed
666: int width = -1;
667: try {
668: width = Integer.parseInt(tWidth.getText());
669: } catch (Exception ex) {
670: JOptionPane.showMessageDialog(this ,
671: "Syntax error in the image width.",
672: "Settings error", JOptionPane.ERROR_MESSAGE);
673: return;
674: }
675: if ((width < 16) || (width > 2048)) {
676: JOptionPane.showMessageDialog(this ,
677: "The image width must be between 16 and 2048.",
678: "Settings error", JOptionPane.ERROR_MESSAGE);
679: return;
680: }
681:
682: int height = -1;
683: try {
684: height = Integer.parseInt(tHeight.getText());
685: } catch (Exception ex) {
686: JOptionPane.showMessageDialog(this ,
687: "Syntax error in the image height.",
688: "Settings error", JOptionPane.ERROR_MESSAGE);
689: return;
690: }
691: if ((height < 16) || (height > 2048)) {
692: JOptionPane.showMessageDialog(this ,
693: "The image height must be between 16 and 2048.",
694: "Settings error", JOptionPane.ERROR_MESSAGE);
695: return;
696: }
697:
698: tStartX.setText("1");
699: tStartY.setText("1");
700: tEndX.setText(Integer.toString(width));
701: tEndY.setText(Integer.toString(height));
702: }//GEN-LAST:event_bDefaultStartEndActionPerformed
703:
704: private void bStartStopActionPerformed(
705: java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bStartStopActionPerformed
706: if (rendThread == null) {
707: // Check rendering settings
708:
709: // Scene
710:
711: String sessionName = this .getSessionName();
712: if (sessionName == null)
713: return;
714:
715: String workDir = tWorkDir.getText().trim();
716: File fWorkDir = new File(workDir);
717: if (!fWorkDir.exists()) {
718: JOptionPane.showMessageDialog(this ,
719: "The working directory doesn't exists.",
720: "Settings error", JOptionPane.ERROR_MESSAGE);
721: return;
722: } else if (!fWorkDir.isDirectory()) {
723: JOptionPane.showMessageDialog(this ,
724: "The working directory isn't a directory.",
725: "Settings error", JOptionPane.ERROR_MESSAGE);
726: return;
727: }
728:
729: String iniFile = tINIFile.getText();
730: try {
731: File inif = new File(workDir + File.separator + iniFile);
732:
733: if (!inif.exists() || !inif.isFile()) {
734: JOptionPane
735: .showMessageDialog(
736: this ,
737: "The INI file doesn't exists or isn't a normal file.",
738: "Settings error",
739: JOptionPane.ERROR_MESSAGE);
740: return;
741: }
742: } catch (Exception ex) {
743: JOptionPane
744: .showMessageDialog(
745: this ,
746: "The INI file must be in the working directory.",
747: "Settings error",
748: JOptionPane.ERROR_MESSAGE);
749: return;
750: }
751:
752: // Image
753:
754: int width = -1;
755: try {
756: width = Integer.parseInt(tWidth.getText());
757: } catch (Exception ex) {
758: JOptionPane.showMessageDialog(this ,
759: "Syntax error in the image width.",
760: "Settings error", JOptionPane.ERROR_MESSAGE);
761: return;
762: }
763: if ((width < 16) || (width > 2048)) {
764: JOptionPane.showMessageDialog(this ,
765: "The image width must be between 16 and 2048.",
766: "Settings error", JOptionPane.ERROR_MESSAGE);
767: return;
768: }
769:
770: int height = -1;
771: try {
772: height = Integer.parseInt(tHeight.getText());
773: } catch (Exception ex) {
774: JOptionPane.showMessageDialog(this ,
775: "Syntax error in the image height.",
776: "Settings error", JOptionPane.ERROR_MESSAGE);
777: return;
778: }
779: if ((height < 16) || (height > 2048)) {
780: JOptionPane
781: .showMessageDialog(
782: this ,
783: "The image height must be between 16 and 2048.",
784: "Settings error",
785: JOptionPane.ERROR_MESSAGE);
786: return;
787: }
788:
789: int fragSize = -1;
790: try {
791: fragSize = Integer.parseInt(tFragmentSize.getText());
792: } catch (Exception ex) {
793: JOptionPane.showMessageDialog(this ,
794: "Syntax error in the fragment size.",
795: "Settings error", JOptionPane.ERROR_MESSAGE);
796: return;
797: }
798: if ((fragSize < 8) || (fragSize > width)) {
799: JOptionPane.showMessageDialog(this ,
800: "The image fragment size must be between 8 and "
801: + width + ".", "Settings error",
802: JOptionPane.ERROR_MESSAGE);
803: return;
804: }
805:
806: // StartX & EndX
807:
808: if (tStartX.getText().trim().equals(""))
809: tStartX.setText("1");
810: int startX = -1;
811: try {
812: startX = Integer.parseInt(tStartX.getText());
813: } catch (Exception ex) {
814: JOptionPane.showMessageDialog(this ,
815: "Syntax error in the start column.",
816: "Settings error", JOptionPane.ERROR_MESSAGE);
817: return;
818: }
819: if ((startX < 1) || (startX > width)) {
820: JOptionPane.showMessageDialog(this ,
821: "The image start column must be between 1 and "
822: + width + ".", "Settings error",
823: JOptionPane.ERROR_MESSAGE);
824: return;
825: }
826:
827: if (tEndX.getText().trim().equals(""))
828: tEndX.setText(Integer.toString(width));
829: int endX = -1;
830: try {
831: endX = Integer.parseInt(tEndX.getText());
832: } catch (Exception ex) {
833: JOptionPane.showMessageDialog(this ,
834: "Syntax error in the end column.",
835: "Settings error", JOptionPane.ERROR_MESSAGE);
836: return;
837: }
838: if ((endX < startX + 8) || (endX > width)) {
839: JOptionPane.showMessageDialog(this ,
840: "The image end column must be between "
841: + (startX + 8) + " and " + width + ".",
842: "Settings error", JOptionPane.ERROR_MESSAGE);
843: return;
844: }
845:
846: // StartY & EndY
847:
848: if (tStartY.getText().trim().equals(""))
849: tStartY.setText("1");
850: int startY = -1;
851: try {
852: startY = Integer.parseInt(tStartY.getText());
853: } catch (Exception ex) {
854: JOptionPane.showMessageDialog(this ,
855: "Syntax error in the start row.",
856: "Settings error", JOptionPane.ERROR_MESSAGE);
857: return;
858: }
859: if ((startY < 1) || (startY > height)) {
860: JOptionPane.showMessageDialog(this ,
861: "The image start row must be between 1 and "
862: + height + ".", "Settings error",
863: JOptionPane.ERROR_MESSAGE);
864: return;
865: }
866:
867: if (tEndY.getText().trim().equals(""))
868: tEndY.setText(Integer.toString(height));
869: int endY = -1;
870: try {
871: endY = Integer.parseInt(tEndY.getText());
872: } catch (Exception ex) {
873: JOptionPane.showMessageDialog(this ,
874: "Syntax error in the end row.",
875: "Settings error", JOptionPane.ERROR_MESSAGE);
876: return;
877: }
878: if ((endX < startY + 8) || (endY > height)) {
879: JOptionPane
880: .showMessageDialog(this ,
881: "The image end row must be between "
882: + (startY + 8) + " and "
883: + height + ".",
884: "Settings error",
885: JOptionPane.ERROR_MESSAGE);
886: return;
887: }
888:
889: pPic.resizeImage(width, height);
890:
891: // Setup JCGrid Client
892:
893: GridClient gc = new GridClient();
894: gc.setNodeConfig(clientConfig);
895: GridNodeClientConfig config = (GridNodeClientConfig) gc
896: .getNodeConfig();
897:
898: try {
899: config.setSessionName(sessionName);
900: config.setWorkingDir(workDir);
901:
902: // Creating work request
903:
904: POVWorkRequest povwr = new POVWorkRequest(config
905: .getSessionName(), 0, iniFile, width, height,
906: startX - 1, endX - 1, startY - 1, endY - 1);
907:
908: rendThread = new POVRenderingClient(config,
909: new RenderingThreadFeedback(), povwr, fragSize);
910: rendThread.start();
911: } catch (Exception ex) {
912: log.warn("Error starting the rendering", ex);
913:
914: JOptionPane.showMessageDialog(this ,
915: "Error starting the rendering.",
916: "Rendering error", JOptionPane.ERROR_MESSAGE);
917:
918: rendThread = null;
919: }
920: } else {
921: try {
922: rendThread.interrupt();
923: rendThread.join();
924: } catch (Exception ex) {
925: log.warn("Error stopping the rendering", ex);
926:
927: JOptionPane.showMessageDialog(this ,
928: "Error stopping the rendering.",
929: "Rendering error", JOptionPane.ERROR_MESSAGE);
930:
931: rendThread = null;
932: }
933: }
934:
935: if (rendThread == null)
936: bStartStop.setText("Start rendering");
937: else
938: bStartStop.setText("Stop rendering");
939: }//GEN-LAST:event_bStartStopActionPerformed
940:
941: private void bWorkDirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bWorkDirActionPerformed
942: JFileChooser chooser = new JFileChooser();
943: chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
944: chooser.setCurrentDirectory(new File(System
945: .getProperty("user.dir")));
946:
947: int res = chooser.showOpenDialog(this );
948:
949: if (res == JFileChooser.APPROVE_OPTION)
950: tWorkDir.setText(chooser.getSelectedFile()
951: .getAbsolutePath());
952: }//GEN-LAST:event_bWorkDirActionPerformed
953:
954: // Variables declaration - do not modify//GEN-BEGIN:variables
955: private javax.swing.JButton bAutoSessionName;
956: private javax.swing.JButton bClearImage;
957: private javax.swing.JButton bDefaultFragSize;
958: private javax.swing.JButton bDefaultImageSize;
959: private javax.swing.JButton bDefaultStartEnd;
960: private javax.swing.JButton bINIFile;
961: private javax.swing.JButton bStartStop;
962: private javax.swing.JButton bWorkDir;
963: private javax.swing.JLabel jLabel1;
964: private javax.swing.JLabel jLabel12;
965: private javax.swing.JLabel jLabel13;
966: private javax.swing.JLabel jLabel2;
967: private javax.swing.JLabel jLabel3;
968: private javax.swing.JLabel jLabel4;
969: private javax.swing.JLabel jLabel5;
970: private javax.swing.JLabel jLabel6;
971: private javax.swing.JLabel jLabel7;
972: private javax.swing.JLabel jLabel8;
973: private javax.swing.JLabel jLabel9;
974: private javax.swing.JLabel lRenderTime;
975: private javax.swing.JPanel pImage;
976: private javax.swing.JPanel pRendering;
977: private javax.swing.JPanel pScene;
978: private javax.swing.JProgressBar pbStatus;
979: private javax.swing.JTextField tEndX;
980: private javax.swing.JTextField tEndY;
981: private javax.swing.JTextField tFragmentSize;
982: private javax.swing.JTextField tHeight;
983: private javax.swing.JTextField tINIFile;
984: private javax.swing.JTextField tSessionName;
985: private javax.swing.JTextField tStartX;
986: private javax.swing.JTextField tStartY;
987: private javax.swing.JTextField tWidth;
988: private javax.swing.JTextField tWorkDir;
989: // End of variables declaration//GEN-END:variables
990:
991: }
|