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