2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.ComponentModel;
23 /// Enumeration for the selection mode of Toolbar.
25 public enum ToolbarSelectionMode
28 /// Default select mode.
33 /// Always select mode.
43 /// No select mode with no finger size rule.
49 /// Enumeration that sets the toolbar items display behavior, it can be scrollable, can show a menu with exceeding items, or simply hide them.
51 public enum ToolbarShrinkMode
54 /// Sets minimum toolbar size to fit all the items.
59 /// Hides exceeding items.
64 /// Allows accessing exceeding items through a scroller.
69 /// Inserts a button to pop up a menu with exceeding items.
74 /// Expands all items according to the size of the toolbar.
80 /// Enumeration for the icon lookup order of Toolbar.
82 public enum ToolbarIconLookupOrder
85 /// Icon look up order: freedesktop, theme.
90 /// Icon look up order: theme, freedesktop.
95 /// Icon look up order: freedesktop.
100 /// Icon look up order: theme.
106 /// Event arguments for events of <see cref="ToolbarItem"/>.
109 /// Inherits EventArgs.
111 public class ToolbarItemEventArgs : EventArgs
114 /// Gets the ToolbarItem.
116 public ToolbarItem Item { get; private set; }
118 internal static ToolbarItemEventArgs CreateFromSmartEvent(IntPtr data, IntPtr obj, IntPtr info)
120 ToolbarItem item = ItemObject.GetItemByHandle(info) as ToolbarItem;
121 return new ToolbarItemEventArgs() { Item = item };
126 /// The Toolbar is a widget that displays a list of items inside a box.
128 public class Toolbar : Widget
130 SmartEvent<ToolbarItemEventArgs> _clicked;
131 SmartEvent<ToolbarItemEventArgs> _selected;
132 SmartEvent<ToolbarItemEventArgs> _longpressed;
135 /// Creates and initializes a new instance of the Toolbar class.
137 /// <param name="parent">
138 /// A EvasObject to which the new Table instance will be attached.
140 public Toolbar(EvasObject parent) : base(parent)
142 _selected = new SmartEvent<ToolbarItemEventArgs>(this, this.RealHandle, "selected", ToolbarItemEventArgs.CreateFromSmartEvent);
143 _selected.On += (s, e) =>
147 Selected?.Invoke(this, e);
148 e.Item.SendSelected();
151 _longpressed = new SmartEvent<ToolbarItemEventArgs>(this, this.RealHandle, "longpressed", ToolbarItemEventArgs.CreateFromSmartEvent);
152 _longpressed.On += (s, e) =>
154 e.Item?.SendLongPressed();
156 _clicked = new SmartEvent<ToolbarItemEventArgs>(this, this.RealHandle, "clicked", ToolbarItemEventArgs.CreateFromSmartEvent);
157 _clicked.On += (s, e) =>
159 e.Item?.SendClicked();
164 /// Selected will be triggered when toolbar have been selected.
166 public event EventHandler<ToolbarItemEventArgs> Selected;
169 /// Sets or gets whether the layout of this toolbar is homogeneous.
171 /// <remarks>True for homogeneous, False for no homogeneous</remarks>
172 public bool Homogeneous
176 return Interop.Elementary.elm_toolbar_homogeneous_get(RealHandle);
180 Interop.Elementary.elm_toolbar_homogeneous_set(RealHandle, value);
185 /// Sets or gets the slection mode of a given Toolbar widget.
187 public ToolbarSelectionMode SelectionMode
191 return (ToolbarSelectionMode)Interop.Elementary.elm_toolbar_select_mode_get(RealHandle);
195 Interop.Elementary.elm_toolbar_select_mode_set(RealHandle, (int)value);
200 /// Sets or gets the shrink mode of a given Toolbar widget.
202 public ToolbarShrinkMode ShrinkMode
206 return (ToolbarShrinkMode)Interop.Elementary.elm_toolbar_shrink_mode_get(RealHandle);
210 Interop.Elementary.elm_toolbar_shrink_mode_set(RealHandle, (int)value);
215 /// Sets or gets the orientation of a given toolbar widget.
216 /// By default, a toolbar will be horizontal. Use this function to create a vertical toolbar.
218 //TODO: Below browsable limitation will be removed when the EFL-929 issue is resolved.
219 [EditorBrowsable(EditorBrowsableState.Never)]
220 public bool IsHorizontal
224 return Interop.Elementary.elm_toolbar_horizontal_get(RealHandle);
228 Interop.Elementary.elm_toolbar_horizontal_set(RealHandle, value);
233 /// Sets or gets the icon lookup order, for toolbar items' icons.
234 /// The default lookup order is ToolbarIocnLookupOrder.ThemeFreedesktop.
235 /// Icons added before calling this function will not be affected.
237 public ToolbarIconLookupOrder IconLookupOrder
241 return (ToolbarIconLookupOrder)Interop.Elementary.elm_toolbar_icon_order_lookup_get(RealHandle);
245 Interop.Elementary.elm_toolbar_icon_order_lookup_set(RealHandle, (int)value);
250 /// Sets or gets the icon size of a given toolbar widget.
251 /// Default value is 32 pixels, to be used by toolbar items.
257 return Interop.Elementary.elm_toolbar_icon_size_get(RealHandle);
261 Interop.Elementary.elm_toolbar_icon_size_set(RealHandle, value);
266 /// Gets the number of items in a toolbar widget.
268 public int ItemsCount
272 return Interop.Elementary.elm_toolbar_items_count(RealHandle);
277 /// Sets or gets the alignment of the items.
279 /// <remarks>The toolbar items alignment, a float between 0.0 and 1.0</remarks>
280 public double ItemAlignment
284 return Interop.Elementary.elm_toolbar_align_get(RealHandle);
288 Interop.Elementary.elm_toolbar_align_set(RealHandle, value);
293 /// Sets or gets the item's transverse expansion of a given toolbar widget.
296 /// The transverse expansion of the item, true for on and false for off.
297 /// By default it's false.
299 public bool TransverseExpansion
303 return Interop.Elementary.elm_toolbar_transverse_expanded_get(RealHandle);
307 Interop.Elementary.elm_toolbar_transverse_expanded_set(RealHandle, value);
312 /// Appends ToolbarItem which just contains label to the toolbar.
314 /// <param name="label">The label of the item</param>
315 /// <returns>The new ToolbarItem which appended to the toolbar</returns>
316 /// <seealso cref="Append(string, string)"/>
317 /// <seealso cref="Prepend(string)"/>
318 public ToolbarItem Append(string label)
320 return Append(label, null);
324 /// Appends ToolbarItem which contains label and icon to the toolbar.
326 /// <param name="label">The label of the item</param>
327 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
328 /// <returns>The new ToolbarItem which appended to the toolbar</returns>
329 /// <seealso cref="Append(string)"/>
330 /// <seealso cref="Prepend(string)"/>
331 /// <seealso cref="Prepend(string, string)"/>
332 public ToolbarItem Append(string label, string icon)
334 ToolbarItem item = new ToolbarItem(label, icon);
335 item.Handle = Interop.Elementary.elm_toolbar_item_append(RealHandle, icon, label, null, (IntPtr)item.Id);
340 /// Prepends ToolbarItem which just contains label to the toolbar.
342 /// <param name="label">The label of the item</param>
343 /// <returns>The new ToolbarItem which prepended to the toolbar</returns>
344 /// <seealso cref="Append(string)"/>
345 /// <seealso cref="Append(string, string)"/>
346 /// <seealso cref="Prepend(string, string)"/>
347 public ToolbarItem Prepend(string label)
349 return Prepend(label, null);
353 /// Prepends ToolbarItem which contains label and icon to the toolbar.
355 /// <param name="label">The label of the item</param>
356 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
357 /// <returns>The new <see cref="ToolbarItem"/> which prepended to the toolbar</returns>
358 /// <seealso cref="Append(string)"/>
359 /// <seealso cref="Append(string, string)"/>
360 /// <seealso cref="Prepend(string)"/>
361 public ToolbarItem Prepend(string label, string icon)
363 ToolbarItem item = new ToolbarItem(label, icon);
364 item.Handle = Interop.Elementary.elm_toolbar_item_prepend(RealHandle, icon, label, null, (IntPtr)item.Id);
369 /// Inserts a new item which just contains label into the toolbar object before item <paramref name="before"/>.
371 /// <param name="before">The toolbar item to insert before</param>
372 /// <param name="label">The label of the item</param>
373 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
374 /// <seealso cref="InsertBefore(ToolbarItem, string, string)"/>
375 public ToolbarItem InsertBefore(ToolbarItem before, string label)
377 return InsertBefore(before, label);
381 /// Inserts a new item which contains label and icon into the toolbar object before item <paramref name="before"/>.
383 /// <param name="before">The toolbar item to insert before</param>
384 /// <param name="label">The label of the item</param>
385 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
386 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
387 /// <seealso cref="InsertBefore(ToolbarItem, string)"/>
388 public ToolbarItem InsertBefore(ToolbarItem before, string label, string icon)
390 ToolbarItem item = new ToolbarItem(label, icon);
391 item.Handle = Interop.Elementary.elm_toolbar_item_insert_before(RealHandle, before, icon, label, null, (IntPtr)item.Id);
396 /// Inserts a new item which contains label and icon into the toolbar object after item <paramref name="after"/>.
398 /// <param name="after">The toolbar item to insert after</param>
399 /// <param name="label">The label of the item</param>
400 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
401 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
402 /// <seealso cref="InsertAfter(ToolbarItem, string)"/>
403 public ToolbarItem InsertAfter(ToolbarItem after, string label, string icon)
405 ToolbarItem item = new ToolbarItem(label, icon);
406 item.Handle = Interop.Elementary.elm_toolbar_item_insert_after(RealHandle, after, icon, label, null, (IntPtr)item.Id);
411 /// Find the item with that label in the toolbar.
413 /// <param name="label">The label of the item</param>
414 /// <returns>The <see cref="ToolbarItem"/> into the toolbar</returns>
415 public ToolbarItem FindItemByLabel(string label)
417 IntPtr handle = Interop.Elementary.elm_toolbar_item_find_by_label(RealHandle, label);
418 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
422 /// Gets the selected ToolbarItemItem of the toolbar.
424 public ToolbarItem SelectedItem
428 IntPtr handle = Interop.Elementary.elm_toolbar_selected_item_get(RealHandle);
429 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
434 /// Gets the first ToolbarItemItem of the toolbar.
436 public ToolbarItem FirstItem
440 IntPtr handle = Interop.Elementary.elm_toolbar_first_item_get(RealHandle);
441 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
446 /// Gets the last ToolbarItemItem of the toolbar.
448 public ToolbarItem LastItem
452 IntPtr handle = Interop.Elementary.elm_toolbar_last_item_get(RealHandle);
453 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
457 protected override IntPtr CreateHandle(EvasObject parent)
459 IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
460 Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
462 RealHandle = Interop.Elementary.elm_toolbar_add(handle);
463 Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);