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