Skip to content

Instantly share code, notes, and snippets.

@jammykam
Created December 22, 2015 20:32
Show Gist options
  • Save jammykam/835b692707fc9b1dc73b to your computer and use it in GitHub Desktop.
Save jammykam/835b692707fc9b1dc73b to your computer and use it in GitHub Desktop.
Tabbed Rendering Selector
<?xml version="1.0" encoding="utf-8" ?>
<control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense">
<Sitecore.Shell.Applications.Dialogs.SelectRendering>
<FormDialog ID="Dialog" Icon="Core/32x32/open_document.png" Header="Open Item"
Text="Select the item that you wish to open. Then click the Open button." OKButton="Open">
<Stylesheet Src="SelectItemWithThumbnails.css" DeviceDependant="true" />
<CodeBeside Type="MyProject.CMS.Custom.Dialogs.SelectRenderingTabbed.SelectRenderingForm, ARM.CMS.Custom"/>
<DataContext ID="DataContext" Root="/"/>
<GridPanel Width="100%" Height="100%">
<GridPanel ID="RenderingSelector" Width="100%" Height="0%" Columns="3" GridPanel.Height="0%" Style="display:none">
<Scrollbox Width="100%" ID="TreeviewContainer" Height="100%" Class="scScrollbox scFixSize scFixSize4" style="border-right: 2px solid #474747;" Background="white" Padding="0px" GridPanel.Width="200px" GridPanel.Height="100%">
<TreeviewEx ID="Treeview" DataContext="DataContext" ShowRoot="true" Click="Treeview_Click" />
</Scrollbox>
<VSplitter ID="TreeSplitter" GridPanel.Class="scThinSplitter" Target="left" />
<Scrollbox ID="Renderings" Width="100%" Height="100%" Class="scScrollbox scFixSize scFixSize4" Background="white" Padding="0px" GridPanel.Height="100%">
</Scrollbox>
</GridPanel>
<GridPanel ID="TabbedSelector" Width="100%" Height="100%" Columns="1" GridPanel.Height="100%" Style="table-layout:fixed">
<Tabstrip ID="Tabs" Width="100%" Height="100%">
</Tabstrip>
</GridPanel>
<Border ID="PlaceHolderNameBorder" Visible="false" style="padding:12px 0px 0px 0px">
<GridPanel Columns="3" Width="100%">
<Literal Text="Add to Placeholder: " GridPanel.NoWrap="true" />
<Space Width="4" />
<Edit ID="PlaceholderName" Name="PlaceholderName" GridPanel.Width="100%" class="scQuirksBoxModel" Width="100%" />
</GridPanel>
</Border>
</GridPanel>
<Border ID="OpenPropertiesBorder" def:placeholder="Buttons" Visible="false" style="padding:0px 0px 8px 0px">
<Checkbox ID="OpenProperties" Header="Open the Properties dialog box immediately." />
</Border>
</FormDialog>
</Sitecore.Shell.Applications.Dialogs.SelectRendering>
</control>
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sitecore;
using Sitecore.Collections;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.Form.UI.Controls;
using Sitecore.Shell.Applications.Dialogs.ItemLister;
using Sitecore.Web.UI.HtmlControls;
using Sitecore.Web.UI.WebControls;
namespace MyProject.CMS.Custom.Dialogs.SelectRenderingTabbed
{
[UsedImplicitly]
public class SelectRenderingForm : Sitecore.Shell.Applications.Dialogs.SelectRendering.SelectRenderingForm
{
protected Tabstrip Tabs;
protected GridPanel RenderingSelector;
protected GridPanel TabbedSelector;
protected override void OnLoad(EventArgs e)
{
Assert.ArgumentNotNull((object) e, "e");
IsOpenPropertiesChecked = Registry.GetBool("/Current_User/SelectRendering/IsOpenPropertiesChecked");
var renderingOptions = SelectItemOptions.Parse<SelectRenderingOptions>();
base.OnLoad(e);
if (Sitecore.Context.ClientPage.IsEvent)
return;
if (!renderingOptions.ShowTree)
{
base.Renderings.InnerHtml = String.Empty; //reset the rendering listing
RenderingSelector.Visible = false;
var grouppedSublayouts = renderingOptions.Items.GroupBy(i => i.Parent.Name);
//Add new tab for each folder
foreach (IGrouping<string, Item> grouppedSublayout in grouppedSublayouts)
{
var newTab = new Tab();
newTab.Header = grouppedSublayout.Key;
var newScrollbox = new Scrollbox();
newScrollbox.Class = "scScrollbox scFixSize scFixSize4";
newScrollbox.Background = "white";
newScrollbox.Padding = "0px";
newScrollbox.Width = new Unit(100, UnitType.Percentage);
newScrollbox.Height = new Unit(100, UnitType.Percentage);
string text = RenderPreviews(grouppedSublayout.ToList());
newScrollbox.InnerHtml = text;
newTab.Controls.Add(newScrollbox);
Tabs.Controls.Add(newTab);
}
}
}
private string RenderPreviews(IEnumerable<Item> items)
{
Assert.ArgumentNotNull((object) items, "items");
HtmlTextWriter output = new HtmlTextWriter((TextWriter) new StringWriter());
foreach (Item obj in items)
this.RenderItemPreview(obj, output);
return output.InnerWriter.ToString();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment