OSDN Git Service

Refactoring ImageLoader.
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / editors / Editor.java
index a9b2fd4..9539d65 100644 (file)
 package com.android.gallery3d.filtershow.editors;
 
 import android.content.Context;
+import android.util.AttributeSet;
 import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
+import android.widget.PopupMenu;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
 
-import com.android.gallery3d.filtershow.PanelController;
+import com.android.gallery3d.R;
 import com.android.gallery3d.filtershow.cache.ImageLoader;
+import com.android.gallery3d.filtershow.controller.Control;
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
 import com.android.gallery3d.filtershow.imageshow.ImageShow;
+import com.android.gallery3d.filtershow.imageshow.MasterImage;
+import com.android.gallery3d.filtershow.pipeline.ImagePreset;
 
 /**
  * Base class for Editors Must contain a mImageShow and a top level view
  */
-public class Editor {
+public class Editor implements OnSeekBarChangeListener, SwapButton.SwapButtonListener {
     protected Context mContext;
     protected View mView;
     protected ImageShow mImageShow;
     protected FrameLayout mFrameLayout;
-    protected PanelController mPanelController;
+    protected SeekBar mSeekBar;
+    Button mEditTitle;
+    protected Button mFilterTitle;
     protected int mID;
     private final String LOGTAG = "Editor";
+    protected FilterRepresentation mLocalRepresentation = null;
+    protected byte mShowParameter = SHOW_VALUE_UNDEFINED;
+    private Button mButton;
+    public static byte SHOW_VALUE_UNDEFINED = -1;
+    public static byte SHOW_VALUE_OFF = 0;
+    public static byte SHOW_VALUE_INT = 1;
 
-    public void setPanelController(PanelController panelController) {
-        this.mPanelController = panelController;
+    public static void hackFixStrings(Menu menu) {
+        int count = menu.size();
+        for (int i = 0; i < count; i++) {
+            MenuItem item = menu.getItem(i);
+            item.setTitle(item.getTitle().toString().toUpperCase());
+        }
+    }
+
+    public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
+        return effectName.toUpperCase() + " " + parameterValue;
     }
 
     protected Editor(int id) {
         mID = id;
     }
+
     public int getID() {
         return mID;
     }
 
+    public byte showParameterValue() {
+        return mShowParameter;
+    }
+
+    public boolean showsSeekBar() {
+        return true;
+    }
+
+    public void setUpEditorUI(View actionButton, View editControl,
+                              Button editTitle, Button stateButton) {
+        mEditTitle = editTitle;
+        mFilterTitle = stateButton;
+        mButton = editTitle;
+        setMenuIcon(true);
+        setUtilityPanelUI(actionButton, editControl);
+    }
+
+    public boolean showsPopupIndicator() {
+        return true;
+    }
+
+    /**
+     * @param actionButton the would be the area for menu etc
+     * @param editControl this is the black area for sliders etc
+     */
+    public void setUtilityPanelUI(View actionButton, View editControl) {
+
+        AttributeSet aset;
+        Context context = editControl.getContext();
+        LayoutInflater inflater =
+                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        LinearLayout lp = (LinearLayout) inflater.inflate(
+                R.layout.filtershow_seekbar, (ViewGroup) editControl, true);
+        mSeekBar = (SeekBar) lp.findViewById(R.id.primarySeekBar);
+        mSeekBar.setOnSeekBarChangeListener(this);
+
+        if (showsSeekBar()) {
+            mSeekBar.setOnSeekBarChangeListener(this);
+            mSeekBar.setVisibility(View.VISIBLE);
+        } else {
+            mSeekBar.setVisibility(View.INVISIBLE);
+        }
+
+        if (mButton != null) {
+            if (showsPopupIndicator()) {
+                mButton.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0,
+                        R.drawable.filtershow_menu_marker, 0);
+            } else {
+                mButton.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0);
+            }
+        }
+    }
+
+    @Override
+    public void onProgressChanged(SeekBar sbar, int progress, boolean arg2) {
+
+    }
+
+    public void setPanel() {
+
+    }
+
     public void createEditor(Context context,FrameLayout frameLayout) {
         mContext = context;
         mFrameLayout = frameLayout;
+        mLocalRepresentation = null;
     }
 
     protected void unpack(int viewid, int layoutid) {
@@ -97,31 +188,102 @@ public class Editor {
         return mImageShow;
     }
 
-    public void setImageLoader(ImageLoader imageLoader) {
-        mImageShow.setImageLoader(imageLoader);
-    }
-
     public void setVisibility(int visible) {
         mView.setVisibility(visible);
     }
 
+    public FilterRepresentation getLocalRepresentation() {
+        if (mLocalRepresentation == null) {
+            ImagePreset preset = MasterImage.getImage().getPreset();
+            FilterRepresentation filterRepresentation = MasterImage.getImage().getCurrentFilterRepresentation();
+            mLocalRepresentation = preset.getFilterRepresentationCopyFrom(filterRepresentation);
+            if (mShowParameter == SHOW_VALUE_UNDEFINED && filterRepresentation != null) {
+                boolean show = filterRepresentation.showParameterValue();
+                mShowParameter = show ? SHOW_VALUE_INT : SHOW_VALUE_OFF;
+            }
+
+        }
+        return mLocalRepresentation;
+    }
+
+    public void commitLocalRepresentation() {
+        ImagePreset preset = MasterImage.getImage().getPreset();
+        preset.updateFilterRepresentation(getLocalRepresentation());
+        if (mButton != null) {
+            updateText();
+        }
+    }
+
+    protected void updateText() {
+        String s = "";
+        if (mLocalRepresentation != null) {
+            s = mContext.getString(mLocalRepresentation.getTextId());
+        }
+        mButton.setText(calculateUserMessage(mContext, s, ""));
+    }
+
     /**
      * called after the filter is set and the select is called
      */
     public void reflectCurrentFilter() {
+        mLocalRepresentation = null;
+        FilterRepresentation representation = getLocalRepresentation();
+        if (representation != null && mFilterTitle != null && representation.getTextId() != 0) {
+            String text = mContext.getString(representation.getTextId()).toUpperCase();
+            mFilterTitle.setText(text);
+            updateText();
+        }
     }
 
     public boolean useUtilityPanel() {
-        if (mImageShow != null) {
-            return mImageShow.useUtilityPanel();
-        }
-        return false;
+        return true;
     }
 
     public void openUtilityPanel(LinearLayout mAccessoryViewList) {
+        setMenuIcon(false);
         if (mImageShow != null) {
             mImageShow.openUtilityPanel(mAccessoryViewList);
         }
     }
 
+    protected void setMenuIcon(boolean on) {
+        mEditTitle.setCompoundDrawablesRelativeWithIntrinsicBounds(
+                0, 0, on ? R.drawable.filtershow_menu_marker : 0, 0);
+    }
+
+    protected void createMenu(int[] strId, View button) {
+        PopupMenu pmenu = new PopupMenu(mContext, button);
+        Menu menu = pmenu.getMenu();
+        for (int i = 0; i < strId.length; i++) {
+            menu.add(Menu.NONE, Menu.FIRST + i, 0, mContext.getString(strId[i]));
+        }
+        setMenuIcon(true);
+
+    }
+
+    public Control[] getControls() {
+        return null;
+    }
+    @Override
+    public void onStartTrackingTouch(SeekBar arg0) {
+
+    }
+
+    @Override
+    public void onStopTrackingTouch(SeekBar arg0) {
+
+    }
+
+    @Override
+    public void swapLeft(MenuItem item) {
+
+    }
+
+    @Override
+    public void swapRight(MenuItem item) {
+
+    }
+
+    public void detach() {
+    }
 }