I am attempting to get the code below to place a row at the top of the chart window
I can't see where I am going wrong. it compiles just doesn;t produce anything.
It looks relatively simple but any help much appreciated, as I just can't see where i am going wrong.
#region Using declarations
using System;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.Tools;
using System.Windows.Controls;
#endregion
#region -- the code --
namespace NinjaTrader.NinjaScript.AddOns.NinjaAddons
{
public class NinjaAddonsToolBar : AddOnBase
{
//---------------- Fields / Const -------------------
#region -- Constantes Values based on NT UI (can be modified in other NT8 release) --
private const int DRAWINGTOOLS_INDEX = 3;
private const double ITEM_WIDTH = 20;
private const string STAYINDRAWMODE_HEADER = "Stay In Draw Mode";
private const string DRAWINGOBJECTS_HEADER = "Drawing Objects...";
private const string SNAPMODE_HEADER = "Snap Mode";
private string[] MISC_HEADERS = new string[1] { "Risk-Reward",};//"Region Highlight X", "Region Highlight Y" };
private string[] LINE_HEADERS = new string[4] { "Line", "Ray", "Arrow Line", "Horizontal Line"};// "Vertical Line" };
// private string[] LINE_HEADERS = new string[5] { "Line", "Ray", "Extended Line", "Arrow Line", "Horizontal Line"};// "Vertical Line" };
// private string[] FIBS_HEADERS = new string[4] { "Fibonacci Retracements", "Fibonacci Extensions", "Fibonacci Time Extensions", "Fibonacci Circle" };
// private string[] CHANNELS_HEADERS = new string[5] { "Andrew's Pitchfork", "Gann Fan", "Regression Channel", "Trend Channel", "Time Cycles" };
private string[] SHAPES_HEADERS = new string[3] { "Ellipse", "Rectangle", "Text" };
// private string[] SHAPES_HEADERS = new string[7] { "Ellipse", "Rectangle", "Triangle", "Polygon", "Order Flow Volume Profile", "Arc", "Text" };
private const string CHARTMARKER_HEADER = "Chart Marker";
private const string ARROWUP_HEADER = "Arrow Up";
private const string ARROWDOWN_HEADER = "Arrow Down";
private const string TRIANGLEUP_HEADER = "Triangle Up";
private const string TRIANGLEDOWN_HEADER = "Triangle Down";
private const string REMOVEOBJECTS_HEADER = "Remove All Drawing Objects";
#endregion
private const string TOOLBARSHORTCUT_NAME = "ShortCutToolbar";
//---------------- virtuals -------------------
#region -- protected override void OnStateChange() --
protected override void OnStateChange()
{
if (State == State.SetDefaults) Name = "Toolbar Shortcut by NinjaAddons.com";
}
#endregion
#region -- protected override void OnWindowCreated(Window window) --
protected override void OnWindowCreated(Window window)
{
if (window != null)
{
window.Dispatcher.InvokeAsync((Action)(() =>
{
var chart = window as Gui.Chart.Chart;
if (chart == null) return;
var chartGrid = (chart.FindFirst("ChartWindowChartTraderControl") as ChartTrader).Parent as Grid;
if (chartGrid == null) return;
//if toolbar already exists, do not recreate it
foreach (var v in chartGrid.Children)
if (v is VirtualizingStackPanel && (v as VirtualizingStackPanel).Uid == TOOLBARSHORTCUT_NAME) return;
#region -- Create Toolbar Container --
VirtualizingStackPanel verticalStackPanel = new VirtualizingStackPanel()
{
Name = TOOLBARSHORTCUT_NAME,
Uid = TOOLBARSHORTCUT_NAME,
Orientation = System.Windows.Controls.Orientation.Horizontal,
VerticalAlignment = VerticalAlignment.Stretch,
HorizontalAlignment = HorizontalAlignment.Stretch,
Margin = new Thickness(0, 0, 7, 0)//Margin is used for separators
};
#endregion
#region -- Get all Drawing Items and Copy there Style and Events to new Drawing Items --
NTMenuItem ntDrawingTools = ((Menu)chart.MainMenu[DRAWINGTOOLS_INDEX]).Items[0] as NTMenuItem;
foreach (var item in ntDrawingTools.Items)
{
if (item is NTMenuItem && ((NTMenuItem)item).Header != null)
{
NTMenuItem mnItem = item as NTMenuItem;
Print(mnItem.Header.ToString());
if (mnItem.Header.ToString() == STAYINDRAWMODE_HEADER || mnItem.Header.ToString() == DRAWINGOBJECTS_HEADER || mnItem.Header.ToString() == SNAPMODE_HEADER) continue;
#region -- Add Misc --
else if (MISC_HEADERS.Contains(mnItem.Header.ToString()))
{
verticalStackPanel.Children.Add(new NTMenuItem()
{
ToolTip = mnItem.Header,
Style = mnItem.Style,
Icon = mnItem.Icon,
Command = mnItem.Command,
Margin = new Thickness(1),
Width = ITEM_WIDTH,
HorizontalAlignment =
HorizontalAlignment.Left
});
if (mnItem.Header.ToString() == MISC_HEADERS.Last()) verticalStackPanel.Children.Add(new Separator());
}
#endregion
#region -- Add Lines --
else if (LINE_HEADERS.Contains(mnItem.Header.ToString()))
{
verticalStackPanel.Children.Add(new NTMenuItem()
{
ToolTip = mnItem.Header,
Style = mnItem.Style,
Icon = mnItem.Icon,
Command = mnItem.Command,
Margin = new Thickness(1),
Width = ITEM_WIDTH,
HorizontalAlignment =
HorizontalAlignment.Left
});
if (mnItem.Header.ToString() == LINE_HEADERS.Last()) verticalStackPanel.Children.Add(new Separator());
}
#endregion
#region -- Add Shapes --
else if (SHAPES_HEADERS.Contains(mnItem.Header.ToString()) )
{
verticalStackPanel.Children.Add(new NTMenuItem()
{
ToolTip = mnItem.Header,
Style = mnItem.Style,
Icon = mnItem.Icon,
Command = mnItem.Command,
Margin = new Thickness(1),
Width = ITEM_WIDTH,
HorizontalAlignment =
HorizontalAlignment.Left
});
if (mnItem.Header.ToString() == SHAPES_HEADERS.Last()) verticalStackPanel.Children.Add(new Separator());
}
#endregion
#region -- Add Markers --
else if (mnItem.Header.ToString() == CHARTMARKER_HEADER)
{
foreach (var subitem in mnItem.Items)
{
if (subitem is NTMenuItem)
{
NTMenuItem subitemMnItem = subitem as NTMenuItem;
NTMenuItem newSubItem = new NTMenuItem()
{
ToolTip = subitemMnItem.Header,
Style = subitemMnItem.Style,
Icon = subitemMnItem.Icon,
Command = subitemMnItem.Command,
Margin = new Thickness(1),
Width = ITEM_WIDTH,
HorizontalAlignment = HorizontalAlignment.Left
};
if (subitemMnItem.Header.ToString() == ARROWUP_HEADER || subitemMnItem.Header.ToString() == TRIANGLEUP_HEADER)
newSubItem.Foreground = Brushes.Green;
else if (subitemMnItem.Header.ToString() == ARROWDOWN_HEADER || subitemMnItem.Header.ToString() == TRIANGLEDOWN_HEADER)
newSubItem.Foreground = Brushes.Red;
verticalStackPanel.Children.Add(newSubItem);
}
}
verticalStackPanel.Children.Add(new Separator());
}
#endregion
#region -- Add Remove Objects --
else if (mnItem.Header.ToString() == REMOVEOBJECTS_HEADER)
{
verticalStackPanel.Children.Add(new NTMenuItem()
{
ToolTip = mnItem.Header,
Style = mnItem.Style,
Icon = mnItem.Icon,
Command = mnItem.Command,
Margin = new Thickness(1),
Width = ITEM_WIDTH,
HorizontalAlignment =
HorizontalAlignment.Left
});
}
#endregion
}
}
#endregion
#region -- Add Toolbar in first column of chart grid --
chartGrid.RowDefinitions.Insert(0,new RowDefinition());
chartGrid.RowDefinitions[0].Height = new GridLength(ITEM_WIDTH + 12);
chartGrid.Margin = new Thickness(0);
// loop over existing items and move those to the newly created columns and rows
for (int i = 0; i < chartGrid.Children.Count; i++)
Grid.SetRow(chartGrid.Children[i], Grid.GetRow(chartGrid.Children[i]) + 1);
chartGrid.Children.Add(verticalStackPanel);
//Move Existing Elements down one row, since our new content will take the top row
foreach (UIElement element in chartGrid.Children)
{
element.SetValue(Grid.RowProperty, (int)element.GetValue(Grid.RowProperty) + 1);
}
Grid.SetRow(verticalStackPanel,0);
#endregion
}));
}
}
private void Tmp_Click(object sender, RoutedEventArgs e)
{
throw new NotImplementedException();
}
#endregion
#region -- protected override void OnWindowDestroyed(Window window) --
protected override void OnWindowDestroyed(Window window)
{
var chart = window as Chart;
if (chart == null) return;
var chartGrid = (chart.FindFirst("ChartWindowChartTraderControl") as ChartTrader).Parent as Grid;
if (chartGrid == null) return;
VirtualizingStackPanel verticalStackPanel = null;
foreach (var v in chartGrid.Children)
if (v is VirtualizingStackPanel && (v as VirtualizingStackPanel).Uid == "ShortCutToolbar") { verticalStackPanel = v as VirtualizingStackPanel; break; }
if (verticalStackPanel != null)
chartGrid.Children.Remove(verticalStackPanel);
for (int i = 0; i < chartGrid.ColumnDefinitions.Count - 1; i++)
chartGrid.RowDefinitions[i].Height = chartGrid.RowDefinitions[i + 1].Height;
for (int i = 0; i < chartGrid.Children.Count; i++)
// if ((Grid.GetColumn(chartGrid.Children[i]) - 1) >= 0)
// Grid.SetColumn(chartGrid.Children[i], Grid.GetColumn(chartGrid.Children[i]) - 1);
if ((Grid.GetRow(chartGrid.Children[i]) - 1) >= 0)
Grid.SetRow(chartGrid.Children[i], Grid.GetRow(chartGrid.Children[i]) - 1);
chartGrid.RowDefinitions.RemoveRange(chartGrid.Row Definitions.Count - 1, 1);
}
#endregion
}
}
#endregion

Comment