/*
* DefaultUserPreferences.java 15 mai 2006
*
* Sweet Home 3D, Copyright (c) 2006 Emmanuel PUYBARET / eTeks <info@eteks.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.eteks.sweethome3d.io;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import com.eteks.sweethome3d.model.FurnitureCatalog;
import com.eteks.sweethome3d.model.LengthUnit;
import com.eteks.sweethome3d.model.Library;
import com.eteks.sweethome3d.model.PatternsCatalog;
import com.eteks.sweethome3d.model.RecorderException;
import com.eteks.sweethome3d.model.TextureImage;
import com.eteks.sweethome3d.model.TexturesCatalog;
import com.eteks.sweethome3d.model.UserPreferences;
/**
* Default user preferences.
* @author Emmanuel Puybaret
*/
public class DefaultUserPreferences extends UserPreferences {
/**
* Creates default user preferences read from resource files in the default language.
*/
public DefaultUserPreferences() {
this(true, null);
}
/**
* Creates default user preferences read from resource files.
* @param readCatalogs if <code>false</code> furniture and texture catalog won't be read
* @param localizedPreferences preferences used to read localized resource files
*/
DefaultUserPreferences(boolean readCatalogs,
UserPreferences localizedPreferences) {
if (localizedPreferences == null) {
localizedPreferences = this;
} else {
setLanguage(localizedPreferences.getLanguage());
}
// Read default furniture catalog
setFurnitureCatalog(readCatalogs
? new DefaultFurnitureCatalog(localizedPreferences, (File)null)
: new FurnitureCatalog());
// Read default textures catalog
setTexturesCatalog(readCatalogs
? new DefaultTexturesCatalog(localizedPreferences, (File)null)
: new TexturesCatalog());
// Build default patterns catalog
List<TextureImage> patterns = new ArrayList<TextureImage>();
patterns.add(new DefaultPatternTexture("foreground"));
patterns.add(new DefaultPatternTexture("reversedHatchUp"));
patterns.add(new DefaultPatternTexture("reversedHatchDown"));
patterns.add(new DefaultPatternTexture("reversedCrossHatch"));
patterns.add(new DefaultPatternTexture("background"));
patterns.add(new DefaultPatternTexture("hatchUp"));
patterns.add(new DefaultPatternTexture("hatchDown"));
patterns.add(new DefaultPatternTexture("crossHatch"));
PatternsCatalog patternsCatalog = new PatternsCatalog(patterns);
setPatternsCatalog(patternsCatalog);
// Read other preferences from resource bundle
setFurnitureCatalogViewedInTree(Boolean.parseBoolean(
localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "furnitureCatalogViewedInTree")));
setNavigationPanelVisible(Boolean.parseBoolean(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "navigationPanelVisible")));
setAerialViewCenteredOnSelectionEnabled(Boolean.parseBoolean(getOptionalLocalizedString(localizedPreferences, "aerialViewCenteredOnSelectionEnabled", "false")));
setUnit(LengthUnit.valueOf(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "unit").toUpperCase(Locale.ENGLISH)));
setRulersVisible(Boolean.parseBoolean(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "rulersVisible")));
setGridVisible(Boolean.parseBoolean(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "gridVisible")));
// Allow furnitureViewedFromTop and roomFloorColoredOrTextured to be different according to the running OS
String osName = System.getProperty("os.name");
setFurnitureViewedFromTop(Boolean.parseBoolean(getOptionalLocalizedString(localizedPreferences, "furnitureViewedFromTop." + osName,
localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "furnitureViewedFromTop"))));
setFloorColoredOrTextured(Boolean.parseBoolean(getOptionalLocalizedString(localizedPreferences, "roomFloorColoredOrTextured." + osName,
localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "roomFloorColoredOrTextured"))));
setWallPattern(patternsCatalog.getPattern(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "wallPattern")));
String newWallPattern = localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "wallPattern");
if (newWallPattern != null) {
setNewWallPattern(patternsCatalog.getPattern(newWallPattern));
}
setNewWallThickness(Float.parseFloat(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "newWallThickness")));
setNewWallHeight(Float.parseFloat(localizedPreferences.getLocalizedString(DefaultUserPreferences.class, "newHomeWallHeight")));
setNewFloorThickness(Float.parseFloat(getOptionalLocalizedString(localizedPreferences, "newFloorThickness", "12")));
setCheckUpdatesEnabled(Boolean.parseBoolean(getOptionalLocalizedString(localizedPreferences, "checkUpdatesEnabled", "false")));
setAutoSaveDelayForRecovery(Integer.parseInt(getOptionalLocalizedString(localizedPreferences, "autoSaveDelayForRecovery", "0")));
setRecentHomes(new ArrayList<String>());
setRecentColors(new ArrayList<Integer>());
setCurrency(getOptionalLocalizedString(localizedPreferences, "currency", null));
for (String property : new String [] {"LevelName", "HomePieceOfFurnitureName", "RoomName", "LabelText"}) {
String autoCompletionStringsList = getOptionalLocalizedString(localizedPreferences, "autoCompletionStrings#" + property, null);
if (autoCompletionStringsList != null) {
String [] autoCompletionStrings = autoCompletionStringsList.trim().split(",");
if (autoCompletionStrings.length > 0) {
for (int i = 0; i < autoCompletionStrings.length; i++) {
autoCompletionStrings [i] = autoCompletionStrings [i].trim();
}
setAutoCompletionStrings(property, Arrays.asList(autoCompletionStrings));
}
}
}
}
private String getOptionalLocalizedString(UserPreferences localizedPreferences,
String resourceKey,
String defaultValue) {
try {
return localizedPreferences.getLocalizedString(DefaultUserPreferences.class, resourceKey);
} catch (IllegalArgumentException ex) {
return defaultValue;
}
}
/**
* Throws an exception because default user preferences can't be written
* with this class.
*/
@Override
public void write() throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't be written");
}
/**
* Throws an exception because default user preferences can't manage language libraries.
*/
@Override
public boolean languageLibraryExists(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage language libraries");
}
/**
* Throws an exception because default user preferences can't manage additional language libraries.
*/
@Override
public void addLanguageLibrary(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage language libraries");
}
/**
* Throws an exception because default user preferences can't manage additional furniture libraries.
*/
@Override
public boolean furnitureLibraryExists(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage furniture libraries");
}
/**
* Throws an exception because default user preferences can't manage additional furniture libraries.
*/
@Override
public void addFurnitureLibrary(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage furniture libraries");
}
/**
* Throws an exception because default user preferences can't manage textures libraries.
*/
@Override
public boolean texturesLibraryExists(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage textures libraries");
}
/**
* Throws an exception because default user preferences can't manage additional textures libraries.
*/
@Override
public void addTexturesLibrary(String name) throws RecorderException {
throw new UnsupportedOperationException("Default user preferences can't manage textures libraries");
}
/**
* Throws an exception because default user preferences don't support libraries.
* @since 4.0
*/
@Override
public List<Library> getLibraries() {
throw new UnsupportedOperationException();
}
}