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

Commit e26b14b

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 6b797b4 commit e26b14b

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;
@@ -353,27 +352,24 @@ void Build ()
353352
packageLicenseLabel = new Label ();
354353
packageLicenseLabel.Text = GettextCatalog.GetString ("License");
355354
packageLicenseLabel.Font = packageInfoBoldFont;
356-
packageLicenseHBox.PackStart (packageLicenseLabel);
355+
packageLicenseHBox.PackStart (packageLicenseLabel, vpos: WidgetPlacement.Start);
357356

358357
packageLicenseLink = new LinkLabel ();
359358
packageLicenseLink.Text = GettextCatalog.GetString ("View License");
360359
packageLicenseLink.Font = packageInfoSmallFont;
361-
packageLicenseHBox.PackEnd (packageLicenseLink);
362-
363-
packageLicenseMetadataWarningsVBox = new VBox ();
364-
packageLicenseMetadataWarningsVBox.Visible = false;
365-
packageInfoVBox.PackStart (packageLicenseMetadataWarningsVBox);
366-
367-
packageLicenseMetadataHBox = new HBox ();
368-
packageLicenseMetadataHBox.Visible = false;
369-
packageInfoVBox.PackStart (packageLicenseMetadataHBox);
370-
371-
packageLicenseMetadataLabel = new Label ();
372-
packageLicenseMetadataLabel.Wrap = WrapMode.Word;
373-
packageLicenseMetadataLabel.MarginLeft = 5;
374-
packageLicenseMetadataLabel.Font = packageInfoSmallFont;
375-
packageLicenseMetadataLabel.Accessible.LabelWidget = packageLicenseLabel;
376-
packageLicenseMetadataHBox.PackStart (packageLicenseMetadataLabel, true);
360+
packageLicenseLink.TextAlignment = Alignment.End;
361+
packageLicenseHBox.PackStart (packageLicenseLink, true);
362+
363+
packageLicenseMetadataLinkLabel = new Label ();
364+
packageLicenseMetadataLinkLabel.Wrap = WrapMode.Word;
365+
packageLicenseMetadataLinkLabel.Font = packageInfoSmallFont;
366+
packageLicenseMetadataLinkLabel.Accessible.LabelWidget = packageLicenseLabel;
367+
packageLicenseMetadataLinkLabel.TextAlignment = Alignment.End;
368+
packageLicenseHBox.PackStart (packageLicenseMetadataLinkLabel, true, vpos: WidgetPlacement.Start);
369+
370+
packageLicenseMetadataWarningInfoPopoverWidget = new InformationPopoverWidget ();
371+
packageLicenseMetadataWarningInfoPopoverWidget.Severity = Ide.Tasks.TaskSeverity.Warning;
372+
packageLicenseHBox.PackStart (packageLicenseMetadataWarningInfoPopoverWidget, vpos: WidgetPlacement.Start, hpos: WidgetPlacement.End);
377373

378374
// Package project page.
379375
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
@@ -1296,8 +1296,7 @@ void ShowLicense (ManagePackagesSearchResultViewModel packageViewModel)
12961296
if (packageViewModel.HasLicenseMetadata) {
12971297
ShowLicenseMetadata (packageViewModel);
12981298
} else {
1299-
packageLicenseMetadataHBox.Visible = false;
1300-
packageLicenseMetadataWarningsVBox.Visible = false;
1299+
packageLicenseMetadataLinkLabel.Visible = false;
13011300
ShowUri (packageLicenseLink, packageViewModel.LicenseUrl, GettextCatalog.GetString ("View License"));
13021301
}
13031302
}
@@ -1314,20 +1313,18 @@ void PackageLicenseNavigateToUrl (object sender, NavigateToUrlEventArgs e)
13141313

13151314
void ShowLicenseMetadata (ManagePackagesSearchResultViewModel packageViewModel)
13161315
{
1317-
var textLinks = packageViewModel.GetLicenseLinks ();
1316+
packageLicenseLink.Visible = false;
1317+
packageLicenseMetadataLinkLabel.Visible = false;
1318+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = false;
13181319

1320+
var textLinks = packageViewModel.GetLicenseLinks ();
13191321
if (textLinks.Count == 0) {
1320-
packageLicenseLink.Visible = false;
1321-
packageLicenseMetadataHBox.Visible = false;
1322-
packageLicenseMetadataWarningsVBox.Visible = false;
13231322
return;
13241323
}
13251324

13261325
// Single link - show this on the same line as the License label.
13271326
if (textLinks.Count == 1) {
13281327
packageLicenseLink.Visible = true;
1329-
packageLicenseMetadataHBox.Visible = false;
1330-
packageLicenseMetadataWarningsVBox.Visible = false;
13311328

13321329
IText textLink = textLinks [0];
13331330
if (textLink is LicenseText licenseText) {
@@ -1346,48 +1343,25 @@ void ShowLicenseMetadata (ManagePackagesSearchResultViewModel packageViewModel)
13461343

13471344
// Multiple text links. We need to allow these to wrap so show these below the license label.
13481345
var markupBuilder = new LicenseLinkMarkupBuilder ();
1349-
packageLicenseMetadataLabel.Markup = markupBuilder.GetMarkup (textLinks);
1350-
1351-
packageLicenseLink.Visible = false;
1352-
packageLicenseMetadataHBox.Visible = true;
1346+
packageLicenseMetadataLinkLabel.Markup = markupBuilder.GetMarkup (textLinks);
1347+
packageLicenseMetadataLinkLabel.Visible = true;
13531348

13541349
if (markupBuilder.Warnings.Any ()) {
13551350
AddWarnings (markupBuilder.Warnings);
13561351
} else {
1357-
packageLicenseMetadataWarningsVBox.Visible = false;
1352+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = false;
13581353
}
13591354
}
13601355

13611356
void AddWarnings (IEnumerable<WarningText> warnings)
13621357
{
1363-
foreach (Widget child in packageLicenseMetadataWarningsVBox.Children.ToArray ()) {
1364-
packageLicenseMetadataWarningsVBox.Remove (child);
1365-
child.Dispose ();
1366-
}
1367-
1358+
var warningTextBuilder = StringBuilderCache.Allocate ();
13681359
foreach (WarningText warning in warnings) {
1369-
var hbox = new HBox ();
1370-
var image = new ImageView {
1371-
Image = ImageService.GetIcon ("md-warning", Gtk.IconSize.Menu),
1372-
MarginLeft = packageLicenseMetadataLabel.MarginLeft,
1373-
VerticalPlacement = WidgetPlacement.Start,
1374-
};
1375-
image.Accessible.RoleDescription = GettextCatalog.GetString ("Warning Icon");
1376-
hbox.PackStart (image);
1377-
1378-
var label = new Label {
1379-
Text = warning.Text,
1380-
Font = packageLicenseMetadataLabel.Font,
1381-
Wrap = WrapMode.Word
1382-
};
1383-
image.Accessible.LabelWidget = label;
1384-
label.Accessible.LabelWidget = packageLicenseLabel;
1385-
hbox.PackStart (label, true, true);
1386-
1387-
packageLicenseMetadataWarningsVBox.PackStart (hbox);
1388-
}
1389-
1390-
packageLicenseMetadataWarningsVBox.Visible = true;
1360+
warningTextBuilder.Append (warning.Text);
1361+
warningTextBuilder.Append (' ');
1362+
}
1363+
packageLicenseMetadataWarningInfoPopoverWidget.Message = StringBuilderCache.ReturnAndFree (warningTextBuilder).TrimEnd ();
1364+
packageLicenseMetadataWarningInfoPopoverWidget.Visible = true;
13911365
}
13921366
}
13931367
}

0 commit comments

Comments
 (0)