/*
* Jajuk
* Copyright (C) The Jajuk Team
* http://jajuk.info
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
package org.jajuk.ui.views;
import java.awt.Component;
import java.awt.SystemTray;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSlider;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.plaf.basic.BasicComboBoxRenderer;
import net.miginfocom.swing.MigLayout;
import org.jajuk.base.SearchResult;
import org.jajuk.base.SearchResult.SearchResultType;
import org.jajuk.events.JajukEvent;
import org.jajuk.events.JajukEvents;
import org.jajuk.events.ObservationManager;
import org.jajuk.services.core.SessionService;
import org.jajuk.services.notification.NotificatorTypes;
import org.jajuk.ui.actions.ActionManager;
import org.jajuk.ui.actions.JajukActions;
import org.jajuk.ui.helpers.DefaultMouseWheelListener;
import org.jajuk.ui.helpers.PatternInputVerifier;
import org.jajuk.ui.widgets.InformationJPanel;
import org.jajuk.ui.widgets.InformationJPanel.MessageType;
import org.jajuk.ui.widgets.JajukButton;
import org.jajuk.ui.widgets.PathSelector;
import org.jajuk.ui.widgets.SearchBox;
import org.jajuk.ui.widgets.SteppedComboBox;
import org.jajuk.ui.widgets.ToggleLink;
import org.jajuk.util.Conf;
import org.jajuk.util.Const;
import org.jajuk.util.IconLoader;
import org.jajuk.util.JajukIcons;
import org.jajuk.util.LocaleManager;
import org.jajuk.util.Messages;
import org.jajuk.util.UtilSystem;
import org.jajuk.util.log.Log;
import org.jdesktop.swingx.HorizontalLayout;
import org.jdesktop.swingx.JXCollapsiblePane;
import org.jdesktop.swingx.VerticalLayout;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.skin.SkinInfo;
/**
* View used to set Jajuk parameters.
* <p>
* Configuration perspective *
*/
public class ParameterView extends ViewAdapter {
/** Generated serialVersionUID. */
private static final long serialVersionUID = 1L;
/** GUI updater. */
private ParameterViewGUIHelper updateHelper = new ParameterViewGUIHelper(this);
/** The Constant NOTIFICATOR_PREFIX. */
static final String NOTIFICATOR_PREFIX = "Notificator.";
JTabbedPane jtpMain;
JTextField jtfHistory;
JCheckBox jcbManualRatings;
JButton jbClearHistory;
JButton jbResetRatings;
/** Allows to export ratings to a file */
JButton jbExportRatings;
/** Allows to import ratings from a file */
JButton jbImportRatings;
JButton jbResetPreferences;
ButtonGroup bgStart;
JRadioButton jrbNothing;
JRadioButton jrbLast;
JRadioButton jrbLastKeepPos;
JRadioButton jrbShuffle;
JRadioButton jrbBestof;
JRadioButton jrbNovelties;
JRadioButton jrbFile;
SearchBox sbSearch;
JCheckBox jcbBeforeDelete;
JCheckBox jcbBeforeExit;
JCheckBox jcbBeforeRemoveDevice;
JCheckBox jcbBeforeDeleteCover;
JCheckBox jcbBeforeClearingHistory;
JCheckBox jcbBeforeResetingRatings;
JCheckBox jcbBeforeRefactorFiles;
JCheckBox jcbBeforeWritingTag;
JCheckBox jcbDisplayUnmounted;
JCheckBox jcbAudioScrobbler;
JButton jbResetDontShowAgain;
JLabel jlASUser;
JTextField jtfASUser;
JLabel jlASPassword;
JPasswordField jpfASPassword;
SteppedComboBox scbLanguage;
JTextField jtfFrameTitle;
/** Balloon notifier pattern text field. */
JTextField jtfBalloonNotifierPattern;
/** Information pattern textfield. */
JTextField jtfInformationPattern;
JLabel jlLAF;
SteppedComboBox scbLAF;
SteppedComboBox scbLogLevel;
JSlider introPosition;
JSlider introLength;
JTextField jtfBestofSize;
JTextField jtfNoveltiesAge;
JSlider crossFadeDuration;
JCheckBox jcbDefaultActionClick;
JCheckBox jcbDefaultActionDrop;
JLabel jlNotificationType;
JComboBox jcbNotificationType;
JCheckBox jcbHotkeys;
JCheckBox jcbShowVideos;
JCheckBox jcbPreserveFileDates;
JCheckBox jcbUseParentDir;
JFormattedTextField jtfRefactorPattern;
JTextField jtfAnimationPattern;
JCheckBox jcbBackup;
JSlider backupSize;
JCheckBox jcbRegexp;
ButtonGroup bgProxy;
JCheckBox jcbNoneInternetAccess;
JRadioButton jcbProxyNone;
JRadioButton jcbProxyHttp;
JRadioButton jcbProxySocks;
JLabel jlProxyHostname;
JTextField jtfProxyHostname;
JLabel jlProxyPort;
JTextField jtfProxyPort;
JLabel jlProxyLogin;
JTextField jtfProxyLogin;
JLabel jlProxyPwd;
JPasswordField jtfProxyPwd;
JLabel jlConnectionTO;
JSlider connectionTO;
JCheckBox jcbAutoCover;
JCheckBox jcbShuffleCover;
JLabel jlCoverSize;
JComboBox jcbCoverSize;
JTextField jtfMPlayerArgs;
JTextField jtfEnvVariables;
JTextField jtfMPlayerPath;
PathSelector psJajukWorkspace;
JLabel jlCatalogPages;
JSlider jsCatalogPages;
JButton jbCatalogRefresh;
JCheckBox jcbShowPopups;
JCheckBox jcbShowSystray;
JCheckBox jcbMinimizeToTray;
JCheckBox jcbClickTrayAlwaysDisplayWindow;
JLabel jlFonts;
JSlider jsFonts;
JCheckBox jcbEnableLastFMInformation;
JButton jbOK;
JButton jbDefault;
JCheckBox jcbCheckUpdates;
JCheckBox jcbForceFileDate;
JSlider jsPerspectiveSize;
/** VolNorm checkbox. */
JCheckBox jcbUseVolnorm;
/** Bit-perfect checkbox. */
JCheckBox jcbEnableBitPerfect;
JTextField jtfExplorerPath;
/** Whether the "theme will be token into account" message has been already displayed. */
boolean bLAFMessage = false;
JLabel jlDefaultCoverSearchPattern;
JTextField jtfDefaultCoverSearchPattern;
JCheckBox jcbSaveExplorerFriendly;
JCheckBox jcb3dCover;
JCheckBox jcb3dCoverFS;
/** Enable Title view animation effect. */
JCheckBox jcbTitleAnimation;
/** Splashscreen flag. */
JCheckBox jcbSplashscreen;
JButton jbReloadRadiosPreset;
/**
* View providing main jajuk configuration GUI. Known in the doc as
* "Preferences view"
*/
public ParameterView() {
super();
}
/*
* (non-Javadoc)
*
* @see org.jajuk.ui.IView#getDesc()
*/
@Override
public String getDesc() {
return Messages.getString("ParameterView.87");
}
/*
* (non-Javadoc)
*
* @see org.jajuk.events.Observer#getRegistrationKeys()
*/
@Override
public Set<JajukEvents> getRegistrationKeys() {
final Set<JajukEvents> eventSubjectSet = new HashSet<JajukEvents>();
eventSubjectSet.add(JajukEvents.PARAMETERS_CHANGE);
return eventSubjectSet;
}
/**
* Inits the ui history.
*
*
* @return the j panel
*/
private JPanel initUIHistory() {
JPanel jpHistory = new JPanel(new MigLayout("insets 10, gapy 15", "[fill][fill]"));
jtfHistory = new JTextField();
jtfHistory.setInputVerifier(new InputVerifier() {
@Override
public boolean shouldYieldFocus(final JComponent input) {
return verify(input);
}
@Override
public boolean verify(final JComponent input) {
final JTextField tf = (JTextField) input;
final String sText = tf.getText();
try {
final int iValue = Integer.parseInt(sText);
if (iValue < -1) {
jbOK.setEnabled(false);
return false;
}
} catch (final Exception e) {
jbOK.setEnabled(false);
return false;
}
jbOK.setEnabled(true);
return true;
}
});
jtfHistory.setToolTipText(Messages.getString("ParameterView.2"));
jcbManualRatings = new JCheckBox(Messages.getString("ParameterView.307"));
jcbManualRatings.setToolTipText(Messages.getString("ParameterView.308"));
jbClearHistory = new JButton(Messages.getString("ParameterView.3"),
IconLoader.getIcon(JajukIcons.CLEAR));
jbClearHistory.setToolTipText(Messages.getString("ParameterView.4"));
jbClearHistory.addActionListener(updateHelper);
jbResetRatings = new JButton(Messages.getString("ParameterView.186"),
IconLoader.getIcon(JajukIcons.CLEAR));
jbResetRatings.setToolTipText(Messages.getString("ParameterView.187"));
jbResetRatings.addActionListener(updateHelper);
jbResetPreferences = new JButton(Messages.getString("ParameterView.249"),
IconLoader.getIcon(JajukIcons.CLEAR));
jbResetPreferences.setToolTipText(Messages.getString("ParameterView.250"));
jbResetPreferences.addActionListener(updateHelper);
jbExportRatings = new JButton(ActionManager.getAction(JajukActions.EXPORT_RATINGS));
jbImportRatings = new JButton(ActionManager.getAction(JajukActions.IMPORT_RATINGS));
JLabel jlHistory = new JLabel(Messages.getString("ParameterView.0"));
jlHistory.setToolTipText(Messages.getString("ParameterView.2"));
jpHistory.add(jlHistory);
jpHistory.add(jtfHistory);
jpHistory.add(jbClearHistory, "wrap");
jpHistory.add(jcbManualRatings, "wrap");
jpHistory.add(jbResetRatings);
jpHistory.add(jbResetPreferences, "wrap");
jpHistory.add(jbExportRatings);
jpHistory.add(jbImportRatings);
return jpHistory;
}
/**
* Inits the ui startup.
*
*
* @return the jpanel
*/
private JPanel initUIStartup() {
JPanel jpStart = new JPanel(new MigLayout("insets 10,gapy 15", "[][grow][]"));
bgStart = new ButtonGroup();
jrbNothing = new JRadioButton(Messages.getString("ParameterView.10"));
jrbNothing.setToolTipText(Messages.getString("ParameterView.11"));
jrbNothing.addItemListener(updateHelper);
jrbLast = new JRadioButton(Messages.getString("ParameterView.12"));
jrbLast.setToolTipText(Messages.getString("ParameterView.13"));
jrbLast.addItemListener(updateHelper);
jrbLastKeepPos = new JRadioButton(Messages.getString("ParameterView.135"));
jrbLastKeepPos.setToolTipText(Messages.getString("ParameterView.136"));
jrbLastKeepPos.addItemListener(updateHelper);
jrbShuffle = new JRadioButton(Messages.getString("ParameterView.14"));
jrbShuffle.setToolTipText(Messages.getString("ParameterView.15"));
jrbShuffle.addItemListener(updateHelper);
jrbBestof = new JRadioButton(Messages.getString("ParameterView.131"));
jrbBestof.setToolTipText(Messages.getString("ParameterView.132"));
jrbBestof.addItemListener(updateHelper);
jrbNovelties = new JRadioButton(Messages.getString("ParameterView.133"));
jrbNovelties.setToolTipText(Messages.getString("ParameterView.134"));
jrbNovelties.addItemListener(updateHelper);
jrbFile = new JRadioButton(Messages.getString("ParameterView.16"));
jrbFile.setToolTipText(Messages.getString("ParameterView.17"));
jrbFile.addItemListener(updateHelper);
sbSearch = new SearchBox() {
private static final long serialVersionUID = 1L;
@Override
public void valueChanged(final ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
final SearchResult sr = sbSearch.getResult();
if (sr.getType() == SearchResultType.FILE) {
Conf.setProperty(Const.CONF_STARTUP_ITEM, SearchResultType.FILE.name() + '/'
+ sr.getFile().getID());
sbSearch.setText(sr.getFile().getTrack().getName());
} else if (sr.getType() == SearchResultType.WEBRADIO) {
Conf.setProperty(Const.CONF_STARTUP_ITEM, SearchResultType.WEBRADIO.name() + '/'
+ sr.getWebradio().getName());
sbSearch.setText(sr.getWebradio().getName());
}
sbSearch.hidePopup();
}
}
};
// disabled by default, is enabled only if jrbFile is enabled
sbSearch.setEnabled(false);
sbSearch.setToolTipText(Messages.getString("ParameterView.18"));
bgStart.add(jrbNothing);
bgStart.add(jrbLast);
bgStart.add(jrbLastKeepPos);
bgStart.add(jrbShuffle);
bgStart.add(jrbBestof);
bgStart.add(jrbNovelties);
bgStart.add(jrbFile);
jpStart.add(jrbNothing, "wrap");
jpStart.add(jrbLast, "wrap");
jpStart.add(jrbLastKeepPos, "wrap");
jpStart.add(jrbShuffle, "wrap");
jpStart.add(jrbBestof, "wrap");
jpStart.add(jrbNovelties, "wrap");
jpStart.add(jrbFile);
jpStart.add(sbSearch, "grow,wrap"); //NOSONAR
return jpStart;
}
/**
* Inits the webradios panel.
*
*
* @return the j panel
*/
private JPanel initWebradios() {
JPanel jpWebradios = new JPanel(new MigLayout("insets 10, gapy 15"));
jbReloadRadiosPreset = new JButton(Messages.getString("WebRadioView.10"),
IconLoader.getIcon(JajukIcons.CLEAR));
jbReloadRadiosPreset.setToolTipText(Messages.getString("WebRadioView.11"));
jbReloadRadiosPreset.addActionListener(updateHelper);
jpWebradios.add(jbReloadRadiosPreset);
return jpWebradios;
}
/**
* Inits the ui confirmations.
*
*
* @return the jpanel
*/
private JPanel initUIConfirmations() {
JPanel jpConfirmations = new JPanel(new MigLayout("insets 10,gapy 15"));
jcbBeforeDelete = new JCheckBox(Messages.getString("ParameterView.27"));
jcbBeforeDelete.setToolTipText(Messages.getString("ParameterView.28"));
jcbBeforeExit = new JCheckBox(Messages.getString("ParameterView.29"));
jcbBeforeExit.setToolTipText(Messages.getString("ParameterView.30"));
jcbBeforeRemoveDevice = new JCheckBox(Messages.getString("ParameterView.164"));
jcbBeforeRemoveDevice.setToolTipText(Messages.getString("ParameterView.165"));
jcbBeforeDeleteCover = new JCheckBox(Messages.getString("ParameterView.171"));
jcbBeforeDeleteCover.setToolTipText(Messages.getString("ParameterView.172"));
jcbBeforeClearingHistory = new JCheckBox(Messages.getString("ParameterView.188"));
jcbBeforeClearingHistory.setToolTipText(Messages.getString("ParameterView.188"));
jcbBeforeResetingRatings = new JCheckBox(Messages.getString("ParameterView.189"));
jcbBeforeResetingRatings.setToolTipText(Messages.getString("ParameterView.189"));
jcbBeforeRefactorFiles = new JCheckBox(Messages.getString("ParameterView.194"));
jcbBeforeRefactorFiles.setToolTipText(Messages.getString("ParameterView.194"));
jcbBeforeWritingTag = new JCheckBox(Messages.getString("ParameterView.309"));
jcbBeforeWritingTag.setToolTipText(Messages.getString("ParameterView.309"));
jbResetDontShowAgain = new JButton(Messages.getString("ParameterView.310"));
jbResetDontShowAgain.setToolTipText(Messages.getString("ParameterView.311"));
jbResetDontShowAgain.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Conf.resetDontShowAgain();
InformationJPanel.getInstance().setMessage(Messages.getString("Success"),
MessageType.INFORMATIVE);
}
});
jpConfirmations.add(jcbBeforeDelete, "wrap");
jpConfirmations.add(jcbBeforeExit, "wrap");
jpConfirmations.add(jcbBeforeRemoveDevice, "wrap");
jpConfirmations.add(jcbBeforeDeleteCover, "wrap");
jpConfirmations.add(jcbBeforeClearingHistory, "wrap");
jpConfirmations.add(jcbBeforeResetingRatings, "wrap");
jpConfirmations.add(jcbBeforeRefactorFiles, "wrap");
jpConfirmations.add(jcbBeforeWritingTag, "wrap");
jpConfirmations.add(jbResetDontShowAgain);
return jpConfirmations;
}
/**
* Inits the sound tab.
*
* @return the jpanel
*/
private JPanel initUISound() {
JPanel jpSound = new JPanel(new MigLayout("insets 10,gapy 15,gapx 10", "[][grow,200:300:300]"));//NOSONAR
JLabel jlCrossFadeDuration = new JLabel(Messages.getString("ParameterView.190"));
jlCrossFadeDuration.setToolTipText(Messages.getString("ParameterView.191"));
crossFadeDuration = new JSlider(0, 30, 0);
crossFadeDuration.setMajorTickSpacing(10);
crossFadeDuration.setMinorTickSpacing(1);
crossFadeDuration.setPaintTicks(true);
crossFadeDuration.setPaintLabels(true);
crossFadeDuration.setToolTipText(Messages.getString("ParameterView.191"));
crossFadeDuration.addMouseWheelListener(new DefaultMouseWheelListener(crossFadeDuration));
jcbUseVolnorm = new JCheckBox(Messages.getString("ParameterView.262"));
jcbUseVolnorm.setToolTipText(Messages.getString("ParameterView.263"));
jcbUseVolnorm.addActionListener(updateHelper);
jcbEnableBitPerfect = new JCheckBox(Messages.getString("ParameterView.285"));
jcbEnableBitPerfect.setToolTipText(Messages.getString("ParameterView.286"));
jcbEnableBitPerfect.addActionListener(updateHelper);
jpSound.add(jlCrossFadeDuration);
jpSound.add(crossFadeDuration, "grow,wrap");
jpSound.add(jcbUseVolnorm, "wrap");
jpSound.add(jcbEnableBitPerfect);
return jpSound;
}
/**
* Inits the ui modes.
*
* @return the jpanel
*/
private JPanel initUIModes() {
// Intro
// intro position
introPosition = new JSlider(0, 100, 0);
introPosition.setMajorTickSpacing(20);
introPosition.setMinorTickSpacing(10);
introPosition.setPaintTicks(true);
introPosition.setPaintLabels(true);
introPosition.setToolTipText(Messages.getString("ParameterView.60"));
introPosition.addMouseWheelListener(new DefaultMouseWheelListener(introPosition));
// intro length
JLabel jlIntroLength = new JLabel(Messages.getString("ParameterView.61"));
jlIntroLength.setToolTipText(Messages.getString("ParameterView.62"));
introLength = new JSlider(0, 30, 20);
introLength.setMajorTickSpacing(10);
introLength.setMinorTickSpacing(1);
introLength.setPaintTicks(true);
introLength.setPaintLabels(true);
introLength.setToolTipText(Messages.getString("ParameterView.62"));
introLength.addMouseWheelListener(new DefaultMouseWheelListener(introLength));
// Best of size
JLabel jlBestofSize = new JLabel(Messages.getString("ParameterView.111"));
jlBestofSize.setToolTipText(Messages.getString("ParameterView.112"));
jtfBestofSize = new JTextField(3);
jtfBestofSize.setToolTipText(Messages.getString("ParameterView.112"));
jtfBestofSize.setInputVerifier(new InputVerifier() {
@Override
public boolean shouldYieldFocus(final JComponent input) {
return verify(input);
}
@Override
public boolean verify(final JComponent input) {
final JTextField tf = (JTextField) input; //NOSONAR
final String sText = tf.getText();
try {
final int iValue = Integer.parseInt(sText);
if ((iValue < 1) || (iValue > 100)) {
jbOK.setEnabled(false);
return false;
}
} catch (final RuntimeException e) {
return false;
}
jbOK.setEnabled(true);
return true;
}
});
// novelties age
JLabel jlNoveltiesAge = new JLabel(Messages.getString("ParameterView.129"));
jlNoveltiesAge.setToolTipText(Messages.getString("ParameterView.130"));
jtfNoveltiesAge = new JTextField(3);
jtfNoveltiesAge.setToolTipText(Messages.getString("ParameterView.130"));
jtfNoveltiesAge.setInputVerifier(new InputVerifier() {
@Override
public boolean shouldYieldFocus(final JComponent input) {
return verify(input);
}
@Override
public boolean verify(final JComponent input) {
final JTextField tf = (JTextField) input; //NOSONAR
final String sText = tf.getText();
try {
final int iValue = Integer.parseInt(sText);
if (iValue < 0) { // if adding age =0, it mean today, no
// max limit
jbOK.setEnabled(false);
return false;
}
} catch (final Exception e) {
return false;
}
jbOK.setEnabled(true);
return true;
}
});
// add panels
JPanel jpModes = new JPanel(new MigLayout("insets 10,gapy 15,gapx 10", "[][grow,200:300:300]"));
jpModes.add(new JLabel(Messages.getString("ParameterView.59")));
jpModes.add(introPosition, "grow,wrap");
jpModes.add(jlIntroLength);
jpModes.add(introLength, "grow,wrap");
jpModes.add(jlBestofSize);
jpModes.add(jtfBestofSize, "grow,wrap");
jpModes.add(jlNoveltiesAge);
jpModes.add(jtfNoveltiesAge, "grow,wrap");
return jpModes;
}
/**
* Inits the ui options.
*
*
* @return the jpanel
*/
private JPanel initUIOptions() {
jcbDisplayUnmounted = new JCheckBox(Messages.getString("JajukJMenuBar.24"));
jcbDisplayUnmounted.setToolTipText(Messages.getString("ParameterView.35"));
jcbDefaultActionClick = new JCheckBox(Messages.getString("ParameterView.179"));
jcbDefaultActionClick.setToolTipText(Messages.getString("ParameterView.180"));
jcbDefaultActionDrop = new JCheckBox(Messages.getString("ParameterView.181"));
jcbDefaultActionDrop.setToolTipText(Messages.getString("ParameterView.182"));
jcbHotkeys = new JCheckBox(Messages.getString("ParameterView.196"));
jcbHotkeys.addActionListener(updateHelper);
jcbHotkeys.setToolTipText(Messages.getString("ParameterView.197"));
// Disable this option if not under windows
jcbHotkeys.setEnabled(UtilSystem.isUnderWindows());
scbLanguage = new SteppedComboBox();
scbLanguage.setRenderer(new BasicComboBoxRenderer() {
private static final long serialVersionUID = -6943363556191659895L;
@Override
public Component getListCellRendererComponent(JList list, Object value, int index,
boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
JLabel jl = (JLabel) value;
setIcon(jl.getIcon());
setText(jl.getText());
return this;
}
});
scbLanguage.removeAllItems();
for (String sDesc : LocaleManager.getLocalesDescs()) {
scbLanguage.addItem(new JLabel(sDesc, Messages.getIcon(sDesc), SwingConstants.LEFT));
}
scbLanguage.setToolTipText(Messages.getString("ParameterView.42"));
scbLanguage.addActionListener(updateHelper);
jcbUseParentDir = new JCheckBox(Messages.getString("ParameterView.101"));
jcbUseParentDir.setToolTipText(Messages.getString("ParameterView.102"));
jcbShowVideos = new JCheckBox(Messages.getString("ParameterView.301"));
jcbShowVideos.setToolTipText(Messages.getString("ParameterView.302"));
jcbPreserveFileDates = new JCheckBox(Messages.getString("ParameterView.305"));
jcbPreserveFileDates.setToolTipText(Messages.getString("ParameterView.306"));
JPanel jpOptions = new JPanel(new MigLayout("insets 10, gapy 15, wrap 1"));
jpOptions.add(new JLabel(Messages.getString("ParameterView.38")), "split 2,gapleft 5");
jpOptions.add(scbLanguage);
jpOptions.add(jcbDisplayUnmounted);
jpOptions.add(jcbDefaultActionClick);
jpOptions.add(jcbDefaultActionDrop);
jpOptions.add(jcbHotkeys);
jpOptions.add(jcbUseParentDir);
jpOptions.add(jcbShowVideos);
jpOptions.add(jcbPreserveFileDates);
return jpOptions;
}
/**
* Inits the ui patterns.
*
*
* @return the jpanel
*/
private JPanel initUIPatterns() {
JPanel patterns = new JPanel(new MigLayout("insets 10, gapy 15, wrap 2", "[][grow]"));
JLabel jlRefactorPattern = new JLabel(Messages.getString("ParameterView.192"));
jlRefactorPattern.setToolTipText(Messages.getString("ParameterView.193"));//NOSONAR
jtfRefactorPattern = new JFormattedTextField();
jtfRefactorPattern.setToolTipText(Messages.getString("ParameterView.193"));
jtfRefactorPattern.setInputVerifier(new PatternInputVerifier());
JLabel jlAnimationPattern = new JLabel(Messages.getString("ParameterView.195"));
jlAnimationPattern.setToolTipText(Messages.getString("ParameterView.193"));
jtfAnimationPattern = new JTextField();
jtfAnimationPattern.setToolTipText(Messages.getString("ParameterView.193"));
// Frame Title Options
JLabel jlFrameTitle = new JLabel(Messages.getString("ParameterView.248"));
jlFrameTitle.setToolTipText(Messages.getString("ParameterView.193"));
jtfFrameTitle = new JTextField();
jtfFrameTitle.setToolTipText(Messages.getString("ParameterView.193"));
// Balloon Notifier pattern
JLabel jlBalloonNotifierPattern = new JLabel(Messages.getString("ParameterView.277"));
jlBalloonNotifierPattern.setToolTipText(Messages.getString("ParameterView.278"));
jtfBalloonNotifierPattern = new JTextField();
jtfBalloonNotifierPattern.setToolTipText(Messages.getString("ParameterView.278"));
// Information view pattern
JLabel jlInformationPattern = new JLabel(Messages.getString("ParameterView.279"));
jlInformationPattern.setToolTipText(Messages.getString("ParameterView.280"));
jtfInformationPattern = new JTextField();
jtfInformationPattern.setToolTipText(Messages.getString("ParameterView.280"));
patterns.add(jlRefactorPattern);
patterns.add(jtfRefactorPattern, "grow"); //NOSONAR
patterns.add(jlAnimationPattern);
patterns.add(jtfAnimationPattern, "grow");
patterns.add(jlFrameTitle);
patterns.add(jtfFrameTitle, "grow");
patterns.add(jlBalloonNotifierPattern);
patterns.add(jtfBalloonNotifierPattern, "grow");
patterns.add(jlInformationPattern);
patterns.add(jtfInformationPattern, "grow");
return patterns;
}
/**
* Inits the ui advanced.
*
*
* @return the jpanel
*/
private JPanel initUIAdvanced() {
jcbBackup = new JCheckBox(Messages.getString("ParameterView.116"));
jcbBackup.addActionListener(updateHelper);
jcbBackup.setToolTipText(Messages.getString("ParameterView.117"));
backupSize = new JSlider(0, 100);
backupSize.setMajorTickSpacing(20);
backupSize.setMinorTickSpacing(10);
backupSize.setPaintTicks(true);
backupSize.setPaintLabels(true);
backupSize.setToolTipText(Messages.getString("ParameterView.119"));
backupSize.addMouseWheelListener(new DefaultMouseWheelListener(backupSize));
jcbRegexp = new JCheckBox(Messages.getString("ParameterView.113"));
jcbRegexp.setToolTipText(Messages.getString("ParameterView.114"));
JLabel jlLogLevel = new JLabel(Messages.getString("ParameterView.46"));
scbLogLevel = new SteppedComboBox();
scbLogLevel.addItem(Messages.getString("ParameterView.47"));
scbLogLevel.addItem(Messages.getString("ParameterView.48"));
scbLogLevel.addItem(Messages.getString("ParameterView.49"));
scbLogLevel.addItem(Messages.getString("ParameterView.50"));
scbLogLevel.addItem(Messages.getString("ParameterView.51"));
scbLogLevel.setToolTipText(Messages.getString("ParameterView.52"));
JLabel jlMPlayerPath = new JLabel(Messages.getString("ParameterView.242"));
jlMPlayerPath.setToolTipText(Messages.getString("ParameterView.243"));
jtfMPlayerPath = new JTextField();
jtfMPlayerPath.setToolTipText(Messages.getString("ParameterView.243"));
JLabel jlMPlayerArgs = new JLabel(Messages.getString("ParameterView.205"));
jlMPlayerArgs.setToolTipText(Messages.getString("ParameterView.206"));
jtfMPlayerArgs = new JTextField();
jtfMPlayerArgs.setToolTipText(Messages.getString("ParameterView.206"));
JLabel jlEnvVariables = new JLabel(Messages.getString("ParameterView.219"));
jlEnvVariables.setToolTipText(Messages.getString("ParameterView.220"));
jtfEnvVariables = new JTextField();
jtfEnvVariables.setToolTipText(Messages.getString("ParameterView.220"));
JLabel jlJajukWorkspace = new JLabel(Messages.getString("ParameterView.207"));
jlJajukWorkspace.setToolTipText(Messages.getString("ParameterView.208"));
// Directory selection
psJajukWorkspace = new PathSelector(SessionService.getWorkspace());
psJajukWorkspace.setToolTipText(Messages.getString("ParameterView.208"));
// If user provided a forced workspace, he can't change it again here
if (SessionService.isForcedWorkspace()) {
jlJajukWorkspace.setEnabled(false);
psJajukWorkspace.setEnabled(false);
}
jcbCheckUpdates = new JCheckBox(Messages.getString("ParameterView.234"));
jcbCheckUpdates.setToolTipText(Messages.getString("ParameterView.234"));
jcbForceFileDate = new JCheckBox(Messages.getString("ParameterView.244"));
jcbForceFileDate.setToolTipText(Messages.getString("ParameterView.245"));
JLabel jlExplorer = new JLabel(Messages.getString("ParameterView.269"));
jlExplorer.setToolTipText(Messages.getString("ParameterView.270"));
jtfExplorerPath = new JTextField();
jtfExplorerPath.setToolTipText(Messages.getString("ParameterView.270"));
JPanel jpAdvanced = new JPanel(new MigLayout("insets 10,gapy 15, gapx 10", "[][grow][fill]"));
jpAdvanced.add(jcbBackup);
jpAdvanced.add(backupSize, "wrap,grow");
jpAdvanced.add(jlLogLevel);
jpAdvanced.add(scbLogLevel, "wrap,grow");
jpAdvanced.add(jlMPlayerPath);
jpAdvanced.add(jtfMPlayerPath, "wrap,grow");
jpAdvanced.add(jlMPlayerArgs);
jpAdvanced.add(jtfMPlayerArgs, "wrap,grow");
jpAdvanced.add(jlEnvVariables);
jpAdvanced.add(jtfEnvVariables, "wrap,grow");
jpAdvanced.add(jlJajukWorkspace);
jpAdvanced.add(psJajukWorkspace, "wrap,grow");
jpAdvanced.add(jlExplorer);
jpAdvanced.add(jtfExplorerPath, "grow,wrap");
jpAdvanced.add(jcbRegexp, "wrap");
jpAdvanced.add(jcbCheckUpdates, "wrap");
jpAdvanced.add(jcbForceFileDate, "wrap");
return jpAdvanced;
}
/**
* Inits the ui network.
*
*
* @return the jpanel
*/
private JPanel initUINetwork() {
bgProxy = new ButtonGroup();
jcbProxyNone = new JRadioButton(Messages.getString("ParameterView.236"));
jcbProxyNone.setToolTipText(Messages.getString("ParameterView.236"));
jcbProxyNone.addActionListener(updateHelper);
jcbNoneInternetAccess = new JCheckBox(Messages.getString("ParameterView.264"));
jcbNoneInternetAccess.setToolTipText(Messages.getString("ParameterView.265"));
jcbProxyHttp = new JRadioButton(Messages.getString("ParameterView.237"));
jcbProxyHttp.setToolTipText(Messages.getString("ParameterView.237"));
jcbProxyHttp.addActionListener(updateHelper);
jcbProxySocks = new JRadioButton(Messages.getString("ParameterView.238"));
jcbProxySocks.setToolTipText(Messages.getString("ParameterView.238"));
jcbProxySocks.addActionListener(updateHelper);
bgProxy.add(jcbProxyNone);
bgProxy.add(jcbProxyHttp);
bgProxy.add(jcbProxySocks);
jlProxyHostname = new JLabel(Messages.getString("ParameterView.144"));
jlProxyHostname.setToolTipText(Messages.getString("ParameterView.145"));
jtfProxyHostname = new JTextField();
jtfProxyHostname.setToolTipText(Messages.getString("ParameterView.145"));
jlProxyPort = new JLabel(Messages.getString("ParameterView.146"));
jlProxyPort.setToolTipText(Messages.getString("ParameterView.147"));
jtfProxyPort = new JTextField();
jtfProxyPort.setToolTipText(Messages.getString("ParameterView.147"));
jtfProxyPort.setInputVerifier(new InputVerifier() {
@Override
public boolean shouldYieldFocus(final JComponent input) {
return verify(input);
}
@Override
public boolean verify(final JComponent input) {
final JTextField tf = (JTextField) input;//NOSONAR
final String sText = tf.getText();
try {
final int iValue = Integer.parseInt(sText);
if ((iValue < 0) || (iValue > 65535)) {
// port is between 0 and 65535
jbOK.setEnabled(false);
return false;
}
} catch (final Exception e) {
return false;
}
jbOK.setEnabled(true);
return true;
}
});
jlProxyLogin = new JLabel(Messages.getString("ParameterView.142"));
jlProxyLogin.setToolTipText(Messages.getString("ParameterView.143"));
jtfProxyLogin = new JTextField();
jtfProxyLogin.setToolTipText(Messages.getString("ParameterView.143"));
jlProxyPwd = new JLabel(Messages.getString("ParameterView.239"));
jlProxyPwd.setToolTipText(Messages.getString("ParameterView.239"));
jtfProxyPwd = new JPasswordField();
jtfProxyPwd.setToolTipText(Messages.getString("ParameterView.239"));
jlConnectionTO = new JLabel(Messages.getString("ParameterView.160"));
jlConnectionTO.setToolTipText(Messages.getString("ParameterView.160"));
connectionTO = new JSlider(0, 60);
connectionTO.setMajorTickSpacing(10);
connectionTO.setMinorTickSpacing(5);
connectionTO.setPaintTicks(true);
connectionTO.setPaintLabels(true);
connectionTO.setToolTipText(Messages.getString("ParameterView.161"));
connectionTO.addMouseWheelListener(new DefaultMouseWheelListener(connectionTO));
// Add items
JPanel jpProxy = new JPanel(new MigLayout("insets 10,gapy 15, gapx 10", "[][grow,100:300:300]"));
jpProxy.setBorder(BorderFactory.createTitledBorder(Messages.getString("ParameterView.268")));
jpProxy.add(jcbProxyNone, "wrap");
jpProxy.add(jcbProxyHttp, "wrap");
jpProxy.add(jcbProxySocks, "wrap");
jpProxy.add(jlProxyHostname);
jpProxy.add(jtfProxyHostname, "wrap,grow");
jpProxy.add(jlProxyPort);
jpProxy.add(jtfProxyPort, "wrap,grow");
jpProxy.add(jlProxyLogin);
jpProxy.add(jtfProxyLogin, "wrap,grow");
jpProxy.add(jlProxyPwd);
jpProxy.add(jtfProxyPwd, "wrap,grow");
JPanel jpNetwork = new JPanel(new MigLayout("insets 10,gapy 15, gapx 10", "[grow]"));
jpNetwork.add(jcbNoneInternetAccess, "wrap");
jpNetwork.add(jlConnectionTO, "split 2");
jpNetwork.add(connectionTO, "wrap,grow,width 200!");
jpNetwork.add(jpProxy, "span");
return jpNetwork;
}
/**
* Inits the ui last fm.
*
*
* @return the jpanel
*/
private JPanel initUILastFM() {
jcbAudioScrobbler = new JCheckBox(Messages.getString("ParameterView.199"));
jcbAudioScrobbler.setToolTipText(Messages.getString("ParameterView.200"));
jcbAudioScrobbler.addActionListener(updateHelper);
jlASUser = new JLabel(Messages.getString("ParameterView.201"));
jtfASUser = new JTextField();
jtfASUser.setToolTipText(Messages.getString("ParameterView.202"));
jlASPassword = new JLabel(Messages.getString("ParameterView.203"));
jpfASPassword = new JPasswordField();
jpfASPassword.setToolTipText(Messages.getString("ParameterView.204"));
jcbEnableLastFMInformation = new JCheckBox(Messages.getString("ParameterView.240"));
jcbEnableLastFMInformation.setToolTipText(Messages.getString("ParameterView.241"));
// Add items
JPanel jpLastFM = new JPanel(new MigLayout("insets 10,gapy 15,gapx 10", "[grow]"));
jpLastFM.add(jcbEnableLastFMInformation, "wrap");
jpLastFM.add(jcbAudioScrobbler, "wrap");
jpLastFM.add(jlASUser);
jpLastFM.add(jtfASUser, "wrap,grow,width 100:300:300");
jpLastFM.add(jlASPassword);
jpLastFM.add(jpfASPassword, "wrap,grow,width 100:300:300");
return jpLastFM;
}
/**
* Inits the ui covers.
*
*
* @return the jpanel
*/
private JPanel initUICovers() {
jcbAutoCover = new JCheckBox(Messages.getString("ParameterView.148"));
jcbAutoCover.setToolTipText(Messages.getString("ParameterView.149"));
jcbAutoCover.addActionListener(updateHelper);
jcbShuffleCover = new JCheckBox(Messages.getString("ParameterView.166"));
jcbShuffleCover.setToolTipText(Messages.getString("ParameterView.167"));
jcbShuffleCover.addActionListener(updateHelper);
jlCoverSize = new JLabel(Messages.getString("ParameterView.150"));
jlCoverSize.setToolTipText(Messages.getString("ParameterView.151"));
jcbCoverSize = new JComboBox();
jcbCoverSize.setToolTipText(Messages.getString("ParameterView.151"));
jcbCoverSize.addItem(Messages.getString("ParameterView.211"));
jcbCoverSize.addItem(Messages.getString("ParameterView.212"));
jcbCoverSize.addItem(Messages.getString("ParameterView.213"));
jcbCoverSize.addItem(Messages.getString("ParameterView.214"));
jcbCoverSize.addItem(Messages.getString("ParameterView.215"));
jcb3dCover = new JCheckBox(Messages.getString("ParameterView.273"));
jcb3dCover.setToolTipText(Messages.getString("ParameterView.274"));
jcb3dCoverFS = new JCheckBox(Messages.getString("ParameterView.283"));
jcb3dCoverFS.setToolTipText(Messages.getString("ParameterView.284"));
jlDefaultCoverSearchPattern = new JLabel(Messages.getString("ParameterView.256"));
jlDefaultCoverSearchPattern.setToolTipText(Messages.getString("ParameterView.257"));
jtfDefaultCoverSearchPattern = new JTextField();
jtfDefaultCoverSearchPattern.setToolTipText(Messages.getString("ParameterView.257"));
jcbSaveExplorerFriendly = new JCheckBox(Messages.getString("ParameterView.260"));
jcbSaveExplorerFriendly.setToolTipText(Messages.getString("ParameterView.261"));
jcbSaveExplorerFriendly.addActionListener(updateHelper);
// Add items
JPanel jpCovers = new JPanel(new MigLayout("insets 10,gapy 15,gapx 10", "[40%][40%]"));
jpCovers.add(jcbShuffleCover, "wrap");
jpCovers.add(jcbAutoCover, "wrap");
jpCovers.add(jcb3dCover, "split 2");
jpCovers.add(jcb3dCoverFS, "wrap");
jpCovers.add(jcbSaveExplorerFriendly, "wrap");
jpCovers.add(jlCoverSize);
jpCovers.add(jcbCoverSize, "wrap,grow");
jpCovers.add(jlDefaultCoverSearchPattern);
jpCovers.add(jtfDefaultCoverSearchPattern, "wrap,grow");
return jpCovers;
}
/**
* Inits the GUI tab.
*
* @return the jpanel
*/
private JPanel initUIGUI() {
// Catalog view
jlCatalogPages = new JLabel(Messages.getString("ParameterView.221"));
jlCatalogPages.setToolTipText(Messages.getString("ParameterView.222"));
jsCatalogPages = new JSlider(0, 1000, Conf.getInt(Const.CONF_CATALOG_PAGE_SIZE));
jsCatalogPages.setMinorTickSpacing(100);
jsCatalogPages.setMajorTickSpacing(200);
jsCatalogPages.setPaintTicks(true);
jsCatalogPages.setPaintLabels(true);
jsCatalogPages.setToolTipText(Integer.toString(jsCatalogPages.getValue()));
jsCatalogPages.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
jsCatalogPages.setToolTipText(Integer.toString(jsCatalogPages.getValue()));
}
});
jcbShowPopups = new JCheckBox(Messages.getString("ParameterView.228"));
jcbShowPopups.setToolTipText(Messages.getString("ParameterView.292"));
// Splashscreen
jcbSplashscreen = new JCheckBox(Messages.getString("ParameterView.290"));
jcbSplashscreen.setToolTipText(Messages.getString("ParameterView.291"));
jcbShowSystray = new JCheckBox(Messages.getString("ParameterView.271"));
// Disable this option if the tray is not supported by the platform
jcbShowSystray.setEnabled(SystemTray.isSupported());
// Disable minimize to systray option if unchecked
jcbShowSystray.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jcbMinimizeToTray.setEnabled(jcbShowSystray.isSelected());
jcbClickTrayAlwaysDisplayWindow.setEnabled(jcbShowSystray.isSelected());
if (!jcbShowSystray.isSelected()) {
jcbMinimizeToTray.setSelected(false);
jcbClickTrayAlwaysDisplayWindow.setSelected(false);
}
}
});
jcbShowSystray.setToolTipText(Messages.getString("ParameterView.272"));
jcbMinimizeToTray = new JCheckBox(Messages.getString("ParameterView.281"));
jcbMinimizeToTray.setToolTipText(Messages.getString("ParameterView.282"));
jcbClickTrayAlwaysDisplayWindow = new JCheckBox(Messages.getString("ParameterView.303"));
jcbClickTrayAlwaysDisplayWindow.setToolTipText(Messages.getString("ParameterView.304"));
JLabel jlPerspectiveSize = new JLabel(Messages.getString("ParameterView.246"));
jsPerspectiveSize = new JSlider(16, 45, Conf.getInt(Const.CONF_PERSPECTIVE_ICONS_SIZE));
jsPerspectiveSize.setSnapToTicks(true);
jsPerspectiveSize.setMajorTickSpacing(8);
jsPerspectiveSize.setMinorTickSpacing(1);
jsPerspectiveSize.setPaintTicks(true);
jsPerspectiveSize.setPaintLabels(true);
jsPerspectiveSize.setToolTipText(Messages.getString("ParameterView.246"));
jbCatalogRefresh = new JajukButton(Messages.getString("CatalogView.19"),
IconLoader.getIcon(JajukIcons.REFRESH));
jbCatalogRefresh.setToolTipText(Messages.getString("CatalogView.3"));
jbCatalogRefresh.addActionListener(updateHelper);
final JXCollapsiblePane catalogView = new JXCollapsiblePane();
catalogView.setLayout(new VerticalLayout(10));
catalogView.setCollapsed(true);
final ToggleLink toggleCatalog = new ToggleLink(Messages.getString("ParameterView.229"),
catalogView);
final JPanel jpCatalogSize = new JPanel();
jpCatalogSize.setLayout(new HorizontalLayout());
jpCatalogSize.add(jlCatalogPages);
jpCatalogSize.add(jsCatalogPages);
catalogView.add(jpCatalogSize);
catalogView.add(jbCatalogRefresh);
//Title view
jcbTitleAnimation = new JCheckBox(Messages.getString("ParameterView.288"));
jcbTitleAnimation.setToolTipText(Messages.getString("ParameterView.288"));
final JXCollapsiblePane titleView = new JXCollapsiblePane();
titleView.add(jcbTitleAnimation);
titleView.setCollapsed(true);
final ToggleLink toggleTitle = new ToggleLink(Messages.getString("ParameterView.289"),
titleView);
// Font selector
jlFonts = new JLabel(Messages.getString("ParameterView.223"));
jsFonts = new JSlider(8, 16, Conf.getInt(Const.CONF_FONTS_SIZE));
jsFonts.setSnapToTicks(true);
jsFonts.setMajorTickSpacing(1);
jsFonts.setMinorTickSpacing(1);
jsFonts.setPaintTicks(true);
jsFonts.setPaintLabels(true);
jsFonts.setToolTipText(Messages.getString("ParameterView.224"));
// Notification type
jlNotificationType = new JLabel(Messages.getString("ParameterView.275"));
jlNotificationType.setToolTipText(Messages.getString("ParameterView.276"));
jcbNotificationType = new JComboBox();
jcbNotificationType.setToolTipText(Messages.getString("ParameterView.276"));
for (NotificatorTypes type : NotificatorTypes.values()) {
String notificatorType = Messages.getString(NOTIFICATOR_PREFIX + type);
jcbNotificationType.addItem(notificatorType);
}
// LaF
jlLAF = new JLabel(Messages.getString("ParameterView.43"));
jlLAF.setToolTipText(Messages.getString("ParameterView.44"));
scbLAF = new SteppedComboBox();
final Map<String, SkinInfo> map = SubstanceLookAndFeel.getAllSkins();
// Use a tree set to sort themes alphabetically
final Set<String> themes = new TreeSet<String>(map.keySet());
// Add each theme to the combo box
for (final String theme : themes) {
scbLAF.addItem(theme);
}
scbLAF.setToolTipText(Messages.getString("ParameterView.44"));
// Refresh full GUI at each LAF change as a preview
scbLAF.addActionListener(updateHelper);
// Add items
JPanel jpUI = new JPanel(new MigLayout("insets 10,gapx 10,gapy 15"));
jpUI.add(jcbShowPopups, "wrap");
jpUI.add(jcbSplashscreen, "wrap");
jpUI.add(jcbShowSystray, "split 3");
jpUI.add(jcbMinimizeToTray);
jpUI.add(jcbClickTrayAlwaysDisplayWindow, "wrap");
jpUI.add(jlFonts);
jpUI.add(jsFonts, "wrap,grow");
jpUI.add(jlNotificationType);
jpUI.add(jcbNotificationType, "wrap,grow");
jpUI.add(jlLAF);
jpUI.add(scbLAF, "wrap,grow");
jpUI.add(jlPerspectiveSize);
jpUI.add(jsPerspectiveSize, "wrap,grow");
jpUI.add(toggleCatalog, "wrap,grow");
jpUI.add(catalogView, "wrap,grow,span");
jpUI.add(toggleTitle, "wrap,grow");
jpUI.add(titleView, "wrap,grow,span");
return jpUI;
}
/*
* (non-Javadoc)
*
* @see org.jajuk.ui.IView#display()
*/
@Override
public void initUI() {
JPanel jpHistory = initUIHistory();
JPanel jpStartup = initUIStartup();
JPanel jpConfirmations = initUIConfirmations();
JPanel jpModes = initUIModes();
JPanel jpSound = initUISound();
JPanel jpOptions = initUIOptions();
JPanel jpPatterns = initUIPatterns();
JPanel jpAdvanced = initUIAdvanced();
JPanel jpNetwork = initUINetwork();
JPanel jpLastFM = initUILastFM();
JPanel jpCovers = initUICovers();
JPanel jpUI = initUIGUI();
JPanel jpWebradios = initWebradios();
// --OK/cancel panel
jbOK = new JButton(Messages.getString("ParameterView.85"), IconLoader.getIcon(JajukIcons.OK));
jbOK.addActionListener(updateHelper);
jbDefault = new JButton(Messages.getString("ParameterView.86"),
IconLoader.getIcon(JajukIcons.DEFAULTS_BIG));
jbDefault.addActionListener(updateHelper);
// --Global layout
// add main panels
jtpMain = new JTabbedPane(SwingConstants.TOP);
// ScrollPane without border
final class JajukJScrollPane extends JScrollPane {
private static final long serialVersionUID = 4564343623724771988L;
private JajukJScrollPane(final Component view) {
super(view);
setBorder(null);
}
}
jtpMain.addTab(Messages.getString("ParameterView.33"), new JajukJScrollPane(jpOptions));
jtpMain.addTab(Messages.getString("ParameterView.226"), new JajukJScrollPane(jpModes));
jtpMain.addTab(Messages.getString("ParameterView.287"), new JajukJScrollPane(jpSound));
jtpMain.addTab(Messages.getString("ParameterView.225"), new JajukJScrollPane(jpUI));
jtpMain.addTab(Messages.getString("ParameterView.19"), new JajukJScrollPane(jpStartup));
jtpMain.addTab(Messages.getString("ParameterView.98"), new JajukJScrollPane(jpPatterns));
jtpMain.addTab(Messages.getString("ParameterView.8"), new JajukJScrollPane(jpHistory));
jtpMain.addTab(Messages.getString("ParameterView.235"), new JajukJScrollPane(jpLastFM));
jtpMain.addTab(Messages.getString("WebRadioView.0"), new JajukJScrollPane(jpWebradios));
jtpMain.addTab(Messages.getString("ParameterView.159"), new JajukJScrollPane(jpCovers));
jtpMain.addTab(Messages.getString("ParameterView.26"), new JajukJScrollPane(jpConfirmations));
jtpMain.addTab(Messages.getString("ParameterView.139"), new JajukJScrollPane(jpNetwork));
jtpMain.addTab(Messages.getString("ParameterView.115"), new JajukJScrollPane(jpAdvanced));
try {
// Reload stored selected index
jtpMain.setSelectedIndex(Conf.getInt(Const.CONF_OPTIONS_TAB));
} catch (final Exception e) {
// an error can occur if a new release brings or remove tabs
Log.error(e);
jtpMain.setSelectedIndex(0);
}
jtpMain.addChangeListener(updateHelper);
setLayout(new MigLayout("insets 10,gapx 10", "[grow]", "[grow][]"));
add(jtpMain, "wrap,span,grow");
add(jbOK, "split 2,right,sg group1");
add(jbDefault, "sg group1");
// update widgets state
updateHelper.updateGUIFromConf();
ObservationManager.register(this);
}
/*
* (non-Javadoc)
*
* @see org.jajuk.base.Observer#update(org.jajuk.base.Event)
*/
@Override
public void update(final JajukEvent event) {
final JajukEvents subject = event.getSubject();
if (JajukEvents.PARAMETERS_CHANGE.equals(subject)) {
// Ignore this event is thrown by this view itself (to avoid loosing
// already set options)
if ((event.getDetails() != null) && (event.getDetails().get(Const.DETAIL_ORIGIN) != null)
&& event.getDetails().get(Const.DETAIL_ORIGIN).equals(this)) {
return;
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
updateHelper.updateGUIFromConf();
}
});
}
}
/*
* (non-Javadoc)
*
* @see java.awt.Container#removeAll()
*/
@Override
public void removeAll() {
// We have to override removeAll() to work around a memory leak related to SearchBox..
// make sure that the search box stops waking to free up the reference to the Timer
sbSearch.close();
super.removeAll();
}
/*
* (non-Javadoc)
*
* @see org.jajuk.ui.views.ViewAdapter#cleanup()
*/
@Override
public void cleanup() {
// make sure that the search box stops to free up the reference to the Timer
sbSearch.close();
super.cleanup();
}
}