package org.open2jam.gui.parts;
import com.github.dtinth.partytime.server.Server;
import com.github.dtinth.partytime.server.ServerUI;
import com.sun.jna.NativeLibrary;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.ItemEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
import java.util.logging.Level;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableRowSorter;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.open2jam.Config;
import org.open2jam.GameOptions;
import org.open2jam.GameOptions.ChannelMod;
import org.open2jam.GameOptions.SpeedType;
import org.open2jam.GameOptions.VisibilityMod;
import org.open2jam.gui.ChartListTableModel;
import org.open2jam.gui.ChartModelLoader;
import org.open2jam.gui.ChartTableModel;
import org.open2jam.parsers.BMSWriter;
import org.open2jam.parsers.Chart;
import org.open2jam.parsers.ChartList;
import org.open2jam.render.Render;
import org.open2jam.game.judgment.BeatJudgment;
import org.open2jam.game.judgment.TimeJudgment;
import org.open2jam.sound.SoundSystemException;
import org.open2jam.util.Logger;
public class MusicSelection extends javax.swing.JPanel
implements PropertyChangeListener, ListSelectionListener {
private Server lastServer;
private class RenderThread extends Thread {
Container c;
Render r;
public RenderThread(Container c, Render r) {
this.c = c;
this.r = r;
}
@Override
public void run() {
c.setEnabled(false);
r.startRendering();
c.setEnabled(true);
}
}
private class PopupListener extends MouseAdapter {
private final JPopupMenu menu;
public PopupListener(JPopupMenu menu) {
this.menu = menu;
}
@Override
public void mousePressed(MouseEvent e) {
showPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
showPopup(e);
}
private void showPopup(MouseEvent e) {
if(e.isPopupTrigger()) {
Component c = e.getComponent();
if(c instanceof ListSelectionListener) {
JTable t = (JTable) c;
int row = t.rowAtPoint(e.getPoint());
t.getSelectionModel().setSelectionInterval(row, row);
}
if(menu == null) return;
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
}
private ChartListTableModel model_songlist;
private ChartTableModel model_chartlist;
//private File cwd;
private DisplayMode[] display_modes;
private int rank = 0;
private ChartList selected_chart;
private Chart selected_header;
private int last_model_idx;
private final TableRowSorter<ChartListTableModel> table_sorter;
private class FileItem {
File file;
public FileItem(File f) {
this.file = f;
}
@Override
public int hashCode() {
int hash = 7;
hash = 59 * hash + (this.file != null ? this.file.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object o) {
return (o instanceof FileItem) &&
((FileItem)o).file.equals(file);
}
@Override
public String toString() {
return file.getName();
}
}
/** Creates new form Interface */
public MusicSelection() {
initLogic();
initComponents();
load_progress.setVisible(false);
List<File> list = Config.getDirsList();
for(File f : list)combo_dirs.addItem(new FileItem(f));
File cwd = Config.getCwd();
if(cwd == null)
{
//just in case, should not go inside this if
if(!Config.getDirsList().isEmpty())
{
cwd =Config.getDirsList().get(0);
Config.setCwd(cwd);
loadDir(cwd);
}
else
openFileChooser();
}
else
loadDir(cwd);
table_sorter = new TableRowSorter<ChartListTableModel>(model_songlist);
table_songlist.setRowSorter(table_sorter);
txt_filter.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {updateFilter();}
@Override
public void removeUpdate(DocumentEvent e) {updateFilter();}
@Override
public void changedUpdate(DocumentEvent e) {}
});
javax.swing.table.TableColumn col;
col = table_songlist.getColumnModel().getColumn(0);
col.setPreferredWidth(180);
col = table_songlist.getColumnModel().getColumn(1);
col.setPreferredWidth(30);
col = table_songlist.getColumnModel().getColumn(2);
col.setPreferredWidth(80);
table_chartlist.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e)
{
if (e.getValueIsAdjusting()) return;
javax.swing.ListSelectionModel lsm = (javax.swing.ListSelectionModel)e.getSource();
if(lsm.isSelectionEmpty()) return;
int selectedRow = lsm.getMinSelectionIndex();
if(selectedRow < 0) return;
if(selected_chart.get(selectedRow) == selected_header)return;
selected_header = selected_chart.get(selectedRow);
updateInfo();
updateRankFromChartSelection();
}
});
readGameOptions();
btn_autoplay_keys.setEnabled(jc_autoplay.isSelected());
JPopupMenu popMenu = new JPopupMenu();
JMenuItem bmsConvItem = new JMenuItem("Convert to BMS");
bmsConvItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
try {
BMSWriter.export(selected_header, "converted");
} catch (IOException ex) {
java.util.logging.Logger.getLogger(MusicSelection.class.getName()).log(Level.SEVERE, "{0}", ex);
} finally {
System.gc();
}
}
});
popMenu.add(bmsConvItem);
popMenu.add(new JMenuItem("Convert to OJN"));
popMenu.add(new JMenuItem("Convert to SM"));
popMenu.add(new JMenuItem("Convert to SNP"));
//table_chartlist.addMouseListener(new PopupListener(popMenu));
table_songlist.addMouseListener(new PopupListener(popMenu));
}
private void readGameOptions() {
// TODO: read Config gameOptions and set them on the GUI
GameOptions go = Config.getGameOptions();
jc_autoplay.setSelected(go.isAutoplay());
jc_autosound.setSelected(go.isAutosound());
combo_channelModifier.setSelectedItem(go.getChannelModifier());
combo_visibilityModifier.setSelectedItem(go.getVisibilityModifier());
slider_main_vol.setValue(Math.round(go.getMasterVolume()*100));
slider_key_vol.setValue(Math.round(go.getKeyVolume()*100));
slider_bgm_vol.setValue(Math.round(go.getBGMVolume()*100));
js_hispeed.setValue(go.getSpeedMultiplier());
combo_speedType.setSelectedItem(go.getSpeedType());
txt_displayLag.setText(go.getDisplayLag() + "");
txt_audioLatency.setText(go.getAudioLatency() + "");
for(DisplayMode dm : display_modes)
{
if(go.isDisplaySaved(dm))
combo_displays.setSelectedItem(dm);
}
jc_full_screen.setSelected(go.isDisplayFullscreen());
jc_vsync.setSelected(go.isDisplayVsync());
jc_timed_judgment.setSelected(go.getJudgmentType() == GameOptions.JudgmentType.TimeJudgment);
}
/*
* the parent is telling us the window is closing
* now is a good time to save the game options
*/
public void windowClosing() {
GameOptions go = Config.getGameOptions();
go.setAutoplay(jc_autoplay.isSelected());
go.setAutosound(jc_autosound.isSelected());
go.setChannelModifier((ChannelMod)combo_channelModifier.getSelectedItem());
go.setVisibilityModifier((VisibilityMod)combo_visibilityModifier.getSelectedItem());
go.setMasterVolume(slider_main_vol.getValue()/100f);
go.setKeyVolume(slider_key_vol.getValue()/100f);
go.setBGMVolume(slider_bgm_vol.getValue()/100f);
go.setSpeedMultiplier((Double)js_hispeed.getValue());
go.setSpeedType((SpeedType)combo_speedType.getSelectedItem());
go.setDisplayFullscreen(jc_full_screen.isSelected());
go.setDisplayVsync(jc_vsync.isSelected());
go.setJudgmentType(jc_timed_judgment.isSelected() ? GameOptions.JudgmentType.TimeJudgment : GameOptions.JudgmentType.BeatJudgment);
go.setDisplay((DisplayMode)combo_displays.getSelectedItem());
Config.setGameOptions(go);
}
/** 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() {
rank_group = new javax.swing.ButtonGroup();
panel_list = new javax.swing.JPanel();
table_scroll = new javax.swing.JScrollPane();
table_songlist = new javax.swing.JTable();
txt_filter = new javax.swing.JTextField();
lbl_search = new javax.swing.JLabel();
bt_choose_dir = new javax.swing.JButton();
load_progress = new javax.swing.JProgressBar();
jLabel2 = new javax.swing.JLabel();
combo_dirs = new javax.swing.JComboBox();
btn_reload = new javax.swing.JButton();
btn_delete = new javax.swing.JButton();
panel_setting = new javax.swing.JPanel();
combo_displays = new javax.swing.JComboBox();
txt_res_height = new javax.swing.JTextField();
txt_res_width = new javax.swing.JTextField();
jc_vsync = new javax.swing.JCheckBox();
lbl_display = new javax.swing.JLabel();
jc_custom_size = new javax.swing.JCheckBox();
lbl_res_x = new javax.swing.JLabel();
jc_full_screen = new javax.swing.JCheckBox();
jLabel1 = new javax.swing.JLabel();
txt_displayLag = new javax.swing.JTextField();
cb_autoSyncDisplay = new javax.swing.JCheckBox();
jLabel3 = new javax.swing.JLabel();
txt_audioLatency = new javax.swing.JTextField();
cb_autoSyncAudio = new javax.swing.JCheckBox();
panel_song = new javax.swing.JPanel();
panel_modifiers = new javax.swing.JPanel();
lbl_main_vol = new javax.swing.JLabel();
slider_main_vol = new javax.swing.JSlider();
lbl_key_vol = new javax.swing.JLabel();
slider_key_vol = new javax.swing.JSlider();
lbl_bgm_vol = new javax.swing.JLabel();
slider_bgm_vol = new javax.swing.JSlider();
lbl_channelModifier = new javax.swing.JLabel();
combo_channelModifier = new javax.swing.JComboBox();
lbl_visibilityModifier = new javax.swing.JLabel();
combo_visibilityModifier = new javax.swing.JComboBox();
js_hispeed = new javax.swing.JSpinner();
lbl_rank = new javax.swing.JLabel();
jr_rank_easy = new javax.swing.JRadioButton();
jr_rank_normal = new javax.swing.JRadioButton();
jr_rank_hard = new javax.swing.JRadioButton();
jc_autoplay = new javax.swing.JCheckBox();
jc_timed_judgment = new javax.swing.JCheckBox();
combo_speedType = new javax.swing.JComboBox();
btn_autoplay_keys = new javax.swing.JButton();
jc_autosound = new javax.swing.JCheckBox();
panel_info = new javax.swing.JPanel();
lbl_level1 = new javax.swing.JLabel();
lbl_bpm1 = new javax.swing.JLabel();
lbl_time1 = new javax.swing.JLabel();
lbl_level = new javax.swing.JLabel();
lbl_genre1 = new javax.swing.JLabel();
lbl_filename = new javax.swing.JLabel();
lbl_genre = new javax.swing.JLabel();
lbl_artist = new javax.swing.JLabel();
lbl_title = new javax.swing.JLabel();
lbl_notes = new javax.swing.JLabel();
lbl_notes1 = new javax.swing.JLabel();
lbl_time = new javax.swing.JLabel();
lbl_keys1 = new javax.swing.JLabel();
lbl_bpm = new javax.swing.JLabel();
lbl_keys = new javax.swing.JLabel();
lbl_cover = new javax.swing.JLabel();
table_scroll2 = new javax.swing.JScrollPane();
table_chartlist = new javax.swing.JTable();
bt_play = new javax.swing.JButton();
cb_startPaused = new javax.swing.JCheckBox();
jLabel4 = new javax.swing.JLabel();
txtLocalMatchingServer = new javax.swing.JTextField();
btnCreateServer = new javax.swing.JButton();
setPreferredSize(new java.awt.Dimension(900, 673));
panel_list.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Selection List", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP));
table_songlist.setModel(model_songlist);
table_songlist.setAutoCreateRowSorter(true);
table_songlist.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table_songlist.getSelectionModel().addListSelectionListener(this);
table_scroll.setViewportView(table_songlist);
lbl_search.setText("Search:");
bt_choose_dir.setText("Choose dir");
bt_choose_dir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_choose_dirActionPerformed(evt);
}
});
load_progress.setStringPainted(true);
jLabel2.setText("Saved dirs:");
combo_dirs.setMaximumSize(new java.awt.Dimension(34, 35));
combo_dirs.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
combo_dirsItemStateChanged(evt);
}
});
btn_reload.setText("Reload");
btn_reload.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_reloadActionPerformed(evt);
}
});
btn_delete.setText("Remove Dir");
btn_delete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_deleteActionPerformed(evt);
}
});
combo_displays.setModel(new javax.swing.DefaultComboBoxModel(display_modes));
txt_res_height.setText("600");
txt_res_height.setEnabled(false);
txt_res_width.setText("800");
txt_res_width.setEnabled(false);
jc_vsync.setSelected(true);
jc_vsync.setText("Use VSync");
lbl_display.setText("Display:");
jc_custom_size.setFont(new java.awt.Font("Tahoma", 0, 10));
jc_custom_size.setText("Custom size:");
jc_custom_size.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jc_custom_size_clicked(evt);
}
});
lbl_res_x.setText("x");
jc_full_screen.setText("Full screen");
jLabel1.setText("Display Lag:");
txt_displayLag.setText("0");
txt_displayLag.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txt_displayLagActionPerformed(evt);
}
});
cb_autoSyncDisplay.setText("autosync");
cb_autoSyncDisplay.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cb_autoSyncDisplayActionPerformed(evt);
}
});
jLabel3.setText("Audio Latency:");
txt_audioLatency.setText("0");
txt_audioLatency.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txt_audioLatencyActionPerformed(evt);
}
});
cb_autoSyncAudio.setText("autosync");
cb_autoSyncAudio.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cb_autoSyncAudioActionPerformed(evt);
}
});
javax.swing.GroupLayout panel_settingLayout = new javax.swing.GroupLayout(panel_setting);
panel_setting.setLayout(panel_settingLayout);
panel_settingLayout.setHorizontalGroup(
panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_settingLayout.createSequentialGroup()
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_settingLayout.createSequentialGroup()
.addComponent(lbl_display)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(combo_displays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jc_custom_size, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txt_res_width, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lbl_res_x)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txt_res_height, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel_settingLayout.createSequentialGroup()
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jc_vsync)
.addComponent(jLabel1))
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_settingLayout.createSequentialGroup()
.addGap(58, 58, 58)
.addComponent(jc_full_screen))
.addGroup(panel_settingLayout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txt_displayLag)
.addComponent(txt_audioLatency, javax.swing.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cb_autoSyncDisplay)
.addComponent(cb_autoSyncAudio))
.addGap(4, 4, 4))))
.addComponent(jLabel3))
.addContainerGap(20, Short.MAX_VALUE))
);
panel_settingLayout.setVerticalGroup(
panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_settingLayout.createSequentialGroup()
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(txt_res_height, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_res_x)
.addComponent(txt_res_width, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jc_custom_size)
.addComponent(combo_displays, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_display))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jc_vsync)
.addComponent(jc_full_screen))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE)
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(txt_displayLag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cb_autoSyncDisplay))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_settingLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(txt_audioLatency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cb_autoSyncAudio)))
);
javax.swing.GroupLayout panel_listLayout = new javax.swing.GroupLayout(panel_list);
panel_list.setLayout(panel_listLayout);
panel_listLayout.setHorizontalGroup(
panel_listLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_listLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_listLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addGroup(panel_listLayout.createSequentialGroup()
.addComponent(bt_choose_dir)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(combo_dirs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(load_progress, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btn_reload, javax.swing.GroupLayout.PREFERRED_SIZE, 71, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btn_delete))
.addComponent(table_scroll))
.addContainerGap())
.addGroup(javax.swing.GroupLayout.Alignment.CENTER, panel_listLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(lbl_search)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txt_filter)
.addGap(10, 10, 10))
.addGroup(panel_listLayout.createSequentialGroup()
.addComponent(panel_setting, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panel_listLayout.setVerticalGroup(
panel_listLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_listLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_listLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bt_choose_dir)
.addComponent(jLabel2)
.addComponent(combo_dirs, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btn_reload)
.addComponent(btn_delete)
.addComponent(load_progress, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(table_scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_listLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txt_filter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_search))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panel_setting, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
panel_song.setName("");
panel_modifiers.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Modifiers", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP));
panel_modifiers.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
lbl_main_vol.setText("Main Volume:");
slider_main_vol.setPaintLabels(true);
slider_main_vol.setToolTipText("Main Volume");
slider_main_vol.setMaximumSize(new java.awt.Dimension(10, 32767));
lbl_key_vol.setText("Key Volume:");
slider_key_vol.setPaintLabels(true);
slider_key_vol.setToolTipText("Key Volume");
slider_key_vol.setValue(100);
slider_key_vol.setMaximumSize(new java.awt.Dimension(10, 32767));
lbl_bgm_vol.setText("BGM Volume:");
slider_bgm_vol.setPaintLabels(true);
slider_bgm_vol.setToolTipText("BGM Volume");
slider_bgm_vol.setValue(100);
lbl_channelModifier.setText("Channel Modifier:");
combo_channelModifier.setModel(new javax.swing.DefaultComboBoxModel(GameOptions.ChannelMod.values()));
lbl_visibilityModifier.setText("Visibility Modifier:");
combo_visibilityModifier.setModel(new javax.swing.DefaultComboBoxModel(GameOptions.VisibilityMod.values()));
js_hispeed.setModel(new javax.swing.SpinnerNumberModel(1.0d, 0.5d, 10.0d, 0.5d));
js_hispeed.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
lbl_rank.setText("Rank:");
rank_group.add(jr_rank_easy);
jr_rank_easy.setSelected(true);
jr_rank_easy.setText("Easy");
jr_rank_easy.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jr_rank_easy.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jr_rank_easy.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jr_rank_easyActionPerformed(evt);
}
});
rank_group.add(jr_rank_normal);
jr_rank_normal.setText("Normal");
jr_rank_normal.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jr_rank_normal.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jr_rank_normal.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jr_rank_normalActionPerformed(evt);
}
});
rank_group.add(jr_rank_hard);
jr_rank_hard.setText("Hard");
jr_rank_hard.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
jr_rank_hard.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jr_rank_hard.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jr_rank_hardActionPerformed(evt);
}
});
jc_autoplay.setText("Autoplay");
jc_autoplay.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jc_autoplayActionPerformed(evt);
}
});
jc_timed_judgment.setText("Use timed judgment");
jc_timed_judgment.setToolTipText("Like Bemani games");
combo_speedType.setModel(new javax.swing.DefaultComboBoxModel(GameOptions.SpeedType.values()));
btn_autoplay_keys.setText("Keys");
btn_autoplay_keys.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btn_autoplay_keysActionPerformed(evt);
}
});
jc_autosound.setText("AutoSound");
javax.swing.GroupLayout panel_modifiersLayout = new javax.swing.GroupLayout(panel_modifiers);
panel_modifiers.setLayout(panel_modifiersLayout);
panel_modifiersLayout.setHorizontalGroup(
panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addComponent(lbl_channelModifier)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(combo_channelModifier, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 96, Short.MAX_VALUE)
.addComponent(lbl_visibilityModifier)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(combo_visibilityModifier, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lbl_bgm_vol)
.addComponent(lbl_key_vol)
.addComponent(lbl_main_vol))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(slider_key_vol, javax.swing.GroupLayout.Alignment.TRAILING, 0, 0, Short.MAX_VALUE)
.addComponent(slider_bgm_vol, javax.swing.GroupLayout.Alignment.TRAILING, 0, 0, Short.MAX_VALUE)
.addComponent(slider_main_vol, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(lbl_rank)
.addGap(27, 27, 27)
.addComponent(jr_rank_easy)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jr_rank_normal)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jr_rank_hard))
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(combo_speedType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(js_hispeed, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addComponent(jc_timed_judgment)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jc_autosound)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jc_autoplay)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btn_autoplay_keys)))
.addContainerGap())
);
panel_modifiersLayout.setVerticalGroup(
panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createSequentialGroup()
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(lbl_main_vol)
.addComponent(slider_main_vol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_rank))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(lbl_key_vol)
.addComponent(slider_key_vol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(lbl_bgm_vol)
.addComponent(slider_bgm_vol, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(js_hispeed, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(combo_speedType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(jr_rank_easy)
.addComponent(jr_rank_normal)
.addComponent(jr_rank_hard))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_visibilityModifier)
.addComponent(combo_visibilityModifier, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(combo_channelModifier, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lbl_channelModifier)))
.addGap(18, 18, 18)
.addGroup(panel_modifiersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jc_timed_judgment)
.addComponent(btn_autoplay_keys)
.addComponent(jc_autoplay)
.addComponent(jc_autosound)))
);
panel_info.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEtchedBorder(), "Song Info", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.TOP));
lbl_level1.setText("Level:");
lbl_bpm1.setText("BPM:");
lbl_time1.setText("Time:");
lbl_level.setFont(lbl_level.getFont());
lbl_level.setText("content");
lbl_genre1.setText("Genre:");
lbl_filename.setFont(lbl_filename.getFont().deriveFont(lbl_filename.getFont().getSize()-1f));
lbl_filename.setText("filename");
lbl_genre.setFont(lbl_genre.getFont());
lbl_genre.setText("content");
lbl_artist.setFont(lbl_artist.getFont().deriveFont((lbl_artist.getFont().getStyle() | java.awt.Font.ITALIC)));
lbl_artist.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lbl_artist.setText("Artist");
lbl_title.setFont(lbl_title.getFont().deriveFont(lbl_title.getFont().getSize()+7f));
lbl_title.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lbl_title.setText("Title");
lbl_notes.setFont(lbl_notes.getFont());
lbl_notes.setText("content");
lbl_notes1.setText("Notes:");
lbl_time.setFont(lbl_time.getFont());
lbl_time.setText("content");
lbl_keys1.setText("Keys:");
lbl_bpm.setFont(lbl_bpm.getFont());
lbl_bpm.setText("content");
lbl_keys.setFont(lbl_keys.getFont());
lbl_keys.setText("content");
lbl_cover.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
lbl_cover.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
lbl_cover.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
lbl_cover.setIconTextGap(0);
lbl_cover.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
lbl_coverMouseClicked(evt);
}
});
table_chartlist.setModel(model_chartlist);
table_chartlist.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table_scroll2.setViewportView(table_chartlist);
javax.swing.GroupLayout panel_infoLayout = new javax.swing.GroupLayout(panel_info);
panel_info.setLayout(panel_infoLayout);
panel_infoLayout.setHorizontalGroup(
panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 473, Short.MAX_VALUE)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_infoLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(table_scroll2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE)
.addComponent(lbl_title, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE)
.addGroup(panel_infoLayout.createSequentialGroup()
.addComponent(lbl_cover, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(panel_infoLayout.createSequentialGroup()
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lbl_bpm1)
.addComponent(lbl_genre1)
.addComponent(lbl_level1)
.addComponent(lbl_notes1)
.addComponent(lbl_time1)
.addComponent(lbl_keys1))
.addGap(18, 18, 18)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(lbl_level, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
.addComponent(lbl_notes, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
.addComponent(lbl_time, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
.addComponent(lbl_genre, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
.addComponent(lbl_bpm, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)
.addComponent(lbl_keys, javax.swing.GroupLayout.DEFAULT_SIZE, 214, Short.MAX_VALUE)))
.addComponent(lbl_filename)))
.addComponent(lbl_artist, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE))
.addContainerGap()))
);
panel_infoLayout.setVerticalGroup(
panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 352, Short.MAX_VALUE)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_infoLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(lbl_cover, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(panel_infoLayout.createSequentialGroup()
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_bpm1)
.addComponent(lbl_bpm))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_genre)
.addComponent(lbl_genre1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_level)
.addComponent(lbl_level1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_notes1)
.addComponent(lbl_notes))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_time)
.addComponent(lbl_time1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(panel_infoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lbl_keys1)
.addComponent(lbl_keys))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(lbl_filename)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lbl_title, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(lbl_artist)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(table_scroll2, javax.swing.GroupLayout.DEFAULT_SIZE, 69, Short.MAX_VALUE)
.addContainerGap()))
);
javax.swing.GroupLayout panel_songLayout = new javax.swing.GroupLayout(panel_song);
panel_song.setLayout(panel_songLayout);
panel_songLayout.setHorizontalGroup(
panel_songLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panel_songLayout.createSequentialGroup()
.addContainerGap()
.addGroup(panel_songLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(panel_info, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panel_modifiers, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
panel_songLayout.setVerticalGroup(
panel_songLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panel_songLayout.createSequentialGroup()
.addComponent(panel_info, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panel_modifiers, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
bt_play.setFont(new java.awt.Font("Tahoma", 1, 24));
bt_play.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/open2jam_icon.png")));
bt_play.setText("PLAY !!!");
bt_play.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
bt_playActionPerformed(evt);
}
});
cb_startPaused.setText("Start Paused");
cb_startPaused.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cb_startPausedActionPerformed(evt);
}
});
jLabel4.setText("<html>Local Matching Server<br><small>(host:port)</small>");
txtLocalMatchingServer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtLocalMatchingServerActionPerformed(evt);
}
});
btnCreateServer.setText("Create Server");
btnCreateServer.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCreateServerActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(panel_song, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(bt_play, javax.swing.GroupLayout.PREFERRED_SIZE, 359, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cb_startPaused)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(panel_list, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(26, 26, 26)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(txtLocalMatchingServer, javax.swing.GroupLayout.PREFERRED_SIZE, 141, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnCreateServer)
.addGap(176, 176, 176))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(panel_song, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(panel_list, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(bt_play)
.addComponent(cb_startPaused)
.addComponent(txtLocalMatchingServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnCreateServer)
.addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(27, 27, 27))
);
}// </editor-fold>//GEN-END:initComponents
private void bt_choose_dirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_choose_dirActionPerformed
openFileChooser();
}//GEN-LAST:event_bt_choose_dirActionPerformed
private void btn_reloadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_reloadActionPerformed
updateSelection(Config.getCwd());
}//GEN-LAST:event_btn_reloadActionPerformed
private void btn_deleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_deleteActionPerformed
String str = "Are you sure?";
if(JOptionPane.showConfirmDialog(this, str, "Warning",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE)
!= JOptionPane.YES_OPTION) return;
ArrayList<File> dir_list = Config.getDirsList();
File rem = Config.getCwd();
Config.delCache(rem);
if(dir_list.contains(rem))
{
dir_list.remove(rem);
combo_dirs.removeItem(new FileItem(rem));
Config.setDirsList(dir_list);
}
if(dir_list.isEmpty())
openFileChooser();
else
{
File f = dir_list.get(0);
loadDir(f);
}
}//GEN-LAST:event_btn_deleteActionPerformed
private void lbl_coverMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_lbl_coverMouseClicked
if(selected_header == null)return;
BufferedImage i = selected_header.getCover();
if(i == null) return;
JOptionPane.showMessageDialog(this, null, "Cover",
JOptionPane.INFORMATION_MESSAGE, new ImageIcon(i));
}//GEN-LAST:event_lbl_coverMouseClicked
private void jc_custom_size_clicked(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jc_custom_size_clicked
if (evt.getStateChange() == ItemEvent.SELECTED){
combo_displays.setEnabled(false);
txt_res_width.setEnabled(true);
lbl_res_x.setEnabled(true);
txt_res_height.setEnabled(true);
}else{
txt_res_width.setEnabled(false);
lbl_res_x.setEnabled(false);
txt_res_height.setEnabled(false);
combo_displays.setEnabled(true);
}
}//GEN-LAST:event_jc_custom_size_clicked
private void bt_playActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bt_playActionPerformed
try {
if(selected_header == null) return;
final double hispeed = (Double) js_hispeed.getValue();
final DisplayMode dm;
if(jc_custom_size.isSelected()){ // custom size selected
int w,h;
try{
w = Integer.parseInt(txt_res_width.getText());
h = Integer.parseInt(txt_res_height.getText());
}catch(Exception e){
JOptionPane.showMessageDialog(this, "Invalid value on custom size", "Error", JOptionPane.WARNING_MESSAGE);
return;
}
dm = new DisplayMode(w,h);
}else{
dm = (DisplayMode) combo_displays.getSelectedItem();
}
final boolean vsync = jc_vsync.isSelected();
boolean fs = jc_full_screen.isSelected();
final boolean autoplay = jc_autoplay.isSelected();
final boolean autosound = jc_autosound.isSelected();
final boolean time_judgment = jc_timed_judgment.isSelected();
final SpeedType speed_type =(SpeedType) combo_speedType.getSelectedItem();
final ChannelMod channelModifier = (ChannelMod) combo_channelModifier.getSelectedItem();
final VisibilityMod visibilityModifier = (VisibilityMod) combo_visibilityModifier.getSelectedItem();
final float mainVol = slider_main_vol.getValue() / 100f;
final float keyVol = slider_key_vol.getValue() / 100f;
final float bgmVol = slider_bgm_vol.getValue() / 100f;
if(!dm.isFullscreenCapable() && fs) {
String str = "This monitor can't support the selected resolution.\n"
+ "Do you want to play it in windowed mode?";
if(JOptionPane.showConfirmDialog(this, str, "Warning",
JOptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE)
== JOptionPane.YES_OPTION)
fs = false;
}
final GameOptions go = Config.getGameOptions();
go.setAutoplay(autoplay);
go.setAutosound(autosound);
go.setChannelModifier(channelModifier);
go.setVisibilityModifier(visibilityModifier);
go.setMasterVolume(mainVol);
go.setKeyVolume(keyVol);
go.setBGMVolume(bgmVol);
go.setSpeedMultiplier(hispeed);
go.setSpeedType(speed_type);
go.setDisplayFullscreen(fs);
go.setDisplayVsync(vsync);
go.setJudgmentType(jc_timed_judgment.isSelected() ? GameOptions.JudgmentType.TimeJudgment : GameOptions.JudgmentType.BeatJudgment);
System.out.println(go.isAutoplay());
try{
go.setDisplayLag(Double.parseDouble(txt_displayLag.getText()));
}catch(Exception e){
JOptionPane.showMessageDialog(this, "Invalid display lag value", "Error", JOptionPane.WARNING_MESSAGE);
return;
}
try{
go.setAudioLatency(Double.parseDouble(txt_audioLatency.getText()));
}catch(Exception e){
JOptionPane.showMessageDialog(this, "Invalid audio latency value", "Error", JOptionPane.WARNING_MESSAGE);
return;
}
NativeLibrary.addSearchPath("vlc", go.getVLCLibraryPath());
final Render r;
r = new Render(selected_header, go, dm);
if (cb_startPaused.isSelected()) {
r.setStartPaused();
}
if (cb_autoSyncDisplay.isSelected()) {
r.setAutosyncDisplay();
r.setAutosyncCallback(new Render.AutosyncCallback() {
@Override
public void autosyncFinished(double displayLag) {
if (JOptionPane.showConfirmDialog(MusicSelection.this, "This display latency has changed from\n"
+ go.getDisplayLag() + "\nto\n" + displayLag + "\n\nSave this change?",
"Save Display Latency", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
go.setDisplayLag(displayLag);
txt_displayLag.setText(displayLag + "");
cb_autoSyncDisplay.setSelected(false);
}
}
});
}
else if (cb_autoSyncAudio.isSelected()) {
r.setAutosyncAudio();
r.setAutosyncCallback(new Render.AutosyncCallback() {
@Override
public void autosyncFinished(double audioLatency) {
if (JOptionPane.showConfirmDialog(MusicSelection.this, "This audio latency has changed from\n"
+ go.getAudioLatency() + "\nto\n" + audioLatency + "\n\nSave this change?",
"Save Audio Latency", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
go.setAudioLatency(audioLatency);
txt_audioLatency.setText(audioLatency + "");
cb_autoSyncAudio.setSelected(false);
}
}
});
}
r.setLocalMatchingServer(txtLocalMatchingServer.getText());
r.setRank(rank);
r.setJudge(jc_timed_judgment.isSelected()
? new TimeJudgment()
: new BeatJudgment());
if (lastServer != null && !lastServer.isClosed()) {
r.setServer(lastServer);
}
new RenderThread(this.getTopLevelAncestor(), r).start();
} catch (SoundSystemException ex) {
java.util.logging.Logger.getLogger(MusicSelection.class.getName()).log(Level.SEVERE, "{0}", ex);
}
}//GEN-LAST:event_bt_playActionPerformed
public void setRank(int rank) {
this.rank = rank;
if (rank == 0) jr_rank_easy.setSelected(true);
if (rank == 1) jr_rank_normal.setSelected(true);
if (rank == 2) jr_rank_hard.setSelected(true);
int sel_row = table_songlist.getSelectedRow();
if(sel_row >= 0)last_model_idx = table_songlist.convertRowIndexToModel(sel_row);
model_songlist.setRank(rank);
}
private void jr_rank_easyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jr_rank_easyActionPerformed
setRank(0);
}//GEN-LAST:event_jr_rank_easyActionPerformed
private void jr_rank_normalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jr_rank_normalActionPerformed
setRank(1);
}//GEN-LAST:event_jr_rank_normalActionPerformed
private void jr_rank_hardActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jr_rank_hardActionPerformed
setRank(2);
}//GEN-LAST:event_jr_rank_hardActionPerformed
private void combo_dirsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_combo_dirsItemStateChanged
if(combo_dirs.getSelectedIndex() == -1) return;
File dir = ((FileItem)combo_dirs.getSelectedItem()).file;
if(dir.equals(Config.getCwd())) return;
loadDir(dir);
}//GEN-LAST:event_combo_dirsItemStateChanged
private void jc_autoplayActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jc_autoplayActionPerformed
btn_autoplay_keys.setEnabled(jc_autoplay.isSelected());
}//GEN-LAST:event_jc_autoplayActionPerformed
private void btn_autoplay_keysActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btn_autoplay_keysActionPerformed
}//GEN-LAST:event_btn_autoplay_keysActionPerformed
private void txt_displayLagActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txt_displayLagActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txt_displayLagActionPerformed
private void cb_autoSyncDisplayActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cb_autoSyncDisplayActionPerformed
if (cb_autoSyncDisplay.isSelected()) cb_autoSyncAudio.setSelected(false);
}//GEN-LAST:event_cb_autoSyncDisplayActionPerformed
private void txt_audioLatencyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txt_audioLatencyActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txt_audioLatencyActionPerformed
private void cb_autoSyncAudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cb_autoSyncAudioActionPerformed
if (cb_autoSyncAudio.isSelected()) {
cb_autoSyncDisplay.setSelected(false);
jc_autosound.setSelected(true);
}
}//GEN-LAST:event_cb_autoSyncAudioActionPerformed
private void cb_startPausedActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cb_startPausedActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_cb_startPausedActionPerformed
private void txtLocalMatchingServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtLocalMatchingServerActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txtLocalMatchingServerActionPerformed
private void btnCreateServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCreateServerActionPerformed
String portText = JOptionPane.showInputDialog("What port?", "7273");
if (portText == null || portText.isEmpty()) {
return;
}
int port = 0;
try {
port = Integer.parseInt(portText);
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Error", "Invalid port", JOptionPane.ERROR_MESSAGE, null);
return;
}
txtLocalMatchingServer.setText("localhost:" + port);
Server server = new Server(port);
ServerUI ui = new ServerUI(server);
SwingUtilities.invokeLater(ui);
server.start();
lastServer = server;
}//GEN-LAST:event_btnCreateServerActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton bt_choose_dir;
private javax.swing.JButton bt_play;
private javax.swing.JButton btnCreateServer;
private javax.swing.JButton btn_autoplay_keys;
private javax.swing.JButton btn_delete;
private javax.swing.JButton btn_reload;
private javax.swing.JCheckBox cb_autoSyncAudio;
private javax.swing.JCheckBox cb_autoSyncDisplay;
private javax.swing.JCheckBox cb_startPaused;
private javax.swing.JComboBox combo_channelModifier;
private javax.swing.JComboBox combo_dirs;
private javax.swing.JComboBox combo_displays;
private javax.swing.JComboBox combo_speedType;
private javax.swing.JComboBox combo_visibilityModifier;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JCheckBox jc_autoplay;
private javax.swing.JCheckBox jc_autosound;
private javax.swing.JCheckBox jc_custom_size;
private javax.swing.JCheckBox jc_full_screen;
private javax.swing.JCheckBox jc_timed_judgment;
private javax.swing.JCheckBox jc_vsync;
private javax.swing.JRadioButton jr_rank_easy;
private javax.swing.JRadioButton jr_rank_hard;
private javax.swing.JRadioButton jr_rank_normal;
private javax.swing.JSpinner js_hispeed;
private javax.swing.JLabel lbl_artist;
private javax.swing.JLabel lbl_bgm_vol;
private javax.swing.JLabel lbl_bpm;
private javax.swing.JLabel lbl_bpm1;
private javax.swing.JLabel lbl_channelModifier;
private javax.swing.JLabel lbl_cover;
private javax.swing.JLabel lbl_display;
private javax.swing.JLabel lbl_filename;
private javax.swing.JLabel lbl_genre;
private javax.swing.JLabel lbl_genre1;
private javax.swing.JLabel lbl_key_vol;
private javax.swing.JLabel lbl_keys;
private javax.swing.JLabel lbl_keys1;
private javax.swing.JLabel lbl_level;
private javax.swing.JLabel lbl_level1;
private javax.swing.JLabel lbl_main_vol;
private javax.swing.JLabel lbl_notes;
private javax.swing.JLabel lbl_notes1;
private javax.swing.JLabel lbl_rank;
private javax.swing.JLabel lbl_res_x;
private javax.swing.JLabel lbl_search;
private javax.swing.JLabel lbl_time;
private javax.swing.JLabel lbl_time1;
private javax.swing.JLabel lbl_title;
private javax.swing.JLabel lbl_visibilityModifier;
private javax.swing.JProgressBar load_progress;
private javax.swing.JPanel panel_info;
private javax.swing.JPanel panel_list;
private javax.swing.JPanel panel_modifiers;
private javax.swing.JPanel panel_setting;
private javax.swing.JPanel panel_song;
private javax.swing.ButtonGroup rank_group;
private javax.swing.JSlider slider_bgm_vol;
private javax.swing.JSlider slider_key_vol;
private javax.swing.JSlider slider_main_vol;
private javax.swing.JTable table_chartlist;
private javax.swing.JScrollPane table_scroll;
private javax.swing.JScrollPane table_scroll2;
private javax.swing.JTable table_songlist;
private javax.swing.JTextField txtLocalMatchingServer;
private javax.swing.JTextField txt_audioLatency;
private javax.swing.JTextField txt_displayLag;
private javax.swing.JTextField txt_filter;
private javax.swing.JTextField txt_res_height;
private javax.swing.JTextField txt_res_width;
// End of variables declaration//GEN-END:variables
private void initLogic() {
try {
List<DisplayMode> list = Arrays.asList(Display.getAvailableDisplayModes());
Collections.sort(list, new Comparator<DisplayMode>() {
@Override
public int compare(DisplayMode dm1, DisplayMode dm2) {
if(dm1.getBitsPerPixel() == dm2.getBitsPerPixel())
{
if(dm1.getWidth() == dm2.getWidth())
{
if(dm1.getHeight() == dm2.getHeight())
{
if(dm1.getFrequency() > dm2.getFrequency())return -1;
else if(dm1.getFrequency() < dm2.getFrequency())return 1;
else return 0;
}
else if(dm1.getHeight() > dm2.getHeight())return -1;
else return 1;
}
else if(dm1.getWidth() > dm2.getWidth())return -1;
else return 1;
}
else if(dm1.getBitsPerPixel() > dm2.getBitsPerPixel()) return -1;
return 1;
}
});
display_modes = list.toArray(new DisplayMode[list.size()]);
} catch (LWJGLException ex) {
Logger.global.log(Level.WARNING, "Could not get the display modes !! {0}", ex.getMessage());
display_modes = new DisplayMode[0];
}
model_songlist = new ChartListTableModel();
model_chartlist = new ChartTableModel();
}
private void loadDir(File dir)
{
Config.setCwd(dir);
if(dir == null) return;
ArrayList<ChartList> l = Config.getCache(dir);
if(l == null) {
updateSelection(dir);
} else {
model_songlist.setRawList(l);
}
ArrayList<File> dir_list = Config.getDirsList();
if(!dir_list.contains(dir))
{
dir_list.add(dir);
combo_dirs.addItem(new FileItem(dir));
Config.setDirsList(dir_list);
}
// update combo box dir list
//System.out.println("set "+dir);
combo_dirs.setSelectedItem(new FileItem(dir));
}
private void openFileChooser()
{
if(Config.getDirsList().isEmpty())
Config.setCwd(null);
JFileChooser jfc = new JFileChooser();
jfc.setCurrentDirectory(Config.getCwd());
jfc.setDialogTitle("Choose a directory");
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
jfc.setAcceptAllFileFilterUsed(false);
if (jfc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
loadDir(jfc.getSelectedFile());
}
// else
// {
// JOptionPane.showMessageDialog(this, "You haven't selected any directory. Byebye...", "You failed to humanity :(", JOptionPane.ERROR_MESSAGE);
// System.exit(1);
// }
}
private void updateSelection(File f) {
bt_choose_dir.setEnabled(false);
btn_reload.setVisible(false);
btn_delete.setVisible(false);
combo_dirs.setEnabled(false);
txt_filter.setEnabled(false);
table_songlist.setEnabled(false);
load_progress.setValue(0);
load_progress.setVisible(true);
ChartModelLoader task = new ChartModelLoader(model_songlist, f);
task.addPropertyChangeListener(this);
task.execute();
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if("progress".equals(evt.getPropertyName()))
{
int i = (Integer) evt.getNewValue();
load_progress.setValue(i);
if(i == 100)
{
bt_choose_dir.setEnabled(true);
btn_delete.setVisible(true);
combo_dirs.setEnabled(true);
btn_reload.setVisible(true);
load_progress.setVisible(false);
txt_filter.setEnabled(true);
table_songlist.setEnabled(true);
}
}
}
void updateFilter() {
try {
if(txt_filter.getText().length() == 0)table_sorter.setRowFilter(null);
else table_sorter.setRowFilter(RowFilter.regexFilter("(?i)"+txt_filter.getText()));
} catch (java.util.regex.PatternSyntaxException ignored) {
}
}
@Override
public void valueChanged(ListSelectionEvent e) {
int i = table_songlist.getSelectedRow();
if(i < 0 && last_model_idx >= 0){
try {
i = last_model_idx;
int i_view = table_songlist.convertRowIndexToView(i);
table_songlist.getSelectionModel().setSelectionInterval(0, i_view);
table_scroll.getVerticalScrollBar().setValue(table_songlist.getCellRect(i_view, 0, false).y);
} catch (IndexOutOfBoundsException up) {
table_songlist.getSelectionModel().setSelectionInterval(0, -1);
// not sure what to do with it here...
}
}else{
i = table_songlist.convertRowIndexToModel(i);
}
if(model_songlist.getRow(i) == selected_chart)return;
selected_chart = model_songlist.getRow(i);
if(selected_chart.size() > rank)selected_header = selected_chart.get(rank);
if(selected_chart != model_chartlist.getChartList()){
model_chartlist.clear();
model_chartlist.setChartList(selected_chart);
}
updateChartSelectionFromRank();
updateInfo();
}
private void updateChartSelectionFromRank() {
if (selected_chart == null) return;
if (rank >= selected_chart.size())
table_chartlist.getSelectionModel().setSelectionInterval(0, 0);
else
table_chartlist.getSelectionModel().setSelectionInterval(0, rank);
}
private void updateRankFromChartSelection() {
if (selected_chart == null) return;
int selectedIndex = table_chartlist.getSelectedRow();
if (0 <= selectedIndex && selectedIndex < 3) setRank(selectedIndex);
}
private DecimalFormat bpm_format = new DecimalFormat(".##");
private void updateInfo()
{
if(selected_header == null)return;
if(!selected_header.getSource().exists()) {JOptionPane.showMessageDialog(this, "Doesn't Exist"); return;}
lbl_artist.setText(resizeString(selected_header.getArtist(), 40));
lbl_title.setText(resizeString(selected_header.getTitle(), 30));
lbl_filename.setText(resizeString(selected_header.getSource().getName(), 30));
lbl_genre.setText(resizeString(selected_header.getGenre(), 30));
lbl_level.setText(selected_header.getLevel()+"");
lbl_bpm.setText(bpm_format.format(selected_header.getBPM()));
lbl_notes.setText(selected_header.getNoteCount()+"");
lbl_keys.setText(selected_header.getKeys()+"");
lbl_time.setText(time2Text(selected_header.getDuration()));
BufferedImage i = selected_header.getCover();
if(i != null)
lbl_cover.setIcon(new ImageIcon(i.getScaledInstance(
lbl_cover.getWidth(),
lbl_cover.getHeight(),
BufferedImage.SCALE_SMOOTH
)));
else
lbl_cover.setIcon(null);
}
private String time2Text(int secs) {
int h = secs / 60;
int m = secs % 60;
return m < 10 ? h+":0"+m : h+":"+m;
}
private String resizeString(String string, int size)
{
if(string == null)return "";
if(string.length() > size)
string = string.substring(0, size)+"...";
return string;
}
}