Konstantin Koch 8287c54432 Included the Visual Studio extension and made the necessary changes to make it run.
Replaced the old VS templates with ones that offer more flexiblity.
Started replacing the Content Project for the samples with our custom project type.
Inlcuded a basic not yet working AssimpImporter.
2015-04-08 14:50:03 +02:00

175 lines
5.8 KiB
C#

using ANX.Framework.VisualStudio.Nodes;
using EnvDTE;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.OLE.Interop;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.Versioning;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ANX.Framework.VisualStudio.Controls
{
[DefaultEvent("SelectedFrameworkChanged")]
class TargetFrameworkComboBox : ComboBox
{
class InstallOtherFrameworksValue
{
static InstallOtherFrameworksValue()
{
Text = PackageResources.GetString(PackageResources.InstallOtherFrameworks);
}
public static readonly string Text;
public override string ToString()
{
return Text;
}
}
private ContentProjectNode node;
int previousCommittedValue;
public int IndexOfLastCommittedValue
{
get;
set;
}
public void RevertToPreviousCommittedValue()
{
this.SelectedIndex = previousCommittedValue;
}
public event EventHandler<EventArgs> SelectedFrameworkChanged;
public TargetFrameworkComboBox()
{
previousCommittedValue = -1;
this.IndexOfLastCommittedValue = -1;
this.SelectedIndexChanged += TargetFrameworkComboBox_SelectedIndexChanged;
}
public void SelectFramework(FrameworkName frameworkName)
{
if (frameworkName == null)
{
this.SelectedIndex = -1;
return;
}
for (int i = 0; i < Items.Count; i++)
{
object item = Items[i];
if (item is TargetFrameworkMoniker)
{
var moniker = (TargetFrameworkMoniker)item;
if (moniker.Moniker == frameworkName.FullName)
{
this.SelectedIndex = i;
break;
}
}
}
}
public FrameworkName GetSelectedFramework()
{
if (this.SelectedIndex == -1 || IsInstallOtherFrameworksSelected())
return null;
return new FrameworkName(((TargetFrameworkMoniker)this.SelectedItem).Moniker);
}
protected virtual void OnSelectedFrameworkChanged(EventArgs e)
{
if (SelectedFrameworkChanged != null)
SelectedFrameworkChanged(this, e);
}
public void Initialize(ContentProjectNode node)
{
this.node = node;
Items.Clear();
previousCommittedValue = -1;
IndexOfLastCommittedValue = -1;
SelectedIndex = -1;
try
{
Microsoft.VisualStudio.OLE.Interop.IServiceProvider serviceInterface = null;
ErrorHandler.ThrowOnFailure(this.node.GetSite(out serviceInterface));
ServiceProvider serviceProvider = new ServiceProvider(serviceInterface);
IVsFrameworkMultiTargeting vsFrameworkMultiTargeting = serviceProvider.GetService(typeof(SVsFrameworkMultiTargeting).GUID) as IVsFrameworkMultiTargeting;
if (vsFrameworkMultiTargeting != null)
{
IEnumerable<TargetFrameworkMoniker> supportedTargetFrameworkMonikers = TargetFrameworkMoniker.GetSupportedTargetFrameworkMonikers(vsFrameworkMultiTargeting, (Project)this.node.GetAutomationObject());
foreach (var framework in supportedTargetFrameworkMonikers)
{
this.Items.Add(framework);
}
Items.Add(new InstallOtherFrameworksValue());
return;
}
}
catch
{
Items.Clear();
}
Enabled = false;
}
void TargetFrameworkComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.IsInstallOtherFrameworksSelected())
{
this.SelectedIndex = this.IndexOfLastCommittedValue;
this.NavigateToInstallOtherFrameworksLink();
}
else if (this.SelectedIndex != this.IndexOfLastCommittedValue)
{
previousCommittedValue = this.IndexOfLastCommittedValue;
this.IndexOfLastCommittedValue = this.SelectedIndex;
OnSelectedFrameworkChanged(EventArgs.Empty);
}
}
private bool IsInstallOtherFrameworksSelected()
{
return this.SelectedIndex >= 0 && this.Items[this.SelectedIndex] is InstallOtherFrameworksValue;
}
private void NavigateToInstallOtherFrameworksLink()
{
Microsoft.VisualStudio.OLE.Interop.IServiceProvider serviceInterface;
ErrorHandler.ThrowOnFailure(this.node.GetSite(out serviceInterface));
Microsoft.VisualStudio.Shell.ServiceProvider serviceProvider = new ServiceProvider(serviceInterface);
//Doesn't work
//var dialogService = serviceProvider.GetService(typeof(SVsFrameworkRetargetingDlg)) as IVsFrameworkRetargetingDlg;
//ErrorHandler.ThrowOnFailure(dialogService.NavigateToFrameworkDownloadUrl());
IVsUIShellOpenDocument vsUIShellOpenDocument = serviceProvider.GetService(typeof(SVsUIShellOpenDocument).GUID) as IVsUIShellOpenDocument;
if (vsUIShellOpenDocument == null)
{
return;
}
ErrorHandler.Failed(vsUIShellOpenDocument.OpenStandardPreviewer(0, PackageResources.GetString(PackageResources.InstallOtherFrameworksFWLink), VSPREVIEWRESOLUTION.PR_Default, 0));
}
}
}