/*
* Author: Miguel Angel Bravo (@MiguelAngelBrav)
* The Android Open Source Project Katbag is licensed under the General GPLv3.
*
*/
package cl.ipp.katbag.fragment;
import java.util.ArrayList;
import java.util.List;
import org.holoeverywhere.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Matrix;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import cl.ipp.katbag.MainActivity;
import cl.ipp.katbag.R;
import cl.ipp.katbag.core.KatbagUtilities;
import cl.ipp.katbag.row_adapters.DialogPartRowAdapter;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
import com.google.analytics.tracking.android.EasyTracker;
import com.google.analytics.tracking.android.Fields;
import com.google.analytics.tracking.android.MapBuilder;
import com.google.analytics.tracking.android.Tracker;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
public class OneDrawing extends SherlockFragment {
private Tracker tracker;
static View v = null;
public MainActivity mainActivity;
public long id_drawing = -1;
public String type_app = "";
public String name_drawing;
public MenuItem menuItemBody, menuItemHat, menuItemWig, menuItemEyes, menuItemGlasses, menuItemMouth, menuItemAccesory,
menuItemComicsAction, menuItemComicsBalloonText, menuItemComicsObject;
public static final String PART_BODY = "katbag_monster_body_";
public static final String PART_HAT = "katbag_monster_hat_";
public static final String PART_WIG = "katbag_monster_wig_";
public static final String PART_EYES = "katbag_monster_eyes_";
public static final String PART_GLASSES = "katbag_monster_glasses_";
public static final String PART_MOUTH = "katbag_monster_mouth_";
public static final String PART_ACCESORY = "katbag_monster_accesory_";
public static final String PART_COMICS_ACTION = "katbag_comics_action_";
public static final String PART_COMICS_BALLOON_TEXT = "katbag_comics_balloon_text_";
public static final String PART_COMICS_OBJECT = "katbag_comics_object_";
public static final int ELEMENT_LIST_BODY = 11;
public static final int ELEMENT_LIST_HAT = 2;
public static final int ELEMENT_LIST_WIG = 2;
public static final int ELEMENT_LIST_EYES = 26;
public static final int ELEMENT_LIST_GLASSES = 4;
public static final int ELEMENT_LIST_MOUTH = 11;
public static final int ELEMENT_LIST_ACCESORY = 2;
public static final int ELEMENT_LIST_COMICS_ACTION = 26;
public static final int ELEMENT_LIST_COMICS_BALLOON_TEXT = 16;
public static final int ELEMENT_LIST_COMICS_OBJECT = 7;
public DialogPartRowAdapter adapter;
public RelativeLayout one_drawing;
public int identifier = 0;
public ImageView sendToBack, bringToFront, expand, contract, trash;
public int[] loc;
public ImageView imageViewLive = null;
public boolean body = false; // you can only use a body
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
this.tracker = EasyTracker.getInstance(this.getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mainActivity = (MainActivity) super.getActivity();
v = inflater.inflate(R.layout.fragment_one_drawing, container, false);
one_drawing = (RelativeLayout) v.findViewById(R.id.one_drawing);
loc = new int[2];
one_drawing.getLocationInWindow(loc);
one_drawing.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
removePropertiesParts();
}
});
sendToBack = (ImageView) v.findViewById(R.id.toolbar_part_sendtoback);
bringToFront = (ImageView) v.findViewById(R.id.toolbar_part_bringtofront);
expand = (ImageView) v.findViewById(R.id.toolbar_part_expand);
contract = (ImageView) v.findViewById(R.id.toolbar_part_contract);
trash = (ImageView) v.findViewById(R.id.toolbar_part_trash);
sendToBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendToBack();
}
});
bringToFront.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bringToFront();
}
});
expand.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeSize("expand");
}
});
contract.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeSize("contract");
}
});
trash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
trash();
}
});
// rescues parameters
List<String> parts = new ArrayList<String>();
Bundle bundle = getArguments();
if (bundle != null) {
id_drawing = bundle.getLong("id_drawing");
name_drawing = bundle.getString("name_drawing");
type_app = bundle.getString("type_app");
parts = mainActivity.katbagHandler.selectDrawingsPartsForIdApp(id_drawing);
for (int i = 0; i < parts.size(); i++) {
String[] part = parts.get(i).split("&&");
imageViewLive = addPart(part[1], Integer.parseInt(part[0]));
RelativeLayout.LayoutParams mLayoutSize = null;
mLayoutSize = new RelativeLayout.LayoutParams(Integer.parseInt(part[4]), Integer.parseInt(part[5]));
mLayoutSize.topMargin = Integer.parseInt(part[2]);
mLayoutSize.leftMargin = Integer.parseInt(part[3]);
imageViewLive.setLayoutParams(mLayoutSize);
one_drawing.invalidate();
if (Integer.parseInt(part[6]) > 0)
rotate("load", Integer.parseInt(part[6]));
}
}
return v;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.one_drawing, menu);
menuItemBody = menu.findItem(R.id.one_drawing_dropdown_menu_body);
menuItemHat = menu.findItem(R.id.one_drawing_dropdown_menu_hat);
menuItemWig = menu.findItem(R.id.one_drawing_dropdown_menu_wig);
menuItemEyes = menu.findItem(R.id.one_drawing_dropdown_menu_eyes);
menuItemGlasses = menu.findItem(R.id.one_drawing_dropdown_menu_glasses);
menuItemMouth = menu.findItem(R.id.one_drawing_dropdown_menu_mouth);
menuItemAccesory = menu.findItem(R.id.one_drawing_dropdown_menu_accesory);
menuItemComicsAction = menu.findItem(R.id.one_drawing_dropdown_menu_comics_action);
menuItemComicsBalloonText = menu.findItem(R.id.one_drawing_dropdown_menu_comics_balloon_text);
menuItemComicsObject = menu.findItem(R.id.one_drawing_dropdown_menu_comics_object);
if (!type_app.contentEquals(MainActivity.TYPE_APP_COMICS)) {
menuItemComicsAction.setVisible(false);
menuItemComicsBalloonText.setVisible(false);
menuItemComicsObject.setVisible(false);
} else {
menuItemComicsAction.setVisible(true);
menuItemComicsBalloonText.setVisible(true);
menuItemComicsObject.setVisible(true);
}
menuItemBody.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
if (body == true) {
KatbagUtilities.message(mainActivity.context, getString(R.string.one_drawing_message_only_a_body));
} else {
dialogSelectPartsFromList(PART_BODY, ELEMENT_LIST_BODY, getString(R.string.one_drawing_name_part_body));
}
return true;
}
});
menuItemHat.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_HAT, ELEMENT_LIST_HAT, getString(R.string.one_drawing_name_part_hat));
return true;
}
});
menuItemWig.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_WIG, ELEMENT_LIST_WIG, getString(R.string.one_drawing_name_part_wig));
return true;
}
});
menuItemEyes.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_EYES, ELEMENT_LIST_EYES, getString(R.string.one_drawing_name_part_eyes));
return true;
}
});
menuItemGlasses.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_GLASSES, ELEMENT_LIST_GLASSES, getString(R.string.one_drawing_name_part_glasses));
return true;
}
});
menuItemMouth.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_MOUTH, ELEMENT_LIST_MOUTH, getString(R.string.one_drawing_name_part_mouth));
return true;
}
});
menuItemAccesory.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_ACCESORY, ELEMENT_LIST_ACCESORY, getString(R.string.one_drawing_name_part_accesory));
return true;
}
});
menuItemComicsAction.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_COMICS_ACTION, ELEMENT_LIST_COMICS_ACTION, getString(R.string.one_drawing_name_part_comics_action));
return true;
}
});
menuItemComicsBalloonText.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_COMICS_BALLOON_TEXT, ELEMENT_LIST_COMICS_BALLOON_TEXT, getString(R.string.one_drawing_name_part_comics_balloon_text));
return true;
}
});
menuItemComicsObject.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
dialogSelectPartsFromList(PART_COMICS_OBJECT, ELEMENT_LIST_COMICS_OBJECT, getString(R.string.one_drawing_name_part_comics_object));
return true;
}
});
super.onCreateOptionsMenu(menu, inflater);
}
public void dialogSelectPartsFromList(String part, int total_part, String name_part) {
final List<String> partList = new ArrayList<String>();
List<String> namePartList = new ArrayList<String>();
partList.clear();
namePartList.clear();
for (int i = 1; i <= total_part; i++) {
if (i <= 9) {
partList.add(part + "0" + String.valueOf(i));
namePartList.add(name_part + " 0" + String.valueOf(i));
} else {
partList.add(part + String.valueOf(i));
namePartList.add(name_part + " " + String.valueOf(i));
}
}
adapter = new DialogPartRowAdapter(v.getContext(), R.layout.row_dialog_part, partList, namePartList);
AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity.context);
builder.setTitle(getString(R.string.dialog_title_select));
builder.setAdapter(adapter, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
addPart(partList.get(which), -1);
}
});
builder.setNegativeButton(getString(R.string.dialog_button_cancel), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// :)
}
});
builder.show();
}
public ImageView addPart(String mPart, int idImageView) {
ImageView part = new ImageView(mainActivity.context);
if (mPart.contains(PART_BODY)) {
body = true;
}
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int identifier = mainActivity.context.getResources().getIdentifier(mPart, "drawable", mainActivity.context.getPackageName());
part.setImageResource(identifier);
if (idImageView == -1) {
idImageView = (int) mainActivity.katbagHandler.insertDrawingPart(id_drawing, mPart, 0, 0, part.getWidth(), part.getHeight(), 0, one_drawing.getChildCount());
}
part.setId(idImageView);
part.setTag(mPart);
part.setAdjustViewBounds(true);
part.setOnTouchListener(new mOnTouch());
one_drawing.addView(part, layoutParams);
return part;
}
public void removePropertiesParts() {
for (int i = 0; i < one_drawing.getChildCount(); i++) {
View vci = (View) one_drawing.getChildAt(i);
vci.setBackgroundResource(0);
}
imageViewLive = null;
}
public class mOnTouch implements View.OnTouchListener {
int leftIni = 0, topIni = 0, leftMax = 0, topMax = 0;
private boolean dragging = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
leftIni = (int) event.getRawX() - (loc[0] + v.getLeft());
topIni = (int) event.getRawY() - (loc[1] + v.getTop());
leftMax = one_drawing.getWidth() - v.getWidth();
topMax = one_drawing.getHeight() - v.getHeight();
removePropertiesParts();
v.setBackgroundResource(R.drawable.border_one_drawing_part);
imageViewLive = (ImageView) v;
dragging = true;
break;
case MotionEvent.ACTION_UP:
mainActivity.katbagHandler.updateDrawingPartPosition(v.getId(), v.getTop(), v.getLeft(), v.getWidth(), v.getHeight());
dragging = false;
break;
case MotionEvent.ACTION_MOVE:
if (dragging) {
int left = (int) event.getRawX() - (loc[0] + leftIni);
int top = (int) event.getRawY() - (loc[1] + topIni);
if (left < 0)
left = 0;
if (top < 0)
top = 0;
if (left > leftMax)
left = leftMax;
if (top > topMax)
top = topMax;
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(v.getWidth(), v.getHeight());
lp.leftMargin = left;
lp.topMargin = top;
v.setLayoutParams(lp);
one_drawing.invalidate();
}
break;
}
return dragging;
}
}
public void sendToBack() {
if (imageViewLive != null) {
int index = one_drawing.indexOfChild(imageViewLive);
for (int i = 0; i < index; i++) {
one_drawing.bringChildToFront(one_drawing.getChildAt(i));
one_drawing.invalidate();
}
for (int i = 0; i < one_drawing.getChildCount(); i++) {
mainActivity.katbagHandler.updateDrawingPartOrder(one_drawing.getChildAt(i).getId(), i);
}
}
}
public void bringToFront() {
if (imageViewLive != null) {
int index = one_drawing.indexOfChild(imageViewLive);
for (int i = index; i < one_drawing.getChildCount(); i++) {
one_drawing.bringChildToFront(one_drawing.getChildAt(i));
one_drawing.invalidate();
}
for (int i = 0; i < one_drawing.getChildCount(); i++) {
mainActivity.katbagHandler.updateDrawingPartOrder(one_drawing.getChildAt(i).getId(), i);
}
}
}
public void changeSize(String size) {
if (imageViewLive != null) {
RelativeLayout.LayoutParams mLayoutSize = null;
if (size.contentEquals("expand")) {
mLayoutSize = new RelativeLayout.LayoutParams(imageViewLive.getWidth() + 5, imageViewLive.getHeight() + 5);
} else if (size.contentEquals("contract")) {
mLayoutSize = new RelativeLayout.LayoutParams(imageViewLive.getWidth() - 5, imageViewLive.getHeight() - 5);
}
mLayoutSize.leftMargin = imageViewLive.getLeft();
mLayoutSize.topMargin = imageViewLive.getTop();
imageViewLive.setLayoutParams(mLayoutSize);
mainActivity.katbagHandler.updateDrawingPartPosition(imageViewLive.getId(), imageViewLive.getTop(), imageViewLive.getLeft(), imageViewLive.getWidth(), imageViewLive.getHeight());
imageViewLive.invalidate();
one_drawing.invalidate();
}
}
public void rotate(String direction, int rotate) {
if (imageViewLive != null) {
int rotate_old;
if (rotate > -1) {
rotate_old = rotate;
} else {
rotate_old = mainActivity.katbagHandler.selectDrawingsPartsRotateForIdApp(imageViewLive.getId());
rotate = -1;
if (direction.contentEquals("left"))
rotate = rotate_old - 5;
if (direction.contentEquals("right"))
rotate = rotate_old + 5;
if (rotate > 360)
rotate = 0;
if (rotate < 0)
rotate = 360;
}
imageViewLive.clearAnimation();
Matrix matrix = imageViewLive.getImageMatrix();
RectF dst = new RectF();
matrix.mapRect(dst, new RectF(imageViewLive.getDrawable().getBounds()));
RotateAnimation mAnimation = new RotateAnimation(rotate_old, rotate, imageViewLive.getWidth() / 2, imageViewLive.getHeight() / 2);
mAnimation.setFillEnabled(true);
mAnimation.setFillAfter(true);
imageViewLive.startAnimation(mAnimation);
imageViewLive.setImageMatrix(matrix);
if (!direction.contentEquals("load")) {
mainActivity.katbagHandler.updateDrawingPartRotate(imageViewLive.getId(), imageViewLive.getTop(), imageViewLive.getLeft(), imageViewLive.getWidth(), imageViewLive.getHeight(), rotate);
}
}
}
public void trash() {
if (imageViewLive != null) {
if (imageViewLive.getTag().toString().contains(PART_BODY)) {
body = false;
}
mainActivity.katbagHandler.deleteDrawingPartForId(imageViewLive.getId());
one_drawing.removeView(imageViewLive);
one_drawing.invalidate();
}
}
@Override
public void onResume() {
mainActivity.getSupportActionBar().setTitle(Add.name_app_text + " - " + getString(R.string.drawings_row_name) + " " + name_drawing);
if (!MainActivity.TABLET)
mainActivity.slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);
super.onResume();
this.tracker.set(Fields.SCREEN_NAME, getClass().getSimpleName());
this.tracker.send( MapBuilder.createAppView().build() );
}
@Override
public void onPause() {
// TODO Auto-generated method stub
System.gc();
super.onPause();
}
@Override
public void onStop() {
// TODO Auto-generated method stub
System.gc();
super.onStop();
}
}