EditorDraw.java revision 91be98c35f6c5f19d7629bb29e7261970b2f4c67
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.app.Dialog;
20import android.content.Context;
21import android.view.MenuItem;
22import android.view.View;
23import android.view.View.OnClickListener;
24import android.view.WindowManager.LayoutParams;
25import android.widget.Button;
26import android.widget.FrameLayout;
27import android.widget.LinearLayout;
28import android.widget.PopupMenu;
29import android.widget.SeekBar;
30
31import com.android.gallery3d.R;
32import com.android.gallery3d.filtershow.FilterShowActivity;
33import com.android.gallery3d.filtershow.colorpicker.ColorGridDialog;
34import com.android.gallery3d.filtershow.colorpicker.RGBListener;
35import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
36import com.android.gallery3d.filtershow.filters.FilterRepresentation;
37import com.android.gallery3d.filtershow.filters.ImageFilterDraw;
38import com.android.gallery3d.filtershow.imageshow.ImageDraw;
39
40public class EditorDraw extends Editor {
41    private static final String LOGTAG = "EditorDraw";
42    public static final int ID = R.id.editorDraw;
43    public ImageDraw mImageDraw;
44
45    public EditorDraw() {
46        super(ID);
47    }
48
49    @Override
50    public void createEditor(Context context, FrameLayout frameLayout) {
51        super.createEditor(context, frameLayout);
52        mView = mImageShow = mImageDraw = new ImageDraw(context);
53        mImageDraw.setEditor(this);
54
55    }
56
57    @Override
58    public void reflectCurrentFilter() {
59        super.reflectCurrentFilter();
60        FilterRepresentation rep = getLocalRepresentation();
61
62        if (rep != null && getLocalRepresentation() instanceof FilterDrawRepresentation) {
63            FilterDrawRepresentation drawRep = (FilterDrawRepresentation) getLocalRepresentation();
64            mImageDraw.setFilterDrawRepresentation(drawRep);
65        }
66    }
67
68    @Override
69    public void openUtilityPanel(final LinearLayout accessoryViewList) {
70        Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
71        view.setText(mContext.getString(R.string.draw_style));
72        view.setOnClickListener(new OnClickListener() {
73
74                @Override
75            public void onClick(View arg0) {
76                showPopupMenu(accessoryViewList);
77            }
78        });
79    }
80
81    @Override
82    public boolean showsSeekBar() {
83        return false;
84    }
85
86    private void showPopupMenu(LinearLayout accessoryViewList) {
87        final Button button = (Button) accessoryViewList.findViewById(
88                R.id.applyEffect);
89        if (button == null) {
90            return;
91        }
92        final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), button);
93        popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_draw, popupMenu.getMenu());
94        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
95
96            @Override
97            public boolean onMenuItemClick(MenuItem item) {
98                ImageFilterDraw filter = (ImageFilterDraw) mImageShow.getCurrentFilter();
99                if (item.getItemId() == R.id.draw_menu_color) {
100                    showColorGrid(item);
101                } else if (item.getItemId() == R.id.draw_menu_size) {
102                    showSizeDialog(item);
103                } else if (item.getItemId() == R.id.draw_menu_style_brush_marker) {
104                    ImageDraw idraw = (ImageDraw) mImageShow;
105                    idraw.setStyle(ImageFilterDraw.BRUSH_STYLE_MARKER);
106                } else if (item.getItemId() == R.id.draw_menu_style_brush_spatter) {
107                    ImageDraw idraw = (ImageDraw) mImageShow;
108                    idraw.setStyle(ImageFilterDraw.BRUSH_STYLE_SPATTER);
109                } else if (item.getItemId() == R.id.draw_menu_style_line) {
110                    ImageDraw idraw = (ImageDraw) mImageShow;
111                    idraw.setStyle(ImageFilterDraw.SIMPLE_STYLE);
112                } else if (item.getItemId() == R.id.draw_menu_clear) {
113                    ImageDraw idraw = (ImageDraw) mImageShow;
114                    idraw.resetParameter();
115                    commitLocalRepresentation();
116                }
117                mView.invalidate();
118                return true;
119            }
120        });
121        popupMenu.show();
122    }
123
124    public void showSizeDialog(final MenuItem item) {
125        FilterShowActivity ctx = mImageShow.getActivity();
126        final Dialog dialog = new Dialog(ctx);
127        dialog.setTitle(R.string.draw_size_title);
128        dialog.setContentView(R.layout.filtershow_draw_size);
129        final SeekBar bar = (SeekBar) dialog.findViewById(R.id.sizeSeekBar);
130        ImageDraw idraw = (ImageDraw) mImageShow;
131        bar.setProgress(idraw.getSize());
132        Button button = (Button) dialog.findViewById(R.id.sizeAcceptButton);
133        button.setOnClickListener(new OnClickListener() {
134
135            @Override
136            public void onClick(View arg0) {
137                int p = bar.getProgress();
138                ImageDraw idraw = (ImageDraw) mImageShow;
139                idraw.setSize(p + 1);
140                dialog.dismiss();
141            }
142        });
143        dialog.show();
144    }
145
146    public void showColorGrid(final MenuItem item) {
147        RGBListener cl = new RGBListener() {
148            @Override
149            public void setColor(int rgb) {
150                ImageDraw idraw = (ImageDraw) mImageShow;
151                idraw.setColor(rgb);
152            }
153        };
154        ColorGridDialog cpd = new ColorGridDialog(mImageShow.getActivity(), cl);
155        cpd.show();
156        LayoutParams params = cpd.getWindow().getAttributes();
157    }
158}
159