Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ward <matt.ward@xamarin.com>2016-11-22 13:16:58 +0300
committerMatt Ward <matt.ward@xamarin.com>2016-11-22 13:16:58 +0300
commit8bb69868c644f43a1bb4a5c96806229bf44ec3de (patch)
tree75c4ba25993dfa3486e40abaea0d5274c6ea6a29 /main/src/addins/MonoDevelop.Packaging
parente6378ee389b1c8e4588aff706f1ed9b3ac0fcaa5 (diff)
[Packaging] Allow PackOnBuild to be set from the UI
Fixed bug #47575 - Make PackOnBuild available in UI https://bugzilla.xamarin.com/show_bug.cgi?id=47575 PackOnBuild can now be set to true in the project file from the UI. PackOnBuild allows non-packaging projects to generate a NuGet package on every build instead of having to use the Create NuGet Package menu. There is now a check box in Project Options - NuGet - Build which will set the PackOnBuild property in the .csproj file.
Diffstat (limited to 'main/src/addins/MonoDevelop.Packaging')
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkNuGetPackageMetadataOptionsPanelWidget.cs15
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.UI.cs66
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.cs84
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.OptionPanels/ProjectNuGetBuildOptionsPanel.cs67
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.addin.xml8
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.csproj6
-rw-r--r--main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging/ProjectIsDotNetProjectOnlyCondition.cs51
7 files changed, 297 insertions, 0 deletions
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkNuGetPackageMetadataOptionsPanelWidget.cs b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkNuGetPackageMetadataOptionsPanelWidget.cs
index 9a45cd3948..6ade8ad23e 100644
--- a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkNuGetPackageMetadataOptionsPanelWidget.cs
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkNuGetPackageMetadataOptionsPanelWidget.cs
@@ -39,6 +39,7 @@ namespace MonoDevelop.Packaging.Gui
{
NuGetPackageMetadata metadata;
bool projectOriginallyHadMetadata;
+ bool hasPackageId;
public GtkNuGetPackageMetadataOptionsPanelWidget ()
{
@@ -47,6 +48,8 @@ namespace MonoDevelop.Packaging.Gui
PopulateLanguages ();
}
+ internal static System.Action<bool> OnProjectHasMetadataChanged;
+
internal void Load (PackagingProject project)
{
metadata = project.GetPackageMetadata ();
@@ -60,6 +63,8 @@ namespace MonoDevelop.Packaging.Gui
LoadMetadata ();
projectOriginallyHadMetadata = ProjectHasMetadata ();
+ hasPackageId = projectOriginallyHadMetadata;
+ packageIdTextBox.Changed += PackageIdTextBoxChanged;
}
void LoadMetadata ()
@@ -155,6 +160,16 @@ namespace MonoDevelop.Packaging.Gui
{
return !string.IsNullOrEmpty (metadata.Id);
}
+
+ void PackageIdTextBoxChanged (object sender, EventArgs e)
+ {
+ bool anyPackageIdText = !string.IsNullOrEmpty (packageIdTextBox.Text);
+
+ if (anyPackageIdText != hasPackageId) {
+ hasPackageId = anyPackageIdText;
+ OnProjectHasMetadataChanged?.Invoke (hasPackageId);
+ }
+ }
}
}
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.UI.cs b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.UI.cs
new file mode 100644
index 0000000000..c44baf570e
--- /dev/null
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.UI.cs
@@ -0,0 +1,66 @@
+//
+// GtkProjectNuGetBuildOptions.UI.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2016 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using Gtk;
+using MonoDevelop.Core;
+
+namespace MonoDevelop.Packaging.Gui
+{
+ partial class GtkProjectNuGetBuildOptionsPanelWidget : Gtk.Bin
+ {
+ CheckButton packOnBuildButton;
+ Label missingMetadataLabel;
+
+ void Build ()
+ {
+ Stetic.Gui.Initialize (this);
+ Stetic.BinContainer.Attach (this);
+
+ var vbox = new VBox ();
+ vbox.Spacing = 6;
+
+ packOnBuildButton = new CheckButton ();
+ packOnBuildButton.Label = GettextCatalog.GetString ("Create a NuGet Package when building the project.");
+
+ vbox.PackStart (packOnBuildButton, false, false, 10);
+
+ missingMetadataLabel = new Label ();
+ missingMetadataLabel.LineWrapMode = Pango.WrapMode.Word;
+ missingMetadataLabel.Wrap = true;
+ missingMetadataLabel.Xalign = 0;
+ missingMetadataLabel.Yalign = 0;
+ missingMetadataLabel.Xpad = 20;
+ missingMetadataLabel.WidthRequest = 600;
+ missingMetadataLabel.Text = GettextCatalog.GetString ("The project does not have NuGet package metadata so a NuGet package will not be created. NuGet package metadata can be specified in the Metadata section in Project Options");
+
+ vbox.PackStart (missingMetadataLabel);
+
+ Add (vbox);
+
+ ShowAll ();
+ }
+ }
+}
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.cs b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.cs
new file mode 100644
index 0000000000..6e41b7485c
--- /dev/null
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.Gui/GtkProjectNuGetBuildOptionsPanelWidget.cs
@@ -0,0 +1,84 @@
+//
+// GtkProjectNuGetBuildOptionsPanelWidget.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2016 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace MonoDevelop.Packaging.Gui
+{
+ partial class GtkProjectNuGetBuildOptionsPanelWidget
+ {
+ bool projectHasMetadata;
+
+ public GtkProjectNuGetBuildOptionsPanelWidget ()
+ {
+ Build ();
+ UpdateMissingMetadataLabelVisibility ();
+ packOnBuildButton.Toggled += PackOnBuildButtonToggled;
+ GtkNuGetPackageMetadataOptionsPanelWidget.OnProjectHasMetadataChanged = OnProjectHasMetadataChanged;
+ }
+
+ public bool PackOnBuild {
+ get { return packOnBuildButton.Active; }
+ set {
+ packOnBuildButton.Active = value;
+ UpdateMissingMetadataLabelVisibility ();
+ }
+ }
+
+ public bool ProjectHasMetadata {
+ get { return projectHasMetadata; }
+ set {
+ projectHasMetadata = value;
+ UpdateMissingMetadataLabelVisibility ();
+ }
+ }
+
+ void PackOnBuildButtonToggled (object sender, EventArgs e)
+ {
+ UpdateMissingMetadataLabelVisibility ();
+ }
+
+ void UpdateMissingMetadataLabelVisibility ()
+ {
+ if (packOnBuildButton.Active) {
+ missingMetadataLabel.Visible = !ProjectHasMetadata;
+ } else {
+ missingMetadataLabel.Visible = false;
+ }
+ }
+
+ void OnProjectHasMetadataChanged (bool hasMetadata)
+ {
+ ProjectHasMetadata = hasMetadata;
+ }
+
+ public override void Destroy ()
+ {
+ GtkNuGetPackageMetadataOptionsPanelWidget.OnProjectHasMetadataChanged = null;
+ base.Destroy ();
+ }
+ }
+}
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.OptionPanels/ProjectNuGetBuildOptionsPanel.cs b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.OptionPanels/ProjectNuGetBuildOptionsPanel.cs
new file mode 100644
index 0000000000..e91ed1a017
--- /dev/null
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.OptionPanels/ProjectNuGetBuildOptionsPanel.cs
@@ -0,0 +1,67 @@
+//
+// ProjectNuGetBuildOptionsPanel.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2016 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using MonoDevelop.Components;
+using MonoDevelop.Ide.Gui.Dialogs;
+using MonoDevelop.Packaging.Gui;
+using MonoDevelop.Projects;
+using MonoDevelop.Projects.MSBuild;
+
+namespace MonoDevelop.Packaging.OptionPanels
+{
+ public class ProjectNuGetBuildOptionsPanel : OptionsPanel
+ {
+ GtkProjectNuGetBuildOptionsPanelWidget widget;
+ DotNetProject project;
+ MSBuildPropertyGroup propertyGroup;
+ bool packOnBuild;
+
+ public override Control CreatePanelWidget ()
+ {
+ widget = new GtkProjectNuGetBuildOptionsPanelWidget ();
+ widget.PackOnBuild = packOnBuild;
+ widget.ProjectHasMetadata = project.HasNuGetMetadata ();
+
+ return widget;
+ }
+
+ public override void Initialize (OptionsDialog dialog, object dataObject)
+ {
+ project = dataObject as DotNetProject;
+ propertyGroup = project.MSBuildProject.GetNuGetMetadataPropertyGroup ();
+ packOnBuild = propertyGroup.GetValue ("PackOnBuild", false);
+
+ base.Initialize (dialog, dataObject);
+ }
+
+ public override void ApplyChanges ()
+ {
+ if (widget.PackOnBuild != packOnBuild) {
+ propertyGroup.SetValue ("PackOnBuild", widget.PackOnBuild, false);
+ }
+ }
+ }
+}
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.addin.xml b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.addin.xml
index d1b4a57923..8ae4e4114a 100644
--- a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.addin.xml
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.addin.xml
@@ -8,6 +8,7 @@
</Runtime>
<ConditionType id="ProjectHasNuGetMetadata" type="MonoDevelop.Packaging.ProjectHasNuGetMetadataCondition" />
+ <ConditionType id="IsDotNetProjectOnly" type="MonoDevelop.Packaging.ProjectIsDotNetProjectOnlyCondition" />
<Extension path="/MonoDevelop/ProjectModel/MSBuildItemTypes">
<DotNetProjectType
@@ -58,6 +59,13 @@
<Extension path="/MonoDevelop/ProjectModel/Gui/ItemOptionPanels">
<Section id="NuGetPackage" _label="NuGet Package">
+ <Condition id="IsDotNetProjectOnly">
+ <Section
+ id="Build"
+ _label="Build"
+ fill="true"
+ class="MonoDevelop.Packaging.OptionPanels.ProjectNuGetBuildOptionsPanel" />
+ </Condition>
<Condition id="ItemType" value="MonoDevelop.Packaging.PackagingProject|DotNetProject">
<Section
id="Metadata"
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.csproj b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.csproj
index 654b59977e..a36d478cec 100644
--- a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.csproj
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging.csproj
@@ -114,6 +114,12 @@
<Compile Include="MonoDevelop.Packaging\NuGetProjectReferencePropertyDescriptor.cs" />
<Compile Include="MonoDevelop.Packaging\DotNetProjectPackagingExtension.cs" />
<Compile Include="MonoDevelop.Packaging\CreateNuGetPackageBuildTarget.cs" />
+ <Compile Include="MonoDevelop.Packaging.Gui\GtkProjectNuGetBuildOptionsPanelWidget.cs" />
+ <Compile Include="MonoDevelop.Packaging.Gui\GtkProjectNuGetBuildOptionsPanelWidget.UI.cs">
+ <DependentUpon>GtkProjectNuGetBuildOptionsPanelWidget.cs</DependentUpon>
+ </Compile>
+ <Compile Include="MonoDevelop.Packaging.OptionPanels\ProjectNuGetBuildOptionsPanel.cs" />
+ <Compile Include="MonoDevelop.Packaging\ProjectIsDotNetProjectOnlyCondition.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\core\MonoDevelop.Core\MonoDevelop.Core.csproj">
diff --git a/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging/ProjectIsDotNetProjectOnlyCondition.cs b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging/ProjectIsDotNetProjectOnlyCondition.cs
new file mode 100644
index 0000000000..395fbdd672
--- /dev/null
+++ b/main/src/addins/MonoDevelop.Packaging/MonoDevelop.Packaging/ProjectIsDotNetProjectOnlyCondition.cs
@@ -0,0 +1,51 @@
+//
+// ProjectIsDotNetProjectOnlyCondition.cs
+//
+// Author:
+// Matt Ward <matt.ward@xamarin.com>
+//
+// Copyright (c) 2016 Xamarin Inc. (http://xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using Mono.Addins;
+using MonoDevelop.Ide;
+using MonoDevelop.Projects;
+
+namespace MonoDevelop.Packaging
+{
+ class ProjectIsDotNetProjectOnlyCondition : ConditionType
+ {
+ public ProjectIsDotNetProjectOnlyCondition ()
+ {
+ IdeApp.ProjectOperations.CurrentProjectChanged += delegate { NotifyChanged (); };
+ }
+
+ public override bool Evaluate (NodeElement conditionNode)
+ {
+ var project = IdeApp.ProjectOperations.CurrentSelectedProject as DotNetProject;
+ if (project is PackagingProject) {
+ return false;
+ } else if (project != null) {
+ return true;
+ }
+ return false;
+ }
+ }
+}