private void InitializeTreeView()
        {
            StockNode treeNode1;

             foreach (string entry in this.theme.Keys)
             {
            if (entry.ToUpper().EndsWith("GRAPH"))
            {
               GraphNode treeNode = new GraphNode(entry, this.graphMenuStrip, Color.White, Color.LightGray, true, Color.LightGray, GraphChartMode.BarChart);
               if (entry.ToUpper().Contains("VOLUME"))
               {
                  treeNode.ImageKey = "VH";
                  treeNode.SelectedImageKey = "VH";
               }
               this.treeView1.Nodes.Add(treeNode);

               foreach (string line in this.theme[entry])
               {
                  try
                  {
                     string[] fields = line.Split('|');
                     switch (fields[0].ToUpper())
                     {
                        case "GRAPH":
                           string[] colorItem = fields[1].Split(':');
                           treeNode.GraphBackgroundColor = Color.FromArgb(int.Parse(colorItem[0]), int.Parse(colorItem[1]), int.Parse(colorItem[2]), int.Parse(colorItem[3]));
                           colorItem = fields[2].Split(':');
                           treeNode.GraphTextBackgroundColor = Color.FromArgb(int.Parse(colorItem[0]), int.Parse(colorItem[1]), int.Parse(colorItem[2]), int.Parse(colorItem[3]));
                           treeNode.GraphShowGrid = bool.Parse(fields[3]);
                           colorItem = fields[4].Split(':');
                           treeNode.GraphGridColor = Color.FromArgb(int.Parse(colorItem[0]), int.Parse(colorItem[1]), int.Parse(colorItem[2]), int.Parse(colorItem[3]));
                           treeNode.GraphMode = (GraphChartMode)Enum.Parse(typeof(GraphChartMode), fields[5]);
                           if (treeNode.Text.ToUpper() == "CLOSEGRAPH")
                           {
                              if (fields.Length >= 7)
                              {
                                 treeNode.SecondaryPen = GraphCurveType.PenFromString(fields[6]);
                              }
                              else
                              {
                                 treeNode.SecondaryPen = new Pen(Color.DarkGoldenrod, 1);
                              }
                           }
                           break;
                        case "DATA":
                           if (treeNode.Text.ToUpper() == "CLOSEGRAPH")
                           {
                              if (fields[1] == "CLOSE")
                              {
                                 treeNode1 = new CurveNode(fields[1], null, GraphCurveType.PenFromString(fields[2]), bool.Parse(fields[3]));
                                 treeNode.Nodes.Add(treeNode1);
                              }
                              else
                              {
                                 if (bool.Parse(fields[3])) // Normaly Other than close is not visible...
                                 {
                                    treeNode1 = new CurveNode(fields[1], null, GraphCurveType.PenFromString(fields[2]), bool.Parse(fields[3]));
                                    treeNode.Nodes.Add(treeNode1);
                                 }
                              }
                           }
                           else
                           {
                              if (fields[1] != "VOLUME" && bool.Parse(fields[3])) // Normaly Other than close is not visible...
                              {
                                 treeNode1 = new CurveNode(fields[1], null, GraphCurveType.PenFromString(fields[2]), bool.Parse(fields[3]));
                                 treeNode.Nodes.Add(treeNode1);
                              }
                           }
                           break;
                        case "INDICATOR":
                           {
                              IStockIndicator stockIndicator = (IStockIndicator)StockViewableItemsManager.GetViewableItem(line);
                              treeNode1 = new IndicatorNode(stockIndicator.Name, this.indicatorMenuStrip, stockIndicator);
                              for (int i = 0; i < stockIndicator.SeriesCount; i++)
                              {
                                 CurveNode curveNode = new CurveNode(stockIndicator.SerieNames[i], null, stockIndicator.SeriePens[i], true, stockIndicator.SerieVisibility[i]);
                                 treeNode1.Nodes.Add(curveNode);

                                 curveNode.ImageKey = treeNode1.ImageKey;
                                 curveNode.SelectedImageKey = treeNode1.SelectedImageKey;
                              }
                              treeNode.Nodes.Add(treeNode1);
                           }
                           break;
                        case "PAINTBAR":
                           {
                              IStockPaintBar stockPaintBar = (IStockPaintBar)StockViewableItemsManager.GetViewableItem(line);
                              treeNode1 = new PaintBarsNode(stockPaintBar.Name, this.indicatorMenuStrip, stockPaintBar);
                              for (int i = 0; i < stockPaintBar.SeriesCount; i++)
                              {
                                 CurveNode curveNode = new CurveNode(stockPaintBar.SerieNames[i], null, stockPaintBar.SeriePens[i], true, stockPaintBar.SerieVisibility[i]);
                                 treeNode1.Nodes.Add(curveNode);

                                 curveNode.ImageKey = treeNode1.ImageKey;
                                 curveNode.SelectedImageKey = treeNode1.SelectedImageKey;
                              }
                              treeNode.Nodes.Add(treeNode1);
                           }
                           break;
                        case "TRAILSTOP":
                           {
                              IStockTrailStop stockTrailStop = (IStockTrailStop)StockViewableItemsManager.GetViewableItem(line);
                              treeNode1 = new TrailStopsNode(stockTrailStop.Name, this.indicatorMenuStrip, stockTrailStop);
                              for (int i = 0; i < stockTrailStop.SeriesCount; i++)
                              {
                                 CurveNode curveNode = new CurveNode(stockTrailStop.SerieNames[i], null, stockTrailStop.SeriePens[i], false, true);
                                 treeNode1.Nodes.Add(curveNode);

                                 curveNode.ImageKey = treeNode1.ImageKey;
                                 curveNode.SelectedImageKey = treeNode1.SelectedImageKey;
                              }
                              treeNode.Nodes.Add(treeNode1);
                           }
                           break;
                        case "DECORATOR":
                           {
                              IStockDecorator stockDecorator = (IStockDecorator)StockViewableItemsManager.GetViewableItem(line);
                              treeNode1 = new DecoratorNode(stockDecorator.Name, this.indicatorMenuStrip, stockDecorator);
                              for (int i = 0; i < stockDecorator.SeriesCount; i++)
                              {
                                  treeNode1.Nodes.Add(new CurveNode(stockDecorator.SerieNames[i], null, stockDecorator.SeriePens[i], true, stockDecorator.SerieVisibility[i]));
                              }
                              for (int i = 0; i < stockDecorator.EventCount; i++)
                              {
                                  treeNode1.Nodes.Add(new EventNode(stockDecorator.EventNames[i], null, stockDecorator.EventPens[i], true, stockDecorator.EventVisibility[i]));
                              }
                              foreach (TreeNode childNode in treeNode.Nodes)
                              {
                                 if (childNode.Text == stockDecorator.DecoratedItem)
                                 {
                                    childNode.Nodes.Add(treeNode1);
                                    break;
                                 }
                              }
                           }
                           break;
                        case "TRAIL":
                           {
                              IStockTrail stockTrail = (IStockTrail)StockViewableItemsManager.GetViewableItem(line);
                              treeNode1 = new TrailNode(stockTrail.Name, this.indicatorMenuStrip, stockTrail);
                              for (int i = 0; i < stockTrail.SeriesCount; i++)
                              {
                                 treeNode1.Nodes.Add(new CurveNode(stockTrail.SerieNames[i], null, stockTrail.SeriePens[i], true, true));
                              }
                              foreach (TreeNode childNode in treeNode.Nodes)
                              {
                                 if (childNode.Text == stockTrail.TrailedItem)
                                 {
                                    childNode.Nodes.Add(treeNode1);
                                    break;
                                 }
                              }
                           }
                           break;
                        case "LINE":
                           treeNode.Nodes.Add(new LineNode("LINE_" + fields[1], this.indicatorMenuStrip, GraphCurveType.PenFromString(fields[2]), float.Parse(fields[1])));
                           break;
                        default:
                           continue;
                     }
                  }
                  catch (System.Exception e)
                  {
                     StockLog.Write(e);
                  }
               }
            }
             }
             foreach (TreeNode node in this.treeView1.Nodes)
             {
            node.Expand();
             }
             this.treeView1.SelectedNode = treeView1.Nodes[0];
        }
        private void addTrailStopsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddTrailStopDlg addDlg;
             StockNode stockNode = (StockNode)this.treeView1.SelectedNode;
             switch (stockNode.Text)
             {
            case "CloseGraph":
               addDlg = new AddTrailStopDlg();
               break;
            default:
               return;
             }
             if (addDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
             {
            // Only one trail stop per graph
            int index = 0;
            bool found = false;
            foreach (StockNode node in stockNode.Nodes)
            {
               if (node.Type == NodeType.TrailStops)
               {
                  found = true;
                  break;
               }
               index++;
            }
            if (found)
            {
               stockNode.Nodes.RemoveAt(index);
            }

            // Add new trail stop
            IStockTrailStop stockTrailStop = StockTrailStopManager.CreateTrailStop(addDlg.TrailStopName);
            StockNode trailStopNode = new TrailStopsNode(stockTrailStop.Name, this.indicatorMenuStrip, stockTrailStop);
            stockNode.Nodes.Add(trailStopNode);
            int i = 0;
            foreach (string trailStopName in stockTrailStop.SerieNames)
            {
               trailStopNode.Nodes.Add(new CurveNode(trailStopName, null, stockTrailStop.SeriePens[i], true));
               i++;
            }
            this.treeView1.SelectedNode = trailStopNode;
            trailStopNode.Expand();
             }
        }