gt:         FilterRepresentation rep = getLocalRepresentation();
context: /*
   * Copyright (C) 2013 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.gallery3d.filtershow.editors;
  
  import android.app.ActionBar;
  import android.content.Context;
  import android.content.res.Resources;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Color;
  import android.graphics.drawable.GradientDrawable;
  import android.view.LayoutInflater;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.view.View.OnClickListener;
  import android.view.ViewGroup;
  import android.widget.Button;
  import android.widget.FrameLayout;
  import android.widget.ImageButton;
  import android.widget.ImageView;
  import android.widget.LinearLayout;
  import android.widget.PopupMenu;
  import android.widget.SeekBar;
  
  import com.android.gallery3d.R;
  import com.android.gallery3d.filtershow.FilterShowActivity;
  import com.android.gallery3d.filtershow.colorpicker.ColorHueView;
  import com.android.gallery3d.filtershow.colorpicker.ColorListener;
  import com.android.gallery3d.filtershow.colorpicker.ColorOpacityView;
  import com.android.gallery3d.filtershow.colorpicker.ColorSVRectView;
  import com.android.gallery3d.filtershow.controller.BitmapCaller;
  import com.android.gallery3d.filtershow.controller.ColorChooser;
  import com.android.gallery3d.filtershow.controller.FilterView;
  import com.android.gallery3d.filtershow.controller.ParameterColor;
  import com.android.gallery3d.filtershow.filters.FilterDrawRepresentation;
  import com.android.gallery3d.filtershow.filters.FilterRepresentation;
  import com.android.gallery3d.filtershow.filters.ImageFilterDraw;
  import com.android.gallery3d.filtershow.imageshow.ImageDraw;
  
  public class EditorDraw extends ParametricEditor implements FilterView {
      private static final String LOGTAG = "EditorDraw";
      public static final int ID = R.id.editorDraw;
      public ImageDraw mImageDraw;
      private static final int MODE_SIZE = FilterDrawRepresentation.PARAM_SIZE;
      private static final int MODE_SIZEE = FilterDrawRepresentation.PARAM_SIZE;
      private static final int MODE_STYLE = FilterDrawRepresentation.PARAM_STYLE;
      private static final int MODE_COLOR = FilterDrawRepresentation.PARAM_COLOR;
      int[] brushIcons = {
              R.drawable.brush_flat,
              R.drawable.brush_round,
              R.drawable.brush_gauss,
              R.drawable.brush_marker,
              R.drawable.brush_spatter
      };
  
      int[] mBasColors = {
              FilterDrawRepresentation.DEFAULT_MENU_COLOR1,
              FilterDrawRepresentation.DEFAULT_MENU_COLOR2,
              FilterDrawRepresentation.DEFAULT_MENU_COLOR3,
              FilterDrawRepresentation.DEFAULT_MENU_COLOR4,
              FilterDrawRepresentation.DEFAULT_MENU_COLOR5,
      };
      private EditorDrawTabletUI mTabletUI;
      private String mParameterString;
      private int mSelectedColorButton;
      private String mDrawString = null;
  
      public EditorDraw() {
          super(ID);
      }
  
      @Override
      public String calculateUserMessage(Context context, String effectName, Object parameterValue) {
          FilterDrawRepresentation rep = getDrawRep();
          if (mDrawString != null) {
              mImageDraw.displayDrawLook();
              return mDrawString;
          }
          if (rep == null) {
              return "";
          }
          if (!ParametricEditor.useCompact(mContext)) {
  
          }
          if (mParameterString == null) {
              mParameterString = "";
          }
          String paramString;
          String val = rep.getValueString();
  
          mImageDraw.displayDrawLook();
          return mParameterString + val;
      }
  
      @Override
      public void createEditor(Context context, FrameLayout frameLayout) {
          mView = mImageShow = mImageDraw = new ImageDraw(context);
          super.createEditor(context, frameLayout);
          mImageDraw.setEditor(this);
  
      }
  
      @Override
      public void reflectCurrentFilter() {
          super.reflectCurrentFilter();
          FilterRepresentation rep = getLocalRepresentation();
          if (rep != null && getLocalRepresentation() instanceof FilterDrawRepresentation) {
              FilterDrawRepresentation drawRep = (FilterDrawRepresentation) getLocalRepresentation();
              mImageDraw.setFilterDrawRepresentation(drawRep);
              if (!ParametricEditor.useCompact(mContext)) {
                  if (mTabletUI != null) {
  
                      mTabletUI.setDrawRepresentation(drawRep);
                  }
                  return;
              }
  
              drawRep.getParam(FilterDrawRepresentation.PARAM_STYLE).setFilterView(this);
              drawRep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
              mParameterString = mContext.getString(R.string.draw_color);
              control(drawRep.getCurrentParam(), mEditControl);
          }
      }
  
      @Override
      public void openUtilityPanel(final LinearLayout accessoryViewList) {
          Button view = (Button) accessoryViewList.findViewById(R.id.applyEffect);
  
          view.setText(mContext.getString(R.string.draw_color));
          view.setOnClickListener(new OnClickListener() {
  
              @Override
              public void onClick(View arg0) {
                  showPopupMenu(accessoryViewList);
              }
          });
  
      }
  
      @Override
      public boolean showsSeekBar() {
          return false;
      }
  
      private void showPopupMenu(LinearLayout accessoryViewList) {
          final Button button = (Button) accessoryViewList.findViewById(
                  R.id.applyEffect);
          if (button == null) {
              return;
          }
          final PopupMenu popupMenu = new PopupMenu(mImageShow.getActivity(), button);
          popupMenu.getMenuInflater().inflate(R.menu.filtershow_menu_draw, popupMenu.getMenu());
          if (!ParametricEditor.useCompact(mContext)) {
              Menu menu = popupMenu.getMenu();
              int count = menu.size();
              for (int i = 0; i < count; i++) {
                  MenuItem item = menu.getItem(i);
                  if (item.getItemId() != R.id.draw_menu_clear) {
                      item.setVisible(false);
                  }
              }
              popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
  
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      clearDrawing();
                      return true;
                  }
              });
          } else {
              popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
  
                  @Override
                  public boolean onMenuItemClick(MenuItem item) {
                      selectMenuItem(item);
                      return true;
                  }
              });
          }
          popupMenu.show();
          ((FilterShowActivity)mContext).onShowMenu(popupMenu);
      }
  
      protected void selectMenuItem(MenuItem item) {
          ImageFilterDraw filter = (ImageFilterDraw) mImageShow.getCurrentFilter();
          FilterDrawRepresentation rep = getDrawRep();
          if (rep == null) {
              return;
          }
  
          switch (item.getItemId()) {
              case R.id.draw_menu_clear:
                  clearDrawing();
                  break;
              case R.id.draw_menu_size:
                  rep.setPramMode(FilterDrawRepresentation.PARAM_SIZE);
                  break;
              case R.id.draw_menu_style:
                  rep.setPramMode(FilterDrawRepresentation.PARAM_STYLE);
                  break;
              case R.id.draw_menu_color:
                  rep.setPramMode(FilterDrawRepresentation.PARAM_COLOR);
                  break;
          }
          if (item.getItemId() != R.id.draw_menu_clear) {
              mParameterString = item.getTitle().toString();
              updateText();
          }
          if (mControl instanceof ColorChooser) {
              ColorChooser c = (ColorChooser) mControl;
              mBasColors = c.getColorSet();
          }
          control(rep.getCurrentParam(), mEditControl);
          if (mControl instanceof ColorChooser) {
              ColorChooser c = (ColorChooser) mControl;
              c.setColorSet(mBasColors);
          }
          mControl.updateUI();
          mView.invalidate();
      }
  
      public void clearDrawing(){
          ImageDraw idraw = (ImageDraw) mImageShow;
          idraw.resetParameter();
          commitLocalRepresentation();
      }
  
      @Override
      public void setUtilityPanelUI(View actionButton, View editControl) {
          if (ParametricEditor.useCompact(mContext)) {
              super.setUtilityPanelUI(actionButton, editControl);
              return;
          }
  
          mSeekBar = (SeekBar) editControl.findViewById(R.id.primarySeekBar);
          if (mSeekBar != null) {
              mSeekBar.setVisibility(View.GONE);
          }
          LayoutInflater inflater =
                  (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          LinearLayout lp = (LinearLayout) inflater.inflate(
                  R.layout.filtershow_draw_ui, (ViewGroup) editControl, true);
  
          mTabletUI = new EditorDrawTabletUI(this, mContext, lp);
          mDrawString = mContext.getResources().getString(R.string.imageDraw).toUpperCase();
          setMenuIcon(true);
  
      }
  
      FilterDrawRepresentation getDrawRep() {
  