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

138 lines
4.3 KiB
C#

/* ****************************************************************************
*
* Copyright (c) Microsoft Corporation.
*
* This source code is subject to terms and conditions of the Apache License, Version 2.0. A
* copy of the license can be found in the License.html file at the root of this distribution. If
* you cannot locate the Apache License, Version 2.0, please send an email to
* vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
* by the terms of the Apache License, Version 2.0.
*
* You must not remove this notice, or any other, from this software.
*
* ***************************************************************************/
using System;
using System.Collections;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.OLE.Interop;
namespace Microsoft.VisualStudio.Project {
/// <summary>
/// Base class for property pages based on a WinForm control.
/// </summary>
[ComVisible(true)]
public abstract class PropertyPage : IPropertyPage {
private IPropertyPageSite _site;
private bool _dirty, _loading;
public abstract Control Control {
get;
}
public abstract void Apply();
public abstract string Name
{
get;
}
public bool Loading {
get {
return _loading;
}
set {
_loading = value;
}
}
public bool IsDirty {
get {
return _dirty;
}
set {
if (_dirty != value && !Loading) {
_dirty = value;
if (_site != null) {
_site.OnStatusChange((uint)(_dirty ? PropPageStatus.Dirty : PropPageStatus.Clean));
}
}
}
}
void IPropertyPage.Activate(IntPtr hWndParent, RECT[] pRect, int bModal) {
NativeMethods.SetParent(Control.Handle, hWndParent);
}
int IPropertyPage.Apply() {
try {
Apply();
return VSConstants.S_OK;
} catch (Exception e) {
return Marshal.GetHRForException(e);
}
}
void IPropertyPage.Deactivate() {
Control.Dispose();
}
void IPropertyPage.GetPageInfo(PROPPAGEINFO[] pPageInfo) {
VsUtilities.ArgumentNotNull("pPageInfo", pPageInfo);
PROPPAGEINFO info = new PROPPAGEINFO();
info.cb = (uint)Marshal.SizeOf(typeof(PROPPAGEINFO));
info.dwHelpContext = 0;
info.pszDocString = null;
info.pszHelpFile = null;
info.pszTitle = Name;
info.SIZE.cx = Control.Width;
info.SIZE.cy = Control.Height;
pPageInfo[0] = info;
}
void IPropertyPage.Help(string pszHelpDir) {
}
int IPropertyPage.IsPageDirty() {
return (IsDirty ? (int)VSConstants.S_OK : (int)VSConstants.S_FALSE);
}
void IPropertyPage.Move(RECT[] pRect) {
VsUtilities.ArgumentNotNull("pRect", pRect);
RECT r = pRect[0];
Control.Location = new Point(r.left, r.top);
Control.Size = new Size(r.right - r.left, r.bottom - r.top);
}
public abstract void SetObjects(uint count, object[] punk);
void IPropertyPage.SetPageSite(IPropertyPageSite pPageSite) {
_site = pPageSite;
}
void IPropertyPage.Show(uint nCmdShow) {
Control.Visible = true; // TODO: pass SW_SHOW* flags through
Control.Show();
}
int IPropertyPage.TranslateAccelerator(MSG[] pMsg) {
VsUtilities.ArgumentNotNull("pMsg", pMsg);
MSG msg = pMsg[0];
if ((msg.message < NativeMethods.WM_KEYFIRST || msg.message > NativeMethods.WM_KEYLAST) && (msg.message < NativeMethods.WM_MOUSEFIRST || msg.message > NativeMethods.WM_MOUSELAST)) {
return VSConstants.S_FALSE;
}
return (NativeMethods.IsDialogMessageA(Control.Handle, ref msg)) ? VSConstants.S_OK : VSConstants.S_FALSE;
}
}
}