/*
* Copyright (C) 2013 Cyril Mottier (http://cyrilmottier.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cyrilmottier.polaris2.maps.model;
import com.cyrilmottier.polaris2.maps.Polaris;
import com.cyrilmottier.polaris2.maps.internal.ListTranslators;
import com.cyrilmottier.polaris2.maps.internal.ListWrappers;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.List;
public final class PolygonOptions implements Parcelable {
public static final Parcelable.Creator<PolygonOptions> CREATOR = new Parcelable.Creator<PolygonOptions>() {
public PolygonOptions createFromParcel(Parcel in) {
return new PolygonOptions((com.google.android.gms.maps.model.PolygonOptions) in.readParcelable(null));
}
public PolygonOptions[] newArray(int size) {
return new PolygonOptions[size];
}
};
/**
* DO NOT USE. The original PolygonOptions.
*
* @hide
*/
public final com.google.android.gms.maps.model.PolygonOptions mOriginal;
private PolygonOptions mDefaultOptions;
public PolygonOptions() {
this(new com.google.android.gms.maps.model.PolygonOptions());
}
PolygonOptions(com.google.android.gms.maps.model.PolygonOptions original) {
mOriginal = original;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeParcelable(mOriginal, flags);
}
public PolygonOptions add(LatLng point) {
mOriginal.add(point.mOriginal);
return this;
}
public PolygonOptions add(LatLng... points) {
mOriginal.add(points == null ? null : ListTranslators.latLngs(points));
return this;
}
public PolygonOptions addAll(Iterable<LatLng> points) {
mOriginal.addAll(points == null ? null : ListTranslators.latLngList(points));
return this;
}
public PolygonOptions addHole(Iterable<LatLng> points) {
mOriginal.addHole(points == null ? null : ListTranslators.latLngList(points));
return this;
}
public PolygonOptions fillColor(int color) {
mOriginal.fillColor(color);
return this;
}
public int getFillColor() {
return mOriginal.getFillColor();
}
public List<List<LatLng>> getHoles() {
final List<List<com.google.android.gms.maps.model.LatLng>> originals = mOriginal.getHoles();
return originals == null ? null : ListWrappers.forLatLngList(originals);
}
public List<LatLng> getPoints() {
final List<com.google.android.gms.maps.model.LatLng> originals = mOriginal.getPoints();
return originals == null ? null : ListWrappers.forLatLng(originals);
}
public int getStrokeColor() {
return mOriginal.getStrokeColor();
}
public float getStrokeWidth() {
return mOriginal.getStrokeWidth();
}
public float getZIndex() {
return mOriginal.getZIndex();
}
public PolygonOptions geodesic(boolean geodesic) {
mOriginal.geodesic(geodesic);
return this;
}
public boolean isGeodesic() {
return mOriginal.isGeodesic();
}
public boolean isVisible() {
return mOriginal.isVisible();
}
/**
* Reset the PolygonOptions by setting all of its properties to their default values.
*/
@Polaris
public void reset() {
if (mDefaultOptions == null) {
mDefaultOptions = new PolygonOptions();
}
fillColor(mDefaultOptions.getFillColor());
geodesic(mDefaultOptions.isGeodesic());
strokeColor(mDefaultOptions.getStrokeColor());
strokeWidth(mDefaultOptions.getStrokeWidth());
visible(mDefaultOptions.isVisible());
zIndex(mDefaultOptions.getZIndex());
// HACK Cyril: The following lines imply get[Points|Holes]() return the internal
// list of points instead of a copy ... actually there's no guarantee of it.
getPoints().clear();
getHoles().clear();
}
public PolygonOptions strokeColor(int color) {
mOriginal.strokeColor(color);
return this;
}
public PolygonOptions strokeWidth(float width) {
mOriginal.strokeWidth(width);
return this;
}
public PolygonOptions visible(boolean visible) {
mOriginal.visible(visible);
return this;
}
public PolygonOptions zIndex(float zIndex) {
mOriginal.zIndex(zIndex);
return this;
}
}