blob: 57ffb65bcf78ec3f27216d4ed4612f9db0ec1360 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* JFXIconsPanel.java
*
* Created on 5.2.2013
*/
package org.netbeans.modules.javafx2.project.ui;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.filechooser.FileFilter;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.project.Project;
import org.netbeans.modules.javafx2.project.JFXProjectProperties;
import org.netbeans.modules.javafx2.project.JFXProjectUtils;
import org.openide.filesystems.FileUtil;
import org.openide.util.NbBundle;
/**
*
* @author Petr Somol
*/
public class JFXIconsPanel extends javax.swing.JPanel {
private final Project project;
private final JFXProjectProperties jfxProps;
private File lastImageFolder = null;
private IconFieldListener wsIconListener = null;
private IconFieldListener splashListener = null;
private IconFieldListener nativeIconListener = null;
/**
* Creates new form JFXIconsPanel
*/
public JFXIconsPanel(JFXProjectProperties props, File lastFolder) {
this.jfxProps = props;
this.project = jfxProps.getProject();
this.lastImageFolder = lastFolder;
initComponents();
wsIconTextField.setText(jfxProps.getWSIconPath());
splashTextField.setText(jfxProps.getSplashImagePath());
nativeIconTextField.setText(jfxProps.getNativeIconPath());
}
void store() {
jfxProps.setWSIconPath(wsIconTextField.getText().trim());
jfxProps.setSplashImagePath(splashTextField.getText().trim());
jfxProps.setNativeIconPath(nativeIconTextField.getText().trim());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
wsIconLabel = new javax.swing.JLabel();
wsIconTextField = new javax.swing.JTextField();
splashLabel = new javax.swing.JLabel();
splashTextField = new javax.swing.JTextField();
nativeIconLabel = new javax.swing.JLabel();
nativeIconTextField = new javax.swing.JTextField();
wsIconButton = new javax.swing.JButton();
splashButton = new javax.swing.JButton();
nativeIconButton = new javax.swing.JButton();
remarkLabel = new javax.swing.JLabel();
wsIconToggleButton = new javax.swing.JButton();
nativeIconToggleButton = new javax.swing.JButton();
splashToggleButton = new javax.swing.JButton();
setLayout(new java.awt.GridBagLayout());
wsIconLabel.setLabelFor(wsIconTextField);
org.openide.awt.Mnemonics.setLocalizedText(wsIconLabel, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.wsIconLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(14, 38, 0, 0);
add(wsIconLabel, gridBagConstraints);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 450;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.weightx = 0.1;
gridBagConstraints.insets = new java.awt.Insets(11, 4, 0, 0);
add(wsIconTextField, gridBagConstraints);
wsIconTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.textFieldWSIcon.text")); // NOI18N
wsIconTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.textFieldWSIcon.text")); // NOI18N
splashLabel.setLabelFor(splashTextField);
org.openide.awt.Mnemonics.setLocalizedText(splashLabel, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.splashLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(14, 44, 0, 0);
add(splashLabel, gridBagConstraints);
splashTextField.setText(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.splashTextField.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 450;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.weightx = 0.1;
gridBagConstraints.insets = new java.awt.Insets(11, 4, 0, 0);
add(splashTextField, gridBagConstraints);
splashTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.textFieldSplashImage.text")); // NOI18N
splashTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.textFieldSplashImage.text")); // NOI18N
nativeIconLabel.setLabelFor(nativeIconTextField);
org.openide.awt.Mnemonics.setLocalizedText(nativeIconLabel, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.nativeIconLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(14, 10, 0, 0);
add(nativeIconLabel, gridBagConstraints);
nativeIconTextField.setText(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.nativeIconTextField.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 2;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.ipadx = 450;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.weightx = 0.1;
gridBagConstraints.insets = new java.awt.Insets(11, 4, 0, 0);
add(nativeIconTextField, gridBagConstraints);
nativeIconTextField.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.textFieldNativeIcon.text")); // NOI18N
nativeIconTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.textFieldNativeIcon.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(wsIconButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.wsIconButton.text")); // NOI18N
wsIconButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
wsIconButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipady = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 10);
add(wsIconButton, gridBagConstraints);
wsIconButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonWSIcon.text")); // NOI18N
wsIconButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonWSIcon.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(splashButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.splashButton.text")); // NOI18N
splashButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
splashButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 1;
gridBagConstraints.ipady = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 10);
add(splashButton, gridBagConstraints);
splashButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonSplashImage.text")); // NOI18N
splashButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonSplashImage.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(nativeIconButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.nativeIconButton.text")); // NOI18N
nativeIconButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
nativeIconButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 2;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 10);
add(nativeIconButton, gridBagConstraints);
nativeIconButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonNativeIcon.text")); // NOI18N
nativeIconButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonNativeIcon.text")); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(remarkLabel, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.remarkLabel.text")); // NOI18N
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 3;
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
gridBagConstraints.insets = new java.awt.Insets(1, 4, 3, 0);
add(remarkLabel, gridBagConstraints);
wsIconToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/netbeans/modules/javafx2/project/ui/resources/toggle_absolute_relative.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(wsIconToggleButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.wsIconToggleButton.text")); // NOI18N
wsIconToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
wsIconToggleButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.ipadx = -25;
gridBagConstraints.ipady = -1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 0);
add(wsIconToggleButton, gridBagConstraints);
wsIconToggleButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonToggleWSIcon.text")); // NOI18N
wsIconToggleButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonToggleWSIcon.text")); // NOI18N
nativeIconToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/netbeans/modules/javafx2/project/ui/resources/toggle_absolute_relative.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(nativeIconToggleButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.nativeIconToggleButton.text")); // NOI18N
nativeIconToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
nativeIconToggleButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 2;
gridBagConstraints.ipadx = -25;
gridBagConstraints.ipady = -1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 0);
add(nativeIconToggleButton, gridBagConstraints);
nativeIconToggleButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonToggleNativeIcon.text")); // NOI18N
nativeIconToggleButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonToggleNativeIcon.text")); // NOI18N
splashToggleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/netbeans/modules/javafx2/project/ui/resources/toggle_absolute_relative.png"))); // NOI18N
org.openide.awt.Mnemonics.setLocalizedText(splashToggleButton, org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "JFXIconsPanel.splashToggleButton.text")); // NOI18N
splashToggleButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
splashToggleButtonActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.ipadx = -25;
gridBagConstraints.ipady = -1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.ABOVE_BASELINE_LEADING;
gridBagConstraints.insets = new java.awt.Insets(9, 6, 0, 0);
add(splashToggleButton, gridBagConstraints);
splashToggleButton.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AN_JFXIconsPanel.buttonToggleSplashScreen.text")); // NOI18N
splashToggleButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "AD_JFXIconsPanel.buttonToggleSplashScreen.text")); // NOI18N
}// </editor-fold>//GEN-END:initComponents
private void wsIconButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wsIconButtonActionPerformed
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(null);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setFileFilter(new IconFileFilter(true));
String current = wsIconTextField.getText();
File lastFolder = current!=null ? getFileFromPath(current) : null;
if (lastFolder != null) {
chooser.setSelectedFile(lastFolder);
} else if (lastImageFolder != null) {
chooser.setSelectedFile(lastImageFolder);
} else { // ???
// workDir = FileUtil.toFile(project.getProjectDirectory()).getAbsolutePath();
// chooser.setSelectedFile(new File(workDir));
}
chooser.setDialogTitle(NbBundle.getMessage(JFXIconsPanel.class, "LBL_Select_Icon_Image")); // NOI18N
if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) {
File file = FileUtil.normalizeFile(chooser.getSelectedFile());
String relPath = JFXProjectUtils.getRelativePath(project.getProjectDirectory(), FileUtil.toFileObject(file));
wsIconTextField.setText(relPath);
lastImageFolder = file;
}
}//GEN-LAST:event_wsIconButtonActionPerformed
private void splashButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_splashButtonActionPerformed
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(null);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setFileFilter(new IconFileFilter(false));
String current = splashTextField.getText();
File lastFolder = current!=null ? getFileFromPath(current) : null;
if (lastFolder != null) {
chooser.setSelectedFile(lastFolder);
} else if (lastImageFolder != null) {
chooser.setSelectedFile(lastImageFolder);
} else { // ???
// workDir = FileUtil.toFile(project.getProjectDirectory()).getAbsolutePath();
// chooser.setSelectedFile(new File(workDir));
}
chooser.setDialogTitle(NbBundle.getMessage(JFXIconsPanel.class, "LBL_Select_Icon_Image")); // NOI18N
if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) {
File file = FileUtil.normalizeFile(chooser.getSelectedFile());
String relPath = JFXProjectUtils.getRelativePath(project.getProjectDirectory(), FileUtil.toFileObject(file));
splashTextField.setText(relPath);
lastImageFolder = file;
}
}//GEN-LAST:event_splashButtonActionPerformed
private void nativeIconButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nativeIconButtonActionPerformed
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(null);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setMultiSelectionEnabled(false);
chooser.setFileFilter(new IconFileFilter(false));
String current = nativeIconTextField.getText();
File lastFolder = current!=null ? getFileFromPath(current) : null;
if (lastFolder != null) {
chooser.setSelectedFile(lastFolder);
} else if (lastImageFolder != null) {
chooser.setSelectedFile(lastImageFolder);
} else { // ???
// workDir = FileUtil.toFile(project.getProjectDirectory()).getAbsolutePath();
// chooser.setSelectedFile(new File(workDir));
}
chooser.setDialogTitle(NbBundle.getMessage(JFXIconsPanel.class, "LBL_Select_Icon_Image")); // NOI18N
if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) {
File file = FileUtil.normalizeFile(chooser.getSelectedFile());
String relPath = JFXProjectUtils.getRelativePath(project.getProjectDirectory(), FileUtil.toFileObject(file));
nativeIconTextField.setText(relPath);
lastImageFolder = file;
}
}//GEN-LAST:event_nativeIconButtonActionPerformed
private void togglePathType(@NonNull JTextField field) {
String path = field.getText();
if(isAbsolutePath(path)) {
File file = getFileFromPath(path);
String r = getRelativePath(file);
if(r != null && !r.isEmpty()) {
field.setText(r);
} else {
Toolkit.getDefaultToolkit().beep();
}
} else {
if(isRelativePath(path)) {
File file = getFileFromPath(path);
String a = getAbsolutePath(file);
if(a != null && !a.isEmpty()) {
field.setText(a);
} else {
Toolkit.getDefaultToolkit().beep();
}
}
}
}
private void wsIconToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wsIconToggleButtonActionPerformed
togglePathType(wsIconTextField);
}//GEN-LAST:event_wsIconToggleButtonActionPerformed
private void splashToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_splashToggleButtonActionPerformed
togglePathType(splashTextField);
}//GEN-LAST:event_splashToggleButtonActionPerformed
private void nativeIconToggleButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nativeIconToggleButtonActionPerformed
togglePathType(nativeIconTextField);
}//GEN-LAST:event_nativeIconToggleButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton nativeIconButton;
private javax.swing.JLabel nativeIconLabel;
private javax.swing.JTextField nativeIconTextField;
private javax.swing.JButton nativeIconToggleButton;
private javax.swing.JLabel remarkLabel;
private javax.swing.JButton splashButton;
private javax.swing.JLabel splashLabel;
private javax.swing.JTextField splashTextField;
private javax.swing.JButton splashToggleButton;
private javax.swing.JButton wsIconButton;
private javax.swing.JLabel wsIconLabel;
private javax.swing.JTextField wsIconTextField;
private javax.swing.JButton wsIconToggleButton;
// End of variables declaration//GEN-END:variables
/**
* WebStart accepts GIF, JPG only
* No restriction assumed for splash images
* Native Package icons currently accept native icons only, but should
* soon accept general bitmaps, thus imposing no limit here
*/
private static class IconFileFilter extends FileFilter {
private boolean wsOnly = false;
public IconFileFilter(boolean forWebStart) {
this.wsOnly = forWebStart;
}
// should check size of images?
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String name = f.getName();
int index = name.lastIndexOf('.');
if (index > 0 && index < name.length() - 1) {
String ext = name.substring(index+1).toLowerCase();
if ("gif".equals(ext) || "jpg".equals(ext) || // NOI18N
(!wsOnly && ("png".equals(ext) || "ico".equals(ext) || "icns".equals(ext))) ) { // NOI18N
return true;
}
}
return false;
}
public String getDescription() {
return NbBundle.getMessage(JFXIconsPanel.class, "MSG_IconFileFilter_Description"); // NOI18N
}
}
boolean isAbsolutePath(String file) {
File f = new File(file);
return f.exists();
}
boolean isRelativePath(String file) {
File f = new File(project.getProjectDirectory().getPath() + File.separator + file);
return f.exists();
}
/**
* return File from String path, either absolute or project-relative
* @param file String path representation
* @return File or null if path invalid
*/
File getFileFromPath(String file) {
if(file == null || file.isEmpty()) {
return null;
}
File f = new File(file);
if(f.exists()) {
return f.getAbsoluteFile();
}
f = new File(project.getProjectDirectory().getPath() + File.separator + file);
if(f.exists()) {
return f.getAbsoluteFile();
}
return null;
}
String getRelativePath(@NonNull File file) {
return JFXProjectUtils.getRelativePath(project.getProjectDirectory(), FileUtil.toFileObject(file));
}
String getAbsolutePath(@NonNull File file) {
try {
return file.getCanonicalPath();
} catch (IOException ex) {
return file.getAbsolutePath();
}
}
class IconFieldListener implements DocumentListener {
private ToggleButtonUpdater toggleUpdater;
public IconFieldListener(ToggleButtonUpdater toggleUpdater) {
this.toggleUpdater = toggleUpdater;
}
public void changedUpdate(DocumentEvent e) {
updateComponent();
}
public void removeUpdate(DocumentEvent e) {
updateComponent();
}
public void insertUpdate(DocumentEvent e) {
updateComponent();
}
public void updateComponent() {
if(toggleUpdater != null) {
toggleUpdater.update();
}
}
}
/**
* on IconTextField edit check if field contents represent existing local file,
* and accordingly enable/disable the absolute- vs. project-relative path type conversion button
*/
class ToggleButtonUpdater {
private JComponent button;
private JTextField field;
ToggleButtonUpdater(@NonNull JComponent button, @NonNull JTextField field) {
this.button = button;
this.field = field;
}
void update() {
String path = field.getText();
if(getFileFromPath(path) != null) {
button.setEnabled(true);
button.setToolTipText(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "TOOLTIP_IconsPanel.togglepath.text")); // NOI18N
} else {
button.setEnabled(false);
button.setToolTipText(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "TOOLTIP_IconsPanel.notafile.text")); // NOI18N
if(path!= null && !path.isEmpty()) {
field.setToolTipText(org.openide.util.NbBundle.getMessage(JFXIconsPanel.class, "TOOLTIP_IconsPanel.notafile.text")); // NOI18N
} else {
field.setToolTipText(null);
}
}
}
}
public void registerDocumentListeners() {
wsIconListener = new IconFieldListener(new ToggleButtonUpdater(wsIconToggleButton, wsIconTextField));
wsIconTextField.getDocument().addDocumentListener(wsIconListener);
splashListener = new IconFieldListener(new ToggleButtonUpdater(splashToggleButton, splashTextField));
splashTextField.getDocument().addDocumentListener(splashListener);
nativeIconListener = new IconFieldListener(new ToggleButtonUpdater(nativeIconToggleButton, nativeIconTextField));
nativeIconTextField.getDocument().addDocumentListener(nativeIconListener);
wsIconListener.updateComponent();
splashListener.updateComponent();
nativeIconListener.updateComponent();
}
public void unregisterDocumentListeners() {
wsIconTextField.getDocument().removeDocumentListener(wsIconListener);
splashTextField.getDocument().removeDocumentListener(splashListener);
nativeIconTextField.getDocument().removeDocumentListener(nativeIconListener);
}
}