Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
1) /* BlinkenLightsInteractiveMovieProgram
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
2) * version 0.5 date 2004-11-19
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
3) * Copyright (C) 2004: Stefan Schuermans <1stein@schuermans.info>
4) * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5) * a blinkenarea.org project
6) * powered by eventphone.de
7) */
8)
9) import java.applet.*;
10) import java.awt.*;
11) import java.awt.event.*;
12) import java.awt.image.*;
13) import javax.swing.*;
14) import javax.swing.border.*;
15) import javax.swing.event.*;
16) import java.io.*;
17) import java.util.*;
18) import java.util.regex.*;
19) import java.net.*;
20)
21) public class Blimp extends JApplet
22) implements Runnable, WindowListener, ActionListener,
23) AdjustmentListener, ChangeListener, FocusListener,
24) DocumentListener, BlinkenFrameEditorListener
25) {
26) //configuration constants
27) static final int constColorCntX = 2, constColorCntY = 4;
28) static final int constColorCnt = constColorCntX * constColorCntY;
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
29) static final int defHeight = 8, defWidth = 8, defChannels = 1, defMaxval = 127, defDuration = 100;
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
30)
31) //configuration variables
32) boolean isFullApp = false; //if running as full application
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
33) String initialFile = null;
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
34)
35) //GUI elements
36) JFrame frame; //main window (if running as full application)
37) Component dialogParent; //parent to use for dialogs
38) JMenuBar menubar; //menubar in main window
39) JMenu menuFile, menuInfo, menuEdit, menuPlay, menuHelp; //menus
40) JMenuItem menuFileNew, menuFileLoad, menuFileSave, menuFileSaveAs, menuFileQuit;
41) JMenuItem menuInfoShow, menuInfoAdd, menuInfoDelete;
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
42) JMenuItem menuEditResize, menuEditScale, menuEditInsertFrame, menuEditDuplicateFrame, menuEditDeleteFrame;
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
43) JMenuItem menuPlayStart, menuPlayStop;
44) JCheckBoxMenuItem menuPlayBegin, menuPlayLoop;
45) JMenuItem menuHelpAbout;
46) JPanel panel, panelStatus, panelMain, panelFrames, panelOuterFrame; //panels of in window
47) JPanel panelMiddleFrame, panelFrame, panelDuration, panelColors;
48) JLabel labelStatus, labelFrames, labelFrameInfo, labelDuration;
49) JScrollBar scrollFrames;
50) JSlider sliderFrameZoom;
51) BlinkenFrameEditor frameEditor;
52) JScrollPane scrollpaneFrame;
53) JTextField textDuration;
54) JPanel panelOuterTools, panelMiddleTools, panelTools, panelActions;
55) JToggleButton buttonToolsNone, buttonToolsColorPicker, buttonToolsDot, buttonToolsLine;
56) JToggleButton buttonToolsRect, buttonToolsFilledRect, buttonToolsCircle, buttonToolsFilledCircle;
57) JToggleButton buttonToolsCopy, buttonToolsPaste;
58) ButtonGroup groupTools;
59) JButton buttonActionsInvert, buttonActionsRotate90, buttonActionsRotate180, buttonActionsRotate270;
60) JButton buttonActionsMirrorHor, buttonActionsMirrorVer, buttonActionsMirrorDiag, buttonActionsMirrorDiag2;
61) JButton buttonActionsRollLeft, buttonActionsRollRight, buttonActionsRollUp, buttonActionsRollDown;
62) JButton buttonActionsUndo, buttonActionsRedo;
63) JPanel panelColorsChoose, panelColorsSettings, panelColorsColor, panelColorsAlpha;
64) JToggleButton buttonsColor[];
65) ButtonGroup groupColor;
66) JLabel labelColorsColor, labelColorsAlpha;
67) JButton buttonColorsColor;
68) JSlider sliderColorsAlpha;
69) JTextField textColorsColor, textColorsAlpha;
70)
71) //other variables
72) int colorIdx; //index of selected color
73) Color colors[]; //current colors
74) ImageIcon iconsColor[], iconColorsColor; //color icons shown in color panel
75) javax.swing.Timer timerPlay; //timer used for playing movies
76)
77) //file, movie, frame
78) File curDir = null, curFile = null; //current directory and file
79) BlinkenMovie curMovie = null; //current movie
80) boolean curMovieChanged = false; //if changes have been made to current movie
81) BlinkenFrame curFrame = null; //current frame
82)
83) //constructor for applet
84) public Blimp( )
85) {
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
86) isFullApp = false;
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
87) }
88)
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
89) //constructor for full application - perhaps load an initial file (filename != null)
90) public Blimp( String filename )
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
91) {
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
92) isFullApp = true;
93) initialFile = filename;
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
94) }
95)
96) //load an image
97) private ImageIcon loadImageIcon( String name )
98) {
99) URL url = Blimp.class.getResource( "images/" + name );
100) if( url != null )
101) return new ImageIcon( url );
102) else
103) return new ImageIcon( new BufferedImage( 1, 1, BufferedImage.TYPE_INT_RGB ) );
104) }
105)
106) //perhaps ask if to save changes and perhaps do it
107) //return true on cancel
108) private boolean askSaveChanges( )
109) {
110) int retVal;
111)
112) //ask only when changes were made
113) if( curMovieChanged )
114) {
115) //ask if to save changes
116) retVal = JOptionPane.showConfirmDialog( dialogParent,
117) "Do You want to save the changes?",
118) "Blimp - Save changes?",
119) JOptionPane.YES_NO_CANCEL_OPTION,
120) JOptionPane.QUESTION_MESSAGE );
121) //cancelled
122) if( retVal == JOptionPane.CANCEL_OPTION )
123) return true;
124) //save
125) if( retVal == JOptionPane.YES_OPTION )
126) actionFileSave( );
127) }
128)
129) //not cancelled
130) return false;
131) }
132)
133) //"File New" was chosen from menu
134) private void actionFileNew( )
135) {
136) //ask if to save changes
137) if( askSaveChanges( ) ) //returns true on cancel
138) return;
139)
140) //create a new movie
141) if( frame != null )
142) frame.setTitle( "Blimp" );
143) labelStatus.setText( "new movie..." );
144) curFile = null;
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
145) curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
146) curMovie.insertInfo( 0, "creator", "Blimp (version 0.5 date 2004-11-19)" );
147) curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
148) curMovieChanged = false;
149)
150) //update controls
151) updateFrames( 0 );
152) }
153)
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
154) //load file (filename is taken from curFile)
155) private void fileLoad( )
156) {
157) if( curMovie.load( curFile.getPath( ) ) )
158) {
159) //success
160) if( frame != null )
161) frame.setTitle( "Blimp - " + curFile.getPath( ) );
162) labelStatus.setText( "movie \"" + curFile.getPath( ) + "\" was loaded successfully..." );
163) curMovieChanged = false;
164) }
165) else
166) {
167) //some error
168) if( frame != null )
169) frame.setTitle( "Blimp" );
170) labelStatus.setText( "movie \"" + curFile.getPath( ) + "\" could not be loaded..." );
171) curFile = null;
172) curMovieChanged = false;
173) }
174)
175) //update controls
176) updateFrames( 0 );
177) }
178)
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
179) //"File Load" was chosen from menu
180) private void actionFileLoad( )
181) {
182) JFileChooser fileChooser;
183)
184) //ask if to save changes
185) if( askSaveChanges( ) ) //returns true on cancel
186) return;
187)
188) //show file select dialog
189) fileChooser = new JFileChooser( );
190) fileChooser.setDialogTitle( "Blimp - Load..." );
191) fileChooser.setFileFilter( new BlinkenFileFilter( ) );
192) if( curDir != null )
193) fileChooser.setCurrentDirectory( curDir );
194) if( fileChooser.showOpenDialog( dialogParent ) == JFileChooser.APPROVE_OPTION )
195) {
196) //save current directory and current file
197) curDir = fileChooser.getCurrentDirectory( );
198) curFile = fileChooser.getSelectedFile( );
199) //load file
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
200) fileLoad( );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
201) }
202) }
203)
204) //"File Save" was chosen from menu
205) private void actionFileSave( )
206) {
207) //just call "File Save as" if no current file
208) if( curFile == null )
209) {
210) actionFileSaveAs( );
211) return;
212) }
213) //save file
214) if( curMovie.save( curFile.getPath( ) ) )
215) {
216) //success
217) labelStatus.setText( "movie \"" + curFile.getPath( ) + "\" was saved successfully..." );
218) curMovieChanged = false;
219) }
220) else
221) {
222) //some error
223) labelStatus.setText( "movie \"" + curFile.getPath( ) + "\" could not be saved..." );
224) }
225) }
226)
227) //"File Save as" was chosen from menu
228) private void actionFileSaveAs( )
229) {
230) JFileChooser fileChooser;
231)
232) //show file select dialog
233) fileChooser = new JFileChooser( );
234) fileChooser.setDialogTitle( "Blimp - Save as..." );
235) fileChooser.setFileFilter( new BlinkenFileFilter( ) );
236) if( curDir != null )
237) fileChooser.setCurrentDirectory( curDir );
238) if( curFile != null )
239) fileChooser.setSelectedFile( curFile );
240) if( fileChooser.showSaveDialog( dialogParent ) == JFileChooser.APPROVE_OPTION )
241) {
242) //save current directory and file
243) curDir = fileChooser.getCurrentDirectory( );
244) curFile = fileChooser.getSelectedFile( );
245) if( frame != null )
246) frame.setTitle( "Blimp - " + curFile.getPath( ) );
247) //just call "File Save" to do the work
248) actionFileSave( );
249) }
250) }
251)
252) //"File Quit" was chosen from menu
253) private void actionFileQuit( )
254) {
255) JFileChooser fileChooser;
256)
257) //ask if to save changes
258) if( askSaveChanges( ) ) //returns true on cancel
259) return;
260)
261) //only end program if runnning as full application
262) if( isFullApp )
263) System.exit( 0 );
264) }
265)
266) //"Information Show..." was chosen from menu
267) private void actionInfoShow( )
268) {
269) int i, cnt;
270) String info;
271)
272) //get information about movie
273) info = "";
274) cnt = curMovie.getInfoCnt( );
275) for( i = 0; i < cnt; i++ )
276) info += "\n" + curMovie.getInfoType( i ) +
277) ": " + curMovie.getInfoData( i );
278)
279) //show information
280) JOptionPane.showMessageDialog( dialogParent,
281) "Information about movie:\n" + info,
282) "Blimp - Show Information...",
283) JOptionPane.INFORMATION_MESSAGE );
284) }
285)
286) //"Information Add..." was chosen from menu
287) private void actionInfoAdd( )
288) {
289) Pattern infoPattern;
290) Object info;
291) Matcher infoMatcher;
292)
293) //initialize info pattern
294) infoPattern = Pattern.compile( "^([A-Za-z0-9]+)(?: *= *|: *)(.*)$" );
295)
296) //ask for information to add
297) info = JOptionPane.showInputDialog( dialogParent,
298) "Please enter the information to add:\n\n" +
299) "The format is: <info-type>: <info-text>\n" +
300) " title: <title of movie>\n" +
301) " description: <short description of movie content>\n" +
302) " creator: <program this movie was created with>\n" +
303) " author: <name of author(s)>\n" +
304) " email: <email address of author>\n" +
305) " url: <homepage of author or of this movie>",
306) "Blimp - Add Information...",
307) JOptionPane.QUESTION_MESSAGE,
308) null, null, "" );
309) //dialog was cancelled
310) if( info == null )
311) return;
312)
313) //add info
314) if( (infoMatcher = infoPattern.matcher( info.toString( ) )).find( ) )
315) curMovie.insertInfo( curMovie.getInfoCnt( ), infoMatcher.group( 1 ), infoMatcher.group( 2 ) );
316) else
317) curMovie.insertInfo( curMovie.getInfoCnt( ), "description", info.toString( ) );
318) curMovieChanged = true;
319) }
320)
321) //"Information Delete..." was chosen from menu
322) private void actionInfoDelete( )
323) {
324) int i, cnt;
325) String info[];
326) Object selected;
327)
328) //get information about movie
329) cnt = curMovie.getInfoCnt( );
330) info = new String[cnt];
331) for( i = 0; i < cnt; i++ )
332) info[i] = curMovie.getInfoType( i ) + ": " +
333) curMovie.getInfoData( i );
334)
335) //ask for new size
336) selected = JOptionPane.showInputDialog( dialogParent,
337) "Select information to delete:",
338) "Blimp - Delete Information...",
339) JOptionPane.QUESTION_MESSAGE,
340) null, info, null );
341) //dialog was cancelled
342) if( selected == null )
343) return;
344)
345) //delete sected information
346) for( i = 0; i < cnt; i++ )
347) if( info[i] == selected )
348) break;
349) if( i < cnt )
350) {
351) curMovie.deleteInfo( i );
352) curMovieChanged = true;
353) }
354) }
355)
356) //"Edit Resize Movie..." was chosen from menu
357) private void actionEditResize( )
358) {
359) Pattern sizePattern;
360) String curSize;
361) Object size;
362) Matcher sizeMatcher;
363)
364) //initialize size pattern
365) sizePattern = Pattern.compile( "^([0-9]+)x([0-9]+)-([0-9]+)/([0-9]+)$" );
366)
367) //get string with current movie size
368) curSize = curMovie.getWidth( ) + "x" +
369) curMovie.getHeight( ) + "-" +
370) curMovie.getChannels( ) + "/" +
371) (curMovie.getMaxval( ) + 1);
372)
373) //ask until cancel or answer is valid
374) size = curSize;
375) do
376) {
377) //ask for new size
378) size = JOptionPane.showInputDialog( dialogParent,
379) "Current movie size is: " + curSize + "\n\n" +
380) "The format is: <width>x<height>-<channels>/<colors>\n" +
381) " 18x8-1/2 (Blinkenlights)\n" +
382) " 18x8-1/16 (Blinkenlights Reloaded)\n" +
383) " 26x20-1/16 (Blinkenlights Arcade)\n" +
384) " 104x32-1/128 (TROIA big walls)\n" +
385) " 80x32-1/128 (TROIA small walls)\n" +
386) " 104x80-1/128 (TROIA floor + ceiling)\n\n" +
387) "Please enter the new movie size:",
388) "Blimp - Resize Movie...",
389) JOptionPane.QUESTION_MESSAGE,
390) null, null, size );
391) //dialog was cancelled
392) if( size == null )
393) return;
394) }
395) while( ! (sizeMatcher = sizePattern.matcher( size.toString( ) )).find( ) ); //repeat question if answer not valid
396)
397) //resize movie
398) curMovie.resize( Integer.parseInt( sizeMatcher.group( 2 ) ),
399) Integer.parseInt( sizeMatcher.group( 1 ) ),
400) Integer.parseInt( sizeMatcher.group( 3 ) ),
401) Integer.parseInt( sizeMatcher.group( 4 ) ) - 1 );
402) curMovieChanged = true;
403)
404) //update controls
405) updateFrames( scrollFrames.getValue( ) );
406)
407) //update status
408) labelStatus.setText( "movie resized successfully to " + size.toString( ) + "..." );
409) }
410)
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
411) //"Edit Scale Movie..." was chosen from menu
412) private void actionEditScale( )
413) {
414) Pattern dimPattern;
415) String curDim, curSize;
416) Object dim;
417) Matcher dimMatcher;
418)
419) //initialize dimension pattern
420) dimPattern = Pattern.compile( "^([0-9]+)x([0-9]+)$" );
421)
422) //get string with current movie size
423) curDim = curMovie.getWidth( ) + "x" +
424) curMovie.getHeight( );
425) curSize = curMovie.getWidth( ) + "x" +
426) curMovie.getHeight( ) + "-" +
427) curMovie.getChannels( ) + "/" +
428) (curMovie.getMaxval( ) + 1);
429)
430) //ask until cancel or answer is valid
431) dim = curDim;
432) do
433) {
434) //ask for new size
435) dim = JOptionPane.showInputDialog( dialogParent,
436) "Current movie dimension is: " + curDim + " (" + curSize + ")\n\n" +
437) "The format is: <width>x<height>\n" +
438) " 18x8 (Blinkenlights, Blinkenlights Reloaded)\n" +
439) " 26x20 (Blinkenlights Arcade)\n" +
440) " 104x32 (TROIA big walls)\n" +
441) " 80x32 (TROIA small walls)\n" +
442) " 104x80 (TROIA floor + ceiling)\n\n" +
443) "Please enter the new movie dimension:",
444) "Blimp - Scale Movie...",
445) JOptionPane.QUESTION_MESSAGE,
446) null, null, dim );
447) //dialog was cancelled
448) if( dim == null )
449) return;
450) }
451) while( ! (dimMatcher = dimPattern.matcher( dim.toString( ) )).find( ) ); //repeat question if answer not valid
452)
453) //scale movie
454) curMovie.scale( Integer.parseInt( dimMatcher.group( 2 ) ),
455) Integer.parseInt( dimMatcher.group( 1 ) ) );
456) curMovieChanged = true;
457)
458) //update controls
459) updateFrames( scrollFrames.getValue( ) );
460)
461) //update status
462) labelStatus.setText( "movie scaled successfully to " + dim.toString( ) + "..." );
463) }
464)
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
465) //"Edit Insert Frame" was chosen from menu
466) private void actionEditInsertFrame( )
467) {
468) BlinkenFrame frame;
469) int frameCnt, frameNo;
470)
471) //create new empty frame
472) frame = new BlinkenFrame( curMovie.getHeight( ), curMovie.getWidth( ),
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
473) curMovie.getChannels( ), curMovie.getMaxval( ), defDuration );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
474) frame.clear( );
475)
476) //insert frame behind current position
477) frameCnt = curMovie.getFrameCnt( );
478) frameNo = scrollFrames.getValue( ) + 1;
479) if( frameNo < 0 )
480) frameNo = 0;
481) if( frameNo > frameCnt )
482) frameNo = frameCnt;
483) curMovie.insertFrame( frameNo, frame );
484) curMovieChanged = true;
485)
486) //update controls
487) updateFrames( frameNo );
488) }
489)
490) //"Edit Duplicate Frame" was chosen from menu
491) private void actionEditDuplicateFrame( )
492) {
493) BlinkenFrame frame;
494) int frameCnt, frameNo;
495)
496) //do nothing if there is no current frame
497) if( curFrame == null )
498) return;
499)
500) //duplicate current frame
501) frame = new BlinkenFrame( curFrame );
502)
503) //insert frame behind current position
504) frameCnt = curMovie.getFrameCnt( );
505) frameNo = scrollFrames.getValue( ) + 1;
506) if( frameNo < 0 )
507) frameNo = 0;
508) if( frameNo > frameCnt )
509) frameNo = frameCnt;
510) curMovie.insertFrame( frameNo, frame );
511) curMovieChanged = true;
512)
513) //update controls
514) updateFrames( frameNo );
515) }
516)
517) //"Edit Delete Frame" was chosen from menu
518) private void actionEditDeleteFrame( )
519) {
520) int frameNo;
521)
522) //do nothing if there is no current frame
523) if( curFrame == null )
524) return;
525)
526) //delete current frame
527) frameNo = scrollFrames.getValue( );
528) curMovie.deleteFrame( frameNo );
529) frameNo--;
530) curMovieChanged = true;
531)
532) //update controls
533) updateFrames( frameNo );
534) }
535)
536) //"Play Start" was chosen from menu
537) private void actionPlayStart( )
538) {
539) //select no tool
540) buttonToolsNone.setSelected( true );
541) frameEditor.setTool( BlinkenFrameEditor.toolNone );
542)
543) //disable start, enable stop
544) menuPlayStart.setEnabled( false );
545) menuPlayStop.setEnabled( true );
546)
547) //stop old play timer
548) timerPlay.stop( );
549)
550) //if play shall start from beginning
551) if( menuPlayBegin.getState( ) )
552) {
553) //show first frame
554) if( scrollFrames.getValue( ) != 0 ) //value changes
555) scrollFrames.setValue( 0 ); //play timer will be started again when frame is being shown by scrollbar callback
556) else //value does not change
557) stateFrames( ); //value does not change, no event will be sent, execute callback by hand
558) }
559)
560) //start play timer
561) if( curFrame == null )
562) timerPlay.setInitialDelay( 100 ); //use 100ms as default
563) else
564) timerPlay.setInitialDelay( curFrame.getDuration( ) );
565) timerPlay.restart( );
566) }
567)
568) //"Play Stop" was chosen from menu
569) private void actionPlayStop( )
570) {
571) //stop play timer
572) timerPlay.stop( );
573)
574) //enable start, disable stop
575) menuPlayStart.setEnabled( true );
576) menuPlayStop.setEnabled( false );
577) }
578)
579) //play timer elapsed
580) private void actionPlayTimer( )
581) {
582) int frameCnt, frameNoOld, frameNoNew;
583)
584) //stop play timer
585) timerPlay.stop( );
586)
587) //get number of next frame
588) frameCnt = curMovie.getFrameCnt( );
589) frameNoOld = scrollFrames.getValue( );
590) frameNoNew = frameNoOld + 1;
591) if( frameNoNew >= frameCnt )
592) {
593) frameNoNew = 0;
594) //stop playing if looping is not requested
595) if( ! menuPlayLoop.getState( ) )
596) {
597) //enable start, disable stop
598) menuPlayStart.setEnabled( true );
599) menuPlayStop.setEnabled( false );
600) return;
601) }
602) }
603)
604) //show next frame
605) if( frameNoNew != frameNoOld ) //value changes
606) scrollFrames.setValue( frameNoNew ); //play timer will be started again when frame is being shown by scrollbar callback
607) else //value does not change
608) stateFrames( ); //value does not change, no event will be sent, execute callback by hand
609) }
610)
611) //"Help About" was chosen from menu
612) private void actionHelpAbout( )
613) {
614) JOptionPane.showMessageDialog( dialogParent,
615) "BlinkenLightsInteractiveMovieProgram\n" +
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
616) "version 0.5 date 2004-11-19\n" +
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
617) "Copyright (C) 2004: Stefan Schuermans <1stein@schuermans.info>\n" +
618) "Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" +
619) "a blinkenarea.org project\n" +
620) "powered by eventphone.de",
621) "Blimp - About...",
622) JOptionPane.INFORMATION_MESSAGE );
623) }
624)
625) //update frames controls (and go to certaint frame)
626) private void updateFrames( int frameNo )
627) {
628) int frameCnt, frameInc;
629)
630) //update frames scrollbar range
631) frameCnt = curMovie.getFrameCnt( );
632) if( frameCnt <= 0 )
633) {
634) scrollFrames.setValues( 0, 0, 0, 0 );
635) scrollFrames.setBlockIncrement( 1 );
636) }
637) else
638) {
639) if( frameNo < 0 )
640) frameNo = 0;
641) if( frameNo >= frameCnt )
642) frameNo = frameCnt - 1;
643) scrollFrames.setValues( frameNo, 1, 0, frameCnt );
644) frameInc = (int)Math.sqrt( frameCnt );
645) if( frameInc < 1 )
646) frameInc = 1;
647) scrollFrames.setBlockIncrement( frameInc );
648) }
649)
650) //simulate frames scrollbar change to propagate update
651) stateFrames( );
652)
653) //enable disable some menu commands which need a current frame
654) menuEditDuplicateFrame.setEnabled( frameCnt > 0 );
655) menuEditDeleteFrame.setEnabled( frameCnt > 0 );
656) }
657)
658) //frames scrollbar changed
659) private void stateFrames( )
660) {
661) int frameCnt, frameNo;
662)
663) //update frames scrollbar label
664) //get current frame
665) frameCnt = curMovie.getFrameCnt( );
666) if( frameCnt <= 0 )
667) {
668) labelFrames.setText( "frame: -/0" );
669) curFrame = null;
670) }
671) else
672) {
673) frameNo = scrollFrames.getValue( );
674) labelFrames.setText( "frame: " + (frameNo + 1) + "/" + frameCnt );
675) curFrame = curMovie.getFrame( frameNo );
676) }
677)
678) //update frame
679) frameEditor.setFrame( curFrame );
680)
681) //show duration
682) showDuration( );
683)
684) //if currently playing
685) if( ! menuPlayStart.isEnabled( ) )
686) {
687) //stop play timer
688) timerPlay.stop( );
689) //start play timer
690) if( curFrame == null )
691) timerPlay.setInitialDelay( 100 ); //use 100ms as default
692) else
693) timerPlay.setInitialDelay( curFrame.getDuration( ) );
694) timerPlay.restart( );
695) }
696) }
697)
698) //frame zoom changed
699) private void stateFrameZoom( )
700) {
701) //update frame
702) frameEditor.setZoom( sliderFrameZoom.getValue( ) );
703) }
704)
705) //show duration
706) private void showDuration( )
707) {
708) if( curFrame == null )
709) {
710) textDuration.setEnabled( false );
711) textDuration.setText( "" );
712) }
713) else
714) {
715) textDuration.setEnabled( true );
716) textDuration.setText( "" + curFrame.getDuration( ) );
717) }
718) }
719)
720) //new frame duration is being entered
721) private void changeDuration( )
722) {
723) int duration;
724)
725) try
726) {
727) //get new frame duration
728) duration = Integer.parseInt( textDuration.getText( ) );
729)
730) //write new duration into frame (if it really changed)
731) if( curFrame != null && curFrame.getDuration( ) != duration )
732) {
733) curFrame.setDuration( duration );
734) curMovieChanged = true;
735) }
736) }
737) catch( NumberFormatException e ) { }
738) }
739)
740) //new frame duration was entered
741) private void validateDuration( )
742) {
743) //process changes made to duration
744) changeDuration( );
745)
746) //redisplay new duration
747) showDuration( );
748) }
749)
750) //generate a color icon from a color
751) private void iconFromColor( ImageIcon icon, Color color )
752) {
753) int height, width, y, x;
754) boolean yy, xx;
755) Graphics graphics;
756)
757) //get size
758) height = icon.getIconHeight( );
759) width = icon.getIconWidth( );
760)
761) //get graphics context of icon's image
762) graphics = icon.getImage( ).getGraphics( );
763)
764) //draw background
765) graphics.setColor( new Color( color.getRed( ), color.getGreen( ), color.getBlue( ) ) );
766) graphics.fillRect( 0, 0, width / 2, height );
767) for( y = 0, yy = false; y < height; y += height / 4, yy = ! yy )
768) {
769) for( x = width / 2, xx = yy; x < width; x += width / 6, xx = ! xx )
770) {
771) if( xx )
772) graphics.setColor( Color.white );
773) else
774) graphics.setColor( Color.black );
775) graphics.fillRect( x, y, width / 6, height / 4 );
776) }
777) }
778)
779) //draw foreground in specified color
780) graphics.setColor( color );
781) graphics.fillRect( 0, 0, width, height );
782) }
783)
784) //a color was chosen
785) private void actionColorIdx( int idx )
786) {
787) //click on active color
788) if( idx == colorIdx )
789) {
790) //act as if color color select button was pressed
791) actionColorsColor( );
792) return;
793) }
794)
795) //set active color index
796) colorIdx = idx;
797)
798) //update color settings
799) showColorsColor( );
800) showColorsAlpha( );
801)
802) //set color of frame editor to new color
803) frameEditor.setColor( colors[colorIdx] );
804) }
805)
806) //show color
807) private void showColorsColor( )
808) {
809) int red, green, blue;
810) String hex;
811)
812) //get color components
813) red = colors[colorIdx].getRed( );
814) green = colors[colorIdx].getGreen( );
815) blue = colors[colorIdx].getBlue( );
816)
817) //color button
818) iconFromColor( iconColorsColor, new Color( red, green, blue ) );
819) buttonColorsColor.repaint( );
820)
821) //color text
822) if( red < 0x10 )
823) hex = "0" + Integer.toHexString( red );
824) else
825) hex = Integer.toHexString( red );
826) if( green < 0x10 )
827) hex += "0" + Integer.toHexString( green );
828) else
829) hex += Integer.toHexString( green );
830) if( blue < 0x10 )
831) hex += "0" + Integer.toHexString( blue );
832) else
833) hex += Integer.toHexString( blue );
834) textColorsColor.setText( hex.toUpperCase( ) );
835) }
836)
837) //color select button was pressed
838) private void actionColorsColor( )
839) {
840) Color color;
841)
842) //get current color with full alpha
843) color = new Color( colors[colorIdx].getRed( ),
844) colors[colorIdx].getGreen( ),
845) colors[colorIdx].getBlue( ) );
846)
847) //show color select dialog
848) color = JColorChooser.showDialog( dialogParent,
849) "Blimp - Choose Color...",
850) color );
851) if( color == null ) //dialog was cancelled
852) return;
853)
854) //save new color
855) colors[colorIdx] = new Color( color.getRed( ),
856) color.getGreen( ),
857) color.getBlue( ),
858) colors[colorIdx].getAlpha( ) );
859)
860) //redisplay new color
861) showColorsColor( );
862)
863) //update color icon of active color
864) iconFromColor( iconsColor[colorIdx], colors[colorIdx] );
865) buttonsColor[colorIdx].repaint( );
866)
867) //set color of frame editor to new color
868) frameEditor.setColor( colors[colorIdx] );
869) }
870)
871) //new color text is being entered
872) private void changeColorsColor( )
873) {
874) String txt;
875) int red, green, blue;
876)
877) //get color text
878) txt = textColorsColor.getText( );
879)
880) //standard color is black
881) red = 0;
882) green = 0;
883) blue = 0;
884)
885) //get new color
886) try
887) {
888) if( txt.length( ) >= 2 )
889) red = Integer.parseInt( txt.substring( 0, 2 ), 0x10 );
890) if( txt.length( ) >= 4 )
891) green = Integer.parseInt( txt.substring( 2, 4 ), 0x10 );
892) if( txt.length( ) >= 6 )
893) blue = Integer.parseInt( txt.substring( 4, 6 ), 0x10 );
894) }
895) catch( NumberFormatException e ) { }
896)
897) //save new color
898) colors[colorIdx] = new Color( red, green, blue, colors[colorIdx].getAlpha( ) );
899)
900) //set color of frame editor to new color
901) frameEditor.setColor( colors[colorIdx] );
902) }
903)
904) //new color text was entered
905) private void validateColorsColor( )
906) {
907) //process changes
908) changeColorsColor( );
909)
910) //redisplay new color
911) showColorsColor( );
912)
913) //update color icon of active color
914) iconFromColor( iconsColor[colorIdx], colors[colorIdx] );
915) buttonsColor[colorIdx].repaint( );
916) }
917)
918) //show color's alpha value
919) private void showColorsAlpha( )
920) {
921) int alpha;
922) String hex;
923)
924) //get alpha value
925) alpha = colors[colorIdx].getAlpha( );
926)
927) //alpha slider
928) sliderColorsAlpha.setValue( alpha );
929)
930) //alpha text
931) if( alpha < 0x10 )
932) hex = "0" + Integer.toHexString( alpha );
933) else
934) hex = Integer.toHexString( alpha );
935) textColorsAlpha.setText( hex.toUpperCase( ) );
936) }
937)
938) //color's alpha value changed
939) private void stateColorsAlpha( )
940) {
941) int alpha;
942) String hex;
943)
944) //get new alpha value
945) alpha = sliderColorsAlpha.getValue( );
946)
947) //update active color
948) colors[colorIdx] = new Color( colors[colorIdx].getRed( ),
949) colors[colorIdx].getGreen( ),
950) colors[colorIdx].getBlue( ),
951) alpha );
952)
953) //update alpha text
954) if( alpha < 0x10 )
955) hex = "0" + Integer.toHexString( alpha );
956) else
957) hex = Integer.toHexString( alpha );
958) textColorsAlpha.setText( hex.toUpperCase( ) );
959)
960) //update color icon of active color
961) iconFromColor( iconsColor[colorIdx], colors[colorIdx] );
962) buttonsColor[colorIdx].repaint( );
963)
964) //set color of frame editor to new color
965) frameEditor.setColor( colors[colorIdx] );
966) }
967)
968) //new alpha text is being entered
969) private void changeColorsAlpha( )
970) {
971) String txt;
972) int alpha;
973)
974) //get alpha text
975) txt = textColorsAlpha.getText( );
976)
977) //standard alpha is full
978) alpha = 255;
979)
980) //get new alpha
981) try
982) {
983) if( txt.length( ) >= 2 )
984) alpha = Integer.parseInt( txt.substring( 0, 2 ), 0x10 );
985) }
986) catch( NumberFormatException e ) { }
987)
988) //save new alpha
989) colors[colorIdx] = new Color( colors[colorIdx].getRed( ),
990) colors[colorIdx].getGreen( ),
991) colors[colorIdx].getBlue( ),
992) alpha );
993)
994) //set color of frame editor to new color
995) frameEditor.setColor( colors[colorIdx] );
996) }
997)
998) //new alpha text was entered
999) private void validateColorsAlpha( )
1000) {
1001) //process changes
1002) changeColorsAlpha( );
1003)
1004) //redisplay new alpha value
1005) showColorsAlpha( );
1006)
1007) //update color icon of active color
1008) iconFromColor( iconsColor[colorIdx], colors[colorIdx] );
1009) buttonsColor[colorIdx].repaint( );
1010) }
1011)
1012) public void windowActivated( WindowEvent e )
1013) {
1014) }
1015)
1016) public void windowDeactivated( WindowEvent e )
1017) {
1018) }
1019)
1020) public void windowOpened( WindowEvent e )
1021) {
1022) }
1023)
1024) public void windowClosing( WindowEvent e )
1025) {
1026) actionFileQuit( ); //act as "File Quit"
1027) }
1028)
1029) public void windowClosed( WindowEvent e )
1030) {
1031) }
1032)
1033) public void windowIconified( WindowEvent e )
1034) {
1035) }
1036)
1037) public void windowDeiconified( WindowEvent e )
1038) {
1039) }
1040)
1041) //some GUI action was perfomed
1042) public void actionPerformed( ActionEvent e )
1043) {
1044) int i;
1045)
1046) if( e.getSource( ) == menuFileNew )
1047) actionFileNew( );
1048) else if( e.getSource( ) == menuFileLoad )
1049) actionFileLoad( );
1050) else if( e.getSource( ) == menuFileSave )
1051) actionFileSave( );
1052) else if( e.getSource( ) == menuFileSaveAs )
1053) actionFileSaveAs( );
1054) else if( e.getSource( ) == menuFileQuit )
1055) actionFileQuit( );
1056) else if( e.getSource( ) == menuInfoShow )
1057) actionInfoShow( );
1058) else if( e.getSource( ) == menuInfoAdd )
1059) actionInfoAdd( );
1060) else if( e.getSource( ) == menuInfoDelete )
1061) actionInfoDelete( );
1062) else if( e.getSource( ) == menuEditResize )
1063) actionEditResize( );
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1064) else if( e.getSource( ) == menuEditScale )
1065) actionEditScale( );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
1066) else if( e.getSource( ) == menuEditInsertFrame )
1067) actionEditInsertFrame( );
1068) else if( e.getSource( ) == menuEditDuplicateFrame )
1069) actionEditDuplicateFrame( );
1070) else if( e.getSource( ) == menuEditDeleteFrame )
1071) actionEditDeleteFrame( );
1072) else if( e.getSource( ) == menuPlayStart )
1073) actionPlayStart( );
1074) else if( e.getSource( ) == menuPlayStop )
1075) actionPlayStop( );
1076) else if( e.getSource( ) == timerPlay )
1077) actionPlayTimer( );
1078) else if( e.getSource( ) == menuHelpAbout )
1079) actionHelpAbout( );
1080) else if( e.getSource( ) == textDuration )
1081) validateDuration( );
1082) else if( e.getSource( ) == buttonToolsNone )
1083) frameEditor.setTool( BlinkenFrameEditor.toolNone );
1084) else if( e.getSource( ) == buttonToolsColorPicker )
1085) frameEditor.setTool( BlinkenFrameEditor.toolColorPicker );
1086) else if( e.getSource( ) == buttonToolsDot )
1087) frameEditor.setTool( BlinkenFrameEditor.toolDot );
1088) else if( e.getSource( ) == buttonToolsLine )
1089) frameEditor.setTool( BlinkenFrameEditor.toolLine );
1090) else if( e.getSource( ) == buttonToolsRect )
1091) frameEditor.setTool( BlinkenFrameEditor.toolRect );
1092) else if( e.getSource( ) == buttonToolsFilledRect )
1093) frameEditor.setTool( BlinkenFrameEditor.toolFilledRect );
1094) else if( e.getSource( ) == buttonToolsCircle )
1095) frameEditor.setTool( BlinkenFrameEditor.toolCircle );
1096) else if( e.getSource( ) == buttonToolsFilledCircle )
1097) frameEditor.setTool( BlinkenFrameEditor.toolFilledCircle );
1098) else if( e.getSource( ) == buttonToolsCopy )
1099) frameEditor.setTool( BlinkenFrameEditor.toolCopy );
1100) else if( e.getSource( ) == buttonToolsPaste )
1101) frameEditor.setTool( BlinkenFrameEditor.toolPaste );
1102) else if( e.getSource( ) == buttonActionsInvert )
1103) frameEditor.actionInvert( );
1104) else if( e.getSource( ) == buttonActionsRotate90 )
1105) frameEditor.actionRotate90( );
1106) else if( e.getSource( ) == buttonActionsRotate180 )
1107) frameEditor.actionRotate180( );
1108) else if( e.getSource( ) == buttonActionsRotate270 )
1109) frameEditor.actionRotate270( );
1110) else if( e.getSource( ) == buttonActionsMirrorHor )
1111) frameEditor.actionMirrorHor( );
1112) else if( e.getSource( ) == buttonActionsMirrorVer )
1113) frameEditor.actionMirrorVer( );
1114) else if( e.getSource( ) == buttonActionsMirrorDiag )
1115) frameEditor.actionMirrorDiag( );
1116) else if( e.getSource( ) == buttonActionsMirrorDiag2 )
1117) frameEditor.actionMirrorDiag2( );
1118) else if( e.getSource( ) == buttonActionsRollLeft )
1119) frameEditor.actionRollLeft( );
1120) else if( e.getSource( ) == buttonActionsRollRight )
1121) frameEditor.actionRollRight( );
1122) else if( e.getSource( ) == buttonActionsRollUp )
1123) frameEditor.actionRollUp( );
1124) else if( e.getSource( ) == buttonActionsRollDown )
1125) frameEditor.actionRollDown( );
1126) else if( e.getSource( ) == buttonActionsUndo )
1127) frameEditor.actionUndo( );
1128) else if( e.getSource( ) == buttonActionsRedo )
1129) frameEditor.actionRedo( );
1130) else if( e.getSource( ) == buttonColorsColor )
1131) actionColorsColor( );
1132) else if( e.getSource( ) == textColorsColor )
1133) validateColorsColor( );
1134) else if( e.getSource( ) == textColorsAlpha )
1135) validateColorsAlpha( );
1136) else
1137) {
1138) for( i = 0; i < constColorCnt; i++ )
1139) if( e.getSource( ) == buttonsColor[i] )
1140) break;
1141) if( i < constColorCnt )
1142) actionColorIdx( i );
1143) }
1144) }
1145)
1146) //some GUI value was adjusted
1147) public void adjustmentValueChanged( AdjustmentEvent e )
1148) {
1149) if( e.getSource( ) == scrollFrames )
1150) stateFrames( );
1151) }
1152)
1153) //some GUI state changed
1154) public void stateChanged( ChangeEvent e )
1155) {
1156) if( e.getSource( ) == sliderFrameZoom )
1157) stateFrameZoom( );
1158) else if( e.getSource( ) == sliderColorsAlpha )
1159) stateColorsAlpha( );
1160) }
1161)
1162) //a control got the focus
1163) public void focusGained( FocusEvent e )
1164) {
1165) }
1166)
1167) //a control lost the focus
1168) public void focusLost( FocusEvent e )
1169) {
1170) if( e.getSource( ) == textDuration )
1171) validateDuration( );
1172) else if( e.getSource( ) == textColorsColor )
1173) validateColorsColor( );
1174) else if( e.getSource( ) == textColorsAlpha )
1175) validateColorsAlpha( );
1176) }
1177)
1178) //something was changed in a document
1179) public void changedUpdate( DocumentEvent e )
1180) {
1181) if( e.getDocument( ) == textDuration.getDocument( ) )
1182) changeDuration( );
1183) else if( e.getDocument( ) == textColorsColor.getDocument( ) )
1184) changeColorsColor( );
1185) else if( e.getDocument( ) == textColorsAlpha.getDocument( ) )
1186) changeColorsAlpha( );
1187) }
1188)
1189) //something was inserted into a document
1190) public void insertUpdate( DocumentEvent e )
1191) {
1192) if( e.getDocument( ) == textDuration.getDocument( ) )
1193) changeDuration( );
1194) }
1195)
1196) //something was removed from a document
1197) public void removeUpdate( DocumentEvent e )
1198) {
1199) if( e.getDocument( ) == textDuration.getDocument( ) )
1200) changeDuration( );
1201) }
1202)
1203) //info text of frame editor changed
1204) public void blinkenFrameEditorInfo( String info )
1205) {
1206) labelFrameInfo.setText( info );
1207) }
1208)
1209) //a color was picked in the frame editor
1210) public void blinkenFrameEditorColorPicked( Color color )
1211) {
1212) //save new color
1213) colors[colorIdx] = color;
1214)
1215) //redisplay new color (incl. alpha)
1216) showColorsColor( );
1217) showColorsAlpha( );
1218)
1219) //update color icon of active color
1220) iconFromColor( iconsColor[colorIdx], colors[colorIdx] );
1221) buttonsColor[colorIdx].repaint( );
1222)
1223) //set color of frame editor to new color
1224) frameEditor.setColor( colors[colorIdx] );
1225) }
1226)
1227) //the current frame was changed in the frame editor
1228) public void blinkenFrameEditorFrameChanged( )
1229) {
1230) curMovieChanged = true;
1231) }
1232)
1233) //the possibility to perfon an undo or redo operation changed
1234) public void blinkenFrameEditorCanUndoRedo( boolean canUndo, boolean canRedo )
1235) {
1236) buttonActionsUndo.setEnabled( canUndo );
1237) buttonActionsRedo.setEnabled( canRedo );
1238) }
1239)
1240) //entry point of main thread
1241) public void run( )
1242) {
1243) int i, val;
1244) Dimension size;
1245) Insets smallMargin;
1246)
1247) //initialize current movie, frame
1248) curDir = new File( "." );
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
1249) curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
1250) curMovie.insertInfo( 0, "creator", "Blimp (version 0.5 date 2004-11-19)" );
1251) curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
1252) curFrame = null;
1253)
1254) //runnning as full application
1255) if( isFullApp )
1256) {
1257) //create main window
1258) JFrame.setDefaultLookAndFeelDecorated( true );
1259) frame = new JFrame( "Blimp" );
1260) frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
1261) frame.addWindowListener( this );
1262) //create menu bar
1263) menubar = new JMenuBar( );
1264) frame.setJMenuBar( menubar );
1265) //create main panel
1266) panel = new JPanel( new BorderLayout( 5, 5 ) );
1267) frame.getContentPane( ).add( panel );
1268) //use main window as parent for dialogs
1269) dialogParent = frame;
1270) }
1271) //runnning as applet
1272) else
1273) {
1274) //no main window - applet is main window
1275) frame = null;
1276) //create menu bar
1277) menubar = new JMenuBar( );
1278) setJMenuBar( menubar );
1279) //create main panel
1280) panel = new JPanel( new BorderLayout( 5, 5 ) );
1281) getContentPane( ).add( panel );
1282) //use applet as parent for dialogs
1283) dialogParent = this;
1284) }
1285)
1286) //create menus
1287) //file menu
1288) menuFile = new JMenu( "File" );
1289) menubar.add( menuFile );
1290) menuFileNew = new JMenuItem( "New" );
1291) menuFileNew.addActionListener( this );
1292) menuFile.add( menuFileNew );
1293) menuFileLoad = new JMenuItem( "Load..." );
1294) menuFileLoad.addActionListener( this );
1295) menuFile.add( menuFileLoad );
1296) menuFileSave = new JMenuItem( "Save" );
1297) menuFileSave.addActionListener( this );
1298) menuFile.add( menuFileSave );
1299) menuFileSaveAs = new JMenuItem( "Save as..." );
1300) menuFileSaveAs.addActionListener( this );
1301) menuFile.add( menuFileSaveAs );
1302) if( isFullApp )
1303) menuFile.addSeparator( );
1304) menuFileQuit = new JMenuItem( "Quit" );
1305) menuFileQuit.addActionListener( this );
1306) if( isFullApp )
1307) menuFile.add( menuFileQuit );
1308) //information menu
1309) menuInfo = new JMenu( "Information" );
1310) menubar.add( menuInfo );
1311) menuInfoShow = new JMenuItem( "Show..." );
1312) menuInfoShow.addActionListener( this );
1313) menuInfo.add( menuInfoShow );
1314) menuInfoAdd = new JMenuItem( "Add..." );
1315) menuInfoAdd.addActionListener( this );
1316) menuInfo.add( menuInfoAdd );
1317) menuInfoDelete = new JMenuItem( "Delete..." );
1318) menuInfoDelete.addActionListener( this );
1319) menuInfo.add( menuInfoDelete );
1320) //edit menu
1321) menuEdit = new JMenu( "Edit" );
1322) menubar.add( menuEdit );
1323) menuEditResize = new JMenuItem( "Resize Movie..." );
1324) menuEditResize.addActionListener( this );
1325) menuEdit.add( menuEditResize );
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1326) menuEditScale = new JMenuItem( "Scale Movie..." );
1327) menuEditScale.addActionListener( this );
1328) menuEdit.add( menuEditScale );
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
1329) menuEdit.addSeparator( );
1330) menuEditInsertFrame = new JMenuItem( "Insert Frame" );
1331) menuEditInsertFrame.addActionListener( this );
1332) menuEdit.add( menuEditInsertFrame );
1333) menuEditDuplicateFrame = new JMenuItem( "Duplicate Frame" );
1334) menuEditDuplicateFrame.setEnabled( false );
1335) menuEditDuplicateFrame.addActionListener( this );
1336) menuEdit.add( menuEditDuplicateFrame );
1337) menuEditDeleteFrame = new JMenuItem( "Delete Frame" );
1338) menuEditDeleteFrame.setEnabled( false );
1339) menuEditDeleteFrame.addActionListener( this );
1340) menuEdit.add( menuEditDeleteFrame );
1341) //play menu
1342) menuPlay = new JMenu( "Play" );
1343) menubar.add( menuPlay );
1344) menuPlayStart = new JMenuItem( "Start" );
1345) menuPlayStart.addActionListener( this );
1346) menuPlay.add( menuPlayStart );
1347) menuPlayStop = new JMenuItem( "Stop" );
1348) menuPlayStop.setEnabled( false );
1349) menuPlayStop.addActionListener( this );
1350) menuPlay.add( menuPlayStop );
1351) menuPlay.addSeparator( );
1352) menuPlayBegin = new JCheckBoxMenuItem( "From Begin", false );
1353) menuPlayBegin.addActionListener( this );
1354) menuPlay.add( menuPlayBegin );
1355) menuPlayLoop = new JCheckBoxMenuItem( "Looped", false );
1356) menuPlayLoop.addActionListener( this );
1357) menuPlay.add( menuPlayLoop );
1358) //help menu
1359) menuHelp = new JMenu( "Help" );
1360) menubar.add( menuHelp );
1361) menuHelpAbout = new JMenuItem( "About..." );
1362) menuHelpAbout.addActionListener( this );
1363) menuHelp.add( menuHelpAbout );
1364)
1365) //create controls
1366) smallMargin = new Insets( 1, 1, 1, 1 );
1367) panel.setBorder( new EmptyBorder( 5, 5, 5, 5 ) );
1368) //status bar
1369) panelStatus = new JPanel( new BorderLayout( 5, 5 ) );
1370) panel.add( panelStatus, BorderLayout.SOUTH );
1371) panelStatus.add( new JSeparator( JSeparator.HORIZONTAL ), BorderLayout.NORTH );
1372) labelStatus = new JLabel( "ready..." );
1373) panelStatus.add( labelStatus, BorderLayout.CENTER );
1374) //main panel
1375) panelMain = new JPanel( new BorderLayout( 5, 5 ) );
1376) panel.add( panelMain, BorderLayout.CENTER );
1377) //frames panel
1378) panelFrames = new JPanel( new BorderLayout( 5, 5 ) );
1379) panelMain.add( panelFrames, BorderLayout.SOUTH );
1380) scrollFrames = new JScrollBar( SwingConstants.HORIZONTAL, 0, 0, 0, 0 );
1381) scrollFrames.setBlockIncrement( 1 );
1382) scrollFrames.addAdjustmentListener( this );
1383) panelFrames.add( scrollFrames, BorderLayout.CENTER );
1384) labelFrames = new JLabel( "frame: -/0" );
1385) labelFrames.setLabelFor( scrollFrames );
1386) panelFrames.add( labelFrames, BorderLayout.WEST );
1387) //outer and middle frame panel
1388) panelOuterFrame = new JPanel( new BorderLayout( 5, 5 ) );
1389) panelMain.add( panelOuterFrame, BorderLayout.CENTER );
1390) panelOuterFrame.add( new JSeparator( JSeparator.HORIZONTAL ), BorderLayout.SOUTH );
1391) panelMiddleFrame = new JPanel( new BorderLayout( 5, 5 ) );
1392) panelOuterFrame.add( panelMiddleFrame, BorderLayout.CENTER );
1393) panelMiddleFrame.add( new JSeparator( JSeparator.VERTICAL ), BorderLayout.WEST );
1394) panelMiddleFrame.add( new JSeparator( JSeparator.VERTICAL ), BorderLayout.EAST );
1395) //frame panel
1396) panelFrame = new JPanel( new BorderLayout( 5, 5 ) );
1397) panelMiddleFrame.add( panelFrame, BorderLayout.CENTER );
1398) sliderFrameZoom = new JSlider( JSlider.VERTICAL, 0, 6, 3 );
1399) sliderFrameZoom.setSnapToTicks( true );
1400) sliderFrameZoom.setInverted( true );
1401) sliderFrameZoom.addChangeListener( this );
1402) sliderFrameZoom.setToolTipText( "Zoom" );
1403) panelFrame.add( sliderFrameZoom, BorderLayout.EAST );
1404) frameEditor = new BlinkenFrameEditor( );
1405) frameEditor.setZoom( sliderFrameZoom.getValue( ) );
1406) scrollpaneFrame = new JScrollPane( frameEditor );
1407) panelFrame.add( scrollpaneFrame, BorderLayout.CENTER );
1408) labelFrameInfo = new JLabel( "", JLabel.CENTER );
1409) labelFrameInfo.setLabelFor( frameEditor );
1410) panelFrame.add( labelFrameInfo, BorderLayout.NORTH );
1411) frameEditor.setEditorListener( this );
1412) panelDuration = new JPanel( new FlowLayout( FlowLayout.CENTER, 5, 5 ) );
1413) panelFrame.add( panelDuration, BorderLayout.SOUTH );
1414) textDuration = new JTextField( 5 );
1415) textDuration.setHorizontalAlignment( JTextField.CENTER );
1416) textDuration.setEnabled( false );
1417) textDuration.getDocument( ).addDocumentListener( this );
1418) textDuration.addActionListener( this );
1419) textDuration.addFocusListener( this );
1420) labelDuration = new JLabel( "duration (ms): " );
1421) labelDuration.setLabelFor( textDuration );
1422) panelDuration.add( labelDuration );
1423) panelDuration.add( textDuration );
1424) //tool and action panels
1425) panelOuterTools = new JPanel( new GridLayout( 2, 1, 5, 5 ) );
1426) panelOuterFrame.add( panelOuterTools, BorderLayout.WEST );
1427) panelMiddleTools = new JPanel( new BorderLayout( 5, 5 ) );
1428) panelOuterTools.add( panelMiddleTools );
1429) panelTools = new JPanel( new GridLayout( 4, 3, 5, 5 ) );
1430) panelMiddleTools.add( panelTools, BorderLayout.CENTER );
1431) panelMiddleTools.add( new JSeparator( JSeparator.HORIZONTAL ), BorderLayout.SOUTH );
1432) panelActions = new JPanel( new GridLayout( 5, 3, 5, 5 ) );
1433) panelOuterTools.add( panelActions );
1434) //tool buttons
1435) groupTools = new ButtonGroup( );
1436) buttonToolsNone = new JToggleButton( );
1437) buttonToolsNone.setMargin( smallMargin );
1438) buttonToolsNone.setToolTipText( "no tool" );
1439) buttonToolsNone.addActionListener( this );
1440) groupTools.add( buttonToolsNone );
1441) panelTools.add( buttonToolsNone );
1442) buttonToolsColorPicker = new JToggleButton( loadImageIcon( "ColorPicker.png" ) );
1443) buttonToolsColorPicker.setMargin( smallMargin );
1444) buttonToolsColorPicker.setToolTipText( "Color Picker" );
1445) buttonToolsColorPicker.addActionListener( this );
1446) groupTools.add( buttonToolsColorPicker );
1447) panelTools.add( buttonToolsColorPicker );
1448) buttonToolsDot = new JToggleButton( loadImageIcon( "Dot.png" ) );
1449) buttonToolsDot.setMargin( smallMargin );
1450) buttonToolsDot.setToolTipText( "Dot" );
1451) buttonToolsDot.addActionListener( this );
1452) groupTools.add( buttonToolsDot );
1453) panelTools.add( buttonToolsDot );
1454) buttonToolsLine = new JToggleButton( loadImageIcon( "Line.png" ) );
1455) buttonToolsLine.setMargin( smallMargin );
1456) buttonToolsLine.setToolTipText( "Line" );
1457) buttonToolsLine.addActionListener( this );
1458) groupTools.add( buttonToolsLine );
1459) panelTools.add( buttonToolsLine );
1460) buttonToolsRect = new JToggleButton( loadImageIcon( "Rectangle.png" ) );
1461) buttonToolsRect.setMargin( smallMargin );
1462) buttonToolsRect.setToolTipText( "Rectangle" );
1463) buttonToolsRect.addActionListener( this );
1464) groupTools.add( buttonToolsRect );
1465) panelTools.add( buttonToolsRect );
1466) buttonToolsFilledRect = new JToggleButton( loadImageIcon( "FilledRectangle.png" ) );
1467) buttonToolsFilledRect.setMargin( smallMargin );
1468) buttonToolsFilledRect.setToolTipText( "Filled Rectangle" );
1469) buttonToolsFilledRect.addActionListener( this );
1470) groupTools.add( buttonToolsFilledRect );
1471) panelTools.add( buttonToolsFilledRect );
1472) panelTools.add( new JLabel( ) );
1473) buttonToolsCircle = new JToggleButton( loadImageIcon( "Circle.png" ) );
1474) buttonToolsCircle.setMargin( smallMargin );
1475) buttonToolsCircle.setToolTipText( "Circle" );
1476) buttonToolsCircle.addActionListener( this );
1477) groupTools.add( buttonToolsCircle );
1478) panelTools.add( buttonToolsCircle );
1479) buttonToolsFilledCircle = new JToggleButton( loadImageIcon( "FilledCircle.png" ) );
1480) buttonToolsFilledCircle.setMargin( smallMargin );
1481) buttonToolsFilledCircle.setToolTipText( "Filled Circle" );
1482) buttonToolsFilledCircle.addActionListener( this );
1483) groupTools.add( buttonToolsFilledCircle );
1484) panelTools.add( buttonToolsFilledCircle );
1485) panelTools.add( new JLabel( ) );
1486) buttonToolsCopy = new JToggleButton( loadImageIcon( "Copy.png" ) );
1487) buttonToolsCopy.setMargin( smallMargin );
1488) buttonToolsCopy.setToolTipText( "Copy" );
1489) buttonToolsCopy.addActionListener( this );
1490) groupTools.add( buttonToolsCopy );
1491) panelTools.add( buttonToolsCopy );
1492) buttonToolsPaste = new JToggleButton( loadImageIcon( "Paste.png" ) );
1493) buttonToolsPaste.setMargin( smallMargin );
1494) buttonToolsPaste.setToolTipText( "Paste" );
1495) buttonToolsPaste.addActionListener( this );
1496) groupTools.add( buttonToolsPaste );
1497) panelTools.add( buttonToolsPaste );
1498) buttonToolsNone.setSelected( true );
1499) frameEditor.setTool( BlinkenFrameEditor.toolNone );
1500) //action buttons
1501) buttonActionsInvert = new JButton( loadImageIcon( "Invert.png" ) );
1502) buttonActionsInvert.setMargin( smallMargin );
1503) buttonActionsInvert.setToolTipText( "Invert" );
1504) buttonActionsInvert.addActionListener( this );
1505) panelActions.add( buttonActionsInvert );
1506) buttonActionsMirrorHor = new JButton( loadImageIcon( "MirrorHor.png" ) );
1507) buttonActionsMirrorHor.setMargin( smallMargin );
1508) buttonActionsMirrorHor.setToolTipText( "Mirror Horizontally" );
1509) buttonActionsMirrorHor.addActionListener( this );
1510) panelActions.add( buttonActionsMirrorHor );
1511) buttonActionsRollLeft = new JButton( loadImageIcon( "RollLeft.png" ) );
1512) buttonActionsRollLeft.setMargin( smallMargin );
1513) buttonActionsRollLeft.setToolTipText( "Roll Left" );
1514) buttonActionsRollLeft.addActionListener( this );
1515) panelActions.add( buttonActionsRollLeft );
1516) buttonActionsRotate90 = new JButton( loadImageIcon( "Rotate90.png" ) );
1517) buttonActionsRotate90.setMargin( smallMargin );
1518) buttonActionsRotate90.setToolTipText( "Rotate 90 Degrees" );
1519) buttonActionsRotate90.addActionListener( this );
1520) panelActions.add( buttonActionsRotate90 );
1521) buttonActionsMirrorVer = new JButton( loadImageIcon( "MirrorVer.png" ) );
1522) buttonActionsMirrorVer.setMargin( smallMargin );
1523) buttonActionsMirrorVer.setToolTipText( "Mirror Vertically" );
1524) buttonActionsMirrorVer.addActionListener( this );
1525) panelActions.add( buttonActionsMirrorVer );
1526) buttonActionsRollRight = new JButton( loadImageIcon( "RollRight.png" ) );
1527) buttonActionsRollRight.setMargin( smallMargin );
1528) buttonActionsRollRight.setToolTipText( "Roll Right" );
1529) buttonActionsRollRight.addActionListener( this );
1530) panelActions.add( buttonActionsRollRight );
1531) buttonActionsRotate180 = new JButton( loadImageIcon( "Rotate180.png" ) );
1532) buttonActionsRotate180.setMargin( smallMargin );
1533) buttonActionsRotate180.setToolTipText( "Rotate 180 Degrees" );
1534) buttonActionsRotate180.addActionListener( this );
1535) panelActions.add( buttonActionsRotate180 );
1536) buttonActionsMirrorDiag = new JButton( loadImageIcon( "MirrorDiag.png" ) );
1537) buttonActionsMirrorDiag.setMargin( smallMargin );
1538) buttonActionsMirrorDiag.setToolTipText( "Mirror Diagonally (\\)" );
1539) buttonActionsMirrorDiag.addActionListener( this );
1540) panelActions.add( buttonActionsMirrorDiag );
1541) buttonActionsRollUp = new JButton( loadImageIcon( "RollUp.png" ) );
1542) buttonActionsRollUp.setMargin( smallMargin );
1543) buttonActionsRollUp.setToolTipText( "Roll Up" );
1544) buttonActionsRollUp.addActionListener( this );
1545) panelActions.add( buttonActionsRollUp );
1546) buttonActionsRotate270 = new JButton( loadImageIcon( "Rotate270.png" ) );
1547) buttonActionsRotate270.setMargin( smallMargin );
1548) buttonActionsRotate270.setToolTipText( "Rotate 270 Degrees" );
1549) buttonActionsRotate270.addActionListener( this );
1550) panelActions.add( buttonActionsRotate270 );
1551) buttonActionsMirrorDiag2 = new JButton( loadImageIcon( "MirrorDiag2.png" ) );
1552) buttonActionsMirrorDiag2.setMargin( smallMargin );
1553) buttonActionsMirrorDiag2.setToolTipText( "Mirror Diagonally (/)" );
1554) buttonActionsMirrorDiag2.addActionListener( this );
1555) panelActions.add( buttonActionsMirrorDiag2 );
1556) buttonActionsRollDown = new JButton( loadImageIcon( "RollDown.png" ) );
1557) buttonActionsRollDown.setMargin( smallMargin );
1558) buttonActionsRollDown.setToolTipText( "Roll Down" );
1559) buttonActionsRollDown.addActionListener( this );
1560) panelActions.add( buttonActionsRollDown );
1561) panelActions.add( new JLabel( ) );
1562) buttonActionsUndo = new JButton( loadImageIcon( "Undo.png" ) );
1563) buttonActionsUndo.setMargin( smallMargin );
1564) buttonActionsUndo.setToolTipText( "Undo" );
1565) buttonActionsUndo.setEnabled( false );
1566) buttonActionsUndo.addActionListener( this );
1567) panelActions.add( buttonActionsUndo );
1568) buttonActionsRedo = new JButton( loadImageIcon( "Redo.png" ) );
1569) buttonActionsRedo.setMargin( smallMargin );
1570) buttonActionsRedo.setToolTipText( "Redo" );
1571) buttonActionsRedo.setEnabled( false );
1572) buttonActionsRedo.addActionListener( this );
1573) panelActions.add( buttonActionsRedo );
1574) //color panel
1575) panelColors = new JPanel( new GridLayout( 2, 1, 5, 5 ) );
1576) panelOuterFrame.add( panelColors, BorderLayout.EAST );
1577) panelColorsChoose = new JPanel( new GridLayout( constColorCntY, constColorCntX, 5, 5 ) );
1578) panelColors.add( panelColorsChoose );
1579) buttonsColor = new JToggleButton[constColorCnt];
1580) groupColor = new ButtonGroup( );
1581) for( i = 0; i < constColorCnt; i++ )
1582) {
1583) buttonsColor[i] = new JToggleButton( );
1584) buttonsColor[i].setMargin( smallMargin );
1585) buttonsColor[i].addActionListener( this );
1586) groupColor.add( buttonsColor[i] );
1587) panelColorsChoose.add( buttonsColor[i] );
1588) }
1589) //color panel - settings
1590) panelColorsSettings = new JPanel( new GridLayout( 4, 1, 5, 0 ) );
1591) panelColors.add( panelColorsSettings );
1592) labelColorsColor = new JLabel( "color:" );
1593) labelColorsColor.setVerticalAlignment( JLabel.BOTTOM );
1594) panelColorsSettings.add( labelColorsColor );
1595) panelColorsColor = new JPanel( new FlowLayout( FlowLayout.CENTER, 5, 3 ) );
1596) panelColorsSettings.add( panelColorsColor );
1597) buttonColorsColor = new JButton( );
1598) buttonColorsColor.setMargin( smallMargin );
1599) buttonColorsColor.addActionListener( this );
1600) panelColorsColor.add( buttonColorsColor );
1601) textColorsColor = new JTextField( "FFFFFF", 6 );
1602) textColorsColor.setHorizontalAlignment( JTextField.CENTER );
1603) textColorsColor.addActionListener( this );
1604) textColorsColor.addFocusListener( this );
1605) panelColorsColor.add( textColorsColor );
1606) labelColorsColor.setLabelFor( panelColorsColor );
1607) labelColorsAlpha = new JLabel( "alpha:" );
1608) labelColorsAlpha.setVerticalAlignment( JLabel.BOTTOM );
1609) panelColorsSettings.add( labelColorsAlpha );
1610) panelColorsAlpha = new JPanel( new FlowLayout( FlowLayout.CENTER, 5, 3 ) );
1611) panelColorsSettings.add( panelColorsAlpha );
1612) sliderColorsAlpha = new JSlider( JSlider.HORIZONTAL, 0, 255, 255 );
1613) size = sliderColorsAlpha.getPreferredSize( );
1614) size.width = size.width * 2 / 5;
1615) sliderColorsAlpha.setPreferredSize( size );
1616) sliderColorsAlpha.setSnapToTicks( true );
1617) sliderColorsAlpha.addChangeListener( this );
1618) panelColorsAlpha.add( sliderColorsAlpha );
1619) textColorsAlpha = new JTextField( "FF", 2 );
1620) textColorsAlpha.setHorizontalAlignment( JTextField.CENTER );
1621) textColorsAlpha.addActionListener( this );
1622) textColorsAlpha.addFocusListener( this );
1623) panelColorsAlpha.add( textColorsAlpha );
1624) labelColorsAlpha.setLabelFor( panelColorsAlpha );
1625) //color panel - color icons
1626) colorIdx = 0;
1627) colors = new Color[constColorCnt];
1628) size = textColorsAlpha.getPreferredSize( );
1629) iconsColor = new ImageIcon[constColorCnt];
1630) for( i = 0; i < constColorCnt; i++ )
1631) {
1632) iconsColor[i] = new ImageIcon( new BufferedImage( size.width, size.height, BufferedImage.TYPE_INT_RGB ) );
1633) val = (constColorCnt - 1 - i) * 255 / (constColorCnt - 1);
1634) colors[i] = new Color( val, val, val );
1635) iconFromColor( iconsColor[i], colors[i] );
1636) buttonsColor[i].setIcon( iconsColor[i] );
1637) }
1638) iconColorsColor = new ImageIcon( new BufferedImage( size.width, size.height, BufferedImage.TYPE_INT_RGB ) );
1639) iconFromColor( iconColorsColor, colors[colorIdx] );
1640) buttonColorsColor.setIcon( iconColorsColor );
1641) buttonsColor[colorIdx].setSelected( true );
1642) frameEditor.setColor( colors[colorIdx] );
1643)
1644) //create play timer
1645) timerPlay = new javax.swing.Timer( 100, this );
1646) timerPlay.setRepeats( false );
1647) timerPlay.stop( );
1648)
1649) //update controls
1650) updateFrames( 0 );
1651)
1652) //running as full application
1653) if( isFullApp )
1654) {
1655) //calculate size for main window, menus and controls
1656) frame.pack( );
1657) //show main window
1658) frame.setVisible( true );
1659) }
1660) //running as applet
1661) else
1662) {
1663) //arrange menus and controls
1664) size = getSize( );
1665) resize( 1, 1 );
1666) resize( size );
1667) }
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1668)
1669) //load initial file
1670) if( initialFile != null )
1671) {
1672) //set current file and current directory
1673) curFile = (new File( initialFile )).getAbsoluteFile( );
1674) curDir = curFile.getParentFile( );
1675)
1676) //load file
1677) fileLoad( );
1678) }
|
Blimp v.0.2 (2004-11-10)
Christian Heimke authored 13 years ago
|
1679) }
1680)
1681) //entry point for applet
1682) public void init( )
1683) {
1684) javax.swing.SwingUtilities.invokeLater( this );
1685) }
1686)
1687) //entry point for full application
1688) public static void main( String[] args )
1689) {
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1690) int i;
1691) BlinkenMovie movie;
1692) Pattern sizePattern, dimPattern;
1693) Matcher sizeMatcher, dimMatcher;
1694) String txtOld, txtNew;
1695)
1696) //running interactively - without arguments
1697) if( args.length <= 0 )
1698) {
1699) javax.swing.SwingUtilities.invokeLater( new Blimp( null ) );
1700) return;
1701) }
1702)
1703) //running interactively - load initial file
1704) if( args.length == 1 && ! args[0].substring( 0, 1 ).equals( "-" ) )
1705) {
1706) javax.swing.SwingUtilities.invokeLater( new Blimp( args[0] ) );
1707) return;
1708) }
1709)
1710) //running as command line tool
1711) System.out.println( "BlinkenLightsInteractiveMovieProgram\n" +
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
1712) "version 0.5 date 2004-11-19\n" +
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1713) "Copyright (C) 2004: Stefan Schuermans <1stein@schuermans.info>\n" +
1714) "Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n" +
1715) "a blinkenarea.org project\n" +
1716) "powered by eventphone.de\n" );
1717)
1718) //initialize patterns
1719) sizePattern = Pattern.compile( "^([0-9]+)x([0-9]+)-([0-9]+)/([0-9]+)$" );
1720) dimPattern = Pattern.compile( "^([0-9]+)x([0-9]+)$" );
1721)
1722) //get initial movie
|
Blimp v.0.5 (2004-11-19)
Christian Heimke authored 13 years ago
|
1723) movie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
1724) movie.insertInfo( 0, "creator", "Blimp (version 0.5 date 2004-11-19)" );
1725) movie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
|
Blimp v.0.3 (2004-11-12)
Christian Heimke authored 13 years ago
|
1726)
1727) //process parameters
1728) for( i = 0; i < args.length; i++ )
1729) {
1730)
1731) if( args[i].equals( "-h" ) || args[i].equals( "--help" ) )
1732) {
1733) System.out.println( "interactive movie editor:\n" +
1734) " java Blimp [<initial-file>]\n" +
1735) "\n" +
1736) "command line tool:\n" +
1737) " java Blimp <parameter> [<parameter> [...]]\n" +
1738) "parameters:\n" +
1739) " -i / --input <file> load movie\n" +
1740) " -r / --resize <width>x<height>-<channels>/<colors> resize movie\n" +
1741) " -s / --scale <width>x<height> scale movie\n" +
1742) " -o / --output <file> save movie\n" +
1743) "\n" );
1744) }
1745)
1746) else if( args[i].equals( "-i" ) || args[i].equals( "--input" ) )
1747) {
1748) if( i + 1 >= args.length )
1749) {
1750) System.out.println( "parameter \"-i\" / \"--input\" requires an argument" );
1751) break;
1752) }
1753) i++;
1754) if( ! movie.load( args[i] ) )
1755) {
1756) System.out.println( "movie \"" + args[i] + "\" could not be loaded..." );
1757) break;
1758) }
1759) System.out.println( "movie \"" + args[i] + "\" was loaded successfully..." );
1760) }
1761)
1762) else if( args[i].equals( "-r" ) || args[i].equals( "--resize" ) )
1763) {
1764) if( i + 1 >= args.length )
1765) {
1766) System.out.println( "parameter \"-r\" / \"--resize\" requires an argument" );
1767) break;
1768) }
1769) i++;
1770) txtOld = movie.getWidth( ) + "x" +
1771) movie.getHeight( ) + "-" +
1772) movie.getChannels( ) + "/" +
1773) (movie.getMaxval( ) + 1);
1774) if( ! (sizeMatcher = sizePattern.matcher( args[i] )).find( ) )
1775) {
1776) System.out.println( "invalid format \"" + args[i] + "\"of size (<width>x<height>-<channles>/<colors>)" );
1777) break;
1778) }
1779) movie.resize( Integer.parseInt( sizeMatcher.group( 2 ) ),
1780) Integer.parseInt( sizeMatcher.group( 1 ) ),
1781) Integer.parseInt( sizeMatcher.group( 3 ) ),
1782) Integer.parseInt( sizeMatcher.group( 4 ) ) - 1 );
1783) txtNew = movie.getWidth( ) + "x" +
1784) movie.getHeight( ) + "-" +
1785) movie.getChannels( ) + "/" +
1786) (movie.getMaxval( ) + 1);
1787) System.out.println( "resized movie from \"" + txtOld + "\" to \"" + txtNew + "\"..." );
1788) }
1789)
1790) else if( args[i].equals( "-s" ) || args[i].equals( "--scale" ) )
1791) {
1792) if( i + 1 >= args.length )
1793) {
1794) System.out.println( "parameter \"-s\" / \"--scale\" requires an argument" );
1795) break;
1796) }
1797) i++;
1798) txtOld = movie.getWidth( ) + "x" +
1799) movie.getHeight( );
1800) if( ! (dimMatcher = dimPattern.matcher( args[i] )).find( ) )
1801) {
1802) System.out.println( "invalid format \"" + args[i] + "\" of dimension (<width>x<height>)" );
1803) break;
1804) }
1805) movie.scale( Integer.parseInt( dimMatcher.group( 2 ) ),
1806) Integer.parseInt( dimMatcher.group( 1 ) ) );
1807) txtNew = movie.getWidth( ) + "x" +
1808) movie.getHeight( );
1809) System.out.println( "scaled movie from \"" + txtOld + "\" to \"" + txtNew + "\"..." );
1810) }
1811)
1812) else if( args[i].equals( "-o" ) || args[i].equals( "--output" ) )
1813) {
1814) if( i + 1 >= args.length )
1815) {
1816) System.out.println( "parameter \"-o\" / \"--output\" requires an argument" );
1817) break;
1818) }
1819) i++;
1820) if( ! movie.save( args[i] ) )
1821) {
1822) System.out.println( "movie \"" + args[i] + "\" could not be saved..." );
1823) break;
1824) }
1825) System.out.println( "movie \"" + args[i] + "\" was saved successfully..." );
1826) }
1827)
1828) else
1829) System.out.println( "unknown parameter \"" + args[i] + "\" - use \"-h\" or \"--help\" to get help" );
1830)
1831) } //for( i...
|