summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/history/HistoryManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow/history/HistoryManager.java')
-rw-r--r--src/com/android/gallery3d/filtershow/history/HistoryManager.java172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/history/HistoryManager.java b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
new file mode 100644
index 000000000..755e2ea58
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/history/HistoryManager.java
@@ -0,0 +1,172 @@
+/*
+ * 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.history;
+
+import android.graphics.drawable.Drawable;
+import android.view.MenuItem;
+
+import java.util.Vector;
+
+public class HistoryManager {
+ private static final String LOGTAG = "HistoryManager";
+
+ private Vector<HistoryItem> mHistoryItems = new Vector<HistoryItem>();
+ private int mCurrentPresetPosition = 0;
+ private MenuItem mUndoMenuItem = null;
+ private MenuItem mRedoMenuItem = null;
+ private MenuItem mResetMenuItem = null;
+
+ public void setMenuItems(MenuItem undoItem, MenuItem redoItem, MenuItem resetItem) {
+ mUndoMenuItem = undoItem;
+ mRedoMenuItem = redoItem;
+ mResetMenuItem = resetItem;
+ updateMenuItems();
+ }
+
+ private int getCount() {
+ return mHistoryItems.size();
+ }
+
+ public HistoryItem getItem(int position) {
+ return mHistoryItems.elementAt(position);
+ }
+
+ private void clear() {
+ mHistoryItems.clear();
+ }
+
+ private void add(HistoryItem item) {
+ mHistoryItems.add(item);
+ }
+
+ private void notifyDataSetChanged() {
+ // TODO
+ }
+
+ public boolean canReset() {
+ if (getCount() <= 1) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean canUndo() {
+ if (mCurrentPresetPosition == getCount() - 1) {
+ return false;
+ }
+ return true;
+ }
+
+ public boolean canRedo() {
+ if (mCurrentPresetPosition == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ public void updateMenuItems() {
+ if (mUndoMenuItem != null) {
+ setEnabled(mUndoMenuItem, canUndo());
+ }
+ if (mRedoMenuItem != null) {
+ setEnabled(mRedoMenuItem, canRedo());
+ }
+ if (mResetMenuItem != null) {
+ setEnabled(mResetMenuItem, canReset());
+ }
+ }
+
+ private void setEnabled(MenuItem item, boolean enabled) {
+ item.setEnabled(enabled);
+ Drawable drawable = item.getIcon();
+ if (drawable != null) {
+ drawable.setAlpha(enabled ? 255 : 80);
+ }
+ }
+
+ public void setCurrentPreset(int n) {
+ mCurrentPresetPosition = n;
+ updateMenuItems();
+ notifyDataSetChanged();
+ }
+
+ public void reset() {
+ if (getCount() == 0) {
+ return;
+ }
+ HistoryItem first = getItem(getCount() - 1);
+ clear();
+ addHistoryItem(first);
+ updateMenuItems();
+ }
+
+ public HistoryItem getLast() {
+ if (getCount() == 0) {
+ return null;
+ }
+ return getItem(0);
+ }
+
+ public HistoryItem getCurrent() {
+ return getItem(mCurrentPresetPosition);
+ }
+
+ public void addHistoryItem(HistoryItem preset) {
+ insert(preset, 0);
+ updateMenuItems();
+ }
+
+ private void insert(HistoryItem preset, int position) {
+ if (mCurrentPresetPosition != 0) {
+ // in this case, let's discount the presets before the current one
+ Vector<HistoryItem> oldItems = new Vector<HistoryItem>();
+ for (int i = mCurrentPresetPosition; i < getCount(); i++) {
+ oldItems.add(getItem(i));
+ }
+ clear();
+ for (int i = 0; i < oldItems.size(); i++) {
+ add(oldItems.elementAt(i));
+ }
+ mCurrentPresetPosition = position;
+ notifyDataSetChanged();
+ }
+ mHistoryItems.insertElementAt(preset, position);
+ mCurrentPresetPosition = position;
+ notifyDataSetChanged();
+ }
+
+ public int redo() {
+ mCurrentPresetPosition--;
+ if (mCurrentPresetPosition < 0) {
+ mCurrentPresetPosition = 0;
+ }
+ notifyDataSetChanged();
+ updateMenuItems();
+ return mCurrentPresetPosition;
+ }
+
+ public int undo() {
+ mCurrentPresetPosition++;
+ if (mCurrentPresetPosition >= getCount()) {
+ mCurrentPresetPosition = getCount() - 1;
+ }
+ notifyDataSetChanged();
+ updateMenuItems();
+ return mCurrentPresetPosition;
+ }
+
+}