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