/**
*
* @author pquiring
*
* Created : Jan 15, 2014
*/
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import javaforce.JF;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class MainPanel extends javax.swing.JPanel implements KeyEventDispatcher {
/**
* Creates new form MainPanel
*/
public MainPanel() {
initComponents();
KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
This = this;
}
/**
* 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.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tabs = new javax.swing.JTabbedPane();
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/play.png"))); // NOI18N
jButton1.setFocusable(false);
jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jToolBar1.add(jButton1);
jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/stop.png"))); // NOI18N
jButton2.setFocusable(false);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jToolBar1.add(jButton2);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 528, Short.MAX_VALUE)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabs, javax.swing.GroupLayout.DEFAULT_SIZE, 551, Short.MAX_VALUE))
);
}// </editor-fold>//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.playSong();
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.stopSong();
}//GEN-LAST:event_jButton2ActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JTabbedPane tabs;
// End of variables declaration//GEN-END:variables
public static String currentPath = JF.getUserPath() + "/Music";
public static MainPanel This;
public void newSong() {
SongPanel song = new SongPanel();
tabs.add(song, "Untitled");
}
public void open() {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.addChoosableFileFilter(new FileNameExtensionFilter("Music Files (*.mproj)", "mproj"));
chooser.setFileFilter(chooser.getChoosableFileFilters()[1]); //use first added filefilter added
chooser.setMultiSelectionEnabled(false);
chooser.setCurrentDirectory(new File(currentPath));
if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return;
File file = chooser.getSelectedFile();
currentPath = file.getParent();
if (currentPath == null) currentPath = JF.getUserPath() + "/Music";
String fn = file.getAbsolutePath();
if (!fn.toLowerCase().endsWith(".mproj")) fn += ".mproj";
SongPanel song = new SongPanel();
if (!song.load(fn)) return;
String name = file.getName();
tabs.add(song, name.substring(0, name.length() - 6));
}
public void save() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.save();
}
public void close() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.close();
tabs.remove(panel);
}
private SongPanel getSongPanel(JComponent src) {
if (src instanceof SongPanel) return (SongPanel)src;
Object parent = src.getParent();
if (parent == null) return null;
if (!(parent instanceof JComponent)) return null;
return getSongPanel((JComponent)parent);
}
public boolean dispatchKeyEvent(KeyEvent e) {
Object awtsrc = e.getSource();
if (!(awtsrc instanceof JComponent)) return false;
JComponent src = (JComponent)awtsrc;
SongPanel panel = getSongPanel(src);
if (panel == null) return false;
int id = e.getID();
char ch = e.getKeyChar();
int cc = e.getKeyCode();
switch (id) {
case KeyEvent.KEY_TYPED:
break;
case KeyEvent.KEY_PRESSED:
switch (cc) {
case KeyEvent.VK_F1: panel.selectTab(0); break;
case KeyEvent.VK_F2: panel.selectTab(1); break;
case KeyEvent.VK_F3: panel.selectTab(2); break;
case KeyEvent.VK_F4: panel.selectTab(3); break;
}
break;
case KeyEvent.KEY_RELEASED:
break;
}
return false;
}
public void setTitle(SongPanel panel, String title) {
for(int a=0;a<tabs.getTabCount();a++) {
if (tabs.getComponentAt(a) == panel) {
tabs.setTitleAt(a, title);
break;
}
}
}
public void insertRow() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.insertRow();
}
public void deleteRow() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.deleteRow();
}
public void dupPattern() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.dupPattern();
}
public void export() {
SongPanel panel = (SongPanel)tabs.getSelectedComponent();
if (panel == null) return;
panel.export();
}
}