Files
ZuneUIXTools/test/2.1/SPLITTER.UIX
T

508 lines
13 KiB
Plaintext

<!-- Copyright (C) Microsoft Corporation. All rights reserved. -->
<UIX xmlns="http://schemas.microsoft.com/2007/uix"
xmlns:iris="assembly://UIX/Microsoft.Iris"
xmlns:zune="assembly://ZuneShell/ZuneUI"
xmlns:sys="assembly://mscorlib/System"
xmlns:styles="res://ZuneShellResources!Styles.uix"
xmlns:animations="res://ZuneShellResources!Animations.uix"
xmlns:me="Me">
<Class Name="Positions">
<Properties>
<List Name="DefaultPositions"/>
<String Name="SaveKeyPrefix" String=""/>
<List Name="ActualPositions"/>
<Command Name="PositionsChanged"/>
</Properties>
<Scripts>
<Script>
List positions;
if (!String.IsNullOrEmpty(SaveKeyPrefix))
{
positions = zune:Shell.GetPositionList(SaveKeyPrefix + "Positions", DefaultPositions.Count);
}
if (positions == null)
{
positions = DefaultPositions;
}
foreach(float position in positions)
{
iris:RangedValue positionRangeValue = new iris:RangedValue();
positionRangeValue.Value = position;
ActualPositions.Add(positionRangeValue);
}
</Script>
<Script>
[DeclareTrigger(PositionsChanged.Invoked)]
if (!String.IsNullOrEmpty(SaveKeyPrefix))
{
zune:Shell.SaveRangedValueList(SaveKeyPrefix + "Positions", ActualPositions);
}
</Script>
</Scripts>
</Class>
<UI Name="SplitPanel">
<Properties>
<zune:LibraryPanel Name="Model" LibraryPanel="$Required"/>
<zune:ZunePage Name="Page" ZunePage="$Required"/>
<Command Name="PositionsChanged" Command="$Required"/>
</Properties>
<Scripts>
<Script> Self.RequestSource([Model.UI], "Model", Model, "Page", Page); </Script>
<Script>
[InitialEvaluate(true)]
[DeclareTrigger(Model.MinimumWidth)]
[DeclareTrigger(Model.MinimumPercent)]
PositionsChanged.Invoke();
</Script>
</Scripts>
<Content>
<Host Name="Self" FocusOrder="0">
<Animations>
<Animation Animation="{animations:Animations.ListFadeIn}"/>
<Animation Animation="{animations:Animations.ListContentChange}"/>
</Animations>
</Host>
</Content>
</UI>
<UI Name="Splitter">
<Properties>
<zune:ZunePage Name="Page" ZunePage="$Required"/>
<iris:ArrayListDataSet Name="Panels" ArrayListDataSet="{null}"/>
<me:Positions Name="Positions" Positions="{null}"/>
<Int32 Name="GripperWidth" Int32="10"/>
<Int32 Name="PreviewWidth" Int32="4"/>
<Boolean Name="ShowPreview" Boolean="false"/>
</Properties>
<Locals>
<Command Name="PositionsChanged"/>
</Locals>
<Scripts>
<Script> Repeater.Source = [Panels]; </Script>
<Script>
if ([Positions] != null)
Grippers.Source = Positions.ActualPositions;
else
Grippers.Source = null;
PositionsChanged.Invoke();
</Script>
<Script>
[DeclareTrigger(PositionsChanged.Invoked)]
int minimumWidth = 0;
int i = 0;
foreach (zune:LibraryPanel panel in (List)Panels)
{
AnchorLayoutInput input = (AnchorLayoutInput)panel.get_Item("LayoutInput");
if (input != null)
{
float leftPercent = 0.0;
if (i != 0)
{
leftPercent = ((iris:RangedValue)Positions.ActualPositions.GetItem(i - 1)).Value;
}
input.Left = new AnchorEdge("Parent", leftPercent, minimumWidth);
minimumWidth = minimumWidth + panel.MinimumWidth;
float rightPercent = 1.0;
if (i != Panels.Count - 1)
{
rightPercent = ((iris:RangedValue)Positions.ActualPositions.GetItem(i)).Value;
}
input.Right = new AnchorEdge("Parent", rightPercent, minimumWidth);
minimumWidth = minimumWidth + GripperWidth;
}
i = i + 1;
}
Inset margins = new Inset(0, 0, minimumWidth, 0);
Grippers.Margins = margins;
Repeater.Margins = margins;
Layout temp = Repeater.Layout;
Repeater.Layout = null;
Repeater.Layout = temp;
</Script>
</Scripts>
<Content>
<Panel>
<Children>
<Repeater Name="Grippers" Layout="Form">
<Content>
<me:Gripper Position="{(iris:RangedValue)RepeatedItem}"
Panels="{Panels}" Positions="{Positions}" Index="{RepeatedItemIndex}"
GripperWidth="{GripperWidth}"
PreviewWidth="{PreviewWidth}" ShowPreview="{ShowPreview}"
PositionsChanged="{PositionsChanged}" />
</Content>
</Repeater>
<Repeater Name="Repeater" Layout="Form">
<Content>
<me:SplitPanel Model="{(zune:LibraryPanel)RepeatedItem}"
Page="{Page}"
PositionsChanged="{PositionsChanged}" >
<LayoutInput>
<Script>
AnchorLayoutInput input = new AnchorLayoutInput();
input.Top = new AnchorEdge("Parent", 0.0);
input.Bottom = new AnchorEdge("Parent", 1.0);
zune:LibraryPanel panel = (zune:LibraryPanel)RepeatedItem;
panel.set_Item("LayoutInput", input);
return input;
</Script>
</LayoutInput>
</me:SplitPanel>
</Content>
</Repeater>
</Children>
</Panel>
</Content>
</UI>
<UI Name="Gripper">
<Properties>
<iris:RangedValue Name="Position" RangedValue="$Required"/>
<List Name="Panels" List="$Required"/>
<me:Positions Name="Positions" Positions="$Required"/>
<Int32 Name="GripperWidth" Int32="$Required"/>
<Index Name="Index" Index="$Required"/>
<Int32 Name="PreviewWidth" Int32="4"/>
<Boolean Name="ShowPreview" Boolean="$Required"/>
<Command Name="PositionsChanged" Command="$Required"/>
</Properties>
<Locals>
<AnchorLayoutInput Name="LayoutInput" Top="Parent,0" Bottom="Parent,1"/>
<AnchorLayoutInput Name="PreviewInput" Top="Parent,0" Bottom="Parent,1"/>
<Single Name="InitialPosition"/>
<Single Name="CurrentPosition"/>
</Locals>
<Input>
<DragHandler Name="Dragger" CancelOnEscape="true"/>
</Input>
<Scripts>
<Script>
UI.Cursor = Cursor.SizeWE;
LayoutInput.Left = new AnchorEdge("Parent", 0.0);
LayoutInput.Right = new AnchorEdge("Parent", 0.0, GripperWidth);
</Script>
<Script>
[DeclareTrigger(Position.Value)]
PositionsChanged.Invoke();
</Script>
<Script>
[InitialEvaluate(true)]
[DeclareTrigger(PositionsChanged.Invoked)]
LayoutInput.Left.Percent = Position.Value;
LayoutInput.Right.Percent = Position.Value;
int minimumWidth = 0;
int i = 0;
foreach (zune:LibraryPanel panel in (List)Panels)
{
minimumWidth = minimumWidth + panel.MinimumWidth + GripperWidth;
if (i == Index.Value)
{
LayoutInput.Left.Offset = minimumWidth - GripperWidth;
LayoutInput.Right.Offset = minimumWidth;
}
i = i + 1;
}
Layout temp = Root.Layout;
Root.Layout = null;
Root.Layout = temp;
</Script>
<Script>
[DeclareTrigger(Dragger.Cancelled)]
CurrentPosition = InitialPosition;
</Script>
<Script>
[DeclareTrigger(Dragger.Started)]
InitialPosition = ((iris:RangedValue)Positions.ActualPositions.GetItem(Index.Value)).Value;
CurrentPosition = InitialPosition;
if (ShowPreview)
{
PreviewInput.Left = new AnchorEdge("Parent", 0.0);
PreviewInput.Right = new AnchorEdge("Parent", 0.0);
Preview.Visible = true;
}
</Script>
<Script>
[DeclareTrigger(Dragger.Ended)]
if (ShowPreview)
{
Position.Value = CurrentPosition;
}
Preview.Visible = false;
Positions.PositionsChanged.Invoke();
</Script>
<Script>
[DeclareTrigger(Dragger.RelativeDragSize)]
if (Dragger.Dragging)
{
zune:LibraryPanel leftPanel = (zune:LibraryPanel)Panels.GetItem(Index.Value);
zune:LibraryPanel rightPanel = (zune:LibraryPanel)Panels.GetItem(Index.Value + 1);
float previousPosition = 0.0;
if (Index.Value > 0)
previousPosition = ((iris:RangedValue)Positions.ActualPositions.GetItem(Index.Value - 1)).Value;
float nextPosition = 1.0;
if (Index.Value &lt; Positions.ActualPositions.Count - 1)
nextPosition = ((iris:RangedValue)Positions.ActualPositions.GetItem(Index.Value + 1)).Value;
float min = previousPosition + leftPanel.MinimumPercent;
float max = nextPosition - rightPanel.MinimumPercent;
float currentPosition = InitialPosition + Dragger.RelativeDragSize.X;
currentPosition = sys:Math.Max(min, sys:Math.Min(currentPosition, max));
CurrentPosition = currentPosition;
}
</Script>
<Script>
[DeclareTrigger(CurrentPosition)]
if (ShowPreview)
{
PreviewInput.Left.Percent = CurrentPosition;
PreviewInput.Right.Percent = CurrentPosition;
int minimumWidth = 0;
int i = 0;
foreach (zune:LibraryPanel panel in (List)Panels)
{
minimumWidth = minimumWidth + panel.MinimumWidth + GripperWidth;
if (i == Index.Value)
{
int diff = (GripperWidth - PreviewWidth) / 2;
PreviewInput.Left.Offset = minimumWidth - GripperWidth + diff;
PreviewInput.Right.Offset = minimumWidth - diff;
}
i = i + 1;
}
Layout temp = Root.Layout;
Root.Layout = null;
Root.Layout = temp;
}
else
{
Position.Value = CurrentPosition;
}
</Script>
</Scripts>
<Content>
<Panel Name="Root" Layout="Form" MouseInteractive="false">
<Animations>
<Animation Animation="{animations:Animations.ListFadeIn}"/>
<Animation Animation="{animations:Animations.ListContentChange}"/>
</Animations>
<Children>
<Panel Name="Gripper" LayoutInput="{LayoutInput}" MouseInteractive="true"
Margins="0,38,0,0" Layout="Anchor">
<Children>
<Graphic Content="{styles:Styles.DividerVertical}">
<LayoutInput>
<AnchorLayoutInput Left="Parent,0" Top="Parent,0" Bottom="Parent,1"/>
</LayoutInput>
</Graphic>
</Children>
</Panel>
<ColorFill Name="Preview" Content="100,0,0,0" LayoutInput="{PreviewInput}" Visible="false"/>
</Children>
</Panel>
</Content>
</UI>
</UIX>