/*
* Copyright (c) 2008-2019 Emmanuel Dupuy.
* This project is distributed under the GPLv3 license.
* This is a Copyleft license that gives the user the right to use,
* copy and modify the code freely for non-commercial purposes.
*/
package org.jd.gui.service.preferencespanel;
import org.jd.gui.spi.PreferencesPanel;
import org.jd.gui.util.exception.ExceptionUtil;
import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.*;
import java.util.Map;
public class DirectoryIndexerPreferencesProvider extends JPanel implements PreferencesPanel, DocumentListener {
protected static final int MAX_VALUE = 30;
protected static final String MAXIMUM_DEPTH_KEY = "DirectoryIndexerPreferences.maximumDepth";
protected PreferencesPanel.PreferencesPanelChangeListener listener = null;
protected JTextField maximumDepthTextField;
protected Color errorBackgroundColor = Color.RED;
protected Color defaultBackgroundColor;
public DirectoryIndexerPreferencesProvider() {
super(new BorderLayout());
add(new JLabel("Maximum depth (1.." + MAX_VALUE + "): "), BorderLayout.WEST);
maximumDepthTextField = new JTextField();
maximumDepthTextField.getDocument().addDocumentListener(this);
add(maximumDepthTextField, BorderLayout.CENTER);
defaultBackgroundColor = maximumDepthTextField.getBackground();
}
// --- PreferencesPanel --- //
@Override public String getPreferencesGroupTitle() { return "Indexer"; }
@Override public String getPreferencesPanelTitle() { return "Directory exploration"; }
@Override public JComponent getPanel() { return this; }
@Override public void init(Color errorBackgroundColor) {
this.errorBackgroundColor = errorBackgroundColor;
}
@Override public boolean isActivated() { return true; }
@Override public void loadPreferences(Map<String, String> preferences) {
String preference = preferences.get(MAXIMUM_DEPTH_KEY);
maximumDepthTextField.setText((preference != null) ? preference : "15");
maximumDepthTextField.setCaretPosition(maximumDepthTextField.getText().length());
}
@Override
public void savePreferences(Map<String, String> preferences) {
preferences.put(MAXIMUM_DEPTH_KEY, maximumDepthTextField.getText());
}
@Override
public boolean arePreferencesValid() {
try {
int i = Integer.valueOf(maximumDepthTextField.getText());
return (i > 0) && (i <= MAX_VALUE);
} catch (NumberFormatException e) {
assert ExceptionUtil.printStackTrace(e);
return false;
}
}
@Override
public void addPreferencesChangeListener(PreferencesPanel.PreferencesPanelChangeListener listener) {
this.listener = listener;
}
// --- DocumentListener --- //
@Override public void insertUpdate(DocumentEvent e) { onTextChange(); }
@Override public void removeUpdate(DocumentEvent e) { onTextChange(); }
@Override public void changedUpdate(DocumentEvent e) { onTextChange(); }
public void onTextChange() {
maximumDepthTextField.setBackground(arePreferencesValid() ? defaultBackgroundColor : errorBackgroundColor);
if (listener != null) {
listener.preferencesPanelChanged(this);
}
}
}