3.0.0.6
This commit is contained in:
parent
1f85d9c6f0
commit
1ddfc9fbdf
6 changed files with 2 additions and 3199 deletions
|
|
@ -1,96 +0,0 @@
|
|||
using System;
|
||||
using MyClasses.MetaViewWrappers;
|
||||
|
||||
namespace MosswartMassacre
|
||||
{
|
||||
internal static class MainView
|
||||
{
|
||||
private static IView View;
|
||||
private static IStaticText lblTotalKills;
|
||||
private static IStaticText lblKillsPer5Min;
|
||||
private static IStaticText lblKillsPerHour;
|
||||
private static IStaticText lblElapsedTime;
|
||||
private static IStaticText lblRareCount;
|
||||
private static IButton btnRestart;
|
||||
private static IButton btnToggleRareMeta;
|
||||
|
||||
public static void ViewInit()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Load the view from the embedded XML resource
|
||||
View = MyClasses.MetaViewWrappers.ViewSystemSelector.CreateViewResource(
|
||||
PluginCore.MyHost, "MosswartMassacre.ViewXML.mainView.xml");
|
||||
|
||||
// Get references to controls
|
||||
lblTotalKills = (IStaticText)View["lblTotalKills"];
|
||||
lblKillsPer5Min = (IStaticText)View["lblKillsPer5Min"];
|
||||
lblKillsPerHour = (IStaticText)View["lblKillsPerHour"];
|
||||
lblElapsedTime = (IStaticText)View["lblElapsedTime"];
|
||||
lblRareCount = (IStaticText)View["lblRareCount"];
|
||||
btnRestart = (IButton)View["btnRestart"];
|
||||
btnRestart.Hit += OnRestartClick;
|
||||
btnToggleRareMeta = (IButton)View["btnToggleRareMeta"];
|
||||
btnToggleRareMeta.Hit += OnToggleRareMetaClick;
|
||||
btnToggleRareMeta.Text = "Meta: ON";
|
||||
|
||||
PluginCore.WriteToChat("View initialized.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PluginCore.WriteToChat("Error initializing view: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void ViewDestroy()
|
||||
{
|
||||
try
|
||||
{
|
||||
View.Dispose();
|
||||
PluginCore.WriteToChat("View destroyed.");
|
||||
btnRestart.Hit -= OnRestartClick;
|
||||
btnToggleRareMeta.Hit -= OnToggleRareMetaClick;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
PluginCore.WriteToChat("Error destroying view: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdateKillStats(int totalKills, double killsPer5Min, double killsPerHour)
|
||||
{
|
||||
lblTotalKills.Text = $"Total Kills: {totalKills}";
|
||||
lblKillsPer5Min.Text = $"Kills per 5 Min: {killsPer5Min:F2}";
|
||||
lblKillsPerHour.Text = $"Kills per Hour: {killsPerHour:F2}";
|
||||
}
|
||||
|
||||
public static void UpdateElapsedTime(TimeSpan elapsed)
|
||||
{
|
||||
int days = elapsed.Days;
|
||||
int hours = elapsed.Hours;
|
||||
int minutes = elapsed.Minutes;
|
||||
int seconds = elapsed.Seconds;
|
||||
|
||||
if (days > 0)
|
||||
lblElapsedTime.Text = $"Time: {days}d {hours:D2}:{minutes:D2}:{seconds:D2}";
|
||||
else
|
||||
lblElapsedTime.Text = $"Time: {hours:D2}:{minutes:D2}:{seconds:D2}";
|
||||
}
|
||||
public static void UpdateRareCount(int rareCount)
|
||||
{
|
||||
lblRareCount.Text = $"Rare Count: {rareCount}";
|
||||
}
|
||||
private static void OnRestartClick(object sender, EventArgs e)
|
||||
{
|
||||
PluginCore.RestartStats();
|
||||
}
|
||||
private static void OnToggleRareMetaClick(object sender, EventArgs e)
|
||||
{
|
||||
PluginCore.ToggleRareMeta();
|
||||
}
|
||||
public static void SetRareMetaToggleState(bool enabled)
|
||||
{
|
||||
btnToggleRareMeta.Text = enabled ? "Meta: ON" : "Meta: OFF";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -26,5 +26,5 @@ using System.Runtime.InteropServices;
|
|||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
[assembly: AssemblyVersion("3.0.0.5")]
|
||||
[assembly: AssemblyFileVersion("3.0.0.5")]
|
||||
[assembly: AssemblyVersion("3.0.0.6")]
|
||||
[assembly: AssemblyFileVersion("3.0.0.6")]
|
||||
|
|
@ -1,427 +0,0 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
//File: Wrapper.cs
|
||||
//
|
||||
//Description: Contains the interface definitions for the MetaViewWrappers classes.
|
||||
//
|
||||
//References required:
|
||||
// System.Drawing
|
||||
//
|
||||
//This file is Copyright (c) 2010 VirindiPlugins
|
||||
//
|
||||
//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;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
#if METAVIEW_PUBLIC_NS
|
||||
namespace MetaViewWrappers
|
||||
#else
|
||||
namespace MyClasses.MetaViewWrappers
|
||||
#endif
|
||||
{
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
delegate void dClickedList(object sender, int row, int col);
|
||||
|
||||
|
||||
#region EventArgs Classes
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVControlEventArgs : EventArgs
|
||||
{
|
||||
private int id;
|
||||
|
||||
internal MVControlEventArgs(int ID)
|
||||
{
|
||||
this.id = ID;
|
||||
}
|
||||
|
||||
public int Id
|
||||
{
|
||||
get { return this.id; }
|
||||
}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVIndexChangeEventArgs : MVControlEventArgs
|
||||
{
|
||||
private int index;
|
||||
|
||||
internal MVIndexChangeEventArgs(int ID, int Index)
|
||||
: base(ID)
|
||||
{
|
||||
this.index = Index;
|
||||
}
|
||||
|
||||
public int Index
|
||||
{
|
||||
get { return this.index; }
|
||||
}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVListSelectEventArgs : MVControlEventArgs
|
||||
{
|
||||
private int row;
|
||||
private int col;
|
||||
|
||||
internal MVListSelectEventArgs(int ID, int Row, int Column)
|
||||
: base(ID)
|
||||
{
|
||||
this.row = Row;
|
||||
this.col = Column;
|
||||
}
|
||||
|
||||
public int Row
|
||||
{
|
||||
get { return this.row; }
|
||||
}
|
||||
|
||||
public int Column
|
||||
{
|
||||
get { return this.col; }
|
||||
}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVCheckBoxChangeEventArgs : MVControlEventArgs
|
||||
{
|
||||
private bool check;
|
||||
|
||||
internal MVCheckBoxChangeEventArgs(int ID, bool Check)
|
||||
: base(ID)
|
||||
{
|
||||
this.check = Check;
|
||||
}
|
||||
|
||||
public bool Checked
|
||||
{
|
||||
get { return this.check; }
|
||||
}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVTextBoxChangeEventArgs : MVControlEventArgs
|
||||
{
|
||||
private string text;
|
||||
|
||||
internal MVTextBoxChangeEventArgs(int ID, string text)
|
||||
: base(ID)
|
||||
{
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public string Text
|
||||
{
|
||||
get { return this.text; }
|
||||
}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
class MVTextBoxEndEventArgs : MVControlEventArgs
|
||||
{
|
||||
private bool success;
|
||||
|
||||
internal MVTextBoxEndEventArgs(int ID, bool success)
|
||||
: base(ID)
|
||||
{
|
||||
this.success = success;
|
||||
}
|
||||
|
||||
public bool Success
|
||||
{
|
||||
get { return this.success; }
|
||||
}
|
||||
}
|
||||
|
||||
#endregion EventArgs Classes
|
||||
|
||||
|
||||
#region View
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IView: IDisposable
|
||||
{
|
||||
void Initialize(Decal.Adapter.Wrappers.PluginHost p, string pXML);
|
||||
void InitializeRawXML(Decal.Adapter.Wrappers.PluginHost p, string pXML);
|
||||
void Initialize(Decal.Adapter.Wrappers.PluginHost p, string pXML, string pWindowKey);
|
||||
void InitializeRawXML(Decal.Adapter.Wrappers.PluginHost p, string pXML, string pWindowKey);
|
||||
|
||||
void SetIcon(int icon, int iconlibrary);
|
||||
void SetIcon(int portalicon);
|
||||
|
||||
string Title { get; set; }
|
||||
bool Visible { get; set; }
|
||||
#if !VVS_WRAPPERS_PUBLIC
|
||||
ViewSystemSelector.eViewSystem ViewType { get; }
|
||||
#endif
|
||||
|
||||
System.Drawing.Point Location { get; set; }
|
||||
System.Drawing.Rectangle Position { get; set; }
|
||||
System.Drawing.Size Size { get; }
|
||||
|
||||
IControl this[string id] { get; }
|
||||
|
||||
void Activate();
|
||||
void Deactivate();
|
||||
bool Activated { get; set; }
|
||||
}
|
||||
|
||||
#endregion View
|
||||
|
||||
#region Controls
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IControl : IDisposable
|
||||
{
|
||||
string Name { get; }
|
||||
bool Visible { get; set; }
|
||||
string TooltipText { get; set;}
|
||||
int Id { get; }
|
||||
System.Drawing.Rectangle LayoutPosition { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IButton : IControl
|
||||
{
|
||||
string Text { get; set; }
|
||||
event EventHandler Hit;
|
||||
event EventHandler<MVControlEventArgs> Click;
|
||||
System.Drawing.Color TextColor { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface ICheckBox : IControl
|
||||
{
|
||||
string Text { get; set; }
|
||||
bool Checked { get; set; }
|
||||
event EventHandler<MVCheckBoxChangeEventArgs> Change;
|
||||
event EventHandler Change_Old;
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface ITextBox : IControl
|
||||
{
|
||||
string Text { get; set; }
|
||||
event EventHandler<MVTextBoxChangeEventArgs> Change;
|
||||
event EventHandler Change_Old;
|
||||
event EventHandler<MVTextBoxEndEventArgs> End;
|
||||
int Caret { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface ICombo : IControl
|
||||
{
|
||||
IComboIndexer Text { get; }
|
||||
IComboDataIndexer Data { get; }
|
||||
int Count { get; }
|
||||
int Selected { get; set; }
|
||||
event EventHandler<MVIndexChangeEventArgs> Change;
|
||||
event EventHandler Change_Old;
|
||||
void Add(string text);
|
||||
void Add(string text, object obj);
|
||||
void Insert(int index, string text);
|
||||
void RemoveAt(int index);
|
||||
void Remove(int index);
|
||||
void Clear();
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IComboIndexer
|
||||
{
|
||||
string this[int index] { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IComboDataIndexer
|
||||
{
|
||||
object this[int index] { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface ISlider : IControl
|
||||
{
|
||||
int Position { get; set; }
|
||||
event EventHandler<MVIndexChangeEventArgs> Change;
|
||||
event EventHandler Change_Old;
|
||||
int Maximum { get; set; }
|
||||
int Minimum { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IList : IControl
|
||||
{
|
||||
event EventHandler<MVListSelectEventArgs> Selected;
|
||||
event dClickedList Click;
|
||||
void Clear();
|
||||
IListRow this[int row] { get; }
|
||||
IListRow AddRow();
|
||||
IListRow Add();
|
||||
IListRow InsertRow(int pos);
|
||||
IListRow Insert(int pos);
|
||||
int RowCount { get; }
|
||||
void RemoveRow(int index);
|
||||
void Delete(int index);
|
||||
int ColCount { get; }
|
||||
int ScrollPosition { get; set;}
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IListRow
|
||||
{
|
||||
IListCell this[int col] { get; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IListCell
|
||||
{
|
||||
System.Drawing.Color Color { get; set; }
|
||||
int Width { get; set; }
|
||||
object this[int subval] { get; set; }
|
||||
void ResetColor();
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IStaticText : IControl
|
||||
{
|
||||
string Text { get; set; }
|
||||
event EventHandler<MVControlEventArgs> Click;
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface INotebook : IControl
|
||||
{
|
||||
event EventHandler<MVIndexChangeEventArgs> Change;
|
||||
int ActiveTab { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IProgressBar : IControl
|
||||
{
|
||||
int Position { get; set; }
|
||||
int Value { get; set; }
|
||||
string PreText { get; set; }
|
||||
int MaxValue { get; set; }
|
||||
}
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
interface IImageButton : IControl
|
||||
{
|
||||
event EventHandler<MVControlEventArgs> Click;
|
||||
void SetImages(int unpressed, int pressed);
|
||||
void SetImages(int hmodule, int unpressed, int pressed);
|
||||
int Background { set; }
|
||||
System.Drawing.Color Matte { set; }
|
||||
}
|
||||
|
||||
#endregion Controls
|
||||
}
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,329 +0,0 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
//File: Wrapper_WireupHelper.cs
|
||||
//
|
||||
//Description: A helper utility that emulates Decal.Adapter's automagic view
|
||||
// creation and control/event wireup with the MetaViewWrappers. A separate set
|
||||
// of attributes is used.
|
||||
//
|
||||
//References required:
|
||||
// Wrapper.cs
|
||||
//
|
||||
//This file is Copyright (c) 2010 VirindiPlugins
|
||||
//
|
||||
//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;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
|
||||
#if METAVIEW_PUBLIC_NS
|
||||
namespace MetaViewWrappers
|
||||
#else
|
||||
namespace MyClasses.MetaViewWrappers
|
||||
#endif
|
||||
{
|
||||
#region Attribute Definitions
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class)]
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
sealed class MVWireUpControlEventsAttribute : Attribute
|
||||
{
|
||||
public MVWireUpControlEventsAttribute() { }
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field)]
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
sealed class MVControlReferenceAttribute : Attribute
|
||||
{
|
||||
string ctrl;
|
||||
|
||||
// Summary:
|
||||
// Construct a new ControlReference
|
||||
//
|
||||
// Parameters:
|
||||
// control:
|
||||
// Control to reference
|
||||
public MVControlReferenceAttribute(string control)
|
||||
{
|
||||
ctrl = control;
|
||||
}
|
||||
|
||||
// Summary:
|
||||
// The Control Name
|
||||
public string Control
|
||||
{
|
||||
get
|
||||
{
|
||||
return ctrl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Field)]
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
sealed class MVControlReferenceArrayAttribute : Attribute
|
||||
{
|
||||
private System.Collections.ObjectModel.Collection<string> myControls;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs a new ControlReference array
|
||||
/// </summary>
|
||||
/// <param name="controls">Names of the controls to put in the array</param>
|
||||
public MVControlReferenceArrayAttribute(params string[] controls)
|
||||
: base()
|
||||
{
|
||||
this.myControls = new System.Collections.ObjectModel.Collection<string>(controls);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Control collection
|
||||
/// </summary>
|
||||
public System.Collections.ObjectModel.Collection<string> Controls
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.myControls;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
sealed class MVViewAttribute : Attribute
|
||||
{
|
||||
string res;
|
||||
|
||||
// Summary:
|
||||
// Constructs a new view from the specified resource
|
||||
//
|
||||
// Parameters:
|
||||
// Resource:
|
||||
// Embedded resource path
|
||||
public MVViewAttribute(string resource)
|
||||
{
|
||||
res = resource;
|
||||
}
|
||||
|
||||
// Summary:
|
||||
// The resource to load
|
||||
public string Resource
|
||||
{
|
||||
get
|
||||
{
|
||||
return res;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
sealed class MVControlEventAttribute : Attribute
|
||||
{
|
||||
string c;
|
||||
string e;
|
||||
// Summary:
|
||||
// Constructs the ControlEvent
|
||||
//
|
||||
// Parameters:
|
||||
// control:
|
||||
// Control Name
|
||||
//
|
||||
// controlEvent:
|
||||
// Event to Wire
|
||||
public MVControlEventAttribute(string control, string eventName)
|
||||
{
|
||||
c = control;
|
||||
e = eventName;
|
||||
}
|
||||
|
||||
// Summary:
|
||||
// Control Name
|
||||
public string Control
|
||||
{
|
||||
get
|
||||
{
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Summary:
|
||||
// Event to Wire
|
||||
public string EventName
|
||||
{
|
||||
get
|
||||
{
|
||||
return e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Attribute Definitions
|
||||
|
||||
#if VVS_WRAPPERS_PUBLIC
|
||||
public
|
||||
#else
|
||||
internal
|
||||
#endif
|
||||
static class MVWireupHelper
|
||||
{
|
||||
private class ViewObjectInfo
|
||||
{
|
||||
public List<MyClasses.MetaViewWrappers.IView> Views = new List<IView>();
|
||||
}
|
||||
static Dictionary<object, ViewObjectInfo> VInfo = new Dictionary<object, ViewObjectInfo>();
|
||||
|
||||
public static MyClasses.MetaViewWrappers.IView GetDefaultView(object ViewObj)
|
||||
{
|
||||
if (!VInfo.ContainsKey(ViewObj))
|
||||
return null;
|
||||
if (VInfo[ViewObj].Views.Count == 0)
|
||||
return null;
|
||||
return VInfo[ViewObj].Views[0];
|
||||
}
|
||||
|
||||
public static void WireupStart(object ViewObj, Decal.Adapter.Wrappers.PluginHost Host)
|
||||
{
|
||||
if (VInfo.ContainsKey(ViewObj))
|
||||
WireupEnd(ViewObj);
|
||||
ViewObjectInfo info = new ViewObjectInfo();
|
||||
VInfo[ViewObj] = info;
|
||||
|
||||
Type ObjType = ViewObj.GetType();
|
||||
|
||||
//Start views
|
||||
object[] viewattrs = ObjType.GetCustomAttributes(typeof(MVViewAttribute), true);
|
||||
foreach (MVViewAttribute a in viewattrs)
|
||||
{
|
||||
info.Views.Add(MyClasses.MetaViewWrappers.ViewSystemSelector.CreateViewResource(Host, a.Resource));
|
||||
}
|
||||
|
||||
//Wire up control references
|
||||
foreach (FieldInfo fi in ObjType.GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy))
|
||||
{
|
||||
if (Attribute.IsDefined(fi, typeof(MVControlReferenceAttribute)))
|
||||
{
|
||||
MVControlReferenceAttribute attr = (MVControlReferenceAttribute)Attribute.GetCustomAttribute(fi, typeof(MVControlReferenceAttribute));
|
||||
MetaViewWrappers.IControl mycontrol = null;
|
||||
|
||||
//Try each view
|
||||
foreach (MyClasses.MetaViewWrappers.IView v in info.Views)
|
||||
{
|
||||
try
|
||||
{
|
||||
mycontrol = v[attr.Control];
|
||||
}
|
||||
catch { }
|
||||
if (mycontrol != null)
|
||||
break;
|
||||
}
|
||||
|
||||
if (mycontrol == null)
|
||||
throw new Exception("Invalid control reference \"" + attr.Control + "\"");
|
||||
|
||||
if (!fi.FieldType.IsAssignableFrom(mycontrol.GetType()))
|
||||
throw new Exception("Control reference \"" + attr.Control + "\" is of wrong type");
|
||||
|
||||
fi.SetValue(ViewObj, mycontrol);
|
||||
}
|
||||
else if (Attribute.IsDefined(fi, typeof(MVControlReferenceArrayAttribute)))
|
||||
{
|
||||
MVControlReferenceArrayAttribute attr = (MVControlReferenceArrayAttribute)Attribute.GetCustomAttribute(fi, typeof(MVControlReferenceArrayAttribute));
|
||||
|
||||
//Only do the first view
|
||||
if (info.Views.Count == 0)
|
||||
throw new Exception("No views to which a control reference can attach");
|
||||
|
||||
Array controls = Array.CreateInstance(fi.FieldType.GetElementType(), attr.Controls.Count);
|
||||
|
||||
IView view = info.Views[0];
|
||||
for (int i = 0; i < attr.Controls.Count; ++i)
|
||||
{
|
||||
controls.SetValue(view[attr.Controls[i]], i);
|
||||
}
|
||||
|
||||
fi.SetValue(ViewObj, controls);
|
||||
}
|
||||
}
|
||||
|
||||
//Wire up events
|
||||
foreach (MethodInfo mi in ObjType.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy))
|
||||
{
|
||||
if (!Attribute.IsDefined(mi, typeof(MVControlEventAttribute)))
|
||||
continue;
|
||||
Attribute[] attrs = Attribute.GetCustomAttributes(mi, typeof(MVControlEventAttribute));
|
||||
|
||||
foreach (MVControlEventAttribute attr in attrs)
|
||||
{
|
||||
MetaViewWrappers.IControl mycontrol = null;
|
||||
//Try each view
|
||||
foreach (MyClasses.MetaViewWrappers.IView v in info.Views)
|
||||
{
|
||||
try
|
||||
{
|
||||
mycontrol = v[attr.Control];
|
||||
}
|
||||
catch { }
|
||||
if (mycontrol != null)
|
||||
break;
|
||||
}
|
||||
|
||||
if (mycontrol == null)
|
||||
throw new Exception("Invalid control reference \"" + attr.Control + "\"");
|
||||
|
||||
EventInfo ei = mycontrol.GetType().GetEvent(attr.EventName);
|
||||
ei.AddEventHandler(mycontrol, Delegate.CreateDelegate(ei.EventHandlerType, ViewObj, mi.Name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void WireupEnd(object ViewObj)
|
||||
{
|
||||
if (!VInfo.ContainsKey(ViewObj))
|
||||
return;
|
||||
|
||||
foreach (MyClasses.MetaViewWrappers.IView v in VInfo[ViewObj].Views)
|
||||
v.Dispose();
|
||||
|
||||
VInfo.Remove(ViewObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue