summaryrefslogtreecommitdiff
path: root/ElmSharp/ElmSharp/FlipSelector.cs
blob: bffb71361ce432664c18be2037dfefc898e02b9c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * 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.
 */

using System;
using System.Collections.Generic;

namespace ElmSharp
{
    /// <summary>
    /// A flip selector is a widget to show a set of text items,one at a time.with the same sheet switching style as the clock widget, when one changes the current displaying sheet.
    /// </summary>
    public class FlipSelector : Layout
    {
        SmartEvent _selected;
        SmartEvent _overflowed;
        SmartEvent _underflowed;

        /// <summary>
        /// Creates and initializes a new instance of the FlipSelector.
        /// </summary>
        /// <param name="parent">Parent EvasObject </param>
        public FlipSelector(EvasObject parent) : base(parent)
        {
            _selected = new SmartEvent(this, Handle, "selected");
            _overflowed = new SmartEvent(this, Handle, "overflowed");
            _underflowed = new SmartEvent(this, Handle, "underflowed");

            _selected.On += SelectedChanged;
            _overflowed.On += OverflowedChanged;
            _underflowed.On += UnderflowedChanged;
        }

        /// <summary>
        /// Selected will be triggered when be Selected
        /// </summary>
        public event EventHandler Selected;
        /// <summary>
        /// Overflowed will be triggered when Overflowed
        /// </summary>
        public event EventHandler Overflowed;
        /// <summary>
        /// Underflowed will be triggered when be Underflowed
        /// </summary>
        public event EventHandler Underflowed;

        /// <summary>
        ///  Sets or gets the interval on time updates for an user mouse button hold on a flip selector widget.
        /// </summary>
        public double Interval
        {
            get
            {
                return Interop.Elementary.elm_flipselector_first_interval_get(Handle);
            }
            set
            {
                Interop.Elementary.elm_flipselector_first_interval_set(Handle, value);
            }
        }


        /// <summary>
        /// Gets the currently selected item in a flip selector widget.
        /// </summary>
        public FlipSelectorItem SelectedItem
        {
            get
            {
                IntPtr handle = Interop.Elementary.elm_flipselector_selected_item_get(Handle);
                return ItemObject.GetItemByHandle(handle) as FlipSelectorItem;
            }
        }

        /// <summary>
        /// Gets the first item in the given flip selector widget's list of items.
        /// </summary>
        public FlipSelectorItem FirstItem
        {
            get
            {
                IntPtr handle = Interop.Elementary.elm_flipselector_first_item_get(Handle);
                return ItemObject.GetItemByHandle(handle) as FlipSelectorItem;
            }
        }

        /// <summary>
        /// Gets the last item in the given flip selector widget's list of items.
        /// </summary>
        public FlipSelectorItem LastItem
        {
            get
            {
                IntPtr handle = Interop.Elementary.elm_flipselector_last_item_get(Handle);
                return ItemObject.GetItemByHandle(handle) as FlipSelectorItem;
            }
        }

        /// <summary>
        /// Appends a (text) item to a flip selector widget.
        /// </summary>
        /// <param name="text">text value</param>
        /// <returns>
        /// A handle to the item added or NULL, on errors
        /// </returns>
        /// <remarks>
        /// The widget's list of labels to show will be appended with the given value. If the user wishes so, a callback function pointer can be passed, which will get called when this same item is selected.
        /// </remarks>
        public FlipSelectorItem Append(string text)
        {
            FlipSelectorItem item = new FlipSelectorItem(text);
            item.Handle = Interop.Elementary.elm_flipselector_item_append(Handle, text, null, (IntPtr)item.Id);
            return item;
        }

        /// <summary>
        /// Prepend a (text) item to a flip selector widget.
        /// </summary>
        /// <param name="text">Prepend text</param>
        /// <returns>A handle to the item added or NULL, on errors</returns>
        /// <remarks>
        /// The widget's list of labels to show will be prepended with the given value. If the user wishes so, a callback function pointer can be passed, which will get called when this same item is selected.
        /// </remarks>
        public FlipSelectorItem Prepend(string text)
        {
            FlipSelectorItem item = new FlipSelectorItem(text);
            item.Handle = Interop.Elementary.elm_flipselector_item_prepend(Handle, text, null, (IntPtr)item.Id);
            return item;
        }

        /// <summary>
        /// To remove the given item.
        /// </summary>
        /// <param name="item">FlipSelector's item</param>
        public void Remove(FlipSelectorItem item)
        {
            if (item as FlipSelectorItem != null)
                item.Delete();
        }

        /// <summary>
        /// Programmatically select the next item of a flip selector widget.
        /// </summary>
        /// <remarks>
        /// The selection will be animated. Also, if it reaches the beginning of its list of member items, it will continue with the last one backwards.
        /// </remarks>
        public void Next()
        {
            Interop.Elementary.elm_flipselector_flip_next(Handle);
        }

        /// <summary>
        /// Programmatically select the previous item of a flip selector widget.
        /// </summary>
        public void Prev()
        {
            Interop.Elementary.elm_flipselector_flip_prev(Handle);
        }

        protected override IntPtr CreateHandle(EvasObject parent)
        {
            return Interop.Elementary.elm_flipselector_add(parent.Handle);
        }

        void SelectedChanged(object sender, EventArgs e)
        {
            SelectedItem?.SendSelected();
            Selected?.Invoke(this, EventArgs.Empty);
        }

        void OverflowedChanged(object sender, EventArgs e)
        {
            Overflowed?.Invoke(this, e);
        }

        void UnderflowedChanged(object sender, EventArgs e)
        {
            Underflowed?.Invoke(this, e);
        }
    }
}