itemsListView.Children.RemoveAt(index);
}
+ private int selectedItemIndex = 0;
public int SelectedItemIndex
{
get
{
- return scrollableBase.CurrentPage;
+ return selectedItemIndex;
}
set
{
- if (scrollableBase.CurrentPage != value)
+ if (selectedItemIndex != value)
{
scrollableBase.ScrollToIndex(value);
SelectedItemChanged?.Invoke(this, null);
+ selectedItemIndex = value;
}
}
}
{
UpdateItems();
};
+ scrollableBase.ScrollAnimationEndEvent += (sender, args) =>
+ {
+ if (selectedItemIndex != scrollableBase.CurrentPage)
+ {
+ selectedItemIndex = scrollableBase.CurrentPage;
+ SelectedItemChanged?.Invoke(this, null);
+ }
+ };
if (upperLine != null)
{
protected override void OnLayout(bool changed, LayoutLength left, LayoutLength top, LayoutLength right, LayoutLength bottom)
{
+ ScrollableBase scrollableBase = this.Owner as ScrollableBase;
foreach( LayoutItem childLayout in LayoutChildren )
{
if( childLayout != null )
childLayout.Layout( childLeft, childTop, childLeft + childWidth, childTop + childHeight );
}
}
+ // workaround issue with ScrollableBase not properly scrolling
+ // to index when ScrollToIndex is used before layouting
+ scrollableBase.ScrollToIndex(scrollableBase.CurrentPage);
}
} // ScrollableBaseCustomLayout
CurrentPage = index;
}
- maxScrollDistance = CalculateMaximumScrollDistance();
+ float destinationX;
+ if (ScrollingDirection == Direction.Horizontal)
+ {
+ destinationX = -(mScrollingChild.Children[CurrentPage].Position.X + mScrollingChild.Children[CurrentPage].CurrentSize.Width/2 - CurrentSize.Width/2); // set to middle of current page
+ } else
+ {
+ destinationX = -(mScrollingChild.Children[CurrentPage].Position.Y + mScrollingChild.Children[CurrentPage].CurrentSize.Height/2 - CurrentSize.Height/2); // set to middle of current page
+ }
- float targetPosition = Math.Min(ScrollingDirection == Direction.Vertical ? mScrollingChild.Children[index].Position.Y : mScrollingChild.Children[index].Position.X, maxScrollDistance);
- AnimateChildTo(ScrollDuration, -targetPosition);
+ AnimateChildTo(ScrollDuration, destinationX);
}
private void OnScrollDragStart()
using Oobe.Common.Controls;\r
using Oobe.Common.Utils;\r
using OobeCommon.Resources;\r
+using System.Linq;\r
+using System.Globalization;\r
+using System;\r
\r
namespace Oobe.Language\r
{\r
- public class LanguageStep : ProcessStep\r
- {\r
+ public class LanguageStep : ProcessStep\r
+ {\r
private LanguageManger manager;\r
\r
public LanguageStep() : base()\r
title.TranslatableText = "CHOOSE_LANGUAGE";\r
title.Position2D = new Position2D(410, 160);\r
title.Size2D = new Size2D(364, 58);\r
- title.TextColor = new Color(0, 20.0f/255.0f, 71.0f/255.0f, 1.0f);\r
+ title.TextColor = new Color(0, 20.0f / 255.0f, 71.0f / 255.0f, 1.0f);\r
title.HorizontalAlignment = HorizontalAlignment.Center;\r
title.Ellipsis = false;\r
title.PixelSize = 48.0f;\r
item.Text = info.LocalName;\r
carousel.AddItem(item);\r
}\r
+ int currentIndex = manager.Languages.FindIndex(x => x == manager.CurrentLanguage);\r
+ carousel.SelectedItemIndex = currentIndex;\r
\r
Button btn = new Button(ButtonStyles.Next);\r
btn.Position2D = new Position2D(888, 512);\r
- btn.ClickEvent += (obj, args) => {\r
+ btn.ClickEvent += (obj, args) =>\r
+ {\r
if (carousel.SelectedItemIndex >= 0 && carousel.SelectedItemIndex < manager.Languages.Count)\r
{\r
var lang = manager.Languages[carousel.SelectedItemIndex];\r
nav.Next();\r
};\r
\r
+ carousel.SelectedItemChanged += (sender, args) =>\r
+ {\r
+ if (carousel.SelectedItemIndex >= 0 && carousel.SelectedItemIndex < manager.Languages.Count)\r
+ {\r
+ string language = manager.Languages[carousel.SelectedItemIndex].Code.Replace("_", "-");\r
+ var culture = CultureInfo.CreateSpecificCulture(language);\r
+ title.Text = Translations.ResourceManager.GetString("CHOOSE_LANGUAGE", culture);\r
+ btn.Text = Translations.ResourceManager.GetString("CONTINUE", culture);\r
+ }\r
+ };\r
+\r
container.Add(title);\r
container.Add(btn);\r
container.Add(carousel);\r
\r
return container;\r
- }\r
- }\r
+ }\r
+ }\r
}\r