From 6b199d3376acfd4e87dd3e8a04035339bd19a128 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 16 Mar 2014 18:02:15 +1300 Subject: [PATCH] Add bindings to ProgressBarWidget. --- OpenRA.Game/Widgets/ProgressBarWidget.cs | 37 +++++++++++++------ .../Widgets/Logic/DownloadPackagesLogic.cs | 8 ++-- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/OpenRA.Game/Widgets/ProgressBarWidget.cs b/OpenRA.Game/Widgets/ProgressBarWidget.cs index 13b9ff54d1..ddb616649b 100644 --- a/OpenRA.Game/Widgets/ProgressBarWidget.cs +++ b/OpenRA.Game/Widgets/ProgressBarWidget.cs @@ -8,6 +8,7 @@ */ #endregion +using System; using System.Drawing; namespace OpenRA.Widgets @@ -17,45 +18,57 @@ namespace OpenRA.Widgets public int Percentage = 0; public bool Indeterminate = false; + public Func GetPercentage; + public Func IsIndeterminate; + // Indeterminant bar properties float offset = 0f; float tickStep = 0.04f; - public ProgressBarWidget() {} - protected ProgressBarWidget(ProgressBarWidget widget) - : base(widget) + public ProgressBarWidget() { - Percentage = widget.Percentage; + GetPercentage = () => Percentage; + IsIndeterminate = () => Indeterminate; + } + + protected ProgressBarWidget(ProgressBarWidget other) + : base(other) + { + Percentage = other.Percentage; + GetPercentage = other.GetPercentage; + IsIndeterminate = other.IsIndeterminate; } public override void Draw() { var rb = RenderBounds; + var percentage = GetPercentage(); WidgetUtils.DrawPanel("progressbar-bg", rb); - Rectangle barRect = Indeterminate ? + Rectangle barRect = wasIndeterminate ? new Rectangle(rb.X + 2 + (int)(0.75*offset*(rb.Width - 4)), rb.Y + 2, (rb.Width - 4) / 4, rb.Height - 4) : - new Rectangle(rb.X + 2, rb.Y + 2, Percentage * (rb.Width - 4) / 100, rb.Height - 4); + new Rectangle(rb.X + 2, rb.Y + 2, percentage * (rb.Width - 4) / 100, rb.Height - 4); if (barRect.Width > 0) WidgetUtils.DrawPanel("progressbar-thumb", barRect); } + bool wasIndeterminate; public override void Tick() { - if (Indeterminate) + var indeterminate = IsIndeterminate(); + if (indeterminate != wasIndeterminate) + offset = 0f; + + if (indeterminate) { offset += tickStep; offset = offset.Clamp(0f, 1f); if (offset == 0f || offset == 1f) tickStep *= -1; } - } - public void SetIndeterminate(bool value) - { - Indeterminate = value; - offset = 0f; + wasIndeterminate = indeterminate; } public override Widget Clone() { return new ProgressBarWidget(this); } diff --git a/OpenRA.Mods.RA/Widgets/Logic/DownloadPackagesLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/DownloadPackagesLogic.cs index 8473d0a868..74d8bf46dc 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/DownloadPackagesLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/DownloadPackagesLogic.cs @@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic void ShowDownloadDialog() { statusLabel.GetText = () => "Initializing..."; - progressBar.SetIndeterminate(true); + progressBar.Indeterminate = true; var retryButton = panel.Get("RETRY_BUTTON"); retryButton.IsVisible = () => false; @@ -55,9 +55,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic Action onDownloadProgress = i => { - if (progressBar.Indeterminate) - progressBar.SetIndeterminate(false); - + progressBar.Indeterminate = false; progressBar.Percentage = i.ProgressPercentage; statusLabel.GetText = () => "Downloading {1}/{2} kB ({0}%)".F(i.ProgressPercentage, i.BytesReceived / 1024, i.TotalBytesToReceive / 1024); }; @@ -91,7 +89,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic // Automatically extract statusLabel.GetText = () => "Extracting..."; - progressBar.SetIndeterminate(true); + progressBar.Indeterminate = true; if (InstallUtils.ExtractZip(file, dest, onExtractProgress, onError)) { Game.RunAfterTick(() =>