Make preset favorites per component type. That is, a single preset can be a favorite for Tube Couplers, but not be a favorite for Body Tubes.

This commit is contained in:
Kevin Ruland 2012-08-07 16:31:00 +00:00
parent a66876049c
commit 2b802c2f7d
10 changed files with 43 additions and 44 deletions

View File

@ -5,6 +5,7 @@ import java.util.Set;
import net.sf.openrocket.material.Material; import net.sf.openrocket.material.Material;
import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.ComponentPreset.Type;
public class PreferencesAdapter extends net.sf.openrocket.startup.Preferences { public class PreferencesAdapter extends net.sf.openrocket.startup.Preferences {
@ -93,12 +94,11 @@ public class PreferencesAdapter extends net.sf.openrocket.startup.Preferences {
} }
@Override @Override
public void setComponentFavorite(ComponentPreset preset, boolean favorite) { public void setComponentFavorite(ComponentPreset preset, Type type, boolean favorite) {
} }
@Override @Override
public Set<String> getComponentFavorites() { public Set<String> getComponentFavorites(Type type) {
return Collections.<String>emptySet(); return Collections.<String>emptySet();
} }

View File

@ -26,7 +26,7 @@ public interface ComponentPresetDao {
public List<ComponentPreset> listForTypes( List<ComponentPreset.Type> types ); public List<ComponentPreset> listForTypes( List<ComponentPreset.Type> types );
public void setFavorite( ComponentPreset preset, boolean favorite ); public void setFavorite( ComponentPreset preset, ComponentPreset.Type type, boolean favorite );
public List<ComponentPreset> find( String manufacturer, String partNo ); public List<ComponentPreset> find( String manufacturer, String partNo );

View File

@ -3,6 +3,7 @@ package net.sf.openrocket.database;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPreset;
@ -76,8 +77,10 @@ public abstract class ComponentPresetDatabase extends Database<ComponentPreset>
List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6); List<ComponentPreset> result = new ArrayList<ComponentPreset>(list.size()/6);
Set<String> favorites = Application.getPreferences().getComponentFavorites(type);
for( ComponentPreset preset : list ) { for( ComponentPreset preset : list ) {
if ( preset.isFavorite() && preset.get(ComponentPreset.TYPE).equals(type) ) { if ( preset.get(ComponentPreset.TYPE).equals(type) && favorites.contains(preset.preferenceKey())) {
result.add(preset); result.add(preset);
} }
} }
@ -130,10 +133,9 @@ public abstract class ComponentPresetDatabase extends Database<ComponentPreset>
} }
@Override @Override
public void setFavorite( ComponentPreset preset, boolean favorite ) { public void setFavorite( ComponentPreset preset, ComponentPreset.Type type, boolean favorite ) {
blockUntilLoaded(); blockUntilLoaded();
preset.setFavorite(favorite); Application.getPreferences().setComponentFavorite( preset, type, favorite );
Application.getPreferences().setComponentFavorite( preset, favorite );
this.fireAddEvent(preset); this.fireAddEvent(preset);
} }

View File

@ -59,6 +59,7 @@ public class ComponentPresetChooserDialog extends JDialog {
int foreDiameterColumnIndex = -1; int foreDiameterColumnIndex = -1;
private List<ComponentPreset> presets; private List<ComponentPreset> presets;
private ComponentPreset.Type presetType;
private boolean okClicked = false; private boolean okClicked = false;
@ -66,6 +67,7 @@ public class ComponentPresetChooserDialog extends JDialog {
public ComponentPresetChooserDialog(Window owner, RocketComponent component) { public ComponentPresetChooserDialog(Window owner, RocketComponent component) {
super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL); super(owner, trans.get("title"), Dialog.ModalityType.APPLICATION_MODAL);
this.component = component; this.component = component;
this.presetType = component.getPresetType();
this.presets = Application.getComponentPresetDao().listForType(component.getPresetType()); this.presets = Application.getComponentPresetDao().listForType(component.getPresetType());
List<TypedKey<?>> displayedColumnKeys = Arrays.asList(component.getPresetType().getDisplayedColumns()); List<TypedKey<?>> displayedColumnKeys = Arrays.asList(component.getPresetType().getDisplayedColumns());
@ -125,8 +127,7 @@ public class ComponentPresetChooserDialog extends JDialog {
panel.add(getFilterCheckboxes(), "wrap para"); panel.add(getFilterCheckboxes(), "wrap para");
componentSelectionTable = new ComponentPresetTable(presetType, presets, displayedColumnKeys);
componentSelectionTable = new ComponentPresetTable(presets, displayedColumnKeys);
// GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20); // GUIUtil.setAutomaticColumnTableWidths(componentSelectionTable, 20);
int w = componentSelectionTable.getRowHeight() + 4; int w = componentSelectionTable.getRowHeight() + 4;
TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0); TableColumn tc = componentSelectionTable.getColumnModel().getColumn(0);

View File

@ -8,6 +8,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.swing.JCheckBoxMenuItem; import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu; import javax.swing.JMenu;
@ -38,13 +39,17 @@ public class ComponentPresetTable extends JTable {
private final TableRowSorter<TableModel> sorter; private final TableRowSorter<TableModel> sorter;
private List<ComponentPreset> presets; private List<ComponentPreset> presets;
private final ComponentPreset.Type presetType;
private Set<String> favorites;
private final AbstractTableModel tableModel; private final AbstractTableModel tableModel;
private final XTableColumnModel tableColumnModel; private final XTableColumnModel tableColumnModel;
private final ComponentPresetTableColumn[] columns; private final ComponentPresetTableColumn[] columns;
public ComponentPresetTable(List<ComponentPreset> presets, List<TypedKey<?>> visibleColumnKeys) { public ComponentPresetTable(final ComponentPreset.Type presetType, List<ComponentPreset> presets, List<TypedKey<?>> visibleColumnKeys) {
super(); super();
this.presets = presets; this.presets = presets;
this.presetType = presetType;
this.favorites = Application.getPreferences().getComponentFavorites(presetType);
this.columns = new ComponentPresetTableColumn[ComponentPreset.ORDERED_KEY_LIST.size()+1]; this.columns = new ComponentPresetTableColumn[ComponentPreset.ORDERED_KEY_LIST.size()+1];
@ -62,7 +67,7 @@ public class ComponentPresetTable extends JTable {
@Override @Override
public Object getValueAt(int rowIndex, int columnIndex) { public Object getValueAt(int rowIndex, int columnIndex) {
return myColumns[columnIndex].getValueFromPreset(ComponentPresetTable.this.presets.get(rowIndex)); return myColumns[columnIndex].getValueFromPreset(favorites,ComponentPresetTable.this.presets.get(rowIndex));
} }
@Override @Override
@ -72,7 +77,8 @@ public class ComponentPresetTable extends JTable {
return; return;
} }
ComponentPreset preset = ComponentPresetTable.this.presets.get(rowIndex); ComponentPreset preset = ComponentPresetTable.this.presets.get(rowIndex);
Application.getComponentPresetDao().setFavorite(preset, (Boolean) aValue); Application.getComponentPresetDao().setFavorite(preset, presetType, (Boolean) aValue);
ComponentPresetTable.this.updateFavorites();
} }
@Override @Override
@ -164,9 +170,15 @@ public class ComponentPresetTable extends JTable {
public void updateData( List<ComponentPreset> presets ) { public void updateData( List<ComponentPreset> presets ) {
this.presets = presets; this.presets = presets;
this.favorites = Application.getPreferences().getComponentFavorites(presetType);
this.tableModel.fireTableDataChanged(); this.tableModel.fireTableDataChanged();
} }
public void updateFavorites() {
this.favorites = Application.getPreferences().getComponentFavorites(presetType);
this.tableModel.fireTableDataChanged();
}
private void doPopup(MouseEvent evt ) { private void doPopup(MouseEvent evt ) {
// Figure out what column header was clicked on. // Figure out what column header was clicked on.

View File

@ -1,6 +1,7 @@
package net.sf.openrocket.gui.dialogs.preset; package net.sf.openrocket.gui.dialogs.preset;
import javax.swing.table.TableCellEditor; import java.util.Set;
import javax.swing.table.TableColumn; import javax.swing.table.TableColumn;
import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.l10n.Translator;
@ -21,7 +22,7 @@ public abstract class ComponentPresetTableColumn extends TableColumn {
} }
public abstract Object getValueFromPreset( ComponentPreset preset ); public abstract Object getValueFromPreset( Set<String> favorites, ComponentPreset preset );
public static class Favorite extends ComponentPresetTableColumn { public static class Favorite extends ComponentPresetTableColumn {
@ -30,8 +31,8 @@ public abstract class ComponentPresetTableColumn extends TableColumn {
} }
@Override @Override
public Object getValueFromPreset( ComponentPreset preset ) { public Object getValueFromPreset( Set<String> favorites, ComponentPreset preset ) {
return Boolean.valueOf(preset.isFavorite()); return Boolean.valueOf(favorites.contains(preset.preferenceKey()));
} }
} }
@ -46,7 +47,7 @@ public abstract class ComponentPresetTableColumn extends TableColumn {
} }
@Override @Override
public Object getValueFromPreset(ComponentPreset preset) { public Object getValueFromPreset(Set<String> favorites, ComponentPreset preset) {
return preset.has(key) ? preset.get(key) : null; return preset.has(key) ? preset.get(key) : null;
} }
@ -65,10 +66,10 @@ public abstract class ComponentPresetTableColumn extends TableColumn {
} }
@Override @Override
public Object getValueFromPreset(ComponentPreset preset) { public Object getValueFromPreset(Set<String> favorites, ComponentPreset preset) {
Double value = (Double) super.getValueFromPreset(preset); Double value = (Double) super.getValueFromPreset(favorites, preset);
if ( value != null ) { if ( value != null ) {
return new Value((Double)super.getValueFromPreset(preset),selectedUnit); return new Value((Double)super.getValueFromPreset(favorites, preset),selectedUnit);
} else { } else {
return null; return null;
} }

View File

@ -560,8 +560,8 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
} }
@Override @Override
public void setComponentFavorite( ComponentPreset preset, boolean favorite ) { public void setComponentFavorite( ComponentPreset preset, ComponentPreset.Type type, boolean favorite ) {
Preferences prefs = PREFNODE.node("favoritePresets"); Preferences prefs = PREFNODE.node("favoritePresets").node(type.name());
if ( favorite ) { if ( favorite ) {
prefs.putBoolean(preset.preferenceKey(), true); prefs.putBoolean(preset.preferenceKey(), true);
} else { } else {
@ -570,8 +570,8 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences {
} }
@Override @Override
public Set<String> getComponentFavorites( ) { public Set<String> getComponentFavorites( ComponentPreset.Type type) {
Preferences prefs = PREFNODE.node("favoritePresets"); Preferences prefs = PREFNODE.node("favoritePresets").node(type.name());
Set<String> collection = new HashSet<String>(); Set<String> collection = new HashSet<String>();
try { try {
collection.addAll( Arrays.asList(prefs.keys())); collection.addAll( Arrays.asList(prefs.keys()));

View File

@ -33,7 +33,6 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
private final TypedPropertyMap properties = new TypedPropertyMap(); private final TypedPropertyMap properties = new TypedPropertyMap();
private boolean favorite = false;
private String digest = ""; private String digest = "";
public enum Type { public enum Type {
@ -273,14 +272,6 @@ public class ComponentPreset implements Comparable<ComponentPreset> {
return value; return value;
} }
public boolean isFavorite() {
return favorite;
}
public void setFavorite(boolean favorite) {
this.favorite = favorite;
}
@Override @Override
public int compareTo(ComponentPreset p2) { public int compareTo(ComponentPreset p2) {
int manuCompare = this.getManufacturer().getSimpleName().compareTo(p2.getManufacturer().getSimpleName()); int manuCompare = this.getManufacturer().getSimpleName().compareTo(p2.getManufacturer().getSimpleName());

View File

@ -4,7 +4,6 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
@ -24,16 +23,9 @@ public class OpenRocketComponentLoader implements Loader<ComponentPreset> {
log.debug("Loading presets from file " + filename); log.debug("Loading presets from file " + filename);
Set<String> favorites = Application.getPreferences().getComponentFavorites();
try { try {
List<ComponentPreset> presets; List<ComponentPreset> presets;
presets = (new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent( new InputStreamReader (stream))).asComponentPresets(); presets = (new OpenRocketComponentSaver().unmarshalFromOpenRocketComponent( new InputStreamReader (stream))).asComponentPresets();
for( ComponentPreset preset : presets ) {
if ( favorites.contains(preset.preferenceKey())) {
preset.setFavorite(true);
}
}
log.debug("ComponentPreset file " + filename + " contained " + presets.size() + " presets"); log.debug("ComponentPreset file " + filename + " contained " + presets.size() + " presets");
return presets; return presets;
} catch (JAXBException e) { } catch (JAXBException e) {

View File

@ -364,8 +364,8 @@ public abstract class Preferences {
public abstract Set<Material> getUserMaterials(); public abstract Set<Material> getUserMaterials();
public abstract void removeUserMaterial(Material m); public abstract void removeUserMaterial(Material m);
public abstract void setComponentFavorite( ComponentPreset preset, boolean favorite ); public abstract void setComponentFavorite( ComponentPreset preset, ComponentPreset.Type type, boolean favorite );
public abstract Set<String> getComponentFavorites( ); public abstract Set<String> getComponentFavorites( ComponentPreset.Type type );
/* /*
* Map of default line styles * Map of default line styles