Make the appearance dialog work better when switching between default

texture and custom.  Also ensure that default texture names do not
appear in the texture drop down.
This commit is contained in:
kruland2607 2013-03-29 00:18:40 -05:00
parent fe8cc22f6b
commit e254ff0e94
6 changed files with 57 additions and 20 deletions

View File

@ -34,6 +34,21 @@ public class AppearanceBuilder extends AbstractChangeSource {
}
public AppearanceBuilder(Appearance a) {
setAppearance(a);
}
public void resetToDefaults() {
paint = new Color(0, 0, 0);
shine = 0;
offsetU = offsetV = 0;
centerU = centerV = 0;
scaleU = scaleV = 1;
rotation = 0;
image = null;
edgeMode = EdgeMode.REPEAT;
}
public void setAppearance(Appearance a) {
resetToDefaults();
if (a != null) {
setPaint(a.getPaint());
@ -50,17 +65,6 @@ public class AppearanceBuilder extends AbstractChangeSource {
}
}
public void resetToDefaults() {
paint = new Color(0, 0, 0);
shine = 0;
offsetU = offsetV = 0;
centerU = centerV = 0;
scaleU = scaleV = 1;
rotation = 0;
image = null;
edgeMode = EdgeMode.REPEAT;
}
public Appearance getAppearance() {
Decal t = null;

View File

@ -7,7 +7,7 @@ import java.io.InputStream;
import net.sf.openrocket.util.ChangeSource;
public interface DecalImage extends ChangeSource {
public interface DecalImage extends ChangeSource, Comparable<DecalImage> {
public String getName();

View File

@ -47,4 +47,9 @@ class ResourceDecalImage implements DecalImage {
//Unimplemented, this can not change
}
@Override
public int compareTo(DecalImage o) {
return getName().compareTo(o.getName());
}
}

View File

@ -86,7 +86,7 @@ public class DecalModel extends AbstractListModel implements ComboBoxModel {
@Override
public Object getSelectedItem() {
DecalImage decal = ab.getImage();
if (decal == null) {
if (decal == null || !document.getDecalList().contains(decal)) {
return NONE_SELECTED;
} else {
return decal;

View File

@ -21,6 +21,7 @@ import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import net.miginfocom.swing.MigLayout;
import net.sf.openrocket.appearance.Appearance;
import net.sf.openrocket.appearance.AppearanceBuilder;
import net.sf.openrocket.appearance.Decal.EdgeMode;
import net.sf.openrocket.appearance.defaults.DefaultAppearance;
@ -53,6 +54,13 @@ public class AppearancePanel extends JPanel {
private AppearanceBuilder ab;
// We hang on to the user selected appearance when switching to default appearance.
// this appearance is restored if the user unchecks the "default" button.
private Appearance previousUserSelectedAppearance = null;
// We cache the default appearance for this component to make switching faster.
private Appearance defaultAppearance = null;
/**
* A non-unit that adjusts by a small amount, suitable for
* values that are on the 0-1 scale
@ -117,7 +125,14 @@ public class AppearancePanel extends JPanel {
public AppearancePanel(final OpenRocketDocument document, final RocketComponent c) {
super(new MigLayout("fill", "[150][grow][150][grow]"));
ab = new AppearanceBuilder(c.getAppearance() != null ? c.getAppearance() : DefaultAppearance.getDefaultAppearance(c));
previousUserSelectedAppearance = c.getAppearance();
defaultAppearance = DefaultAppearance.getDefaultAppearance(c);
if (previousUserSelectedAppearance == null) {
previousUserSelectedAppearance = new AppearanceBuilder().getAppearance();
ab = new AppearanceBuilder(defaultAppearance);
} else {
ab = new AppearanceBuilder(previousUserSelectedAppearance);
}
net.sf.openrocket.util.Color figureColor = c.getColor();
if (figureColor == null) {
@ -223,9 +238,10 @@ public class AppearancePanel extends JPanel {
@Override
public void actionPerformed(ActionEvent e) {
if (materialDefault.isSelected()) {
c.setAppearance(null);
previousUserSelectedAppearance = (ab == null) ? null : ab.getAppearance();
ab.setAppearance(defaultAppearance);
} else {
c.setAppearance(ab.getAppearance());
ab.setAppearance(previousUserSelectedAppearance);
}
}
});

View File

@ -48,7 +48,6 @@ import javax.swing.event.TreeSelectionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableRowSorter;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
@ -231,9 +230,6 @@ public class GeneralOptimizationDialog extends JDialog {
selectedModifierTable.setRowSelectionAllowed(true);
selectedModifierTable.setColumnSelectionAllowed(false);
selectedModifierTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
TableRowSorter<ParameterSelectionTableModel> sorter = new TableRowSorter<ParameterSelectionTableModel>(selectedModifierTableModel);
sorter.setComparator(0, new SimulationModifierComparator());
selectedModifierTable.setRowSorter(sorter);
// Make sure spinner editor fits into the cell height
selectedModifierTable.setRowHeight(new JSpinner().getPreferredSize().height - 4);
@ -733,6 +729,22 @@ public class GeneralOptimizationDialog extends JDialog {
SimulationModifier[] modifiers = selectedModifiers.toArray(new SimulationModifier[0]);
// Check for DeploymentAltitude modifier, if it's there, we want to make certain the DeploymentEvent
// is ALTITUDE:
for (SimulationModifier mod : modifiers) {
try {
mod.initialize(simulation);
} catch (OptimizationException ex) {
updating = true;
startButton.setSelected(false);
startButton.setText(START_TEXT);
updating = false;
throw new BugException(ex);
}
}
// Create and start the background worker
worker = new OptimizationWorker(simulation, parameter, goal, domain, modifiers) {
@Override