/*
* Copyright (c) 2008, 2009, 2010, 2011 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
*/
package com.tulskiy.musique.gui.dialogs;
import com.tulskiy.musique.audio.AudioFileReader;
import com.tulskiy.musique.audio.player.io.AudioOutput;
import com.tulskiy.musique.gui.library.LibraryAction;
import com.tulskiy.musique.spi.Plugin;
import com.tulskiy.musique.system.Application;
import com.tulskiy.musique.system.configuration.AlbumArtConfiguration;
import com.tulskiy.musique.system.configuration.Configuration;
import com.tulskiy.musique.system.configuration.LibraryConfiguration;
import com.tulskiy.musique.util.Util;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Mixer;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.plaf.metal.MetalLookAndFeel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Author: Denis Tulskiy
* Date: 12/23/10
*/
public class OptionsDialog extends JDialog {
private Application app = Application.getInstance();
private Configuration config = app.getConfiguration();
private JComponent owner;
public OptionsDialog(JComponent owner) {
this(owner, null);
}
public OptionsDialog(JComponent owner, String selectedTab) {
super(SwingUtilities.windowForComponent(owner), ModalityType.MODELESS);
this.owner = owner;
initComponents();
initDynamicComponents();
setLocationRelativeTo(null);
for (int i = 0; i < tabbedPane.getTabCount(); i++) {
if (tabbedPane.getTitleAt(i).equals(selectedTab)) {
tabbedPane.setSelectedIndex(i);
}
}
}
private void initDynamicComponents() {
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
applyButton.doClick();
cancelButton.doClick();
}
});
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setVisible(false);
dispose();
}
});
initSystemSettings();
initNetworkSettings();
initLibrarySettings();
initGUISettings();
initColorsAndFontsSettings();
initPluginsSettings();
}
private void initSystemSettings() {
final AudioOutput output = app.getPlayer().getAudioOutput();
Vector<String> mixerVector = new Vector<String>();
mixerVector.add("Detect automatically");
final Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo();
int selectedIndex = Arrays.asList(mixerInfo).indexOf(output.getMixer());
for (Mixer.Info info : mixerInfo) {
String s = info.getDescription() + ", " + info.getName();
mixerVector.add(s);
}
audioMixer.setModel(new DefaultComboBoxModel(mixerVector));
audioMixer.setSelectedIndex(selectedIndex + 1);
audioMixer.setPrototypeDisplayValue(mixerVector.get(0));
Charset charset = AudioFileReader.getDefaultCharset();
defaultEncoding.setModel(new DefaultComboBoxModel(Charset.availableCharsets().values().toArray()));
defaultEncoding.setSelectedItem(charset);
singleInstance.setSelected(config.getBoolean("system.oneInstance", false));
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = audioMixer.getSelectedIndex();
if (index > 0) {
Mixer.Info info = mixerInfo[index - 1];
output.setMixer(info);
config.setString("player.mixer", info.getName());
} else {
output.setMixer(null);
config.remove("player.mixer");
}
Charset defaultCharset = (Charset) defaultEncoding.getSelectedItem();
AudioFileReader.setDefaultCharset(defaultCharset);
config.setString("tag.defaultEncoding", defaultCharset.name());
config.setBoolean("system.oneInstance", singleInstance.isSelected());
}
});
}
private void initNetworkSettings() {
enableHttpProxy.setSelected(config.getBoolean("proxy.enabled", false));
httpProxyHost.setText(config.getString("proxy.host", null));
httpProxyPort.setText(config.getString("proxy.port", null));
httpProxyUsername.setText(config.getString("proxy.user", null));
httpProxyPassword.setText(config.getString("proxy.password", null));
enableLastFmScrobbling.setSelected(config.getBoolean("lastfm.enabled", false));
lastfmUsername.setText(config.getString("lastfm.user", null));
lastfmPassword.setText(config.getString("lastfm.password", null));
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
config.setBoolean("lastfm.enabled", enableLastFmScrobbling.isSelected());
config.setString("lastfm.user", lastfmUsername.getText());
config.setString("lastfm.password", String.valueOf(lastfmPassword.getPassword()));
config.setBoolean("proxy.enabled", enableHttpProxy.isSelected());
config.setString("proxy.host", httpProxyHost.getText());
config.setString("proxy.port", httpProxyPort.getText());
config.setString("proxy.user", httpProxyUsername.getText());
config.setString("proxy.password", String.valueOf(httpProxyPassword.getPassword()));
if (enableHttpProxy.isSelected()) {
System.setProperty("http.proxyHost", httpProxyHost.getText());
System.setProperty("http.proxyPort", httpProxyPort.getText());
} else {
System.setProperty("http.proxyHost", "");
System.setProperty("http.proxyPort", "");
}
}
});
}
private void initLibrarySettings() {
final List<String> musicFoldersModel = LibraryConfiguration.getFolders(new ArrayList<String>());
musicFolders.setModel(new AbstractListModel() {
public int getSize() {
return musicFoldersModel.size();
}
public Object getElementAt(int i) {
return musicFoldersModel.get(i);
}
});
addMusicFolder.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
TreeFileChooser fileChooser = new TreeFileChooser(getRootPane(), "Select folder", false);
File[] files = fileChooser.showOpenDialog();
for (File file : files) {
String path = file.getAbsolutePath();
if (!musicFoldersModel.contains(path))
musicFoldersModel.add(path);
}
musicFolders.setListData(musicFoldersModel.toArray());
musicFolders.repaint();
}
});
removeMusicFolder.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object[] values = musicFolders.getSelectedValues();
if (values != null)
musicFoldersModel.removeAll(Arrays.asList(values));
musicFolders.setListData(musicFoldersModel.toArray());
musicFolders.repaint();
}
});
enableLibraryView.setSelected(config.getBoolean("library.libraryView", false));
libraryDoubleClickAction.setModel(new DefaultComboBoxModel(new LibraryAction[]{
LibraryAction.SEND_TO_CURRENT,
LibraryAction.ADD_TO_CURRENT,
LibraryAction.SEND_TO_NEW,
LibraryAction.EXPAND_COLLAPSE
}));
libraryMiddleClickAction.setModel(new DefaultComboBoxModel(new LibraryAction[]{
LibraryAction.SEND_TO_NEW,
LibraryAction.SEND_TO_CURRENT,
LibraryAction.ADD_TO_CURRENT,
}));
LibraryAction doubleAction = config.getEnum("library.doubleClickAction", LibraryAction.SEND_TO_CURRENT);
libraryDoubleClickAction.setSelectedItem(doubleAction);
LibraryAction middleAction = config.getEnum("library.middleClickAction", LibraryAction.SEND_TO_NEW);
libraryMiddleClickAction.setSelectedItem(middleAction);
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LibraryConfiguration.setFolders(musicFoldersModel);
config.setBoolean("library.libraryView", enableLibraryView.isSelected());
config.setEnum("library.doubleClickAction", (Enum) libraryDoubleClickAction.getSelectedItem());
config.setEnum("library.middleClickAction", (Enum) libraryMiddleClickAction.getSelectedItem());
}
});
}
private void initGUISettings() {
final UIManager.LookAndFeelInfo[] lafs = UIManager.getInstalledLookAndFeels();
Vector<String> lafsVector = new Vector<String>();
for (UIManager.LookAndFeelInfo laf : lafs) {
lafsVector.add(laf.getName());
}
lookAndFeel.setModel(new DefaultComboBoxModel(lafsVector));
String name = UIManager.getLookAndFeel().getName();
if (name.contains("GTK"))
name = "GTK+";
lookAndFeel.setSelectedItem(name);
enableTray.setSelected(config.getBoolean("tray.enabled", false));
minimizeOnClose.setSelected(config.getBoolean("tray.minimizeOnClose", true));
shuffleAlbumsPattern.setText(config.getString("playbackOrder.albumFormat", "%album%"));
windowTitleFormat.setText(config.getString("format.window", ""));
statusBarFormat.setText(config.getString("format.statusBar", ""));
showSideBar.setSelected(config.getBoolean("sidebar.enabled", true));
searchLyrics.setSelected(config.getBoolean("lyrics.searchOnline", true));
boolean nowPlaying = config.getBoolean("albumart.nowPlayingOnly", false);
albumArtPlaying.setSelected(nowPlaying);
albumArtSelected.setSelected(!nowPlaying);
List<String> stubList = AlbumArtConfiguration.getStubs();
StringBuilder sb = new StringBuilder();
for (String s : stubList) {
sb.append(s).append("\n");
}
albumArtStubs.setText(sb.toString());
final JDialog comp = this;
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int index = lookAndFeel.getSelectedIndex();
if (index != -1) {
try {
String laf = lafs[index].getClassName();
UIManager.setLookAndFeel(laf);
SwingUtilities.updateComponentTreeUI(SwingUtilities.getRoot(owner));
SwingUtilities.updateComponentTreeUI(comp);
config.setString("gui.LAF", laf);
} catch (Exception e1) {
e1.printStackTrace();
}
}
config.setBoolean("tray.enabled", enableTray.isSelected());
config.setBoolean("tray.minimizeOnClose", minimizeOnClose.isSelected());
config.setString("format.window", windowTitleFormat.getText());
config.setString("format.statusBar", statusBarFormat.getText());
config.setBoolean("sidebar.enabled", showSideBar.isSelected());
config.setBoolean("lyrics.searchOnline", searchLyrics.isSelected());
config.setBoolean("albumart.nowPlayingOnly", albumArtPlaying.isSelected());
config.setString("playbackOrder.albumFormat", shuffleAlbumsPattern.getText());
java.util.List<String> stubList = Arrays.asList(albumArtStubs.getText().split("\n"));
AlbumArtConfiguration.setStubs(stubList);
}
});
}
private void initColorsAndFontsSettings() {
textColor.setColor(config.getColor("gui.color.text", null));
backgroundColor.setColor(config.getColor("gui.color.background", null));
selectionColor.setColor(config.getColor("gui.color.selection", null));
highlightColor.setColor(config.getColor("gui.color.highlight", null));
trayBgColor1.setColor(config.getColor("tray.bgColor1", null));
trayBgColor2.setColor(config.getColor("tray.bgColor2", null));
defaultFont.setSelectedFont(config.getFont("gui.font.default", null));
applyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
config.setColor("gui.color.text", textColor.getColor());
config.setColor("gui.color.background", backgroundColor.getColor());
config.setColor("gui.color.selection", selectionColor.getColor());
config.setColor("gui.color.highlight", highlightColor.getColor());
config.setFont("gui.font.default", defaultFont.getSelectedFont());
config.setColor("tray.bgColor1", trayBgColor1.getColor());
config.setColor("tray.bgColor2", trayBgColor2.getColor());
SwingUtilities.updateComponentTreeUI(SwingUtilities.getRoot(owner));
}
});
}
private void initPluginsSettings() {
final List<Plugin> activePlugins = app.getPluginLoader().getActivePlugins();
pluginsList.setModel(new AbstractListModel() {
@Override
public int getSize() {
return activePlugins.size();
}
@Override
public Object getElementAt(int index) {
return activePlugins.get(index);
}
});
pluginsList.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
Plugin plugin = (Plugin) pluginsList.getSelectedValue();
configPluginButton.setEnabled(plugin != null && plugin.isConfigurable());
aboutPluginButton.setEnabled(plugin != null);
}
});
configPluginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Plugin plugin = (Plugin) pluginsList.getSelectedValue();
if (plugin != null)
plugin.configure(OptionsDialog.this);
}
});
aboutPluginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
StringBuilder sb = new StringBuilder();
Plugin.Description description = ((Plugin) pluginsList.getSelectedValue()).getDescription();
sb.append(description.name).append("\n");
if (!Util.isEmpty(description.description))
sb.append(description.description).append("\n");
sb.append("Author: ").append(description.author);
JOptionPane.showMessageDialog(OptionsDialog.this, sb.toString());
}
});
}
@SuppressWarnings({"unchecked", "RedundantArrayCreation"})
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
javax.swing.ButtonGroup buttonGroup1 = new javax.swing.ButtonGroup();
tabbedPane = new javax.swing.JTabbedPane();
javax.swing.JPanel systemPanel = new javax.swing.JPanel();
javax.swing.JLabel jLabel1 = new javax.swing.JLabel();
audioMixer = new javax.swing.JComboBox();
javax.swing.JLabel jLabel2 = new javax.swing.JLabel();
defaultEncoding = new javax.swing.JComboBox();
singleInstance = new javax.swing.JCheckBox();
javax.swing.JPanel jPanel1 = new javax.swing.JPanel();
javax.swing.JLabel jLabel3 = new javax.swing.JLabel();
javax.swing.JLabel jLabel4 = new javax.swing.JLabel();
javax.swing.JLabel jLabel5 = new javax.swing.JLabel();
javax.swing.JLabel jLabel6 = new javax.swing.JLabel();
httpProxyHost = new javax.swing.JTextField();
httpProxyPort = new javax.swing.JTextField();
httpProxyUsername = new javax.swing.JTextField();
httpProxyPassword = new javax.swing.JPasswordField();
lastfmUsername = new javax.swing.JTextField();
javax.swing.JLabel jLabel7 = new javax.swing.JLabel();
javax.swing.JLabel jLabel8 = new javax.swing.JLabel();
lastfmPassword = new javax.swing.JPasswordField();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel5 = new com.tulskiy.musique.gui.components.SeparatorLabel();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel6 = new com.tulskiy.musique.gui.components.SeparatorLabel();
enableHttpProxy = new javax.swing.JCheckBox();
enableLastFmScrobbling = new javax.swing.JCheckBox();
javax.swing.JPanel jPanel4 = new javax.swing.JPanel();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel7 = new com.tulskiy.musique.gui.components.SeparatorLabel();
addMusicFolder = new javax.swing.JButton();
removeMusicFolder = new javax.swing.JButton();
enableLibraryView = new javax.swing.JCheckBox();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel9 = new com.tulskiy.musique.gui.components.SeparatorLabel();
javax.swing.JScrollPane jScrollPane3 = new javax.swing.JScrollPane();
musicFolders = new javax.swing.JList();
javax.swing.JLabel jLabel20 = new javax.swing.JLabel();
libraryDoubleClickAction = new javax.swing.JComboBox();
javax.swing.JLabel jLabel21 = new javax.swing.JLabel();
libraryMiddleClickAction = new javax.swing.JComboBox();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel10 = new com.tulskiy.musique.gui.components.SeparatorLabel();
javax.swing.JScrollPane jScrollPane4 = new javax.swing.JScrollPane();
libraryViewsTable = new javax.swing.JTable();
removeView = new javax.swing.JButton();
addView = new javax.swing.JButton();
javax.swing.JPanel jPanel5 = new javax.swing.JPanel();
javax.swing.JLabel jLabel9 = new javax.swing.JLabel();
lookAndFeel = new javax.swing.JComboBox();
enableTray = new javax.swing.JCheckBox();
minimizeOnClose = new javax.swing.JCheckBox();
showSideBar = new javax.swing.JCheckBox();
searchLyrics = new javax.swing.JCheckBox();
javax.swing.JLabel jLabel10 = new javax.swing.JLabel();
statusBarFormat = new javax.swing.JTextField();
windowTitleFormat = new javax.swing.JTextField();
javax.swing.JLabel jLabel11 = new javax.swing.JLabel();
albumArtSelected = new javax.swing.JRadioButton();
javax.swing.JLabel jLabel12 = new javax.swing.JLabel();
javax.swing.JLabel jLabel13 = new javax.swing.JLabel();
albumArtPlaying = new javax.swing.JRadioButton();
javax.swing.JScrollPane jScrollPane2 = new javax.swing.JScrollPane();
albumArtStubs = new javax.swing.JTextArea();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel4 = new com.tulskiy.musique.gui.components.SeparatorLabel();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel3 = new com.tulskiy.musique.gui.components.SeparatorLabel();
javax.swing.JLabel jLabel23 = new javax.swing.JLabel();
shuffleAlbumsPattern = new javax.swing.JTextField();
javax.swing.JPanel jPanel8 = new javax.swing.JPanel();
textColor = new com.tulskiy.musique.gui.components.ColorChooser();
backgroundColor = new com.tulskiy.musique.gui.components.ColorChooser();
selectionColor = new com.tulskiy.musique.gui.components.ColorChooser();
highlightColor = new com.tulskiy.musique.gui.components.ColorChooser();
trayBgColor1 = new com.tulskiy.musique.gui.components.ColorChooser();
trayBgColor2 = new com.tulskiy.musique.gui.components.ColorChooser();
javax.swing.JLabel jLabel14 = new javax.swing.JLabel();
javax.swing.JLabel jLabel15 = new javax.swing.JLabel();
javax.swing.JLabel jLabel16 = new javax.swing.JLabel();
javax.swing.JLabel jLabel17 = new javax.swing.JLabel();
javax.swing.JLabel jLabel18 = new javax.swing.JLabel();
javax.swing.JLabel jLabel19 = new javax.swing.JLabel();
javax.swing.JLabel jLabel22 = new javax.swing.JLabel();
defaultFont = new com.tulskiy.musique.gui.components.FontChooser();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel1 = new com.tulskiy.musique.gui.components.SeparatorLabel();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel2 = new com.tulskiy.musique.gui.components.SeparatorLabel();
javax.swing.JPanel jPanel2 = new javax.swing.JPanel();
configPluginButton = new javax.swing.JButton();
javax.swing.JScrollPane jScrollPane5 = new javax.swing.JScrollPane();
pluginsList = new javax.swing.JList();
com.tulskiy.musique.gui.components.SeparatorLabel separatorLabel8 = new com.tulskiy.musique.gui.components.SeparatorLabel();
aboutPluginButton = new javax.swing.JButton();
applyButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Settings");
setAlwaysOnTop(true);
tabbedPane.setBorder(javax.swing.BorderFactory.createEtchedBorder());
tabbedPane.setTabPlacement(javax.swing.JTabbedPane.LEFT);
tabbedPane.setFocusable(false);
jLabel1.setText("Audio Mixer");
jLabel2.setText("Default Encoding for tags");
singleInstance.setText("Allow only one instance (requires restart)");
singleInstance.setFocusPainted(false);
singleInstance.setMargin(new java.awt.Insets(2, -1, 2, 2));
javax.swing.GroupLayout systemPanelLayout = new javax.swing.GroupLayout(systemPanel);
systemPanel.setLayout(systemPanelLayout);
systemPanelLayout.setHorizontalGroup(
systemPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(systemPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(systemPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(systemPanelLayout.createSequentialGroup()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(audioMixer, 0, 454, Short.MAX_VALUE))
.addGroup(systemPanelLayout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(defaultEncoding, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(singleInstance))
.addContainerGap())
);
systemPanelLayout.setVerticalGroup(
systemPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(systemPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(systemPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(audioMixer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(systemPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(defaultEncoding, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(singleInstance)
.addContainerGap(339, Short.MAX_VALUE))
);
tabbedPane.addTab("System", systemPanel);
jLabel3.setText("Host");
jLabel4.setText("Port");
jLabel5.setText("Username");
jLabel6.setText("Password");
jLabel7.setText("Username");
jLabel8.setText("Password");
separatorLabel5.setText("HTTP Proxy");
separatorLabel6.setText("Last.fm Scrobbling");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(enableHttpProxy)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separatorLabel5, javax.swing.GroupLayout.DEFAULT_SIZE, 498, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel5)
.addComponent(jLabel6)
.addComponent(jLabel7)
.addComponent(jLabel8)
.addComponent(jLabel4))
.addGap(43, 43, 43)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(httpProxyHost, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(httpProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(httpProxyUsername, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(httpProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(lastfmPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 289, Short.MAX_VALUE)
.addComponent(lastfmUsername, javax.swing.GroupLayout.PREFERRED_SIZE, 289, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(enableLastFmScrobbling)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separatorLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, 498, Short.MAX_VALUE)))
.addContainerGap())
);
jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {httpProxyHost, httpProxyPassword, httpProxyPort, httpProxyUsername, lastfmPassword, lastfmUsername});
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(16, 16, 16)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(separatorLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(enableHttpProxy))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(httpProxyHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(httpProxyPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(httpProxyUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel6)
.addComponent(httpProxyPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(11, 11, 11)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(enableLastFmScrobbling)
.addComponent(separatorLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel7)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(lastfmUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lastfmPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8))))
.addContainerGap(186, Short.MAX_VALUE))
);
tabbedPane.addTab("Network", jPanel1);
separatorLabel7.setText("Music Folders");
addMusicFolder.setText("Add");
removeMusicFolder.setText("Remove");
enableLibraryView.setText("Enable Library View playlist");
separatorLabel9.setText("Actions");
musicFolders.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane3.setViewportView(musicFolders);
jLabel20.setText("Double-Click Action");
jLabel21.setText("Middle-Click Action");
separatorLabel10.setText("Views");
libraryViewsTable.setFont(libraryViewsTable.getFont().deriveFont((float)10));
libraryViewsTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Title", "Format"
}
) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class
};
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
});
libraryViewsTable.setDragEnabled(true);
libraryViewsTable.getTableHeader().setReorderingAllowed(false);
libraryViewsTable.getColumnModel().getColumn(0).setPreferredWidth(100);
libraryViewsTable.getColumnModel().getColumn(0).setMaxWidth(100);
jScrollPane4.setViewportView(libraryViewsTable);
removeView.setText("Remove");
addView.setText("Add");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 464, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(removeMusicFolder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(addMusicFolder, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(5, 5, 5))
.addComponent(separatorLabel7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addComponent(separatorLabel9, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addComponent(enableLibraryView, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel4Layout.createSequentialGroup()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel20)
.addComponent(jLabel21))
.addGap(62, 62, 62)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(libraryMiddleClickAction, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(libraryDoubleClickAction, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(separatorLabel10, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(addView)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(removeView)))
.addContainerGap())
);
jPanel4Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {addView, removeView});
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(separatorLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(addMusicFolder)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(removeMusicFolder))
.addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(separatorLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(enableLibraryView)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel20)
.addComponent(libraryDoubleClickAction, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel21)
.addComponent(libraryMiddleClickAction, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(separatorLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 143, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(removeView)
.addComponent(addView))
.addContainerGap(15, Short.MAX_VALUE))
);
tabbedPane.addTab("Library", jPanel4);
jPanel5.setPreferredSize(new java.awt.Dimension(488, 400));
jLabel9.setText("Look And Feel");
enableTray.setText("Enable Notification Area Icon");
enableTray.setFocusPainted(false);
minimizeOnClose.setText("Minimize to tray on close");
minimizeOnClose.setFocusPainted(false);
showSideBar.setText("Show Side Bar");
showSideBar.setFocusPainted(false);
searchLyrics.setText("Search Lyrics Online");
searchLyrics.setFocusPainted(false);
jLabel10.setText("Window Title");
jLabel11.setText("Status Bar");
buttonGroup1.add(albumArtSelected);
albumArtSelected.setSelected(true);
albumArtSelected.setText("Selected Track");
albumArtSelected.setFocusPainted(false);
jLabel12.setText("Show Album Art for");
jLabel13.setText("Album Art Stubs");
buttonGroup1.add(albumArtPlaying);
albumArtPlaying.setText("Playing Track");
albumArtPlaying.setFocusPainted(false);
albumArtStubs.setColumns(20);
albumArtStubs.setRows(5);
jScrollPane2.setViewportView(albumArtStubs);
separatorLabel4.setText("Album Art");
separatorLabel3.setText("Display Formatting");
jLabel23.setText("Shuffle Albums mode pattern");
javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
jPanel5.setLayout(jPanel5Layout);
jPanel5Layout.setHorizontalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel13)
.addGroup(jPanel5Layout.createSequentialGroup()
.addComponent(jLabel12)
.addGap(6, 6, 6)
.addComponent(albumArtSelected)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(albumArtPlaying))
.addGroup(jPanel5Layout.createSequentialGroup()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel10)
.addComponent(jLabel11))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(statusBarFormat, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE)
.addComponent(windowTitleFormat, javax.swing.GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE)))
.addComponent(separatorLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addComponent(separatorLabel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)))
.addGroup(jPanel5Layout.createSequentialGroup()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(enableTray)
.addComponent(showSideBar)))
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel9)))
.addGap(36, 36, 36)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(searchLyrics)
.addComponent(minimizeOnClose)
.addComponent(lookAndFeel, 0, 213, Short.MAX_VALUE)
.addComponent(shuffleAlbumsPattern, javax.swing.GroupLayout.DEFAULT_SIZE, 238, Short.MAX_VALUE)))
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel23)))
.addContainerGap())
);
jPanel5Layout.setVerticalGroup(
jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel5Layout.createSequentialGroup()
.addComponent(enableTray)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(showSideBar))
.addGroup(jPanel5Layout.createSequentialGroup()
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(lookAndFeel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel9))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(minimizeOnClose)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(searchLyrics)))
.addGap(9, 9, 9)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel23)
.addComponent(shuffleAlbumsPattern, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(separatorLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(windowTitleFormat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel10))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel11)
.addComponent(statusBarFormat, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(separatorLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel12)
.addComponent(albumArtPlaying)
.addComponent(albumArtSelected))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel13)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(34, Short.MAX_VALUE))
);
tabbedPane.addTab("GUI", jPanel5);
jLabel14.setText("Text");
jLabel15.setText("Background");
jLabel16.setText("Selection");
jLabel17.setText("Highlight");
jLabel18.setText("Tray Background 1");
jLabel19.setText("Tray Background 2");
jLabel22.setText("Default");
separatorLabel1.setText("Colors");
separatorLabel2.setText("Fonts");
javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
jPanel8.setLayout(jPanel8Layout);
jPanel8Layout.setHorizontalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel8Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(separatorLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addGroup(jPanel8Layout.createSequentialGroup()
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel14)
.addComponent(jLabel15)
.addComponent(jLabel16)
.addComponent(jLabel17)
.addComponent(jLabel18)
.addComponent(jLabel19)
.addComponent(jLabel22))
.addGap(114, 114, 114)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(trayBgColor2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(trayBgColor1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(highlightColor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)
.addComponent(selectionColor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)
.addComponent(backgroundColor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 221, Short.MAX_VALUE)
.addComponent(textColor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(defaultFont, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addComponent(separatorLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE))
.addContainerGap())
);
jPanel8Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {backgroundColor, defaultFont, highlightColor, selectionColor, textColor, trayBgColor1, trayBgColor2});
jPanel8Layout.setVerticalGroup(
jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel8Layout.createSequentialGroup()
.addGap(16, 16, 16)
.addComponent(separatorLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel14)
.addComponent(textColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel15)
.addComponent(backgroundColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel16)
.addComponent(selectionColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel17)
.addComponent(highlightColor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel18)
.addComponent(trayBgColor1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel19)
.addComponent(trayBgColor2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addComponent(separatorLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
.addComponent(jLabel22)
.addComponent(defaultFont, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(401, 401, 401))
);
tabbedPane.addTab("Colors and Fonts", jPanel8);
configPluginButton.setText("Configure");
configPluginButton.setEnabled(false);
pluginsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jScrollPane5.setViewportView(pluginsList);
separatorLabel8.setText("Plugins");
aboutPluginButton.setText("About");
aboutPluginButton.setEnabled(false);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(separatorLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, 532, Short.MAX_VALUE)
.addContainerGap())
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 448, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(12, 12, 12)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(aboutPluginButton, javax.swing.GroupLayout.DEFAULT_SIZE, 68, Short.MAX_VALUE)
.addComponent(configPluginButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(16, 16, 16))))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(separatorLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(configPluginButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(aboutPluginButton))
.addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 392, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(41, 41, 41))
);
tabbedPane.addTab("Plugins", jPanel2);
applyButton.setText("Apply");
cancelButton.setText("Cancel");
okButton.setText("OK");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(437, Short.MAX_VALUE)
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(applyButton)
.addContainerGap())
.addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 668, Short.MAX_VALUE)
);
layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {applyButton, cancelButton, okButton});
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(tabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 455, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 17, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(applyButton)
.addComponent(cancelButton)
.addComponent(okButton))
.addContainerGap())
);
pack();
}// </editor-fold>//GEN-END:initComponents
public static void main(String args[]) {
Application.getInstance().load();
try {
UIManager.setLookAndFeel(new MetalLookAndFeel());
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(OptionsDialog.class.getName()).log(Level.SEVERE, null, ex);
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
final JLabel fakeOwner = new JLabel();
new JFrame().add(fakeOwner);
OptionsDialog optionsDialog = new OptionsDialog(fakeOwner);
optionsDialog.setModal(true);
optionsDialog.setVisible(true);
Application.getInstance().exit();
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton aboutPluginButton;
private javax.swing.JButton addMusicFolder;
private javax.swing.JButton addView;
private javax.swing.JRadioButton albumArtPlaying;
private javax.swing.JRadioButton albumArtSelected;
private javax.swing.JTextArea albumArtStubs;
private javax.swing.JButton applyButton;
private javax.swing.JComboBox audioMixer;
private com.tulskiy.musique.gui.components.ColorChooser backgroundColor;
private javax.swing.JButton cancelButton;
private javax.swing.JButton configPluginButton;
private javax.swing.JComboBox defaultEncoding;
private com.tulskiy.musique.gui.components.FontChooser defaultFont;
private javax.swing.JCheckBox enableHttpProxy;
private javax.swing.JCheckBox enableLastFmScrobbling;
private javax.swing.JCheckBox enableLibraryView;
private javax.swing.JCheckBox enableTray;
private com.tulskiy.musique.gui.components.ColorChooser highlightColor;
private javax.swing.JTextField httpProxyHost;
private javax.swing.JPasswordField httpProxyPassword;
private javax.swing.JTextField httpProxyPort;
private javax.swing.JTextField httpProxyUsername;
private javax.swing.JPasswordField lastfmPassword;
private javax.swing.JTextField lastfmUsername;
private javax.swing.JComboBox libraryDoubleClickAction;
private javax.swing.JComboBox libraryMiddleClickAction;
private javax.swing.JTable libraryViewsTable;
private javax.swing.JComboBox lookAndFeel;
private javax.swing.JCheckBox minimizeOnClose;
private javax.swing.JList musicFolders;
private javax.swing.JButton okButton;
private javax.swing.JList pluginsList;
private javax.swing.JButton removeMusicFolder;
private javax.swing.JButton removeView;
private javax.swing.JCheckBox searchLyrics;
private com.tulskiy.musique.gui.components.ColorChooser selectionColor;
private javax.swing.JCheckBox showSideBar;
private javax.swing.JTextField shuffleAlbumsPattern;
private javax.swing.JCheckBox singleInstance;
private javax.swing.JTextField statusBarFormat;
private javax.swing.JTabbedPane tabbedPane;
private com.tulskiy.musique.gui.components.ColorChooser textColor;
private com.tulskiy.musique.gui.components.ColorChooser trayBgColor1;
private com.tulskiy.musique.gui.components.ColorChooser trayBgColor2;
private javax.swing.JTextField windowTitleFormat;
// End of variables declaration//GEN-END:variables
}