48f284cff146d8a568133929a8f0990d000a53c2
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1) /* BlinkenLightsInteractiveMovieProgram
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

2)  * version 1.1 date 2005-04-16
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

3)  * Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>
Christian Heimke 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;
Christian Heimke 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;
Christian Heimke 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
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

33)   String initialFile = null;
Christian Heimke 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
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

39)   JMenu menuFile, menuInfo, menuEdit, menuFrameSel, menuPlay, menuHelp; //menus
Christian Heimke 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;
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

42)   JMenuItem menuEditResize, menuEditScale;
43)   JMenuItem menuEditInsertFrame, menuEditDuplicateFrame, menuEditDeleteFrame;
Christian Heimke 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;
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

47)   JMenuItem menuPlayStart, menuPlayStop;
48)   JCheckBoxMenuItem menuPlayBegin, menuPlayLoop;
49)   JMenuItem menuHelpAbout;
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

50)   JPanel panel, panelStatus, panelMain, panelFrames, panelOuterFrame; //panels of main window
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

51)   JPanel panelMiddleFrame, panelFrame, panelDuration, panelColors;
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

52)   JLabel labelStatus, labelFrames, labelSelFrames, labelFrameInfo, labelDuration;
Christian Heimke 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;
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

59)   JPanel panelOuterEdit, panelMiddleEdit, panelEdit;
Christian Heimke 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;
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

68)   JButton buttonEditInsertFrame, buttonEditDuplicateFrame, buttonEditDeleteFrame;
Christian Heimke 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
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

88)   int frameSelStart = -1, frameSelEnd = -1; //selected frames (none selected yet)
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

89) 
90)   //constructor for applet
91)   public Blimp( )
92)   {
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

93)     isFullApp = false;
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

94)   }
95) 
Christian Heimke 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 )
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

98)   {
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

99)     isFullApp = true;
100)     initialFile = filename;
Christian Heimke 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;
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

152)     curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
Christian Heimke 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)" );
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

154)     curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
Christian Heimke 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) 
Christian Heimke 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) 
Christian Heimke 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
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

207)       fileLoad( );
Christian Heimke 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) 
Christian Heimke 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) 
Christian Heimke 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
Christian Heimke 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( ),
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

478)                               curMovie.getChannels( ), curMovie.getMaxval( ), defDuration );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

479)     frame.clear( );
Christian Heimke 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( ) );
Christian Heimke 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) 
Christian Heimke 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
Christian Heimke 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) 
Christian Heimke 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
Christian Heimke 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) 
Christian Heimke 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( )
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

546)   {
547)     JFileChooser fileChooser;
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

548)     File files[];
Christian Heimke 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;
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

553)     int width, height, x, y, i, frameCnt, frameNo;
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

554) 
555)     //show file select dialog
556)     fileChooser = new JFileChooser( );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

557)     fileChooser.setDialogTitle( "Blimp - Import Images..." );
558)     fileChooser.setMultiSelectionEnabled( true );
Christian Heimke 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) 
Christian Heimke 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++ )
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

569)     {
Christian Heimke 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
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

638)       return;
Christian Heimke 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..." );
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

648)     }
Christian Heimke 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++ )
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

659)     {
Christian Heimke 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
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

662)     }
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

663)     curMovieChanged = true;
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

664) 
Christian Heimke 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..." );
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

667) 
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

668)     //update controls
669)     updateFrames( frameNo );
670)   }
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

671) 
Christian Heimke 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
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

728)     frameCnt = curMovie.getFrameCnt( );
Christian Heimke 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
Christian Heimke 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;
Christian Heimke 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] );
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

746)     curMovieChanged = true;
747) 
Christian Heimke 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;
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

862) 
863)     //update controls
864)     updateFrames( frameNo );
865)   }
866) 
Christian Heimke 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" +
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

947)                                    "version 1.1 date 2005-04-16\n" +
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

948)                                    "Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>\n" +
Christian Heimke 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)   {
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

959)     int frameCnt;
Christian Heimke 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)     {
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

965)       frameNo = 0;
Christian Heimke 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) 
Christian Heimke 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( );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

981) 
Christian Heimke 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
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

983)     menuEditDuplicateFrame.setEnabled( frameCnt > 0 );
984)     menuEditDeleteFrame.setEnabled( frameCnt > 0 );
Christian Heimke 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 );
Christian Heimke 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)     {
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1001)       frameNo = 0;
Christian Heimke 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) 
Christian Heimke 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) 
Christian Heimke 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)   }
Christian Heimke 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)   }
Christian Heimke 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( );
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

1428)     else if( e.getSource( ) == menuEditScale )
1429)       actionEditScale( );
Christian Heimke 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( );
Christian Heimke 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( );
Christian Heimke 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( );
Christian Heimke 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( );
Christian Heimke 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( "." );
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

1639)     curMovie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
Christian Heimke 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)" );
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

1641)     curMovie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
Christian Heimke 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" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1679)     menuFile.setMnemonic( KeyEvent.VK_F );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1680)     menubar.add( menuFile );
1681)     menuFileNew = new JMenuItem( "New" );
Christian Heimke 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 ) );
Christian Heimke 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..." );
Christian Heimke 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 ) );
Christian Heimke 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" );
Christian Heimke 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 ) );
Christian Heimke 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..." );
Christian Heimke 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 ) );
Christian Heimke 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" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1705)     menuFileQuit.setMnemonic( KeyEvent.VK_Q );
Christian Heimke 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" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1711)     menuInfo.setMnemonic( KeyEvent.VK_I );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1712)     menubar.add( menuInfo );
1713)     menuInfoShow = new JMenuItem( "Show..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1714)     menuInfoShow.setMnemonic( KeyEvent.VK_S );
Christian Heimke 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..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1718)     menuInfoAdd.setMnemonic( KeyEvent.VK_A );
Christian Heimke 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..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1722)     menuInfoDelete.setMnemonic( KeyEvent.VK_D );
Christian Heimke 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" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1727)     menuEdit.setMnemonic( KeyEvent.VK_E );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1728)     menubar.add( menuEdit );
1729)     menuEditResize = new JMenuItem( "Resize Movie..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1730)     menuEditResize.setMnemonic( KeyEvent.VK_R );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1731)     menuEditResize.addActionListener( this );
1732)     menuEdit.add( menuEditResize );
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

1733)     menuEditScale = new JMenuItem( "Scale Movie..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1734)     menuEditScale.setMnemonic( KeyEvent.VK_S );
Christian Heimke Blimp v.0.3 (2004-11-12)

Christian Heimke authored 13 years ago

1735)     menuEditScale.addActionListener( this );
1736)     menuEdit.add( menuEditScale );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1737)     menuEdit.addSeparator( );
1738)     menuEditInsertFrame = new JMenuItem( "Insert Frame" );
Christian Heimke 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 ) );
Christian Heimke 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" );
Christian Heimke 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 ) );
Christian Heimke 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" );
Christian Heimke 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 ) );
Christian Heimke 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 );
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

1755)     menuEdit.addSeparator( );
Christian Heimke 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 );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1818)     //play menu
1819)     menuPlay = new JMenu( "Play" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1820)     menuPlay.setMnemonic( KeyEvent.VK_P );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1821)     menubar.add( menuPlay );
1822)     menuPlayStart = new JMenuItem( "Start" );
Christian Heimke 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 ) );
Christian Heimke 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" );
Christian Heimke 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 ) );
Christian Heimke 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 );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1835)     menuPlayBegin.setMnemonic( KeyEvent.VK_B );
Christian Heimke 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 );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1839)     menuPlayLoop.setMnemonic( KeyEvent.VK_L );
Christian Heimke 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" );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1844)     menuHelp.setMnemonic( KeyEvent.VK_H );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1845)     menubar.add( menuHelp );
1846)     menuHelpAbout = new JMenuItem( "About..." );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1847)     menuHelpAbout.setMnemonic( KeyEvent.VK_A );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke Blimp v.0.2 (2004-11-10)

Christian Heimke authored 13 years ago

1915)     panelOuterTools = new JPanel( new GridLayout( 2, 1, 5, 5 ) );
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

1916)     panelOuterEdit.add( panelOuterTools, BorderLayout.CENTER );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke 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 );
Christian Heimke 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)     }
Christian Heimke 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)     }
Christian Heimke 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)   {
Christian Heimke 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" +
Christian Heimke Blimp v.1.1 (2005-04-16)

Christian Heimke authored 13 years ago

2223)                         "version 1.1 date 2005-04-16\n" +
Christian Heimke Blimp v.0.6 (2005-03-10)

Christian Heimke authored 13 years ago

2224)                         "Copyright (C) 2004-2005: Stefan Schuermans <1stein@schuermans.info>\n" +
Christian Heimke 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
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

2234)     movie = new BlinkenMovie( defHeight, defWidth, defChannels, defMaxval );
Christian Heimke 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)" );
Christian Heimke Blimp v.0.5 (2004-11-19)

Christian Heimke authored 13 years ago

2236)     movie.insertFrame( 0, new BlinkenFrame( defHeight, defWidth, defChannels, defMaxval, defDuration ) );
Christian Heimke 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...