LIST OF THINGS TODO (sorted by priority)
*****************************************
CONVENTIONS

x = done (this tasks have been moved to the NEWFEATURES.TXT)
/ = in progress (under testing or not finished)
- = planned but not implemented

-------------------
FOR MAURICIO GRACIA
-------------------

THINGS TO FIX/FINISH
--------------------

- I18N of this strings at PLAY PANEL
		"Song" 
		"Measure" 
		"Beat"
		"Division:" 
		- other strings on other windows or messages
		- informa the DGuitarTRANS people about this

/ When a MIDI file is open and "VIEW midi events" have been chosen, when any checkBox is clicked it plays/stops the MIDI
	Check if this BUG happens with version 0.4.2

/ The MIDI events are not showing correct info (see emails from Chris arround March 06-2005)

- Calculate the performance of the Export to MIDI 	

- Allow user to select a DEFAULT language and store it with the properties

/ Unify the playButton and playPanel of all windows on a playToolbar
	X SongInternalFrame
	X MidiInternalFrame
	X the playToolbar should display the name of the song is linked to
	- When all windows are closed..reset labels of playToolBar to "empty"
	- when song is MIDI...either:
		- hide the Measure,Bar,Division labels
		- show correct info on them
	- playToolbar should either swtich to a STOP button..or implement the PLAY as a ToggleButton (sinked)
		/ create a STOP button (b2.gif) 
		- use it when the PLAY button is selected (sunked)
	
	- display labels on a more compact way (a two ROW table..with song title on first, others below)
	- When any music cursor is moved (by clicking), the playPanel should display its location
		- this includes the name of the last clicked TRACK
	

- Implement a List of Recent Opened files
	
- Use IzPack to create a DGuitar installer to Improve the way the program is "installed" 
	and executed since many users having problems with the LANG folder..
	for example when running this command 

	java -jar DGuitar-dev/DGuitar/dist/DGuitar.jar

	this is happening:

	1. a dialog windows that shows "/home/mgracia//lang/lang NOT FOUND"

	2.after clickin OK this appears on the LOG:
		DGuitar (under testing) 0.5.3	28/11/2005 04:20:21 AM
		Operational System: Linux version 2.6.9-1.667 	architecture i386
		Java:  "Sun Microsystems Inc." version 1.4.2_04
		Supported Extensions:[.GP3, .GP4, .GTP, .MID]
			java.lang.NullPointerException
			at dguitar.gui.DGuitar.load(DGuitar.java:1310)
			at dguitar.gui.DGuitar.main(DGuitar.java:587)

	- find a way to avoid/fix this error (there are tools that help to install JAVA applications)


X create confirmation dialog when EXIT is selected
	X detect that the Settings have changed and not been saved and ask for saving

- Instruments LIST is returned EMPTY when different MIDI DEVICES are selected

/ Let the user select which midi device he would like to use (Midi Preferences)
	- JDK 1.4.2 does not provide a method for this ?
	- JRE 1.5 is still not available for MacOs.

/ create and option called "enable unfinished features" so user can decide if he wants to see/test this...
	X create the menu check box and I18N text
	- Store the "enable unfinished features" on preferences file
	X DISPLAY OPTIONS for all songs
	- SLIDES
	- Printing
	- other unfished options

- When DGuitar.jar is DOUBLE CLICKED..the LOG is created on THAT FOLDER

- When trying to run "DGuitar.sh" with a command similiar to this "DGuitar-dev/DGuitar/DGuitar.sh" this errors is displayed:
	Exception in thread "main" java.util.zip.ZipException: No such file or directory
		at java.util.zip.ZipFile.open(Native Method)
		at java.util.zip.ZipFile.<init>(ZipFile.java:112)
		at java.util.jar.JarFile.<init>(JarFile.java:127)
		at java.util.jar.JarFile.<init>(JarFile.java:65)

	CAUSE: this happens because your trying to run the program from another folder different than DGuitar location

	SOLUTION: 
		1. go to the folder were the DGuitar.sh is located (for example DGuitar-dev/DGuitar/ or the folder were you unzip DGuitar
)
		2. run the shell like this "./DGuitar.sh" 


- Drag and Drop DOES NOT WORK using KDE konqueror (problems are reported by at least one user)
	- test with other Linux File Explorers (with the FileExplorer of GNOME it works)

- Under LINUX ( with KDE and GNOME) this Warning appears when launching DGuitar	
	Cannot convert string "-b&h-lucida-medium-r-normal-sans-*-140-*-*-p-*-iso8859-1" to type FontStruct 

/ Work on the visual playing of a Score
	X move all musicCursor syncronized
	X When the music is auto-scrolled, the bars are now refreshed correclty 
	X how to perform the automatic horizontal scrolling 
	- When the cursor goes back before the actual measure, the scrolling is not going back as expected
	- When the BARS are really wide..the forward scrolling happens before the MusicCursor has moved

/ SLIDES
		X The width depends on the Beat Width
		- a SLIDE can join a note on the beat 1 with a note on the beat 3
		- Slides go on a SEPARATE LAYER since it can join beats on different measures
			see	TrackPanel.java (TrackPanel method)
		X create the index method for the Slide types
		X depending on the IndexNumber the EON Label will be GIF or custom PAINTED
		X The setAnchor position for SLIDE_IN_* objects is not working fine.
		- adjust the getPoint method to set the EXACT location
		- the width of the slide must me narrow (depends on the width of the fret)
		- The inclination of SLIDE_SHIFT and SLIDE_LEGATO depends on the 
		  NextFret on the same string..like this..
			if (NextFret >= currentFret)
				"/"
			else
				"\" 

/ OTHER Effects On NoteS (EONs)
    - hammer/pulls are allways draw after the current beat.
	- grace notes to the left of origin note
    / there are other bend types, besides the 5 types that are now shown
    / the horizontal line that conects the vertical rhythm lines (more testing)
    	- when beats contain silences...horizontal rhythm lines are showing 
		(see blue.gp4)

- The minimum size of this windows needs to be set for:
	- DGuitar LOG WINDOW 
	- Color Options
	- test other windows

- JFileChooser should NOT allow the rename of Files/Folders
	- create/improve the JFileChooser (at least 3 complaints)
	
	details/flaws from JAVA API JFileChooser:
		- files can not be sorted using columns
		- files/folders can be renamed 

- Playing a Large GP file has a poor perfomance/timing
	---------------------------------------------------------
	TITLE OF THE SONG			Complete adapting process time
	---------------------------------------------------------
	Metallica - Solos Of Metallica.gp4 	248 KB/256 seconds
	Opeth - Deliverance.gp4  		165 KB/166 seconds
	Hotel California.gp3			62 KB/14 seconds

	OPTIONS:
	A) estimate the time to Adapt the song and display a INFORMATION window if its too long 
	B) use the ProgressBar with a SwingWorker, that pops-up after a FIXED time

	- Under LINUX FEDORA 3 its sound cropped, more tests
	- PLAYing a SONG for the second time is not fast (re-adapting is required at this moment)

- Change the width of the MusicCursor when its a whole beat, 
	its crossing the Measure number (no complaints, but..)

- Random error when opening HTTP files (this errors does not always happens !!)
	Trying to open: http://www.mysongbook.com/files/c/collins/Collins%2C%20Phil%20-%20Another%20Day%20In%20Paradise.gp4
	java.lang.ArrayIndexOutOfBoundsException: 9
		at dguitar.codecs.guitarPro.GPDuration.valueOf(GPDuration.java:141)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readNote(GP4InputStream.java:471)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readBeat(GP4InputStream.java:311)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readMeasureTrackPair(GP4InputStream.java:411)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readPiece(GP4InputStream.java:235)
		at dguitar.codecs.guitarPro.GPInputStream.readPiece(GPInputStream.java:436)
		at dguitar.codecs.guitarPro.GPInputStream.readObject(GPInputStream.java:160)
		at dguitar.gui.SongPanel.readPieceFrom(SongPanel.java:662)
		at dguitar.gui.SongInternalFrame.readAndDisplay(SongInternalFrame.java:984)
		at dguitar.gui.DGuitar.readAndShow(DGuitar.java:2183)
		at dguitar.gui.DGuitar.menuOpenURLActionPerformed(DGuitar.java:1833)
		at dguitar.gui.DGuitar.access$10(DGuitar.java:1793)
		at dguitar.gui.DGuitar$10.actionPerformed(DGuitar.java:1583)
		at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	java.lang.ArrayIndexOutOfBoundsException: 58
		at dguitar.codecs.guitarPro.GPDuration.valueOf(GPDuration.java:141)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readNote(GP4InputStream.java:471)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readBeat(GP4InputStream.java:311)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readMeasureTrackPair(GP4InputStream.java:411)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readPiece(GP4InputStream.java:235)
		at dguitar.codecs.guitarPro.GPInputStream.readPiece(GPInputStream.java:436)
		at dguitar.codecs.guitarPro.GPInputStream.readObject(GPInputStream.java:160)
		at dguitar.gui.SongPanel.readPieceFrom(SongPanel.java:662)
		at dguitar.gui.SongInternalFrame.readAndDisplay(SongInternalFrame.java:984)
		at dguitar.gui.DGuitar.readAndShow(DGuitar.java:2183)
		at dguitar.gui.DGuitar.menuOpenURLActionPerformed(DGuitar.java:1833)
		at dguitar.gui.DGuitar.access$10(DGuitar.java:1793)
		at dguitar.gui.DGuitar$10.actionPerformed(DGuitar.java:1583)
		at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	java.lang.ArrayIndexOutOfBoundsException: 15
		at dguitar.codecs.guitarPro.GPDuration.valueOf(GPDuration.java:141)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readBeat(GP4InputStream.java:264)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readMeasureTrackPair(GP4InputStream.java:411)
		at dguitar.codecs.guitarPro.version4.GP4InputStream.readPiece(GP4InputStream.java:235)
		at dguitar.codecs.guitarPro.GPInputStream.readPiece(GPInputStream.java:436)
		at dguitar.codecs.guitarPro.GPInputStream.readObject(GPInputStream.java:160)
		at dguitar.gui.SongPanel.readPieceFrom(SongPanel.java:662)
		at dguitar.gui.SongInternalFrame.readAndDisplay(SongInternalFrame.java:984)
		at dguitar.gui.DGuitar.readAndShow(DGuitar.java:2183)
		at dguitar.gui.DGuitar.menuOpenURLActionPerformed(DGuitar.java:1833)
		at dguitar.gui.DGuitar.access$10(DGuitar.java:1793)
		at dguitar.gui.DGuitar$10.actionPerformed(DGuitar.java:1583)
		at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
		
NEW FEATURES
--------------
- Palm Mute notes that have a 28.0% occurence (higher than SLIDES 18.0% see EFFECTS.txt)
	- Understand how they are displayed and complexity of implementing it

- Create DGuitar ICON for program
	- Use the created ICON for main Window

- AutoScroll of DGuitar LOG window (no complaints, but expected/usefull)

- a SAVE option when the file been open from HTTP 
	save the byte sequence, no need to change CODECS for now

/ The colors options should also be available from the DGuitar menus, 
	 - allow user to change colors to all (open) pieces ..see SongAction methods  ;
	 X create/test a setDisplayOptions method at SongPanel
	 / create/test a setDisplayOptions method at SongInternalFrame
	 - when a ColorDialog is open it should alse refresh those colors
	 - call validate on SongPanel
	 - store the display Preferences in the DGuitar.properties

- Improve the way the Strings of MENUS are handled
	- abstract class java.util AbstractMap:
	allows to link one Object with Another :
		link StringKeys of menus with Integer of the menu IDs, consider HOT-KEY binding

	this should allow to use MENU_PROGRAM instead of "MENU_PROGRAM" when I18N
	- this can be used to evalute wich menu options was clicked.
		
- BARS should know when is required to relocate the EON LABELS 
	- to avoid unecesary call to paintEffects and improve repainting methods.
	- when the TOOLtip is show and then hidden, JAVA calls repaint on the objects that were covered

---------------------
FOR MATTHIEU WIPPLIEZ
---------------------
  - check the chords version 3 in version 4 files
	  - FILE: "Dimanche Matin Soleil.gp4" COULD NOT BE OPEN

		ERROR:  GP4decoder.GP4FormatException: 
			Chord Diagrams are in GP3 format
			Which are not documented
	
	    The readChordDiagram from GP3Decoder was used but it did not work

  - check the chord diagram in version 4 at the end of file
	  
  - check additional bytes at the end in files from version 3 or 4.

  - decode the version 1 (we will be able to open any guitar pro file)
      
  - wideVibrato and FadeIn are undocumented (on the GuitarPro format description)

-------------------
FOR CHRIS NASH
-------------------
 
- Adjustable tempo for playback 	

- Ability to mute channels

------------------------------------------------
OTHER DESIRED FEATURES LONG TERM - BRAINSTORMING
------------------------------------------------

- add this Windows options , Cascade, Tile, minimize all, restore all, etc

- Add and option to RE-DETECT available languages 

- create a DGIterator that allows to create a list of GTP files/folders and then perform different actions
	- plays them.
	- exports them to MIDI
	- export from GPx to GPy (x,y = [1,2,3,4])
	
	This DGIterator should ALSO work as an external tool that does not need DGuitar GUI.

- when the Color options are disabled...the MiniPanel color should be changed to gray 
	(disabling the buttons visually)

- when the view is MultiTab view, provide an option that moves the scroll bars simultaneously (when not playing)

- windows that are open from the PieceInternalFrame 
	- should be added to the destkop ?? or a Dialog (as no-modal, with parent)?

- GUI methods should be dependent of Abstract clases like SCORE,TRACK and so on
	- not linked direclty to GP4* classes
	- Design and created GUI components for the information that GTP4Decoder can read       
	    - Track information
	    - Other information (Tempo, Key, Octave,MixTableChange)

CODE
****

/ Clear UNUSED, OLD and Warning statements on all sources !!

/ Comment at least every method of any class !!!
	- when a new method, field or class is created document it inmediatly 

- Change all reference to PIECE...to SONG...for clarity

/ all variables in English ! (variables that contain "ant" should be changed to "prev"

/ make sure that the least posible calls to "validate()" and "invalidate()" is perfomed
