diff options
author | iain holmes <iain@xamarin.com> | 2016-06-24 18:54:40 +0300 |
---|---|---|
committer | iain holmes <iain@xamarin.com> | 2016-10-28 17:26:24 +0300 |
commit | d4ce43be92ce80b5ada8ed4c0dff63bc54228f3a (patch) | |
tree | a2dea82f9707b20246a64f0b9bae858fd6d4a162 /main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar | |
parent | 0468c6d87ebdff825fe97087aa00785d07f7dee0 (diff) |
[IDE] Prepare the Button bar for accessibility labels
For accessibility we need a way to label each different button bar. Instead of
just passing a list of buttons and separators, create a ButtonBarGroup and pass
a list of those. The button bar group is named from the codon's label or Id.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar')
5 files changed, 53 insertions, 5 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ButtonBar.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ButtonBar.cs index 90440b377b..2c4d671d4e 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ButtonBar.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ButtonBar.cs @@ -54,6 +54,18 @@ namespace MonoDevelop.Components.MainToolbar QueueResize (); } } + + public IEnumerable<ButtonBarGroup> Groups { + set { + var buttonList = new List<IButtonBarButton> (); + foreach (var g in value) { + buttonList.AddRange (g.Buttons); + } + + Buttons = buttonList; + } + } + Dictionary<IButtonBarButton, Gdk.Rectangle> allocations = new Dictionary<IButtonBarButton, Gdk.Rectangle> (); IButtonBarButton[] visibleButtons; diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IButtonBarButton.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IButtonBarButton.cs index a43e3d1dba..41ca0801d2 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IButtonBarButton.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IButtonBarButton.cs @@ -24,10 +24,26 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using System; +using System.Collections.Generic; using MonoDevelop.Core; namespace MonoDevelop.Components.MainToolbar { + public class ButtonBarGroup + { + // The title of the button group. Used for accessibility + public string Title { get; private set; } + + // The buttons in this group + public List<IButtonBarButton> Buttons { get; } + + public ButtonBarGroup (string title) + { + Title = title; + Buttons = new List<IButtonBarButton> (); + } + } + public interface IButtonBarButton { /// <summary> diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IMainToolbarView.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IMainToolbarView.cs index 2d58bb2182..a2248988a9 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IMainToolbarView.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/IMainToolbarView.cs @@ -242,7 +242,9 @@ namespace MonoDevelop.Components.MainToolbar /// Rebuilds the toolbar. /// </summary> /// <param name="buttons">A list of buttons.</param> + [Obsolete ("Use RebuildToolbar(IEnumerable<ButtonBarGroup> groups) instead")] void RebuildToolbar (IEnumerable<IButtonBarButton> buttons); + void RebuildToolbar (IEnumerable<ButtonBarGroup> groups); /// <summary> /// Sets a value indicating whether the button bar is interactible. diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs index 0a041a4baf..6fa425088f 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs @@ -593,6 +593,18 @@ namespace MonoDevelop.Components.MainToolbar buttonBar.Buttons = buttons; } + public void RebuildToolbar (IEnumerable<ButtonBarGroup> groups) + { + if (!groups.Any ()) { + buttonBarBox.Hide (); + return; + } + + buttonBarBox.Show (); + buttonBar.ShowAll (); + buttonBar.Groups = groups; + } + public bool ButtonBarSensitivity { set { buttonBar.Sensitive = value; } } diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs index cbfd4b690b..9315639765 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbarController.cs @@ -694,16 +694,22 @@ namespace MonoDevelop.Components.MainToolbar { var bars = AddinManager.GetExtensionNodes<ItemSetCodon> (ToolbarExtensionPath) .Where (n => visibleBars.Contains (n.Id)) - .Select (b => b.ChildNodes.OfType<CommandItemCodon> ().Select (n => n.Id)); + .Select (b => new { Label = b.Label, Buttons = b.ChildNodes.OfType<CommandItemCodon> ().Select (n => n.Id) }); + var buttonGroups = new List<ButtonBarGroup> (); buttonBarButtons.Clear (); foreach (var bar in bars) { - foreach (string commandId in bar) - buttonBarButtons.Add (new ButtonBarButton (this, commandId)); - buttonBarButtons.Add (new ButtonBarButton (this)); + var group = new ButtonBarGroup (bar.Label); + + buttonGroups.Add (group); + foreach (string commandId in bar.Buttons) { + var button = new ButtonBarButton (this, commandId); + group.Buttons.Add (button); + buttonBarButtons.Add (button); + } } - ToolbarView.RebuildToolbar (buttonBarButtons); + ToolbarView.RebuildToolbar (buttonGroups); } static void HandleStartButtonClicked (object sender, EventArgs e) |