Merge pull request #1996 from SiboVG/filter-images
Filter decal file chooser on images + don't show edit decal button if not possible
This commit is contained in:
commit
bd416ce20c
@ -13,6 +13,7 @@ import net.sf.openrocket.appearance.DecalImage;
|
|||||||
import net.sf.openrocket.document.Attachment;
|
import net.sf.openrocket.document.Attachment;
|
||||||
import net.sf.openrocket.document.OpenRocketDocument;
|
import net.sf.openrocket.document.OpenRocketDocument;
|
||||||
import net.sf.openrocket.file.FileSystemAttachmentFactory;
|
import net.sf.openrocket.file.FileSystemAttachmentFactory;
|
||||||
|
import net.sf.openrocket.gui.util.FileHelper;
|
||||||
import net.sf.openrocket.gui.util.SwingPreferences;
|
import net.sf.openrocket.gui.util.SwingPreferences;
|
||||||
import net.sf.openrocket.l10n.Translator;
|
import net.sf.openrocket.l10n.Translator;
|
||||||
import net.sf.openrocket.startup.Application;
|
import net.sf.openrocket.startup.Application;
|
||||||
@ -70,6 +71,7 @@ public class DecalModel extends AbstractListModel<DecalImage> implements ComboBo
|
|||||||
lastImageDir = current;
|
lastImageDir = current;
|
||||||
|
|
||||||
JFileChooser fc = new JFileChooser(current);
|
JFileChooser fc = new JFileChooser(current);
|
||||||
|
fc.setFileFilter(FileHelper.getImageFileFilter());
|
||||||
fc.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
|
fc.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory());
|
||||||
int action = fc.showOpenDialog(SwingUtilities.getWindowAncestor(parent));
|
int action = fc.showOpenDialog(SwingUtilities.getWindowAncestor(parent));
|
||||||
if (action == JFileChooser.APPROVE_OPTION) {
|
if (action == JFileChooser.APPROVE_OPTION) {
|
||||||
|
@ -2,6 +2,7 @@ package net.sf.openrocket.gui.configdialog;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
import java.awt.Desktop;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -427,6 +428,8 @@ public class AppearancePanel extends JPanel {
|
|||||||
edgesComboBox.setEnabled(customInside.isSelected());
|
edgesComboBox.setEnabled(customInside.isSelected());
|
||||||
if (customInside.isSelected()) {
|
if (customInside.isSelected()) {
|
||||||
remove(outsidePanel);
|
remove(outsidePanel);
|
||||||
|
MigLayout layout = (MigLayout) outsidePanel.getLayout();
|
||||||
|
layout.setLayoutConstraints("fill");
|
||||||
outsideInsidePane.insertTab(trans.get(tr_outside), null, outsidePanel,
|
outsideInsidePane.insertTab(trans.get(tr_outside), null, outsidePanel,
|
||||||
"Outside Tool Tip", 0);
|
"Outside Tool Tip", 0);
|
||||||
outsideInsidePane.setSelectedIndex(0);
|
outsideInsidePane.setSelectedIndex(0);
|
||||||
@ -434,6 +437,8 @@ public class AppearancePanel extends JPanel {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
remove(outsideInsidePane);
|
remove(outsideInsidePane);
|
||||||
|
MigLayout layout = (MigLayout) outsidePanel.getLayout();
|
||||||
|
layout.setLayoutConstraints("fill, ins 0");
|
||||||
add(outsidePanel, "span 4, growx, wrap");
|
add(outsidePanel, "span 4, growx, wrap");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -490,13 +495,11 @@ public class AppearancePanel extends JPanel {
|
|||||||
if (!insideBuilder) {
|
if (!insideBuilder) {
|
||||||
builder = ab;
|
builder = ab;
|
||||||
mDefault = new BooleanModel(c.getAppearance() == null || defaultAppearance.equals(c.getAppearance()));
|
mDefault = new BooleanModel(c.getAppearance() == null || defaultAppearance.equals(c.getAppearance()));
|
||||||
}
|
} else if (c instanceof InsideColorComponent) {
|
||||||
else if (c instanceof InsideColorComponent) {
|
|
||||||
builder = insideAb;
|
builder = insideAb;
|
||||||
Appearance appearance = ((InsideColorComponent)c).getInsideColorComponentHandler().getInsideAppearance();
|
Appearance appearance = ((InsideColorComponent) c).getInsideColorComponentHandler().getInsideAppearance();
|
||||||
mDefault = new BooleanModel(appearance == null || defaultAppearance.equals(appearance));
|
mDefault = new BooleanModel(appearance == null || defaultAppearance.equals(appearance));
|
||||||
}
|
} else return;
|
||||||
else return;
|
|
||||||
|
|
||||||
DecalModel decalModel = new DecalModel(panel, document, builder);
|
DecalModel decalModel = new DecalModel(panel, document, builder);
|
||||||
JComboBox<DecalImage> textureDropDown = new JComboBox<DecalImage>(decalModel);
|
JComboBox<DecalImage> textureDropDown = new JComboBox<DecalImage>(decalModel);
|
||||||
@ -505,6 +508,7 @@ public class AppearancePanel extends JPanel {
|
|||||||
// for multi-comp edits, the listeners' decals may not be updated otherwise
|
// for multi-comp edits, the listeners' decals may not be updated otherwise
|
||||||
textureDropDown.addActionListener(new ActionListener() {
|
textureDropDown.addActionListener(new ActionListener() {
|
||||||
private DecalImage previousSelection = (DecalImage) decalModel.getSelectedItem();
|
private DecalImage previousSelection = (DecalImage) decalModel.getSelectedItem();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
DecalImage decal = (DecalImage) textureDropDown.getSelectedItem();
|
DecalImage decal = (DecalImage) textureDropDown.getSelectedItem();
|
||||||
@ -530,8 +534,7 @@ public class AppearancePanel extends JPanel {
|
|||||||
if (!insideBuilder) {
|
if (!insideBuilder) {
|
||||||
previousUserSelectedAppearance = (builder == null) ? null
|
previousUserSelectedAppearance = (builder == null) ? null
|
||||||
: builder.getAppearance();
|
: builder.getAppearance();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
previousUserSelectedInsideAppearance = (builder == null) ? null
|
previousUserSelectedInsideAppearance = (builder == null) ? null
|
||||||
: builder.getAppearance();
|
: builder.getAppearance();
|
||||||
}
|
}
|
||||||
@ -552,8 +555,7 @@ public class AppearancePanel extends JPanel {
|
|||||||
listener.setAppearance(previousUserSelectedAppearance);
|
listener.setAppearance(previousUserSelectedAppearance);
|
||||||
}
|
}
|
||||||
builder.setAppearance(previousUserSelectedAppearance);
|
builder.setAppearance(previousUserSelectedAppearance);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// Set the listeners' inside appearance to the previous user selected appearance
|
// Set the listeners' inside appearance to the previous user selected appearance
|
||||||
for (AppearanceBuilder listener : builder.getConfigListeners().values()) {
|
for (AppearanceBuilder listener : builder.getConfigListeners().values()) {
|
||||||
listener.setAppearance(previousUserSelectedInsideAppearance);
|
listener.setAppearance(previousUserSelectedInsideAppearance);
|
||||||
@ -572,43 +574,46 @@ public class AppearancePanel extends JPanel {
|
|||||||
JPanel p = new JPanel(new MigLayout("fill, ins 0", "[grow][]"));
|
JPanel p = new JPanel(new MigLayout("fill, ins 0", "[grow][]"));
|
||||||
mDefault.addEnableComponent(textureDropDown, false);
|
mDefault.addEnableComponent(textureDropDown, false);
|
||||||
p.add(textureDropDown, "grow");
|
p.add(textureDropDown, "grow");
|
||||||
panel.add(p, "span 3, growx, wrap");
|
panel.add(p, "spanx 3, growx, wrap");
|
||||||
order.add(textureDropDown);
|
order.add(textureDropDown);
|
||||||
JButton editBtn = new SelectColorButton(
|
|
||||||
trans.get("AppearanceCfg.but.edit"));
|
|
||||||
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
|
||||||
// Enable the editBtn only when the appearance builder has an Image
|
|
||||||
// assigned to it.
|
|
||||||
builder.addChangeListener(new StateChangeListener() {
|
|
||||||
@Override
|
|
||||||
public void stateChanged(EventObject e) {
|
|
||||||
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
materialDefault.addActionListener(new ActionListener() {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
editBtn.addActionListener(new ActionListener() {
|
//// Edit button
|
||||||
@Override
|
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.EDIT)) {
|
||||||
public void actionPerformed(ActionEvent e) {
|
JButton editBtn = new SelectColorButton(
|
||||||
try {
|
trans.get("AppearanceCfg.but.edit"));
|
||||||
DecalImage newImage = editDecalHelper.editDecal(
|
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
||||||
SwingUtilities
|
// Enable the editBtn only when the appearance builder has an Image
|
||||||
.getWindowAncestor(panel),
|
// assigned to it.
|
||||||
document, c, builder.getImage(), insideBuilder);
|
builder.addChangeListener(new StateChangeListener() {
|
||||||
builder.setImage(newImage);
|
@Override
|
||||||
} catch (EditDecalHelperException ex) {
|
public void stateChanged(EventObject e) {
|
||||||
JOptionPane.showMessageDialog(panel,
|
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
||||||
ex.getMessage(), "", JOptionPane.ERROR_MESSAGE);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
materialDefault.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
editBtn.setEnabled(!materialDefault.isSelected() && builder.getImage() != null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
editBtn.addActionListener(new ActionListener() {
|
||||||
p.add(editBtn);
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
|
DecalImage newImage = editDecalHelper.editDecal(
|
||||||
|
SwingUtilities
|
||||||
|
.getWindowAncestor(panel),
|
||||||
|
document, c, builder.getImage(), insideBuilder);
|
||||||
|
builder.setImage(newImage);
|
||||||
|
} catch (EditDecalHelperException ex) {
|
||||||
|
JOptionPane.showMessageDialog(panel,
|
||||||
|
ex.getMessage(), "", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
p.add(editBtn);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: move the separate columns in two separate panels instead of adding them in a zig-zag way
|
// TODO: move the separate columns in two separate panels instead of adding them in a zig-zag way
|
||||||
// Color
|
// Color
|
||||||
|
Loading…
x
Reference in New Issue
Block a user