public ContextMenu GetContextMenu(HierarchicalViewModelBase selected)
        {
            if (selected is SiteExplorerNodeViewModel)
            {
                return(SiteExplorerMenuBuilder.Build(selected as SiteExplorerNodeViewModel, Explorer));
            }
            else if (selected is SiteFavoriteViewModel)
            {
                var fav = selected as SiteFavoriteViewModel;
                return(SiteExplorerMenuBuilder.BuildForFavorite(fav, Explorer));
            }

            return(null);
        }
        private void ShowContextMenu(TreeView tvw)
        {
            var selected = tvw.SelectedItem as SiteExplorerNodeViewModel;
            var builder  = new ContextMenuBuilder(null);

            if (selected != null)
            {
                tvw.ContextMenu = SiteExplorerMenuBuilder.Build(selected, this);
            }
            else if (tvw.SelectedItem == this.regionsNode)
            {
                builder.New("Add _Region").Handler(() => {
                    var newNode = AddRegion(null);
                    RegionsModel.Insert(0, newNode);
                }).End();
                builder.Separator();
                builder.AddMenuItem(SiteExplorerMenuBuilder.CreateTemplateItems(this));
                builder.Separator();
                builder.New("Refresh").Handler(() => { Refresh(); }).End();
                tvw.ContextMenu = builder.ContextMenu;
            }
            else if (tvw.SelectedItem == unplacedNode)
            {
                builder.New("Add Site _Group").Handler(() => {
                    var newNode = AddSiteGroup(null);
                    UnplacedModel.Insert(0, newNode);
                }).End();

                MenuItemBuilder b       = new MenuItemBuilder();
                MenuItem        addSite = b.New("Add Site").MenuItem;
                addSite.Items.Add(b.New("Blank").Handler(() => {
                    var newNode = AddSite(null);
                    UnplacedModel.Insert(0, newNode);
                }).MenuItem);

                addSite.Items.Add(b.New("From _Template").Handler(() => {
                    int?templateId = ChooseTemplate(SiteExplorerNodeType.Site);
                    if (templateId != null && templateId.HasValue)
                    {
                        var newNode = AddSite(null, templateId.Value);
                        UnplacedModel.Insert(0, newNode);
                    }
                }).MenuItem);


                builder.AddMenuItem(addSite);

                builder.Separator();
                builder.AddMenuItem(SiteExplorerMenuBuilder.CreateTemplateItems(this));
                builder.Separator();
                builder.New("Refresh").Handler(() => { Refresh(); }).End();
                tvw.ContextMenu = builder.ContextMenu;
            }
            else if (tvw.SelectedItem is ViewModelPlaceholder)
            {
                var ph = tvw.SelectedItem as ViewModelPlaceholder;
                switch (ph.DisplayLabel.ToLower())
                {
                case "site templates":
                    builder.New("Add new _Site Template").Handler(() => { AddSiteTemplate(); }).End();
                    break;

                case "site visit templates":
                    builder.New("Add new Site _Visit Template").Handler(() => { AddSiteVisitTemplate(); }).End();
                    break;

                case "material templates":
                    builder.New("Add new _Material Template").Handler(() => { AddMaterialTemplate(); }).End();
                    break;
                }

                tvw.ContextMenu = builder.ContextMenu;
            }
            else if (tvw.SelectedItem == templatesNode)
            {
                builder.AddMenuItem(SiteExplorerMenuBuilder.CreateTemplateItems(this));
                tvw.ContextMenu = builder.ContextMenu;
            }
            else
            {
                tvw.ContextMenu = null;
            }
        }