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