/*
* Copyright 2005-2010 Samuel Mello & Eduardo Schnell
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 or later of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/*
* SongEditorFrame.java
*
* Created on 26 de Dezembro de 2005, 21:14
*/
package datasoul.serviceitems.song;
import java.io.File;
import java.io.FileOutputStream;
import javax.swing.JOptionPane;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import datasoul.DatasoulMainForm;
import datasoul.config.ConfigObj;
import datasoul.config.WindowPropConfig;
import datasoul.servicelist.ServiceListExporterPanel;
import datasoul.util.ShowDialog;
/**
*
* @author Administrador
*/
public class SongEditorForm extends javax.swing.JFrame {
/**
*
*/
private static final long serialVersionUID = -980421668741654819L;
private Song song;
private boolean newSong;
boolean updateSize = false;
/**
* Creates new form SongEditorFrame
*/
public SongEditorForm(Song songIn) {
initComponents();
DatasoulMainForm.setDatasoulIcon(this);
WindowPropConfig.getInstance().getSongEditor(this);
updateSize = true;
song = songIn;
this.setTitle(songIn.getFileName());
//fill object
fillGuiValues();
newSong = false;
initTextAreas();
cbUpdateSongLibrary.setVisible(song.isClone());
}
public SongEditorForm() {
initComponents();
DatasoulMainForm.setDatasoulIcon(this);
WindowPropConfig.getInstance().getSongEditor(this);
updateSize = true;
song = new Song();
this.setTitle("");
newSong = true;
initTextAreas();
cbUpdateSongLibrary.setVisible(song.isClone());
}
private void initTextAreas(){
songChordEditorComplete.init();
songChordEditorSimple.init();
textLyrics.setCaretPosition(0);
textSplitPanel1.registerTextArea(textLyrics);
textSplitPanel1.setVisible(btnShowSplit.isSelected());
btnShowChordsActionPerformed(null);
btnShowTabsActionPerformed(null);
}
private void fillGuiValues(){
fieldName.setText(song.getTitle());
fieldAuthor.setText(song.getSongAuthor());
textLyrics.setText(song.getText());
songChordEditorComplete.setText(song.getChordsComplete());
songChordEditorSimple.setText(song.getChordsSimplified());
txtCopyright.setText(song.getCopyright());
txtSongSource.setText(song.getSongSource());
}
private boolean hasChanged(){
return
!song.getTitle().equals(fieldName.getText()) ||
!song.getSongAuthor().equals(fieldAuthor.getText()) ||
!song.getText().equals(textLyrics.getText()) ||
!song.getChordsComplete().equals(songChordEditorComplete.getText()) ||
!song.getChordsSimplified().equals(songChordEditorSimple.getText()) ||
!song.getCopyright().equals(txtCopyright.getText()) ||
!song.getSongSource().equals(txtSongSource.getText());
}
private void updateValues(){
song.setTitle(fieldName.getText());
song.setSongAuthor(fieldAuthor.getText());
song.setText(textLyrics.getText());
song.setChordsComplete(songChordEditorComplete.getText());
song.setChordsSimplified(songChordEditorSimple.getText());
song.setCopyright(txtCopyright.getText());
song.setSongSource(txtSongSource.getText());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
fieldName = new javax.swing.JTextField();
labelName = new javax.swing.JLabel();
labelAuthor = new javax.swing.JLabel();
fieldAuthor = new javax.swing.JTextField();
tabSong = new javax.swing.JTabbedPane();
pnlLyricsTab = new javax.swing.JPanel();
textSplitPanel1 = new datasoul.util.TextSplitPanel();
jScrollPane1 = new javax.swing.JScrollPane();
textLyrics = new datasoul.util.HighlightTextArea();
songChordEditorComplete = new datasoul.serviceitems.song.SongChordEditorPanel();
songChordEditorSimple = new datasoul.serviceitems.song.SongChordEditorPanel();
jLabel3 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
txtCopyright = new javax.swing.JTextField();
txtSongSource = new javax.swing.JTextField();
cbUpdateSongLibrary = new javax.swing.JCheckBox();
jToolBar1 = new javax.swing.JToolBar();
btnSave = new javax.swing.JButton();
btnPrint = new javax.swing.JButton();
btnExport = new javax.swing.JButton();
jSeparator1 = new javax.swing.JToolBar.Separator();
btnShowSplit = new javax.swing.JToggleButton();
btnShowChords = new javax.swing.JToggleButton();
btnShowTabs = new javax.swing.JToggleButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
formComponentResized(evt);
}
});
fieldName.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(java.awt.event.KeyEvent evt) {
fieldNameKeyTyped(evt);
}
});
java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("datasoul/internationalize"); // NOI18N
labelName.setText(bundle.getString("NAME")); // NOI18N
labelName.setFocusable(false);
labelAuthor.setText(bundle.getString("AUTHOR")); // NOI18N
labelAuthor.setFocusable(false);
tabSong.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
textChordsCompleteKeyPressed(evt);
}
});
textLyrics.setColumns(20);
textLyrics.setRows(5);
jScrollPane1.setViewportView(textLyrics);
javax.swing.GroupLayout pnlLyricsTabLayout = new javax.swing.GroupLayout(pnlLyricsTab);
pnlLyricsTab.setLayout(pnlLyricsTabLayout);
pnlLyricsTabLayout.setHorizontalGroup(
pnlLyricsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(textSplitPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 545, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 545, Short.MAX_VALUE)
);
pnlLyricsTabLayout.setVerticalGroup(
pnlLyricsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(pnlLyricsTabLayout.createSequentialGroup()
.addComponent(textSplitPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE))
);
tabSong.addTab(bundle.getString("LYRICS"), pnlLyricsTab); // NOI18N
tabSong.addTab(bundle.getString("CHORDS COMPLETE"), songChordEditorComplete); // NOI18N
tabSong.addTab(bundle.getString("CHORDS SIMPLIFIED"), songChordEditorSimple); // NOI18N
jLabel3.setFont(new java.awt.Font("Dialog", 2, 10));
jLabel3.setText(bundle.getString("* USE A LINE WITH == TO SPLIT SLIDES AND A LINE WITH === TO SPLIT SESSIONS")); // NOI18N
jLabel5.setText(bundle.getString("COPYRIGHT")); // NOI18N
jLabel6.setText(bundle.getString("SOURCE")); // NOI18N
txtCopyright.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtCopyrightActionPerformed(evt);
}
});
cbUpdateSongLibrary.setText(bundle.getString("UPDATE SONG LIBRARY")); // NOI18N
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
btnSave.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/document-save_big.png"))); // NOI18N
btnSave.setToolTipText(bundle.getString("SAVE")); // NOI18N
btnSave.setBorderPainted(false);
btnSave.setFocusable(false);
btnSave.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnSave.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSaveActionPerformed(evt);
}
});
jToolBar1.add(btnSave);
btnPrint.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/document-print.png"))); // NOI18N
btnPrint.setToolTipText(bundle.getString("PRINT")); // NOI18N
btnPrint.setBorderPainted(false);
btnPrint.setFocusable(false);
btnPrint.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
btnPrint.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
btnPrint.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnPrintActionPerformed(evt);
}
});
jToolBar1.add(btnPrint);
btnExport.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/x-office-document_big.png"))); // NOI18N
btnExport.setText(bundle.getString("EXPORT")); // NOI18N
btnExport.setBorderPainted(false);
btnExport.setFocusable(false);
btnExport.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnExportActionPerformed(evt);
}
});
jToolBar1.add(btnExport);
jToolBar1.add(jSeparator1);
btnShowSplit.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/format-justify-center.png"))); // NOI18N
btnShowSplit.setText(bundle.getString("SPLIT OPTIONS")); // NOI18N
btnShowSplit.setFocusable(false);
btnShowSplit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnShowSplitActionPerformed(evt);
}
});
jToolBar1.add(btnShowSplit);
btnShowChords.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/stock_effects-sound.png"))); // NOI18N
btnShowChords.setText(bundle.getString("TRANSPOSITION")); // NOI18N
btnShowChords.setFocusable(false);
btnShowChords.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnShowChordsActionPerformed(evt);
}
});
jToolBar1.add(btnShowChords);
btnShowTabs.setIcon(new javax.swing.ImageIcon(getClass().getResource("/datasoul/icons/v2/stock_example.png"))); // NOI18N
btnShowTabs.setText(bundle.getString("GUITAR TABS")); // NOI18N
btnShowTabs.setFocusable(false);
btnShowTabs.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnShowTabsActionPerformed(evt);
}
});
jToolBar1.add(btnShowTabs);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 581, Short.MAX_VALUE)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel6)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(labelName, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(labelAuthor))
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(fieldName, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
.addComponent(fieldAuthor, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
.addComponent(txtCopyright, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)
.addComponent(txtSongSource, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)))
.addComponent(tabSong, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE))
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cbUpdateSongLibrary)
.addComponent(jLabel3))
.addContainerGap(113, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelName)
.addComponent(fieldName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(labelAuthor)
.addComponent(fieldAuthor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(txtCopyright, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(txtSongSource, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabSong, javax.swing.GroupLayout.DEFAULT_SIZE, 283, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cbUpdateSongLibrary)
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
private boolean save(){
if(this.fieldName.getText().equals("")){
JOptionPane.showMessageDialog(this,
java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("PLEASE FILL THE FIELD") +" \"" +
java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("NAME") + "\".");
return false;
}
// if editing a Clone (from the ServiceList), just update the values
// if editing from the Song library, write the .song file.
if (song.isClone() && !cbUpdateSongLibrary.isSelected()){
updateValues();
}else{
String filename = this.fieldName.getText();
if(!filename.contains(".song"))
filename = filename + ".song";
String path = ConfigObj.getActiveInstance().getStoragePathSongs() + File.separator +filename;
if(!path.equals(song.getFilePath())){
File file = new File(song.getFilePath());
file.delete();
}
song.setFilePath(path);
saveFile();
AllSongsListTable.getInstance().refreshSong(filename);
}
return true;
}
private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed
save();
}//GEN-LAST:event_btnSaveActionPerformed
private void textChordsCompleteKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_textChordsCompleteKeyPressed
}//GEN-LAST:event_textChordsCompleteKeyPressed
private void fieldNameKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_fieldNameKeyTyped
if(evt.getKeyCode()==16)
return;
// samuelm: changed to check against disallowd chars to avoid problems with non-english chars
//String allowed="ZXCVBNMASDFGHJKL?QWERTYUIOPzxcvbnmasdfghjkl?qwertyuiop1234567890'???????????";
String disallowed = "\\/:*?\"<>|";
if(disallowed.contains(String.valueOf(evt.getKeyChar())))
evt.consume();
}//GEN-LAST:event_fieldNameKeyTyped
private void txtCopyrightActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCopyrightActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtCopyrightActionPerformed
private void btnShowSplitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnShowSplitActionPerformed
textSplitPanel1.setVisible(btnShowSplit.isSelected());
}//GEN-LAST:event_btnShowSplitActionPerformed
private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
if (updateSize)
WindowPropConfig.getInstance().setSongEditor(this);
}//GEN-LAST:event_formComponentResized
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
if (hasChanged()){
int resp = JOptionPane.showConfirmDialog(this, java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("SAVE THE CHANGES?"), "Datasoul", JOptionPane.YES_NO_CANCEL_OPTION );
if (resp == JOptionPane.YES_OPTION){
if (save()){
this.dispose();
}
}else if (resp == JOptionPane.NO_OPTION){
this.dispose();
}
}else{
this.dispose();
}
}//GEN-LAST:event_formWindowClosing
private void btnShowChordsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnShowChordsActionPerformed
songChordEditorComplete.setTransposeVisible(btnShowChords.isSelected());
songChordEditorSimple.setTransposeVisible(btnShowChords.isSelected());
}//GEN-LAST:event_btnShowChordsActionPerformed
private void btnShowTabsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnShowTabsActionPerformed
songChordEditorComplete.setTabsVisible(btnShowTabs.isSelected());
songChordEditorSimple.setTabsVisible(btnShowTabs.isSelected());
}//GEN-LAST:event_btnShowTabsActionPerformed
private void exportPrintSong(int mode){
if (hasChanged()){
int resp = JOptionPane.showConfirmDialog(this, java.util.ResourceBundle.getBundle("datasoul/internationalize").getString("THE SONG WILL BE SAVED. CONTINUE?"), "Datasoul", JOptionPane.YES_NO_OPTION );
if (resp == JOptionPane.YES_OPTION){
if (!save()){
return;
}
}else {
return;
}
}
ServiceListExporterPanel slep = new ServiceListExporterPanel();
slep.setLocationRelativeTo(this);
slep.setSingleSong(song);
slep.setMode(mode);
slep.setVisible(true);
}
private void btnExportActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExportActionPerformed
exportPrintSong(ServiceListExporterPanel.MODE_EXPORT);
}//GEN-LAST:event_btnExportActionPerformed
private void btnPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnPrintActionPerformed
exportPrintSong(ServiceListExporterPanel.MODE_PRINT);
}//GEN-LAST:event_btnPrintActionPerformed
private void saveFile(){
updateValues();
try{
Node node = song.writeObject(null);
Document doc = node.getOwnerDocument();
doc.appendChild( node); // Add Root to Document
FileOutputStream fos = new FileOutputStream(song.getFilePath());
Source source = new DOMSource(doc);
// Prepare the output file
Result result = new StreamResult(fos);
// Write the DOM document to the file
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.setOutputProperty(OutputKeys.INDENT, "yes");
xformer.transform(source, result);
fos.close();
} catch(Exception e){
ShowDialog.showWriteFileError(song.getFileName(), e);
}
if(newSong){
AllSongsListTable.getInstance().addItem(song);
newSong = false;
AllSongsListTable.getInstance().sortByName();
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btnExport;
private javax.swing.JButton btnPrint;
private javax.swing.JButton btnSave;
private javax.swing.JToggleButton btnShowChords;
private javax.swing.JToggleButton btnShowSplit;
private javax.swing.JToggleButton btnShowTabs;
private javax.swing.JCheckBox cbUpdateSongLibrary;
private javax.swing.JTextField fieldAuthor;
private javax.swing.JTextField fieldName;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JLabel labelAuthor;
private javax.swing.JLabel labelName;
private javax.swing.JPanel pnlLyricsTab;
private datasoul.serviceitems.song.SongChordEditorPanel songChordEditorComplete;
private datasoul.serviceitems.song.SongChordEditorPanel songChordEditorSimple;
private javax.swing.JTabbedPane tabSong;
private datasoul.util.HighlightTextArea textLyrics;
private datasoul.util.TextSplitPanel textSplitPanel1;
private javax.swing.JTextField txtCopyright;
private javax.swing.JTextField txtSongSource;
// End of variables declaration//GEN-END:variables
}