bibliothek.gui.dock.facile.mode.CLocationModeSettings Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of docking-frames-common Show documentation
Show all versions of docking-frames-common Show documentation
DockingFrames is an open source Java Swing docking framework, licenced under LGPL 2.1.
This is the same distribution as the original distribution (http://www.docking-frames.org/), only reinstalled in maven
/*
* Bibliothek - DockingFrames
* Library built on Java/Swing, allows the user to "drag and drop"
* panels containing any Swing-Component the developer likes to add.
*
* Copyright (C) 2007 Benjamin Sigg
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Benjamin Sigg
* [email protected]
* CH - Switzerland
*/
package bibliothek.gui.dock.facile.mode;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import bibliothek.gui.dock.common.mode.CMaximizedMode;
import bibliothek.gui.dock.support.mode.ModeSettings;
import bibliothek.gui.dock.support.mode.ModeSettingsConverter;
import bibliothek.util.FrameworkOnly;
import bibliothek.util.Path;
import bibliothek.util.Version;
import bibliothek.util.xml.XElement;
/**
* This {@link ModeSettings} provides operations to load settings that were
* stored with version 1.0.7, no additional settings were added.
*
* @author Benjamin Sigg
* @param the intermediate format used for properties by the {@link ModeSettingsConverter}
*/
@FrameworkOnly
public class CLocationModeSettings extends ModeSettings{
/** rescued setting from old version */
private Map lastMaximizedLocation;
/** rescued setting from old version */
private Map lastMaximizedMode;
/** key for the minimized mode */
private static final String MINIMIZED = "mini";
/** key for the maximized mode */
private static final String MAXIMIZED = "maxi";
/** key for the normalized mode */
private static final String NORMALIZED = "normal";
/** key for the externalized mode */
private static final String EXTERNALIZED = "extern";
/**
* Creates a new setting.
* @param converter conversion tool for meta data
*/
public CLocationModeSettings( ModeSettingsConverter converter ){
super( converter );
}
/**
* If there were settings rescued from an older version, then
* these settings are transferred to maximizedMode
.
* @param maximizedMode the mode to store settings in
*/
public void rescue( CMaximizedMode maximizedMode ){
if( lastMaximizedLocation != null ){
MaximizedModeSetting setting = new MaximizedModeSetting();
Map translatedLastMaximizedMode = new HashMap();
for( Map.Entry pair : lastMaximizedMode.entrySet() ){
String mode = pair.getValue();
Path result = resuceMode( mode );
if( result != null ){
translatedLastMaximizedMode.put( pair.getKey(), result );
}
}
Map translatedLastMaximizedLocation = new HashMap();
for( Map.Entry pair : lastMaximizedLocation.entrySet() ){
Location location = getConverter().convertToWorld( pair.getValue() );
translatedLastMaximizedLocation.put( pair.getKey(), location );
}
// ensure keys are used in both maps or not at all
translatedLastMaximizedLocation.keySet().retainAll( translatedLastMaximizedMode.keySet() );
translatedLastMaximizedMode.keySet().retainAll( translatedLastMaximizedLocation.keySet() );
// set settings
setting.setLastMaximizedLocation( translatedLastMaximizedLocation );
setting.setLastMaximizedMode( translatedLastMaximizedMode );
maximizedMode.readSetting( setting );
}
}
@Override
protected Path resuceMode( String mode ){
if( MINIMIZED.equals( mode )){
return MinimizedMode.IDENTIFIER;
}
else if( NORMALIZED.equals( mode )){
return NormalMode.IDENTIFIER;
}
else if( EXTERNALIZED.equals( mode )){
return ExternalizedMode.IDENTIFIER;
}
else if( MAXIMIZED.equals( mode )){
return MaximizedMode.IDENTIFIER;
}
return null;
}
@Override
protected void rescueSettings( DataInputStream in, Version version ) throws IOException{
if( version.compareTo( Version.VERSION_1_0_7 ) < 0 ){
// ignore these old settings
if( in.readBoolean() ){
in.readUTF();
}
if( in.readBoolean() ){
getConverter().readProperty( in );
}
}
else if( version.compareTo( Version.VERSION_1_0_7 ) == 0 ){
// read settings from version 1.0.7 and translate them into
// the modes that are now used
lastMaximizedLocation = new HashMap();
lastMaximizedMode = new HashMap();
int count = in.readInt();
for( int i = 0; i < count; i++ ){
String key = in.readUTF();
String value = in.readUTF();
lastMaximizedMode.put( key, value );
}
count = in.readInt();
for( int i = 0; i < count; i++ ){
String key = in.readUTF();
B value = getConverter().readProperty( in );
lastMaximizedLocation.put( key, value );
}
}
}
@Override
protected void rescueSettings( XElement element ){
XElement states = element.getElement( "states" );
if( states != null ){
lastMaximizedLocation = new HashMap();
lastMaximizedMode = new HashMap();
XElement xmaximized = element.getElement( "maximized" );
if( xmaximized != null ){
for( XElement xitem : xmaximized.getElements( "item" )){
String key = xitem.getString( "id" );
XElement xmode = xitem.getElement( "mode" );
if( xmode != null ){
lastMaximizedMode.put( key, xmode.getString() );
}
XElement xlocation = xitem.getElement( "location" );
if( xlocation != null ){
XElement xcopy = xlocation.copy();
xcopy.addElement( "mode" ).setString( MaximizedMode.IDENTIFIER.toString() );
lastMaximizedLocation.put( key, getConverter().readPropertyXML( xcopy ) );
}
}
}
}
}
}