/* * 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; namespace ElmSharp { /// /// The Button is a widget works as a clickable input element to trigger events. /// public class Button : Layout { private SmartEvent _clicked; private SmartEvent _repeated; private SmartEvent _pressed; private SmartEvent _released; /// /// Creates and initializes a new instance of the Button class. /// /// /// The EvasObject to which the new Button will be attached as a child. /// public Button(EvasObject parent) : base(parent) { _clicked = new SmartEvent(this, this.RealHandle, "clicked"); _repeated = new SmartEvent(this, this.RealHandle, "repeated"); _pressed = new SmartEvent(this, this.RealHandle, "pressed"); _released = new SmartEvent(this, this.RealHandle, "unpressed"); _clicked.On += (sender, e) => { Clicked?.Invoke(this, EventArgs.Empty); }; _repeated.On += (sender, e) => { Repeated?.Invoke(this, EventArgs.Empty); }; _pressed.On += (sender, e) => { Pressed?.Invoke(this, EventArgs.Empty); }; _released.On += (sender, e) => { Released?.Invoke(this, EventArgs.Empty); }; } /// /// Clicked will be triggered when Button is clicked. /// public event EventHandler Clicked; /// /// Repeated will be triggered when Button is pressed without releasing it. /// public event EventHandler Repeated; /// /// Pressed will be triggered when the Button is pressed. /// public event EventHandler Pressed; /// /// Released will be triggered when the Button is released after being pressed. /// public event EventHandler Released; /// /// Sets or gets the autorepeat feature of a given Button. /// /// /// Autorepeat feature means autorepeat event generated when the button is kept pressed. /// When set AutoRepeat to false, no autorepeat is performed and buttons will trigger Clicked event when they are clicked. /// When set to true, keeping a button pressed continuously trigger Repeated event until the button is released. /// The time it takes until it starts triggering Repeated is given by AutoRepeatInitialTime, /// and the time between each new emission is given by AutoRepeatGapTimeout. /// public bool AutoRepeat { get { return !Interop.Elementary.elm_button_autorepeat_get(RealHandle); } set { Interop.Elementary.elm_button_autorepeat_set(RealHandle, value); } } /// /// Sets or gets the initial timeout before the Repeat event is generated. /// public double AutoRepeatInitialTime { get { return Interop.Elementary.elm_button_autorepeat_initial_timeout_get(RealHandle); } set { Interop.Elementary.elm_button_autorepeat_initial_timeout_set(RealHandle, value); } } /// /// Sets or gets the interval between each generated Repeat event. /// public double AutoRepeatGapTimeout { get { return Interop.Elementary.elm_button_autorepeat_gap_timeout_get(RealHandle); } set { Interop.Elementary.elm_button_autorepeat_gap_timeout_set(RealHandle, value); } } [Obsolete("DeleteColorClass is obsolete, please use EdjeObject.DeleteColorClass(string)")] public void DeleteColorClass(string part) { Interop.Elementary.edje_object_color_class_del(Handle, part); } /// /// Sets or gets the BackgroundColor of a given Button in normal and pressed status. /// public override Color BackgroundColor { set { if (value.IsDefault) { EdjeObject.DeleteColorClass("button/bg"); EdjeObject.DeleteColorClass("button/bg_pressed"); EdjeObject.DeleteColorClass("button/bg_disabled"); } else { SetPartColor("bg", value); SetPartColor("bg_pressed", value); SetPartColor("bg_disabled", value); } _backgroundColor = value; } } protected override IntPtr CreateHandle(EvasObject parent) { IntPtr handle = Interop.Elementary.elm_layout_add(parent.Handle); Interop.Elementary.elm_layout_theme_set(handle, "layout", "elm_widget", "default"); RealHandle = Interop.Elementary.elm_button_add(handle); Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle); return handle; } } }