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