summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow/category/CategoryAdapter.java')
-rw-r--r--src/com/android/gallery3d/filtershow/category/CategoryAdapter.java182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
new file mode 100644
index 000000000..6451c39df
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/category/CategoryAdapter.java
@@ -0,0 +1,182 @@
+/*
+ * 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.category;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.android.gallery3d.filtershow.filters.FilterRepresentation;
+import com.android.gallery3d.filtershow.filters.FilterTinyPlanetRepresentation;
+import com.android.gallery3d.filtershow.pipeline.ImagePreset;
+
+public class CategoryAdapter extends ArrayAdapter<Action> {
+
+ private static final String LOGTAG = "CategoryAdapter";
+ private int mItemHeight;
+ private View mContainer;
+ private int mItemWidth = ListView.LayoutParams.MATCH_PARENT;
+ private int mSelectedPosition;
+ int mCategory;
+ private int mOrientation;
+
+ public CategoryAdapter(Context context, int textViewResourceId) {
+ super(context, textViewResourceId);
+ mItemHeight = (int) (context.getResources().getDisplayMetrics().density * 100);
+ }
+
+ public CategoryAdapter(Context context) {
+ this(context, 0);
+ }
+
+ public void setItemHeight(int height) {
+ mItemHeight = height;
+ }
+
+ public void setItemWidth(int width) {
+ mItemWidth = width;
+ }
+
+ @Override
+ public void add(Action action) {
+ super.add(action);
+ action.setAdapter(this);
+ }
+
+ public void initializeSelection(int category) {
+ mCategory = category;
+ mSelectedPosition = -1;
+ if (category == MainPanel.LOOKS) {
+ mSelectedPosition = 0;
+ }
+ if (category == MainPanel.BORDERS) {
+ mSelectedPosition = 0;
+ }
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ if (convertView == null) {
+ convertView = new CategoryView(getContext());
+ }
+ CategoryView view = (CategoryView) convertView;
+ view.setOrientation(mOrientation);
+ view.setAction(getItem(position), this);
+ view.setLayoutParams(
+ new ListView.LayoutParams(mItemWidth, mItemHeight));
+ view.setTag(position);
+ view.invalidate();
+ return view;
+ }
+
+ public void setSelected(View v) {
+ int old = mSelectedPosition;
+ mSelectedPosition = (Integer) v.getTag();
+ if (old != -1) {
+ invalidateView(old);
+ }
+ invalidateView(mSelectedPosition);
+ }
+
+ public boolean isSelected(View v) {
+ return (Integer) v.getTag() == mSelectedPosition;
+ }
+
+ private void invalidateView(int position) {
+ View child = null;
+ if (mContainer instanceof ListView) {
+ ListView lv = (ListView) mContainer;
+ child = lv.getChildAt(position - lv.getFirstVisiblePosition());
+ } else {
+ CategoryTrack ct = (CategoryTrack) mContainer;
+ child = ct.getChildAt(position);
+ }
+ if (child != null) {
+ child.invalidate();
+ }
+ }
+
+ public void setContainer(View container) {
+ mContainer = container;
+ }
+
+ public void imageLoaded() {
+ notifyDataSetChanged();
+ }
+
+ public FilterRepresentation getTinyPlanet() {
+ for (int i = 0; i < getCount(); i++) {
+ Action action = getItem(i);
+ if (action.getRepresentation() != null
+ && action.getRepresentation()
+ instanceof FilterTinyPlanetRepresentation) {
+ return action.getRepresentation();
+ }
+ }
+ return null;
+ }
+
+ public void removeTinyPlanet() {
+ for (int i = 0; i < getCount(); i++) {
+ Action action = getItem(i);
+ if (action.getRepresentation() != null
+ && action.getRepresentation()
+ instanceof FilterTinyPlanetRepresentation) {
+ remove(action);
+ return;
+ }
+ }
+ }
+
+ public void setOrientation(int orientation) {
+ mOrientation = orientation;
+ }
+
+ public void reflectImagePreset(ImagePreset preset) {
+ if (preset == null) {
+ return;
+ }
+ int selected = 0; // if nothing found, select "none" (first element)
+ FilterRepresentation rep = null;
+ if (mCategory == MainPanel.LOOKS) {
+ int pos = preset.getPositionForType(FilterRepresentation.TYPE_FX);
+ if (pos != -1) {
+ rep = preset.getFilterRepresentation(pos);
+ }
+ } else if (mCategory == MainPanel.BORDERS) {
+ int pos = preset.getPositionForType(FilterRepresentation.TYPE_BORDER);
+ if (pos != -1) {
+ rep = preset.getFilterRepresentation(pos);
+ }
+ }
+ if (rep != null) {
+ for (int i = 0; i < getCount(); i++) {
+ if (rep.getName().equalsIgnoreCase(
+ getItem(i).getRepresentation().getName())) {
+ selected = i;
+ break;
+ }
+ }
+ }
+ if (mSelectedPosition != selected) {
+ mSelectedPosition = selected;
+ this.notifyDataSetChanged();
+ }
+ }
+}