-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathInformationBoxScope.cs
More file actions
146 lines (121 loc) · 4.59 KB
/
InformationBoxScope.cs
File metadata and controls
146 lines (121 loc) · 4.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// <copyright file="InformationBoxScope.cs" company="Johann Blais">
// Copyright (c) 2008 All Right Reserved
// </copyright>
// <author>Johann Blais</author>
// <summary>Represents the scope of a set of parameters for the InformationBoxes</summary>
namespace InfoBox
{
using System;
using System.Collections.Generic;
/// <summary>
/// Represents the scope of a set of parameters for the InformationBoxes.
/// </summary>
public class InformationBoxScope : IDisposable
{
#region Attributes
/// <summary>
/// Stack of all scopes
/// </summary>
private static readonly Stack<InformationBoxScope> scopesStack = new Stack<InformationBoxScope>();
/// <summary>
/// Contains the parameters defined within the scope
/// </summary>
private readonly InformationBoxScopeParameters definedParameters = new InformationBoxScopeParameters();
#endregion Attributes
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="InformationBoxScope"/> class.
/// </summary>
/// <param name="parameters">The parameters.</param>
public InformationBoxScope(InformationBoxScopeParameters parameters)
{
this.definedParameters = parameters;
scopesStack.Push(this);
}
/// <summary>
/// Initializes a new instance of the <see cref="InformationBoxScope"/> class.
/// </summary>
/// <param name="parameters">The parameters.</param>
/// <param name="behavior">The behavior.</param>
public InformationBoxScope(InformationBoxScopeParameters parameters, InformationBoxScopeBehavior behavior)
{
this.definedParameters = parameters;
this.EffectiveParameters = parameters;
if (null != Current)
{
if (behavior == InformationBoxScopeBehavior.InheritParent)
{
// Merge with the parameters defined explicitly in the direct parent
this.EffectiveParameters.Merge(Current.definedParameters);
}
else if (behavior == InformationBoxScopeBehavior.InheritAll)
{
// Merge the effective parameters from the parent
this.EffectiveParameters.Merge(Current.Parameters);
}
scopesStack.Push(this);
}
}
/// <summary>
/// Initializes a new instance of the <see cref="InformationBoxScope"/> class.
/// </summary>
public InformationBoxScope()
{
scopesStack.Push(this);
}
#endregion Constructors
#region Properties
/// <summary>
/// Gets the parameters.
/// </summary>
/// <value>The parameters.</value>
public InformationBoxScopeParameters Parameters
{
get { return this.EffectiveParameters; }
}
/// <summary>
/// Gets the current scope.
/// </summary>
/// <value>The current.</value>
internal static InformationBoxScope Current
{
get
{
if (scopesStack.Count > 0)
{
return scopesStack.Peek();
}
return null;
}
}
/// <summary>
/// Gets or sets the effective parameters.
/// </summary>
/// <value>The effective parameters.</value>
internal InformationBoxScopeParameters EffectiveParameters { get; set; }
#endregion Properties
#region Dispose
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
scopesStack.Pop();
this.Dispose(true);
GC.SuppressFinalize(this);
}
/// <summary>
/// Releases unmanaged and - optionally - managed resources
/// </summary>
/// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// Releases unmanaged resources
}
// Releases managed resources
}
#endregion Dispose
}
}