package com.robert.maps.applib.kml.utils;
import net.margaritov.preference.colorpicker.ColorPickerDialog;
import net.margaritov.preference.colorpicker.ColorPickerPanelView;
import net.margaritov.preference.colorpicker.ColorPickerView;
import org.andnav.osm.util.GeoPoint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import com.robert.maps.applib.R;
import com.robert.maps.applib.tileprovider.TileSource;
import com.robert.maps.applib.utils.Ut;
import com.robert.maps.applib.view.MapView;
public class TrackStylePickerDialog extends Dialog implements ColorPickerView.OnColorChangedListener,
View.OnClickListener, OnSeekBarChangeListener, ColorPickerDialog.OnColorChangedListener {
private SeekBar mWidthBar;
private SeekBar mShadowRadiusBar;
private MapView mMap;
private TrackStyleOverlay mTrackStyleOverlay;
private TileSource mTileSource;
private Paint mPaint = new Paint();
private ColorPickerPanelView mColorView;
private ColorPickerPanelView mColorShadowView;
private ColorPickerDialog mDialog;
private CheckBox mAddShadowBox;
private OnTrackStyleChangedListener mListener;
public interface OnTrackStyleChangedListener {
public void onTrackStyleChanged(int color, int width, int colorshadow, double shadowradius);
}
public void setOnTrackStyleChangedListener(OnTrackStyleChangedListener listener) {
mListener = listener;
}
public TrackStylePickerDialog(Context context, int color, int width, int colorshadow, double shadowradius) {
super(context);
this.setContentView(R.layout.track_style_picker);
setTitle(R.string.track_style_picker);
mColorView = (ColorPickerPanelView) findViewById(R.id.color);
mColorView.setColor(color);
mColorView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mDialog = new ColorPickerDialog(getContext(), TrackStylePickerDialog.this.mColorView.getColor());
mDialog.setOnColorChangedListener(TrackStylePickerDialog.this);
mDialog.setAlphaSliderVisible(true);
mDialog.show();
}
});
mColorShadowView = (ColorPickerPanelView) findViewById(R.id.colorshadow);
mColorShadowView.setColor(colorshadow);
mColorShadowView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mDialog = new ColorPickerDialog(getContext(), TrackStylePickerDialog.this.mColorShadowView.getColor());
mDialog.setOnColorChangedListener(TrackStylePickerDialog.this.mColorShadowListiner);
mDialog.setAlphaSliderVisible(true);
mDialog.show();
}
});
mWidthBar = (SeekBar) findViewById(R.id.width);
mShadowRadiusBar = (SeekBar) findViewById(R.id.shadowradius);
mWidthBar.setProgress(width);
mShadowRadiusBar.setProgress((int)(shadowradius * 10));
mMap = (MapView) findViewById(R.id.map);
mMap.setLongClickable(false);
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(width);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(color);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setShadowLayer((float) shadowradius, 0, 0, colorshadow);
mTrackStyleOverlay = new TrackStyleOverlay();
mTrackStyleOverlay.setPaint(mPaint);
mMap.getOverlays().add(mTrackStyleOverlay);
final SharedPreferences pref = getContext().getSharedPreferences("MapName", Activity.MODE_PRIVATE);
if(mTileSource != null)
mTileSource.Free();
try {
mTileSource = new TileSource(getContext(), pref.getString(MapView.MAPNAME, TileSource.MAPNIK));
} catch (Exception e) {
e.printStackTrace();
}
mMap.setTileSource(mTileSource);
mMap.getController().setZoom(pref.getInt("ZoomLevel", 0));
mMap.getController().setCenter(new GeoPoint(pref.getInt("Latitude", 0), pref.getInt("Longitude", 0)));
mWidthBar.setOnSeekBarChangeListener(this);
mShadowRadiusBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mPaint.setShadowLayer(progress / 10, 0, 0, mColorShadowView.getColor());
mMap.invalidate();
}
});
((Button) findViewById(R.id.saveButton)).setOnClickListener(this);
((Button) findViewById(R.id.discardButton)).setOnClickListener(this);
mAddShadowBox = (CheckBox) findViewById(R.id.add_shadow_box);
mAddShadowBox.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setShadowVisible(mAddShadowBox.isChecked() ? View.VISIBLE : View.INVISIBLE);
}
});
mAddShadowBox.setChecked(shadowradius > 0);
setShadowVisible(mAddShadowBox.isChecked() ? View.VISIBLE : View.INVISIBLE);
}
void setShadowVisible(final int visible) {
findViewById(R.id.shadow_color).setVisibility(visible);
findViewById(R.id.text_shadow_width).setVisibility(visible);
findViewById(R.id.shadowradius).setVisibility(visible);
if(visible == View.INVISIBLE)
mShadowRadiusBar.setProgress(0);
}
ColorPickerDialog.OnColorChangedListener mColorShadowListiner = new ColorPickerDialog.OnColorChangedListener() {
public void onColorChanged(int color) {
mColorShadowView.setColor(color);
mPaint.setAlpha(Color.alpha(color));
Ut.dd("Color.alpha(color)="+Color.alpha(color));
mPaint.setShadowLayer(mShadowRadiusBar.getProgress() / 10, 0, 0, color);
mMap.invalidate();
}
};
public void onClick(View v) {
if (v.getId() == R.id.saveButton) {
if(mListener != null)
mListener.onTrackStyleChanged(mColorView.getColor(), mWidthBar.getProgress(), mColorShadowView.getColor(), ((double)mShadowRadiusBar.getProgress()) / 10);
}
dismiss();
}
public void onColorChanged(int color) {
mColorView.setColor(color);
mPaint.setColor(color);
mTrackStyleOverlay.setPaint(mPaint);
mMap.invalidate();
}
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mPaint.setStrokeWidth(progress);
mTrackStyleOverlay.setPaint(mPaint);
mMap.invalidate();
}
public void onStartTrackingTouch(SeekBar seekBar) {
}
public void onStopTrackingTouch(SeekBar seekBar) {
}
}