/* * 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 ProgressBar is a widget for visually representing the progress status of a given job/task. /// public class ProgressBar : Layout { SmartEvent _changed; /// /// Creates and initializes a new instance of the ProgressBar class. /// /// The EvasObject to which the new ProgressBar will be attached as a child. public ProgressBar(EvasObject parent) : base(parent) { _changed = new SmartEvent(this, this.RealHandle, "changed"); _changed.On += (s, e) => { ValueChanged?.Invoke(this, EventArgs.Empty); }; } /// /// ValueChanged will be triggered when value of ProgressBar change. /// public event EventHandler ValueChanged; /// /// Sets or gets the value wheather a given ProgressBar widget is at the "pulsing mode". /// /// /// By default, progress bars display values from low to high value boundaries. /// There are, though, contexts in which the progress of a given task is unknown. /// For such cases, one can set a progress bar widget to a "pulsing state", /// to give the user an idea that some computation is being held, /// but without exact progress values. In the default theme, /// it animates its bar with the contents filling in constantly and back to non-filled, in a loop. /// public bool IsPulseMode { get { return Interop.Elementary.elm_progressbar_pulse_get(RealHandle); } set { Interop.Elementary.elm_progressbar_pulse_set(RealHandle, value); } } /// /// Sets or gets the value of ProgressBar. /// /// /// Use this property to set the progress bar levels. /// If you pass a value out of the specified range(0.0~1.0), /// it is interpreted as the closest of the boundary values in the range. /// public double Value { get { return Interop.Elementary.elm_progressbar_value_get(RealHandle); } set { Interop.Elementary.elm_progressbar_value_set(RealHandle, value); } } /// /// Sets or gets the span value of ProgressBar. /// public int SpanSize { get { return Interop.Elementary.elm_progressbar_span_size_get(RealHandle); } set { Interop.Elementary.elm_progressbar_span_size_set(RealHandle, value); } } /// /// Sets or gets the value wheather a given ProgressBar widget is horizontal. /// public bool IsHorizontal { get { return Interop.Elementary.elm_progressbar_horizontal_get(RealHandle); } set { Interop.Elementary.elm_progressbar_horizontal_set(RealHandle, value); } } /// /// Sets or gets the value whether a given progress bar widget's displaying values are inverted. /// public bool IsInverted { get { return Interop.Elementary.elm_progressbar_inverted_get(RealHandle); } set { Interop.Elementary.elm_progressbar_inverted_set(RealHandle, value); } } /// /// Sets or gets format string for a given progress bar widget's units label. /// /// /// If NULL is passed on format, it makes obj units area to be hidden completely. /// If not, it sets the format string for the units label's text. /// The units label is provided with a floating point value, so the units text displays at most one floating point value. /// Note that the units label is optional. Use a format string such as "%1.2f meters" for example. /// The default format string for a progress bar is an integer percentage, as in "%.0f %%". /// public string UnitFormat { get { return Interop.Elementary.elm_progressbar_unit_format_get(RealHandle); } set { Interop.Elementary.elm_progressbar_unit_format_set(RealHandle, value); } } /// /// Starts a given progress bar "pulsing" animation, if its under that mode. /// public void PlayPulse() { Interop.Elementary.elm_progressbar_pulse(RealHandle, true); } [Obsolete("use StopPulse instead")] public void StopPluse() { Interop.Elementary.elm_progressbar_pulse(RealHandle, false); } /// /// Stops a given progress bar "pulsing" animation, if its under that mode. /// public void StopPulse() { Interop.Elementary.elm_progressbar_pulse(RealHandle, false); } /// /// Gets the part value of the given part of the Progressbar. /// /// Part of the Progressbar. /// Returns value range is from 0.0 to 1.0. public double GetPartValue(string part) { return Interop.Elementary.elm_progressbar_part_value_get(RealHandle, part); } /// /// Sets the part value of the give part of the Progressbar. /// /// Part of the Progressbar. /// Value range is from 0.0 to 1.0. public void SetPartValue(string part, double value) { Interop.Elementary.elm_progressbar_part_value_set(RealHandle, part, 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_progressbar_add(handle); Interop.Elementary.elm_object_part_content_set(handle, "elm.swallow.content", RealHandle); return handle; } } }