OSDN Git Service

icon
[everfolder/source.git] / source / workspace / EverFolder / src / com / yuji / ef / IconFrameLayout.java
index 20314bc..6dfec9a 100644 (file)
@@ -16,18 +16,16 @@ import android.view.animation.Animation.AnimationListener;
 import android.view.animation.AnimationUtils;
 import android.widget.FrameLayout;
 
-import com.yuji.ef.dao.Node;
-
 public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
        private EverFolderActivity activity = null;
 
        private LabelIconView target = null;
-       private LabelIconView dest = null;
-       private List<LabelIconView> list = new ArrayList<LabelIconView>();
-       
+       private LabelIconView destTarget = null;
+       private LabelIconView selectedTarget = null;
+       private LabelIconView cutTarget = null;
+       private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
        private Animation anime;
-       private int startX;
-       private int startY;
        private int currentX;
        private int currentY;
        private int offsetX;
@@ -35,7 +33,8 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
        private boolean longClickFlg = false;
        private IconScrollView scrollView;
        private Context context = this.getContext();
-
+       private boolean elabledTouchEvent = true;
+       
        public IconFrameLayout(Context context) {
                super(context);
        }
@@ -51,7 +50,7 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
        public void setActivity(EverFolderActivity activity) {
                this.activity = activity;
        }
-       
+
        @Override
        protected void onLayout(boolean changed, int left, int top, int right,
                        int bottom) {
@@ -67,32 +66,39 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
                }
        }
 
+       public LabelIconView getSelectedTarget() {
+               return selectedTarget;
+       }
+
        public void addView(LabelIconView child) {
-               super.addView(child);
-               list.add(child);
+               addView(child, true);
        }
 
-       public void removeView(LabelIconView child) {
-               super.removeView(child);
-               list.remove(child);
+       public void addView(LabelIconView child, boolean isAddView) {
+               if (isAddView) {
+                       super.addView(child);
+               }
+               labelIconViewList.add(child);
        }
 
-       public void removeAllViews(){
+       public void removeAllViews() {
                super.removeAllViews();
-               list.clear();
+               labelIconViewList.clear();
        }
-       
-       public void moveTop(LabelIconView child){
+
+       public void moveTop(LabelIconView child) {
                this.removeView(child);
                this.addView(child);
        }
-       
-       private LabelIconView getView(int x, int y, LabelIconView v, List<LabelIconView> list, boolean flag) {
+
+       private LabelIconView getView(int x, int y, LabelIconView v,
+                       List<LabelIconView> list, boolean flag) {
                Rect rect = new Rect();
+               LabelIconView sv;
 
                if (v != null) {
-                       if (flag){
-                               v.getHitRect(rect);             
+                       if (flag) {
+                               v.getHitRect(rect);
                                if (rect.contains(x, y)) {
                                        return v;
                                }
@@ -100,9 +106,8 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
                }
                for (LabelIconView view : list) {
                        if (view != v) {
-                               view.getHitRect(rect);          
+                               view.getHitRect(rect);
                                if (rect.contains(x, y)) {
-                                       
                                        return view;
                                }
                        }
@@ -110,9 +115,82 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
                return null;
        }
 
+       public void setScrollView(final IconScrollView scrollView) {
+               this.scrollView = scrollView;
+               this.setOnLongClickListener(this);
+               // this.setLongClickable(true);
+
+               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+               anime.setAnimationListener(new AnimationListener() {
+                       public void onAnimationStart(Animation animation) {
+                       }
+
+                       public void onAnimationRepeat(Animation animation) {
+                       }
+
+                       public void onAnimationEnd(Animation animation) {
+                               // if (isBt2Click) {
+                               // bt2.performClick();
+                               // isBt2Click = false;
+                               // }
+                               target = null;
+                               destTarget = null;
+
+                               scrollView.setScrollable(true);
+                               scrollView.requestDisallowInterceptTouchEvent(false);
+                               scrollView.invalidate();
+                       }
+               });
+       }
+
+       public void refresh() {
+               if (selectedTarget != null) {
+                       long id = selectedTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       selectedTarget = view;
+                                       target = view;
+                                       setSelected(selectedTarget);
+
+                               }
+                       }
+               }
+               if (cutTarget != null) {
+                       long id = cutTarget.getNodeId();
+                       for (LabelIconView view : labelIconViewList) {
+                               if (view.getNodeId() == id) {
+                                       cutTarget = view;
+                                       cutTarget.clearColorFilter();
+                                       cutTarget.setAlpha(64);
+                               }
+                       }
+               }
+       }
+
+       public void clearTarget() {
+               if (selectedTarget != null){
+                       selectedTarget.clearColorFilter();
+                       selectedTarget = null;
+               }
+       }
+       
+       public LabelIconView getCutTarget() {
+               return cutTarget;
+       }
+
+       public void setCutTarget(LabelIconView cutTarget) {
+               this.cutTarget = cutTarget;
+               selectedTarget = null;
+               target = null;
+       }
+
        @Override
        public boolean onTouchEvent(MotionEvent event) {
                try {
+                       if (!isElabledTouchEvent()){
+                               return super.onTouchEvent(event);
+                       }
+
                        int x = (int) event.getRawX();
                        int y = (int) event.getRawY();
 
@@ -121,50 +199,49 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
 
                        x -= dx;
                        y -= dy;
-                       
+
                        int sx = x + scrollView.getScrollX();
                        int sy = y + scrollView.getScrollY();
-                       LabelIconView v = getView(sx, sy, target, list, true);
+                       LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
                        LabelIconView obj = (LabelIconView) v;
 
-                       int size = list.size();
-                       
+                       // int size = labelIconViewList.size();
                        if (target == null) {
                                target = obj;
                        }
-                       if (target == null){
-                               return super.onTouchEvent(event);                               
+                       if (target == null) {
+                               return super.onTouchEvent(event);
                        }
 
-                       this.getParent().requestDisallowInterceptTouchEvent(true);                      
-                       
+                       // コメントにすると何が起きるか?
+                       // scrollView.requestDisallowInterceptTouchEvent(true);
+
                        if (event.getAction() == MotionEvent.ACTION_MOVE) {
                                if (!longClickFlg) {
                                        return super.onTouchEvent(event);
                                }
-                               if (target instanceof StatusIconView){
-                                       return super.onTouchEvent(event);                                       
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
                                }
                                obj = target;
-                               
+
                                int sh = scrollView.getHeight();
                                int lh = this.getHeight();
                                int maxY = lh - sh;
                                int py = scrollView.getScrollY();
                                int sdy = 10;
                                int N = 100;
-                               if (y < N){
-                                       if (py > 0){
-                                               if (py < sdy){
+                               if (y < N) {
+                                       if (py > 0) {
+                                               if (py < sdy) {
                                                        sdy = py;
                                                }
                                                scrollView.smoothScrollTo(0, py - sdy);
                                                currentY -= sdy;
                                        }
-                               }
-                               else if (sh - y < N){
-                                       if (py < maxY){
-                                               if (maxY - py < sdy){
+                               } else if (sh - y < N) {
+                                       if (py < maxY) {
+                                               if (maxY - py < sdy) {
                                                        sdy = maxY - py;
                                                }
                                                scrollView.smoothScrollTo(0, py + sdy);
@@ -177,69 +254,94 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
 
                                currentX -= diffX;
                                currentY -= diffY;
-                               // currentX = x;;
-                               // currentY = y;
                                obj.layout(currentX, currentY, currentX + obj.getWidth(),
                                                currentY + obj.getHeight());
 
                                offsetX = x;
                                offsetY = y;
 
-                               v = getView(sx, sy, target, list, false);
-                               if (dest == null) {
-                                       if (v != null){
-                                               dest = v;
-                                               dest.setAlpha(128);
+                               v = getView(sx, sy, target, labelIconViewList, false);
+                               if (destTarget == null) {
+                                       if (v != null) {
+                                               destTarget = v;
+                                               destTarget.setAlpha(128);
                                        }
                                } else {
-                                       if (v != dest){
-                                               dest.setAlpha(255);
-                                               dest = v;
-                                               if (dest != null){
-                                                       dest.setAlpha(128);
+                                       if (v != destTarget) {
+                                               destTarget.setAlpha(255);
+                                               destTarget = v;
+                                               if (destTarget != null) {
+                                                       destTarget.setAlpha(128);
                                                }
                                        }
                                }
                        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
-                               //if (obj == target){
-                               if (obj != null){
-                                       if (obj != target){
+                               // if (obj == target){
+                               if (obj != null) {
+                                       if (obj != target) {
                                                target.clearColorFilter();
                                                target = obj;
                                        }
-                                       if (target instanceof StatusIconView){
-                                               StatusIconView siv = (StatusIconView)target;
-                                               Node sn = siv.getNode();
-                                               sn.toggleStatus();
-                                               activity.execute(sn);
-                                               return super.onTouchEvent(event);                                       
+                                       // if (target instanceof StatusIconView){
+                                       if (target.getSelectedView(sx - target.getLeft(), sy
+                                                       - target.getTop()) instanceof StatusIconView) {
+//                                             StatusIconView siv = (StatusIconView) target;
+//                                             LabelIconView rv = siv.getRoot();
+//                                             long id = rv.getNodeId();
+                                               long id = target.getNodeId();
+                                               
+                                               activity.execute(id);
+                                               return super.onTouchEvent(event);
+                                               //return true;
                                        }
+
+                                       if (selectedTarget != null && selectedTarget == target) {
+                                               long id = selectedTarget.getNodeId();
+
+                                               target.clearColorFilter();
+                                               target = null;
+                                               selectedTarget = target;
+                                               activity.targetSelectedChanged(true);
+
+                                               activity.executeView(id);
+
+                                               return super.onTouchEvent(event);
+                                       }
+                                       
+                                       // ここに移動
+                                       scrollView.requestDisallowInterceptTouchEvent(true);
+
                                        offsetX = x;
                                        offsetY = y;
                                        // TODO
                                        currentX = obj.getLeft();
                                        currentY = obj.getTop();
-       
-                                       target.setColorFilter(Color.RED, Mode.LIGHTEN);
-       
-                                       scrollView.setScrollable(false);
-                               }
-                               else {
+
+                                       setSelected(target);
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(true);
+
+                                       // コメントにしたが、デグレードするかも
+                                       //scrollView.setScrollable(false);
+                               } else {
                                        target.clearColorFilter();
                                        target = null;
+                                       selectedTarget = target;
+                                       activity.targetSelectedChanged(false);
                                }
                                // return false;
                        } else if (event.getAction() == MotionEvent.ACTION_UP) {
                                if (!longClickFlg) {
                                        return super.onTouchEvent(event);
                                }
-                               if (target instanceof StatusIconView){
-                                       return super.onTouchEvent(event);                                       
+                               if (target instanceof StatusIconView) {
+                                       return super.onTouchEvent(event);
+                                       //return true;
                                }
                                obj = target;
 
                                // obj.setVisibility(View.GONE);
-                               if (dest == null || dest instanceof StatusIconView) {
+                               if (destTarget == null || destTarget instanceof StatusIconView) {
                                        obj.setAnimation(anime);
                                        obj.startAnimation(anime);
                                        // layout.removeView(obj);
@@ -250,38 +352,22 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
                                                        + target.getHeight());
                                        target.setAlpha(255);
                                } else {
-//                                     int srcX = target.getInitX();
-//                                     int srcY = target.getInitY();
-//                                     int dstX = dest.getInitX();
-//                                     int dstY = dest.getInitY();
-//
-//                                     target.layout(dstX, dstY, dstX + target.getWidth(), dstY
-//                                                     + target.getHeight());
-//                                     target.init(dstX, dstY);
-//                                     target.setAlpha(255);
-//                                     dest.layout(srcX, srcY, srcX + dest.getWidth(),
-//                                                     srcY + dest.getHeight());
-//                                     dest.init(srcX, srcY);
-//                                     dest.setAlpha(255);
-                                       Node src = target.getNode();
-                                       Node dst = dest.getNode();
+                                       long src = target.getNodeId();
+                                       long dst = destTarget.getNodeId();
                                        activity.execute(src, dst);
-                                       
+
                                        // TODO
                                        target = null;
-                                       dest = null;
+                                       destTarget = null;
+
+                                       // T29171
+                                       clearTarget();
 
                                        scrollView.setScrollable(true);
                                        scrollView.requestDisallowInterceptTouchEvent(false);
                                        scrollView.invalidate();
                                }
 
-                               //this.getParent().requestDisallowInterceptTouchEvent(false);
-
-                               // bt2.getHitRect(rect);
-                               // if (rect.contains(x, y)) {
-                               // isBt2Click = true;
-                               // }
                                longClickFlg = false;
                        }
 
@@ -292,87 +378,38 @@ public class IconFrameLayout extends FrameLayout implements OnLongClickListener
                }
        }
 
+       private void setSelected(LabelIconView t) {
+               t.setAlpha(255);
+               t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+       }
+
        @Override
        public boolean onLongClick(View view) {
+               if (!isElabledTouchEvent()){
+                       return true;
+               }
                if (target == null) {
                        return false;
                }
-               if (target instanceof StatusIconView){
+               if (target instanceof StatusIconView) {
                        return false;
                }
-               
+
                LabelIconView v = (LabelIconView) target;
                v.setAlpha(128);
                v.clearColorFilter();
 
                moveTop(target);
-               
+
                longClickFlg = true;
                return true;
        }
-
-       public void setScrollView(final IconScrollView scrollView) {
-               this.scrollView = scrollView;
-               this.setOnLongClickListener(this);
-               //this.setLongClickable(true);
-               
-               anime = AnimationUtils.loadAnimation(context, R.anim.sample);
-               anime.setAnimationListener(new AnimationListener() {
-                       public void onAnimationStart(Animation animation) {
-                       }
-
-                       public void onAnimationRepeat(Animation animation) {
-                       }
-
-                       public void onAnimationEnd(Animation animation) {
-                               // if (isBt2Click) {
-                               // bt2.performClick();
-                               // isBt2Click = false;
-                               // }
-                               target = null;
-                               dest = null;
-                               
-                               scrollView.setScrollable(true);
-                               scrollView.requestDisallowInterceptTouchEvent(false);
-                               scrollView.invalidate();
-                       }
-               });
+       
+       public boolean isElabledTouchEvent() {
+               return elabledTouchEvent;
        }
 
-       // @Override
-       // public boolean onTouchEvent(MotionEvent event) {
-       // // return super.onTouchEvent(event);
-       // return false;
-       // }
-
-       // @Override
-       // public boolean onKeyDown(int keyCode, KeyEvent event) {
-       // return true;
-       // }
-       //
-       // @Override
-       // public boolean onKeyLongPress(int keyCode, KeyEvent event) {
-       // return true;
-       // }
-       //
-       // @Override
-       // public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent
-       // event) {
-       // return true;
-       // }
-       //
-       // @Override
-       // public boolean onKeyPreIme(int keyCode, KeyEvent event) {
-       // return true;
-       // }
-       //
-       // @Override
-       // public boolean onKeyShortcut(int keyCode, KeyEvent event) {
-       // return true;
-       // }
-       //
-       // @Override
-       // public boolean onKeyUp(int keyCode, KeyEvent event) {
-       // return true;
-       // }
+       public void setElabledTouchEvent(boolean elabledTouchEvent) {
+               this.elabledTouchEvent = elabledTouchEvent;
+       }       
 }