Update: Since the above link is broken, I put the file in the attachment.
BarViewer.Indicator.cs
Code: Select all
// Add a reference to Jeff Key's Object State Browser control.
// Download it from http://www.sliver.com/dotnet/statebrowser/
using System;
using System.Windows.Forms;
using sliver.Windows.Forms;
namespace PowerLanguage.Indicator
{
[SameAsSymbol(true), MouseEvents(true)]
public class BarViewer : IndicatorObject
{
public BarViewer(object _ctx) : base(_ctx) { }
protected override void Create()
{
}
private bool _isInitialized;
protected override void StartCalc()
{
RunOnce(ref _isInitialized, () => {
MessageBox.Show("Open Expert Commentary and CTRL-Click on a bar to view its properties.",
"BarViewer Indicator", MessageBoxButtons.OK, MessageBoxIcon.Information);
});
}
protected override void CalcBar()
{
if (ExpertCommentary.AtCommentaryBar)
{
this.ShowStateBrowserForm(Bars);
}
}
protected override void OnMouseEvent(MouseClickArgs args)
{
if (args.buttons == MouseButtons.Left && args.keys == Keys.Control)
{
this.ShowStateBrowserForm(args.point);
}
}
private StateBrowserForm _stateBrowser;
private void ShowStateBrowserForm(object objectToBrowse)
{
if (this._stateBrowser == null || this._stateBrowser.IsDisposed)
{
this._stateBrowser = new StateBrowserForm();
}
var osb = this._stateBrowser;
osb.ObjectToBrowse = objectToBrowse;
osb.BoldMemberNames.AddRange(new []{ "OpenValue", "HighValue", "LowValue", "CloseValue", "TimeValue" });
osb.BoldMemberTypes.AddRange(new []{ typeof(ISeries<double>) });
osb.ShowDataTypes = false;
osb.ShowNonPublicMembers = false;
osb.ShowStaticMembers = true;
osb.TopLevel = true;
osb.TopMost = true;
osb.Show();
osb.BringToFront();
}
private void RunOnce(ref bool flag, Action action)
{
if (!flag)
{
action();
flag = true;
};
}
protected override void StopCalc()
{
this._stateBrowser.Close();
this._stateBrowser.Dispose();
}
}
}
Cheers,
orad