///// Add Default items in Output Menu ////
        private void AddDefaultOutputMenuItem()//string outwindowname)
        {
            ///New Output////
            DashBoardItem item = new DashBoardItem();
            item.Command = new NewOutputWindow();
            item.Name = "New Output Window";
            item.isGroup = false;
            outputmenu.Items.Add(CreateItem(item));

            ////Open Output/////
            DashBoardItem item2 = new DashBoardItem();
            item2.Command = new OutputOpenCommand();
            item2.Name = "Open Output";
            item2.isGroup = false;
            outputmenu.Items.Add(CreateItem(item2));

            ////Save Output/////Output menu 'll hv "Save output" option in App's Main window.Other windows will not (like Syn Edtr window) hv.
            //count = 0 in begining. But when App's main window is shown count will become 1. That means 1 Output menu exists and thats
            // in App's Main window. Later when Syntax Editor window is shown Output count is not == 1 so "Save Output" is not created.
            if (allOutputMenus.Count == 1) 
            {
                DashBoardItem item3 = new DashBoardItem();
                item3.Command = new OutputSaveAsCommand();
                item3.Name = "Save Output";
                item3.isGroup = false;
                outputmenu.Items.Add(CreateItem(item3));
            }

            ///Adding separator////
            MenuItem menuitem = new MenuItem();
            menuitem.Header = new Separator();
            outputmenu.Items.Add(menuitem);
        }
        ///Creating Menu Items///
        private MenuItem CreateItem(DashBoardItem item)
        {
            MenuItem menuitem = new MenuItem();
            menuitem.Header = item.Name;
            if (item.isGroup)
            {
                foreach (DashBoardItem i in item.Items)
                {
                    if (i.Name.ToLower() == "---------")
                    {
                        MenuItem mnuitem = new MenuItem();
                        mnuitem.Header = new Separator();
                        menuitem.Items.Add(mnuitem);
                        // menuitem.Items.Add(new Separator());// { Background = new SolidColorBrush(Color.FromArgb(0xFF, 0xFF, 0, 0)) }
                    }
                    else
                        menuitem.Items.Add(CreateItem(i));
                }
            }
            else
            {
                menuitem.Command = item.Command;
                menuitem.CommandParameter = item.CommandParameter;
            }
            return menuitem;

        }
        IUIController UIController;//for getting active dataset and filename.

        public CommandHistoryMenuHandler() //This constructor is meant to used for Main App only
        {
            //Giving error here UIController = LifetimeService.Instance.Container.Resolve<IUIController>();
            DashBoardItem item = new DashBoardItem();
            item.Command = null;
            item.CommandParameter = null;
            item.isGroup = true;
            item.Name = "History";// MenuName
            item.Items = new List<DashBoardItem>();

            commandhistmenu = CreateItem(item);
        }
        public OutputMenuHandler() //This constructor is meant to used for Main App only
        {
            DashBoardItem item = new DashBoardItem();
            item.Command = null;
            item.CommandParameter = null;
            item.isGroup = true;
            item.Name = "Output";// MenuName
            item.Items = new List<DashBoardItem>();

            outputmenu = CreateItem(item); 
            allOutputMenus.Add(outputmenu);//adding output menu to common list
            AddDefaultOutputMenuItem();
            if (allOutputMenus.Count > 1) // first item is the output menu from App's main window. When App launches, it is first one to create Output menu
                CreateClone();/// for newly opened Syntax Editor window ///
        }
        //Add executed command per Dataset
        public void AddCommand(string DatasetName, UAMenuCommand Command)
        {
            //Creating a copy of command for putting it in "History" menu
            UAMenuCommand uamc = new UAMenuCommand(); // new obj needed, because same obj can't be child at two places.
            uamc.commandformat = Command.commandformat;
            uamc.commandoutputformat = Command.commandoutputformat; 
            uamc.commandtemplate = Command.commandtemplate;
            uamc.commandtype = Command.commandtype;
            //29Mar2013 //If History Menu text is not present. Dont add this command to "History" menu
            if(Command.text == null || Command.text.Length < 1)
            { return; }
            uamc.text = Command.text;//Command name shown in "History" menu

            //now create menuitem for each command and add to "History" menu
            DashBoardItem item = new DashBoardItem();
            item.Command = new AUAnalysisCommandBase(); // should point to AUAnalysisCommandBase
            item.CommandParameter = uamc;
            item.isGroup = false;
            item.Name = uamc.text;// MenuName
            MenuItem newmi = CreateItem(item);

            //Check if command already in history menu ///
            bool ExistsInHistory = false;
            int miIndex = 0;
            foreach (MenuItem mi in commandhistmenu.Items)
            {
                if (mi.Header == newmi.Header)//command already in History
                {
                    ExistsInHistory = true;
                    break;
                }
                miIndex++;
            }

            // Adding command with "latest executed on top" in menu ///
            if (ExistsInHistory)
            {
                commandhistmenu.Items.RemoveAt(miIndex);
            }
            commandhistmenu.Items.Insert(0, newmi);//Adding to "History" menu
        }
 protected virtual bool OnAddDashBoardItem(DashBoardItem item)
 {
     if (AddDashBoardItem != null)
     {
         DashBoardEventArgs args = new DashBoardEventArgs();
         args.DashBoardItem = item;
         AddDashBoardItem(this, args);
         return true;
     }
     else
     {
         return false;
     }
 }
        private DashBoardItem CreateItem(XmlNode node)
        {
            DashBoardItem item = new DashBoardItem();

            item.Name = GetAttributeString(node, "text");
            item.isGroup = node.HasChildNodes;

            if (node.HasChildNodes)
            {
                item.Items = new List<DashBoardItem>();
                foreach (XmlNode child in node.ChildNodes)
                    item.Items.Add(CreateItem(child));
            }
            else
            {
                UAMenuCommand cmd = new UAMenuCommand();
                cmd.commandtype = GetAttributeString(node, "command");
                if (string.IsNullOrEmpty(cmd.commandtype))
                {
                    cmd.commandtype = typeof(AUAnalysisCommandBase).FullName;
                }
                cmd.commandtemplate = GetAttributeString(node, "commandtemplate");
                cmd.commandformat = GetAttributeString(node, "commandformat");
                cmd.commandoutputformat = GetAttributeString(node, "commandoutputformat");
                cmd.text = GetAttributeString(node, "text"); //04mar2013
                //cmd.id = GetAttributeString(node, "id"); //04mar2013
                //cmd.owner = GetAttributeString(node, "owner"); //04mar2013
                item.Command = CreateCommand(cmd);
                item.CommandParameter = cmd;

                #region 11Jun2015 Set icon fullpathfilename 
                item.iconfullpathfilename = GetAttributeString(node, "icon");
                string showicon = GetAttributeString(node, "showtoolbaricon"); 
                if(showicon==null || showicon.Trim().Length == 0 || !showicon.ToLower().Equals("true"))
                {
                    item.showshortcuticon = false;
                }
                else
                {
                    item.showshortcuticon = true;
                }
                #endregion
            }
            return item;
        }
        //// Adding new output windows ////
        public void AddOutputMenuItem(string outwindowname)
        {
            DashBoardItem item = new DashBoardItem();
            item.Command = new SelectOutputWindowCommand();

            UAMenuCommand uamc = new UAMenuCommand(); //01Aug2012. There was no 'new' before
            uamc.commandformat = outwindowname;//window name is key. Action shud b taken on this.
            uamc.commandoutputformat = ""; uamc.commandtemplate = ""; uamc.commandtype = "";
            item.CommandParameter = uamc;

            item.isGroup = false;
            item.Name = outwindowname;//this should also be the key

            foreach (MenuItem output_menu in allOutputMenus)
            {
                if (output_menu.Header.ToString() == "Output")
                {
                    output_menu.Items.Add(CreateItem(item));
                }
            }
            CheckOutputMenuItem(outwindowname);//putting a check or alphabet to show which one is active
        }
        /// <summary>
        /// Creating clone of Output menu from App's main window. The section that shows names of each output window in current session.
        /// </summary>
        private void CreateClone()//List<DashBoardItem> di)
        {
            MenuItem output_menu=null;
            if (allOutputMenus.Count > 0)
                output_menu = allOutputMenus[0];//grab the first menu.(this should be from Apps main window)

                if (output_menu.Header.ToString() == "Output")
                {
                    foreach (MenuItem mi in output_menu.Items)/// windownames
                    {
                        /// default items are already being created ///
                        if (mi.Header.ToString().Equals("New Output Window") ||
                            mi.Header.ToString().Equals("Open Output") ||
                            mi.Header.ToString().Equals("Save Output") ||
                            mi.Header.GetType() == typeof(Separator))
                            continue;
                        //////creating clone////
                        DashBoardItem item = new DashBoardItem();
                        item.Command = new SelectOutputWindowCommand();

                        UAMenuCommand uamc = new UAMenuCommand(); //01Aug2012. There was no 'new' before
                        uamc.commandformat = mi.Header.ToString();//window name is key. Action shud b taken on this.
                        uamc.commandoutputformat = ""; uamc.commandtemplate = ""; uamc.commandtype = "";
                        item.CommandParameter = uamc;

                        item.isGroup = false;
                        item.Name = mi.Header.ToString();//this should also be the key
                        MenuItem createdmi = CreateItem(item);
                        createdmi.Icon = mi.Icon;

                        outputmenu.Items.Add(createdmi);
                    }
                }
        }