71 lines
2.1 KiB
C#
71 lines
2.1 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
|
* This file is part of OpenRA, which is free software. It is made
|
|
* available to you under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation. For more information,
|
|
* see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System;
|
|
using System.Drawing;
|
|
using OpenRA.Mods.RA.Orders;
|
|
using OpenRA.Mods.RA.Buildings;
|
|
using OpenRA.Traits;
|
|
using OpenRA.Widgets;
|
|
|
|
namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|
{
|
|
public class ProductionTabsLogic
|
|
{
|
|
ProductionTabsWidget tabs;
|
|
World world;
|
|
|
|
void SetupProductionGroupButton(ProductionTypeButtonWidget button)
|
|
{
|
|
if (button == null)
|
|
return;
|
|
|
|
Action<bool> selectTab = reverse =>
|
|
{
|
|
if (tabs.QueueGroup == button.ProductionGroup)
|
|
tabs.SelectNextTab(reverse);
|
|
else
|
|
tabs.QueueGroup = button.ProductionGroup;
|
|
};
|
|
|
|
button.IsDisabled = () => tabs.Groups[button.ProductionGroup].Tabs.Count == 0;
|
|
button.OnMouseUp = mi => selectTab(mi.Modifiers.HasModifier(Modifiers.Shift));
|
|
button.OnKeyPress = e => selectTab(e.Modifiers.HasModifier(Modifiers.Shift));
|
|
button.IsHighlighted = () => tabs.QueueGroup == button.ProductionGroup;
|
|
|
|
var chromeName = button.ProductionGroup.ToLowerInvariant();
|
|
var icon = button.Get<ImageWidget>("ICON");
|
|
icon.GetImageName = () => button.IsDisabled() ? chromeName+"-disabled" :
|
|
tabs.Groups[button.ProductionGroup].Alert ? chromeName+"-alert" : chromeName;
|
|
}
|
|
|
|
[ObjectCreator.UseCtor]
|
|
public ProductionTabsLogic(Widget widget, World world)
|
|
{
|
|
this.world = world;
|
|
tabs = widget.Get<ProductionTabsWidget>("PRODUCTION_TABS");
|
|
world.ActorAdded += tabs.ActorChanged;
|
|
world.ActorRemoved += tabs.ActorChanged;
|
|
Game.BeforeGameStart += UnregisterEvents;
|
|
|
|
var typesContainer = Ui.Root.Get(tabs.TypesContainer);
|
|
foreach (var i in typesContainer.Children)
|
|
SetupProductionGroupButton(i as ProductionTypeButtonWidget);
|
|
}
|
|
|
|
void UnregisterEvents()
|
|
{
|
|
Game.BeforeGameStart -= UnregisterEvents;
|
|
world.ActorAdded -= tabs.ActorChanged;
|
|
world.ActorRemoved -= tabs.ActorChanged;
|
|
}
|
|
}
|
|
}
|