Remove redundancy from dropdown setup
This commit is contained in:
@@ -143,5 +143,28 @@ namespace OpenRA.Widgets
|
|||||||
dropDown.Bounds.Height = Math.Min(150, dropDown.ContentHeight);
|
dropDown.Bounds.Height = Math.Min(150, dropDown.ContentHeight);
|
||||||
ShowDropPanel(w, dropDown, dismissAfter, () => true);
|
ShowDropPanel(w, dropDown, dismissAfter, () => true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ShowDropDown<T>(string panelTemplate, int height, List<T> options, Func<T, ScrollItemWidget, ScrollItemWidget> setupItem)
|
||||||
|
{
|
||||||
|
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", Bounds.Width }};
|
||||||
|
var panel = (ScrollPanelWidget)Widget.LoadWidget(panelTemplate, null, new WidgetArgs()
|
||||||
|
{{ "substitutions", substitutions }});
|
||||||
|
|
||||||
|
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
||||||
|
panel.RemoveChildren();
|
||||||
|
foreach (var option in options)
|
||||||
|
{
|
||||||
|
var o = option;
|
||||||
|
|
||||||
|
ScrollItemWidget item = setupItem(o, itemTemplate);
|
||||||
|
var onClick = item.OnClick;
|
||||||
|
item.OnClick = () => { onClick(); RemovePanel(); };
|
||||||
|
|
||||||
|
panel.AddChild(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
panel.Bounds.Height = Math.Min(height, panel.ContentHeight);
|
||||||
|
AttachPanel(panel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,29 +61,19 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
if (dropdown.IsDisabled())
|
if (dropdown.IsDisabled())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
var stances = Enum.GetValues(typeof(Stance)).OfType<Stance>().ToList();
|
||||||
var panel = (ScrollPanelWidget)Widget.LoadWidget("LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
Func<Stance, ScrollItemWidget, ScrollItemWidget> setupItem = (s, template) =>
|
||||||
{
|
{
|
||||||
{ "substitutions", substitutions }
|
var item = ScrollItemWidget.Setup(template,
|
||||||
});
|
() => s == world.LocalPlayer.Stances[ pp ],
|
||||||
|
() => world.IssueOrder(new Order("SetStance", world.LocalPlayer.PlayerActor, false)
|
||||||
|
{ TargetLocation = new int2(pp.Index, (int)s) }));
|
||||||
|
|
||||||
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => s.ToString();
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, stances, setupItem);
|
||||||
|
|
||||||
foreach (var option in Enum.GetValues(typeof(Stance)).OfType<Stance>())
|
|
||||||
{
|
|
||||||
var o = option;
|
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => o == world.LocalPlayer.Stances[ pp ],
|
|
||||||
() => {
|
|
||||||
world.IssueOrder(new Order("SetStance", world.LocalPlayer.PlayerActor,
|
|
||||||
false) { TargetLocation = new int2(pp.Index, (int)o) });
|
|
||||||
dropdown.RemovePanel();
|
|
||||||
});
|
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.ToString();
|
|
||||||
panel.AddChild(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
panel.Bounds.Height = Math.Min(150, panel.ContentHeight);
|
|
||||||
dropdown.AttachPanel(panel);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -326,13 +326,6 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
|
|
||||||
bool ShowSlotDropDown(DropDownButtonWidget dropdown, Session.Slot slot, bool showBotOptions)
|
bool ShowSlotDropDown(DropDownButtonWidget dropdown, Session.Slot slot, bool showBotOptions)
|
||||||
{
|
{
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
|
||||||
var panel = (ScrollPanelWidget)Widget.LoadWidget("LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
|
||||||
{
|
|
||||||
{ "substitutions", substitutions }
|
|
||||||
});
|
|
||||||
|
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
|
||||||
var options = new List<SlotDropDownOption>()
|
var options = new List<SlotDropDownOption>()
|
||||||
{
|
{
|
||||||
new SlotDropDownOption("Open", "slot_open "+slot.Index, () => (!slot.Closed && slot.Bot == null)),
|
new SlotDropDownOption("Open", "slot_open "+slot.Index, () => (!slot.Closed && slot.Bot == null)),
|
||||||
@@ -343,20 +336,16 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
foreach (var bot in Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name))
|
foreach (var bot in Rules.Info["player"].Traits.WithInterface<IBotInfo>().Select(t => t.Name))
|
||||||
options.Add(new SlotDropDownOption("Bot: {0}".F(bot), "slot_bot {0} {1}".F(slot.Index, bot), () => slot.Bot == bot));
|
options.Add(new SlotDropDownOption("Bot: {0}".F(bot), "slot_bot {0} {1}".F(slot.Index, bot), () => slot.Bot == bot));
|
||||||
|
|
||||||
foreach (var option in options)
|
Func<SlotDropDownOption, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var o = option;
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, o.Selected,
|
o.Selected,
|
||||||
() => {
|
() => orderManager.IssueOrder(Order.Command(o.Order)));
|
||||||
orderManager.IssueOrder(Order.Command(o.Order));
|
|
||||||
dropdown.RemovePanel();
|
|
||||||
});
|
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Title;
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Title;
|
||||||
panel.AddChild(item);
|
return item;
|
||||||
}
|
};
|
||||||
|
|
||||||
panel.Bounds.Height = Math.Min(150, panel.ContentHeight);
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||||
dropdown.AttachPanel(panel);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,60 +354,37 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
if (Map.Players[slot.MapPlayer].LockRace)
|
if (Map.Players[slot.MapPlayer].LockRace)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
var sr = GetClientInSlot(slot).Country;
|
||||||
var panel = (ScrollPanelWidget)Widget.LoadWidget("RACE_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (race, itemTemplate) =>
|
||||||
{
|
{
|
||||||
{ "substitutions", substitutions }
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
});
|
() => sr == race,
|
||||||
|
() => orderManager.IssueOrder(Order.Command("race "+race)));
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => CountryNames[race];
|
||||||
|
|
||||||
foreach (var c in CountryNames)
|
|
||||||
{
|
|
||||||
var race = c;
|
|
||||||
var sr = GetClientInSlot(slot).Country;
|
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => sr == race.Key,
|
|
||||||
() => {
|
|
||||||
orderManager.IssueOrder(Order.Command("race "+race.Key));
|
|
||||||
dropdown.RemovePanel();
|
|
||||||
});
|
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => race.Value;
|
|
||||||
var flag = item.GetWidget<ImageWidget>("FLAG");
|
var flag = item.GetWidget<ImageWidget>("FLAG");
|
||||||
flag.GetImageCollection = () => "flags";
|
flag.GetImageCollection = () => "flags";
|
||||||
flag.GetImageName = () => race.Key;
|
flag.GetImageName = () => race;
|
||||||
panel.AddChild(item);
|
return item;
|
||||||
}
|
};
|
||||||
|
|
||||||
panel.Bounds.Height = Math.Min(150, panel.ContentHeight);
|
dropdown.ShowDropDown("RACE_DROPDOWN_TEMPLATE", 150, CountryNames.Keys.ToList(), setupItem);
|
||||||
dropdown.AttachPanel(panel);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShowTeamDropDown(DropDownButtonWidget dropdown, Session.Slot slot)
|
bool ShowTeamDropDown(DropDownButtonWidget dropdown, Session.Slot slot)
|
||||||
{
|
{
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
var c = GetClientInSlot(slot);
|
||||||
var panel = (ScrollPanelWidget)Widget.LoadWidget("TEAM_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
Func<int, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, itemTemplate) =>
|
||||||
{
|
{
|
||||||
{ "substitutions", substitutions }
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
});
|
() => c.Team == ii,
|
||||||
|
() => orderManager.IssueOrder(Order.Command("team "+ii)));
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
|
||||||
|
|
||||||
for (int i = 0; i <= Map.PlayerCount; i++)
|
|
||||||
{
|
|
||||||
var ii = i;
|
|
||||||
var c = GetClientInSlot(slot);
|
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => c.Team == ii,
|
|
||||||
() => {
|
|
||||||
orderManager.IssueOrder(Order.Command("team "+ii));
|
|
||||||
dropdown.RemovePanel();
|
|
||||||
});
|
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString();
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => ii == 0 ? "-" : ii.ToString();
|
||||||
panel.AddChild(item);
|
return item;
|
||||||
};
|
};
|
||||||
|
|
||||||
panel.Bounds.Height = Math.Min(150, panel.ContentHeight);
|
var options = Graphics.Util.MakeArray(Map.PlayerCount, i => i).ToList();
|
||||||
dropdown.AttachPanel(panel);
|
dropdown.ShowDropDown("TEAM_DROPDOWN_TEMPLATE", 150, options, setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
using OpenRA.FileFormats.Graphics;
|
using OpenRA.FileFormats.Graphics;
|
||||||
using OpenRA.GameRules;
|
using OpenRA.GameRules;
|
||||||
@@ -220,13 +221,6 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
|
|
||||||
bool ShowGroupModifierDropdown(DropDownButtonWidget dropdown)
|
bool ShowGroupModifierDropdown(DropDownButtonWidget dropdown)
|
||||||
{
|
{
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
|
||||||
var panel = (ScrollPanelWidget)Game.LoadWidget(world, "LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
|
||||||
{
|
|
||||||
{ "substitutions", substitutions }
|
|
||||||
});
|
|
||||||
|
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
|
||||||
var options = new Dictionary<string, Modifiers>()
|
var options = new Dictionary<string, Modifiers>()
|
||||||
{
|
{
|
||||||
{ "Ctrl", Modifiers.Ctrl },
|
{ "Ctrl", Modifiers.Ctrl },
|
||||||
@@ -235,58 +229,45 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
// TODO: Display this as Cmd on osx once we have platform detection
|
// TODO: Display this as Cmd on osx once we have platform detection
|
||||||
{ "Meta", Modifiers.Meta }
|
{ "Meta", Modifiers.Meta }
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var option in options)
|
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var o = option;
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => groupAddModifier == o.Value, () => { groupAddModifier = o.Value; dropdown.RemovePanel(); });
|
() => groupAddModifier == options[o],
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Key;
|
() => groupAddModifier = options[o]);
|
||||||
panel.AddChild(item);
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => o;
|
||||||
}
|
return item;
|
||||||
panel.Bounds.Height = panel.ContentHeight;
|
};
|
||||||
dropdown.AttachPanel(panel);
|
|
||||||
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys.ToList(), setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ShowWindowModeDropdown(DropDownButtonWidget dropdown)
|
bool ShowWindowModeDropdown(DropDownButtonWidget dropdown)
|
||||||
{
|
{
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
|
||||||
var panel = (ScrollPanelWidget)Game.LoadWidget(world, "LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
|
||||||
{
|
|
||||||
{ "substitutions", substitutions }
|
|
||||||
});
|
|
||||||
|
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
|
||||||
var options = new Dictionary<string, WindowMode>()
|
var options = new Dictionary<string, WindowMode>()
|
||||||
{
|
{
|
||||||
{ "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
|
{ "Pseudo-Fullscreen", WindowMode.PseudoFullscreen },
|
||||||
{ "Fullscreen", WindowMode.Fullscreen },
|
{ "Fullscreen", WindowMode.Fullscreen },
|
||||||
{ "Windowed", WindowMode.Windowed },
|
{ "Windowed", WindowMode.Windowed },
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var option in options)
|
|
||||||
{
|
|
||||||
var o = option;
|
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => windowMode == o.Value, () => { windowMode = o.Value; dropdown.RemovePanel(); });
|
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Key;
|
|
||||||
panel.AddChild(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
panel.Bounds.Height = panel.ContentHeight;
|
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
dropdown.AttachPanel(panel);
|
{
|
||||||
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
|
() => windowMode == options[o],
|
||||||
|
() => windowMode = options[o]);
|
||||||
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => o;
|
||||||
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys.ToList(), setupItem);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ShowMouseScrollDropdown(DropDownButtonWidget dropdown)
|
bool ShowMouseScrollDropdown(DropDownButtonWidget dropdown)
|
||||||
{
|
{
|
||||||
var substitutions = new Dictionary<string,int>() {{ "DROPDOWN_WIDTH", dropdown.Bounds.Width }};
|
|
||||||
var panel = (ScrollPanelWidget)Game.LoadWidget(world, "LABEL_DROPDOWN_TEMPLATE", null, new WidgetArgs()
|
|
||||||
{
|
|
||||||
{ "substitutions", substitutions }
|
|
||||||
});
|
|
||||||
|
|
||||||
var itemTemplate = panel.GetWidget<ScrollItemWidget>("TEMPLATE");
|
|
||||||
var options = new Dictionary<string, MouseScrollType>()
|
var options = new Dictionary<string, MouseScrollType>()
|
||||||
{
|
{
|
||||||
{ "Disabled", MouseScrollType.Disabled },
|
{ "Disabled", MouseScrollType.Disabled },
|
||||||
@@ -294,16 +275,16 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
{ "Inverted", MouseScrollType.Inverted },
|
{ "Inverted", MouseScrollType.Inverted },
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (var option in options)
|
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
|
||||||
{
|
{
|
||||||
var o = option;
|
var item = ScrollItemWidget.Setup(itemTemplate,
|
||||||
var item = ScrollItemWidget.Setup(itemTemplate, () => mouseScroll == o.Value, () => { mouseScroll = o.Value; dropdown.RemovePanel(); });
|
() => mouseScroll == options[o],
|
||||||
item.GetWidget<LabelWidget>("LABEL").GetText = () => o.Key;
|
() => mouseScroll = options[o]);
|
||||||
panel.AddChild(item);
|
item.GetWidget<LabelWidget>("LABEL").GetText = () => o;
|
||||||
}
|
return item;
|
||||||
|
};
|
||||||
|
|
||||||
panel.Bounds.Height = panel.ContentHeight;
|
dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, options.Keys.ToList(), setupItem);
|
||||||
dropdown.AttachPanel(panel);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user