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);
214 [EditorBrowsable(EditorBrowsableState.Never)]
215 public bool IsHorizontal
219 return Interop.Elementary.elm_toolbar_horizontal_get(RealHandle);
223 Interop.Elementary.elm_toolbar_horizontal_set(RealHandle, value);
228 /// Sets or gets the icon lookup order, for toolbar items' icons.
229 /// The default lookup order is ToolbarIocnLookupOrder.ThemeFreedesktop.
230 /// Icons added before calling this function will not be affected.
232 public ToolbarIconLookupOrder IconLookupOrder
236 return (ToolbarIconLookupOrder)Interop.Elementary.elm_toolbar_icon_order_lookup_get(RealHandle);
240 Interop.Elementary.elm_toolbar_icon_order_lookup_set(RealHandle, (int)value);
245 /// Sets or gets the icon size of a given toolbar widget.
246 /// Default value is 32 pixels, to be used by toolbar items.
252 return Interop.Elementary.elm_toolbar_icon_size_get(RealHandle);
256 Interop.Elementary.elm_toolbar_icon_size_set(RealHandle, value);
261 /// Gets the number of items in a toolbar widget.
263 public int ItemsCount
267 return Interop.Elementary.elm_toolbar_items_count(RealHandle);
272 /// Sets or gets the alignment of the items.
274 /// <remarks>The toolbar items alignment, a float between 0.0 and 1.0</remarks>
275 public double ItemAlignment
279 return Interop.Elementary.elm_toolbar_align_get(RealHandle);
283 Interop.Elementary.elm_toolbar_align_set(RealHandle, value);
288 /// Sets or gets the item's transverse expansion of a given toolbar widget.
291 /// The transverse expansion of the item, true for on and false for off.
292 /// By default it's false.
294 public bool TransverseExpansion
298 return Interop.Elementary.elm_toolbar_transverse_expanded_get(RealHandle);
302 Interop.Elementary.elm_toolbar_transverse_expanded_set(RealHandle, value);
307 /// Appends ToolbarItem which just contains label to the toolbar.
309 /// <param name="label">The label of the item</param>
310 /// <returns>The new ToolbarItem which appended to the toolbar</returns>
311 /// <seealso cref="Append(string, string)"/>
312 /// <seealso cref="Prepend(string)"/>
313 public ToolbarItem Append(string label)
315 return Append(label, null);
319 /// Appends ToolbarItem which contains label and icon to the toolbar.
321 /// <param name="label">The label of the item</param>
322 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
323 /// <returns>The new ToolbarItem which appended to the toolbar</returns>
324 /// <seealso cref="Append(string)"/>
325 /// <seealso cref="Prepend(string)"/>
326 /// <seealso cref="Prepend(string, string)"/>
327 public ToolbarItem Append(string label, string icon)
329 ToolbarItem item = new ToolbarItem(label, icon);
330 item.Handle = Interop.Elementary.elm_toolbar_item_append(RealHandle, icon, label, null, (IntPtr)item.Id);
335 /// Prepends ToolbarItem which just contains label to the toolbar.
337 /// <param name="label">The label of the item</param>
338 /// <returns>The new ToolbarItem which prepended to the toolbar</returns>
339 /// <seealso cref="Append(string)"/>
340 /// <seealso cref="Append(string, string)"/>
341 /// <seealso cref="Prepend(string, string)"/>
342 public ToolbarItem Prepend(string label)
344 return Prepend(label, null);
348 /// Prepends ToolbarItem which contains label and icon to the toolbar.
350 /// <param name="label">The label of the item</param>
351 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
352 /// <returns>The new <see cref="ToolbarItem"/> which prepended to the toolbar</returns>
353 /// <seealso cref="Append(string)"/>
354 /// <seealso cref="Append(string, string)"/>
355 /// <seealso cref="Prepend(string)"/>
356 public ToolbarItem Prepend(string label, string icon)
358 ToolbarItem item = new ToolbarItem(label, icon);
359 item.Handle = Interop.Elementary.elm_toolbar_item_prepend(RealHandle, icon, label, null, (IntPtr)item.Id);
364 /// Inserts a new item which just contains label into the toolbar object before item <paramref name="before"/>.
366 /// <param name="before">The toolbar item to insert before</param>
367 /// <param name="label">The label of the item</param>
368 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
369 /// <seealso cref="InsertBefore(ToolbarItem, string, string)"/>
370 public ToolbarItem InsertBefore(ToolbarItem before, string label)
372 return InsertBefore(before, label, string.Empty);
376 /// Inserts a new item which contains label and icon into the toolbar object before item <paramref name="before"/>.
378 /// <param name="before">The toolbar item to insert before</param>
379 /// <param name="label">The label of the item</param>
380 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
381 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
382 /// <seealso cref="InsertBefore(ToolbarItem, string)"/>
383 public ToolbarItem InsertBefore(ToolbarItem before, string label, string icon)
385 ToolbarItem item = new ToolbarItem(label, icon);
386 item.Handle = Interop.Elementary.elm_toolbar_item_insert_before(RealHandle, before, icon, label, null, (IntPtr)item.Id);
391 /// Inserts a new item which contains label and icon into the toolbar object after item <paramref name="after"/>.
393 /// <param name="after">The toolbar item to insert after</param>
394 /// <param name="label">The label of the item</param>
395 /// <param name="icon">A string with the icon name or the absolute path of an image file</param>
396 /// <returns>The new <see cref="ToolbarItem"/> which insert into the toolbar</returns>
397 public ToolbarItem InsertAfter(ToolbarItem after, string label, string icon)
399 ToolbarItem item = new ToolbarItem(label, icon);
400 item.Handle = Interop.Elementary.elm_toolbar_item_insert_after(RealHandle, after, icon, label, null, (IntPtr)item.Id);
405 /// Find the item with that label in the toolbar.
407 /// <param name="label">The label of the item</param>
408 /// <returns>The <see cref="ToolbarItem"/> into the toolbar</returns>
409 public ToolbarItem FindItemByLabel(string label)
411 IntPtr handle = Interop.Elementary.elm_toolbar_item_find_by_label(RealHandle, label);
412 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
416 /// Gets the selected ToolbarItemItem of the toolbar.
418 public ToolbarItem SelectedItem
422 IntPtr handle = Interop.Elementary.elm_toolbar_selected_item_get(RealHandle);
423 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
428 /// Gets the first ToolbarItemItem of the toolbar.
430 public ToolbarItem FirstItem
434 IntPtr handle = Interop.Elementary.elm_toolbar_first_item_get(RealHandle);
435 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
440 /// Gets the last ToolbarItemItem of the toolbar.
442 public ToolbarItem LastItem
446 IntPtr handle = Interop.Elementary.elm_toolbar_last_item_get(RealHandle);
447 return ItemObject.GetItemByHandle(handle) as ToolbarItem;
451 protected override IntPtr CreateHandle(EvasObject parent)
453 IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle);
454 Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default");
456 RealHandle = Interop.Elementary.elm_toolbar_add(handle);
457 Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle);