package org.osmdroid.bonuspack.kml; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.os.Parcel; import android.os.Parcelable; import java.io.File; import java.io.IOException; import java.io.Writer; import java.util.zip.ZipFile; /** * Handling of a KML Style, which may contain one PolyStyle, one LineStyle, and one IconStyle. * @author M.Kergall */ public class Style extends StyleSelector implements Parcelable { public ColorStyle mPolyStyle; public LineStyle mLineStyle; public IconStyle mIconStyle; /** default constructor */ public Style(){ super(); } /** simple constructor */ public Style(Bitmap icon, int lineColor, float lineWidth, int fillColor){ this(); mIconStyle = new IconStyle(); mIconStyle.mIcon = icon; mLineStyle = new LineStyle(lineColor, lineWidth); mPolyStyle = new ColorStyle(fillColor); } public void setIcon(String iconHref, File containerFile, ZipFile kmzContainer){ if (mIconStyle == null) mIconStyle = new IconStyle(); mIconStyle.setIcon(iconHref, containerFile, kmzContainer); } public BitmapDrawable getFinalIcon(Context context){ if (mIconStyle != null) return mIconStyle.getFinalIcon(context); else return null; } public Paint getOutlinePaint(){ if (mLineStyle != null) return mLineStyle.getOutlinePaint(); else { Paint outlinePaint = new Paint(); outlinePaint.setStyle(Paint.Style.STROKE); return outlinePaint; } } protected void writePolyStyle(Writer writer, ColorStyle colorStyle){ try { writer.write("<PolyStyle>\n"); colorStyle.writeAsKML(writer); writer.write("</PolyStyle>\n"); } catch (IOException e) { e.printStackTrace(); } } @Override public void writeAsKML(Writer writer, String styleId){ try { writer.write("<Style id=\'"+styleId+"\'>\n"); if (mLineStyle != null) mLineStyle.writeAsKML(writer); if (mPolyStyle != null) writePolyStyle(writer, mPolyStyle); if (mIconStyle != null) mIconStyle.writeAsKML(writer); writer.write("</Style>\n"); } catch (IOException e) { e.printStackTrace(); } } //Parcelable implementation ------------ @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeParcelable(mLineStyle, flags); out.writeParcelable(mPolyStyle, flags); out.writeParcelable(mIconStyle, flags); } public static final Creator<Style> CREATOR = new Creator<Style>() { @Override public Style createFromParcel(Parcel source) { return new Style(source); } @Override public Style[] newArray(int size) { return new Style[size]; } }; public Style(Parcel in){ mLineStyle = in.readParcelable(LineStyle.class.getClassLoader()); mPolyStyle = in.readParcelable(ColorStyle.class.getClassLoader()); mIconStyle = in.readParcelable(IconStyle.class.getClassLoader()); } }