OSDN Git Service

add clear back to draw UI
[android-x86/packages-apps-Gallery2.git] / src / com / android / gallery3d / filtershow / editors / EditorDraw.java
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
17 package com.android.gallery3d.filtershow.editors;
18
19 import android.app.ActionBar;
20 import android.content.Context;
21 import android.content.res.Resources;
22 import android.graphics.Bitmap;
23 import android.graphics.BitmapFactory;
24 import android.graphics.Color;
25 import android.graphics.drawable.GradientDrawable;
26 import android.view.LayoutInflater;
27 import android.view.Menu;
28 import android.view.MenuItem;
29 import android.view.View;
30 import android.view.View.OnClickListener;
31 import android.view.ViewGroup;
32 import android.widget.Button;
33 import android.widget.FrameLayout;
34 import android.widget.ImageButton;
35 import android.widget.ImageView;
36 import android.widget.LinearLayout;
37 import android.widget.PopupMenu;
38 import android.widget.SeekBar;
39
40 import com.android.gallery3d.R;
41 import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
42 import com.android.gallery3d.filtershow.colorpicker.ColorListener;
43 import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
44 import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
45 import com.android.gallery3d.filtershow.controller.BitmapCaller;
46 import com.android.gallery3d.filtershow.controller.ColorChooser;
47 import com.android.gallery3d.filtershow.controller.FilterView;
48 import com.android.gallery3d.filtershow.controller.ParameterColor;
49 import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
50 import com.android.gallery3d.filtershow.filters.FilterRepresentation;
51 import com.android.gallery3d.filtershow.filters.ImageFilterDraw;
52 import com.android.gallery3d.filtershow.imageshow.ImageDraw;
53
54 public class EditorDraw extends ParametricEditor implements FilterView {
55     private static final String LOGTAG = "EditorDraw";
56     public static final int ID = R.id.editorDraw;
57     public ImageDraw mImageDraw;
58     private static final int MODE_SIZE = FilterDrawRepresentation.PARAM_SIZE;
59     private static final int MODE_SIZEE = FilterDrawRepresentation.PARAM_SIZE;
60     private static final int MODE_STYLE = FilterDrawRepresentation.PARAM_STYLE;
61     private static final int MODE_COLOR = FilterDrawRepresentation.PARAM_COLOR;
62     int[] brushIcons = {
63             R.drawable.brush_flat,
64             R.drawable.brush_round,
65             R.drawable.brush_gauss,
66             R.drawable.brush_marker,
67             R.drawable.brush_spatter
68     };
69
70     int[] mBasColors = {
71             FilterDrawRepresentation.DEFAULT_MENU_COLOR1,
72             FilterDrawRepresentation.DEFAULT_MENU_COLOR2,
73             FilterDrawRepresentation.DEFAULT_MENU_COLOR3,
74             FilterDrawRepresentation.DEFAULT_MENU_COLOR4,
75             FilterDrawRepresentation.DEFAULT_MENU_COLOR5,
76     };
77     private EditorDrawTabletUI mTabletUI;
78     private String mParameterString;
79     private int mSelectedColorButton;
80     private String mDrawString = null;
81
82     public EditorDraw() {
83         super(ID);
84     }
85
86     @Override
87     public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
88         FilterDrawRepresentation rep = getDrawRep();
89         if (mDrawString != null) {
90             mImageDraw.displayDrawLook();
91             return mDrawString;
92         }
93         if (rep == null) {
94             return "";
95         }
96         if (!ParametricEditor.useCompact(mContext)) {
97
98         }
99         if (mParameterString == null) {
100             mParameterString = "";
101         }
102         String paramString;
103         String val = rep.getValueString();
104
105         mImageDraw.displayDrawLook();
106         return mParameterString + val;
107     }
108
109     @Override
110     public void createEditor(Context context, FrameLayout frameLayout) {
111         mView = mImageShow = mImageDraw = new ImageDraw(context);
112         super.createEditor(context, frameLayout);
113         mImageDraw.setEditor(this);
114
115     }
116
117     @Override
118     public void reflectCurrentFilter() {
119         super.reflectCurrentFilter();
120         FilterRepresentation rep = getLocalRepresentation();
121         if (rep != null && getLocalRepresentation() instanceof FilterDrawRepresentation) {
122             FilterDrawRepresentation drawRep = (FilterDrawRepresentation) getLocalRepresentation();
123             mImageDraw.setFilterDrawRepresentation(drawRep);
124             if (!ParametricEditor.useCompact(mContext)) {
125                 if (mTabletUI != null) {
126
127                     mTabletUI.setDrawRepresentation(drawRep);
128                 }
129                 return;
130             }
131
132             drawRep.getParam(FilterDrawRepresentation.PARAM_STYLE).setFilterView(this);
133             drawRep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
134             mParameterString = mContext.getString(R.string.draw_color);
135             control(drawRep.getCurrentParam(), mEditControl);
136         }
137     }
138
139     @Override
140     public void openUtilityPanel(final LinearLayout accessoryViewList) {
141         Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
142
143         view.setText(mContext.getString(R.string.draw_color));
144         view.setOnClickListener(new OnClickListener() {
145
146             @Override
147             public void onClick(View arg0) {
148                 showPopupMenu(accessoryViewList);
149             }
150         });
151
152     }
153
154     @Override
155     public boolean showsSeekBar() {
156         return false;
157     }
158
159     private void showPopupMenu(LinearLayout accessoryViewList) {
160         final Button button = (Button) accessoryViewList.findViewById(
161                 R.id.applyEffect);
162         if (button == null) {
163             return;
164         }
165         final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), button);
166         popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_draw, popupMenu.getMenu());
167         if (!ParametricEditor.useCompact(mContext)) {
168             Menu menu = popupMenu.getMenu();
169             int count = menu.size();
170             for (int i = 0; i < count; i++) {
171                 MenuItem item = menu.getItem(i);
172                 if (item.getItemId() != R.id.draw_menu_clear) {
173                     item.setVisible(false);
174                 }
175             }
176             popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
177
178                 @Override
179                 public boolean onMenuItemClick(MenuItem item) {
180                     clearDrawing();
181                     return true;
182                 }
183             });
184         } else {
185             popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
186
187                 @Override
188                 public boolean onMenuItemClick(MenuItem item) {
189                     selectMenuItem(item);
190                     return true;
191                 }
192             });
193         }
194         popupMenu.show();
195
196     }
197
198     protected void selectMenuItem(MenuItem item) {
199         ImageFilterDraw filter = (ImageFilterDraw) mImageShow.getCurrentFilter();
200         FilterDrawRepresentation rep = getDrawRep();
201         if (rep == null) {
202             return;
203         }
204
205         switch (item.getItemId()) {
206             case R.id.draw_menu_clear:
207                 clearDrawing();
208                 break;
209             case R.id.draw_menu_size:
210                 rep.setPramMode(FilterDrawRepresentation.PARAM_SIZE);
211                 break;
212             case R.id.draw_menu_style:
213                 rep.setPramMode(FilterDrawRepresentation.PARAM_STYLE);
214                 break;
215             case R.id.draw_menu_color:
216                 rep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
217                 break;
218         }
219         if (item.getItemId() != R.id.draw_menu_clear) {
220             mParameterString = item.getTitle().toString();
221             updateText();
222         }
223         if (mControl instanceof ColorChooser) {
224             ColorChooser c = (ColorChooser) mControl;
225             mBasColors = c.getColorSet();
226         }
227         control(rep.getCurrentParam(), mEditControl);
228         if (mControl instanceof ColorChooser) {
229             ColorChooser c = (ColorChooser) mControl;
230             c.setColorSet(mBasColors);
231         }
232         mControl.updateUI();
233         mView.invalidate();
234     }
235
236     public void clearDrawing(){
237         ImageDraw idraw = (ImageDraw) mImageShow;
238         idraw.resetParameter();
239         commitLocalRepresentation();
240     }
241
242     @Override
243     public void setUtilityPanelUI(View actionButton, View editControl) {
244         if (ParametricEditor.useCompact(mContext)) {
245             super.setUtilityPanelUI(actionButton, editControl);
246             return;
247         }
248
249         mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
250         if (mSeekBar != null) {
251             mSeekBar.setVisibility(View.GONE);
252         }
253         LayoutInflater inflater =
254                 (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
255         LinearLayout lp = (LinearLayout) inflater.inflate(
256                 R.layout.filtershow_draw_ui, (ViewGroup) editControl, true);
257
258         mTabletUI = new EditorDrawTabletUI(this, mContext, lp);
259         mDrawString = mContext.getResources().getString(R.string.imageDraw).toUpperCase();
260         setMenuIcon(true);
261
262     }
263
264     FilterDrawRepresentation getDrawRep() {
265         FilterRepresentation rep = getLocalRepresentation();
266         if (rep instanceof FilterDrawRepresentation) {
267             return (FilterDrawRepresentation) rep;
268         }
269         return null;
270     }
271
272     @Override
273     public void computeIcon(int index, BitmapCaller caller) {
274         Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), brushIcons[index]);
275         caller.available(bitmap);
276     }
277
278     public int getBrushIcon(int type) {
279         return brushIcons[type];
280     }
281
282 }