Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit ecfb73c

Browse files
committed
[NuGet] Right align license metadata and show warnings as tooltip
Manage NuGet packages dialog changes: Show license expression on the same line as the License label in the Manage NuGet packages dialog. Right align and wrap the license expression. Move the license warnings to a tooltip for the warning icon instead of showing the text directly in the dialog. Move the warning icon so it is on the right hand side of the license expression text. License acceptance dialog changes: Show license warnings in the warning icon tooltip instead of directly on the dialog. Show license warning icon on the same line as the license expression, on the left hand side of the expression. Fixes VSTS #1012071 - Right-align licenses to improve readability and text wrapping Fixes VSTS #1012079 - Use tooltip on warning icon to provide more details
1 parent b660a54 commit ecfb73c

File tree

3 files changed

+49
-84
lines changed

3 files changed

+49
-84
lines changed

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/LicenseAcceptanceDialog.cs

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -162,33 +162,28 @@ static void AddLicenseExpressionLabel (PackageLicenseViewModel package, VBox par
162162
// Does not work. LabelBackend for Xamarin.Mac implementation does not ILabelEventSink.OnLinkClicked
163163
licenseLabel.LinkClicked += (sender, e) => IdeServices.DesktopService.ShowUrl (e.Target.AbsoluteUri);
164164

165-
foreach (WarningText warning in builder.Warnings) {
166-
AddLicenseWarningLabel (warning, parentVBox);
167-
}
168-
169165
var hbox = new HBox ();
170-
hbox.PackStart (licenseLabel, true);
171166

172-
parentVBox.PackStart (hbox);
173-
}
167+
if (builder.Warnings.Any ()) {
168+
var warningTextBuilder = StringBuilderCache.Allocate ();
169+
foreach (WarningText warning in builder.Warnings) {
170+
warningTextBuilder.Append (warning.Text);
171+
warningTextBuilder.Append (' ');
172+
}
174173

175-
static void AddLicenseWarningLabel (WarningText warning, VBox parentVBox)
176-
{
177-
var hbox = new HBox ();
178-
var image = new ImageView {
179-
Image = ImageService.GetIcon ("md-warning", Gtk.IconSize.Menu),
180-
VerticalPlacement = WidgetPlacement.Start,
181-
};
182-
image.Accessible.RoleDescription = GettextCatalog.GetString ("Warning Icon");
183-
184-
hbox.PackStart (image);
185-
186-
var label = new Label {
187-
Text = warning.Text,
188-
Wrap = WrapMode.None
189-
};
190-
image.Accessible.LabelWidget = label;
191-
hbox.PackStart (label, true);
174+
var warningWidget = new MonoDevelop.Components.InformationPopoverWidget ();
175+
warningWidget.Severity = Ide.Tasks.TaskSeverity.Warning;
176+
warningWidget.Message = StringBuilderCache.ReturnAndFree (warningTextBuilder).TrimEnd ();
177+
178+
// Disable focus. With focus enabled the info popup ends up being displayed and focused
179+
// if it is the first package license on opening the dialog. Unable to set focus to a
180+
// dialog button.
181+
warningWidget.CanGetFocus = false;
182+
183+
hbox.PackStart (warningWidget);
184+
}
185+
186+
hbox.PackStart (licenseLabel, true);
192187

193188
parentVBox.PackStart (hbox);
194189
}

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.UI.cs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,8 @@ internal partial class ManagePackagesDialog : ExtendedTitleBarDialog
4949
Label packageDownloads;
5050
Label packageLicenseLabel;
5151
LinkLabel packageLicenseLink;
52-
VBox packageLicenseMetadataWarningsVBox;
53-
HBox packageLicenseMetadataHBox;
54-
Label packageLicenseMetadataLabel;
52+
InformationPopoverWidget packageLicenseMetadataWarningInfoPopoverWidget;
53+
Label packageLicenseMetadataLinkLabel;
5554
LinkLabel packageProjectPageLink;
5655
Label packageDependenciesList;
5756
HBox packageDependenciesHBox;
@@ -329,27 +328,24 @@ void Build ()
329328
packageLicenseLabel = new Label ();
330329
packageLicenseLabel.Text = GettextCatalog.GetString ("License");
331330
packageLicenseLabel.Font = packageInfoBoldFont;
332-
packageLicenseHBox.PackStart (packageLicenseLabel);
331+
packageLicenseHBox.PackStart (packageLicenseLabel, vpos: WidgetPlacement.Start);
333332

334333
packageLicenseLink = new LinkLabel ();
335334
packageLicenseLink.Text = GettextCatalog.GetString ("View License");
336335
packageLicenseLink.Font = packageInfoSmallFont;
337-
packageLicenseHBox.PackEnd (packageLicenseLink);
338-
339-
packageLicenseMetadataWarningsVBox = new VBox ();
340-
packageLicenseMetadataWarningsVBox.Visible = false;
341-
packageInfoVBox.PackStart (packageLicenseMetadataWarningsVBox);
342-
343-
packageLicenseMetadataHBox = new HBox ();
344-
packageLicenseMetadataHBox.Visible = false;
345-
packageInfoVBox.PackStart (packageLicenseMetadataHBox);
346-
347-
packageLicenseMetadataLabel = new Label ();
348-
packageLicenseMetadataLabel.Wrap = WrapMode.Word;
349-
packageLicenseMetadataLabel.MarginLeft = 5;
350-
packageLicenseMetadataLabel.Font = packageInfoSmallFont;
351-
packageLicenseMetadataLabel.Accessible.LabelWidget = packageLicenseLabel;
352-
packageLicenseMetadataHBox.PackStart (packageLicenseMetadataLabel, true);
336+
packageLicenseLink.TextAlignment = Alignment.End;
337+
packageLicenseHBox.PackStart (packageLicenseLink, true);
338+
339+
packageLicenseMetadataLinkLabel = new Label ();
340+
packageLicenseMetadataLinkLabel.Wrap = WrapMode.Word;
341+
packageLicenseMetadataLinkLabel.Font = packageInfoSmallFont;
342+
packageLicenseMetadataLinkLabel.Accessible.LabelWidget = packageLicenseLabel;
343+
packageLicenseMetadataLinkLabel.TextAlignment = Alignment.End;
344+
packageLicenseHBox.PackStart (packageLicenseMetadataLinkLabel, true, vpos: WidgetPlacement.Start);
345+
346+
packageLicenseMetadataWarningInfoPopoverWidget = new InformationPopoverWidget ();
347+
packageLicenseMetadataWarningInfoPopoverWidget.Severity = Ide.Tasks.TaskSeverity.Warning;
348+
packageLicenseHBox.PackStart (packageLicenseMetadataWarningInfoPopoverWidget, vpos: WidgetPlacement.Start, hpos: WidgetPlacement.End);
353349

354350
// Package project page.
355351
var packageProjectPageHBox = new HBox ();

main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.Gui/ManagePackagesDialog.cs

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,8 +1172,7 @@ void ShowLicense (ManagePackagesSearchResultViewModel packageViewModel)
11721172
if (packageViewModel.HasLicenseMetadata) {
11731173
ShowLicenseMetadata (packageViewModel);
11741174
} else {
1175-
packageLicenseMetadataHBox.Visible = false;
1176-
packageLicenseMetadataWarningsVBox.Visible = false;
1175+
packageLicenseMetadataLinkLabel.Visible = false;
11771176
ShowUri (packageLicenseLink, packageViewModel.LicenseUrl, GettextCatalog.GetString ("View License"));
11781177
}
11791178
}
@@ -1190,20 +1189,18 @@ void PackageLicenseNavigateToUrl (object sender, NavigateToUrlEventArgs e)
11901189

11911190
void ShowLicenseMetadata (ManagePackagesSearchResultViewModel packageViewModel)
11921191
{
1193-
var textLinks = packageViewModel.GetLicenseLinks ();
1192+
packageLicenseLink.Visible = false;
1193+
packageLicenseMetadataLinkLabel.Visible = false;
1194+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = false;
11941195

1196+
var textLinks = packageViewModel.GetLicenseLinks ();
11951197
if (textLinks.Count == 0) {
1196-
packageLicenseLink.Visible = false;
1197-
packageLicenseMetadataHBox.Visible = false;
1198-
packageLicenseMetadataWarningsVBox.Visible = false;
11991198
return;
12001199
}
12011200

12021201
// Single link - show this on the same line as the License label.
12031202
if (textLinks.Count == 1) {
12041203
packageLicenseLink.Visible = true;
1205-
packageLicenseMetadataHBox.Visible = false;
1206-
packageLicenseMetadataWarningsVBox.Visible = false;
12071204

12081205
IText textLink = textLinks [0];
12091206
if (textLink is LicenseText licenseText) {
@@ -1222,48 +1219,25 @@ void ShowLicenseMetadata (ManagePackagesSearchResultViewModel packageViewModel)
12221219

12231220
// Multiple text links. We need to allow these to wrap so show these below the license label.
12241221
var markupBuilder = new LicenseLinkMarkupBuilder ();
1225-
packageLicenseMetadataLabel.Markup = markupBuilder.GetMarkup (textLinks);
1226-
1227-
packageLicenseLink.Visible = false;
1228-
packageLicenseMetadataHBox.Visible = true;
1222+
packageLicenseMetadataLinkLabel.Markup = markupBuilder.GetMarkup (textLinks);
1223+
packageLicenseMetadataLinkLabel.Visible = true;
12291224

12301225
if (markupBuilder.Warnings.Any ()) {
12311226
AddWarnings (markupBuilder.Warnings);
12321227
} else {
1233-
packageLicenseMetadataWarningsVBox.Visible = false;
1228+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = false;
12341229
}
12351230
}
12361231

12371232
void AddWarnings (IEnumerable<WarningText> warnings)
12381233
{
1239-
foreach (Widget child in packageLicenseMetadataWarningsVBox.Children.ToArray ()) {
1240-
packageLicenseMetadataWarningsVBox.Remove (child);
1241-
child.Dispose ();
1242-
}
1243-
1234+
var warningTextBuilder = StringBuilderCache.Allocate ();
12441235
foreach (WarningText warning in warnings) {
1245-
var hbox = new HBox ();
1246-
var image = new ImageView {
1247-
Image = ImageService.GetIcon ("md-warning", Gtk.IconSize.Menu),
1248-
MarginLeft = packageLicenseMetadataLabel.MarginLeft,
1249-
VerticalPlacement = WidgetPlacement.Start,
1250-
};
1251-
image.Accessible.RoleDescription = GettextCatalog.GetString ("Warning Icon");
1252-
hbox.PackStart (image);
1253-
1254-
var label = new Label {
1255-
Text = warning.Text,
1256-
Font = packageLicenseMetadataLabel.Font,
1257-
Wrap = WrapMode.Word
1258-
};
1259-
image.Accessible.LabelWidget = label;
1260-
label.Accessible.LabelWidget = packageLicenseLabel;
1261-
hbox.PackStart (label, true, true);
1262-
1263-
packageLicenseMetadataWarningsVBox.PackStart (hbox);
1264-
}
1265-
1266-
packageLicenseMetadataWarningsVBox.Visible = true;
1236+
warningTextBuilder.Append (warning.Text);
1237+
warningTextBuilder.Append (' ');
1238+
}
1239+
packageLicenseMetadataWarningInfoPopoverWidget.Message = StringBuilderCache.ReturnAndFree (warningTextBuilder).TrimEnd ();
1240+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = true;
12671241
}
12681242
}
12691243
}

0 commit comments

Comments
 (0)