mirror of
https://github.com/ZuneDev/ZuneUIXTools.git
synced 2026-07-27 13:11:59 -07:00
2430 lines
66 KiB
Plaintext
2430 lines
66 KiB
Plaintext
<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
|
|
<UIX
|
|
xmlns="http://schemas.microsoft.com/2007/uix"
|
|
xmlns:sys="assembly://mscorlib/System"
|
|
xmlns:col="assembly://mscorlib/System.Collections"
|
|
xmlns:iris="assembly://UIX/Microsoft.Iris"
|
|
xmlns:zune="assembly://ZuneShell/ZuneUI"
|
|
xmlns:core="res://ZuneShellResources!Controls.uix"
|
|
xmlns:style="res://ZuneShellResources!Style.uix"
|
|
xmlns:styles="res://ZuneShellResources!Styles.uix"
|
|
xmlns:images="res://ZuneShellResources!ImageStyle.uix"
|
|
xmlns:animations="res://ZuneShellResources!Animations.uix"
|
|
xmlns:tooltip="res://ZuneShellResources!ToolTip.uix"
|
|
xmlns:drag="res://ZuneShellResources!DragFeedback.uix"
|
|
xmlns:contentList="res://ZuneShellResources!ContentList.uix"
|
|
xmlns:actionprogressbutton="res://ZuneShellResources!ActionProgressButton.uix"
|
|
xmlns:me="Me">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Class Name="ColumnData">
|
|
<Properties>
|
|
<List Name="Columns" List="$Required"/>
|
|
<Boolean Name="CanReorderColumns" Boolean="false"/>
|
|
|
|
|
|
<Boolean Name="HideColumns" Boolean="false"/>
|
|
|
|
|
|
<Int32 Name="FixedColumns" Int32="0"/>
|
|
|
|
<Object Name="SortedColumn" Object="{null}"/>
|
|
<Boolean Name="SortAscending" Boolean="true"/>
|
|
|
|
|
|
<String Name="SaveKeyPrefix" String=""/>
|
|
|
|
<Boolean Name="SaveColumnWidths" Boolean="true"/>
|
|
<Boolean Name="SaveColumnOrder" Boolean="false"/>
|
|
<Boolean Name="SaveColumnVisibility" Boolean="false"/>
|
|
<Boolean Name="SaveSort" Boolean="true"/>
|
|
|
|
|
|
|
|
<List Name="OrderedColumns" List="{null}"/>
|
|
|
|
|
|
<iris:ArrayListDataSet Name="DisplayedColumns"/>
|
|
<Command Name="ColumnWidthsChanged"/>
|
|
<Command Name="ColumnOrderChanged"/>
|
|
<Command Name="ColumnVisibilityChanged"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
|
|
foreach(me:ColumnInfoBase column in Columns)
|
|
column.VisibilitiesChanged.Add(ColumnVisibilityChanged);
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
if (SaveColumnWidths && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
List savedWidths = zune:Shell.GetPositiveIntList(SaveKeyPrefix + "Widths", Columns.Count);
|
|
|
|
if (savedWidths != null)
|
|
{
|
|
int i = 0;
|
|
foreach(me:ColumnInfoBase column in Columns)
|
|
{
|
|
column.ColumnSize.Size = new Size((int)savedWidths.GetItem(i), 0);
|
|
i = i + 1;
|
|
}
|
|
}
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ColumnWidthsChanged.Invoked)]
|
|
|
|
if (SaveColumnWidths && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
List widths = new List();
|
|
foreach(me:ColumnInfoBase column in Columns)
|
|
widths.Add(column.ColumnSize.Size.Width);
|
|
|
|
zune:Shell.SaveIntList(SaveKeyPrefix + "Widths", widths);
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
if (CanReorderColumns)
|
|
{
|
|
List savedOrder = null;
|
|
if (SaveColumnOrder && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
savedOrder = zune:Shell.GetReorderedIntList(SaveKeyPrefix + "Order", Columns.Count);
|
|
|
|
OrderedColumns = new iris:ArrayListDataSet();
|
|
if (savedOrder != null)
|
|
{
|
|
int i = 0;
|
|
foreach(int orderIndex in savedOrder)
|
|
{
|
|
OrderedColumns.Add(Columns.GetItem(orderIndex));
|
|
i = i + 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach(me:ColumnInfoBase column in Columns)
|
|
OrderedColumns.Add(column);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
OrderedColumns = Columns;
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ColumnOrderChanged.Invoked)]
|
|
if (SaveColumnOrder && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
List order = new List();
|
|
foreach(me:ColumnInfoBase column in OrderedColumns)
|
|
{
|
|
order.Add( ((col:IList)Columns).IndexOf(column) );
|
|
}
|
|
|
|
zune:Shell.SaveIntList(SaveKeyPrefix + "Order", order);
|
|
}
|
|
</Script>
|
|
|
|
|
|
|
|
<Script>
|
|
if (SaveColumnVisibility && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
List savedVisibilities = zune:Shell.GetIntList(SaveKeyPrefix + "Visibilities", Columns.Count);
|
|
|
|
if (savedVisibilities != null)
|
|
{
|
|
int i = 0;
|
|
foreach(int visible in savedVisibilities)
|
|
{
|
|
me:ColumnInfoBase column = (me:ColumnInfoBase)Columns.GetItem(i);
|
|
|
|
column.Visible = (bool)visible;
|
|
|
|
i = i + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
foreach(me:ColumnInfoBase column in OrderedColumns)
|
|
{
|
|
if (column.Visible)
|
|
DisplayedColumns.Add(column);
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ColumnVisibilityChanged.Invoked)]
|
|
if (SaveColumnVisibility && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
List visibilities = new List();
|
|
foreach(me:ColumnInfoBase column in Columns)
|
|
{
|
|
visibilities.Add((int)column.Visible);
|
|
}
|
|
|
|
zune:Shell.SaveIntList(SaveKeyPrefix + "Visibilities", visibilities);
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(ColumnOrderChanged.Invoked)]
|
|
[DeclareTrigger(ColumnVisibilityChanged.Invoked)]
|
|
|
|
|
|
|
|
|
|
int visibleColumnCount = 0;
|
|
foreach(me:ColumnInfoBase column in OrderedColumns)
|
|
{
|
|
int displayIndex = DisplayedColumns.IndexOf(column);
|
|
if (column.Visible)
|
|
{
|
|
if (displayIndex == -1)
|
|
{
|
|
DisplayedColumns.Insert(visibleColumnCount, column);
|
|
}
|
|
else if (displayIndex > visibleColumnCount)
|
|
{
|
|
DisplayedColumns.Move(displayIndex, visibleColumnCount);
|
|
}
|
|
else if (displayIndex < visibleColumnCount)
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
visibleColumnCount = visibleColumnCount + 1;
|
|
}
|
|
else if (displayIndex != -1)
|
|
{
|
|
DisplayedColumns.RemoveAt(displayIndex);
|
|
}
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
if (SaveSort && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
|
|
int i = 0;
|
|
int defaultSortedColumn = -1;
|
|
foreach (me:ColumnInfoBase column in Columns)
|
|
{
|
|
if (column.SortBy == SortedColumn)
|
|
{
|
|
defaultSortedColumn = i;
|
|
|
|
}
|
|
i = i + 1;
|
|
}
|
|
|
|
|
|
int sortedColumnIndex = zune:Shell.GetInt(SaveKeyPrefix + "SortColumn", 0, Columns.Count - 1, defaultSortedColumn);
|
|
|
|
if (sortedColumnIndex != -1)
|
|
{
|
|
|
|
SortedColumn = ((me:ColumnInfoBase)Columns.GetItem(sortedColumnIndex)).SortBy;
|
|
|
|
|
|
SortAscending = (bool)zune:Shell.GetInt(SaveKeyPrefix + "SortAscending", 0, 1, (int)SortAscending);
|
|
}
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(SortedColumn)]
|
|
|
|
if (SaveSort && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
int i = 0;
|
|
int sortedColumn = 0;
|
|
foreach (me:ColumnInfoBase column in Columns)
|
|
{
|
|
if (column.SortBy == SortedColumn)
|
|
{
|
|
sortedColumn = i;
|
|
|
|
}
|
|
i = i + 1;
|
|
}
|
|
|
|
zune:Shell.SaveInt(SaveKeyPrefix + "SortColumn", sortedColumn);
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(SortAscending)]
|
|
|
|
if (SaveSort && !String.IsNullOrEmpty(SaveKeyPrefix))
|
|
{
|
|
zune:Shell.SaveInt(SaveKeyPrefix + "SortAscending", (int)SortAscending);
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
<Class Name="SpreadSheetListModel">
|
|
<Properties>
|
|
<me:ColumnData Name="ColumnData" ColumnData="{null}"/>
|
|
<SelectionManager Name="SelectionManager" SelectionManager="{null}"/>
|
|
</Properties>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="SpreadSheet" Base="core:ReorderableListBase">
|
|
<Properties>
|
|
<me:ColumnData Name="ColumnData" ColumnData="$Required"/>
|
|
<me:SpreadSheetListModel Name="ListModel"/>
|
|
|
|
<Type Name="ListItemType" Type="{typeof(me:SpreadSheetListItem)}"/>
|
|
|
|
<Boolean Name="ShowColumnDividers" Boolean="false"/>
|
|
|
|
<Boolean Name="AllowHorizontalScrolling" Boolean="true"/>
|
|
<Boolean Name="AllowVerticalScrolling" Boolean="true"/>
|
|
<Inset Name="ScrollbarMargins" Inset="0,0,11,11"/>
|
|
|
|
<Boolean Name="SizeToChildren" Boolean="false"/>
|
|
|
|
<Boolean Name="AnimateItems" Boolean="True"/>
|
|
<Single Name="FadeSize" Single="-1.0"/>
|
|
<style:Style Name="OverrideStyle" Style="{null}"/>
|
|
<Boolean Name="CanDrag" Boolean="true"/>
|
|
|
|
<Boolean Name="ShowHeaders" Boolean="true"/>
|
|
<Boolean Name="HighlightHeaders" Boolean="true"/>
|
|
<style:Style Name="HeaderStyle" Style="{styles:SharedStyles.ColumnHeaderStyleSet}"/>
|
|
|
|
|
|
|
|
<Int32 Name="HeaderHeight" Int32="16"/>
|
|
<Int32 Name="HeaderSpacing" Int32="26"/>
|
|
|
|
<core:ContextMenu Name="HeaderContextMenu" ContextMenu="{null}"/>
|
|
|
|
<Size Name="RowSize" Size="{styles:Styles.ListItemSize}"/>
|
|
<Inset Name="RowPadding" Inset="{styles:Styles.ListItemMargins}"/>
|
|
|
|
<Size Name="LayoutSpacing" Size="0,0"/>
|
|
<GridLayout Name="ListLayout" Orientation="Vertical" ReferenceSize="{RowSize}" Spacing="{LayoutSpacing}"/>
|
|
|
|
|
|
<Int32 Name="FixedItems" Int32="0"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<ScrollingData Name="VerticalScrollData"/>
|
|
<ScrollingData Name="HorizontalScrollData"/>
|
|
|
|
|
|
<DockLayout Name="NoHideColumnLayout" SizeToChildren="true" DefaultLayoutInput="Left,Near"/>
|
|
|
|
<Layout Name="ColumnLayout">
|
|
<Layout>
|
|
<Script>
|
|
if (ColumnData.HideColumns)
|
|
return (Layout)new StackLayout();
|
|
return (Layout)NoHideColumnLayout;
|
|
</Script>
|
|
</Layout>
|
|
</Layout>
|
|
<me:ListEditState Name="EditState"/>
|
|
|
|
<TransformAnimation Name="FadeXForm" TimeScale="1.0" Source="{animations:Animations.ListContentChange}"/>
|
|
|
|
<AnchorLayoutInput Name="VerticalScrollBarPosition" Right="Scroller,1" Horizontal="Far"
|
|
Top="Scroller,0" Vertical="Center"
|
|
ContributesToWidth="false" ContributesToHeight="false">
|
|
<Bottom>
|
|
<AnchorEdge Id="Scroller" Percent="1" Offset="{-1 * ScrollbarMargins.Bottom}"/>
|
|
</Bottom>
|
|
</AnchorLayoutInput>
|
|
|
|
<AnchorLayoutInput Name="VerticalScrollerPosition" Left="Parent,0" Top="Parent,0"/>
|
|
|
|
|
|
<Command Name="ScrollUpCommand"/>
|
|
<Command Name="ScrollDownCommand"/>
|
|
</Locals>
|
|
|
|
<Input>
|
|
|
|
<ScrollingHandler Name="VerticalScrollHandler" ScrollingData="{VerticalScrollData}"/>
|
|
<ScrollingHandler Name="HorizontalScrollHandler" ScrollingData="{HorizontalScrollData}"/>
|
|
</Input>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
ListModel.ColumnData = ColumnData;
|
|
ListModel.SelectionManager = SelectionManager;
|
|
</Script>
|
|
<Script>
|
|
protected_VerticalScrollData = VerticalScrollData;
|
|
protected_HorizontalScrollData = HorizontalScrollData;
|
|
</Script>
|
|
<Script>
|
|
Headers.Visible = [ShowHeaders];
|
|
|
|
int offset = 0;
|
|
if (ShowHeaders)
|
|
offset = HeaderHeight + HeaderSpacing;
|
|
|
|
VerticalScrollBarPosition.Top.Offset = offset;
|
|
VerticalScrollerPosition.Top.Offset = offset;
|
|
</Script>
|
|
<Script>Dividers.Visible = [ShowColumnDividers];</Script>
|
|
<Script>Headers.ContextMenu = [HeaderContextMenu];</Script>
|
|
<Script>
|
|
|
|
if(!AnimateItems)
|
|
{
|
|
|
|
|
|
|
|
|
|
FadeXForm.TimeScale = 0.01;
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
if (![AllowHorizontalScrolling])
|
|
{
|
|
HorzScrollBar.Visible = false;
|
|
HorizontalScrollData.Enabled = false;
|
|
}
|
|
</Script>
|
|
<Script>
|
|
if (![AllowVerticalScrolling])
|
|
{
|
|
VertScrollBar.Visible = false;
|
|
VerticalScrollData.Enabled = false;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
|
|
VertScrollBar.RegionHover = [UI.DeepMouseFocus] && ![Headers.DeepMouseFocus];
|
|
HorzScrollBar.RegionHover = UI.DeepMouseFocus && !Headers.DeepMouseFocus;
|
|
</Script>
|
|
|
|
|
|
<Script>PopupRelativeToList.PlacementTarget = Scroller;</Script>
|
|
|
|
|
|
<Script>
|
|
if ([CanReorder])
|
|
{
|
|
Repeater.ContentName = "ReorderableItem";
|
|
if (Content != null)
|
|
{
|
|
LastIndicator.Index = [Content.Count];
|
|
}
|
|
}
|
|
else
|
|
Repeater.ContentName = "Item";
|
|
</Script>
|
|
|
|
|
|
|
|
<Script>
|
|
[InitialEvaluate(false)]
|
|
if (![UI.DeepKeyFocus])
|
|
{
|
|
EditState.InEditMode = false;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
EditingList.Value = [EditState.InEditMode];
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
bool inEditMode = [EditState.InEditMode];
|
|
|
|
if (inEditMode)
|
|
{
|
|
Repeater.Navigation = NavigationPolicies.ContainAll;
|
|
EditState.Cancelled = false;
|
|
}
|
|
else
|
|
{
|
|
Repeater.Navigation = NavigationPolicies.None;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(Target.EventContext)]
|
|
|
|
object context = Target.EventContext;
|
|
|
|
if (context is Command)
|
|
{
|
|
|
|
|
|
((Command)context).Invoke();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ScrollUp.Scale = new Vector3(0.0,1.0,1.0);
|
|
ScrollDown.Scale = new Vector3(0.0,1.0,1.0);
|
|
}
|
|
else if (context is int)
|
|
{
|
|
|
|
|
|
ScrollUp.Scale = new Vector3(1.0,1.0,1.0);
|
|
ScrollDown.Scale = new Vector3(1.0,1.0,1.0);
|
|
}
|
|
</Script>
|
|
|
|
<Script> ScrollUp.Visible = [VerticalScrollData.CanScrollUp]; </Script>
|
|
<Script> ScrollDown.Visible = [VerticalScrollData.CanScrollDown]; </Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ScrollUpCommand.Invoked)]
|
|
VerticalScrollData.ScrollUp();
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ScrollDownCommand.Invoked)]
|
|
VerticalScrollData.ScrollDown();
|
|
</Script>
|
|
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Layout="Anchor" Navigation="TabGroup" MouseInteractive="false">
|
|
<Children>
|
|
|
|
|
|
<core:ScrollBar Name="VertScrollBar" ScrollData="{VerticalScrollData}"
|
|
LayoutInput="{VerticalScrollBarPosition}"/>
|
|
|
|
<core:ScrollBar Name="HorzScrollBar" ScrollData="{HorizontalScrollData}" Horizontal="true">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Bottom="Scroller,1" Vertical="Far"
|
|
Left="Scroller,0" Right="Scroller,1,-10" Horizontal="Center"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:ScrollBar>
|
|
|
|
|
|
<Scroller Name="Scroller" Orientation="Horizontal" ScrollingData="{HorizontalScrollData}"
|
|
Margins="{ScrollbarMargins}" FadeSize="{FadeSize}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="Parent,0"/>
|
|
</LayoutInput>
|
|
<Children>
|
|
|
|
<Panel Name="Panel" Navigation="ContainDirectional,RememberFocus">
|
|
<Layout>
|
|
<AnchorLayout SizeToHorizontalChildren="true" SizeToVerticalChildren="{SizeToChildren}"/>
|
|
</Layout>
|
|
<Children>
|
|
|
|
|
|
|
|
<Panel Name="HeadersPanel">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="Parent,0"/>
|
|
</LayoutInput>
|
|
<Children>
|
|
|
|
<me:ColumnHeaders Name="Headers" ColumnData="{ColumnData}"
|
|
ListModel="{ListModel}" HeaderSpacing="{HeaderSpacing}"
|
|
ListLayout="{ColumnLayout}" HighlightHeaders="{HighlightHeaders}"
|
|
HeaderHeight="{HeaderHeight}" HeaderStyle="{HeaderStyle}"
|
|
EditState="{EditState}"/>
|
|
|
|
</Children>
|
|
</Panel>
|
|
|
|
|
|
<core:DropZone Name="ScrollUp" Context="{ScrollUpCommand}"
|
|
IsVisible="{IsDragging}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="VertScroller,0" Bottom="VertScroller,0,30"
|
|
Left="VertScroller,0" Right="VertScroller,1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:DropZone>
|
|
|
|
|
|
<core:DropZone Name="ScrollDown" Context="{ScrollDownCommand}"
|
|
IsVisible="{IsDragging}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="VertScroller,1,-30" Bottom="VertScroller,1"
|
|
Left="VertScroller,0" Right="VertScroller,1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:DropZone>
|
|
|
|
|
|
<me:ColumnDividers Name="Dividers" Columns="{ColumnData.DisplayedColumns}" ColumnLayout="{ColumnLayout}"
|
|
ColumnWidthsChanged="{ColumnData.ColumnWidthsChanged}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="VertScroller,0" Bottom="VertScroller,1"/>
|
|
</LayoutInput>
|
|
</me:ColumnDividers>
|
|
|
|
|
|
<Scroller Name="VertScroller" Orientation="Vertical" ScrollingData="{VerticalScrollData}"
|
|
FadeSize="{FadeSize}" Prefetch="0.5" LayoutInput="{VerticalScrollerPosition}"
|
|
MouseInteractive="true">
|
|
<Children>
|
|
|
|
<Panel Layout="Anchor">
|
|
<Children>
|
|
|
|
|
|
<Graphic Name="SelectionRect" Content="{styles:Styles.DragSelectRect}"/>
|
|
|
|
<Panel Name="Background" Layout="Anchor" FillView="{!SizeToChildren}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="Parent,0" />
|
|
</LayoutInput>
|
|
|
|
<Children>
|
|
|
|
|
|
<Repeater Name="Repeater" Layout="{ListLayout}" DiscardOffscreenVisuals="true">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="Parent,0" />
|
|
</LayoutInput>
|
|
<Animations>
|
|
<TransformAnimation TransformAnimation="{FadeXForm}"/>
|
|
</Animations>
|
|
</Repeater>
|
|
|
|
<core:Indicator Name="LastIndicator" InsertAtIndex="{InsertIndex}" MinimumSize="0, 1">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Repeater,0" Right="Repeater,1" Top="Repeater,1"/>
|
|
</LayoutInput>
|
|
</core:Indicator>
|
|
|
|
</Children>
|
|
</Panel>
|
|
|
|
</Children>
|
|
</Panel>
|
|
|
|
</Children>
|
|
</Scroller>
|
|
|
|
</Children>
|
|
</Panel>
|
|
|
|
</Children>
|
|
</Scroller>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
|
|
<Content Name="Item">
|
|
<me:SpreadSheetListItem SpreadSheetListItem="{ListItemType}"
|
|
EditState="{EditState}"
|
|
Model="{RepeatedItem}"
|
|
ListModel="{ListModel}"
|
|
Index="{RepeatedItemIndex}"
|
|
Columns="{ColumnData.DisplayedColumns}"
|
|
NavigateIntoArgs="{NavigateIntoArgs}"
|
|
SelectionManager="{SelectionManager}"
|
|
OverrideStyle="{OverrideStyle}"
|
|
ColumnLayout="{ColumnLayout}"
|
|
CanDrag="{CanDrag}"
|
|
Navigation="Row"
|
|
RowPadding="{RowPadding}"
|
|
RowSize="{RowSize}"/>
|
|
</Content>
|
|
|
|
<Content Name="ReorderableItem">
|
|
<Panel Layout="Anchor">
|
|
<Children>
|
|
|
|
|
|
|
|
<core:ItemDropZone Index="{RepeatedItemIndex}" IsVisible="{IsDragging}"
|
|
ValidTarget="{RepeatedItemIndex.Value >= FixedItems}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Item, 0" Bottom="Item, 0.5" Left="Item,0" Right="Item,1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:ItemDropZone>
|
|
|
|
|
|
<core:ItemDropZone Index="{RepeatedItemIndex}" IndexModifier="1" IsVisible="{IsDragging}"
|
|
ValidTarget="{RepeatedItemIndex.Value + 1 >= FixedItems}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Item, 0.5" Left="Item,0" Right="Item,1"
|
|
ContributesToWidth="false" ContributesToHeight="false">
|
|
<Bottom>
|
|
|
|
<AnchorEdge Id="Item" Percent="1" Offset="{LayoutSpacing.Height}"/>
|
|
</Bottom>
|
|
</AnchorLayoutInput>
|
|
</LayoutInput>
|
|
</core:ItemDropZone>
|
|
|
|
|
|
<core:Indicator Index="{RepeatedItemIndex}" InsertAtIndex="{InsertIndex}"
|
|
MinimumSize="0, 1">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Item, 0" Right="Item, 1" Top="Item, 0"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:Indicator>
|
|
|
|
<me:SpreadSheetListItem Name="Item" SpreadSheetListItem="{ListItemType}"
|
|
EditState="{EditState}"
|
|
Model="{RepeatedItem}"
|
|
ListModel="{ListModel}"
|
|
Index="{RepeatedItemIndex}"
|
|
Columns="{ColumnData.DisplayedColumns}"
|
|
NavigateIntoArgs="{NavigateIntoArgs}"
|
|
SelectionManager="{SelectionManager}"
|
|
OverrideStyle="{OverrideStyle}"
|
|
IsDragging="{IsDragging}"
|
|
DraggingIndex="{DraggingIndex}"
|
|
ColumnLayout="{ColumnLayout}"
|
|
DisplayDragFeedback="false"
|
|
CanDrag="{RepeatedItemIndex.Value >= FixedItems && CanDrag}"
|
|
RowPadding="{RowPadding}"
|
|
RowSize="{RowSize}"
|
|
/>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="ColumnDividers">
|
|
<Properties>
|
|
<List Name="Columns" List="$Required"/>
|
|
<Layout Name="ColumnLayout" Layout="$Required"/>
|
|
<Command Name="ColumnWidthsChanged" Command="$Required"/>
|
|
</Properties>
|
|
|
|
<Content>
|
|
<Repeater Source="{Columns}" Layout="{ColumnLayout}">
|
|
<Content>
|
|
|
|
<me:ColumnDivider LayoutInput="{((me:ColumnInfo)RepeatedItem).LayoutInput}"
|
|
Columns="{Columns}"
|
|
ColumnInfo="{(me:ColumnInfo)RepeatedItem}"
|
|
ColumnWidthsChanged="{ColumnWidthsChanged}"
|
|
Index="{RepeatedItemIndex}"/>
|
|
|
|
</Content>
|
|
</Repeater>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="ColumnDivider">
|
|
<Properties>
|
|
<List Name="Columns" List="$Required"/>
|
|
<me:ColumnInfo Name="ColumnInfo" ColumnInfo="$Required"/>
|
|
<Command Name="ColumnWidthsChanged" Command="$Required"/>
|
|
<Index Name="Index" Index="$Required"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script> Line.Visible = [Index.Value] > 0 && ColumnInfo.ShowDivider; </Script>
|
|
<Script> Resizer.Visible = [ColumnInfo.Resizable]; </Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Name="Root"
|
|
SharedSizePolicy="SharesWidth" SharedSize="{ColumnInfo.ColumnSize}"
|
|
Layout="Form">
|
|
<Children>
|
|
|
|
<ColorFill Name="Line" Content="{styles:Styles.ColumnDivider}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Right="Parent,0,1" Top="Parent,0" Bottom="Parent,1"/>
|
|
</LayoutInput>
|
|
</ColorFill>
|
|
|
|
<me:ColumnResizer Name="Resizer" ColumnInfo="{ColumnInfo}" ColumnWidthsChanged="{ColumnWidthsChanged}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,1,-7" Right="Parent,1,7" Top="Parent,0" Bottom="Parent,1"
|
|
ContributesToWidth="false"/>
|
|
</LayoutInput>
|
|
</me:ColumnResizer>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Class Name="AccessibleDescriptionReference">
|
|
<Properties>
|
|
<Boolean Name="Active"/>
|
|
<String Name="Value" String="{null}"/>
|
|
</Properties>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="SpreadSheetListItem" Base="core:ListItemBase">
|
|
<Properties>
|
|
<me:SpreadSheetListModel Name="ListModel" SpreadSheetListModel="{null}"/>
|
|
<Object Name="Model" Object="$Required"/>
|
|
<List Name="Columns" List="$Required"/>
|
|
<Layout Name="ColumnLayout" Layout="$Required"/>
|
|
<SelectionManager Name="SelectionManager" SelectionManager="$Required"/>
|
|
<me:ListEditState Name="EditState" ListEditState="$Required"/>
|
|
|
|
<style:Style Name="OverrideStyle" Style="{null}"/>
|
|
<Boolean Name="CanDrag" Boolean="true"/>
|
|
<iris:BooleanChoice Name="IsDragging" BooleanChoice="{null}"/>
|
|
<iris:IntRangedValue Name="DraggingIndex" IntRangedValue="{null}"/>
|
|
<contentList:NavigateIntoIndexRequest Name="NavigateIntoArgs" NavigateIntoIndexRequest="$Required"/>
|
|
|
|
<Boolean Name="DisplayDragFeedback" Boolean="true"/>
|
|
|
|
<Size Name="RowSize" Size="$Required"/>
|
|
<Inset Name="RowPadding" Inset="$Required"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<style:StatefulCompositeStyle Name="StatefulStyle" Base="{styles:SharedStyles.ListItemStyle}" Override="{OverrideStyle}"/>
|
|
|
|
<core:ListItemContext Name="RowContext" Index="{Index}" SelectOnMouseDown="false"/>
|
|
|
|
<me:AccessibleDescriptionReference Name="AggregateAccessibleDescription"/>
|
|
|
|
<drag:DragFeedback Name="DragFeedback" DragFeedback="{null}"/>
|
|
|
|
<Command Name="EditListItem" />
|
|
|
|
|
|
<zune:BoolDisposeHelper Name="DisposeHelper" Choice="{IsDragging}"/>
|
|
</Locals>
|
|
|
|
<Input>
|
|
|
|
|
|
<DragSourceHandler Name="DirectDragSource" AllowedDropActions="All" Value="{SelectionManager}" Enabled="{CanDrag}"/>
|
|
<DragSourceHandler Name="BubbledDragSource" AllowedDropActions="All" Value="{SelectionManager}" HandlerStage="Bubbled" Enabled="{CanDrag}"/>
|
|
</Input>
|
|
|
|
<Scripts>
|
|
|
|
<Script>
|
|
Context.Value = RowContext;
|
|
RowContext.Edit = EditListItem;
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
if (DisplayDragFeedback)
|
|
{
|
|
DirectDragSource.MoveCursor = Cursor.Arrow;
|
|
DirectDragSource.CopyCursor = Cursor.Arrow;
|
|
DirectDragSource.CancelCursor = Cursor.Arrow;
|
|
BubbledDragSource.MoveCursor = Cursor.Arrow;
|
|
BubbledDragSource.CopyCursor = Cursor.Arrow;
|
|
BubbledDragSource.CancelCursor = Cursor.Arrow;
|
|
}
|
|
</Script>
|
|
|
|
<Script>StatefulStyle.Override = [OverrideStyle];</Script>
|
|
|
|
<Script>StatefulStyle.State.Focused = [UI.DeepKeyFocus];</Script>
|
|
<Script>StatefulStyle.State.Hovered = [UI.DeepMouseFocus];</Script>
|
|
|
|
<Script>
|
|
if ([StatefulStyle.State.Selected])
|
|
Background.Content = styles:Styles.ListItemSelectedBackground;
|
|
else if ([StatefulStyle.State.Hovered])
|
|
Background.Content = styles:Styles.ListItemHoverBackground;
|
|
else
|
|
Background.Content = styles:Styles.ListItemBackground;
|
|
</Script>
|
|
|
|
|
|
<Script>
|
|
[InitialEvaluate(true)]
|
|
[DeclareTrigger(SelectionManager.SelectedIndices)]
|
|
if (SelectionManager != null)
|
|
{
|
|
bool selected = SelectionManager.IsSelected([Index.Value]);
|
|
StatefulStyle.State.Selected = selected;
|
|
DirectDragSource.Enabled = selected && CanDrag;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
[InitialEvaluate(false)]
|
|
bool isDragging = [DirectDragSource.Dragging] || [BubbledDragSource.Dragging];
|
|
|
|
if (IsDragging != null)
|
|
{
|
|
IsDragging.Value = isDragging;
|
|
|
|
|
|
|
|
|
|
|
|
DisposeHelper.ResetOnDispose = isDragging;
|
|
}
|
|
|
|
|
|
|
|
if (isDragging)
|
|
{
|
|
if (DraggingIndex != null)
|
|
DraggingIndex.Value = Index.Value;
|
|
|
|
int count = 1;
|
|
|
|
if (SelectionManager != null)
|
|
{
|
|
if (!SelectionManager.IsSelected(Index.Value))
|
|
SelectionManager.Select(Index.Value, true);
|
|
|
|
count = SelectionManager.Count;
|
|
}
|
|
|
|
if (DisplayDragFeedback)
|
|
{
|
|
if (DragFeedback == null)
|
|
DragFeedback = new drag:DragFeedback();
|
|
|
|
DragFeedback.Count = count;
|
|
DragFeedback.Helper.Show(DragFeedback);
|
|
}
|
|
}
|
|
else if (DragFeedback != null)
|
|
{
|
|
DragFeedback.Helper.Hide();
|
|
UI.DisposeOwnedObject(DragFeedback);
|
|
DragFeedback = null;
|
|
}
|
|
|
|
drag:DragInfo.IsDraggingInternally = isDragging;
|
|
</Script>
|
|
|
|
<Script>
|
|
if (DirectDragSource.Dragging && DragFeedback != null)
|
|
DragFeedback.DropAction = [DirectDragSource.CurrentDropAction];
|
|
</Script>
|
|
|
|
<Script>
|
|
if (BubbledDragSource.Dragging && DragFeedback != null)
|
|
DragFeedback.DropAction = [BubbledDragSource.CurrentDropAction];
|
|
</Script>
|
|
|
|
<Script>AggregateAccessibleDescription.Active = [Accessible.Enabled];</Script>
|
|
<Script>AccessibleDescription = [AggregateAccessibleDescription.Value];</Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(EditListItem.Invoked)]
|
|
EditState.InEditMode = true;
|
|
NavigateIntoArgs.Index = Index.Value;
|
|
NavigateIntoArgs.Select = true;
|
|
</Script>
|
|
|
|
|
|
<Script><![CDATA[
|
|
[InitialEvaluate(false)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (UI.DeepKeyFocus && ![EditState.InEditMode])
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UI.NavigateInto();
|
|
}
|
|
]]></Script>
|
|
|
|
|
|
|
|
<Script>
|
|
if ([UI.KeyFocus] && EditState.InEditMode)
|
|
{
|
|
Background.NavigateInto();
|
|
}
|
|
</Script>
|
|
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<ColorFill Name="Background" MouseInteractive="false" Padding="{RowPadding}">
|
|
<Children>
|
|
|
|
<Repeater Source="{Columns}" Layout="{ColumnLayout}">
|
|
<Content>
|
|
|
|
<me:CellHost
|
|
Style="{StatefulStyle}" ListModel="{ListModel}" Model="{Model}"
|
|
EditState="{EditState}"
|
|
ColumnInfo="{(me:ColumnInfo)RepeatedItem}"
|
|
LayoutInput="{((me:ColumnInfo)RepeatedItem).LayoutInput}"
|
|
AggregateAccessibleDescription="{AggregateAccessibleDescription}"
|
|
RowIndex="{Index}"/>
|
|
|
|
</Content>
|
|
</Repeater>
|
|
|
|
</Children>
|
|
</ColorFill>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Class Name="ColumnInfoBase">
|
|
<Properties>
|
|
<String Name="Header" String="{null}"/>
|
|
<Image Name="HeaderIcon" Image="{null}"/>
|
|
<Boolean Name="HighlightHeader" Boolean="true"/>
|
|
|
|
<Object Name="SortBy" Object="{null}"/>
|
|
<Boolean Name="SortAscendingDefault" Boolean="true"/>
|
|
<Inset Name="CellPadding" Inset="{styles:Styles.CellPadding}"/>
|
|
<Inset Name="HeaderPadding" Inset="{CellPadding}"/>
|
|
|
|
<SharedSize Name="ColumnSize" SharedSize="{null}"/>
|
|
<Boolean Name="Resizable" Boolean="true"/>
|
|
<Boolean Name="Visible" Boolean="true"/>
|
|
<Boolean Name="Removable" Boolean="true"/>
|
|
<Boolean Name="ShowDivider" Boolean="true"/>
|
|
|
|
<LayoutInput Name="LayoutInput">
|
|
<LayoutInput>
|
|
<DockLayoutInput Position="Left" Alignment="Near"/>
|
|
</LayoutInput>
|
|
</LayoutInput>
|
|
|
|
<List Name="VisibilitiesChanged"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
[DeclareTrigger(Visible)]
|
|
foreach (Command command in VisibilitiesChanged)
|
|
command.Invoke();
|
|
</Script>
|
|
</Scripts>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
|
|
<Class Name="ColumnInfo" Base="me:ColumnInfoBase">
|
|
<Properties>
|
|
<Type Name="CellType" Type="{typeof(me:ToStringCell)}"/>
|
|
<Type Name="CellEditType" Type="{null}"/>
|
|
|
|
<Type Name="HeaderType" Type="{null}"/>
|
|
</Properties>
|
|
<Scripts>
|
|
<Script>
|
|
if (HeaderType == null)
|
|
{
|
|
|
|
if (HeaderIcon != null)
|
|
HeaderType = typeof(me:HeaderIconCell);
|
|
else
|
|
HeaderType = typeof(me:HeaderCell);
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="ColumnHeaders" Base="core:ReorderableListBase">
|
|
<Properties>
|
|
<me:ColumnData Name="ColumnData" ColumnData="$Required"/>
|
|
<List Name="Content" List="{ColumnData.DisplayedColumns}"/>
|
|
<Boolean Name="CanReorder" Boolean="{ColumnData.CanReorderColumns}"/>
|
|
|
|
<me:SpreadSheetListModel Name="ListModel" SpreadSheetListModel="{null}"/>
|
|
<Int32 Name="HeaderSpacing" Int32="$Required"/>
|
|
<Int32 Name="HeaderHeight" Int32="$Required"/>
|
|
<Boolean Name="HighlightHeaders" Boolean="$Required"/>
|
|
<style:Style Name="HeaderStyle" Style="{styles:SharedStyles.ColumnHeaderStyleSet}"/>
|
|
<me:ListEditState Name="EditState" ListEditState="$Required"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<iris:BooleanChoice Name="MouseOverHeaders"/>
|
|
</Locals>
|
|
|
|
<Input>
|
|
<ClickHandler Name="ClickDetector" ClickType="Any" HandlerStage="Routed" Handle="false"/>
|
|
</Input>
|
|
|
|
<Scripts>
|
|
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(ClickDetector.Invoked)]
|
|
[DeclareTrigger(UI.DeepKeyFocus)]
|
|
|
|
EditState.InEditMode = false;
|
|
</Script>
|
|
|
|
<Script> MouseOverHeaders.Value = HighlightHeaders && [UI.DeepMouseFocus]; </Script>
|
|
<Script>
|
|
if ([IsDragging.Value])
|
|
{
|
|
LastIndicator.Index = Content.Count;
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script><![CDATA[
|
|
[DeclareTrigger(Target.Dropped)]
|
|
|
|
|
|
|
|
object value = Target.GetValue();
|
|
|
|
if (!(value is int))
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
int oldIndex = (int)value;
|
|
int insertAt = InsertIndex.Value;
|
|
|
|
if (insertAt >= 0 && insertAt <= Content.Count)
|
|
{
|
|
int newIndex;
|
|
|
|
|
|
|
|
if (insertAt > oldIndex)
|
|
newIndex = insertAt - 1;
|
|
else
|
|
newIndex = insertAt;
|
|
|
|
if (oldIndex != newIndex)
|
|
{
|
|
|
|
|
|
iris:ArrayListDataSet orderedColumns = (iris:ArrayListDataSet)ColumnData.OrderedColumns;
|
|
|
|
iris:ArrayListDataSet displayedColumns = ColumnData.DisplayedColumns;
|
|
|
|
int oldOrderedIndex = orderedColumns.IndexOf(displayedColumns.get_Item(oldIndex));
|
|
int newOrderedIndex = orderedColumns.IndexOf(displayedColumns.get_Item(newIndex));
|
|
|
|
orderedColumns.Move(oldOrderedIndex, newOrderedIndex);
|
|
ColumnData.ColumnOrderChanged.Invoke();
|
|
}
|
|
}
|
|
}
|
|
]]></Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Layout="Anchor">
|
|
<Children>
|
|
|
|
<Repeater Name="Repeater" ContentName="Item" Layout="{ListLayout}" DiscardOffscreenVisuals="true"/>
|
|
|
|
<core:Indicator Name="LastIndicator" InsertAtIndex="{InsertIndex}" MinimumSize="1, 0"
|
|
Visible="{MouseOverHeaders}" Color="{styles:Styles.ColumnDivider}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Repeater,1,0" Top="Repeater,0" Bottom="Repeater,1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:Indicator>
|
|
|
|
|
|
<Graphic Name="SelectionRect"/>
|
|
<Panel Name="Background"/>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
|
|
<Content Name="Item">
|
|
<Panel Layout="Anchor" LayoutInput="{((me:ColumnInfo)RepeatedItem).LayoutInput}">
|
|
<Children>
|
|
|
|
|
|
|
|
<core:ItemDropZone Index="{RepeatedItemIndex}" IsVisible="{IsDragging}"
|
|
ValidTarget="{RepeatedItemIndex.Value >= ColumnData.FixedColumns}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Item, 0, -15" Bottom="Item, 1, 15" Left="Item,0" Right="Item,0.5"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:ItemDropZone>
|
|
|
|
|
|
<core:ItemDropZone Index="{RepeatedItemIndex}" IndexModifier="1" IsVisible="{IsDragging}"
|
|
ValidTarget="{RepeatedItemIndex.Value + 1 >= ColumnData.FixedColumns}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Item, 0, -15" Bottom="Item, 1, 15" Left="Item,0.5" Right="Item,1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:ItemDropZone>
|
|
|
|
|
|
<core:Indicator Index="{RepeatedItemIndex}" InsertAtIndex="{InsertIndex}" MinimumSize="0, 1"
|
|
Visible="{MouseOverHeaders}" Color="{styles:Styles.ColumnDivider}"
|
|
ForceHidden="{!((me:ColumnInfo)RepeatedItem).ShowDivider}" HideFirstIndicator="true">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Item, 0" Top="Item, 0" Bottom="Item, 1"
|
|
ContributesToWidth="false" ContributesToHeight="false"/>
|
|
</LayoutInput>
|
|
</core:Indicator>
|
|
|
|
<me:ColumnHeader Name="Item"
|
|
ColumnData="{ColumnData}"
|
|
ColumnInfo="{(me:ColumnInfo)RepeatedItem}"
|
|
ColumnWidthsChanged="{ColumnData.ColumnWidthsChanged}"
|
|
ListModel="{ListModel}"
|
|
HeaderSpacing="{HeaderSpacing}"
|
|
Index="{RepeatedItemIndex}"
|
|
CanReorder="{CanReorder && RepeatedItemIndex.Value >= ColumnData.FixedColumns}"
|
|
IsDragging="{IsDragging}"
|
|
MouseOverHeaders="{MouseOverHeaders}"
|
|
HeaderHeight="{HeaderHeight}"
|
|
HeaderStyle="{HeaderStyle}"/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="ColumnHeader">
|
|
<Properties>
|
|
<me:ColumnData Name="ColumnData" ColumnData="$Required"/>
|
|
<me:ColumnInfo Name="ColumnInfo" ColumnInfo="$Required"/>
|
|
<Command Name="ColumnWidthsChanged" Command="$Required"/>
|
|
<me:SpreadSheetListModel Name="ListModel" SpreadSheetListModel="{null}"/>
|
|
<Int32 Name="HeaderSpacing" Int32="$Required"/>
|
|
<Index Name="Index" Index="$Required"/>
|
|
<Boolean Name="CanReorder" Boolean="$Required"/>
|
|
<iris:BooleanChoice Name="IsDragging" BooleanChoice="$Required"/>
|
|
<iris:BooleanChoice Name="MouseOverHeaders" BooleanChoice="$Required"/>
|
|
<style:Style Name="HeaderStyle" Style="$Required"/>
|
|
<Int32 Name="HeaderHeight" Int32="$Required"/>
|
|
</Properties>
|
|
|
|
<Input>
|
|
|
|
<DragSourceHandler Name="DragSource" Enabled="{CanReorder}" AllowedDropActions="Move"
|
|
MoveCursor="Arrow" CancelCursor="Arrow" HandlerStage="Direct,Bubbled"/>
|
|
|
|
|
|
<ClickHandler Name="SortHandler" ClickType="LeftMouse" Enabled="{ColumnInfo.SortBy != null}" HandlerStage="Direct,Bubbled"/>
|
|
</Input>
|
|
|
|
<Scripts>
|
|
<Script> Resizer.Visible = [ColumnInfo.Resizable]; </Script>
|
|
|
|
<Script> DragSource.Value = [Index.Value]; </Script>
|
|
|
|
<Script> IsDragging.Value = [DragSource.Dragging]; </Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(SortHandler.Invoked)]
|
|
|
|
if (ColumnData.SortedColumn == ColumnInfo.SortBy)
|
|
{
|
|
|
|
ColumnData.SortAscending = !ColumnData.SortAscending;
|
|
}
|
|
else
|
|
{
|
|
ColumnData.SortedColumn = ColumnInfo.SortBy;
|
|
ColumnData.SortAscending = ColumnInfo.SortAscendingDefault;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
Header.MouseOverSortArea = [UI.DeepMouseFocus] &&
|
|
![Resizer.MouseFocus] &&
|
|
![DragSource.Dragging];
|
|
</Script>
|
|
|
|
<Script>
|
|
if ([MouseOverHeaders.Value])
|
|
{
|
|
if ([UI.DeepMouseFocus] && ColumnInfo.HighlightHeader)
|
|
{
|
|
Content.Content = styles:Styles.ListHeaderActiveHoverBackground;
|
|
}
|
|
else
|
|
{
|
|
Content.Content = styles:Styles.ListHeaderHoverBackground;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Content.Content = styles:Styles.ListHeaderBackground;
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<ColorFill Name="Content" Layout="Anchor"
|
|
SharedSize="{ColumnInfo.ColumnSize}" SharedSizePolicy="SharesWidth"
|
|
MinimumSize="{new Size(0,HeaderHeight)}" MaximumSize="{new Size(0,HeaderHeight)}">
|
|
<Children>
|
|
|
|
<me:ColumnResizer Name="Resizer" ColumnInfo="{ColumnInfo}" ColumnWidthsChanged="{ColumnWidthsChanged}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,1,-7" Right="Parent,1,7" Top="Parent,0" Bottom="Parent,1"
|
|
ContributesToWidth="false"/>
|
|
</LayoutInput>
|
|
</me:ColumnResizer>
|
|
|
|
|
|
<me:Cell Name="Header"
|
|
Cell="{ColumnInfo.HeaderType}"
|
|
Model="{ColumnInfo}"
|
|
ListModel="{ListModel}"
|
|
Padding="{ColumnInfo.HeaderPadding}"
|
|
Style="{HeaderStyle}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0" Top="Parent,0"/>
|
|
</LayoutInput>
|
|
</me:Cell>
|
|
|
|
</Children>
|
|
</ColorFill>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="ColumnResizer">
|
|
<Properties>
|
|
<me:ColumnInfo Name="ColumnInfo" ColumnInfo="$Required"/>
|
|
<Command Name="ColumnWidthsChanged" Command="$Required"/>
|
|
<Boolean Name="MouseFocus"/>
|
|
</Properties>
|
|
<Locals>
|
|
<Size Name="InitialSize"/>
|
|
</Locals>
|
|
|
|
<Input>
|
|
<ClickHandler Name="Clicker" ClickType="LeftMouse" ClickCount="Double"/>
|
|
<DragHandler Name="Dragger" CancelOnEscape="true"/>
|
|
</Input>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
UI.Cursor = Cursor.SizeWE;
|
|
</Script>
|
|
<Script>
|
|
MouseFocus = [UI.MouseFocus];
|
|
</Script>
|
|
<Script>
|
|
[DeclareTrigger(Dragger.Started)]
|
|
|
|
InitialSize = ColumnInfo.ColumnSize.Size;
|
|
</Script>
|
|
<Script>
|
|
[DeclareTrigger(Dragger.AbsoluteDragSize)]
|
|
ColumnInfo.ColumnSize.Size = new Size(sys:Math.Max(0, InitialSize.Width + Dragger.AbsoluteDragSize.Width), InitialSize.Height);
|
|
</Script>
|
|
<Script>
|
|
[DeclareTrigger(Dragger.Ended)]
|
|
ColumnWidthsChanged.Invoke();
|
|
</Script>
|
|
<Script>
|
|
[DeclareTrigger(Dragger.Cancelled)]
|
|
ColumnInfo.ColumnSize.Size = InitialSize;
|
|
</Script>
|
|
<Script>
|
|
[DeclareTrigger(Clicker.Invoked)]
|
|
ColumnInfo.ColumnSize.AutoSize();
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel/>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="CellHost">
|
|
<Properties>
|
|
<me:SpreadSheetListModel Name="ListModel" SpreadSheetListModel="{null}"/>
|
|
<Object Name="Model" Object="$Required"/>
|
|
|
|
<me:ColumnInfo Name="ColumnInfo" ColumnInfo="$Required"/>
|
|
<style:Style Name="Style" Style="$Required"/>
|
|
|
|
<me:AccessibleDescriptionReference Name="AggregateAccessibleDescription" AccessibleDescriptionReference="{null}"/>
|
|
<Index Name="RowIndex" Index="$Required"/>
|
|
<me:ListEditState Name="EditState" ListEditState="$Required"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<core:ListItemContext Name="CellContext" Index="{RowIndex}" MainContext="false"/>
|
|
<Command Name="EditMe" />
|
|
<iris:BooleanChoice Name="IsEditing" BooleanChoice="{null}"/>
|
|
</Locals>
|
|
|
|
<Input>
|
|
<EventContext Value="{CellContext}"/>
|
|
<KeyHandler Name="Escape" Key="Escape" Enabled="false" HandlerStage="Bubbled" />
|
|
</Input>
|
|
|
|
<Scripts>
|
|
|
|
|
|
<Script>
|
|
if (ColumnInfo.CellEditType != null)
|
|
{
|
|
CellContext.Edit = EditMe;
|
|
}
|
|
</Script>
|
|
|
|
|
|
|
|
<Script><![CDATA[
|
|
[DeclareTrigger(IsEditing.Value)]
|
|
|
|
Escape.Enabled = (IsEditing != null && IsEditing.Value);
|
|
|
|
if (IsEditing != null && !IsEditing.Value)
|
|
{
|
|
UI.DisposeOwnedObject(IsEditing);
|
|
IsEditing = null;
|
|
|
|
Content.RequestSource(ColumnInfo.CellType);
|
|
}
|
|
|
|
]]></Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(Escape.Invoked)]
|
|
EditState.InEditMode = false;
|
|
EditState.Cancelled = true;
|
|
if (IsEditing != null)
|
|
{
|
|
IsEditing.Value = false;
|
|
}
|
|
</Script>
|
|
|
|
|
|
<Script><![CDATA[
|
|
|
|
|
|
|
|
|
|
|
|
bool inEditMode = [EditState.InEditMode];
|
|
bool canEdit = ColumnInfo.CellEditType != null;
|
|
|
|
if (inEditMode && canEdit)
|
|
{
|
|
UI.KeyInteractive = true;
|
|
Content.Navigation = NavigationPolicies.TabGroup;
|
|
}
|
|
else
|
|
{
|
|
UI.KeyInteractive = false;
|
|
Content.Navigation = NavigationPolicies.None;
|
|
}
|
|
|
|
|
|
|
|
Content.InputEnabled = !inEditMode || canEdit;
|
|
|
|
]]></Script>
|
|
|
|
|
|
<Script>
|
|
[DeclareTrigger(EditMe.Invoked)]
|
|
IsEditing = new iris:BooleanChoice();
|
|
IsEditing.Value = true;
|
|
EditState.InEditMode = true;
|
|
|
|
Content.RequestSource(ColumnInfo.CellEditType, "IsEditing", IsEditing);
|
|
Content.NavigateInto();
|
|
</Script>
|
|
|
|
|
|
|
|
<Script><![CDATA[
|
|
[DeclareTrigger(UI.DeepKeyFocus)]
|
|
|
|
if (UI.DeepKeyFocus && EditState.InEditMode && IsEditing == null)
|
|
{
|
|
if (ColumnInfo.CellEditType != null)
|
|
{
|
|
EditMe.Invoke();
|
|
}
|
|
}
|
|
]]></Script>
|
|
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<me:Cell Name="Content" Cell="{ColumnInfo.CellType}"
|
|
Style="{Style}"
|
|
ListModel="{ListModel}"
|
|
ListEditState="{EditState}"
|
|
Model="{Model}"
|
|
RowIndex="{RowIndex}"
|
|
Padding="{ColumnInfo.CellPadding}"
|
|
SharedSize="{ColumnInfo.ColumnSize}"
|
|
SharedSizePolicy="ContributesToWidth,SharesWidth"
|
|
AggregateAccessibleDescription="{AggregateAccessibleDescription}"/>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="Cell">
|
|
<Properties>
|
|
<style:Style Name="Style" Style="$Required"/>
|
|
<me:SpreadSheetListModel Name="ListModel" SpreadSheetListModel="{null}"/>
|
|
<Object Name="Model" Object="{null}"/>
|
|
<Index Name="RowIndex" Index="{null}"/>
|
|
<String Name="AccessibleDescription" String="{null}"/>
|
|
<me:AccessibleDescriptionReference Name="AggregateAccessibleDescription" AccessibleDescriptionReference="{null}"/>
|
|
<me:ListEditState Name="ListEditState" ListEditState="{null}"/>
|
|
<iris:BooleanChoice Name="IsEditing" BooleanChoice="{null}"/>
|
|
<Boolean Name="MouseOverSortArea" Boolean="false"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
|
|
<Script>
|
|
<![CDATA[
|
|
if (AggregateAccessibleDescription != null)
|
|
{
|
|
if ([AggregateAccessibleDescription.Active] && ([AccessibleDescription] != null))
|
|
{
|
|
|
|
if (AggregateAccessibleDescription.Value == null)
|
|
{
|
|
AggregateAccessibleDescription.Value = AccessibleDescription;
|
|
}
|
|
else
|
|
{
|
|
AggregateAccessibleDescription.Value = "{0}, {1}".Format(AggregateAccessibleDescription.Value, AccessibleDescription);
|
|
}
|
|
}
|
|
}
|
|
]]>
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="ToolTipCell" Base="me:Cell">
|
|
<Properties>
|
|
<String Name="ToolTipText" String="{null}"/>
|
|
<PlacementMode Name="ToolTipPlacement" PlacementMode="Origin"/>
|
|
<style:Style Name="ToolTipStyle" Style="{null}"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
|
|
<tooltip:ToolTip Name="ToolTip" ToolTip="{null}"/>
|
|
</Locals>
|
|
|
|
<Scripts>
|
|
|
|
|
|
<Script><![CDATA[
|
|
[DeclareTrigger(UI.DeepMouseFocus)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ToolTip != null)
|
|
{
|
|
UI.DisposeOwnedObject(ToolTip);
|
|
ToolTip = null;
|
|
}
|
|
|
|
if (UI.DeepMouseFocus)
|
|
{
|
|
|
|
|
|
|
|
|
|
if (!String.IsNullOrEmpty(ToolTipText))
|
|
{
|
|
ToolTip = new tooltip:ToolTip();
|
|
PopupLayoutInput input = new PopupLayoutInput();
|
|
input.Placement = ToolTipPlacement;
|
|
input.PlacementTarget = ToolTipOrigin;
|
|
if (ToolTipPlacement == PlacementMode.Origin) input.Offset = tooltip:ToolTipConstants.InversePadding;
|
|
ToolTip.LayoutInput = input;
|
|
ToolTip.Model = ToolTipText;
|
|
if (ToolTipStyle != null)
|
|
{
|
|
ToolTip.Font = ToolTipStyle.Font;
|
|
}
|
|
else if (Style != null)
|
|
{
|
|
ToolTip.Font = Style.Font;
|
|
}
|
|
ToolTip.Helper.ShowToolTip(ToolTip);
|
|
}
|
|
}
|
|
]]></Script>
|
|
</Scripts>
|
|
<Content>
|
|
<Panel Name="ToolTipOrigin"/>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="EditCell" Base="me:Cell">
|
|
<Properties>
|
|
|
|
|
|
<Command Name="ValidateValue"/>
|
|
|
|
|
|
<Command Name="CommitValue"/>
|
|
|
|
|
|
<Command Name="ValidateFailed"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script><![CDATA[
|
|
[DeclareTrigger(UI.DeepKeyFocus)]
|
|
|
|
if (!UI.DeepKeyFocus && !ListEditState.Cancelled)
|
|
{
|
|
ValidateValue.Invoke();
|
|
}
|
|
]]></Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(CommitValue.Invoked)]
|
|
[DeclareTrigger(ValidateFailed.Invoked)]
|
|
|
|
|
|
|
|
|
|
IsEditing.Value = false;
|
|
</Script>
|
|
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="LabelCell" Base="me:ToolTipCell">
|
|
<Properties>
|
|
<String Name="Content" String="{null}"/>
|
|
|
|
<Boolean Name="WordWrap" Boolean="false"/>
|
|
<Int32 Name="MaximumLines" Int32="0"/>
|
|
<Boolean Name="ShowToolTipWhenClipped" Boolean="true"/>
|
|
|
|
|
|
<Boolean Name="Clipped"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<Accessible Name="Accessible"/>
|
|
<DockLayout Name="DockLayout_LeftNear_SizeToChildren" DefaultLayoutInput="Left,Near" SizeToChildren="true"/>
|
|
</Locals>
|
|
|
|
<Scripts>
|
|
<Script>private_Label.WordWrap = [WordWrap];</Script>
|
|
<Script>private_Label.MaximumLines = [MaximumLines];</Script>
|
|
<Script>private_Label.Color = [Style.Color];</Script>
|
|
<Script>private_Label.Font = [Style.Font];</Script>
|
|
<Script>private_Label.Style = [Style.TextStyle];</Script>
|
|
<Script>private_Label.Margins = [Style.TextMargins];</Script>
|
|
<Script>Clipped = [private_Label.Clipped];</Script>
|
|
|
|
<Script>private_Label.Content = [Content];</Script>
|
|
|
|
<Script>
|
|
private_Label.Content = [Content];
|
|
AccessibleDescription = Content;
|
|
</Script>
|
|
|
|
<Script>
|
|
if ([ShowToolTipWhenClipped] && ([Clipped] || ![private_Label.Visible]))
|
|
ToolTipText = [private_Label.Content];
|
|
else
|
|
ToolTipText = null;
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Panel Name="ToolTipOrigin" Layout="{DockLayout_LeftNear_SizeToChildren}">
|
|
<Children>
|
|
|
|
<Text Name="private_Label" MouseInteractive="true"/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="LabelEditCell" Base="me:EditCell">
|
|
<Properties>
|
|
<EditableTextData Name="EditableText"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
[DeclareTrigger(EditableText.Submitted)]
|
|
|
|
ValidateValue.Invoke();
|
|
|
|
|
|
ListEditState.InEditMode = false;
|
|
</Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(ValidateValue.Invoked)]
|
|
|
|
if (!String.IsNullOrEmpty(EditableText.Value))
|
|
{
|
|
CommitValue.Invoke();
|
|
}
|
|
else
|
|
{
|
|
ValidateFailed.Invoke();
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Navigation="ContainHorizontal" Layout="Anchor">
|
|
<Children>
|
|
|
|
<me:LabelEditbox Name="Edit" Style="{Style}" Model="{EditableText}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Horizontal="Fill"/>
|
|
</LayoutInput>
|
|
</me:LabelEditbox>
|
|
|
|
<ColorFill Content="{styles:Styles.SearchBoxBackground}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Edit,0" Bottom="Edit,1" Horizontal="Fill"/>
|
|
</LayoutInput>
|
|
</ColorFill>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="NumberTitleCell" Base="me:ToolTipCell">
|
|
<Properties>
|
|
<Int32 Name="Number"/>
|
|
<String Name="Title"/>
|
|
<Boolean Name="ShowNumber" Boolean="true"/>
|
|
<Size Name="NumberSize" Size="24,0"/>
|
|
<style:Style Name="NumberStyle" Style="{Style}"/>
|
|
|
|
<AccessibleRole Name="Role" AccessibleRole="StaticText"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<Accessible Name="Accessible"/>
|
|
</Locals>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
if ([ShowNumber])
|
|
{
|
|
NumberText.Content = [Number].ToString("D2");
|
|
NumberText.MinimumSize = NumberSize;
|
|
}
|
|
else
|
|
{
|
|
NumberText.Content = "";
|
|
NumberText.MinimumSize = new Size();
|
|
}
|
|
</Script>
|
|
<Script> TitleText.Content = [Title]; </Script>
|
|
|
|
<Script> NumberText.Color = [NumberStyle.Color]; </Script>
|
|
<Script> TitleText.Color = [Style.Color]; </Script>
|
|
|
|
<Script> NumberText.Font = [NumberStyle.Font]; </Script>
|
|
<Script> TitleText.Font = [Style.Font]; </Script>
|
|
|
|
<Script> NumberText.Style = [NumberStyle.TextStyle]; </Script>
|
|
<Script> TitleText.Style = [Style.TextStyle]; </Script>
|
|
|
|
<Script> NumberText.Margins = [NumberStyle.TextMargins]; </Script>
|
|
<Script> TitleText.Margins = [Style.TextMargins]; </Script>
|
|
|
|
<Script>
|
|
if ([Accessible.Enabled])
|
|
{
|
|
if ([ShowNumber])
|
|
Accessible.Name = "{0} {1}".Format(Number, Title);
|
|
else
|
|
Accessible.Name = Title;
|
|
|
|
Accessible.Role = Role;
|
|
}
|
|
</Script>
|
|
<Script>
|
|
if ([TitleText.Clipped])
|
|
{
|
|
if ([ShowNumber])
|
|
ToolTipText = "{0} {1}".Format(NumberText.Content, TitleText.Content);
|
|
else
|
|
ToolTipText = Title;
|
|
}
|
|
else
|
|
{
|
|
ToolTipText = null;
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Name="ToolTipOrigin">
|
|
<Layout>
|
|
|
|
|
|
|
|
<DockLayout DefaultLayoutInput="Left,Near" SizeToChildren="true"/>
|
|
</Layout>
|
|
<Children>
|
|
|
|
<Text Name="NumberText" MouseInteractive="true"/>
|
|
<Text Name="TitleText" MouseInteractive="true"/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="NumberTitleEditCell" Base="me:EditCell">
|
|
<Properties>
|
|
<Int32 Name="Number"/>
|
|
<String Name="Title"/>
|
|
<Boolean Name="ShowNumber" Boolean="true"/>
|
|
<Size Name="NumberSize" Size="24,0"/>
|
|
<style:Style Name="NumberStyle" Style="{Style}"/>
|
|
|
|
<EditableTextData Name="EditableText"/>
|
|
</Properties>
|
|
|
|
|
|
<Scripts>
|
|
|
|
<Script>
|
|
[DeclareTrigger(EditableText.Submitted)]
|
|
|
|
|
|
ValidateValue.Invoke();
|
|
|
|
|
|
ListEditState.InEditMode = false;
|
|
</Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(ValidateValue.Invoked)]
|
|
|
|
if (!String.IsNullOrEmpty(EditableText.Value))
|
|
{
|
|
CommitValue.Invoke();
|
|
}
|
|
else
|
|
{
|
|
ValidateFailed.Invoke();
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
if ([ShowNumber])
|
|
{
|
|
NumberText.Content = [Number].ToString("D2");
|
|
NumberText.MinimumSize = NumberSize;
|
|
}
|
|
else
|
|
{
|
|
NumberText.Content = "";
|
|
NumberText.MinimumSize = new Size();
|
|
}
|
|
</Script>
|
|
|
|
<Script> NumberText.Color = [NumberStyle.Color]; </Script>
|
|
<Script> NumberText.Font = [NumberStyle.Font]; </Script>
|
|
<Script> NumberText.Style = [NumberStyle.TextStyle]; </Script>
|
|
|
|
<Script> NumberText.Margins = [NumberStyle.TextMargins]; </Script>
|
|
</Scripts>
|
|
|
|
|
|
<Content>
|
|
<Panel Navigation="ContainHorizontal" Layout="Anchor">
|
|
<Children>
|
|
|
|
<Text Name="NumberText">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="Parent,0"/>
|
|
</LayoutInput>
|
|
</Text>
|
|
|
|
<me:LabelEditbox Name="Edit" Style="{Style}" Model="{EditableText}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Left="NumberText, 1" Horizontal="Fill"/>
|
|
</LayoutInput>
|
|
</me:LabelEditbox>
|
|
|
|
<ColorFill Content="{styles:Styles.SearchBoxBackground}">
|
|
<LayoutInput>
|
|
<AnchorLayoutInput Top="Edit,0" Bottom="Edit,1" Left="Edit, 0" Horizontal="Fill"/>
|
|
</LayoutInput>
|
|
</ColorFill>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
<Class Name="Globals" Shared="true">
|
|
<Properties>
|
|
<String Name="Unknown" String="{zune:Shell.LoadString(zune:StringId.IDS_TYPE_UNKNOWN)}"/>
|
|
|
|
|
|
<AnchorLayoutInput Name="LabelIconCellLabelPosition" Left="Parent, 0" Top="Parent, 0" />
|
|
<AnchorLayoutInput Name="LabelIconCellIconPosition" Left="private_Label, 1, 5" Top="Parent, 0, 5" />
|
|
|
|
|
|
<AnchorLayoutInput Name="HeaderCellIconPosition" Left="private_Label,1,-10" Top="Parent, 0, 6"/>
|
|
</Properties>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="FallbackCell" Base="me:LabelCell">
|
|
<Properties>
|
|
<String Name="Fallback" String="{me:Globals.Unknown}"/>
|
|
</Properties>
|
|
<Scripts>
|
|
<Script>
|
|
if (String.IsNullOrEmpty([Content]))
|
|
{
|
|
private_Label.Content = Fallback;
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="DateCell" Base="me:FallbackCell">
|
|
<Properties>
|
|
<sys:DateTime Name="Date"/>
|
|
<String Name="Format" String="d"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
|
|
if ([Date].Year == 1)
|
|
{
|
|
Content = null;
|
|
}
|
|
else
|
|
{
|
|
|
|
|
|
Content = Date.ToLocalTime().ToString(Format);
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="LongDateTimeCell" Base="me:DateCell">
|
|
<Properties>
|
|
<String Name="Format" String="G"/>
|
|
</Properties>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="LengthCell" Base="me:LabelCell">
|
|
<Properties>
|
|
<sys:TimeSpan Name="Length"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
Content = zune:Shell.TimeSpanToString([Length]);
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="ButtonCell" Base="me:Cell">
|
|
<Properties>
|
|
<iris:Command Name="Command"/>
|
|
<style:Style Name="DirectHoverStyle" Style="{styles:SharedStyles.HoveredButtonCellStyle}"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<style:CompositeStyle Name="CompositeStyle" Base="{Style}"/>
|
|
</Locals>
|
|
|
|
<Scripts>
|
|
<Script>Button.Model = [Command];</Script>
|
|
|
|
|
|
<Script>
|
|
if ([UI.DeepMouseFocus])
|
|
CompositeStyle.Override = DirectHoverStyle;
|
|
else
|
|
CompositeStyle.Override = null;
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
|
|
|
|
<Panel Layout="Anchor">
|
|
<Children>
|
|
|
|
<core:Button Name="Button" Model="{Command}" OverrideStyle="{CompositeStyle}" MouseInteractive="true"/>
|
|
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="ActionButtonCell" Base="me:Cell">
|
|
<Properties>
|
|
|
|
<iris:Command Name="Command" Command="{null}"/>
|
|
<Image Name="Icon" Image="null"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>Button.Model = [Command];</Script>
|
|
<Script>Button.Icon = [Icon];</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<actionprogressbutton:ActionProgressButton Name="Button" Model="{Command}" />
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
|
|
<UI Name="LabelIconCell" Base="me:LabelCell">
|
|
<Properties>
|
|
<Image Name="Icon" Image="{null}"/>
|
|
<LayoutInput Name="LabelPosition" LayoutInput="{me:Globals.LabelIconCellLabelPosition}"/>
|
|
<LayoutInput Name="IconPosition" LayoutInput="{me:Globals.LabelIconCellIconPosition}"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
IconGraphic.Content = [Icon];
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Name="ToolTipOrigin" Layout="Anchor">
|
|
<Children>
|
|
<Text Name="private_Label" MouseInteractive="true" LayoutInput="{LabelPosition}"/>
|
|
|
|
|
|
<Graphic Name="IconGraphic" LayoutInput="{IconPosition}"/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="IconCell" Base="me:ToolTipCell">
|
|
<Properties>
|
|
<Image Name="Icon" Image="{null}"/>
|
|
<String Name="ToolTipText" String="{null}"/>
|
|
<style:Style Name="ToolTipStyle" Style="{styles:SharedStyles.ToolTipStyle}"/>
|
|
<PlacementMode Name="ToolTipPlacement" PlacementMode="MouseBottom"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
IconGraphic.Content = [Icon];
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel Name="ToolTipOrigin" MouseInteractive="true">
|
|
<Children>
|
|
<Graphic
|
|
Name="IconGraphic"
|
|
Content="{Icon}"
|
|
SizingPolicy="SizeToContent"
|
|
StretchingPolicy="None"
|
|
HorizontalAlignment="Center" VerticalAlignment="Center"/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="ToStringCell" Base="me:LabelCell">
|
|
<Scripts>
|
|
<Script>
|
|
if (Model != null)
|
|
Content = [Model].ToString();
|
|
else
|
|
Content = "";
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="HeaderCell" Base="me:LabelIconCell">
|
|
<Properties>
|
|
<me:ColumnInfoBase Name="Model" ColumnInfoBase="$Required"/>
|
|
<LayoutInput Name="IconPosition" LayoutInput="{me:Globals.HeaderCellIconPosition}"/>
|
|
</Properties>
|
|
<Scripts>
|
|
<Script> Content = [Model.Header]; </Script>
|
|
|
|
<Script>
|
|
Image icon = null;
|
|
if (Model.SortBy != null)
|
|
{
|
|
bool showArrow = false;
|
|
bool sortAscending;
|
|
|
|
if (Model.SortBy == [ListModel.ColumnData.SortedColumn])
|
|
{
|
|
showArrow = true;
|
|
sortAscending = [ListModel.ColumnData.SortAscending];
|
|
}
|
|
else if ([MouseOverSortArea])
|
|
{
|
|
|
|
|
|
showArrow = true;
|
|
sortAscending = Model.SortAscendingDefault;
|
|
}
|
|
|
|
if (showArrow)
|
|
{
|
|
if (sortAscending)
|
|
{
|
|
icon = styles:Styles.SortArrowUp;
|
|
}
|
|
else
|
|
{
|
|
icon = styles:Styles.SortArrowDown;
|
|
}
|
|
}
|
|
}
|
|
|
|
Icon = icon;
|
|
if (Icon != null)
|
|
{
|
|
private_Label.Margins = new Inset(0,0,18,0);
|
|
}
|
|
else
|
|
{
|
|
private_Label.Margins = new Inset();
|
|
}
|
|
</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="HeaderIconCell" Base="me:IconCell">
|
|
<Properties>
|
|
<me:ColumnInfoBase Name="Model" ColumnInfoBase="$Required"/>
|
|
</Properties>
|
|
<Scripts>
|
|
<Script> Icon = Model.HeaderIcon; </Script>
|
|
<Script> ToolTipText = Model.Header; </Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="LabelEditbox" Base="core:Editbox">
|
|
<Properties>
|
|
<Size Name="TileMinSize" Size="0,0"/>
|
|
<Size Name="TileMaxSize" Size="0,0"/>
|
|
<Inset Name="TilePadding" Inset="0,0,0,0"/>
|
|
<Int32 Name="DefaultHeight" Int32="0"/>
|
|
</Properties>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="CommandDescriptionCell" Base="me:LabelCell">
|
|
<Properties>
|
|
<iris:Command Name="Model" Command="$Required"/>
|
|
</Properties>
|
|
|
|
<Scripts>
|
|
<Script>Content = [Model.Description];</Script>
|
|
</Scripts>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<UI Name="MediaStatusCell" Base="me:Cell">
|
|
<Properties>
|
|
<zune:StringId Name="ErrorTitle" StringId="{zune:StringId.IDS_PLAYBACK_CANNOT_PLAY}"/>
|
|
<zune:StringId Name="ErrorTooltip" StringId="{zune:StringId.IDS_PLAYBACK_CANNOT_PLAY_TOOLTIP}"/>
|
|
<Int32 Name="ErrorCode"/>
|
|
<Boolean Name="IsNowPlaying"/>
|
|
</Properties>
|
|
|
|
<Locals>
|
|
<iris:Command Name="ShowErrorDialog"/>
|
|
</Locals>
|
|
|
|
<Scripts>
|
|
<Script>
|
|
ShowErrorDialog.Description = zune:Shell.LoadString([ErrorTooltip]);
|
|
</Script>
|
|
|
|
<Script>
|
|
if ([ErrorCode] < 0)
|
|
{
|
|
Icon.Model = ShowErrorDialog;
|
|
Icon.Style = images:Images.ErrorIcon;
|
|
}
|
|
else if ([IsNowPlaying])
|
|
{
|
|
Icon.Model = images:Images.NowPlayingIconCommand;
|
|
Icon.Style = images:Images.NowPlayingIcon;
|
|
}
|
|
else
|
|
{
|
|
Icon.Model = null;
|
|
Icon.Style = images:Images.EmptyStyle;
|
|
}
|
|
</Script>
|
|
|
|
<Script>
|
|
[DeclareTrigger(ShowErrorDialog.Invoked)]
|
|
zune:Shell.ShowErrorDialog(ErrorCode, ErrorTitle);
|
|
</Script>
|
|
</Scripts>
|
|
|
|
<Content>
|
|
<Panel>
|
|
<Children>
|
|
<images:IconButton
|
|
KeyInteractiveNStuff="false"
|
|
Name="Icon"
|
|
Model="{null}"
|
|
Style="{images:Images.EmptyStyle}"
|
|
/>
|
|
</Children>
|
|
</Panel>
|
|
</Content>
|
|
</UI>
|
|
|
|
|
|
|
|
|
|
<Class Name="SortDescription">
|
|
<Properties>
|
|
<String Name="Attribute" String="$Required"/>
|
|
<Boolean Name="SupportsJumpInList" Boolean="false"/>
|
|
</Properties>
|
|
</Class>
|
|
|
|
|
|
|
|
|
|
<Class Name="ListEditState">
|
|
<Properties>
|
|
<Boolean Name="InEditMode"/>
|
|
<Boolean Name="Cancelled"/>
|
|
</Properties>
|
|
</Class>
|
|
|
|
</UIX>
|
|
|