diff options
Diffstat (limited to 'main/src/addins/MonoDevelop.Packaging')
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; + } + } +} |