summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser/view
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/browser/view')
-rw-r--r--src/com/android/browser/view/BasePieView.java13
-rw-r--r--src/com/android/browser/view/PieListView.java1
-rw-r--r--src/com/android/browser/view/PieMenu.java6
-rw-r--r--src/com/android/browser/view/PieStackView.java104
4 files changed, 123 insertions, 1 deletions
diff --git a/src/com/android/browser/view/BasePieView.java b/src/com/android/browser/view/BasePieView.java
index 515545a..2120215 100644
--- a/src/com/android/browser/view/BasePieView.java
+++ b/src/com/android/browser/view/BasePieView.java
@@ -33,6 +33,8 @@ public abstract class BasePieView implements PieMenu.PieView {
private DataSetObserver mObserver;
protected ArrayList<View> mViews;
+ protected OnLayoutListener mListener;
+
protected int mCurrent;
protected int mChildWidth;
protected int mChildHeight;
@@ -44,6 +46,10 @@ public abstract class BasePieView implements PieMenu.PieView {
public BasePieView() {
}
+ public void setLayoutListener(OnLayoutListener l) {
+ mListener = l;
+ }
+
public void setAdapter(Adapter adapter) {
mAdapter = adapter;
if (adapter == null) {
@@ -103,7 +109,12 @@ public abstract class BasePieView implements PieMenu.PieView {
* needs to set top, left, width, height
*/
@Override
- public abstract void layout(int anchorX, int anchorY, boolean left);
+ public void layout(int anchorX, int anchorY, boolean left) {
+ if (mListener != null) {
+ mListener.onLayout(anchorX, anchorY, left);
+ }
+ }
+
@Override
public abstract void draw(Canvas canvas);
diff --git a/src/com/android/browser/view/PieListView.java b/src/com/android/browser/view/PieListView.java
index 5fee51d..8cd8a4e 100644
--- a/src/com/android/browser/view/PieListView.java
+++ b/src/com/android/browser/view/PieListView.java
@@ -40,6 +40,7 @@ public class PieListView extends BasePieView {
*/
@Override
public void layout(int anchorX, int anchorY, boolean left) {
+ super.layout(anchorX, anchorY, left);
buildViews();
mWidth = mChildWidth;
mHeight = mChildHeight * mAdapter.getCount();
diff --git a/src/com/android/browser/view/PieMenu.java b/src/com/android/browser/view/PieMenu.java
index 22ebd18..e494d19 100644
--- a/src/com/android/browser/view/PieMenu.java
+++ b/src/com/android/browser/view/PieMenu.java
@@ -51,6 +51,12 @@ public class PieMenu extends FrameLayout {
*/
public interface PieView {
+ public interface OnLayoutListener {
+ public void onLayout(int ax, int ay, boolean left);
+ }
+
+ public void setLayoutListener(OnLayoutListener l);
+
public void layout(int anchorX, int anchorY, boolean onleft);
public void draw(Canvas c);
diff --git a/src/com/android/browser/view/PieStackView.java b/src/com/android/browser/view/PieStackView.java
new file mode 100644
index 0000000..df387ad
--- /dev/null
+++ b/src/com/android/browser/view/PieStackView.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2011 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.browser.view;
+
+import com.android.browser.R;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.view.View;
+
+/**
+ * shows views in a stack
+ */
+public class PieStackView extends BasePieView {
+
+ private static final int SLOP = 5;
+
+ private OnCurrentListener mCurrentListener;
+ private int mMinHeight;
+
+ public interface OnCurrentListener {
+ public void onSetCurrent(int index);
+ }
+
+ public PieStackView(Context ctx) {
+ mMinHeight = (int) ctx.getResources()
+ .getDimension(R.dimen.qc_tab_title_height);
+ }
+
+ public void setOnCurrentListener(OnCurrentListener l) {
+ mCurrentListener = l;
+ }
+
+ @Override
+ public void setCurrent(int ix) {
+ super.setCurrent(ix);
+ if (mCurrentListener != null) {
+ mCurrentListener.onSetCurrent(ix);
+ buildViews();
+ layoutChildrenLinear();
+ }
+ }
+
+ /**
+ * this will be called before the first draw call
+ */
+ @Override
+ public void layout(int anchorX, int anchorY, boolean left) {
+ super.layout(anchorX, anchorY, left);
+ buildViews();
+ mWidth = mChildWidth;
+ mHeight = mChildHeight + (mViews.size() - 1) * mMinHeight;
+ mLeft = anchorX + (left ? SLOP : -(SLOP + mChildWidth));
+ mTop = anchorY - mHeight / 2;
+ if (mViews != null) {
+ layoutChildrenLinear();
+ }
+ }
+
+ private void layoutChildrenLinear() {
+ final int n = mViews.size();
+ int top = mTop;
+ int dy = (n == 1) ? 0 : (mHeight - mChildHeight) / (n - 1);
+ for (View view : mViews) {
+ view.layout(mLeft, top, mLeft + mChildWidth, top + mChildHeight);
+ top += dy;
+ }
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ if (mViews != null) {
+ final int n = mViews.size();
+ for (int i = 0; i < mCurrent; i++) {
+ drawView(mViews.get(i), canvas);
+ }
+ for (int i = n - 1; i > mCurrent; i--) {
+ drawView(mViews.get(i), canvas);
+ }
+ drawView(mViews.get(mCurrent), canvas);
+ }
+ }
+
+ @Override
+ protected int findChildAt(int y) {
+ final int ix = (y - mTop) * mViews.size() / mHeight;
+ return ix;
+ }
+
+}