1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5 * in compliance with the License. You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the License
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11 * or implied. See the License for the specific language governing permissions and limitations under
12 * the License.
13 */
14
15package android.support.v17.leanback.widget.picker;
16
17/**
18 * Picker column class used by {@link Picker}, defines a contiguous value ranges and associated
19 * labels.  A PickerColumn has a minValue and maxValue to choose between.  The Picker column has
20 * a current value.
21 * The labels can be dynamically generated from value by {@link #setLabelFormat(String)} or
22 * a list of static labels set by {@link #setStaticLabels(CharSequence[])}.
23 */
24public class PickerColumn {
25
26    private int mCurrentValue;
27    private int mMinValue;
28    private int mMaxValue;
29    private CharSequence[] mStaticLabels;
30    private String mLabelFormat;
31
32    public PickerColumn() {
33    }
34
35    /**
36     * Set string format (see {@link String#format}) to display label for an
37     * integer value.  {@link #setStaticLabels(CharSequence[])} overrides the format.
38     *
39     * @param labelFormat String format to display label for value between minValue and maxValue.
40     */
41    public void setLabelFormat(String labelFormat) {
42        mLabelFormat = labelFormat;
43    }
44
45    /**
46     * Return string format (see {@link String#format}) to display label for
47     * value.
48     * @return String format to display label for value.
49     */
50    public String getLabelFormat() {
51        return mLabelFormat;
52    }
53
54    /**
55     * Set static labels for each value, minValue maps to labels[0], maxValue maps to
56     * labels[labels.length - 1].
57     * @param labels Static labels for each value between minValue and maxValue.
58     */
59    public void setStaticLabels(CharSequence[] labels) {
60        mStaticLabels = labels;
61    }
62
63    /**
64     * Returns static labels for each value, minValue maps to labels[0], maxValue maps to
65     * labels[labels.length - 1].  When null, {@link #getLabelFormat()} will be used.
66     */
67    public CharSequence[] getStaticLabels() {
68        return mStaticLabels;
69    }
70
71    /**
72     * Get a label for value. The label can be static ({@link #setStaticLabels(CharSequence[])}
73     * or dynamically generated (@link {@link #setLabelFormat(String)} when static labels is null.
74     *
75     * @param value Value between minValue and maxValue.
76     * @return Label for the value.
77     */
78    public CharSequence getLabelFor(int value) {
79        if (mStaticLabels == null) {
80            return String.format(mLabelFormat, value);
81        }
82        return mStaticLabels[value];
83    }
84
85    /**
86     * Returns current value of the Column.
87     * @return Current value of the Column.
88     */
89    public int getCurrentValue() {
90        return mCurrentValue;
91    }
92
93    /**
94     * Sets current value of the Column.
95     */
96    public void setCurrentValue(int value) {
97        mCurrentValue = value;
98    }
99
100    /**
101     * Get total items count between minValue and maxValue.
102     * @return Total items count between minValue and maxValue.
103     */
104    public int getCount() {
105        return mMaxValue - mMinValue + 1;
106    }
107
108    /**
109     * Returns minimal value of the Column.
110     * @return Minimal value of the Column.
111     */
112    public int getMinValue() {
113        return mMinValue;
114    }
115
116    /**
117     * Returns maximum value of the Column.
118     * @return Maximum value of the Column.
119     */
120    public int getMaxValue() {
121        return mMaxValue;
122    }
123
124    /**
125     * Sets minimal value of the Column.
126     * @param minValue New minimal value to set.
127     */
128    public void setMinValue(int minValue) {
129        mMinValue = minValue;
130    }
131
132    /**
133     * Sets maximum value of the Column.
134     * @param maxValue New maximum value to set.
135     */
136    public void setMaxValue(int maxValue) {
137        mMaxValue = maxValue;
138    }
139
140}
141