EditorColorBorder.java revision 64fc2ed005e2f1dc9ed0b34481c46a370c244b86
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.gallery3d.filtershow.editors;
18
19import android.content.Context;
20import android.graphics.Bitmap;
21import android.graphics.BitmapFactory;
22import android.graphics.Color;
23import android.util.Log;
24import android.view.LayoutInflater;
25import android.view.MenuItem;
26import android.view.View;
27import android.view.View.OnClickListener;
28import android.view.ViewGroup;
29import android.widget.Button;
30import android.widget.FrameLayout;
31import android.widget.LinearLayout;
32import android.widget.PopupMenu;
33import android.widget.SeekBar;
34
35import com.android.gallery3d.R;
36import com.android.gallery3d.filtershow.FilterShowActivity;
37import com.android.gallery3d.filtershow.controller.BitmapCaller;
38import com.android.gallery3d.filtershow.controller.ColorChooser;
39import com.android.gallery3d.filtershow.controller.FilterView;
40import com.android.gallery3d.filtershow.filters.FilterColorBorderRepresentation;
41import com.android.gallery3d.filtershow.filters.FilterRepresentation;
42import com.android.gallery3d.filtershow.filters.ImageFilterColorBorder;
43import com.android.gallery3d.filtershow.imageshow.ImageShow;
44
45public class EditorColorBorder extends ParametricEditor  {
46    private static final String LOGTAG = "EditorColorBorder";
47    public static final int ID = R.id.editorColorBorder;
48
49
50    int[] mBasColors = {
51            FilterColorBorderRepresentation.DEFAULT_MENU_COLOR1,
52            FilterColorBorderRepresentation.DEFAULT_MENU_COLOR2,
53            FilterColorBorderRepresentation.DEFAULT_MENU_COLOR3,
54            FilterColorBorderRepresentation.DEFAULT_MENU_COLOR4,
55            FilterColorBorderRepresentation.DEFAULT_MENU_COLOR5,
56    };
57    private EditorColorBorderTabletUI mTabletUI;
58    private String mParameterString;
59    private int mSelectedColorButton;
60
61    public EditorColorBorder() {
62        super(ID);
63    }
64
65    @Override
66    public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
67        FilterColorBorderRepresentation rep = getColorBorderRep();
68        if (rep == null) {
69            return "";
70        }
71        if (mParameterString == null) {
72            mParameterString = "";
73        }
74        String paramString;
75        String val = rep.getValueString();
76        return mParameterString + val;
77    }
78
79    @Override
80    public void createEditor(Context context, FrameLayout frameLayout) {
81        mView = mImageShow = new ImageShow(context);
82        super.createEditor(context, frameLayout);
83    }
84
85    @Override
86    public void reflectCurrentFilter() {
87        super.reflectCurrentFilter();
88        FilterRepresentation rep = getLocalRepresentation();
89        if (rep != null && getLocalRepresentation() instanceof FilterColorBorderRepresentation) {
90            FilterColorBorderRepresentation cbRep =
91                    (FilterColorBorderRepresentation) getLocalRepresentation();
92            if (!ParametricEditor.useCompact(mContext)) {
93                if (mTabletUI != null) {
94                    mTabletUI.setColorBorderRepresentation(cbRep);
95                }
96
97            }
98            cbRep.setPramMode(FilterColorBorderRepresentation.PARAM_SIZE);
99            mParameterString = mContext.getString(R.string.color_border_size);
100            if (mEditControl != null) {
101                control(cbRep.getCurrentParam(), mEditControl);
102            }
103        }
104    }
105
106    @Override
107    public void openUtilityPanel(final LinearLayout accessoryViewList) {
108        Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
109        view.setText(mContext.getString(R.string.color_border_size));
110        view.setOnClickListener(new OnClickListener() {
111
112            @Override
113            public void onClick(View arg0) {
114                showPopupMenu(accessoryViewList);
115            }
116        });
117    }
118
119    @Override
120    public boolean showsSeekBar() {
121        return false;
122    }
123
124    private void showPopupMenu(LinearLayout accessoryViewList) {
125        final Button button = (Button) accessoryViewList.findViewById(
126                R.id.applyEffect);
127        if (button == null) {
128            return;
129        }
130        final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), button);
131        popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_color_border,
132                popupMenu.getMenu());
133        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
134
135            @Override
136            public boolean onMenuItemClick(MenuItem item) {
137                selectMenuItem(item);
138                return true;
139            }
140        });
141        popupMenu.show();
142        ((FilterShowActivity)mContext).onShowMenu(popupMenu);
143    }
144
145    protected void selectMenuItem(MenuItem item) {
146        ImageFilterColorBorder filter = (ImageFilterColorBorder) mImageShow.getCurrentFilter();
147        FilterColorBorderRepresentation rep = getColorBorderRep();
148        if (rep == null) {
149            return;
150        }
151        switch (item.getItemId()) {
152            case R.id.color_border_menu_clear:
153                clearFrame();
154                break;
155            case R.id.color_border_menu_size:
156                rep.setPramMode(FilterColorBorderRepresentation.PARAM_SIZE);
157                break;
158            case R.id.color_border_menu_corner_size:
159                rep.setPramMode(FilterColorBorderRepresentation.PARAM_RADIUS);
160                break;
161            case R.id.color_border_menu_color:
162                rep.setPramMode(FilterColorBorderRepresentation.PARAM_COLOR);
163                break;
164        }
165        if (item.getItemId() != R.id.color_border_menu_clear) {
166            mParameterString = item.getTitle().toString();
167        }
168        if (mControl instanceof ColorChooser) {
169            ColorChooser c = (ColorChooser) mControl;
170            mBasColors = c.getColorSet();
171        }
172        control(rep.getCurrentParam(), mEditControl);
173        if (mControl instanceof ColorChooser) {
174            ColorChooser c = (ColorChooser) mControl;
175            c.setColorSet(mBasColors);
176        }
177        updateText();
178        mControl.updateUI();
179        mView.invalidate();
180    }
181
182    public void clearFrame() {
183        commitLocalRepresentation();
184    }
185
186    @Override
187    public void setUtilityPanelUI(View actionButton, View editControl) {
188        if (ParametricEditor.useCompact(mContext)) {
189            super.setUtilityPanelUI(actionButton, editControl);
190            return;
191        }
192        mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
193        if (mSeekBar != null) {
194            mSeekBar.setVisibility(View.GONE);
195        }
196
197        mTabletUI = new EditorColorBorderTabletUI(this, mContext, editControl);
198
199    }
200
201    FilterColorBorderRepresentation getColorBorderRep() {
202        FilterRepresentation rep = getLocalRepresentation();
203        if (rep instanceof FilterColorBorderRepresentation) {
204            return (FilterColorBorderRepresentation) rep;
205        }
206        return null;
207    }
208
209
210}
211