/*
* 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.
///
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);
}
///
/// Stops a given progress bar "pulsing" animation, if its under that mode.
///
[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 or gets the general or main color of the given Progressbar.
///
public override Color Color
{
get
{
return GetPartColor("bar");
}
set
{
SetPartColor("bar", value);
}
}
///
/// 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);
}
///
/// Creates a widget handle.
///
/// Parent EvasObject
/// Handle IntPtr
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;
}
}
}