file360

Log | Files | Refs

commit 6450e08713bf8e838696204a93cced9f39b8a297
parent aba2572477e650e73d22db8f92a4aa4ab508cec2
Author: Bharatvaj Hemanth <bharatvaj@yahoo.com>
Date:   Thu,  3 Apr 2025 01:11:27 +0530

ARAM Version

- Added FTP Page
- And too many font files (this may be removed in the future)

Diffstat:
A.gitignore | 2++
MFile360.sln | 42++++++++++++++++++++++--------------------
AFile360/Addresser.cs | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MFile360/App.xaml | 2154++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
MFile360/App.xaml.cs | 303+++++++++++++++++++++++++++++--------------------------------------------------
AFile360/Assets/ARAM.png | 0
AFile360/Assets/Fine-Halftone-Screen-Small.png | 0
AFile360/Assets/Font/Custom/ClearSans-Light.ttf | 0
AFile360/Assets/Font/Custom/ClearSans-Thin.ttf | 0
AFile360/Assets/Font/Custom/HelveticaNeue-Thin.otf | 0
AFile360/Assets/Font/Custom/Lobster 1.4.otf | 0
AFile360/Assets/Font/Custom/Mohave.otf | 0
AFile360/Assets/Font/Custom/Raleway-Light.ttf | 0
AFile360/Assets/Font/Custom/Raleway-SemiBold.ttf | 0
AFile360/Assets/Font/Custom/Raleway-Thin.ttf | 0
AFile360/Assets/Font/Custom/Roboto-Thin.ttf | 0
AFile360/Assets/Font/filetypes.ttf | 0
AFile360/Assets/Font/iconfont.ttf | 0
AFile360/Assets/Font/settingsfont.ttf | 0
AFile360/Assets/IMG-20150528-WA0003.jpg | 0
AFile360/Assets/Logo.scale-240.png | 0
AFile360/Assets/Maari-Tamil-2015-500x500.jpg | 0
AFile360/Assets/SmallLogo.scale-240.png | 0
AFile360/Assets/SplashScreen.scale-240.png | 0
AFile360/Assets/Square71x71Logo.scale-240.png | 0
AFile360/Assets/StoreLogo.scale-240.png | 0
AFile360/Assets/WideLogo.scale-240.png | 0
AFile360/Assets/innerShadow.png | 0
AFile360/Assets/mainDropShadow.png | 0
AFile360/Assets/mainDropShadowTransparent.png | 0
AFile360/Assets/main_drop_shadow_png 13-Dec-2007 09_42 31K.png | 0
AFile360/Assets/nullMusicArt.jpg | 0
AFile360/Assets/pic (1).jpg | 0
AFile360/Assets/pic (2).jpg | 0
AFile360/Assets/pulse2.png | 0
AFile360/Assets/start3.png | 0
AFile360/Assets/url.png | 0
AFile360/Assets/vertDrop.png | 0
AFile360/BlankPage.xaml | 16++++++++++++++++
AFile360/BlankPage.xaml.cs | 39+++++++++++++++++++++++++++++++++++++++
AFile360/BoolToVisibilityConverter.cs | 40++++++++++++++++++++++++++++++++++++++++
AFile360/BottomBarItem.xaml | 17+++++++++++++++++
AFile360/BottomBarItem.xaml.cs | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/CardDetails.xaml | 13+++++++++++++
AFile360/CardDetails.xaml.cs | 39+++++++++++++++++++++++++++++++++++++++
AFile360/ColorList.cs | 19+++++++++++++++++++
AFile360/ColorPicker.xaml | 32++++++++++++++++++++++++++++++++
AFile360/ColorPicker.xaml.cs | 185+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/ColorSampler.cs | 36++++++++++++++++++++++++++++++++++++
AFile360/Common/NavigationHelper.cs | 436+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Common/ObservableDictionary.cs | 149+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Common/ReadMe.txt | 8++++++++
AFile360/Common/RelayCommand.cs | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Common/SuspensionManager.cs | 269+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/ContinuationManager.cs | 191+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Dialog.cs | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/DialogBox.xaml | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/DialogBox.xaml.cs | 91+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/DownloadIndicator.xaml | 30++++++++++++++++++++++++++++++
AFile360/DownloadIndicator.xaml.cs | 50++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/DrawerLayout.cs | 524+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/FTPPage.xaml | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/FTPPage.xaml.cs | 39+++++++++++++++++++++++++++++++++++++++
AFile360/File.cs | 14++++++++++++++
MFile360/File360.csproj | 486++++++++++++++++++++++++++++++++++++++++---------------------------------------
AFile360/File360.csproj.user | 25+++++++++++++++++++++++++
AFile360/FileLister.cs | 310+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/GeneralSettings.xaml | 62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/GeneralSettings.xaml.cs | 44++++++++++++++++++++++++++++++++++++++++++++
AFile360/HelpPage.xaml | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/HelpPage.xaml.cs | 40++++++++++++++++++++++++++++++++++++++++
AFile360/IntToNegativeIntConverter.cs | 26++++++++++++++++++++++++++
MFile360/MainPage.xaml | 1491++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
MFile360/MainPage.xaml.cs | 2920++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
AFile360/MarqueeText.xaml | 13+++++++++++++
AFile360/MarqueeText.xaml.cs | 27+++++++++++++++++++++++++++
AFile360/MessageBox.xaml | 50++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/MessageBox.xaml.cs | 97+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/OccupyStack.cs | 34++++++++++++++++++++++++++++++++++
MFile360/Package.appxmanifest | 58+++++++++++++++++++++++-----------------------------------
MFile360/Properties/AssemblyInfo.cs | 22+++++++---------------
AFile360/ReadMe.Coding4Fun.Toolkit.txt | 9+++++++++
AFile360/SelectorItemEx.cs | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MFile360/SettingsPage.xaml | 183+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
MFile360/SettingsPage.xaml.cs | 232+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
AFile360/Shade.cs | 229+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/SideBarMenuButton.xaml | 25+++++++++++++++++++++++++
AFile360/SideBarMenuButton.xaml.cs | 44++++++++++++++++++++++++++++++++++++++++++++
AFile360/StoreManifest.xml | 6++++++
AFile360/Strings/en-US/Resources.resw | 151++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Utility/Helper/NativeOperationsHelper.cs | 86+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/Utility/Helper/SecurityAccessDeniedException.cs | 20++++++++++++++++++++
MFile360/VaultPage.xaml | 142+++++++++++++++++++++++++++++++++++++------------------------------------------
MFile360/VaultPage.xaml.cs | 148+++++++++++++++++++++++++++++++------------------------------------------------
AFile360/VideoList.cs | 33+++++++++++++++++++++++++++++++++
AFile360/VideoPage.xaml | 213+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AFile360/VideoPage.xaml.cs | 172+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MFile360/musiclist.cs | 61++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
MFile360/packages.config | 5++++-
MFile360/picturelist.cs | 24+++++++++++++++++++++++-
MFile360/sdlist.cs | 165++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
101 files changed, 10793 insertions(+), 2139 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -0,0 +1,2 @@ +.vs/ +Thumbs.db diff --git a/File360.sln b/File360.sln @@ -1,7 +1,9 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Phone -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "File360", "File360\File360.csproj", "{6DB737B7-6D8E-4901-86A4-3110A717C72F}" +# Visual Studio 14 +VisualStudioVersion = 14.0.23107.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "File360", "File360\File360.csproj", "{08490F1C-404B-4B58-B97E-C23BB7A1B31D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,24 +15,24 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|Any CPU.Deploy.0 = Debug|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|ARM.ActiveCfg = Debug|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|ARM.Build.0 = Debug|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|ARM.Deploy.0 = Debug|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|x86.ActiveCfg = Debug|x86 - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|x86.Build.0 = Debug|x86 - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Debug|x86.Deploy.0 = Debug|x86 - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|Any CPU.Build.0 = Release|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|Any CPU.Deploy.0 = Release|Any CPU - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|ARM.ActiveCfg = Release|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|ARM.Build.0 = Release|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|ARM.Deploy.0 = Release|ARM - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|x86.ActiveCfg = Release|x86 - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|x86.Build.0 = Release|x86 - {6DB737B7-6D8E-4901-86A4-3110A717C72F}.Release|x86.Deploy.0 = Release|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|Any CPU.ActiveCfg = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|Any CPU.Build.0 = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|Any CPU.Deploy.0 = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|ARM.ActiveCfg = Debug|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|ARM.Build.0 = Debug|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|ARM.Deploy.0 = Debug|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|x86.ActiveCfg = Debug|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|x86.Build.0 = Debug|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Debug|x86.Deploy.0 = Debug|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|Any CPU.Build.0 = Debug|Any CPU + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|Any CPU.Deploy.0 = Debug|Any CPU + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|ARM.ActiveCfg = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|ARM.Build.0 = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|ARM.Deploy.0 = Release|ARM + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|x86.ActiveCfg = Release|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|x86.Build.0 = Release|x86 + {08490F1C-404B-4B58-B97E-C23BB7A1B31D}.Release|x86.Deploy.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/File360/Addresser.cs b/File360/Addresser.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Media; +using WinRTXamlToolkit.Controls; +namespace File360 +{ + public class Addresser:StackPanel + { + public bool root = true; + public void InitializeComponent() + { + HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left; + VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center; + Orientation = Windows.UI.Xaml.Controls.Orientation.Horizontal; + //StackPanel stk = new StackPanel(); + //stk.Orientation = Windows.UI.Xaml.Controls.Orientation.Horizontal; + //TextBlock content = new TextBlock(); + //TextBlock txt = new TextBlock(); + //stk.Children.Add(content); + //stk.Children.Add(txt); + //prev.Content = stk; + + } + + public bool Root + { + get { return root; } + set { root = value; } + } + + public void Address(string value, string path) + { + Button current = new Button(); + current.BorderThickness = new Thickness(0); + StackPanel currentStk = new StackPanel(); + currentStk.Orientation = Windows.UI.Xaml.Controls.Orientation.Horizontal; + TextBlock content = new TextBlock(); + TextBlock txtH = new TextBlock(); + current.Content = currentStk; + txtH.FontFamily = new FontFamily("Assets/Font/iconFont.ttf#iconfont"); + txtH.Text = "."; + txtH.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Center; + txtH.FontSize = 10; + //txtH.Foreground = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"]; + //content.FontFamily = new FontFamily("Assets/Font/Custom/Raleway-Light.ttf#Raleway"); + content.TextLineBounds = TextLineBounds.Tight; + content.TextAlignment = TextAlignment.Center; + content.Text = value; + currentStk.Children.Add(content); + currentStk.Children.Add(txtH); + current.Background = null; + current.Height = this.ActualHeight; + current.MinWidth = 0; + current.Tag = path; + Children.Add(current); + root = false; + } + public void Reset() + { + Children.Clear(); + } + public void RemoveLast() + { + Children.RemoveAt(Children.Count - 1); + if (Children.Count == 0) root = true; + else root = false; + } + public void SelectedFolder(int foldersNo) + { + for (int i = Children.Count-1; i < (Children.Count-foldersNo-1); i--) + { + Children.RemoveAt(i); + } + } + + } +} diff --git a/File360/App.xaml b/File360/App.xaml @@ -1,693 +1,1478 @@ <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" xmlns:es="clr-namespace:Microsoft.Expression.Shapes;assembly=Microsoft.Expression.Drawing" mc:Ignorable="d" + xmlns:local="using:File360" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Controls="using:WinRTXamlToolkit.Controls" xmlns:Interactivity="using:WinRTXamlToolkit.Interactivity" xmlns:Behaviors="using:WinRTXamlToolkit.Controls.Behaviors" mc:Ignorable="d" x:Class="File360.App" > - - <!--Application Resources--> <Application.Resources> - <local:LocalizedStrings xmlns:local="clr-namespace:File360" x:Key="LocalizedStrings"/> - - <Style x:Key="SideMenuInitiater" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates" ec:ExtendedVisualStateManager.UseFluidLayout="True"> - <VisualStateGroup.Transitions> - <VisualTransition/> - </VisualStateGroup.Transitions> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle1"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle2"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(FrameworkElement.Margin)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <Thickness>12</Thickness> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle1"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle2"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <VisualStateManager.CustomVisualStateManager> - <ec:ExtendedVisualStateManager/> - </VisualStateManager.CustomVisualStateManager> - <Rectangle x:Name="rectangle2" Fill="{StaticResource PhoneAccentBrush}" HorizontalAlignment="Left" Height="3" Margin="15,16,0,0" VerticalAlignment="Top" Width="33"/> - <Rectangle x:Name="rectangle1" Fill="{StaticResource PhoneAccentBrush}" HorizontalAlignment="Left" Height="3" Margin="15,22,0,0" VerticalAlignment="Top" Width="33"/> - <Rectangle x:Name="rectangle" Fill="{StaticResource PhoneAccentBrush}" HorizontalAlignment="Left" Height="3" Margin="15,28,0,0" VerticalAlignment="Top" Width="33"/> - <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"/> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> + + <Thickness x:Key="PhoneBorderThickness">2.5</Thickness> + <FontFamily x:Key="PhoneFontFamilyNormal">Segoe WP</FontFamily> + <FontWeight x:Key="PhoneButtonFontWeight">Semibold</FontWeight> + <x:Double x:Key="TextStyleLargeFontSize">18.14</x:Double> + <Thickness x:Key="PhoneButtonContentPadding">9.5,0,9.5,3.5</Thickness> + <x:Double x:Key="PhoneButtonMinHeight">57.5</x:Double> + <x:Double x:Key="PhoneButtonMinWidth">109</x:Double> + <Thickness x:Key="PhoneTouchTargetOverhang">0,9.5</Thickness> + + <Style x:Key="ToggleButtonTemplate" TargetType="ToggleButton"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleButton"> + <Grid Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Checked"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Null}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPressed"/> + <VisualState x:Name="CheckedDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="0.4"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Indeterminate"/> + <VisualState x:Name="IndeterminatePointerOver"/> + <VisualState x:Name="IndeterminatePressed"/> + <VisualState x:Name="IndeterminateDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="EnabledBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Margin="{ThemeResource PhoneTouchTargetOverhang}"> + <ContentPresenter x:Name="EnabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="-2.5,-0.5,-2.333,-2.5" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Width="109" Height="63"/> + </Border> + <Border x:Name="DisabledBackground" BorderBrush="{ThemeResource ButtonDisabledBorderThemeBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" IsHitTestVisible="False" Margin="{ThemeResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> + <ContentPresenter x:Name="DisabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{ThemeResource ButtonDisabledForegroundThemeBrush}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="SideBarButton" TargetType="ToggleButton"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleButton"> + <Grid x:Name="grid" Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Checked"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPressed"/> + <VisualState x:Name="CheckedDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="0.4"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Indeterminate"/> + <VisualState x:Name="IndeterminatePointerOver"/> + <VisualState x:Name="IndeterminatePressed"/> + <VisualState x:Name="IndeterminateDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="EnabledBackground" Background="{TemplateBinding Background}" Height="{TemplateBinding Height}"> + <ContentPresenter x:Name="EnabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <Border x:Name="DisabledBackground" BorderBrush="{ThemeResource ButtonDisabledBorderThemeBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" IsHitTestVisible="False" Margin="{ThemeResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> + <ContentPresenter x:Name="DisabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{ThemeResource ButtonDisabledForegroundThemeBrush}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + <SolidColorBrush x:Key="ButtonDisabledBackgroundThemeBrush" Color="Transparent"/> + + <Style x:Key="DialogBoxButton" TargetType="Button"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <Grid x:Name="Grid" Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualStateGroup.Transitions> + <VisualTransition From="Pressed" To="PointerOver"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="PointerOver" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="Pressed" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + </VisualStateGroup.Transitions> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <PointerDownThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="Border" BorderBrush="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderTransformOrigin="0.5,0.5"> + <Border.Projection> + <PlaneProjection/> + </Border.Projection> + <Border.RenderTransform> + <CompositeTransform/> + </Border.RenderTransform> + <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style TargetType="Button"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <Grid x:Name="Grid" Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualStateGroup.Transitions> + <VisualTransition From="Pressed" To="PointerOver"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="PointerOver" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="Pressed" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + <DoubleAnimation Duration="0:0:0.1" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentPresenter"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + </VisualTransition> + </VisualStateGroup.Transitions> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <DoubleAnimation Duration="0:0:0.2" To="0.5" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="ContentPresenter" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CubicEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"> + <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="DefaultToggleButton" TargetType="ToggleButton"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleButton"> + <Grid x:Name="Grid" Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualStateGroup.Transitions> + <VisualTransition From="Pressed" To="PointerOver"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="PointerOver" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + <VisualTransition From="Pressed" To="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="Grid"/> + </Storyboard> + </VisualTransition> + </VisualStateGroup.Transitions> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <!--<PointerDownThemeAnimation Storyboard.TargetName="Grid"/>--> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource AppBarItemDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="Border" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"> + <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <x:Double x:Key="TextControlThemeMinWidth">51</x:Double> + <x:Double x:Key="TextControlThemeMinHeight">34</x:Double> + <Thickness x:Key="TextControlBorderThemeThickness">2.5</Thickness> + <x:Double x:Key="ContentControlFontSize">20.26</x:Double> + <Thickness x:Key="TextControlThemePadding">7,0.8,8,0</Thickness> + <Thickness x:Key="TextControlMarginThemeThickness">0,9.5,0,9.5</Thickness> + <Thickness x:Key="TextControlHeaderMarginThemeThickness">0,0,0,4.8</Thickness> + <SolidColorBrush x:Key="TextBoxDisabledBackgroundThemeBrush" Color="Transparent"/> + <x:Double x:Key="TextControlBorderThemeOpacity">0.8</x:Double> + + <SolidColorBrush x:Key="SliderBorderThemeBrush" Color="Transparent"/> + <Thickness x:Key="SliderBorderThemeThickness">0</Thickness> + <FontFamily x:Key="ContentControlThemeFontFamily">Segoe WP</FontFamily> + <x:Double x:Key="ControlContentThemeFontSize">12</x:Double> + <x:Double x:Key="SliderOutsideTickBarThemeHeight">5</x:Double> + <x:Double x:Key="SliderTrackThemeHeight">9</x:Double> + <SolidColorBrush x:Key="SliderDisabledBorderThemeBrush" Color="Transparent"/> + <Style x:Key="SliderRing" TargetType="Slider"> + <Setter Property="Background" Value="{ThemeResource SliderTrackBackgroundThemeBrush}"/> + <Setter Property="BorderBrush" Value="{ThemeResource SliderBorderThemeBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource SliderBorderThemeThickness}"/> + <Setter Property="Foreground" Value="{ThemeResource SliderTrackDecreaseBackgroundThemeBrush}"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> + <Setter Property="ManipulationMode" Value="None"/> + <Setter Property="IsThumbToolTipEnabled" Value="False"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Slider"> + <Grid Margin="{TemplateBinding Padding}"> + <Grid.Resources> + <Style x:Key="SliderThumbStyle" TargetType="Thumb"> + <Setter Property="BorderThickness" Value="0.8"/> + <Setter Property="BorderBrush" Value="{ThemeResource SliderThumbBorderThemeBrush}"/> + <Setter Property="Background" Value="{ThemeResource SliderThumbBackgroundThemeBrush}"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Thumb"> + <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"/> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + </Grid.Resources> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="VerticalBorder"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="HorizontalDecreaseRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreaseDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="HorizontalTrackRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="HorizontalTrackRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="VerticalDecreaseRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreaseDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="VerticalTrackRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="VerticalTrackRect"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="VerticalThumb"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderThumbDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="VerticalThumb"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderThumbDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="TopTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkOutsideDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="HorizontalInlineTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkInlineDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="BottomTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkOutsideDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="LeftTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkOutsideDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="VerticalInlineTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkInlineDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="RightTickBar"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTickMarkOutsideDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Style="{StaticResource HeaderContentPresenterStyle}"/> + <Grid x:Name="SliderContainer" Background="Transparent" Grid.Row="1"> + <Grid x:Name="HorizontalTemplate"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Grid.RowDefinitions> + <RowDefinition Height="17.5"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="30.5"/> + </Grid.RowDefinitions> + <Rectangle x:Name="HorizontalTrackRect" Grid.ColumnSpan="3" Fill="{TemplateBinding Background}" Grid.Row="1" Stroke="{ThemeResource SliderTrackBorderThemeBrush}"/> + <Rectangle x:Name="HorizontalDecreaseRect" Fill="{TemplateBinding Foreground}" Grid.Row="1"/> + <TickBar x:Name="TopTickBar" Grid.ColumnSpan="3" Fill="{ThemeResource SliderTickmarkOutsideBackgroundThemeBrush}" Height="{ThemeResource SliderOutsideTickBarThemeHeight}" Margin="-4.5,0" Visibility="Collapsed"/> + <TickBar x:Name="HorizontalInlineTickBar" Grid.ColumnSpan="3" Fill="{ThemeResource SliderTickMarkInlineBackgroundThemeBrush}" Height="{ThemeResource SliderTrackThemeHeight}" Margin="-4.5,0" Grid.Row="1" Visibility="Collapsed"/> + <TickBar x:Name="BottomTickBar" Grid.ColumnSpan="3" Fill="{ThemeResource SliderTickmarkOutsideBackgroundThemeBrush}" Height="{ThemeResource SliderOutsideTickBarThemeHeight}" Margin="-4.5,0" Grid.Row="2" Visibility="Collapsed"/> + <Ellipse x:Name="ellipse" Grid.ColumnSpan="3" Fill="{ThemeResource PhoneAccentBrush}" HorizontalAlignment="Left" Grid.RowSpan="3" Width="30" Height="{Binding Width, ElementName=ellipse}" StrokeThickness="7" Margin="0,15,0,30" RenderTransformOrigin="0.5,0.5"> + <Ellipse.RenderTransform> + <CompositeTransform/> + </Ellipse.RenderTransform> + <Ellipse.Stroke> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Ellipse.Stroke> + </Ellipse> + <Thumb x:Name="HorizontalThumb" AutomationProperties.AccessibilityView="Raw" Grid.Column="1" DataContext="{TemplateBinding Value}" Style="{StaticResource SliderThumbStyle}" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5" Height="20" BorderBrush="{x:Null}" Grid.RowSpan="3" Margin="-4,-13,-30,7" d:LayoutOverrides="LeftPosition, RightPosition" Background="{x:Null}" Width="20" HorizontalAlignment="Center"/> + <Rectangle x:Name="HorizontalBorder" Grid.ColumnSpan="3" Grid.RowSpan="3" StrokeThickness="{TemplateBinding BorderThickness}" RadiusX="10"/> + </Grid> + <Grid x:Name="VerticalTemplate" Visibility="Collapsed"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="13.5"/> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="13.5"/> + </Grid.ColumnDefinitions> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Rectangle x:Name="VerticalTrackRect" Grid.Column="1" Fill="{TemplateBinding Background}" Grid.RowSpan="3" Stroke="{ThemeResource SliderTrackBorderThemeBrush}"/> + <Rectangle x:Name="VerticalDecreaseRect" Grid.Column="1" Fill="{TemplateBinding Foreground}" Grid.Row="2"/> + <TickBar x:Name="LeftTickBar" Fill="{ThemeResource SliderTickmarkOutsideBackgroundThemeBrush}" HorizontalAlignment="Right" Margin="0,0,1.5,0" Grid.RowSpan="3" Visibility="Collapsed" Width="{ThemeResource SliderOutsideTickBarThemeHeight}"/> + <TickBar x:Name="VerticalInlineTickBar" Grid.Column="1" Fill="{ThemeResource SliderTickMarkInlineBackgroundThemeBrush}" Grid.RowSpan="3" Visibility="Collapsed" Width="{ThemeResource SliderTrackThemeHeight}"/> + <TickBar x:Name="RightTickBar" Grid.Column="2" Fill="{ThemeResource SliderTickmarkOutsideBackgroundThemeBrush}" HorizontalAlignment="Left" Margin="1.5,0,0,0" Grid.RowSpan="3" Visibility="Collapsed" Width="{ThemeResource SliderOutsideTickBarThemeHeight}"/> + <Thumb x:Name="VerticalThumb" AutomationProperties.AccessibilityView="Raw" Background="{ThemeResource SliderThumbBackgroundThemeBrush}" Grid.Column="1" DataContext="{TemplateBinding Value}" Height="{ThemeResource SliderTrackThemeHeight}" Grid.Row="1" Style="{StaticResource SliderThumbStyle}" Width="{ThemeResource SliderTrackThemeHeight}"/> + <Rectangle x:Name="VerticalBorder" Grid.Column="1" Grid.RowSpan="3" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="{TemplateBinding BorderThickness}"/> + </Grid> + </Grid> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="ToggleButtonStyle" TargetType="ToggleButton"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleButton"> + <Grid Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="border"> + <EasingDoubleKeyFrame KeyTime="0" Value="0.005"/> + <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="1"/> + </DoubleAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Checked"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneAccentBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPressed"> + <Storyboard> + <DoubleAnimation Duration="0:0:0.1" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="border" d:IsOptimized="True"/> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="0.4"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Indeterminate"/> + <VisualState x:Name="IndeterminatePointerOver"/> + <VisualState x:Name="IndeterminatePressed"/> + <VisualState x:Name="IndeterminateDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="EnabledBackground" BorderThickness="{TemplateBinding BorderThickness}" Margin="{ThemeResource PhoneTouchTargetOverhang}"> + <ContentPresenter x:Name="EnabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <Border x:Name="DisabledBackground" BorderBrush="{ThemeResource ButtonDisabledBorderThemeBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" IsHitTestVisible="False" Margin="{ThemeResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> + <ContentPresenter x:Name="DisabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{ThemeResource ButtonDisabledForegroundThemeBrush}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <Border x:Name="border" Margin="0" VerticalAlignment="Center" Background="#7F919191" CornerRadius="20" BorderThickness="0,0,0,1" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Center" Height="56" Width="{TemplateBinding ActualWidth}" Opacity="0.005" > + <Border.RenderTransform> + <CompositeTransform TranslateX="-50"/> + </Border.RenderTransform> + <TextBlock x:Name="textBlock" Margin="0" TextWrapping="Wrap" Text="{TemplateBinding Content}" FontFamily="Assets/Font/iconfont.ttf#iconfont" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Thickness x:Key="PivotPortraitThemePadding">19,38,0,0</Thickness> + <Thickness x:Key="PivotLandscapeThemePadding">19,25,0,0</Thickness> + <Style x:Key="PivotStyle" TargetType="Pivot"> + <Setter Property="Margin" Value="0"/> + <Setter Property="Padding" Value="0"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="ItemsPanel"> + <Setter.Value> + <ItemsPanelTemplate> + <Grid/> + </ItemsPanelTemplate> + </Setter.Value> + </Setter> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Pivot"> + <Grid x:Name="RootElement" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="Orientation"> + <VisualState x:Name="Portrait"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="TitleContentControl"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PivotPortraitThemePadding}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Landscape"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Margin" Storyboard.TargetName="TitleContentControl"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PivotLandscapeThemePadding}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <ContentControl x:Name="TitleContentControl" ContentTemplate="{TemplateBinding TitleTemplate}" Content="{TemplateBinding Title}" Style="{StaticResource PivotTitleContentControlStyle}"/> + <ScrollViewer x:Name="ScrollViewer" HorizontalSnapPointsAlignment="Center" HorizontalSnapPointsType="MandatorySingle" HorizontalScrollBarVisibility="Hidden" Margin="0,0,0,-0.167" Template="{StaticResource ScrollViewerScrollBarlessTemplate}" VerticalSnapPointsType="None" VerticalScrollBarVisibility="Disabled" VerticalScrollMode="Disabled" VerticalContentAlignment="Stretch" ZoomMode="Disabled" Grid.RowSpan="2" d:LayoutOverrides="TopMargin, BottomMargin"> + <PivotPanel x:Name="Panel" VerticalAlignment="Stretch"> + <PivotHeaderPanel x:Name="Header"> + <PivotHeaderPanel.RenderTransform> + <CompositeTransform x:Name="HeaderTranslateTransform" TranslateX="0"/> + </PivotHeaderPanel.RenderTransform> + </PivotHeaderPanel> + <ItemsPresenter x:Name="PivotItemPresenter"> + <ItemsPresenter.RenderTransform> + <TranslateTransform x:Name="ItemsPresenterTranslateTransform" X="0"/> + </ItemsPresenter.RenderTransform> + </ItemsPresenter> + </PivotPanel> + </ScrollViewer> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <SolidColorBrush x:Key="ListBoxBorderThemeBrush" Color="Transparent"/> + <Thickness x:Key="ListBoxBorderThemeThickness">1.5</Thickness> + <Style x:Key="ListBoxStyle" TargetType="ListBox"> + <Setter Property="Foreground" Value="{ThemeResource ListBoxForegroundThemeBrush}"/> + <Setter Property="Background" Value="{ThemeResource ListBoxBackgroundThemeBrush}"/> + <Setter Property="BorderBrush" Value="{ThemeResource ListBoxBorderThemeBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource ListBoxBorderThemeThickness}"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Disabled"/> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.ZoomMode" Value="Disabled"/> + <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/> + <Setter Property="ScrollViewer.BringIntoViewOnFocusChange" Value="True"/> + <Setter Property="IsTabStop" Value="False"/> + <Setter Property="TabNavigation" Value="Once"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> + <Setter Property="ItemsPanel"> + <Setter.Value> + <ItemsPanelTemplate> + <VirtualizingStackPanel/> + </ItemsPanelTemplate> + </Setter.Value> + </Setter> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ListBox"> + <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="LayoutRoot"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="LayoutRoot"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ListBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <ScrollViewer x:Name="ScrollViewer" AutomationProperties.AccessibilityView="Raw" BringIntoViewOnFocusChange="{TemplateBinding ScrollViewer.BringIntoViewOnFocusChange}" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Padding="{TemplateBinding Padding}" TabNavigation="{TemplateBinding TabNavigation}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}" Background="{x:Null}"> + <ItemsPresenter/> + </ScrollViewer> + </Border> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="ThumbStyle" TargetType="Thumb"> + <Setter Property="Background" Value="{ThemeResource ThumbBackgroundThemeBrush}"/> + <Setter Property="BorderThickness" Value="0.8"/> + <Setter Property="IsTabStop" Value="False"/> + <Setter Property="BorderBrush" Value="{ThemeResource ThumbBorderThemeBrush}"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Thumb"> + <Grid> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualStateGroup.Transitions> + <VisualTransition GeneratedDuration="0:0:0.2"/> + </VisualStateGroup.Transitions> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Background" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="BackgroundPressed" d:IsOptimized="True"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="BackgroundPressed"> + <DiscreteObjectKeyFrame KeyTime="0"> + <DiscreteObjectKeyFrame.Value> + <SolidColorBrush Color="{StaticResource PhoneForegroundColor}"/> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + <DoubleAnimation Duration="0:0:0.15" To="-20" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="BackgroundPressed" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.15" To="1.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="BackgroundPressed"/> + <DoubleAnimation Duration="0:0:0.15" To="1.5" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="BackgroundPressed"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"/> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="Background" Width="30" Height="30"> + <Ellipse x:Name="ellipse1" StrokeThickness="5" Height="{Binding Width, ElementName=ellipse1}" > + <Ellipse.Stroke> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Ellipse.Stroke> + <Ellipse.Fill> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Ellipse.Fill> + </Ellipse> + </Border> + <Border x:Name="BackgroundPressed" Width="30" Height="15" BorderThickness="0" RenderTransformOrigin="0.5,0.5" Opacity="0" CornerRadius="5"> + <Border.RenderTransform> + <CompositeTransform/> + </Border.RenderTransform> + <TextBlock Margin="2" x:Name="textBlock" Text="25:32" FontSize="6" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" HorizontalAlignment="Center" VerticalAlignment="Top"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> </Style> - - <Style x:Key="CurvedTextBox" TargetType="TextBox"> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/> - <Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneTextBoxBrush}"/> - <Setter Property="SelectionBackground" Value="{StaticResource PhoneAccentBrush}"/> - <Setter Property="SelectionForeground" Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="Padding" Value="2"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="TextBox"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <SolidColorBrush Color="White"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground)" Storyboard.TargetName="ContentElement"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <SolidColorBrush Color="Black"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"/> - <VisualState x:Name="ReadOnly"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="MainBorder"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <Visibility>Collapsed</Visibility> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="ReadonlyBorder"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <Visibility>Visible</Visibility> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ReadonlyBorder"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ReadonlyBorder"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - <VisualStateGroup x:Name="FocusStates"> - <VisualState x:Name="Focused"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <SolidColorBrush Color="White"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground)" Storyboard.TargetName="ContentElement"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <SolidColorBrush Color="Black"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Unfocused"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Rectangle x:Name="rectangle" Fill="{StaticResource PhoneDisabledBrush}" HorizontalAlignment="Left" Height="56" Stroke="{StaticResource PhoneInactiveBrush}" VerticalAlignment="Top" Width="216" RadiusY="29" RadiusX="29" Margin="0,10,0,0"/> - <Border x:Name="MainBorder" BorderThickness="{TemplateBinding BorderThickness}" Margin="{StaticResource PhoneTouchTargetOverhang}"/> - <Border x:Name="ReadonlyBorder" BorderBrush="{StaticResource PhoneDisabledBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}" Visibility="Collapsed"/> - <Border BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Stretch" Margin="{StaticResource PhoneTextBoxInnerMargin}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch" Foreground="{StaticResource PhoneBackgroundBrush}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="SearchButton" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"/> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <SolidColorBrush Color="White"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="10" Background="{StaticResource PhoneAccentBrush}"/> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="MainBarButton" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="ellipse"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneChromeBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0"> - <DiscreteObjectKeyFrame.Value> - <ImageBrush ImageSource="greyhome.png" Stretch="Uniform"/> - </DiscreteObjectKeyFrame.Value> - </DiscreteObjectKeyFrame> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="ellipse"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneChromeBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="rectangle"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Ellipse x:Name="ellipse" HorizontalAlignment="Left" Height="39" Margin="17,16,0,0" VerticalAlignment="Top" Width="40" Fill="{StaticResource PhoneAccentBrush}"/> - <Rectangle x:Name="rectangle" HorizontalAlignment="Left" Height="21" VerticalAlignment="Top" Width="16" Margin="29,25,0,0" Fill="{StaticResource PhoneChromeBrush}"/> - <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"/> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="SliderStyle" TargetType="Slider"> - <Setter Property="BorderThickness" Value="0"/> - <Setter Property="BorderBrush" Value="Transparent"/> - <Setter Property="Maximum" Value="10"/> - <Setter Property="Minimum" Value="0"/> - <Setter Property="Value" Value="0"/> - <Setter Property="Background" Value="{StaticResource PhoneChromeBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneAccentBrush}"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Slider"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"/> - <VisualState x:Name="Disabled"> - <Storyboard> - <DoubleAnimation Duration="0" To="0.1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="HorizontalTrack"/> - <DoubleAnimation Duration="0" To="0.1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="VerticalTrack"/> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="HorizontalFill"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="VerticalFill"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Grid x:Name="HorizontalTemplate" Margin="{StaticResource PhoneHorizontalMargin}"> - <Rectangle HorizontalAlignment="Left" Height="24" Margin="0,16,0,0" VerticalAlignment="Top" Width="282" RadiusY="12" RadiusX="12" RenderTransformOrigin="0.5,0.542" Opacity="0.25" Fill="Black"/> - <Rectangle x:Name="HorizontalTrack" Fill="{TemplateBinding Background}" Height="12" IsHitTestVisible="False" Margin="0,22,0,50"/> - <Rectangle x:Name="HorizontalFill" Fill="{TemplateBinding Foreground}" Height="12" IsHitTestVisible="False" Margin="0,22,0,50"> - <Rectangle.Clip> - <RectangleGeometry Rect="0, 0, 6, 12"/> - </Rectangle.Clip> - </Rectangle> - <Rectangle x:Name="HorizontalCenterElement" Fill="{StaticResource PhoneForegroundBrush}" HorizontalAlignment="Left" Height="24" Margin="0,16,0,44" Width="12"> - <Rectangle.RenderTransform> - <TranslateTransform/> - </Rectangle.RenderTransform> - </Rectangle> - </Grid> - <Grid x:Name="VerticalTemplate" Margin="{StaticResource PhoneVerticalMargin}"> - <Rectangle x:Name="VerticalTrack" Fill="{TemplateBinding Background}" IsHitTestVisible="False" Margin="18,0,18,0" Width="12"/> - <Rectangle x:Name="VerticalFill" Fill="{TemplateBinding Foreground}" IsHitTestVisible="False" Margin="18,0,18,0" Width="12"> - <Rectangle.Clip> - <RectangleGeometry Rect="0, 0, 12, 6"/> - </Rectangle.Clip> - </Rectangle> - <Rectangle x:Name="VerticalCenterElement" Fill="{StaticResource PhoneForegroundBrush}" Height="12" Margin="12,0,12,0" VerticalAlignment="Top" Width="24"> - <Rectangle.RenderTransform> - <TranslateTransform/> - </Rectangle.RenderTransform> - </Rectangle> - </Grid> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="Play" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneButtonBasePressedForegroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}" Background="{StaticResource PhoneChromeBrush}"> - <Border.OpacityMask> - <ImageBrush Stretch="Uniform" ImageSource="/Resources/Assets/Images/play.png"/> - </Border.OpacityMask> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="Forward" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ColorAnimation Duration="0" To="{StaticResource PhoneAccentColor}" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <Border.Background> - <SolidColorBrush Color="{StaticResource PhoneChromeColor}"/> - </Border.Background> - <Border.OpacityMask> - <ImageBrush Stretch="Uniform" ImageSource="Resources/Assets/Images/next.png"/> - </Border.OpacityMask> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{StaticResource PhoneAccentBrush}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="Previous" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"> - <Storyboard> - <ColorAnimation Duration="0" To="#FF1F1F1F" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> - </Storyboard> - </VisualState> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ColorAnimation Duration="0" To="{StaticResource PhoneAccentColor}" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"/> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <Border.Background> - <SolidColorBrush Color="{StaticResource PhoneChromeColor}"/> - </Border.Background> - <Border.OpacityMask> - <ImageBrush ImageSource="Resources/Assets/Images/previous.png" Stretch="Uniform"/> - </Border.OpacityMask> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{StaticResource PhoneTextBoxBrush}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="ButtonTemplate" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"/> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Foreground="{StaticResource PhoneInverseBackgroundBrush}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="PlainButtonTemplate" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent" Margin="0,1,0,19"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground)" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}" Margin="3,3,0,0"/> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="ButtonPlay" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.Background)" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneButtonBasePressedForegroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ColorAnimation Duration="0" To="{StaticResource PhoneAccentColor}" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <Border.Background> - <SolidColorBrush Color="#FF1F1F1F"/> - </Border.Background> - <Border.OpacityMask> - <ImageBrush Stretch="Uniform" ImageSource="Resources/Assets/Images/play.png"/> - </Border.OpacityMask> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - <Style x:Key="MusicCD" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="BorderBrush" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> - <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiBold}"/> - <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> - <Setter Property="Padding" Value="10,5,10,6"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"/> - <VisualState x:Name="MouseOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke)" Storyboard.TargetName="arc"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="arc1"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneButtonBasePressedForegroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Stroke)" Storyboard.TargetName="arc"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill)" Storyboard.TargetName="arc1"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneInverseBackgroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}"> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"/> - </Border> - <es:Arc x:Name="arc" ArcThickness="35" ArcThicknessUnit="Pixel" EndAngle="360" HorizontalAlignment="Left" Height="100" Stretch="None" StartAngle="0" UseLayoutRounding="False" VerticalAlignment="Top" Width="100" Fill="{StaticResource PhoneChromeBrush}"/> - <es:Arc x:Name="arc1" ArcThickness="7" ArcThicknessUnit="Pixel" EndAngle="360" Fill="{StaticResource PhoneAccentBrush}" HorizontalAlignment="Left" Height="35.53" Margin="33.665,31.999,0,0" Stretch="None" StartAngle="0" UseLayoutRounding="False" VerticalAlignment="Top" Width="32.77" Stroke="{StaticResource PhoneDisabledBrush}"/> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - </Application.Resources> - <Application.ApplicationLifetimeObjects> - <!--Required object that handles lifetime events for the application--> - <shell:PhoneApplicationService - Launching="Application_Launching" Closing="Application_Closing" - Activated="Application_Activated" Deactivated="Application_Deactivated"/> - </Application.ApplicationLifetimeObjects> -</Application> -\ No newline at end of file + <Style x:Key="SliderTemplate" TargetType="Slider"> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Slider"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="3*" /> + <ColumnDefinition Width="7*"/> + <ColumnDefinition Width="Auto" /> + </Grid.ColumnDefinitions> + + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"> + <Storyboard> + <DoubleAnimation Duration="0:0:0.1" To="2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="HorizontalThumb" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.1" To="2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="HorizontalThumb" d:IsOptimized="True"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"/> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + + <Grid x:Name="HorizontalTemplate" Grid.Column="1" Grid.ColumnSpan="2" d:LayoutOverrides="TopMargin, BottomMargin, TopPosition, BottomPosition"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="*" /> + </Grid.ColumnDefinitions> + + <Rectangle x:Name="HorizontalTrackRect" + Grid.Column="0" + Grid.ColumnSpan="3" + HorizontalAlignment="Stretch" + VerticalAlignment="Center" + Stretch="Fill" + Fill="#7B838A" + Height="5" StrokeThickness="0" /> + + <Thumb x:Name="HorizontalThumb" + Grid.Column="1" Style="{StaticResource ThumbStyle}" d:LayoutOverrides="TopPosition, BottomPosition" RenderTransformOrigin="0.5,0.5" BorderThickness="0" HorizontalAlignment="Left" Width="30" > + <Thumb.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Thumb.Background> + <Thumb.RenderTransform> + <CompositeTransform/> + </Thumb.RenderTransform> + </Thumb> + + <Rectangle x:Name="HorizontalDecreaseRect" + Grid.Column="0" + Fill="{ThemeResource PhoneAccentBrush}" + Height="5" /> + + </Grid> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <x:Double x:Key="TextStyleExtraLargeFontSize">25.5</x:Double> + <SolidColorBrush x:Key="ToggleSwitchTrackBorderThemeBrush" Color="Transparent"/> + <Style TargetType="ToggleSwitch"> + <Setter Property="Foreground" Value="{ThemeResource ToggleSwitchForegroundThemeBrush}"/> + <Setter Property="HorizontalAlignment" Value="Stretch"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="HorizontalContentAlignment" Value="Left"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontWeight" Value="SemiBold"/> + <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> + <Setter Property="Margin" Value="0"/> + <Setter Property="Padding" Value="0,0,25.5,0"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleSwitch"> + <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="HeaderContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="OffContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="OnContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="SwitchKnob"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchThumbDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="SwitchKnob"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchThumbDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="OuterBorder"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchOuterBorderDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="SwitchCurtain"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ToggleSwitchCurtainDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="ToggleStates"> + <VisualStateGroup.Transitions> + <VisualTransition x:Name="DraggingToOnTransition" From="Dragging" GeneratedDuration="0" To="On"> + <Storyboard> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.KnobCurrentToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchKnob"/> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.CurtainCurrentToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchCurtain"/> + </Storyboard> + </VisualTransition> + <VisualTransition x:Name="DraggingToOffTransition" From="Dragging" GeneratedDuration="0" To="Off"> + <Storyboard> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.KnobCurrentToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchKnob"/> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.CurtainCurrentToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchCurtain"/> + </Storyboard> + </VisualTransition> + <VisualTransition x:Name="OnToOffTransition" From="On" GeneratedDuration="0" To="Off"> + <Storyboard> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.KnobOnToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchKnob"/> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.CurtainOnToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchCurtain"/> + </Storyboard> + </VisualTransition> + <VisualTransition x:Name="OffToOnTransition" From="Off" GeneratedDuration="0" To="On"> + <Storyboard> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.KnobOffToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchKnob"/> + <RepositionThemeAnimation FromHorizontalOffset="{Binding TemplateSettings.CurtainOffToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}" Storyboard.TargetName="SwitchCurtain"/> + </Storyboard> + </VisualTransition> + </VisualStateGroup.Transitions> + <VisualState x:Name="Dragging"/> + <VisualState x:Name="Off"> + <Storyboard> + <DoubleAnimation Duration="0" To="-64" Storyboard.TargetProperty="X" Storyboard.TargetName="CurtainTranslateTransform"/> + </Storyboard> + </VisualState> + <VisualState x:Name="On"> + <Storyboard> + <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="X" Storyboard.TargetName="CurtainTranslateTransform"/> + <DoubleAnimation Duration="0" To="56.5" Storyboard.TargetProperty="X" Storyboard.TargetName="KnobTranslateTransform"/> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="ContentStates"> + <VisualState x:Name="OffContent"> + <Storyboard> + <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="OffContentPresenter"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsHitTestVisible" Storyboard.TargetName="OffContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="True"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="OnContent"> + <Storyboard> + <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="OnContentPresenter"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsHitTestVisible" Storyboard.TargetName="OnContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="True"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Grid Background="Transparent"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <ContentPresenter x:Name="HeaderContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Foreground="{ThemeResource ToggleSwitchHeaderForegroundThemeBrush}" Margin="{TemplateBinding Padding}" Style="{StaticResource PlaceholderContentPresenterStyle}" VerticalAlignment="Center"/> + <Grid Margin="{TemplateBinding Padding}" Grid.Row="1" Visibility="Collapsed" HorizontalAlignment="Left"> + <ContentPresenter x:Name="OffContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding OffContentTemplate}" Content="{TemplateBinding OffContent}" FontWeight="Normal" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" FontFamily="{ThemeResource PhoneFontFamilyNormal}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="False" Opacity="0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + <ContentPresenter x:Name="OnContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding OnContentTemplate}" Content="{TemplateBinding OnContent}" FontWeight="Normal" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" FontFamily="{ThemeResource PhoneFontFamilyNormal}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="False" Opacity="0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Grid> + <Grid ManipulationMode="None" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,10,0" Grid.Column="2"> + <Grid x:Name="SwitchKnobBounds" Height="36"> + <Border x:Name="OuterBorder" BorderBrush="{ThemeResource ToggleSwitchOuterBorderBorderThemeBrush}" BorderThickness="2.5" Margin="3,4.5,3,4.5"> + <Border x:Name="InnerBorder" BorderBrush="{ThemeResource ToggleSwitchTrackBorderThemeBrush}" BorderThickness="2.5"> + <ContentPresenter x:Name="SwitchCurtainBounds"> + <ContentPresenter x:Name="SwitchCurtainClip"> + <Rectangle x:Name="SwitchCurtain" Fill="{ThemeResource ToggleSwitchCurtainBackgroundThemeBrush}" Width="64"> + <Rectangle.RenderTransform> + <TranslateTransform x:Name="CurtainTranslateTransform" X="-64"/> + </Rectangle.RenderTransform> + </Rectangle> + </ContentPresenter> + </ContentPresenter> + </Border> + </Border> + <Rectangle x:Name="SwitchKnob" Fill="{ThemeResource ToggleSwitchThumbBackgroundThemeBrush}" HorizontalAlignment="Left" Stroke="{ThemeResource ToggleSwitchThumbBorderThemeBrush}" StrokeThickness="2.5" Width="20.5"> + <Rectangle.RenderTransform> + <TranslateTransform x:Name="KnobTranslateTransform"/> + </Rectangle.RenderTransform> + </Rectangle> + </Grid> + <Thumb x:Name="SwitchThumb" AutomationProperties.AccessibilityView="Raw" Margin="-13.5,-15.5,-13.5,-6.5"> + <Thumb.Template> + <ControlTemplate TargetType="Thumb"> + <Rectangle Fill="Transparent"/> + </ControlTemplate> + </Thumb.Template> + </Thumb> + </Grid> + </Grid> + </Border> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style TargetType="ToggleButton"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="BorderBrush" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource PhoneForegroundBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource PhoneBorderThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontWeight" Value="{ThemeResource PhoneButtonFontWeight}"/> + <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}"/> + <Setter Property="Padding" Value="{ThemeResource PhoneButtonContentPadding}"/> + <Setter Property="MinHeight" Value="{ThemeResource PhoneButtonMinHeight}"/> + <Setter Property="MinWidth" Value="{ThemeResource PhoneButtonMinWidth}"/> + <Setter Property="HorizontalAlignment" Value="Left"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="ToggleButton"> + <Grid Background="Transparent"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"/> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Pressed"/> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Checked"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ColorAnimation Duration="0:0:0.2" To="{ThemeResource ContentDialogDimmingColor}" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="EnabledBackground" d:IsOptimized="True"/> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneDisabledBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneBackgroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="CheckedPressed"/> + <VisualState x:Name="CheckedDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="0.4"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="EnabledContent"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource PhoneButtonBasePressedForegroundBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Indeterminate"/> + <VisualState x:Name="IndeterminatePointerOver"/> + <VisualState x:Name="IndeterminatePressed"/> + <VisualState x:Name="IndeterminateDisabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledBackground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="EnabledBackground" BorderThickness="{TemplateBinding BorderThickness}" Margin="{ThemeResource PhoneTouchTargetOverhang}" Background="Transparent" RenderTransformOrigin="0.5,0.5"> + <Border.RenderTransform> + <CompositeTransform/> + </Border.RenderTransform> + <ContentPresenter x:Name="EnabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + <Border x:Name="DisabledBackground" BorderBrush="{ThemeResource ButtonDisabledBorderThemeBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" IsHitTestVisible="False" Margin="{ThemeResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> + <ContentPresenter x:Name="DisabledContent" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{ThemeResource ButtonDisabledForegroundThemeBrush}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> + </Border> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="SearchBox" TargetType="TextBox"> + <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}"/> + <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}"/> + <Setter Property="Foreground" Value="{ThemeResource TextBoxForegroundThemeBrush}"/> + <Setter Property="SelectionHighlightColor" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/> + <Setter Property="Background" Value="{ThemeResource TextBoxBackgroundThemeBrush}"/> + <Setter Property="BorderBrush" Value="{ThemeResource TextBoxBorderThemeBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontSize" Value="{ThemeResource ContentControlFontSize}"/> + <Setter Property="TextWrapping" Value="NoWrap"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/> + <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}"/> + <Setter Property="Margin" Value="{ThemeResource TextControlMarginThemeThickness}"/> + <Setter Property="VerticalAlignment" Value="Top"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="TextBox"> + <Grid Background="Transparent"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="HeaderContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledHeaderForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Normal"> + <Storyboard> + <DoubleAnimation Duration="0" To="{ThemeResource TextControlBorderThemeOpacity}" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BorderElement"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PlaceholderTextContentPresenter"/> + <ColorAnimation Duration="0:0:0.2" To="White" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="BorderElement" d:IsOptimized="True"/> + <ColorAnimation Duration="0:0:0.2" To="White" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="BorderElement" d:IsOptimized="True"/> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="BorderElement" BorderThickness="{TemplateBinding BorderThickness}" Grid.Row="1" BorderBrush="#00000000"> + <Border.Background> + <SolidColorBrush/> + </Border.Background> + </Border> + <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Margin="{ThemeResource TextControlHeaderMarginThemeThickness}" Grid.Row="0" Style="{StaticResource HeaderContentPresenterStyle}"/> + <ScrollViewer x:Name="ContentElement" AutomationProperties.AccessibilityView="Raw" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsTabStop="False" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Margin="{TemplateBinding BorderThickness}" MinHeight="{ThemeResource TextControlThemeMinHeight}" Padding="{TemplateBinding Padding}" Grid.Row="1" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="Disabled"/> + <ContentControl x:Name="PlaceholderTextContentPresenter" Content="{TemplateBinding PlaceholderText}" FontSize="{ThemeResource ContentControlFontSize}" IsTabStop="False" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Row="1" Background="Black"> + <ContentControl.Foreground> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </ContentControl.Foreground> + <ContentControl.BorderBrush> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </ContentControl.BorderBrush> + </ContentControl> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Thickness x:Key="RichEditBoxTextThemeMargin">2.5,2.5,2.5,2.5</Thickness> + <Thickness x:Key="PasswordBoxCheckBoxThemeMargin">0,-6.5,0,0</Thickness> + <Style x:Key="PasswordBoxTemplate" TargetType="PasswordBox"> + <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}"/> + <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}"/> + <Setter Property="SelectionHighlightColor" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/> + <Setter Property="Foreground" Value="{ThemeResource TextBoxForegroundThemeBrush}"/> + <Setter Property="Background" Value="{ThemeResource TextBoxBackgroundThemeBrush}"/> + <Setter Property="BorderBrush" Value="{ThemeResource TextBoxBorderThemeBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontSize" Value="{ThemeResource ContentControlFontSize}"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/> + <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}"/> + <Setter Property="Margin" Value="{ThemeResource TextControlMarginThemeThickness}"/> + <Setter Property="VerticalAlignment" Value="Top"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="PasswordBox"> + <Grid Background="Transparent"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BorderElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="BorderElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledBorderThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="PlaceholderTextContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="HeaderContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledHeaderForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Normal"> + <Storyboard> + <DoubleAnimation Duration="0" To="{ThemeResource TextControlBorderThemeOpacity}" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BorderElement"/> + </Storyboard> + </VisualState> + <VisualState x:Name="PointerOver"/> + <VisualState x:Name="Focused"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="BorderElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PlaceholderTextContentPresenter"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="BorderElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxFocusedBackgroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground)" Storyboard.TargetName="ContentElement"> + <DiscreteObjectKeyFrame KeyTime="0"> + <DiscreteObjectKeyFrame.Value> + <SolidColorBrush Color="Black"/> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + <VisualStateGroup x:Name="ButtonStates"> + <VisualState x:Name="ButtonVisible"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="RevealButton"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Visible"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsChecked" Storyboard.TargetName="RevealButton"> + <DiscreteObjectKeyFrame KeyTime="0" Value="False"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="ButtonCollapsed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="RevealButton"> + <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="IsChecked" Storyboard.TargetName="RevealButton"> + <DiscreteObjectKeyFrame KeyTime="0" Value="False"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="BorderElement" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Row="1"/> + <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Margin="{ThemeResource TextControlHeaderMarginThemeThickness}" Grid.Row="0" Style="{StaticResource HeaderContentPresenterStyle}"/> + <ScrollViewer x:Name="ContentElement" AutomationProperties.AccessibilityView="Raw" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsTabStop="False" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" Margin="{ThemeResource RichEditBoxTextThemeMargin}" MinHeight="{ThemeResource TextControlThemeMinHeight}" Grid.Row="1" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="Disabled" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"/> + <ContentControl x:Name="PlaceholderTextContentPresenter" Content="{TemplateBinding PlaceholderText}" Foreground="{ThemeResource TextBoxPlaceholderTextThemeBrush}" IsTabStop="False" Margin="{ThemeResource RichEditBoxTextThemeMargin}" Padding="{TemplateBinding Padding}" Grid.Row="1" HorizontalAlignment="Center"/> + <CheckBox x:Name="RevealButton" Foreground="{ThemeResource TextBoxForegroundHeaderThemeBrush}" HorizontalAlignment="Left" IsTabStop="False" Margin="{ThemeResource PasswordBoxCheckBoxThemeMargin}" Grid.Row="2" Visibility="Collapsed" VerticalAlignment="Top"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + <Style x:Key="PasswordTextBox" TargetType="TextBox"> + <Setter Property="MinWidth" Value="{ThemeResource TextControlThemeMinWidth}"/> + <Setter Property="MinHeight" Value="{ThemeResource TextControlThemeMinHeight}"/> + <Setter Property="Foreground" Value="{ThemeResource TextBoxForegroundThemeBrush}"/> + <Setter Property="SelectionHighlightColor" Value="{ThemeResource TextSelectionHighlightColorThemeBrush}"/> + <Setter Property="Background" Value="{ThemeResource TextBoxBackgroundThemeBrush}"/> + <Setter Property="BorderBrush" Value="{ThemeResource TextBoxBorderThemeBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource TextControlBorderThemeThickness}"/> + <Setter Property="FontFamily" Value="{ThemeResource PhoneFontFamilyNormal}"/> + <Setter Property="FontSize" Value="{ThemeResource ContentControlFontSize}"/> + <Setter Property="TextWrapping" Value="NoWrap"/> + <Setter Property="ScrollViewer.HorizontalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.VerticalScrollMode" Value="Auto"/> + <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Hidden"/> + <Setter Property="ScrollViewer.IsDeferredScrollingEnabled" Value="False"/> + <Setter Property="Padding" Value="{ThemeResource TextControlThemePadding}"/> + <Setter Property="Margin" Value="{ThemeResource TextControlMarginThemeThickness}"/> + <Setter Property="VerticalAlignment" Value="Top"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="TextBox"> + <Grid Background="Transparent"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentElement"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="PlaceholderTextContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="HeaderContentPresenter"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource TextBoxDisabledHeaderForegroundThemeBrush}"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + <VisualState x:Name="Normal"> + <Storyboard> + <DoubleAnimation Duration="0" To="{ThemeResource TextControlBorderThemeOpacity}" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="BorderElement"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Focused"> + <Storyboard> + <DoubleAnimation Duration="0" To="0" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="PlaceholderTextContentPresenter"/> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Control.Foreground)" Storyboard.TargetName="ContentElement"> + <DiscreteObjectKeyFrame KeyTime="0"> + <DiscreteObjectKeyFrame.Value> + <SolidColorBrush Color="Black"/> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + <ColorAnimation Duration="0:0:0.2" To="White" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="BorderElement" d:IsOptimized="True"/> + <ColorAnimation Duration="0:0:0.2" To="White" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" Storyboard.TargetName="BorderElement" d:IsOptimized="True"/> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + <Border x:Name="BorderElement" BorderThickness="{TemplateBinding BorderThickness}" Grid.Row="1"> + <Border.BorderBrush> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Border.BorderBrush> + <Border.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Border.Background> + </Border> + <ContentPresenter x:Name="HeaderContentPresenter" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Margin="{ThemeResource TextControlHeaderMarginThemeThickness}" Grid.Row="0" Style="{StaticResource HeaderContentPresenterStyle}"/> + <ScrollViewer x:Name="ContentElement" AutomationProperties.AccessibilityView="Raw" HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" IsTabStop="False" IsHorizontalRailEnabled="{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}" IsVerticalRailEnabled="{TemplateBinding ScrollViewer.IsVerticalRailEnabled}" IsDeferredScrollingEnabled="{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}" Margin="{TemplateBinding BorderThickness}" MinHeight="{ThemeResource TextControlThemeMinHeight}" Padding="{TemplateBinding Padding}" Grid.Row="1" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}" ZoomMode="Disabled" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/> + <ContentControl x:Name="PlaceholderTextContentPresenter" Content="{TemplateBinding PlaceholderText}" Foreground="{ThemeResource TextBoxPlaceholderTextThemeBrush}" FontSize="{ThemeResource ContentControlFontSize}" IsTabStop="False" Margin="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center"/> + </Grid> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + + </Application.Resources> + +</Application> diff --git a/File360/App.xaml.cs b/File360/App.xaml.cs @@ -1,231 +1,153 @@ -using System; -using System.Diagnostics; -using System.Resources; -using System.Windows; -using System.Windows.Markup; -using System.Windows.Navigation; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; -using File360.Resources; +// Copyright (c) Microsoft. All rights reserved. + +using System; +using System.Threading.Tasks; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; +using Windows.UI; +using File360.Common; namespace File360 { - public partial class App : Application + /// <summary> + /// Provides application-specific behavior to supplement the default Application class. + /// </summary> + sealed partial class App : Application { - - /// <summary> - /// Provides easy access to the root frame of the Phone Application. - /// </summary> - /// <returns>The root frame of the Phone Application.</returns> - public static PhoneApplicationFrame RootFrame { get; private set; } - + public string UserName = "User"; +#if WINDOWS_PHONE_APP + ContinuationManager continuationManager; +#endif /// <summary> - /// Constructor for the Application object. + /// Initializes the singleton Application object. This is the first line of authored code + /// executed, and as such is the logical equivalent of main() or WinMain(). /// </summary> public App() { - // Global handler for uncaught exceptions. - UnhandledException += Application_UnhandledException; - - // Standard XAML initialization - InitializeComponent(); - - // Phone-specific initialization - InitializePhoneApplication(); - - // Language display initialization - InitializeLanguage(); + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + public Color AccentColor { set; get; } + public Color ThemeColor { set; get; } + public Color FolderColor { set; get; } + public ColorList CurrentColorItem { set; get; } + + private Frame CreateRootFrame() + { + Frame rootFrame = Window.Current.Content as Frame; - // Show graphics profiling information while debugging. - if (Debugger.IsAttached) + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (rootFrame == null) { - // Display the current frame rate counters - Application.Current.Host.Settings.EnableFrameRateCounter = true; - - // Show the areas of the app that are being redrawn in each frame. - //Application.Current.Host.Settings.EnableRedrawRegions = true; + // Create a Frame to act as the navigation context and navigate to the first page + rootFrame = new Frame(); - // Enable non-production analysis visualization mode, - // which shows areas of a page that are handed off to GPU with a colored overlay. - //Application.Current.Host.Settings.EnableCacheVisualization = true; + // Set the default language + rootFrame.Language = Windows.Globalization.ApplicationLanguages.Languages[0]; + rootFrame.NavigationFailed += OnNavigationFailed; - // Prevent the screen from turning off while under the debugger by disabling - // the application's idle detection. - // Caution:- Use this under debug mode only. Application that disables user idle detection will continue to run - // and consume battery power when the user is not using the phone. - PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled; + // Place the frame in the current Window + Window.Current.Content = rootFrame; } - } - // Code to execute when the application is launching (eg, from Start) - // This code will not execute when the application is reactivated - private void Application_Launching(object sender, LaunchingEventArgs e) - { + return rootFrame; } - // Code to execute when the application is activated (brought to foreground) - // This code will not execute when the application is first launched - private void Application_Activated(object sender, ActivatedEventArgs e) + private async Task RestoreStatusAsync(ApplicationExecutionState previousExecutionState) { - // Ensure that application state is restored appropriately - + // Do not repeat app initialization when the Window already has content, + // just ensure that the window is active + if (previousExecutionState == ApplicationExecutionState.Terminated) + { + // Restore the saved session state only when appropriate + try + { + await SuspensionManager.RestoreAsync(); + } + catch (SuspensionManagerException) + { + //Something went wrong restoring state. + //Assume there is no state and continue + } + } } - // Code to execute when the application is deactivated (sent to background) - // This code will not execute when the application is closing - private void Application_Deactivated(object sender, DeactivatedEventArgs e) +#if WINDOWS_PHONE_APP + /// <summary> + /// Handle OnActivated event to deal with File Open/Save continuation activation kinds + /// </summary> + /// <param name="e">Application activated event arguments, it can be casted to proper sub-type based on ActivationKind</param> + protected async override void OnActivated(IActivatedEventArgs e) { - } + base.OnActivated(e); - // Code to execute when the application is closing (eg, user hit Back) - // This code will not execute when the application is deactivated - private void Application_Closing(object sender, ClosingEventArgs e) - { - // Ensure that required application state is persisted here. - } + continuationManager = new ContinuationManager(); - // Code to execute if a navigation fails - private void RootFrame_NavigationFailed(object sender, NavigationFailedEventArgs e) - { - if (Debugger.IsAttached) + Frame rootFrame = CreateRootFrame(); + await RestoreStatusAsync(e.PreviousExecutionState); + + if (rootFrame.Content == null) { - MessageBox.Show((e.Uri).ToString()); - MessageBox.Show(e.Exception.ToString()); - // A navigation has failed; break into the debugger - Debugger.Break(); + rootFrame.Navigate(typeof(MainPage)); } - - } - // Code to execute on Unhandled Exceptions - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - if (Debugger.IsAttached) + var continuationEventArgs = e as IContinuationActivatedEventArgs; + if (continuationEventArgs != null) { - // An unhandled exception has occurred; break into the debugger - //Debugger.Break(); + if (rootFrame != null) + { + // Call ContinuationManager to handle continuation activation + continuationManager.Continue(continuationEventArgs, rootFrame); + } } - } - - #region Phone application initialization - - // Avoid double-initialization - private bool phoneApplicationInitialized = false; - - // Do not add any additional code to this method - private void InitializePhoneApplication() - { - if (phoneApplicationInitialized) - return; - - // Create the frame but don't set it as RootVisual yet; this allows the splash - // screen to remain active until the application is ready to render. - RootFrame = new PhoneApplicationFrame(); - RootFrame.Navigated += CompleteInitializePhoneApplication; - - RootFrame.UriMapper = new UriMapper(); - - // Handle navigation failures - RootFrame.NavigationFailed += RootFrame_NavigationFailed; - // Handle reset requests for clearing the backstack - RootFrame.Navigated += CheckForResetNavigation; - - // Ensure we don't initialize again - phoneApplicationInitialized = true; + Window.Current.Activate(); } +#endif - // Do not add any additional code to this method - private void CompleteInitializePhoneApplication(object sender, NavigationEventArgs e) + /// <summary> + /// Invoked when the application is launched normally by the end user. Other entry points + /// will be used such as when the application is launched to open a specific file. + /// </summary> + /// <param name="e">Details about the launch request and process.</param> + protected async override void OnLaunched(LaunchActivatedEventArgs e) { - // Set the root visual to allow the application to render - if (RootVisual != RootFrame) - RootVisual = RootFrame; + Frame rootFrame = CreateRootFrame(); + await RestoreStatusAsync(e.PreviousExecutionState); - // Remove this handler since it is no longer needed - RootFrame.Navigated -= CompleteInitializePhoneApplication; - } + //MainPage is always in rootFrame so we don't have to worry about restoring the navigation state on resume + rootFrame.Navigate(typeof(MainPage), e.Arguments); - private void CheckForResetNavigation(object sender, NavigationEventArgs e) - { - // If the app has received a 'reset' navigation, then we need to check - // on the next navigation to see if the page stack should be reset - if (e.NavigationMode == NavigationMode.Reset) - RootFrame.Navigated += ClearBackStackAfterReset; + // Ensure the current window is active + Window.Current.Activate(); } - private void ClearBackStackAfterReset(object sender, NavigationEventArgs e) + /// <summary> + /// Invoked when Navigation to a certain page fails + /// </summary> + /// <param name="sender">The Frame which failed navigation</param> + /// <param name="e">Details about the navigation failure</param> + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) { - // Unregister the event so it doesn't get called again - RootFrame.Navigated -= ClearBackStackAfterReset; - - // Only clear the stack for 'new' (forward) and 'refresh' navigations - if (e.NavigationMode != NavigationMode.New && e.NavigationMode != NavigationMode.Refresh) - return; - - // For UI consistency, clear the entire page stack - while (RootFrame.RemoveBackEntry() != null) - { - ; // do nothing - } + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); } - #endregion - - // Initialize the app's font and flow direction as defined in its localized resource strings. - // - // To ensure that the font of your application is aligned with its supported languages and that the - // FlowDirection for each of those languages follows its traditional direction, ResourceLanguage - // and ResourceFlowDirection should be initialized in each resx file to match these values with that - // file's culture. For example: - // - // AppResources.es-ES.resx - // ResourceLanguage's value should be "es-ES" - // ResourceFlowDirection's value should be "LeftToRight" - // - // AppResources.ar-SA.resx - // ResourceLanguage's value should be "ar-SA" - // ResourceFlowDirection's value should be "RightToLeft" - // - // For more info on localizing Windows Phone apps see http://go.microsoft.com/fwlink/?LinkId=262072. - // - private void InitializeLanguage() + /// <summary> + /// Invoked when application execution is being suspended. Application state is saved + /// without knowing whether the application will be terminated or resumed with the contents + /// of memory still intact. + /// </summary> + /// <param name="sender">The source of the suspend request.</param> + /// <param name="e">Details about the suspend request.</param> + private async void OnSuspending(object sender, SuspendingEventArgs e) { - try - { - // Set the font to match the display language defined by the - // ResourceLanguage resource string for each supported language. - // - // Fall back to the font of the neutral language if the Display - // language of the phone is not supported. - // - // If a compiler error is hit then ResourceLanguage is missing from - // the resource file. - RootFrame.Language = XmlLanguage.GetLanguage(AppResources.ResourceLanguage); - - // Set the FlowDirection of all elements under the root frame based - // on the ResourceFlowDirection resource string for each - // supported language. - // - // If a compiler error is hit then ResourceFlowDirection is missing from - // the resource file. - FlowDirection flow = (FlowDirection)Enum.Parse(typeof(FlowDirection), AppResources.ResourceFlowDirection); - RootFrame.FlowDirection = flow; - } - catch - { - // If an exception is caught here it is most likely due to either - // ResourceLangauge not being correctly set to a supported language - // code or ResourceFlowDirection is set to a value other than LeftToRight - // or RightToLeft. - - if (Debugger.IsAttached) - { - Debugger.Break(); - } - - throw; - } + var deferral = e.SuspendingOperation.GetDeferral(); + await SuspensionManager.SaveAsync(); + deferral.Complete(); } } -} -\ No newline at end of file +} diff --git a/File360/Assets/ARAM.png b/File360/Assets/ARAM.png Binary files differ. diff --git a/File360/Assets/Fine-Halftone-Screen-Small.png b/File360/Assets/Fine-Halftone-Screen-Small.png Binary files differ. diff --git a/File360/Assets/Font/Custom/ClearSans-Light.ttf b/File360/Assets/Font/Custom/ClearSans-Light.ttf Binary files differ. diff --git a/File360/Assets/Font/Custom/ClearSans-Thin.ttf b/File360/Assets/Font/Custom/ClearSans-Thin.ttf Binary files differ. diff --git a/File360/Assets/Font/Custom/HelveticaNeue-Thin.otf b/File360/Assets/Font/Custom/HelveticaNeue-Thin.otf Binary files differ. diff --git a/File360/Assets/Font/Custom/Lobster 1.4.otf b/File360/Assets/Font/Custom/Lobster 1.4.otf Binary files differ. diff --git a/File360/Assets/Font/Custom/Mohave.otf b/File360/Assets/Font/Custom/Mohave.otf Binary files differ. diff --git a/File360/Assets/Font/Custom/Raleway-Light.ttf b/File360/Assets/Font/Custom/Raleway-Light.ttf Binary files differ. diff --git a/File360/Assets/Font/Custom/Raleway-SemiBold.ttf b/File360/Assets/Font/Custom/Raleway-SemiBold.ttf Binary files differ. diff --git a/File360/Assets/Font/Custom/Raleway-Thin.ttf b/File360/Assets/Font/Custom/Raleway-Thin.ttf Binary files differ. diff --git a/File360/Assets/Font/Custom/Roboto-Thin.ttf b/File360/Assets/Font/Custom/Roboto-Thin.ttf Binary files differ. diff --git a/File360/Assets/Font/filetypes.ttf b/File360/Assets/Font/filetypes.ttf Binary files differ. diff --git a/File360/Assets/Font/iconfont.ttf b/File360/Assets/Font/iconfont.ttf Binary files differ. diff --git a/File360/Assets/Font/settingsfont.ttf b/File360/Assets/Font/settingsfont.ttf Binary files differ. diff --git a/File360/Assets/IMG-20150528-WA0003.jpg b/File360/Assets/IMG-20150528-WA0003.jpg Binary files differ. diff --git a/File360/Assets/Logo.scale-240.png b/File360/Assets/Logo.scale-240.png Binary files differ. diff --git a/File360/Assets/Maari-Tamil-2015-500x500.jpg b/File360/Assets/Maari-Tamil-2015-500x500.jpg Binary files differ. diff --git a/File360/Assets/SmallLogo.scale-240.png b/File360/Assets/SmallLogo.scale-240.png Binary files differ. diff --git a/File360/Assets/SplashScreen.scale-240.png b/File360/Assets/SplashScreen.scale-240.png Binary files differ. diff --git a/File360/Assets/Square71x71Logo.scale-240.png b/File360/Assets/Square71x71Logo.scale-240.png Binary files differ. diff --git a/File360/Assets/StoreLogo.scale-240.png b/File360/Assets/StoreLogo.scale-240.png Binary files differ. diff --git a/File360/Assets/WideLogo.scale-240.png b/File360/Assets/WideLogo.scale-240.png Binary files differ. diff --git a/File360/Assets/innerShadow.png b/File360/Assets/innerShadow.png Binary files differ. diff --git a/File360/Assets/mainDropShadow.png b/File360/Assets/mainDropShadow.png Binary files differ. diff --git a/File360/Assets/mainDropShadowTransparent.png b/File360/Assets/mainDropShadowTransparent.png Binary files differ. diff --git a/File360/Assets/main_drop_shadow_png 13-Dec-2007 09_42 31K.png b/File360/Assets/main_drop_shadow_png 13-Dec-2007 09_42 31K.png Binary files differ. diff --git a/File360/Assets/nullMusicArt.jpg b/File360/Assets/nullMusicArt.jpg Binary files differ. diff --git a/File360/Assets/pic (1).jpg b/File360/Assets/pic (1).jpg Binary files differ. diff --git a/File360/Assets/pic (2).jpg b/File360/Assets/pic (2).jpg Binary files differ. diff --git a/File360/Assets/pulse2.png b/File360/Assets/pulse2.png Binary files differ. diff --git a/File360/Assets/start3.png b/File360/Assets/start3.png Binary files differ. diff --git a/File360/Assets/url.png b/File360/Assets/url.png Binary files differ. diff --git a/File360/Assets/vertDrop.png b/File360/Assets/vertDrop.png Binary files differ. diff --git a/File360/BlankPage.xaml b/File360/BlankPage.xaml @@ -0,0 +1,16 @@ +<Page + x:Class="File360.BlankPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + <Page.Resources> + + </Page.Resources> + <Page.Background> + <SolidColorBrush Color="#FFAC6A8E"/> + </Page.Background> + +</Page> diff --git a/File360/BlankPage.xaml.cs b/File360/BlankPage.xaml.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class BlankPage : Page + { + public BlankPage() + { + this.InitializeComponent(); + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + } + } +} diff --git a/File360/BoolToVisibilityConverter.cs b/File360/BoolToVisibilityConverter.cs @@ -0,0 +1,39 @@ +namespace File360 +{ + using System; + using Windows.UI.Xaml; + using Windows.UI.Xaml.Data; + + /// <summary> + /// Converts a Boolean into a Visibility. + /// </summary> + public class BoolToVisibilityConverter : IValueConverter + { + /// <summary> + /// If set to True, conversion is reversed: True will become Collapsed. + /// </summary> + public bool IsReversed { get; set; } + + public object Convert(object value, Type targetType, object parameter, string language) + { + var val = System.Convert.ToBoolean(value); + if (this.IsReversed) + { + val = !val; + } + + if (val) + { + return Visibility.Visible; + } + + return Visibility.Collapsed; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + + } +} +\ No newline at end of file diff --git a/File360/BottomBarItem.xaml b/File360/BottomBarItem.xaml @@ -0,0 +1,17 @@ +<Button + x:Class="File360.BottomBarItem" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + HorizontalAlignment="Right" + BorderBrush="{x:Null}" + RequestedTheme="Dark" + BorderThickness="1" FontWeight="Thin"> + <StackPanel MinWidth="35" Grid.Column="1"> + <TextBlock x:Name="imageText" FontSize="20" Text="c" FontFamily="Assets/Font/iconFont.ttf#iconfont" HorizontalAlignment="Center" VerticalAlignment="Bottom" Foreground="{ThemeResource PhoneForegroundBrush}" /> + <TextBlock x:Name="contentText" Text="copy" Grid.Row="1" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" HorizontalAlignment="Center" VerticalAlignment="Top" FontSize="12" Foreground="{ThemeResource PhoneForegroundBrush}" FontWeight="Normal" /> + </StackPanel> + </Button> diff --git a/File360/BottomBarItem.xaml.cs b/File360/BottomBarItem.xaml.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 + +namespace File360 +{ + public sealed partial class BottomBarItem : Button + { + public BottomBarItem() + { + this.InitializeComponent(); + MinWidth = 5; + MinHeight = 5; + Loaded += BottomBarItem_Loaded; + } + + public void Initialize() + { + if (IsVertical()) + { + contentText.FontSize = Window.Current.Bounds.Width / 35; + imageText.FontSize = Window.Current.Bounds.Width / 20; + } + else + { + contentText.FontSize = Window.Current.Bounds.Height / 35; imageText.FontSize = Window.Current.Bounds.Height / 20; + } + } + + public string ImageText + { + get { return imageText.Text; } + set { imageText.Text = value; } + } + public Brush ImageColor + { + get { return imageText.Foreground; } + set { imageText.Foreground = value; } + } + public Brush ContentColor + { + get { return contentText.Foreground; } + set { contentText.Foreground = value; } + } + public string ContentText + { + get { return contentText.Text; } + set { contentText.Text = value; } + } + void BottomBarItem_Loaded(object sender, RoutedEventArgs e) + { + Initialize(); + Window.Current.SizeChanged += Current_SizeChanged; + } + + void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) + { + //Initialize(); + } + public bool IsVertical() + { + if (Window.Current.Bounds.Height > Window.Current.Bounds.Width) return true; + else return false; + } + } +} diff --git a/File360/CardDetails.xaml b/File360/CardDetails.xaml @@ -0,0 +1,13 @@ +<Page + x:Class="File360.CardDetails" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + FontSize="18" + Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> + + +</Page> diff --git a/File360/CardDetails.xaml.cs b/File360/CardDetails.xaml.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class CardDetails : Page + { + public CardDetails() + { + this.InitializeComponent(); + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + } + } +} diff --git a/File360/ColorList.cs b/File360/ColorList.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI; + +namespace File360 +{ + public class ColorList + { + public string Color { get; set; } + + public ColorList(string color) + { + this.Color = color; + } + } +} diff --git a/File360/ColorPicker.xaml b/File360/ColorPicker.xaml @@ -0,0 +1,32 @@ +<UserControl + x:Class="File360.ColorPicker" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + <UserControl.Resources> + <DataTemplate x:Name="ColorsTemplate"> + <StackPanel Height="60" Width="60"> + <Rectangle Width="50" Height="50" Fill="{Binding Color}"/> + </StackPanel> + </DataTemplate> + </UserControl.Resources> + <StackPanel x:Name="stackPanel" Height="50"> + <ToggleButton Style="{StaticResource DefaultToggleButton}" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" Unchecked="ButtonUncheck" Checked="ButtonCheck"> + <Grid Height="50"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <TextBlock x:Name="ColorProperty" Text="app Accent" VerticalAlignment="Center" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontSize="20" FontWeight="Normal"/> + <Rectangle x:Name="RectangleFill" Margin="5,5,5,5" Grid.Column="1" HorizontalAlignment="Right" Height="40" Width="40" Fill="{ThemeResource PhoneAccentBrush}" Stroke="White"/> + </Grid> + </ToggleButton> + <TextBlock Margin="10,0,0,0" Text="choose color" FontSize="20"/> + <GridView x:Name="ColorContainer" ItemTemplate="{StaticResource ColorsTemplate}" + SelectionChanged="ColorContainer_SelectionChanged" + Height="245"/> + </StackPanel> +</UserControl> diff --git a/File360/ColorPicker.xaml.cs b/File360/ColorPicker.xaml.cs @@ -0,0 +1,185 @@ +using System; +using System.Collections.Generic; +using Windows.UI; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Media; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class ColorPicker : UserControl + { + public ColorPicker() + { + this.InitializeComponent(); + Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; + #region blahblahblah + // string[] colorNames = + //{ + // "Yellow","BananaYellow","LaserLemon","Jasmine","Green","Emerald", + // "GreenYellow","Lime","Chartreuse","LimeGreen","SpringGreen","LightGreen", + // "MediumSeaGreen","MediumSpringGreen","Olive","SeaGreen","Red","OrangeRed", + // "DarkOrange","Orange","ImperialRed","Maroon","Brown","Chocolate", + // "Coral","Crimson","DarkSalmon","DeepPink","#Firebrick","HotPink", + // "IndianRed","LightCoral","LightPink","LightSalmon","Magenta","MediumVioletRed", + // "Orchid","PaleVioletRed","Salmon","SandyBrown","Navy","Indigo", + // "MidnightBlue","Blue","Purple","BlueViolet","CornflowerBlue","Cyan", + // "DarkCyan","DarkSlateBlue","DeepSkyBlue","DodgerBlue","LightBlue","LightSeaGreen", + // "LightSkyBlue","LightSteelBlue","Mauve","MediumSlateBlue","RoyalBlue","SlateBlue", + // "SlateGray","SteelBlue","Teal","Turquoise","DarkGrey","LightGray" + //}; + #endregion + + } + + private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) + { + Height = 50; + } + + private void ColorSetInitializer(string n) + { + if (n == "0") + { + string[] accentColors = + { + "#FFFFFF00","#FFFFE135","#FFFFFF66","#FFF8DE7E","#FF008000","#FF008A00", + "#FFADFF2F","#FF00FF00","#FF7FFF00","#FF32CD32","#FF00FF7F","#FF90EE90", + "#FF3CB371","#FF00FA9A","#FF808000","#FF2E8B57","#FFFF0000","#FFFF4500", + "#FFFF8C00","#FFFFA500","#FFED2939","#FF800000","#FFA52A2A","#FFD2691E", + "#FFFF7F50","#FFDC143C","#FFE9967A","#FFFF1493","#FFB22222","#FFFF69B4", + "#FFCD5C5C","#FFF08080","#FFFFB6C1","#FFFFA07A","#FFFF00FF","#FFC71585", + "#FFDA70D6","#FFDB7093","#FFFA8072","#FFF4A460","#FF000080","#FF4B0082", + "#FF191970","#FF0000FF","#FF800080","#FF8A2BE2","#FF6495ED","#FF00FFFF", + "#FF008B8B","#FF483D8B","#FF00BFFF","#FF1E90FF","#FFADD8E6","#FF20B2AA", + "#FF87CEFA","#FFB0C4DE","#FF76608A","#FF7B68EE","#FF4169E1","#FF6A5ACD", + "#FF708090","#FF4682B4","#FF008080","#FF40E0D0","#FFA9A9A9","#FFD3D3D3" + }; + List<ColorList> accentItem = new List<ColorList>(); + for (int i = 0; i < 66; i++) + { + accentItem.Add(new ColorList(accentColors[i])); + } + ColorContainer.ItemsSource = accentItem; + } + if (n == "1") + { + string[] themeColors = + { + "#FFFFFFFF","#FF000000" + }; + List<ColorList> accentItem = new List<ColorList>(); + for (int i = 0; i < 2; i++) + { + accentItem.Add(new ColorList(themeColors[i])); + } + ColorContainer.ItemsSource = accentItem; + } + if (n == "2") + { + string[] folderColors = + { + "#FFFFFF00","#FFFFE135","#FFFFFF66","#FFF8DE7E","#FF008000","#FF008A00", + "#FFADFF2F","#FF00FF00","#FF7FFF00","#FF32CD32","#FF00FF7F","#FF90EE90", + "#FF3CB371","#FF00FA9A","#FF808000","#FF2E8B57","#FFFF0000","#FFFF4500", + "#FFFF8C00","#FFFFA500","#FFED2939","#FF800000","#FFA52A2A","#FFD2691E", + "#FFFF7F50","#FFDC143C","#FFE9967A","#FFFF1493","#FFB22222","#FFFF69B4", + "#FFCD5C5C","#FFF08080","#FFFFB6C1","#FFFFA07A","#FFFF00FF","#FFC71585", + "#FFDA70D6","#FFDB7093","#FFFA8072","#FFF4A460","#FF000080","#FF4B0082", + "#FF191970","#FF0000FF","#FF800080","#FF8A2BE2","#FF6495ED","#FF00FFFF", + "#FF008B8B","#FF483D8B","#FF00BFFF","#FF1E90FF","#FFADD8E6","#FF20B2AA", + "#FF87CEFA","#FFB0C4DE","#FF76608A","#FF7B68EE","#FF4169E1","#FF6A5ACD", + "#FF708090","#FF4682B4","#FF008080","#FF40E0D0","#FFA9A9A9","#FFD3D3D3" + }; + List<ColorList> accentItem = new List<ColorList>(); + for (int i = 0; i < 66; i++) + { + accentItem.Add(new ColorList(folderColors[i])); + } + ColorContainer.ItemsSource = accentItem; + } + } + + public string ColorSet + { + set { ColorSetInitializer(value); } + } + + public string OptionName + { + get { return ColorProperty.Text; } + set { ColorProperty.Text = value; } + } + //public event EventArgs ColorSelected; + //private void lstColorPalette_SelectionChanged(object sender, SelectionChangedEventArgs e) + //{ + // if (ColorSelected != null) + // { + // //SelectedColor = objColor.ColorBrush; + // //ColorSelectedEvent(this, EventArgs.Empty); + // } + //} + public SolidColorBrush SelectedColor + { + get { return new SolidColorBrush(StringToColor(CurrentColorItem.Color)); } + } + + public ColorList CurrentColorItem { set; get; } + + private void ColorPickerPage_Loaded(object sender, RoutedEventArgs e) + { + } + private static Color StringToColor(string s) + { + // remove artifacts + s = s.Trim().TrimStart('#'); + + // only 8 (with alpha channel) or 6 symbols are allowed + if (s.Length != 8 && s.Length != 6) + throw new ArgumentException("Unknown string format!"); + + int startParseIndex = 0; + bool alphaChannelExists = s.Length == 8; // check if alpha canal exists + + // read alpha channel value + byte a = 255; + if (alphaChannelExists) + { + a = System.Convert.ToByte(s.Substring(0, 2), 16); + startParseIndex += 2; + } + + // read r value + byte r = System.Convert.ToByte(s.Substring(startParseIndex, 2), 16); + startParseIndex += 2; + // read g value + byte g = System.Convert.ToByte(s.Substring(startParseIndex, 2), 16); + startParseIndex += 2; + // read b value + byte b = System.Convert.ToByte(s.Substring(startParseIndex, 2), 16); + + return Color.FromArgb(a, r, g, b); + } + private void ColorContainer_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (e.AddedItems.Count > 0) + { + CurrentColorItem = ((ColorList)e.AddedItems[0]); + RectangleFill.Fill = new SolidColorBrush(StringToColor(CurrentColorItem.Color)); + } + } + private void ButtonCheck(object sender, RoutedEventArgs e) + { + stackPanel.Height = 300; + } + private void ButtonUncheck(object sender, RoutedEventArgs e) + { + stackPanel.Height = 50; + } + } +} diff --git a/File360/ColorSampler.cs b/File360/ColorSampler.cs @@ -0,0 +1,36 @@ +using Windows.Graphics.Imaging; +using Windows.UI; +using Windows.UI.Xaml.Media.Imaging; + +namespace File360 +{ + class ColorSampler + { + public Color GetPixel(WriteableBitmap wb) + { + int pixel; //ARGB variable with 32 int bytes where + //sets of 8 bytes are: Alpha, Red, Green, Blue + byte r = 0; + byte g = 0; + byte b = 0; + int i = 0; + int j = 0; + //Skip every alternate pixel making the program 4 times faster + for (i = 0; i < wb.PixelWidth; i = i + 2) + { + for (j = 0; j < wb.PixelHeight; j = j + 2) + { + pixel = WriteableBitmapExtensions.GetPixeli(wb,i,j); //the ARGB integer(pixel) has the colors of pixel (i,j) + r = (byte)(r + (255 & (pixel >> 16))); //add up reds + g = (byte)(g + (255 & (pixel >> 8))); //add up greens + b = (byte)(b + (255 & (pixel))); //add up blues + } + } + r = (byte)(r / (wb.PixelWidth/2 * wb.PixelHeight/2)); + g = (byte)(g / (wb.PixelWidth / 2 * wb.PixelHeight / 2)); + b = (byte)(b / (wb.PixelWidth / 2 * wb.PixelHeight / 2)); + return Color.FromArgb(100, r, g, b); + } + } + +} diff --git a/File360/Common/NavigationHelper.cs b/File360/Common/NavigationHelper.cs @@ -0,0 +1,436 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; +using Windows.System; +using Windows.UI.Core; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Navigation; + +namespace File360.Common +{ + /// <summary> + /// NavigationHelper aids in navigation between pages. It provides commands used to + /// navigate back and forward as well as registers for standard mouse and keyboard + /// shortcuts used to go back and forward in Windows and the hardware back button in + /// Windows Phone. In addition it integrates SuspensionManger to handle process lifetime + /// management and state management when navigating between pages. + /// </summary> + /// <example> + /// To make use of NavigationHelper, follow these two steps or + /// start with a BasicPage or any other Page item template other than BlankPage. + /// + /// 1) Create an instance of the NavigationHelper somewhere such as in the + /// constructor for the page and register a callback for the LoadState and + /// SaveState events. + /// <code> + /// public MyPage() + /// { + /// this.InitializeComponent(); + /// var navigationHelper = new NavigationHelper(this); + /// this.navigationHelper.LoadState += navigationHelper_LoadState; + /// this.navigationHelper.SaveState += navigationHelper_SaveState; + /// } + /// + /// private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e) + /// { } + /// private async void navigationHelper_SaveState(object sender, LoadStateEventArgs e) + /// { } + /// </code> + /// + /// 2) Register the page to call into the NavigationHelper whenever the page participates + /// in navigation by overriding the <see cref="Windows.UI.Xaml.Controls.Page.OnNavigatedTo"/> + /// and <see cref="Windows.UI.Xaml.Controls.Page.OnNavigatedFrom"/> events. + /// <code> + /// protected override void OnNavigatedTo(NavigationEventArgs e) + /// { + /// navigationHelper.OnNavigatedTo(e); + /// } + /// + /// protected override void OnNavigatedFrom(NavigationEventArgs e) + /// { + /// navigationHelper.OnNavigatedFrom(e); + /// } + /// </code> + /// </example> + [Windows.Foundation.Metadata.WebHostHidden] + public class NavigationHelper : DependencyObject + { + private Page Page { get; set; } + private Frame Frame { get { return this.Page.Frame; } } + + /// <summary> + /// Initializes a new instance of the <see cref="NavigationHelper"/> class. + /// </summary> + /// <param name="page">A reference to the current page used for navigation. + /// This reference allows for frame manipulation and to ensure that keyboard + /// navigation requests only occur when the page is occupying the entire window.</param> + public NavigationHelper(Page page) + { + this.Page = page; + + // When this page is part of the visual tree make two changes: + // 1) Map application view state to visual state for the page + // 2) Handle hardware navigation requests + this.Page.Loaded += (sender, e) => + { +#if WINDOWS_PHONE_APP + Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; +#else + // Keyboard and mouse navigation only apply when occupying the entire window + if (this.Page.ActualHeight == Window.Current.Bounds.Height && + this.Page.ActualWidth == Window.Current.Bounds.Width) + { + // Listen to the window directly so focus isn't required + Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated += + CoreDispatcher_AcceleratorKeyActivated; + Window.Current.CoreWindow.PointerPressed += + this.CoreWindow_PointerPressed; + } +#endif + }; + + // Undo the same changes when the page is no longer visible + this.Page.Unloaded += (sender, e) => + { +#if WINDOWS_PHONE_APP + Windows.Phone.UI.Input.HardwareButtons.BackPressed -= HardwareButtons_BackPressed; +#else + Window.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated -= + CoreDispatcher_AcceleratorKeyActivated; + Window.Current.CoreWindow.PointerPressed -= + this.CoreWindow_PointerPressed; +#endif + }; + } + + #region Navigation support + + RelayCommand _goBackCommand; + RelayCommand _goForwardCommand; + + /// <summary> + /// <see cref="RelayCommand"/> used to bind to the back Button's Command property + /// for navigating to the most recent item in back navigation history, if a Frame + /// manages its own navigation history. + /// + /// The <see cref="RelayCommand"/> is set up to use the virtual method <see cref="GoBack"/> + /// as the Execute Action and <see cref="CanGoBack"/> for CanExecute. + /// </summary> + public RelayCommand GoBackCommand + { + get + { + if (_goBackCommand == null) + { + _goBackCommand = new RelayCommand( + () => this.GoBack(), + () => this.CanGoBack()); + } + return _goBackCommand; + } + set + { + _goBackCommand = value; + } + } + /// <summary> + /// <see cref="RelayCommand"/> used for navigating to the most recent item in + /// the forward navigation history, if a Frame manages its own navigation history. + /// + /// The <see cref="RelayCommand"/> is set up to use the virtual method <see cref="GoForward"/> + /// as the Execute Action and <see cref="CanGoForward"/> for CanExecute. + /// </summary> + public RelayCommand GoForwardCommand + { + get + { + if (_goForwardCommand == null) + { + _goForwardCommand = new RelayCommand( + () => this.GoForward(), + () => this.CanGoForward()); + } + return _goForwardCommand; + } + } + + /// <summary> + /// Virtual method used by the <see cref="GoBackCommand"/> property + /// to determine if the <see cref="Frame"/> can go back. + /// </summary> + /// <returns> + /// true if the <see cref="Frame"/> has at least one entry + /// in the back navigation history. + /// </returns> + public virtual bool CanGoBack() + { + return this.Frame != null && this.Frame.CanGoBack; + } + /// <summary> + /// Virtual method used by the <see cref="GoForwardCommand"/> property + /// to determine if the <see cref="Frame"/> can go forward. + /// </summary> + /// <returns> + /// true if the <see cref="Frame"/> has at least one entry + /// in the forward navigation history. + /// </returns> + public virtual bool CanGoForward() + { + return this.Frame != null && this.Frame.CanGoForward; + } + + /// <summary> + /// Virtual method used by the <see cref="GoBackCommand"/> property + /// to invoke the <see cref="Windows.UI.Xaml.Controls.Frame.GoBack"/> method. + /// </summary> + public virtual void GoBack() + { + if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack(); + } + /// <summary> + /// Virtual method used by the <see cref="GoForwardCommand"/> property + /// to invoke the <see cref="Windows.UI.Xaml.Controls.Frame.GoForward"/> method. + /// </summary> + public virtual void GoForward() + { + if (this.Frame != null && this.Frame.CanGoForward) this.Frame.GoForward(); + } + +#if WINDOWS_PHONE_APP + /// <summary> + /// Invoked when the hardware back button is pressed. For Windows Phone only. + /// </summary> + /// <param name="sender">Instance that triggered the event.</param> + /// <param name="e">Event data describing the conditions that led to the event.</param> + private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) + { + if (this.GoBackCommand.CanExecute(null)) + { + e.Handled = true; + this.GoBackCommand.Execute(null); + } + } +#else + /// <summary> + /// Invoked on every keystroke, including system keys such as Alt key combinations, when + /// this page is active and occupies the entire window. Used to detect keyboard navigation + /// between pages even when the page itself doesn't have focus. + /// </summary> + /// <param name="sender">Instance that triggered the event.</param> + /// <param name="e">Event data describing the conditions that led to the event.</param> + private void CoreDispatcher_AcceleratorKeyActivated(CoreDispatcher sender, + AcceleratorKeyEventArgs e) + { + var virtualKey = e.VirtualKey; + + // Only investigate further when Left, Right, or the dedicated Previous or Next keys + // are pressed + if ((e.EventType == CoreAcceleratorKeyEventType.SystemKeyDown || + e.EventType == CoreAcceleratorKeyEventType.KeyDown) && + (virtualKey == VirtualKey.Left || virtualKey == VirtualKey.Right || + (int)virtualKey == 166 || (int)virtualKey == 167)) + { + var coreWindow = Window.Current.CoreWindow; + var downState = CoreVirtualKeyStates.Down; + bool menuKey = (coreWindow.GetKeyState(VirtualKey.Menu) & downState) == downState; + bool controlKey = (coreWindow.GetKeyState(VirtualKey.Control) & downState) == downState; + bool shiftKey = (coreWindow.GetKeyState(VirtualKey.Shift) & downState) == downState; + bool noModifiers = !menuKey && !controlKey && !shiftKey; + bool onlyAlt = menuKey && !controlKey && !shiftKey; + + if (((int)virtualKey == 166 && noModifiers) || + (virtualKey == VirtualKey.Left && onlyAlt)) + { + // When the previous key or Alt+Left are pressed navigate back + e.Handled = true; + this.GoBackCommand.Execute(null); + } + else if (((int)virtualKey == 167 && noModifiers) || + (virtualKey == VirtualKey.Right && onlyAlt)) + { + // When the next key or Alt+Right are pressed navigate forward + e.Handled = true; + this.GoForwardCommand.Execute(null); + } + } + } + + /// <summary> + /// Invoked on every mouse click, touch screen tap, or equivalent interaction when this + /// page is active and occupies the entire window. Used to detect browser-style next and + /// previous mouse button clicks to navigate between pages. + /// </summary> + /// <param name="sender">Instance that triggered the event.</param> + /// <param name="e">Event data describing the conditions that led to the event.</param> + private void CoreWindow_PointerPressed(CoreWindow sender, + PointerEventArgs e) + { + var properties = e.CurrentPoint.Properties; + + // Ignore button chords with the left, right, and middle buttons + if (properties.IsLeftButtonPressed || properties.IsRightButtonPressed || + properties.IsMiddleButtonPressed) return; + + // If back or foward are pressed (but not both) navigate appropriately + bool backPressed = properties.IsXButton1Pressed; + bool forwardPressed = properties.IsXButton2Pressed; + if (backPressed ^ forwardPressed) + { + e.Handled = true; + if (backPressed) this.GoBackCommand.Execute(null); + if (forwardPressed) this.GoForwardCommand.Execute(null); + } + } +#endif + + #endregion + + #region Process lifetime management + + private String _pageKey; + + /// <summary> + /// Register this event on the current page to populate the page + /// with content passed during navigation as well as any saved + /// state provided when recreating a page from a prior session. + /// </summary> + public event LoadStateEventHandler LoadState; + /// <summary> + /// Register this event on the current page to preserve + /// state associated with the current page in case the + /// application is suspended or the page is discarded from + /// the navigaqtion cache. + /// </summary> + public event SaveStateEventHandler SaveState; + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// This method calls <see cref="LoadState"/>, where all page specific + /// navigation and process lifetime management logic should be placed. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. The Parameter + /// property provides the group to be displayed.</param> + public void OnNavigatedTo(NavigationEventArgs e) + { + var frameState = SuspensionManager.SessionStateForFrame(this.Frame); + this._pageKey = "Page-" + this.Frame.BackStackDepth; + + if (e.NavigationMode == NavigationMode.New) + { + // Clear existing state for forward navigation when adding a new page to the + // navigation stack + var nextPageKey = this._pageKey; + int nextPageIndex = this.Frame.BackStackDepth; + while (frameState.Remove(nextPageKey)) + { + nextPageIndex++; + nextPageKey = "Page-" + nextPageIndex; + } + + // Pass the navigation parameter to the new page + if (this.LoadState != null) + { + this.LoadState(this, new LoadStateEventArgs(e.Parameter, null)); + } + } + else + { + // Pass the navigation parameter and preserved page state to the page, using + // the same strategy for loading suspended state and recreating pages discarded + // from cache + if (this.LoadState != null) + { + this.LoadState(this, new LoadStateEventArgs(e.Parameter, (Dictionary<String, Object>)frameState[this._pageKey])); + } + } + } + + /// <summary> + /// Invoked when this page will no longer be displayed in a Frame. + /// This method calls <see cref="SaveState"/>, where all page specific + /// navigation and process lifetime management logic should be placed. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. The Parameter + /// property provides the group to be displayed.</param> + public void OnNavigatedFrom(NavigationEventArgs e) + { + var frameState = SuspensionManager.SessionStateForFrame(this.Frame); + var pageState = new Dictionary<String, Object>(); + if (this.SaveState != null) + { + this.SaveState(this, new SaveStateEventArgs(pageState)); + } + frameState[_pageKey] = pageState; + } + + #endregion + } + + /// <summary> + /// Represents the method that will handle the <see cref="NavigationHelper.LoadState"/>event + /// </summary> + public delegate void LoadStateEventHandler(object sender, LoadStateEventArgs e); + /// <summary> + /// Represents the method that will handle the <see cref="NavigationHelper.SaveState"/>event + /// </summary> + public delegate void SaveStateEventHandler(object sender, SaveStateEventArgs e); + + /// <summary> + /// Class used to hold the event data required when a page attempts to load state. + /// </summary> + public class LoadStateEventArgs : EventArgs + { + /// <summary> + /// The parameter value passed to <see cref="Frame.Navigate(Type, Object)"/> + /// when this page was initially requested. + /// </summary> + public Object NavigationParameter { get; private set; } + /// <summary> + /// A dictionary of state preserved by this page during an earlier + /// session. This will be null the first time a page is visited. + /// </summary> + public Dictionary<string, Object> PageState { get; private set; } + + /// <summary> + /// Initializes a new instance of the <see cref="LoadStateEventArgs"/> class. + /// </summary> + /// <param name="navigationParameter"> + /// The parameter value passed to <see cref="Frame.Navigate(Type, Object)"/> + /// when this page was initially requested. + /// </param> + /// <param name="pageState"> + /// A dictionary of state preserved by this page during an earlier + /// session. This will be null the first time a page is visited. + /// </param> + public LoadStateEventArgs(Object navigationParameter, Dictionary<string, Object> pageState) + : base() + { + this.NavigationParameter = navigationParameter; + this.PageState = pageState; + } + } + /// <summary> + /// Class used to hold the event data required when a page attempts to save state. + /// </summary> + public class SaveStateEventArgs : EventArgs + { + /// <summary> + /// An empty dictionary to be populated with serializable state. + /// </summary> + public Dictionary<string, Object> PageState { get; private set; } + + /// <summary> + /// Initializes a new instance of the <see cref="SaveStateEventArgs"/> class. + /// </summary> + /// <param name="pageState">An empty dictionary to be populated with serializable state.</param> + public SaveStateEventArgs(Dictionary<string, Object> pageState) + : base() + { + this.PageState = pageState; + } + } +} diff --git a/File360/Common/ObservableDictionary.cs b/File360/Common/ObservableDictionary.cs @@ -0,0 +1,149 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Windows.Foundation.Collections; + +namespace File360.Common +{ + /// <summary> + /// Implementation of IObservableMap that supports reentrancy for use as a default view + /// model. + /// </summary> + public class ObservableDictionary : IObservableMap<string, object> + { + private class ObservableDictionaryChangedEventArgs : IMapChangedEventArgs<string> + { + public ObservableDictionaryChangedEventArgs(CollectionChange change, string key) + { + this.CollectionChange = change; + this.Key = key; + } + + public CollectionChange CollectionChange { get; private set; } + public string Key { get; private set; } + } + + private Dictionary<string, object> _dictionary = new Dictionary<string, object>(); + public event MapChangedEventHandler<string, object> MapChanged; + + private void InvokeMapChanged(CollectionChange change, string key) + { + var eventHandler = MapChanged; + if (eventHandler != null) + { + eventHandler(this, new ObservableDictionaryChangedEventArgs(change, key)); + } + } + + public void Add(string key, object value) + { + this._dictionary.Add(key, value); + this.InvokeMapChanged(CollectionChange.ItemInserted, key); + } + + public void Add(KeyValuePair<string, object> item) + { + this.Add(item.Key, item.Value); + } + + public bool Remove(string key) + { + if (this._dictionary.Remove(key)) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, key); + return true; + } + return false; + } + + public bool Remove(KeyValuePair<string, object> item) + { + object currentValue; + if (this._dictionary.TryGetValue(item.Key, out currentValue) && + Object.Equals(item.Value, currentValue) && this._dictionary.Remove(item.Key)) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, item.Key); + return true; + } + return false; + } + + public object this[string key] + { + get + { + return this._dictionary[key]; + } + set + { + this._dictionary[key] = value; + this.InvokeMapChanged(CollectionChange.ItemChanged, key); + } + } + + public void Clear() + { + var priorKeys = this._dictionary.Keys.ToArray(); + this._dictionary.Clear(); + foreach (var key in priorKeys) + { + this.InvokeMapChanged(CollectionChange.ItemRemoved, key); + } + } + + public ICollection<string> Keys + { + get { return this._dictionary.Keys; } + } + + public bool ContainsKey(string key) + { + return this._dictionary.ContainsKey(key); + } + + public bool TryGetValue(string key, out object value) + { + return this._dictionary.TryGetValue(key, out value); + } + + public ICollection<object> Values + { + get { return this._dictionary.Values; } + } + + public bool Contains(KeyValuePair<string, object> item) + { + return this._dictionary.Contains(item); + } + + public int Count + { + get { return this._dictionary.Count; } + } + + public bool IsReadOnly + { + get { return false; } + } + + public IEnumerator<KeyValuePair<string, object>> GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return this._dictionary.GetEnumerator(); + } + + public void CopyTo(KeyValuePair<string, object>[] array, int arrayIndex) + { + int arraySize = array.Length; + foreach (var pair in this._dictionary) + { + if (arrayIndex >= arraySize) break; + array[arrayIndex++] = pair; + } + } + } +} diff --git a/File360/Common/ReadMe.txt b/File360/Common/ReadMe.txt @@ -0,0 +1,7 @@ +The Common directory contains classes that simplify application development. + +Classes in the Common directory form part of your project and may be further enhanced to meet your +needs. Care should be taken when altering existing methods and properties as incompatible changes +will require corresponding changes to code included in a variety of Visual Studio templates. For +example, additional pages added to your project are written assuming that the original methods and +properties in Common classes are still present and that the names of the types have not changed. +\ No newline at end of file diff --git a/File360/Common/RelayCommand.cs b/File360/Common/RelayCommand.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace File360.Common +{ + /// <summary> + /// A command whose sole purpose is to relay its functionality + /// to other objects by invoking delegates. + /// The default return value for the CanExecute method is 'true'. + /// <see cref="RaiseCanExecuteChanged"/> needs to be called whenever + /// <see cref="CanExecute"/> is expected to return a different value. + /// </summary> + public class RelayCommand : ICommand + { + private readonly Action _execute; + private readonly Func<bool> _canExecute; + + /// <summary> + /// Raised when RaiseCanExecuteChanged is called. + /// </summary> + public event EventHandler CanExecuteChanged; + + /// <summary> + /// Creates a new command that can always execute. + /// </summary> + /// <param name="execute">The execution logic.</param> + public RelayCommand(Action execute) + : this(execute, null) + { + } + + /// <summary> + /// Creates a new command. + /// </summary> + /// <param name="execute">The execution logic.</param> + /// <param name="canExecute">The execution status logic.</param> + public RelayCommand(Action execute, Func<bool> canExecute) + { + if (execute == null) + throw new ArgumentNullException("execute"); + _execute = execute; + _canExecute = canExecute; + } + + /// <summary> + /// Determines whether this <see cref="RelayCommand"/> can execute in its current state. + /// </summary> + /// <param name="parameter"> + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// </param> + /// <returns>true if this command can be executed; otherwise, false.</returns> + public bool CanExecute(object parameter) + { + return _canExecute == null ? true : _canExecute(); + } + + /// <summary> + /// Executes the <see cref="RelayCommand"/> on the current command target. + /// </summary> + /// <param name="parameter"> + /// Data used by the command. If the command does not require data to be passed, this object can be set to null. + /// </param> + public void Execute(object parameter) + { + _execute(); + } + + /// <summary> + /// Method used to raise the <see cref="CanExecuteChanged"/> event + /// to indicate that the return value of the <see cref="CanExecute"/> + /// method has changed. + /// </summary> + public void RaiseCanExecuteChanged() + { + var handler = CanExecuteChanged; + if (handler != null) + { + handler(this, EventArgs.Empty); + } + } + } +} +\ No newline at end of file diff --git a/File360/Common/SuspensionManager.cs b/File360/Common/SuspensionManager.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using Windows.ApplicationModel; +using Windows.Storage; +using Windows.Storage.Streams; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace File360.Common +{ + /// <summary> + /// SuspensionManager captures global session state to simplify process lifetime management + /// for an application. Note that session state will be automatically cleared under a variety + /// of conditions and should only be used to store information that would be convenient to + /// carry across sessions, but that should be discarded when an application crashes or is + /// upgraded. + /// </summary> + internal sealed class SuspensionManager + { + private static Dictionary<string, object> _sessionState = new Dictionary<string, object>(); + private static List<Type> _knownTypes = new List<Type>(); + private const string sessionStateFilename = "_sessionState.xml"; + + /// <summary> + /// Provides access to global session state for the current session. This state is + /// serialized by <see cref="SaveAsync"/> and restored by + /// <see cref="RestoreAsync"/>, so values must be serializable by + /// <see cref="DataContractSerializer"/> and should be as compact as possible. Strings + /// and other self-contained data types are strongly recommended. + /// </summary> + public static Dictionary<string, object> SessionState + { + get { return _sessionState; } + } + + /// <summary> + /// List of custom types provided to the <see cref="DataContractSerializer"/> when + /// reading and writing session state. Initially empty, additional types may be + /// added to customize the serialization process. + /// </summary> + public static List<Type> KnownTypes + { + get { return _knownTypes; } + } + + /// <summary> + /// Save the current <see cref="SessionState"/>. Any <see cref="Frame"/> instances + /// registered with <see cref="RegisterFrame"/> will also preserve their current + /// navigation stack, which in turn gives their active <see cref="Page"/> an opportunity + /// to save its state. + /// </summary> + /// <returns>An asynchronous task that reflects when session state has been saved.</returns> + public static async Task SaveAsync() + { + try + { + // Save the navigation state for all registered frames + foreach (var weakFrameReference in _registeredFrames) + { + Frame frame; + if (weakFrameReference.TryGetTarget(out frame)) + { + SaveFrameNavigationState(frame); + } + } + + // Serialize the session state synchronously to avoid asynchronous access to shared + // state + MemoryStream sessionData = new MemoryStream(); + DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes); + serializer.WriteObject(sessionData, _sessionState); + + // Get an output stream for the SessionState file and write the state asynchronously + StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(sessionStateFilename, CreationCollisionOption.ReplaceExisting); + using (Stream fileStream = await file.OpenStreamForWriteAsync()) + { + sessionData.Seek(0, SeekOrigin.Begin); + await sessionData.CopyToAsync(fileStream); + } + } + catch (Exception e) + { + throw new SuspensionManagerException(e); + } + } + + /// <summary> + /// Restores previously saved <see cref="SessionState"/>. Any <see cref="Frame"/> instances + /// registered with <see cref="RegisterFrame"/> will also restore their prior navigation + /// state, which in turn gives their active <see cref="Page"/> an opportunity restore its + /// state. + /// </summary> + /// <param name="sessionBaseKey">An optional key that identifies the type of session. + /// This can be used to distinguish between multiple application launch scenarios.</param> + /// <returns>An asynchronous task that reflects when session state has been read. The + /// content of <see cref="SessionState"/> should not be relied upon until this task + /// completes.</returns> + public static async Task RestoreAsync(String sessionBaseKey = null) + { + _sessionState = new Dictionary<String, Object>(); + + try + { + // Get the input stream for the SessionState file + StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(sessionStateFilename); + using (IInputStream inStream = await file.OpenSequentialReadAsync()) + { + // Deserialize the Session State + DataContractSerializer serializer = new DataContractSerializer(typeof(Dictionary<string, object>), _knownTypes); + _sessionState = (Dictionary<string, object>)serializer.ReadObject(inStream.AsStreamForRead()); + } + + // Restore any registered frames to their saved state + foreach (var weakFrameReference in _registeredFrames) + { + Frame frame; + if (weakFrameReference.TryGetTarget(out frame) && (string)frame.GetValue(FrameSessionBaseKeyProperty) == sessionBaseKey) + { + frame.ClearValue(FrameSessionStateProperty); + RestoreFrameNavigationState(frame); + } + } + } + catch (Exception e) + { + throw new SuspensionManagerException(e); + } + } + + private static DependencyProperty FrameSessionStateKeyProperty = + DependencyProperty.RegisterAttached("_FrameSessionStateKey", typeof(String), typeof(SuspensionManager), null); + private static DependencyProperty FrameSessionBaseKeyProperty = + DependencyProperty.RegisterAttached("_FrameSessionBaseKeyParams", typeof(String), typeof(SuspensionManager), null); + private static DependencyProperty FrameSessionStateProperty = + DependencyProperty.RegisterAttached("_FrameSessionState", typeof(Dictionary<String, Object>), typeof(SuspensionManager), null); + private static List<WeakReference<Frame>> _registeredFrames = new List<WeakReference<Frame>>(); + + /// <summary> + /// Registers a <see cref="Frame"/> instance to allow its navigation history to be saved to + /// and restored from <see cref="SessionState"/>. Frames should be registered once + /// immediately after creation if they will participate in session state management. Upon + /// registration if state has already been restored for the specified key + /// the navigation history will immediately be restored. Subsequent invocations of + /// <see cref="RestoreAsync"/> will also restore navigation history. + /// </summary> + /// <param name="frame">An instance whose navigation history should be managed by + /// <see cref="SuspensionManager"/></param> + /// <param name="sessionStateKey">A unique key into <see cref="SessionState"/> used to + /// store navigation-related information.</param> + /// <param name="sessionBaseKey">An optional key that identifies the type of session. + /// This can be used to distinguish between multiple application launch scenarios.</param> + public static void RegisterFrame(Frame frame, String sessionStateKey, String sessionBaseKey = null) + { + if (frame.GetValue(FrameSessionStateKeyProperty) != null) + { + throw new InvalidOperationException("Frames can only be registered to one session state key"); + } + + if (frame.GetValue(FrameSessionStateProperty) != null) + { + throw new InvalidOperationException("Frames must be either be registered before accessing frame session state, or not registered at all"); + } + + if (!string.IsNullOrEmpty(sessionBaseKey)) + { + frame.SetValue(FrameSessionBaseKeyProperty, sessionBaseKey); + sessionStateKey = sessionBaseKey + "_" + sessionStateKey; + } + + // Use a dependency property to associate the session key with a frame, and keep a list of frames whose + // navigation state should be managed + frame.SetValue(FrameSessionStateKeyProperty, sessionStateKey); + _registeredFrames.Add(new WeakReference<Frame>(frame)); + + // Check to see if navigation state can be restored + RestoreFrameNavigationState(frame); + } + + /// <summary> + /// Disassociates a <see cref="Frame"/> previously registered by <see cref="RegisterFrame"/> + /// from <see cref="SessionState"/>. Any navigation state previously captured will be + /// removed. + /// </summary> + /// <param name="frame">An instance whose navigation history should no longer be + /// managed.</param> + public static void UnregisterFrame(Frame frame) + { + // Remove session state and remove the frame from the list of frames whose navigation + // state will be saved (along with any weak references that are no longer reachable) + SessionState.Remove((String)frame.GetValue(FrameSessionStateKeyProperty)); + _registeredFrames.RemoveAll((weakFrameReference) => + { + Frame testFrame; + return !weakFrameReference.TryGetTarget(out testFrame) || testFrame == frame; + }); + } + + /// <summary> + /// Provides storage for session state associated with the specified <see cref="Frame"/>. + /// Frames that have been previously registered with <see cref="RegisterFrame"/> have + /// their session state saved and restored automatically as a part of the global + /// <see cref="SessionState"/>. Frames that are not registered have transient state + /// that can still be useful when restoring pages that have been discarded from the + /// navigation cache. + /// </summary> + /// <remarks>Apps may choose to rely on <see cref="NavigationHelper"/> to manage + /// page-specific state instead of working with frame session state directly.</remarks> + /// <param name="frame">The instance for which session state is desired.</param> + /// <returns>A collection of state subject to the same serialization mechanism as + /// <see cref="SessionState"/>.</returns> + public static Dictionary<String, Object> SessionStateForFrame(Frame frame) + { + var frameState = (Dictionary<String, Object>)frame.GetValue(FrameSessionStateProperty); + + if (frameState == null) + { + var frameSessionKey = (String)frame.GetValue(FrameSessionStateKeyProperty); + if (frameSessionKey != null) + { + // Registered frames reflect the corresponding session state + if (!_sessionState.ContainsKey(frameSessionKey)) + { + _sessionState[frameSessionKey] = new Dictionary<String, Object>(); + } + frameState = (Dictionary<String, Object>)_sessionState[frameSessionKey]; + } + else + { + // Frames that aren't registered have transient state + frameState = new Dictionary<String, Object>(); + } + frame.SetValue(FrameSessionStateProperty, frameState); + } + return frameState; + } + + private static void RestoreFrameNavigationState(Frame frame) + { + var frameState = SessionStateForFrame(frame); + if (frameState.ContainsKey("Navigation")) + { + frame.SetNavigationState((String)frameState["Navigation"]); + } + } + + private static void SaveFrameNavigationState(Frame frame) + { + var frameState = SessionStateForFrame(frame); + frameState["Navigation"] = frame.GetNavigationState(); + } + } + public class SuspensionManagerException : Exception + { + public SuspensionManagerException() + { + } + + public SuspensionManagerException(Exception e) + : base("SuspensionManager failed", e) + { + + } + } +} diff --git a/File360/ContinuationManager.cs b/File360/ContinuationManager.cs @@ -0,0 +1,191 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.ApplicationModel.Activation; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +#if WINDOWS_PHONE_APP +/// <summary> +/// ContinuationManager is used to detect if the most recent activation was due +/// to a continuation such as the FileOpenPicker or WebAuthenticationBroker +/// </summary> +public class ContinuationManager +{ + IContinuationActivatedEventArgs args = null; + bool handled = false; + Guid id = Guid.Empty; + + /// <summary> + /// Sets the ContinuationArgs for this instance. Using default Frame of current Window + /// Should be called by the main activation handling code in App.xaml.cs + /// </summary> + /// <param name="args">The activation args</param> + internal void Continue(IContinuationActivatedEventArgs args) + { + Continue(args, Window.Current.Content as Frame); + } + + /// <summary> + /// Sets the ContinuationArgs for this instance. Should be called by the main activation + /// handling code in App.xaml.cs + /// </summary> + /// <param name="args">The activation args</param> + /// <param name="rootFrame">The frame control that contains the current page</param> + internal void Continue(IContinuationActivatedEventArgs args, Frame rootFrame) + { + if (args == null) + throw new ArgumentNullException("args"); + + if (this.args != null && !handled) + throw new InvalidOperationException("Can't set args more than once"); + + this.args = args; + this.handled = false; + this.id = Guid.NewGuid(); + + if (rootFrame == null) + return; + + switch (args.Kind) + { + case ActivationKind.PickFileContinuation: + var fileOpenPickerPage = rootFrame.Content as IFileOpenPickerContinuable; + if (fileOpenPickerPage != null) + { + fileOpenPickerPage.ContinueFileOpenPicker(args as FileOpenPickerContinuationEventArgs); + } + break; + + case ActivationKind.PickSaveFileContinuation: + var fileSavePickerPage = rootFrame.Content as IFileSavePickerContinuable; + if (fileSavePickerPage != null) + { + fileSavePickerPage.ContinueFileSavePicker(args as FileSavePickerContinuationEventArgs); + } + break; + + case ActivationKind.PickFolderContinuation: + var folderPickerPage = rootFrame.Content as IFolderPickerContinuable; + if (folderPickerPage != null) + { + folderPickerPage.ContinueFolderPicker(args as FolderPickerContinuationEventArgs); + } + break; + + case ActivationKind.WebAuthenticationBrokerContinuation: + var wabPage = rootFrame.Content as IWebAuthenticationContinuable; + if (wabPage != null) + { + wabPage.ContinueWebAuthentication(args as WebAuthenticationBrokerContinuationEventArgs); + } + break; + } + } + + /// <summary> + /// Marks the contination data as 'stale', meaning that it is probably no longer of + /// any use. Called when the app is suspended (to ensure future activations don't appear + /// to be for the same continuation) and whenever the continuation data is retrieved + /// (so that it isn't retrieved on subsequent navigations) + /// </summary> + internal void MarkAsStale() + { + this.handled = true; + } + + /// <summary> + /// Retrieves the continuation args, if they have not already been retrieved, and + /// prevents further retrieval via this property (to avoid accidentla double-usage) + /// </summary> + public IContinuationActivatedEventArgs ContinuationArgs + { + get + { + if (handled) + return null; + MarkAsStale(); + return args; + } + } + + /// <summary> + /// Unique identifier for this particular continuation. Most useful for components that + /// retrieve the continuation data via <see cref="GetContinuationArgs"/> and need + /// to perform their own replay check + /// </summary> + public Guid Id { get { return id; } } + + /// <summary> + /// Retrieves the continuation args, optionally retrieving them even if they have already + /// been retrieved + /// </summary> + /// <param name="includeStaleArgs">Set to true to return args even if they have previously been returned</param> + /// <returns>The continuation args, or null if there aren't any</returns> + public IContinuationActivatedEventArgs GetContinuationArgs(bool includeStaleArgs) + { + if (!includeStaleArgs && handled) + return null; + MarkAsStale(); + return args; + } +} + +/// <summary> +/// Implement this interface if your page invokes the file open picker +/// API. +/// </summary> +interface IFileOpenPickerContinuable +{ + /// <summary> + /// This method is invoked when the file open picker returns picked + /// files + /// </summary> + /// <param name="args">Activated event args object that contains returned files from file open picker</param> + void ContinueFileOpenPicker(FileOpenPickerContinuationEventArgs args); +} + +/// <summary> +/// Implement this interface if your page invokes the file save picker +/// API +/// </summary> +interface IFileSavePickerContinuable +{ + /// <summary> + /// This method is invoked when the file save picker returns saved + /// files + /// </summary> + /// <param name="args">Activated event args object that contains returned file from file save picker</param> + void ContinueFileSavePicker(FileSavePickerContinuationEventArgs args); +} + +/// <summary> +/// Implement this interface if your page invokes the folder picker API +/// </summary> +interface IFolderPickerContinuable +{ + /// <summary> + /// This method is invoked when the folder picker returns the picked + /// folder + /// </summary> + /// <param name="args">Activated event args object that contains returned folder from folder picker</param> + void ContinueFolderPicker(FolderPickerContinuationEventArgs args); +} + +/// <summary> +/// Implement this interface if your page invokes the web authentication +/// broker +/// </summary> +interface IWebAuthenticationContinuable +{ + /// <summary> + /// This method is invoked when the web authentication broker returns + /// with the authentication result + /// </summary> + /// <param name="args">Activated event args object that contains returned authentication token</param> + void ContinueWebAuthentication(WebAuthenticationBrokerContinuationEventArgs args); +} + +#endif diff --git a/File360/Dialog.cs b/File360/Dialog.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Animation; + +namespace File360 +{ + public class Dialog : Grid + { + Storyboard OpenDialog = new Storyboard(); + Storyboard CloseDialog = new Storyboard(); + public Dialog() + { + Height = Window.Current.Bounds.Height; + Width = Window.Current.Bounds.Width; + Window.Current.SizeChanged += CurrentSizeChanged; + Background = new SolidColorBrush((Color)Application.Current.Resources["ContentDialogDimmingColor"]); + FadeInThemeAnimation fadeInAnimation = new FadeInThemeAnimation(); + + Storyboard.SetTarget(fadeInAnimation, this); + OpenDialog.Children.Add(fadeInAnimation); + + + FadeOutThemeAnimation fadeOutAnimation = new FadeOutThemeAnimation(); + + Storyboard.SetTarget(fadeOutAnimation, this); + CloseDialog.Children.Add(fadeOutAnimation); + + } + + public bool IsOpen + { + get + { + if (Visibility == Visibility.Collapsed) + return false; + else return true; + } + set + { + if (value == true) + { + Visibility = Visibility.Visible; + OpenDialog.Begin(); + } + else + { + + CloseDialog.Begin(); + CloseDialog.Completed += (s, f) => + { + Visibility = Visibility.Collapsed; + }; + } + } + } + + private void CurrentSizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) + { + Height = Window.Current.Bounds.Height; + Width = Window.Current.Bounds.Width; + this.UpdateLayout(); + } + } +} diff --git a/File360/DialogBox.xaml b/File360/DialogBox.xaml @@ -0,0 +1,51 @@ +<UserControl + x:Class="File360.DialogBox" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + RequestedTheme="Dark" FontFamily="Assets/Font/iconfont.ttf#iconfont"> + + <Grid x:Name="AlphaGrid"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <StackPanel x:Name="LayoutRoot" + MinHeight="100" + MaxHeight="200" + MinWidth="300" + MaxWidth="450" + Background="{StaticResource PhoneChromeBrush}" + HorizontalAlignment="Center" + VerticalAlignment="Center"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="2*"/> + <RowDefinition Height="50*"/> + <RowDefinition Height="2*"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="2*"/> + <ColumnDefinition Width="50*"/> + <ColumnDefinition Width="2*"/> + </Grid.ColumnDefinitions> + <StackPanel Grid.Row="1" Grid.Column="1" Margin="10,0"> + <TextBlock x:Name="heading" Foreground="{StaticResource PhoneForegroundBrush}" Text="ARE YOU SURE?" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold" HorizontalAlignment="Left"/> + <Rectangle MinHeight="10"/> + <TextBlock x:Name="dialogDetails" Grid.Row="1" TextWrapping="Wrap" Text="Random Text and Messages Detailed about this operation comes here." FontFamily="Segoe WP Light" TextAlignment="Center" FontSize="20"/> + <Rectangle MinHeight="15"/> + </StackPanel> + </Grid> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="4*"/> + <ColumnDefinition Width="10*"/> + </Grid.ColumnDefinitions> + <Button MinWidth="0" x:Name="leftButton" Style="{StaticResource DialogBoxButton}" Content="x" FontFamily="Assets/Font/iconfont.ttf#iconfont" Margin="0" VerticalAlignment="Stretch" BorderBrush="{x:Null}" Background="{ThemeResource PhoneBackgroundBrush}" Click="leftButton_Click" HorizontalAlignment="Stretch"/> + <Button x:Name="rightButton" Grid.Column="1" Background="{StaticResource PhoneAccentBrush}" BorderBrush="{x:Null}" HorizontalAlignment="Stretch" Style="{StaticResource DialogBoxButton}" Content="K" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="rightButton_Click" Foreground="White"/> + </Grid> + </StackPanel> + </Grid> +</UserControl> diff --git a/File360/DialogBox.xaml.cs b/File360/DialogBox.xaml.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.ComponentModel; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml; +using File360; +using Windows.UI.Xaml.Controls.Primitives; + +namespace File360 +{ + public sealed partial class DialogBox : UserControl + { + public DialogBox() + { + InitializeComponent(); + Loaded += DialogBox_Loaded; + heading.FontSize = Window.Current.Bounds.Width / 20; + dialogDetails.FontSize = Window.Current.Bounds.Width / 30; + leftButton.FontSize = Window.Current.Bounds.Width / 35; + rightButton.FontSize = Window.Current.Bounds.Width / 35; + } + + void DialogBox_Loaded(object sender, RoutedEventArgs e) + { + + } + public string HeadingText + { + get { return heading.Text; } + set { heading.Text = value; } + } + public string ContentText + { + get { return dialogDetails.Text; } + set { dialogDetails.Text = value; } + } + public string LeftButtonContent + { + get { return leftButton.Content.ToString(); } + set { leftButton.Content = value; } + } + public string RightButtonContent + { + get { return rightButton.Content.ToString(); } + set { rightButton.Content = value; } + } + public RoutedEventHandler LeftButtonHandler + { + get { return leftButton_Click; } + set { leftButton.Click += value; } + } + + private void rightButton_Click(object sender, RoutedEventArgs e) + { + IsOpen = false; + } + + private void leftButton_Click(object sender, RoutedEventArgs e) + { + IsOpen = false; + } + public bool IsOpen + { + get + { + if (Height == 0) + { + return false; + } + else + { + return true; + } + } + set + { + if (value == true) + { + Height = Window.Current.Bounds.Height; + } + if (value == false) + { + Height = 0; + } + } + } + } +} diff --git a/File360/DownloadIndicator.xaml b/File360/DownloadIndicator.xaml @@ -0,0 +1,30 @@ +<Button + x:Class="File360.DownloadIndicator" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + HorizontalContentAlignment="Stretch"> + <Button.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Button.Background> + + <Grid Margin="0,7"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <TextBlock x:Name="FileName" Text="Vedhalam_avi.Xvid.Rip.mp4" FontSize="14.667" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" Margin="3,2,3,10" Foreground="White" HorizontalAlignment="Left"/> + <Grid Grid.Row="1"> + <TextBlock Text="3mb" Foreground="{ThemeResource PhoneAccentBrush}" FontSize="10.667" Margin="3,0,0,0"/> + <TextBlock HorizontalAlignment="Right" Foreground="{ThemeResource PhoneAccentBrush}" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" FontSize="10.667" VerticalAlignment="Center" Margin="0,0,3,0" TextLineBounds="TrimToBaseline" > + <Run Text="25.3"/> + <Run Text="kbps"/> + </TextBlock> + </Grid> + <ProgressBar x:Name="progBar" Value="75" Grid.Row="2" VerticalAlignment="Bottom" Margin="3,10,3,0"/> + </Grid> +</Button> diff --git a/File360/DownloadIndicator.xaml.cs b/File360/DownloadIndicator.xaml.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 + +namespace File360 +{ + public sealed partial class DownloadIndicator : Button + { + public DownloadIndicator() + { + this.InitializeComponent(); + //Width = (Window.Current.Bounds.Width * 2) / 3; + //Height = Window.Current.Bounds.Height / 10; + } + + public string ContentText + { + get { return FileName.Text; } + set { FileName.Text = value; } + } + public double ProgressBarValue + { + get { return progBar.Value; } + set { progBar.Value = value; } + } + public double DownSpeed + { + get { return progBar.Value; } + set { progBar.Value = value; } + } + //public SolidColorBrush Status + //{ + // get { return (SolidColorBrush)LayoutGrid.Background; } + // set { LayoutGrid.Background = value; } + //} + } +} diff --git a/File360/DrawerLayout.cs b/File360/DrawerLayout.cs @@ -0,0 +1,524 @@ +using System; +using System.Linq; +using System.Windows; +using Windows.Foundation; +using Windows.UI; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Animation; + +namespace File360 +{ + public class DrawerLayout : Grid + { + #region Globals and events + private readonly PropertyPath _translatePath = new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"); + private readonly PropertyPath _colorPath = new PropertyPath("(Grid.Background).(SolidColorBrush.Color)"); + + private readonly TranslateTransform _listFragmentTransform = new TranslateTransform(); + private readonly TranslateTransform _deltaTransform = new TranslateTransform(); + private const int MaxAlpha = 190; + + public delegate void DrawerEventHandler(object sender); + public event DrawerEventHandler DrawerOpened; + public event DrawerEventHandler DrawerClosed; + + private Storyboard _fadeInStoryboard; + private Storyboard _fadeOutStoryboard; + private Grid _listFragment; + private Grid _mainFragment; + private Grid _shadowFragment; + private double grabCornerLeft = 40; + #endregion + + #region Properties + + public bool IsDrawerOpen { get; set; } + private PropertyPath TranslatePath + { + get { return _translatePath; } + } + private PropertyPath ColorPath + { + get { return _colorPath; } + } + + #endregion + + #region Methods + + public DrawerLayout() + { + IsDrawerOpen = false; + } + + public void InitializeDrawerLayout() + { + if (Children == null) return; + if (Children.Count < 2) return; + + try + { + _mainFragment = Children.OfType<Grid>().ElementAt(1); + _listFragment = Children.OfType<Grid>().ElementAt(2); + } + catch (Exception) + { + //ShowStatus(ex.Message); + return; + } + + if (_mainFragment == null || _listFragment == null) return; + + _mainFragment.Name = "_mainFragment"; + _listFragment.Name = "_listFragment"; + + // _mainFragment + _mainFragment.HorizontalAlignment = HorizontalAlignment.Left; + _mainFragment.VerticalAlignment = VerticalAlignment.Stretch; + + // Render transform _listFragment + _listFragment.HorizontalAlignment = HorizontalAlignment.Left; + _listFragment.VerticalAlignment = VerticalAlignment.Stretch; + _listFragment.Width = Window.Current.Bounds.Width > Window.Current.Bounds.Height ? (Window.Current.Bounds.Height * 2) / 3 : (Window.Current.Bounds.Width * 2) / 3; + if (_listFragment.Background == null) _listFragment.Background = new SolidColorBrush(Color.FromArgb(40, 46, 46, 46)); + + var animatedTranslateTransform = new TranslateTransform { X = -_listFragment.Width - 200, Y = 0 }; + + _listFragment.RenderTransform = animatedTranslateTransform; + _listFragment.RenderTransformOrigin = new Point(0.5, 0.5); + + _listFragment.UpdateLayout(); + + + // Create a shadow element + _shadowFragment = new Grid + { + Name = "_shadowFragment", + Background = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)), + HorizontalAlignment = HorizontalAlignment.Stretch, + VerticalAlignment = VerticalAlignment.Stretch, + Visibility = Visibility.Collapsed + }; + + // Set ZIndexes + Canvas.SetZIndex(_shadowFragment, 49); + Canvas.SetZIndex(_listFragment, 51); + Children.Add(_shadowFragment); + + // Create a new fadeIn animation storyboard + _fadeInStoryboard = new Storyboard(); + + // New double animation + var doubleAnimation1 = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = 0 + }; + + Storyboard.SetTarget(doubleAnimation1, _listFragment); + Storyboard.SetTargetProperty(doubleAnimation1, TranslatePath.Path); + _fadeInStoryboard.Children.Add(doubleAnimation1); + + // New color animation for _shadowFragment + var colorAnimation1 = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(190, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation1, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation1, ColorPath.Path); + _fadeInStoryboard.Children.Add(colorAnimation1); + + // Create a new fadeOut animation storyboard + _fadeOutStoryboard = new Storyboard(); + + // New double animation + var doubleAnimation2 = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = -_listFragment.Width - 200 + }; + + Storyboard.SetTarget(doubleAnimation2, _listFragment); + Storyboard.SetTargetProperty(doubleAnimation2, TranslatePath.Path); + _fadeOutStoryboard.Children.Add(doubleAnimation2); + + // New color animation for _shadowFragment + var colorAnimation2 = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(0, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation2, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation2, ColorPath.Path); + _fadeOutStoryboard.Children.Add(colorAnimation2); + + + _mainFragment.ManipulationMode = ManipulationModes.TranslateX; + _mainFragment.ManipulationStarted += mainFragment_ManipulationStarted; + + _listFragment.ManipulationMode = ManipulationModes.TranslateX; + _listFragment.ManipulationStarted += listFragment_ManipulationStarted; + + _shadowFragment.ManipulationMode = ManipulationModes.TranslateX; + _shadowFragment.ManipulationStarted += shadowFragment_ManipulationStarted; + + _shadowFragment.Tapped += shadowFragment_Tapped; + + } + + + public void OpenDrawer() + { + if (_fadeInStoryboard == null || _mainFragment == null || _listFragment == null) return; + _shadowFragment.Visibility = Visibility.Visible; + _shadowFragment.IsHitTestVisible = true; + _fadeInStoryboard.Begin(); + IsDrawerOpen = true; + + if (DrawerOpened != null) + DrawerOpened(this); + } + public void CloseDrawer() + { + if (_fadeOutStoryboard == null || _mainFragment == null || _listFragment == null) return; + _fadeOutStoryboard.Begin(); + _fadeOutStoryboard.Completed += fadeOutStoryboard_Completed; + IsDrawerOpen = false; + + if (DrawerClosed != null) + DrawerClosed(this); + } + private void shadow_Completed(object sender, object e) + { + _shadowFragment.IsHitTestVisible = false; + _shadowFragment.Visibility = Visibility.Collapsed; + IsDrawerOpen = false; + + // raise close event + if (DrawerClosed != null) DrawerClosed(this); + } + private void fadeOutStoryboard_Completed(object sender, object e) + { + _shadowFragment.Visibility = Visibility.Collapsed; + IsDrawerOpen = false; + if (DrawerClosed != null) DrawerClosed(this); + } + private void MoveListFragment(double left, Color color) + { + var s = new Storyboard(); + + var doubleAnimation = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = left + }; + + Storyboard.SetTarget(doubleAnimation, _listFragment); + Storyboard.SetTargetProperty(doubleAnimation, TranslatePath.Path); + s.Children.Add(doubleAnimation); + + var colorAnimation = new ColorAnimation { Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), To = color }; + + Storyboard.SetTarget(colorAnimation, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation, ColorPath.Path); + s.Children.Add(colorAnimation); + + s.Begin(); + } + private void FadeShadowFragment(double left) + { + // Show shadow fragment + _shadowFragment.Background = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)); + _shadowFragment.Visibility = Visibility.Visible; + + // Set bg color based on current _listFragment position. + var maxLeft = _listFragment.ActualWidth; + var currentLeft = maxLeft - left; + + var temp = Convert.ToInt32((currentLeft / maxLeft) * MaxAlpha); + + // Limit temp variable to 190 to avoid OverflowException + if (temp > MaxAlpha) temp = MaxAlpha; + + byte alphaColorIndex; + try + { + alphaColorIndex = Convert.ToByte(MaxAlpha - temp); + } + catch + { + alphaColorIndex = 0; + } + + _shadowFragment.Background = new SolidColorBrush(Color.FromArgb(alphaColorIndex, 0, 0, 0)); + } + + #endregion + + + #region Main fragment manipulation events + + private void mainFragment_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) + { + // If the user has the first touch on the left side of canvas, that means he's trying to swipe the drawer + if (e.Position.X <= grabCornerLeft) + { + //Manipulation can be allowed + _mainFragment.ManipulationDelta += mainFragment_ManipulationDelta; + _mainFragment.ManipulationCompleted += mainFragment_ManipulationCompleted; + } + } + private void mainFragment_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) + { + if (Math.Abs(e.Cumulative.Translation.X) > 0 && e.Cumulative.Translation.X <= _listFragment.Width) + { + _deltaTransform.X = -_listFragment.Width + e.Cumulative.Translation.X; + _listFragment.RenderTransform = _deltaTransform; + FadeShadowFragment(e.Cumulative.Translation.X); + //ShowStatus(e.Cumulative.Translation.X.ToString()); + } + //if () + //{ + // //mainFragment_ManipulationCompleted(this, null); + // return; + //} + + } + private void mainFragment_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) + { + // Get left of _listFragment + var transform = (TranslateTransform)_listFragment.RenderTransform; + if (transform == null) return; + var left = transform.X; + + // Set snap divider to 1/20 of _mainFragment width + var snapLimit = _mainFragment.ActualWidth / 20; + + // Get init position of _listFragment + var initialPosition = -_listFragment.Width; + + // If current left coordinate is smaller than snap limit, close drawer + if (Math.Abs(initialPosition - left) < snapLimit + 50) + { + MoveListFragment(initialPosition, Color.FromArgb(0, 0, 0, 0)); + _shadowFragment.Visibility = Visibility.Collapsed; + _shadowFragment.IsHitTestVisible = false; + + _mainFragment.ManipulationDelta -= mainFragment_ManipulationDelta; + _mainFragment.ManipulationCompleted -= mainFragment_ManipulationCompleted; + IsDrawerOpen = false; + + // raise DrawerClosed event + if (DrawerClosed != null) DrawerClosed(this); + } + // else open drawer + else if (Math.Abs(initialPosition - left) > snapLimit) + { + // move drawer to zero + MoveListFragment(0, Color.FromArgb(190, 0, 0, 0)); + _shadowFragment.Visibility = Visibility.Visible; + _shadowFragment.IsHitTestVisible = true; + _mainFragment.ManipulationDelta -= mainFragment_ManipulationDelta; + _mainFragment.ManipulationCompleted -= mainFragment_ManipulationCompleted; + IsDrawerOpen = true; + + // raise DrawerClosed event + if (DrawerOpened != null) DrawerOpened(this); + } + } + + #endregion + + #region List Fragment manipulation events + + private void listFragment_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) + { + var listWidth = _listFragment.Width; + if (e.Position.X >= listWidth) return; + _listFragment.ManipulationDelta += listFragment_ManipulationDelta; + _listFragment.ManipulationCompleted += listFragment_ManipulationCompleted; + } + private void listFragment_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) + { + if (e.Cumulative.Translation.X <= -_listFragment.Width) + { + listFragment_ManipulationCompleted(this, null); + return; + } + else if (_listFragmentTransform.X >= 0 && e.Delta.Translation.X > 0) + { + listFragment_ManipulationCompleted(this, null); + return; + } + _listFragmentTransform.X = e.Cumulative.Translation.X; + _listFragment.RenderTransform = _listFragmentTransform; + FadeShadowFragment(e.Cumulative.Translation.X + _listFragment.Width); + } + private void listFragment_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) + { + // Get left of _listFragment + var transform = (TranslateTransform)_listFragment.RenderTransform; + if (transform == null) return; + var left = transform.X; + + // Set snap divider to 1/4 of _mainFragment height + var snapLimit = _mainFragment.ActualHeight / 4; + + // Get init position of _listFragment + const int initialPosition = 0; + + // If current left coordinate is smaller than snap limit, close drawer + if (Math.Abs(initialPosition - left) > snapLimit) + { + MoveListFragment(-_listFragment.Width, Color.FromArgb(0, 0, 0, 0)); + _shadowFragment.Visibility = Visibility.Collapsed; + _shadowFragment.IsHitTestVisible = false; + _shadowFragment.ManipulationDelta -= listFragment_ManipulationDelta; + + _listFragment.ManipulationDelta -= listFragment_ManipulationDelta; + _listFragment.ManipulationCompleted -= listFragment_ManipulationCompleted; + IsDrawerOpen = false; + + // raise DrawerClosed event + if (DrawerClosed != null) DrawerClosed(this); + } + // else open drawer + else if (Math.Abs(initialPosition - left) < snapLimit) + { + // move drawer to zero + MoveListFragment(0, Color.FromArgb(190, 0, 0, 0)); + _shadowFragment.Visibility = Visibility.Visible; + _shadowFragment.IsHitTestVisible = true; + _shadowFragment.ManipulationDelta += listFragment_ManipulationDelta; + + _listFragment.ManipulationDelta -= listFragment_ManipulationDelta; + _listFragment.ManipulationCompleted -= listFragment_ManipulationCompleted; + IsDrawerOpen = true; + + // raise Drawer_Open event + if (DrawerOpened != null) DrawerOpened(this); + } + } + + #endregion + #region Shadow fragment manipulation events + private void shadowFragment_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) + { + if (e.Cumulative.Translation.X > 0) return; + _shadowFragment.ManipulationDelta += _shadowFragment_ManipulationDelta; + _shadowFragment.ManipulationCompleted += _shadowFragment_ManipulationCompleted; + } + + private void _shadowFragment_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) + { + if (e.Cumulative.Translation.X <= -_listFragment.Width) + { + _shadowFragment_ManipulationCompleted(this, null); + return; + } + else if (_listFragmentTransform.X >= 0 && e.Delta.Translation.X > 0) + { + _shadowFragment_ManipulationCompleted(this, null); + return; + } + _listFragmentTransform.X = e.Cumulative.Translation.X; + _listFragment.RenderTransform = _listFragmentTransform; + FadeShadowFragment(e.Cumulative.Translation.X + _listFragment.Width); + + } + private void _shadowFragment_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) + { + // Get left of _listFragment + var transform = (TranslateTransform)_listFragment.RenderTransform; + if (transform == null) return; + var left = transform.X; + + // Set snap divider to 1/4 of _mainFragment height + var snapLimit = _mainFragment.ActualHeight / 4; + + // Get init position of _listFragment + const int initialPosition = 0; + + // If current left coordinate is smaller than snap limit, close drawer + if (Math.Abs(initialPosition - left) > snapLimit) + { + MoveListFragment(-_listFragment.Width, Color.FromArgb(0, 0, 0, 0)); + + _shadowFragment.Visibility = Visibility.Collapsed; + _shadowFragment.IsHitTestVisible = false; + _shadowFragment.ManipulationDelta -= _shadowFragment_ManipulationDelta; + _shadowFragment.ManipulationCompleted -= _shadowFragment_ManipulationCompleted; + + _listFragment.ManipulationDelta -= listFragment_ManipulationDelta; + _listFragment.ManipulationCompleted -= listFragment_ManipulationCompleted; + + IsDrawerOpen = false; + + // raise DrawerClosed event + if (DrawerClosed != null) DrawerClosed(this); + } + // else open drawer + else if (Math.Abs(initialPosition - left) < snapLimit) + { + // move drawer to zero + MoveListFragment(0, Color.FromArgb(190, 0, 0, 0)); + + _shadowFragment.Visibility = Visibility.Visible; + _shadowFragment.IsHitTestVisible = true; + _shadowFragment.ManipulationDelta -= _shadowFragment_ManipulationDelta; + _shadowFragment.ManipulationCompleted -= _shadowFragment_ManipulationCompleted; + + _listFragment.ManipulationDelta -= listFragment_ManipulationDelta; + _listFragment.ManipulationCompleted -= listFragment_ManipulationCompleted; + + IsDrawerOpen = true; + + // raise Drawer_Open event + if (DrawerOpened != null) DrawerOpened(this); + } + } + + private void shadowFragment_Tapped(object sender, TappedRoutedEventArgs e) + { + var shadow = new Storyboard(); + + var doubleAnimation = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = -_listFragment.Width - 200 + }; + + Storyboard.SetTarget(doubleAnimation, _listFragment); + Storyboard.SetTargetProperty(doubleAnimation, TranslatePath.Path); + shadow.Children.Add(doubleAnimation); + + var colorAnimation = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(0, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation, ColorPath.Path); + shadow.Children.Add(colorAnimation); + + shadow.Completed += shadow_Completed; + shadow.Begin(); + _shadowFragment.IsHitTestVisible = false; + } + #endregion + //#region ShowStatus + //public void ShowStatus(string info) + //{ + // rootPage.NotifyUser(info); + //} + //#endregion + + } +} diff --git a/File360/FTPPage.xaml b/File360/FTPPage.xaml @@ -0,0 +1,57 @@ +<Page + x:Class="File360.FTPPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + <Page.Transitions> + <TransitionCollection> + <ContentThemeTransition HorizontalOffset="0"/> + </TransitionCollection> + </Page.Transitions> + + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Button Style="{StaticResource DefaultButton}" HorizontalAlignment="Left" VerticalAlignment="Stretch" HorizontalContentAlignment="Left" Opacity="0.95"> + <Button.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Button.Background> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" TextAlignment="Left" FontSize="24" Text="g" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" FontWeight="Thin" FontStretch="UltraCondensed"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + <TextBlock HorizontalAlignment="Left" + TextWrapping="Wrap" + Text="ftp" + VerticalAlignment="Center" + FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontWeight="Normal" Margin="5,0,0,0" TextLineBounds="TrimToCapHeight" FontSize="32"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </Button> + <ToggleSwitch HorizontalAlignment="Right" Margin="10,0,0,0"/> + <ScrollViewer Grid.Row="1"> + <ScrollViewer.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.3"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Offset="0.02"/> + </LinearGradientBrush> + </ScrollViewer.Background> + <StackPanel Margin="10,0"> + <TextBlock Text="users connected" Style="{StaticResource GroupHeaderTextBlockStyle}"/> + <GridView Height="400"/> + <TextBlock Text="address" Style="{StaticResource GroupHeaderTextBlockStyle}"/> + <TextBlock Text="192.168.1.100" Style="{StaticResource ListViewItemTextBlockStyle}"/> + </StackPanel> + </ScrollViewer> + </Grid> +</Page> diff --git a/File360/FTPPage.xaml.cs b/File360/FTPPage.xaml.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class FTPPage : Page + { + public FTPPage() + { + this.InitializeComponent(); + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + } + } +} diff --git a/File360/File.cs b/File360/File.cs @@ -0,0 +1,13 @@ + +public class File { + public string Name { set; get; } + public string Thumbnail { set; get; } + public boolean IsVisibile {set; get; } + + public File(string name, Thumbnail thumbnail, boolean isVisible) + { + this.Name = name; + this.Background = thumbnail; + this.IsVisibile = isVisible; + } +} +\ No newline at end of file diff --git a/File360/File360.csproj b/File360/File360.csproj @@ -1,179 +1,135 @@ <?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> - <ProductVersion>10.0.20506</ProductVersion> - <SchemaVersion>2.0</SchemaVersion> - <ProjectGuid>{6DB737B7-6D8E-4901-86A4-3110A717C72F}</ProjectGuid> - <ProjectTypeGuids>{C089C8C0-30E0-4E22-80C0-CE093F111A43};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> - <OutputType>Library</OutputType> + <ProjectGuid>{08490F1C-404B-4B58-B97E-C23BB7A1B31D}</ProjectGuid> + <OutputType>AppContainerExe</OutputType> <AppDesignerFolder>Properties</AppDesignerFolder> <RootNamespace>File360</RootNamespace> <AssemblyName>File360</AssemblyName> - <TargetFrameworkIdentifier>WindowsPhone</TargetFrameworkIdentifier> - <TargetFrameworkVersion>v8.0</TargetFrameworkVersion> - <SilverlightVersion> - </SilverlightVersion> - <SilverlightApplication>true</SilverlightApplication> - <SupportedCultures>ta</SupportedCultures> - <XapOutputs>true</XapOutputs> - <GenerateSilverlightManifest>true</GenerateSilverlightManifest> - <XapFilename>File360_$(Configuration)_$(Platform).xap</XapFilename> - <SilverlightManifestTemplate>Properties\AppManifest.xml</SilverlightManifestTemplate> - <SilverlightAppEntry>File360.App</SilverlightAppEntry> - <ValidateXaml>true</ValidateXaml> - <MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion> - <ThrowErrorsInValidation>true</ThrowErrorsInValidation> - <ExpressionBlendVersion>12.0.50716.0</ExpressionBlendVersion> - <TargetFrameworkProfile /> <DefaultLanguage>en-US</DefaultLanguage> + <TargetPlatformVersion>8.1</TargetPlatformVersion> + <MinimumVisualStudioVersion>12</MinimumVisualStudioVersion> + <FileAlignment>512</FileAlignment> + <ProjectTypeGuids>{76F1466A-8B6D-4E39-A767-685A06062A39};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> + <AppxBundle>Always</AppxBundle> + <ExpressionBlendVersion>12.0.60617.0</ExpressionBlendVersion> + <AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision> + <AppxBundlePlatforms>neutral</AppxBundlePlatforms> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> <DebugSymbols>true</DebugSymbols> <DebugType>full</DebugType> <Optimize>false</Optimize> - <OutputPath>Bin\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> <DebugType>pdbonly</DebugType> <Optimize>true</Optimize> - <OutputPath>Bin\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> <ErrorReport>prompt</ErrorReport> <WarningLevel>4</WarningLevel> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' "> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'"> <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\ARM\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> + <NoWarn>;2008</NoWarn> <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>Bin\x86\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <PlatformTarget>ARM</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> <ErrorReport>prompt</ErrorReport> + <Prefer32Bit>true</Prefer32Bit> <WarningLevel>4</WarningLevel> - <PlatformTarget /> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' "> - <DebugType>pdbonly</DebugType> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'"> + <OutputPath>bin\ARM\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> <Optimize>true</Optimize> - <OutputPath>Bin\x86\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <NoWarn>;2008</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>ARM</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <PlatformTarget /> + <Prefer32Bit>true</Prefer32Bit> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ARM' "> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'"> <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\x86\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> + <NoWarn>;2008</NoWarn> <DebugType>full</DebugType> - <Optimize>false</Optimize> - <OutputPath>Bin\ARM\Debug</OutputPath> - <DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <PlatformTarget>x86</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <PlatformTarget /> + <Prefer32Bit>true</Prefer32Bit> </PropertyGroup> - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ARM' "> - <DebugType>pdbonly</DebugType> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'"> + <OutputPath>bin\x86\Release\</OutputPath> + <DefineConstants>TRACE;NETFX_CORE;WINDOWS_PHONE_APP</DefineConstants> <Optimize>true</Optimize> - <OutputPath>Bin\ARM\Release</OutputPath> - <DefineConstants>TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants> - <NoStdLib>true</NoStdLib> - <NoConfig>true</NoConfig> + <NoWarn>;2008</NoWarn> + <DebugType>pdbonly</DebugType> + <PlatformTarget>x86</PlatformTarget> + <UseVSHostingProcess>false</UseVSHostingProcess> <ErrorReport>prompt</ErrorReport> - <WarningLevel>4</WarningLevel> - <PlatformTarget /> + <Prefer32Bit>true</Prefer32Bit> </PropertyGroup> <ItemGroup> - <Compile Include="AboutPage.xaml.cs"> - <DependentUpon>AboutPage.xaml</DependentUpon> - </Compile> - <Compile Include="AlphaKeyGroup.cs" /> - <Compile Include="App.xaml.cs"> - <DependentUpon>App.xaml</DependentUpon> - </Compile> - <Compile Include="musiclist.cs" /> - <Compile Include="PersonalizationPage.xaml.cs"> - <DependentUpon>PersonalizationPage.xaml</DependentUpon> - </Compile> - <Compile Include="picturelist.cs" /> - <Compile Include="SkydrivePage.xaml.cs"> - <DependentUpon>SkydrivePage.xaml</DependentUpon> - </Compile> - <Compile Include="EBookReader.xaml.cs"> - <DependentUpon>EBookReader.xaml</DependentUpon> - </Compile> - <Compile Include="LinqToVisualTree.cs" /> - <Compile Include="LocalizedStrings.cs" /> - <Compile Include="MainPage.xaml.cs"> - <DependentUpon>MainPage.xaml</DependentUpon> - </Compile> - <Compile Include="MetroInMotion.cs" /> - <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Resources\AppResources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>AppResources.resx</DependentUpon> - </Compile> - <Compile Include="sdlist.cs" /> - <Compile Include="SecurityPage.xaml.cs"> - <DependentUpon>SecurityPage.xaml</DependentUpon> - </Compile> - <Compile Include="settinglist.cs" /> - <Compile Include="SettingsPage.xaml.cs"> - <DependentUpon>SettingsPage.xaml</DependentUpon> - </Compile> - <Compile Include="TiltEffect.cs" /> - <Compile Include="UriMapper.cs" /> - <Compile Include="URISchemeExtensionsLandingPage.xaml.cs"> - <DependentUpon>URISchemeExtensionsLandingPage.xaml</DependentUpon> - </Compile> - <Compile Include="vaultlist.cs" /> - <Compile Include="VaultPage.xaml.cs"> - <DependentUpon>VaultPage.xaml</DependentUpon> - </Compile> - <Compile Include="VideoPlayer.xaml.cs"> - <DependentUpon>VideoPlayer.xaml</DependentUpon> - </Compile> - </ItemGroup> - <ItemGroup> - <ApplicationDefinition Include="App.xaml"> + <!-- A reference to the entire .Net Framework and Windows SDK are automatically included --> + <Page Include="BlankPage.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> - </ApplicationDefinition> - <Page Include="AboutPage.xaml"> + </Page> + <Page Include="BottomBarItem.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="PersonalizationPage.xaml"> + <Page Include="CardDetails.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="SkydrivePage.xaml"> + <Page Include="ColorPicker.xaml"> + <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="DialogBox.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </Page> + <Page Include="DownloadIndicator.xaml"> <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="FTPPage.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="EBookReader.xaml"> + <Page Include="GeneralSettings.xaml"> + <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="HelpPage.xaml"> <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> </Page> <Page Include="MainPage.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="SecurityPage.xaml"> + <Page Include="MarqueeText.xaml"> + <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> + </Page> + <Page Include="MessageBox.xaml"> <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> @@ -181,154 +137,200 @@ <SubType>Designer</SubType> <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="URISchemeExtensionsLandingPage.xaml"> + <Page Include="SideBarMenuButton.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page> <Page Include="VaultPage.xaml"> - <Generator>MSBuild:MarkupCompilePass1</Generator> <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> </Page> - <Page Include="VideoPlayer.xaml"> - <Generator>MSBuild:MarkupCompilePass1</Generator> + <Page Include="VideoPage.xaml"> <SubType>Designer</SubType> + <Generator>MSBuild:Compile</Generator> </Page> </ItemGroup> <ItemGroup> - <AppxManifest Include="Package.appxmanifest"> - <SubType>Designer</SubType> - </AppxManifest> - <None Include="packages.config" /> - <None Include="Properties\AppManifest.xml" /> - <None Include="Properties\WMAppManifest.xml"> - <SubType>Designer</SubType> - </None> + <Compile Include="Addresser.cs" /> + <Compile Include="App.xaml.cs"> + <DependentUpon>App.xaml</DependentUpon> + </Compile> + <Compile Include="BlankPage.xaml.cs"> + <DependentUpon>BlankPage.xaml</DependentUpon> + </Compile> + <Compile Include="BoolToVisibilityConverter.cs" /> + <Compile Include="CardDetails.xaml.cs"> + <DependentUpon>CardDetails.xaml</DependentUpon> + </Compile> + <Compile Include="ColorSampler.cs" /> + <Compile Include="Common\NavigationHelper.cs" /> + <Compile Include="Common\ObservableDictionary.cs" /> + <Compile Include="Common\RelayCommand.cs" /> + <Compile Include="Common\SuspensionManager.cs" /> + <Compile Include="Dialog.cs" /> + <Compile Include="DownloadIndicator.xaml.cs"> + <DependentUpon>DownloadIndicator.xaml</DependentUpon> + </Compile> + <Compile Include="FTPPage.xaml.cs"> + <DependentUpon>FTPPage.xaml</DependentUpon> + </Compile> + <Compile Include="MessageBox.xaml.cs"> + <DependentUpon>MessageBox.xaml</DependentUpon> + </Compile> + <Compile Include="MusicList.cs" /> + <Compile Include="PictureList.cs" /> + <Compile Include="SelectorItemEx.cs" /> + <Compile Include="Utility\Helper\NativeOperationsHelper.cs" /> + <Compile Include="Utility\Helper\SecurityAccessDeniedException.cs" /> + <Compile Include="HelpPage.xaml.cs"> + <DependentUpon>HelpPage.xaml</DependentUpon> + </Compile> + <Compile Include="IBackgroundAudioUpdater.cs" /> + <Compile Include="BottomBarItem.xaml.cs"> + <DependentUpon>BottomBarItem.xaml</DependentUpon> + </Compile> + <Compile Include="ColorList.cs" /> + <Compile Include="ColorPicker.xaml.cs"> + <DependentUpon>ColorPicker.xaml</DependentUpon> + </Compile> + <Compile Include="ContinuationManager.cs" /> + <Compile Include="DialogBox.xaml.cs"> + <DependentUpon>DialogBox.xaml</DependentUpon> + </Compile> + <Compile Include="DrawerLayout.cs" /> + <Compile Include="GeneralSettings.xaml.cs"> + <DependentUpon>GeneralSettings.xaml</DependentUpon> + </Compile> + <Compile Include="IntToNegativeIntConverter.cs" /> + <Compile Include="MainPage.xaml.cs"> + <DependentUpon>MainPage.xaml</DependentUpon> + </Compile> + <Compile Include="MarqueeText.xaml.cs"> + <DependentUpon>MarqueeText.xaml</DependentUpon> + </Compile> + <Compile Include="OccupyStack.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="sdlist.cs" /> + <Compile Include="SettingsPage.xaml.cs"> + <DependentUpon>SettingsPage.xaml</DependentUpon> + </Compile> + <Compile Include="Shade.cs" /> + <Compile Include="SideBarMenuButton.xaml.cs"> + <DependentUpon>SideBarMenuButton.xaml</DependentUpon> + </Compile> + <Compile Include="VaultPage.xaml.cs"> + <DependentUpon>VaultPage.xaml</DependentUpon> + </Compile> + <Compile Include="VideoList.cs" /> + <Compile Include="VideoPage.xaml.cs"> + <DependentUpon>VideoPage.xaml</DependentUpon> + </Compile> </ItemGroup> <ItemGroup> - <Content Include="123.wmv" /> - <Content Include="AMI.png" /> - <Content Include="Assets\BadgeLogo.png" /> - <Content Include="Assets\Logo.png" /> - <Content Include="Assets\SplashScreen.png" /> - <Content Include="Assets\SquareTile150x150.png" /> - <Content Include="Assets\SquareTile71x71.png" /> - <Content Include="Assets\StoreLogo.png" /> - <Content Include="Assets\WideLogo.png" /> - <Content Include="Resources\Assets\Images\audio.png" /> - <Content Include="Resources\Assets\Images\cover_art.jpg" /> - <Content Include="Resources\Assets\Images\cover_art.png" /> - <Content Include="Resources\Assets\Images\documents.png" /> - <Content Include="Resources\Assets\Images\download.png" /> - <Content Include="Resources\Assets\Images\greySearch.png" /> - <Content Include="Resources\Assets\Images\Hamburger_alpha.png" /> - <Content Include="Resources\Assets\Images\headphone.png" /> - <Content Include="Resources\Assets\Images\MusicBar.png" /> - <Content Include="Resources\Assets\Images\phone.png" /> - <Content Include="Resources\Assets\Images\sdcard.png" /> - <Content Include="Resources\Assets\Images\Search.png" /> - <Content Include="Resources\Assets\Images\skydrive.png" /> - <Content Include="Resources\Assets\Images\Hamburger.png" /> - <Content Include="Resources\Assets\File_Types\7z.png" /> - <Content Include="Resources\Assets\File_Types\avi.png" /> - <Content Include="Resources\Assets\File_Types\csv.png" /> - <Content Include="Resources\Assets\File_Types\mkv.png" /> - <Content Include="Resources\Assets\File_Types\pdf.png" /> - <Content Include="Resources\Assets\AlignmentGrid.png" /> - <Content Include="Resources\Assets\ApplicationIcon.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\File_Types\rar.png" /> - <Content Include="Resources\Assets\Images\flatIcon.PNG" /> - <Content Include="Resources\Assets\Images\add.png" /> - <Content Include="Resources\Assets\Images\folder.png" /> - <Content Include="Resources\Assets\Images\list.png" /> - <Content Include="Resources\Assets\Images\mute.png" /> - <Content Include="Resources\Assets\Images\pause.png" /> - <Content Include="Resources\Assets\Images\settings_dark.png"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Images\settings_light.png"> - <CopyToOutputDirectory>Always</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Images\share.png" /> - <Content Include="Resources\Assets\Images\whiteSearch.png" /> - <Content Include="Resources\Assets\Wallpaper\bg1.jpg" /> - <Content Include="Resources\Assets\Wallpaper\bg2.jpg" /> - <Content Include="Resources\Assets\Images\transport.ff.png" /> - <Content Include="Resources\Assets\Images\user.png" /> - <Content Include="Resources\Assets\Images\video.png" /> - <Content Include="Resources\Assets\Images\back.png" /> - <Content Include="Toolkit.Content\home.png" /> - <Resource Include="greyhome.png" /> - <Resource Include="Resources\Assets\Images\next.png" /> - <Resource Include="Resources\Assets\Images\onedrive.png" /> - <Resource Include="Resources\Assets\Images\play.png" /> - <Resource Include="Resources\Assets\Images\previous.png" /> - <Resource Include="Resources\Assets\Images\slider_alpha.png" /> - <Resource Include="Resources\Assets\Images\transport.pause.png" /> - <Resource Include="Resources\Assets\Images\transport.play.png" /> - <Content Include="Resources\Assets\Images\transport.rew.png" /> - <Content Include="Resources\Assets\Tiles\FlipCycleTileLarge.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Tiles\FlipCycleTileMedium.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Tiles\FlipCycleTileSmall.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Tiles\IconicTileMediumLarge.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="Resources\Assets\Tiles\IconicTileSmall.png"> - <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> - </Content> - <Content Include="File360.Logo.Large.png" /> - <Content Include="File360.Logo.Medium.png" /> - <Content Include="File360.Logo.png" /> - <Content Include="File360.Logo.Small.png" /> - <Content Include="README_FIRST.txt" /> - <Content Include="Resources\Assets\Images\settings.png"> + <Content Include="Assets\ARAM.png" /> + <Content Include="Assets\Fine-Halftone-Screen-Small.png" /> + <Content Include="Assets\innerShadow.png" /> + <Content Include="Assets\Maari-Tamil-2015-500x500.jpg" /> + <Content Include="Assets\mainDropShadow.png" /> + <Content Include="Assets\mainDropShadowTransparent.png" /> + <Content Include="Assets\main_drop_shadow_png 13-Dec-2007 09_42 31K.png" /> + <Content Include="Assets\nullMusicArt.jpg" /> + <Content Include="Assets\start3.png" /> + <Content Include="Assets\IMG-20150528-WA0003.jpg" /> + <Content Include="Assets\Logo.scale-240.png" /> + <Content Include="Assets\pic %281%29.jpg"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> - <Content Include="SplashScreenImage.jpg" /> - <Content Include="Resources\Assets\File_Types\svg.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Add.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Cancel.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Check.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Delete.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Select.png" /> - <Content Include="Toolkit.Content\ApplicationBar.Sort.png" /> - <Resource Include="Resources\Assets\Settings\ftp.png" /> - <Resource Include="whitehome.png" /> + <Content Include="Assets\pic %282%29.jpg" /> + <Content Include="Assets\pulse2.png" /> + <Content Include="Assets\SmallLogo.scale-240.png" /> + <Content Include="Assets\SplashScreen.scale-240.png" /> + <Content Include="Assets\Square71x71Logo.scale-240.png" /> + <Content Include="Assets\StoreLogo.scale-240.png" /> + <Content Include="Assets\url.png" /> + <Content Include="Assets\vertDrop.png" /> + <Content Include="Assets\WideLogo.scale-240.png" /> + <Content Include="Common\ReadMe.txt" /> + <Content Include="KernelBase.dll" /> + <Content Include="ReadMe.Coding4Fun.Toolkit.txt" /> + <Content Include="SharpCompress.dll" /> + <Content Include="StoreManifest.xml" /> + </ItemGroup> + <ItemGroup> + <ApplicationDefinition Include="App.xaml"> + <Generator>MSBuild:Compile</Generator> + <SubType>Designer</SubType> + </ApplicationDefinition> + </ItemGroup> + <ItemGroup> + <PRIResource Include="Strings\en-US\Resources.resw"> + <SubType>Designer</SubType> + </PRIResource> + </ItemGroup> + <ItemGroup> + <Folder Include="Assets\Font\FileTypes\" /> + <Folder Include="Assets\Font\UI\" /> + </ItemGroup> + <ItemGroup> + <Content Include="Assets\Font\Custom\Mohave.otf" /> + </ItemGroup> + <ItemGroup> + <Content Include="Assets\Font\Custom\Lobster 1.4.otf" /> </ItemGroup> <ItemGroup> - <EmbeddedResource Include="Resources\AppResources.resx"> - <Generator>PublicResXFileCodeGenerator</Generator> - <LastGenOutput>AppResources.Designer.cs</LastGenOutput> - </EmbeddedResource> - <EmbeddedResource Include="Resources\AppResources.ta.resx" /> + <Content Include="Assets\Font\settingsfont.ttf" /> </ItemGroup> <ItemGroup> - <Reference Include="Microsoft.Expression.Drawing" /> - <Reference Include="Microsoft.Expression.Interactions" /> - <Reference Include="Microsoft.Phone.Controls.Toolkit"> - <HintPath>..\packages\WPtoolkit.4.2013.08.16\lib\wp8\Microsoft.Phone.Controls.Toolkit.dll</HintPath> + <Reference Include="Coding4Fun.Toolkit, Version=2.0.8.0, Culture=neutral, PublicKeyToken=c5fd7b72b1a17ce4, processorArchitecture=MSIL"> + <HintPath>..\packages\Coding4Fun.Toolkit.Controls.2.1.7\lib\wpa81\Coding4Fun.Toolkit.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="Coding4Fun.Toolkit.Controls, Version=2.1.6.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\Coding4Fun.Toolkit.Controls.2.1.7\lib\wpa81\Coding4Fun.Toolkit.Controls.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="TagLib.Portable, Version=2.2.0.0, Culture=neutral, PublicKeyToken=db62eba44689b5b0, processorArchitecture=MSIL"> + <HintPath>..\packages\TagLib.Portable.1.0.3\lib\portable-net45+win+wpa81+wp8+MonoAndroid10+xamarinios10+MonoTouch10\TagLib.Portable.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="WinRTXamlToolkit, Version=1.8.1.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\packages\WinRTXamlToolkit.WindowsPhone.1.8.1.0\lib\wpa\WinRTXamlToolkit.dll</HintPath> + <Private>True</Private> + </Reference> + <Reference Include="WriteableBitmapEx.WinRT, Version=1.5.0.0, Culture=neutral, PublicKeyToken=50375ca6144f1c69, processorArchitecture=MSIL"> + <HintPath>..\packages\WriteableBitmapEx.1.5.0.0\lib\wpa81\WriteableBitmapEx.WinRT.dll</HintPath> + <Private>True</Private> </Reference> - <Reference Include="System.Windows.Interactivity" /> </ItemGroup> <ItemGroup> - <Folder Include="FileTypeAssociation\" /> - <Folder Include="GaussianBlur\" /> + <Content Include="Assets\Font\Custom\ClearSans-Light.ttf" /> + <Content Include="Assets\Font\Custom\ClearSans-Thin.ttf" /> + <AppxManifest Include="Package.appxmanifest"> + <SubType>Designer</SubType> + </AppxManifest> + <Content Include="Assets\Font\Custom\Raleway-Light.ttf" /> + <Content Include="Assets\Font\Custom\Raleway-Thin.ttf" /> + <Content Include="Assets\Font\Custom\Raleway-SemiBold.ttf" /> + <Content Include="Assets\Font\Custom\Roboto-Thin.ttf" /> + <Content Include="Assets\Font\Custom\HelveticaNeue-Thin.otf" /> + <Content Include="Assets\Font\filetypes.ttf" /> + <Content Include="Assets\Font\iconfont.ttf" /> + <None Include="packages.config" /> + <None Include="File.cs" /> + <None Include="FileLister.cs" /> </ItemGroup> - <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).$(TargetFrameworkVersion).Overrides.targets" /> - <Import Project="$(MSBuildExtensionsPath)\Microsoft\$(TargetFrameworkIdentifier)\$(TargetFrameworkVersion)\Microsoft.$(TargetFrameworkIdentifier).CSharp.targets" /> - <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '12.0' "> + <VisualStudioVersion>12.0</VisualStudioVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(TargetPlatformIdentifier)' == '' "> + <TargetPlatformIdentifier>WindowsPhoneApp</TargetPlatformIdentifier> + </PropertyGroup> + <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> </Target> <Target Name="AfterBuild"> </Target> --> - <ProjectExtensions /> </Project> \ No newline at end of file diff --git a/File360/File360.csproj.user b/File360/File360.csproj.user @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> + <DeviceId>30F105C9-681E-420b-A277-7C086EAD8A4E</DeviceId> + <BackgroundTaskDebugEngines>{2E36F1D4-B23C-435D-AB41-18E608940038}</BackgroundTaskDebugEngines> + <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging> + <DebugEngines>{2E36F1D4-B23C-435D-AB41-18E608940038}</DebugEngines> + </PropertyGroup> + <PropertyGroup> + <ProjectView>ShowAllFiles</ProjectView> + <AppxPackageIsForStore>False</AppxPackageIsForStore> + <AppxShowAllApps>False</AppxShowAllApps> + <AppxBuildConfigurationSelection>neutral</AppxBuildConfigurationSelection> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'"> + <DeviceId>30F105C9-681E-420b-A277-7C086EAD8A4E</DeviceId> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'"> + <DeviceId>30F105C9-681E-420b-A277-7C086EAD8A4E</DeviceId> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> + <DeviceId>30F105C9-681E-420b-A277-7C086EAD8A4E</DeviceId> + </PropertyGroup> +</Project> +\ No newline at end of file diff --git a/File360/FileLister.cs b/File360/FileLister.cs @@ -0,0 +1,309 @@ +namespace File360 { + /* + * FileLister provides the UI component for + * interacting with files + */ + public class sealed FileLister { + /* + * filePath setter updates the UI + */ + public string filePath {get; set;} + public FileLister(){ + //SDLoad.Begin(); + //PhoneLoad.Begin(); + GetSDRoot(); + //gridScrollViewer = SDGridView.GetFirstLogicalChildByType<ScrollViewer>(false); + //gridScrollViewer.VerticalScrollMode = ScrollMode.Auto; + //LoadMemoryData(); + //SettingsTab.Height = Window.Current.Bounds.Width * 2 / 3; + //PasteFlipView.SelectionChanged += PasteBarSelectionChanged; + //AppearancePanel.Begin(); + //SubFrame.ContentTransitions = new TransitionCollection { new PaneThemeTransition { Edge = EdgeTransitionLocation.Bottom } }; + } + + private async void GetSDRoot() + { + if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FolderTokenSettingsKey")) + { + string token = (string)ApplicationData.Current.LocalSettings.Values["FolderTokenSettingsKey"]; + // if we do, use it to get the StorageFolder instance + folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); + this.Addresser.Reset(); + try + { + GetFilesAndFolder(folder); + RootFolder.Text = "3"; + IsMusicLibraryOpen = false; + IsVideoLibraryOpen = false; + IsPictureLibraryOpen = false; + } + catch (Exception ex) + { + ShowStatus(ex.Message); + //AI("no sdcard is detected", 2); + } + } + } + + public async void GetFilesAndFolder(IStorageFolder anyFolder) + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async delegate + { + ShowStatus(anyFolder.Path); + if (anyFolder != null) + { + Items = null; + sd.Clear(); + SDGridView.ItemsSource = null; + CurrentFolder = anyFolder; + Items = await anyFolder.GetItemsAsync(); + if (Items.Count == 0) + { + CurrentFolder = anyFolder; + headerText.Text = anyFolder.Name; + sd.Clear(); + switch (anyFolder.Path) + { + case @"D:\Documents": + //display documents missing sad face + break; + case @"D:\Music": + //display music missing sad face + break; + case @"D:\Videos": + //display videos missing sad face + break; + case @"D:\Pictures": + //display pictures missing sad face + break; + default: + EmptyFolderStack.Visibility = Visibility.Visible; + //default options for other empty folders + break; + + } + return; + } + //if (GridType) + // SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + //else SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + else + { + EmptyFolderStack.Visibility = Visibility.Collapsed; + foreach (IStorageItem Data in Items) + { + if (Data.IsOfType(StorageItemTypes.Folder)) + { + IStorageFolder Folder; + Folder = (IStorageFolder)Data; + //IReadOnlyList<IStorageItem> item = await Folder.GetItemsAsync(); + headerText.Text = anyFolder.Name; + if (CurrentFolder.Path == @"D:\") + { + if (Folder.Name == "Videos") sd.Add(new sdlist(Folder.Name, "o", "")); + else if (Folder.Name == "Pictures") sd.Add(new sdlist(Folder.Name, "f", "")); + else if (Folder.Name == "Music") sd.Add(new sdlist(Folder.Name, "g", "")); + else if (Folder.Name == "Downloads") sd.Add(new sdlist(Folder.Name, "e", "")); + else if (Folder.Name == "Documents") sd.Add(new sdlist(Folder.Name, "n", "")); + else sd.Add(new sdlist(Folder.Name, "h", "")); + } + else sd.Add(new sdlist(Folder.Name, "h", "")); + } + if (Data.IsOfType(StorageItemTypes.File)) + { + IStorageFile File = (IStorageFile)Data; + string fn = File.Name; + string fi = File.FileType; + #region FileTypes + if (fi == ".mp3") + { + if (((string)settings.Values["musThumbnail"] == "1")) + { + + #region Mp3 + + //var fileStream = await File.OpenStreamForReadAsync(); + //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); + //var tags = tagFile.GetTag(TagTypes.Id3v2); + //try + //{ + // if (tags.Pictures != null) + // { + // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); + // WriteableBitmap wm = null; + // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); + + // ms.Dispose(); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = wwm; + // im.Stretch = Stretch.UniformToFill; + // sd.Add(new sdlist(fn, im, "")); + // #endregion + // } + //} + //catch (IndexOutOfRangeException ex) + //{ + // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = bm; + // sd.Add(new sdlist(fn, im, "")); + //} + //catch (Exception ex) + //{ + // AI(ex.Message, 2); + //} + #endregion + } + else sd.Add(new sdlist(fn, "m")); + + } + else if (fi == ".wma") + { + if (((string)settings.Values["musThumbnail"] == "1")) + { } + #region wma-work in progress + + //var fileStream = await File.OpenStreamForReadAsync(); + //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); + //var tags = tagFile.GetTag(TagTypes.Id3v2); + //try + //{ + // if (tags.Pictures != null) + // { + // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); + // WriteableBitmap wm = null; + // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); + + // ms.Dispose(); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = wwm; + // im.Stretch = Stretch.UniformToFill; + // sd.Add(new sdlist(fn, im, "")); + // #endregion + // } + //} + //catch (IndexOutOfRangeException ex) + //{ + // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = bm; + // sd.Add(new sdlist(fn, im, "")); + //} + //catch (Exception ex) + //{ + // AI(ex.Message, 2); + //} + #endregion + else sd.Add(new sdlist(fn, "m")); + + } + else if (fi == ".docx") + { + sd.Add(new sdlist(fn, "k")); + + } + else if (fi == ".png") + { + if (((string)settings.Values["picThumbnail"] == "1")) + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + else sd.Add(new sdlist(fn, "p")); + } + else if (fi == ".jpg") + { + if (((string)settings.Values["picThumbnail"] == "1")) + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + else sd.Add(new sdlist(fn, "p")); + } + else if (fi == ".mp4") + { + if (((string)settings.Values["vidThumbnail"] == "1")) + { + try + { + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + } + catch + { + sd.Add(new sdlist(fn, "v")); + } + } + else sd.Add(new sdlist(fn, "v")); + } + else if (fi == ".mov") + { + if (((string)settings.Values["vidThumbnail"] == "1")) + { + try + { + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + } + catch + { + sd.Add(new sdlist(fn, "v")); + } + } + else sd.Add(new sdlist(fn, "v")); + } + else if (fi == ".zip") + { + sd.Add(new sdlist(fn, "z")); + + } + else if (fi == ".cs") + { + sd.Add(new sdlist(fn, "c")); + } + else if (fi == ".pdf") + { + sd.Add(new sdlist(fn, "b")); + } + else if (fi == ".vcf") + { + sd.Add(new sdlist(fn, "l")); + } + else if (fi == ".doc") + { + sd.Add(new sdlist(fn, "k")); + } + else if (fi == ".xlx") + { + sd.Add(new sdlist(fn, "j")); + } + else if (fi == ".xlsx") + { + sd.Add(new sdlist(fn, "j")); + } + else if (fi == ".7z") + { + sd.Add(new sdlist(fn, "7")); + } + else if (fi == ".xml") + { + sd.Add(new sdlist(fn, "x")); + } + else if (fi == ".txt") + { + sd.Add(new sdlist(fn, "a")); + } + else if (fi == ".rar") + { + sd.Add(new sdlist(fn, "r")); + } + else + { + sd.Add(new sdlist(fn, "i")); + + } + #endregion + } + } + } + } + //else AI("This folder contains no items", 2); + SDGridView.ItemsSource = sd; + }); + } + + + } +} +\ No newline at end of file diff --git a/File360/GeneralSettings.xaml b/File360/GeneralSettings.xaml @@ -0,0 +1,62 @@ +<Page + x:Class="File360.GeneralSettings" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:toolkit="using:WinRTXamlToolkit.Controls" + mc:Ignorable="d" + FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway"> + <Page.Transitions> + <TransitionCollection> + <ContentThemeTransition HorizontalOffset="40"/> + </TransitionCollection> + </Page.Transitions> + + + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Button Style="{StaticResource DefaultButton}" Click="GoBack" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"> + <Button.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Button.Background> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" TextAlignment="Left" FontSize="24" Text="g" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" FontWeight="Thin" FontStretch="UltraCondensed"/> + <TextBlock HorizontalAlignment="Left" + TextWrapping="Wrap" + Text="general" + VerticalAlignment="Center" + FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontWeight="Normal" Margin="5,0,0,0" TextLineBounds="TrimToCapHeight" FontSize="32"/> + </StackPanel> + </Button> + <ScrollViewer Grid.Row="1" Background="{x:Null}"> + <StackPanel> + <StackPanel.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.3"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="Transparent" Offset="0.02"/> + </LinearGradientBrush> + </StackPanel.Background> + <TextBlock Text="use built-in viewer for" FontFamily="Segoe WP Light" FontSize="17.333" Margin="15,10,0,0" TextLineBounds="TrimToBaseline"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + <Grid Height="75"> + <ToggleSwitch Grid.Column="1" Header="music" Margin="10,0,0,0" Foreground="White"/> + + </Grid> + <Grid Height="75"> + <ToggleSwitch Header="videos" Margin="10,0,0,0" Foreground="White"/> + </Grid> + <Grid Height="75"> + <ToggleSwitch Grid.Column="1" Header="ebooks" Margin="10,0,0,0" Foreground="White"/> + </Grid> + </StackPanel> + </ScrollViewer> + </Grid> +</Page> diff --git a/File360/GeneralSettings.xaml.cs b/File360/GeneralSettings.xaml.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class GeneralSettings : Page + { + public GeneralSettings() + { + this.InitializeComponent(); + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + } + + private void GoBack(object sender, RoutedEventArgs e) + { + if (this.Frame.CanGoBack) this.Frame.GoBack(); + } + } +} diff --git a/File360/HelpPage.xaml b/File360/HelpPage.xaml @@ -0,0 +1,52 @@ +<Page + x:Class="File360.HelpPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + RequestedTheme="Dark" + FontFamily="Segoe WP Light" FontSize="18.667"> + + <Page.Transitions> + <TransitionCollection> + <ContentThemeTransition HorizontalOffset="0"/> + </TransitionCollection> + </Page.Transitions> + + <Grid> + <ScrollViewer> + <ScrollViewer.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.3"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Offset="0.02"/> + </LinearGradientBrush> + </ScrollViewer.Background> + <StackPanel Margin="10,0"> + <Button Content="TOUR FILE360" Visibility="Collapsed"/> + <TextBlock Text="copy or move" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="long press to select file(s) and press the clipboard button to copy the selected file(s) to clipboard." TextWrapping="Wrap"/> + <TextBlock Text="sdcard" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="select sdcard from folder picker to view files in sd. " TextWrapping="Wrap"/> + <TextBlock Text="phone" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="to view all the folders. add all the folders in phone memory to this app." TextWrapping="Wrap"/> + <TextBlock Text="navigation" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="navigate using the sidebar which can be accessed by sliding from left." TextWrapping="Wrap"/> + <TextBlock Text="settings" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="settings can be found in the bottom of the sidebar page" TextWrapping="Wrap"/> + <TextBlock Text="music &amp; video player" Style="{StaticResource GroupHeaderTextBlockStyle}" /> + <TextBlock Text="you can open player from the sidebar by clicking the now playing button" TextWrapping="Wrap"/> + <TextBlock Text="about" HorizontalAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue"/> + <Rectangle Height="128" Width="250"> + <Rectangle.Fill> + <ImageBrush Stretch="Uniform" ImageSource="Assets/ARAM.png"/> + </Rectangle.Fill> + </Rectangle> + <TextBlock Text="developed and produced by," FontSize="18" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" TextAlignment="Center"/> + <HyperlinkButton FontSize="{StaticResource ContentControlFontSize}" Content="Ulōka" HorizontalAlignment="Center" Background="{x:Null}" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" Foreground="{ThemeResource PhoneAccentBrush}"/> + <TextBlock Margin="10,5" HorizontalAlignment="Center" TextWrapping="Wrap" Text="thankyou for choosing FILE360. This is a premium version." FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontSize="20" TextAlignment="Center"/> + </StackPanel> + </ScrollViewer> + </Grid> +</Page> diff --git a/File360/HelpPage.xaml.cs b/File360/HelpPage.xaml.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class HelpPage : Page + { + public HelpPage() + { + this.InitializeComponent(); + Transitions = null; + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + } + } +} diff --git a/File360/IntToNegativeIntConverter.cs b/File360/IntToNegativeIntConverter.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Data; + +namespace File360 +{ + class IntToNegativeIntConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + if (value == null) + return value; + + return (-1 * (double)value); + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} + diff --git a/File360/MainPage.xaml b/File360/MainPage.xaml @@ -1,223 +1,1321 @@ -<phone:PhoneApplicationPage - xmlns:local="clr-namespace:File360" - xmlns:fx="clr-namespace:MetroInMotionUtils" - xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" - xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" +<Page x:Name="page" + x:Class="File360.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" + xmlns:local="using:File360" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps" xmlns:es="clr-namespace:Microsoft.Expression.Shapes;assembly=Microsoft.Expression.Drawing" x:Name="Menu" - x:Class="File360.MainPage" - local:TiltEffect.IsTiltEnabled="True" - mc:Ignorable="d" - Orientation="Portrait" - shell:SystemTray.IsVisible="True"> + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + xmlns:toolkit="using:WinRTXamlToolkit.Controls" + mc:Ignorable="d" RequestedTheme="Dark" FontFamily="Helvetica Neue" FontSize="18.667" FontWeight="SemiLight"> + <Page.Resources> + <local:BoolToVisibilityConverter x:Key="BoolToVisConverter" /> + <Storyboard x:Name="SideBarSlide"> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="SideMenuLeft" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="0.5" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="SDGridView" d:IsOptimized="True"/> + </Storyboard> + <DataTemplate x:Name="PicturesView"> + <ItemsControl Tapped="PictureItemClick" Height="{Binding PicHeight}" Width="{Binding PicWidth}"> + <Grid Height="{Binding ImageHeight}" Width="{Binding ImageWidth}" Background="{Binding Background}"> + <Grid VerticalAlignment="Bottom" Background="{ThemeResource PhoneChromeBrush}"> + <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Name}" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin"/> + </Grid> + </Grid> + </ItemsControl> + </DataTemplate> + <local:IntToNegativeIntConverter x:Key="IntToNegativeIntConverter" /> + <DataTemplate x:Name="VideosView"> + <ItemsControl Tapped="VideoItemClick" Margin="10"> + <Border BorderThickness="5" Background="{Binding Background}" Height="{Binding VidHeight}" Width="{Binding VidWidth}"> + <Border.BorderBrush> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Border.BorderBrush> + <Border VerticalAlignment="Bottom"> + <Border.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}" Opacity="0.8"/> + </Border.Background> + <TextBlock TextTrimming="WordEllipsis" HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding Name}" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" FontSize="20"/> + </Border> + </Border> + </ItemsControl> + </DataTemplate> + <DataTemplate x:Name="MusicsView"> + <ItemsControl Tapped="MusicItemClick" Height="{Binding PicHeight}" Width="{Binding PicWidth}"> + <Grid Height="{Binding ImageHeight}" Width="{Binding ImageWidth}" Background="{Binding Background}"> + <Grid VerticalAlignment="Bottom" Background="{ThemeResource PhoneChromeBrush}"> + <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Text="{Binding SongName}" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" TextTrimming="WordEllipsis"/> + </Grid> + </Grid> + </ItemsControl> + </DataTemplate> + <DataTemplate x:Name="GridFoldersView"> + <ItemsControl CacheMode="BitmapCache" Holding="FolderHold" IsDoubleTapEnabled="True" Tapped="GridItemClick" Height="{Binding GridHeight}" Width="{Binding GridWidth}" Background="{x:Null}" DoubleTapped="ItemDoubleTap"> + <StackPanel CacheMode="BitmapCache" Background="{Binding Background}"> + <Grid Margin="0,5,0,0"> + <TextBlock HorizontalAlignment="Center" Width="130" Text="{Binding Image}" FontSize="65" FontFamily="Assets/Font/filetypes.ttf#filetypes" TextAlignment="Center" VerticalAlignment="Center"/> + <TextBlock Text="{Binding Count}" x:Name="DataContents" Foreground="{ThemeResource AppBarItemForegroundThemeBrush}" TextAlignment="Center" FontSize="15" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,2,0,0"/> + </Grid> + <TextBlock Text="{Binding Name}" FontSize="16" TextTrimming="WordEllipsis" x:Name="DataName" Foreground="{ThemeResource AppBarItemForegroundThemeBrush}" TextAlignment="Center" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" Margin="4,0"/> + <TextBox x:Name="box" Visibility="Collapsed" Text="{Binding Name}" FontSize="16" TextAlignment="Center" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" Margin="4,0"> + <TextBox.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </TextBox.Foreground> + </TextBox> + <TextBlock Text="53.05 mb" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisConverter}}" HorizontalAlignment="Center"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBaseLowColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </ItemsControl> + </DataTemplate> + <DataTemplate x:Name="ListFoldersView"> + <ItemsControl Tapped="GridItemClick" DoubleTapped="ItemDoubleTap" Holding="FolderHold" Height="{Binding ListHeight}" Width="{Binding Width}" Margin="0" Background="{x:Null}"> + <StackPanel Orientation="Horizontal" Background="{x:Null}"> + <Grid> + <TextBlock Margin="10" VerticalAlignment="Center" Text="{Binding Image}" FontSize="66.667" FontFamily="Assets/Font/filetypes.ttf#filetypes" TextAlignment="Left"/> + <TextBlock Margin="2,5,2,2" Text="{Binding Count}" Foreground="{ThemeResource AppBarItemForegroundThemeBrush}" TextAlignment="Center" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" VerticalAlignment="Bottom"/> + </Grid> + <StackPanel VerticalAlignment="Center"> + <TextBlock Text="{Binding Name}" TextTrimming="WordEllipsis" Foreground="{ThemeResource AppBarItemForegroundThemeBrush}" TextAlignment="Left" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontSize="20" VerticalAlignment="Bottom" Margin="3,0,0,1"/> + + <TextBlock Text="05/02/1997" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisConverter}}" VerticalAlignment="Center" Margin="3,1,0,0"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBaseMediumHighColor}"/> + </TextBlock.Foreground> + </TextBlock> + <TextBlock Text="53.05 mb" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisConverter}}" VerticalAlignment="Top" Margin="3,1,0,0"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBaseLowColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </StackPanel> + </ItemsControl> + </DataTemplate> + <ItemsPanelTemplate x:Name="GridViewItemsPanel"> + <ItemsWrapGrid Orientation="Horizontal"> + <ItemsWrapGrid.ChildrenTransitions> + <TransitionCollection> + <ContentThemeTransition VerticalOffset="0" HorizontalOffset="0"/> + </TransitionCollection> + </ItemsWrapGrid.ChildrenTransitions> + </ItemsWrapGrid> + </ItemsPanelTemplate> + <ItemsPanelTemplate x:Name="ListViewItemsPanel"> + <ItemsStackPanel Orientation="Vertical"> + <ItemsStackPanel.ChildrenTransitions> + <TransitionCollection> + <ContentThemeTransition VerticalOffset="0" HorizontalOffset="10"/> + </TransitionCollection> + </ItemsStackPanel.ChildrenTransitions> + </ItemsStackPanel> + </ItemsPanelTemplate> + <Storyboard x:Name="SDLoad" RepeatBehavior="Forever"> + <DoubleAnimation Duration="0:0:1" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="symbolIcon" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuadraticEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="PhoneLoad" RepeatBehavior="Forever"> + <DoubleAnimation Duration="0:0:1" To="360" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="symbolIcon1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuinticEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="sdload"> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="textBlock"> + <DiscreteObjectKeyFrame KeyTime="0"> + <DiscreteObjectKeyFrame.Value> + <Visibility>Visible</Visibility> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + <DataTemplate x:Name="SettingsItemTemplate"> + <Button x:Name="SettingTap" Height="Auto" Margin="0,12.5,0,10"> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="{Binding SettingPicture}" FontSize="26.667" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Center" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <StackPanel Orientation="Vertical"> + <TextBlock Margin="10,0,0,0" Text="{Binding SettingName}" FontSize="23.333" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontWeight="Thin" IsColorFontEnabled="False"> + <TextBlock.Foreground> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> + <GradientStop Color="{ThemeResource PhoneForegroundColor}" Offset="0"/> + <GradientStop Color="{ThemeResource PhoneForegroundColor}" Offset="1"/> + <GradientStop Color="{ThemeResource PhoneTextHighColor}" Offset="0.5"/> + </LinearGradientBrush> + </TextBlock.Foreground> + </TextBlock> + <TextBlock Margin="10,1,0,0" Text="{Binding SettingDescription}" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" FontSize="11" FontWeight="Thin" IsColorFontEnabled="False"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </StackPanel> + </Button> + </DataTemplate> + + <DataTemplate x:Name="SettingsGridItemTemplate"> + <ItemsControl x:Name="SettingTap" Height="{Binding GridHeight}" Width="{Binding GridWidth}" HorizontalAlignment="Center" VerticalAlignment="Center"> + <StackPanel Margin="0,25" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="{Binding SettingPicture}" FontSize="26.667" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <TextBlock Text="{Binding SettingName}" FontSize="23.333" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" FontWeight="Thin" HorizontalAlignment="Center"/> + <TextBlock Text="{Binding SettingDescription}" HorizontalAlignment="Center"/> + </StackPanel> + </ItemsControl> + </DataTemplate> + <DataTemplate x:Name="RecentPlayTemplate"> + <Grid Height="100" Width="75"> + <Grid Background="{Binding Background}" Height="90" Width="70"> + <Border Height="25" Width="25" CornerRadius="30" VerticalAlignment="Center" HorizontalAlignment="Center" BorderBrush="#7F383838" Background="#7F0F0F0F" BorderThickness="2"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#7FE0DFDF" FontSize="14" Text="5" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + </Border> + </Grid> + </Grid> + </DataTemplate> + <Storyboard x:Name="MediaOpen"> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="MediaFragment" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <SineEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="MediaOpenRev"> + <DoubleAnimation To="700" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="MediaFragment" Duration="0:0:0.2"> + <DoubleAnimation.EasingFunction> + <SineEase EasingMode="EaseIn"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="DurationBlink" RepeatBehavior="Forever" AutoReverse="True"> + <DoubleAnimation Duration="0:0:0.6" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="currentDuration"> + <DoubleAnimation.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="SeekOpen"> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="border" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <BackEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="SeekClose"> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="border" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="border" d:IsOptimized="True"/> + </Storyboard> + <Storyboard x:Name="FTPOpen"> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="border1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="border1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="border1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="border1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="border1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <CircleEase EasingMode="EaseOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + </Storyboard> + <Storyboard x:Name="OpenSortMenuAnim"> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="SortMenu"> + <EasingDoubleKeyFrame KeyTime="0" Value="0"> + <EasingDoubleKeyFrame.EasingFunction> + <QuinticEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="SortMenu"> + <DiscreteObjectKeyFrame KeyTime="0"> + <DiscreteObjectKeyFrame.Value> + <Visibility>Visible</Visibility> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="SortMenu"> + <EasingDoubleKeyFrame KeyTime="0" Value="0"> + <EasingDoubleKeyFrame.EasingFunction> + <QuinticEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="SortMenu"> + <EasingDoubleKeyFrame KeyTime="0" Value="0"> + <EasingDoubleKeyFrame.EasingFunction> + <QuinticEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + </Storyboard> + <Storyboard x:Name="PhotoSlide"> + <DoubleAnimation Duration="0:0:0.3" To="0" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationX)" Storyboard.TargetName="rectangle" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <BackEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.3" To="0" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)" Storyboard.TargetName="rectangle" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <BackEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationZ)" Storyboard.TargetName="rectangle"> + <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="359"> + <EasingDoubleKeyFrame.EasingFunction> + <BackEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.8" Value="0"> + <EasingDoubleKeyFrame.EasingFunction> + <BackEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.CornerRadius)" Storyboard.TargetName="border2"> + <DiscreteObjectKeyFrame KeyTime="0:0:0.7"> + <DiscreteObjectKeyFrame.Value> + <CornerRadius>250</CornerRadius> + </DiscreteObjectKeyFrame.Value> + </DiscreteObjectKeyFrame> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + <Storyboard x:Name="FTPActive" RepeatBehavior="Forever" AutoReverse="True"> + <ColorAnimation Duration="0:0:0.5" To="White" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border3" d:IsOptimized="True"> + <ColorAnimation.EasingFunction> + <SineEase EasingMode="EaseOut"/> + </ColorAnimation.EasingFunction> + </ColorAnimation> + </Storyboard> + <Storyboard x:Name="AppearancePanel" AutoReverse="True" RepeatBehavior="Forever"> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="rectangle1"> + <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="1.2"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="rectangle1"> + <EasingDoubleKeyFrame KeyTime="0:0:0.6" Value="1.2"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.9" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="rectangle2"> + <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.5"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:1.1" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="rectangle2"> + <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1.5"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:1.1" Value="1"> + <EasingDoubleKeyFrame.EasingFunction> + <SineEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + </Storyboard> - <phone:PhoneApplicationPage.Resources> + </Page.Resources> - <DataTemplate x:Key="File360ItemTemplate"> - <StackPanel Tap="folderTap_Click" > - <toolkit:ContextMenuService.ContextMenu> + <Grid> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="0.035*"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid x:Name="grid4" Grid.RowSpan="2"> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid x:Name="Header" Margin="0"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.3"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Button x:Name="hamburgerButton" MinWidth="0" HorizontalContentAlignment="Left" Click="Menu_Click" VerticalAlignment="Center" BorderBrush="{x:Null}" BorderThickness="0" Foreground="{ThemeResource PhoneForegroundBrush}"> + <Button.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.6"/> + </Button.Background> + <StackPanel Orientation="Horizontal"> + <TextBlock Text="h" FontFamily="Assets/Font/iconFont.ttf#iconfont" FontSize="25" MinHeight="0" MinWidth="0" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center"/> + <TextBlock Visibility="Collapsed" VerticalAlignment="Center" x:Name="menuText" FontFamily="Segoe WP Semibold" FontWeight="Normal" FontSize="16" HorizontalAlignment="Center"> + <Run CharacterSpacing="75" Text="FILE360"/> + <Run Foreground="{StaticResource PhoneAccentBrush}" Text="°"/> + </TextBlock> + </StackPanel> + </Button> + <Grid Grid.Column="1"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border Width="{StaticResource FlyoutThemeMinHeight}" > + <Border.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.6"/> + </Border.Background> + <TextBlock Foreground="{StaticResource PhoneAccentBrush}" x:Name="RootFolder" Text="" TextLineBounds="Tight" FontFamily="Assets/Font/iconfont.ttf#iconfont" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5"/> + </Border> + <ScrollViewer + Grid.Column="1"> + <StackPanel Orientation="Horizontal"> + <local:Addresser x:Name="Addresser"/> + </StackPanel> + </ScrollViewer> + </Grid> + </Grid> + <local:DrawerLayout x:Name="SideMenu" Grid.Row="1"> - <toolkit:ContextMenu IsZoomEnabled="True" x:Name="ContextMenu"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="0.12*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> - <toolkit:MenuItem x:Name="Copy" Header="copy" Click="Copy_Click"/> - <toolkit:MenuItem x:Name="Cut" Header="cut" Click="Cut_Click"/> + <Grid Grid.Row="1" > + <GridView x:Name="SDGridView" + Visibility="Visible" + ItemTemplate="{StaticResource ListFoldersView}" + ItemsPanel="{StaticResource GridViewItemsPanel}" + SelectionMode="None" + ScrollViewer.VerticalScrollMode="Enabled" + ScrollViewer.IsDeferredScrollingEnabled="False" + ScrollViewer.IsScrollInertiaEnabled="False" + ScrollViewer.VerticalScrollBarVisibility="Visible" + ScrollViewer.HorizontalScrollBarVisibility="Disabled" + ScrollViewer.HorizontalScrollMode="Disabled" + SelectionChanged="SDGridViewSelectionChanged"> - <toolkit:MenuItem x:Name="Delete" Header="delete" Click="Delete_Click"/> + <GridView.ItemContainerStyle> + <Style TargetType="GridViewItem"> + <Setter Property="local:SelectorItemEx.ToggleSelectedOnHold" Value="False" /> + </Style> + </GridView.ItemContainerStyle> + <GridView.Background> + <SolidColorBrush Opacity="0.800000011920929" Color="{ThemeResource ContentDialogDimmingColor}"/> + </GridView.Background> + </GridView> + <Grid x:Name="SortMenu" Margin="10" VerticalAlignment="Top" HorizontalAlignment="Right" Width="150" Height="250" Visibility="Collapsed" RenderTransformOrigin="1,0"> + <Grid.RenderTransform> + <CompositeTransform/> + </Grid.RenderTransform> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="Name" HorizontalContentAlignment="Left" Padding="25,0,9.5,3.5" Click="SortMenuItemClick"/> + <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="1" Content="Type" HorizontalContentAlignment="Left" Padding="25,0,9.5,3.5" Click="SortMenuItemClick"/> + <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="2" Content="Size" HorizontalContentAlignment="Left" Padding="25,0,9.5,3.5" Click="SortMenuItemClick"/> + <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="3" Content="Date" HorizontalContentAlignment="Left" Padding="25,0,9.5,3.5" Click="SortMenuItemClick"/> + </Grid> - <toolkit:MenuItem x:Name="Hide" Header="hide" Click="Hide_Click"/> + <Button Click="SDCardEnumerator" Margin="50" x:Name="AddSDButton" HorizontalAlignment="Center" Visibility="Collapsed"> + <StackPanel> + <TextBlock Text="f" HorizontalAlignment="Center" FontSize="80" FontFamily="iconfont.ttf#iconfont"/> + <TextBlock Text="your OS keeps us from accessing your files... maybe you can help us. tap to add folder." VerticalAlignment="Center" TextWrapping="Wrap" Margin="0,15,0,0" TextAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}"/> + </StackPanel> + </Button> + </Grid> + <Grid Grid.Row="0"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.7"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="0.50*"/> + <ColumnDefinition Width="3*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Button MinWidth="50" Content="l" Click="PreviousFolder" FontFamily="Assets/Font/iconfont.ttf#iconfont" Background="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center"/> + <Grid Grid.Column="1" VerticalAlignment="Center"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="5*"/> + </Grid.ColumnDefinitions> + <CheckBox x:Name="selectBox" Checked="SelectAll" Margin="10,-2" VerticalAlignment="Center" IsChecked="{x:Null}" HorizontalAlignment="Left" Background="{x:Null}" BorderBrush="{ThemeResource PhoneAccentBrush}" Foreground="{ThemeResource PhoneForegroundBrush}" Unchecked="selectBox_Unchecked"/> + <TextBlock Grid.Column="1" Margin="5" TextWrapping="NoWrap" x:Name="headerText" Text="" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="20" TextTrimming="WordEllipsis" TextLineBounds="TrimToCapHeight"/> + </Grid> + <Button x:Name="sortButton" MinWidth="50" Grid.Column="2" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="OpenSortMenu"> + <TextBlock Text="i"/> + </Button> - </toolkit:ContextMenu> - </toolkit:ContextMenuService.ContextMenu> - <Image Source="{Binding Name2}" Width="60" Height="55" VerticalAlignment="Center" HorizontalAlignment="Center" /> - <TextBlock x:Name="folderTap" Text="{Binding Name}" TextWrapping="NoWrap" VerticalAlignment="Bottom" TextAlignment="Center" FontSize="16" /> - </StackPanel> - </DataTemplate> + <Rectangle Grid.ColumnSpan="3" Height="2" MinHeight="2" Fill="{ThemeResource PhoneAccentBrush}" Opacity="0.25" VerticalAlignment="Bottom"/> + <!--<local:BottomBarItem x:Name="compressButton" Visibility="Visible" HorizontalAlignment="Center" ImageText="B" Grid.Column="1" ContentText="compress"/>--> + </Grid> + <ScrollViewer Grid.Row="1" Margin="15" x:Name="EmptyFolderStack" Visibility="Collapsed"> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid Grid.Row="1"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.6"/> + </Grid.Background> + <Button Margin="25" Click="AddFolder" HorizontalAlignment="Center" Background="{x:Null}"> + <StackPanel> + <TextBlock Text="G" FontSize="90" FontFamily="Assets/Font/iconfont.ttf#iconfont" Foreground="#FF27AE60"/> + <TextBlock Text="add folder" HorizontalAlignment="Center"/> + </StackPanel> + </Button> + </Grid> + <Grid Grid.Column="1"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.805"/> + </Grid.Background> + <Button Click="AddFile" Margin="25" HorizontalAlignment="Center" Grid.Column="1"> + <StackPanel> + <TextBlock Text="S" FontSize="100" FontFamily="Assets/Font/iconfont.ttf#iconfont" Foreground="#FFF39C12"/> + <TextBlock Text="add file" HorizontalAlignment="Center"/> + </StackPanel> + </Button> + </Grid> + </Grid> + <Button HorizontalAlignment="Stretch" Grid.Row="2" VerticalAlignment="Stretch" Click="DeleteThisFolder" > + <Button.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}" Opacity="0.7"/> + </Button.Background> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="3*"/> + </Grid.ColumnDefinitions> + <TextBlock VerticalAlignment="Center" Margin="10" Text="I" FontSize="66.667" FontFamily="Assets/Font/iconfont.ttf#iconfont"> + <TextBlock.Foreground> + <SolidColorBrush Color="#FFE74C3C"/> + </TextBlock.Foreground> + </TextBlock> + <TextBlock Margin="5" Text="delete this folder?" Grid.Column="1" VerticalAlignment="Center" Style="{StaticResource HeaderTextBlockStyle}" TextWrapping="Wrap" FontSize="33.333"/> + </Grid> + </Button> + <Button HorizontalAlignment="Stretch" Grid.Row="3" VerticalAlignment="Stretch" Click="PreviousFolder" > + <Button.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}" Opacity="0.7"/> + </Button.Background> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="3*"/> + </Grid.ColumnDefinitions> + <TextBlock VerticalAlignment="Center" Margin="10" Text="l" FontSize="66.667" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <TextBlock Margin="5" Text="go back" Grid.Column="1" VerticalAlignment="Center" Style="{StaticResource HeaderTextBlockStyle}" TextWrapping="Wrap" FontSize="33.333"/> + </Grid> + </Button> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <TextBlock Margin="10" Text="empty folder" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" FontSize="22" VerticalAlignment="Top" HorizontalAlignment="Left"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Grid> + + </Grid> + </ScrollViewer> + + <!--><StackPanel Grid.Row="1" x:Name="MediaGridView" + ScrollViewer.VerticalScrollMode="Enabled" + ScrollViewer.VerticalScrollBarVisibility="Hidden" + ScrollViewer.HorizontalScrollBarVisibility="Disabled" + ScrollViewer.HorizontalScrollMode="Disabled"/>--> + + <StackPanel Grid.Row="2"> + <Rectangle Height="2" MinHeight="2" Fill="{ThemeResource PhoneAccentBrush}" Opacity="0.25"/> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.6"/> + </Grid.Background> + <Grid x:Name="operationBar" Visibility="Collapsed"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <local:BottomBarItem HorizontalAlignment="Center" ImageText="O" ContentText="copy" Click="CutItems"/> + <local:BottomBarItem HorizontalAlignment="Center" Grid.Column="1" ImageText="I" ContentText="delete" Click="DeleteItem"/> + <local:BottomBarItem HorizontalAlignment="Center" ImageText="P" Grid.Column="2" ContentText="rename" Click="RenameItem"/> + <local:BottomBarItem HorizontalAlignment="Center" ImageText="n" MinHeight="55" ContentText="share" Grid.Column="3" Click="ShareContent"/> + </Grid> + <Grid x:Name="operationBarNormal"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <local:BottomBarItem ImageText="G" ContentText="add folder" Click="AddFolder" HorizontalAlignment="Center"/> + <local:BottomBarItem Grid.Column="1" ImageText="S" ContentText="add file" Click="AddFile" HorizontalAlignment="Center"/> + <local:BottomBarItem + ImageText="T" + Grid.Column="2" + ContentText="paste" + Click="PasteItem" + HorizontalAlignment="Center"/> + <local:BottomBarItem x:Name="gridList" Grid.Column="3" ImageText="N" MinHeight="55" IsEnabled="True" ContentText="grid" Click="GridListChange" HorizontalAlignment="Center"/> + </Grid> - <DataTemplate x:Name="File360MusicTemplate"> - <StackPanel> - <TextBlock x:Name="{Binding MusicIndex}" Text="{Binding SongName}" FontFamily="Default" Tap="txtB_Tap" FontWeight="Normal" FontSize="30" Height="43"/> - <TextBlock x:Name="txtB2" Text="{Binding ArtistName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}" Height="50"/> - </StackPanel> - </DataTemplate> - </phone:PhoneApplicationPage.Resources> - - <phone:PhoneApplicationPage.ApplicationBar> - <shell:ApplicationBar x:Name="appBar" IsVisible="True" IsMenuEnabled="True" Mode="Default" Opacity="1.0" > - - <shell:ApplicationBar.MenuItems> - <shell:ApplicationBarMenuItem Text="settings" Click="Settings_Click" /> - </shell:ApplicationBar.MenuItems> - - <shell:ApplicationBarIconButton x:Name="NewFolder" IconUri="/Toolkit.Content/ApplicationBar.Add.png" Text="new folder" Click="NewFolder_Click" /> - <shell:ApplicationBarIconButton x:Name="MultiSelect" IconUri="/Toolkit.Content/ApplicationBar.Select.png" Text="multi select" Click="MultiSelect_Click" /> - - </shell:ApplicationBar> - </phone:PhoneApplicationPage.ApplicationBar> - - - - <Grid x:Name="LayoutRoot"> - <Grid.RowDefinitions> - <RowDefinition Height="126*"/> - <RowDefinition Height="183*"/> - <RowDefinition Height="388*"/> - </Grid.RowDefinitions> - <Canvas x:Name="canvas" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Grid.RowSpan="3"> - <Canvas.Resources> - <Storyboard x:Name="moveAnimation"> - <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(Canvas.Left)" Storyboard.TargetName="CanvasRoot" d:IsOptimized="True" /> - </Storyboard> - </Canvas.Resources> - <Canvas.Background> - <StaticResource ResourceKey="PhoneBackgroundBrush"/> - </Canvas.Background> - <Canvas CacheMode="BitmapCache" x:Name="CanvasRoot" Width="1170" VerticalAlignment="Stretch" Canvas.Left="-320" Height="768"> - <Border Width="310" CacheMode="BitmapCache" Background="{StaticResource PhoneBackgroundBrush}" Grid.Column="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="768"> - <Grid HorizontalAlignment="Left" Width="310" Background="{StaticResource PhoneChromeBrush}"> - <ListBox x:Name="SideBar" Height="978" VerticalAlignment="Bottom" Margin="0,0,4,-301"> - <ListBox.Background> - <ImageBrush Stretch="UniformToFill" ImageSource="/Resources/Assets/Wallpaper/bg1.jpg"/> - </ListBox.Background> - <Grid Width="310" Background="{StaticResource PhoneProgressBarBackgroundBrush}"> - <Ellipse HorizontalAlignment="Left" Height="64" Margin="23,25,0,0" VerticalAlignment="Top" Width="64" Fill="{StaticResource PhoneButtonBasePressedForegroundBrush}"/> - <Image Margin="39,39,240,31" Source="/Resources/Assets/Images/user.png"/> - <TextBlock Text="Hi User!" FontSize="24" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="15,0,0,0"> - <TextBlock.Foreground> - <SolidColorBrush Color="White"/> - </TextBlock.Foreground> - </TextBlock> + </Grid> + </StackPanel> </Grid> - <Grid Width="310" Height="103" Background="#AA000000"> - <Ellipse Tap="oneFill_Tap" x:Name="oneFill" HorizontalAlignment="Left" Height="64" Margin="23,23,0,0" VerticalAlignment="Top" Width="64" Fill="#FF094AB2"> - <Ellipse.OpacityMask> - <ImageBrush ImageSource="Resources/Assets/Images/onedrive.png" Stretch="Fill"/> - </Ellipse.OpacityMask> - </Ellipse> - <TextBlock Margin="0,0,15,0" Text="OneDrive" FontSize="24" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"> - <TextBlock.Foreground> - <SolidColorBrush Color="White"/> - </TextBlock.Foreground> - </TextBlock> + <Grid x:Name="MainFragment" Width="40" Margin="0,50" HorizontalAlignment="Left"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0"/> + </Grid.Background> </Grid> - <Grid x:Name="sdcard_menu" Tap="sdcard_menu_Tap" Width="310" Height="107" Background="{StaticResource TransparentBrush}"> - <TextBlock Margin="100,0,0,0" Text="SD" FontSize="24" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Left"> - <TextBlock.Foreground> - <SolidColorBrush Color="White"/> - </TextBlock.Foreground> - </TextBlock> - <Ellipse Fill="{StaticResource PhoneInverseBackgroundBrush}" HorizontalAlignment="Left" Height="64" Margin="23,25,0,0" VerticalAlignment="Top" Width="64"/> - <Image Margin="35,27,237,24" Source="/Resources/Assets/Images/sdcard.png" OpacityMask="{StaticResource PhoneAccentBrush}"/> + <Grid x:Name="ListFragment" Width="250" HorizontalAlignment="Left" ManipulationMode="TranslateX"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid Height="57" VerticalAlignment="Top" d:LayoutOverrides="TopMargin, BottomMargin"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Border> + <Border.Background> + <SolidColorBrush Color="{StaticResource MediaControlPanelVideoThemeColor}"/> + </Border.Background> + <TextBox x:Name="searchBox" VerticalAlignment="Stretch" MinWidth="54" BorderThickness="0" ScrollViewer.VerticalScrollBarVisibility="Disabled" Padding="0" UseLayoutRounding="False" Style="{StaticResource SearchBox}" Text="" Background="{x:Null}" TextChanged="searchBox_TextChanged"/> + </Border> + <Button Grid.Column="1" MinWidth="20" Width="50" BorderBrush="{x:Null}" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" FontSize="26.667"> + <Button.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.5"/> + </Button.Background> + <TextBlock Text="s" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="29.333"/> + </Button> + </Grid> + <ScrollViewer BorderBrush="{x:Null}" BorderThickness="0" ManipulationMode="TranslateX" IsRightTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False" Margin="0,57,0,0" Background="{x:Null}"> + + <StackPanel> + + <StackPanel> + <TextBlock Margin="10,4" Opacity="0.60" Text="Settings" FontSize="18.667"/> + <Grid x:Name="SettingsTab" Height="250"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <!--<Button HorizontalAlignment="Center" VerticalAlignment="Center" Click="OpenBluetoothSettings"> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="b" FontSize="25" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <TextBlock Text="bluetooth" HorizontalAlignment="Center" FontSize="13.333"/> + --><!--<TextBlock Text="configure bluetooth settings" HorizontalAlignment="Center" FontSize="13"/>--><!-- + </StackPanel> + </Button>--> + <Button Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Click="HelpOpen"> + <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="h" FontSize="25" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <TextBlock Text="help" HorizontalAlignment="Center" FontSize="13.333"/> + <!--<TextBlock Text="check out this guide" HorizontalAlignment="Center" FontFamily="Helvetica Neue" FontSize="13" FontWeight="Normal"/>--> + </StackPanel> + </Button> + <Border x:Name="border1" Grid.ColumnSpan="3" Grid.RowSpan="3" CornerRadius="20" Canvas.ZIndex="10" RenderTransformOrigin="0.5,0.5" Opacity="0"> + <Border.RenderTransform> + <CompositeTransform ScaleX="0.3" ScaleY="0.3" TranslateX="80" TranslateY="-100"/> + </Border.RenderTransform> + <Border.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Border.Background> + <StackPanel Margin="60,50,60,0"> + <TextBlock Text="ADDRESS" FontSize="20" TextAlignment="Center" HorizontalAlignment="Center"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </TextBlock.Foreground> + </TextBlock> + <TextBlock Text="192.168.1.1" TextAlignment="Center" FontSize="20" HorizontalAlignment="Center"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </TextBlock.Foreground> + </TextBlock> + <Button HorizontalAlignment="Center" Click="StopFTP"> + <Grid> + <Ellipse x:Name="ellipse" Height="100" Width="100" Fill="#BFEA1010"/> + <TextBlock Text="X" HorizontalAlignment="Center" FontSize="25" TextAlignment="Center" VerticalAlignment="Center"> + <TextBlock.Foreground> + <SolidColorBrush Color="White"/> + </TextBlock.Foreground> + </TextBlock> + </Grid> + </Button> + + </StackPanel> + </Border> + <Grid Grid.Column="2" Canvas.ZIndex="11"> + <Button MinWidth="0" x:Name="button" HorizontalAlignment="Stretch" Click="OpenFTP"> + <Border x:Name="border3" CornerRadius="50" VerticalAlignment="Center" Width="65" Height="65"> + <Border.Background> + <SolidColorBrush Color="{ThemeResource SystemColorControlAccentColor}"/> + </Border.Background> + <Grid> + <Ellipse x:Name="ellipse1" Margin="5"> + <Ellipse.Fill> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Ellipse.Fill> + </Ellipse> + <TextBlock Text="FTP" VerticalAlignment="Center" HorizontalAlignment="Center" Foreground="#D8FFFFFF"/> + </Grid> + </Border> + </Button> + </Grid> + <Grid x:Name="password_rect" Grid.Column="2" Grid.Row="2" Tapped="password_rect_Tapped"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <TextBlock x:Name="textBlock1" FontFamily="Assets/Font/iconfont.ttf#iconfont" Text="r" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="26.667"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBaseMediumMidColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Grid> + <ToggleButton MinWidth="0" x:Name="musicToggle" Checked="musicToggle_Checked" Unchecked="musicToggle_Unchecked" Grid.Row="1" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> + <StackPanel HorizontalAlignment="Center"> + <TextBlock HorizontalAlignment="Center" Text="b" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="33.333" VerticalAlignment="Center" Foreground="{ThemeResource PhoneAccentBrush}"/> + <TextBlock Text="music"/> + </StackPanel> + </ToggleButton> + <ToggleButton MinWidth="0" Grid.Row="1" Grid.Column="1" x:Name="videosToggle" Checked="videosToggle_Checked" Unchecked="videosToggle_Unchecked" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text=")" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="33.333" VerticalAlignment="Center" Foreground="{ThemeResource PhoneAccentBrush}"/> + <TextBlock Text="videos" HorizontalAlignment="Center"/> + </StackPanel> + </ToggleButton> + <ToggleButton Grid.Column="2" Grid.Row="1" Visibility="Collapsed" x:Name="ebookToggle" Checked="ebookToggle_Checked" Unchecked="ebookToggle_Unchecked" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text="m" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="33.333" Foreground="{ThemeResource PhoneAccentBrush}"/> + </StackPanel> + </ToggleButton> + <ToggleButton MinWidth="0" Grid.Row="1" Grid.Column="2" x:Name="picturesToggle" Checked="picturesToggle_Checked" Unchecked="picturesToggle_Unchecked" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text="M" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="33.333" VerticalAlignment="Center" Foreground="{ThemeResource PhoneAccentBrush}"/> + <TextBlock Text="pictures" HorizontalAlignment="Center"/> + </StackPanel> + </ToggleButton> + <Border Grid.Row="2" Grid.Column="1" BorderThickness="5" RenderTransformOrigin="0.5,0.5"> + <Grid x:Name="grid3" RenderTransformOrigin="0.5,0.5"> + <Grid.RenderTransform> + <CompositeTransform/> + </Grid.RenderTransform> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Grid.Background> + <Rectangle x:Name="rectangle1" Margin="10" Fill="{ThemeResource PhoneAccentBrush}" RenderTransformOrigin="0.5,0.5"> + <Rectangle.RenderTransform> + <CompositeTransform/> + </Rectangle.RenderTransform> + </Rectangle> + + <Rectangle x:Name="rectangle2" Margin="20" RenderTransformOrigin="0.5,0.5"> + <Rectangle.RenderTransform> + <CompositeTransform/> + </Rectangle.RenderTransform> + <Rectangle.Fill> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Rectangle.Fill> + </Rectangle> + </Grid> + </Border> + <ToggleButton MinWidth="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderThickness="0"> + <StackPanel> + <TextBlock TextAlignment="Center" Text="c" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="33.333" VerticalAlignment="Center" Foreground="{ThemeResource PhoneAccentBrush}"/> + <TextBlock Text="list" HorizontalAlignment="Center"/> + </StackPanel> + </ToggleButton> + </Grid> + </StackPanel> + <local:SideBarMenuButton ImageText="F" ContentText="Recent" HorizontalAlignment="Stretch"/> + + <Button x:Name="sdbutton" HorizontalContentAlignment="Left" HorizontalAlignment="Stretch" Width="260" Click="SDCardEnumerator" Margin="0,5"> + <StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left"> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" Text="SD Card" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontWeight="Light" FontSize="21.333" /> + <SymbolIcon x:Name="symbolIcon" Symbol="Refresh" RenderTransformOrigin="0.5,0.5" Margin="100,0,0,0" > + <SymbolIcon.RenderTransform> + <CompositeTransform/> + </SymbolIcon.RenderTransform> + </SymbolIcon> + </StackPanel> + <TextBlock FontSize="10" VerticalAlignment="Bottom" Margin="0,0,0,7" HorizontalAlignment="Left"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource TextBoxPlaceholderColor}"/> + </TextBlock.Foreground> + <Run x:Name="FreeSpace" Foreground="{ThemeResource PhoneForegroundBrush}" FontWeight="Bold" FontSize="13.333" Text="2"/> + <Run Text="GB free"/> + </TextBlock> + <ProgressBar x:Name="sdProgbar" Height="3" Width="250"/> + <TextBlock x:Name="textBlock" Text="please wait... sdcard is loading" FontSize="13" Visibility="Collapsed" Foreground="#66FFF2F2"/> + </StackPanel> + </Button> + <Button HorizontalContentAlignment="Left" Click="PhoneEnumerator" Margin="0,5" HorizontalAlignment="Stretch"> + <StackPanel Orientation="Horizontal"> + <StackPanel> + <TextBlock Text="Phone" Foreground="{ThemeResource PhoneForegroundBrush}" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontWeight="Light" FontSize="21.333"/> + <TextBlock Text="browse internal memory" FontSize="10.667"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource TextBoxPlaceholderColor}"/> + </TextBlock.Foreground> + </TextBlock> + <ProgressBar Margin="0,5" Height="3" Maximum="{Binding Maximum,ElementName=sdProgbar}" Width="{Binding ActualWidth,ElementName=sdProgbar}" Value="{Binding Value, ElementName=sdProgbar}"/> + </StackPanel> + </StackPanel> + </Button> + <Button HorizontalContentAlignment="Left" HorizontalAlignment="Stretch" Width="260" Click="PersonalStorageEnumerator" Margin="0,5"> + <StackPanel Grid.Column="1" Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left"> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" Text="Home" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontWeight="Light" FontSize="21.333" /> + <SymbolIcon x:Name="symbolIcon1" Symbol="Refresh" RenderTransformOrigin="0.5,0.5" Margin="115,0,0,0" Tapped="PhoneRefreshTapped" > + <SymbolIcon.RenderTransform> + <CompositeTransform/> + </SymbolIcon.RenderTransform> + </SymbolIcon> + </StackPanel> + <TextBlock FontSize="10" VerticalAlignment="Bottom" Margin="0,0,0,7" HorizontalAlignment="Left"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource TextBoxPlaceholderColor}"/> + </TextBlock.Foreground> + <Run FontWeight="Bold" Text="{Binding Text,ElementName=FreeSpace}"/> + <Run Text="GB free"/> + </TextBlock> + + <TextBlock Visibility="Collapsed" x:Name="phoneWarning" Text="please wait... phone memory is loading" FontSize="13" Foreground="#66FFF2F2"/> + </StackPanel> + </Button> + + + <TextBlock Margin="10,4" Opacity="0.60" Text="Library"/> + <local:SideBarMenuButton ImageText="M" ContentText="Pictures" Click="PicturesLibraryTapped" HorizontalAlignment="Stretch" Width="Auto"/> + <local:SideBarMenuButton ImageText="C" ContentText="Video" Click="VideoLibraryTapped" HorizontalAlignment="Stretch" Width="Auto"/> + <local:SideBarMenuButton ImageText="y" ContentText="Music" Click="MusicLibraryClick" HorizontalAlignment="Stretch" Width="Auto"/> + <!--<Button Click="RightMenu_Click" HorizontalContentAlignment="Left" Margin="0,5" Visibility="Collapsed"> + <StackPanel Orientation="Horizontal"> + <StackPanel> + <TextBlock Text="Downloads" Foreground="{ThemeResource PhoneForegroundBrush}" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontWeight="Light" FontSize="21.333"/> + <TextBlock Text="there are no active downloads" FontSize="10.667"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource TextBoxPlaceholderColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </StackPanel> + </Button>--> + <Rectangle Height="2" Margin="5"> + <Rectangle.Fill> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}" Opacity="0.25"/> + </Rectangle.Fill> + </Rectangle> + <Button Click="NowPlaying" Height="100" HorizontalAlignment="Stretch" BorderThickness="0" HorizontalContentAlignment="Stretch"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Border x:Name="border2" Height="75" Width="75" Background="{x:Null}"> + <Rectangle x:Name="rectangle" Fill="{Binding Background, ElementName=imageContainerMedia}" RenderTransformOrigin="0.5,0.5"> + <Rectangle.Projection> + <PlaneProjection/> + </Rectangle.Projection> + <Rectangle.RenderTransform> + <CompositeTransform/> + </Rectangle.RenderTransform> + </Rectangle> + </Border> + <StackPanel Grid.Column="1" Margin="5" VerticalAlignment="Bottom"> + <TextBlock Text="Now Playing" FontSize="15" FontWeight="Thin"/> + <TextBlock Text="{Binding Text, ElementName=SongName}" TextTrimming="WordEllipsis" TextWrapping="Wrap"/> + <TextBlock FontSize="12" Opacity="0.60" Text="{Binding Text, ElementName=SongArtist}" TextTrimming="WordEllipsis"/> + <ProgressBar Maximum="{Binding Maximum, ElementName=musicSlider}" Value="{Binding Value, ElementName=musicSlider}"/> + </StackPanel> + </Grid> + </Button> + <Rectangle Height="2" Margin="5"> + <Rectangle.Fill> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}" Opacity="0.25"/> + </Rectangle.Fill> + </Rectangle> + + <!--<Button HorizontalContentAlignment="Left" Margin="0,5" Click="Browser" Visibility="Collapsed"> + <StackPanel Orientation="Horizontal"> + <StackPanel> + <TextBlock Text="Experimental Browser" Foreground="{ThemeResource PhoneForegroundBrush}" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" FontWeight="Light" FontSize="21.333"/> + <TextBlock Text="Internet connection inactive" FontSize="10.667"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource TextBoxPlaceholderColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </StackPanel> + </Button>--> + + + + + + </StackPanel> + </ScrollViewer> + </Grid> + <Grid x:Name="DownloadsFragment" ManipulationMode="TranslateX" Visibility="Collapsed"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <ScrollViewer BorderBrush="{x:Null}" BorderThickness="0" ManipulationMode="TranslateY" IsRightTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False" Margin="0"> + <ScrollViewer.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.1"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="Black" Offset="1"/> + <GradientStop Offset="0.03"/> + <GradientStop Offset="0.97"/> + </LinearGradientBrush> + </ScrollViewer.Background> + <StackPanel> + <local:DownloadIndicator HorizontalAlignment="Stretch"/> + </StackPanel> + </ScrollViewer> + <Grid Grid.Row="1" Height="57"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <toolkit:WatermarkTextBox Foreground="{StaticResource PhoneBackgroundBrush}" TextWrapping="NoWrap" VerticalContentAlignment="Center" WatermarkText="url..." MinWidth="200" BorderThickness="0" Margin="0" FontSize="21.333" VerticalAlignment="Stretch" Background="{x:Null}" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" BorderBrush="{x:Null}"/> + <Button Grid.Column="1" MinWidth="20" Width="50" BorderBrush="{x:Null}" BorderThickness="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Foreground="#FFA04F4F" Background="{x:Null}"> + <TextBlock Text="q" FontFamily="Assets/Font/iconfont.ttf#iconfont"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Button> + </Grid> </Grid> - <Grid Width="310" Height="107" Background="{StaticResource PhoneDisabledBrush}"> - <TextBlock Margin="100,0,0,0" Text="Phone" FontSize="24" TextAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center"> - <TextBlock.Foreground> - <SolidColorBrush Color="White"/> - </TextBlock.Foreground> - </TextBlock> - <Ellipse Fill="{StaticResource PhoneInverseBackgroundBrush}" HorizontalAlignment="Left" Height="64" Margin="23,25,0,0" VerticalAlignment="Top" Width="64"/> - <Image Margin="43,28,245,20" Source="/Resources/Assets/Images/phone.png" OpacityMask="{StaticResource PhoneAccentBrush}"/> + </local:DrawerLayout> + + </Grid> + <Grid x:Name="WebBrowser" Visibility="Collapsed"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}" Opacity="0.9"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <StackPanel Orientation="Horizontal"> + <Button MinWidth="0" Content="l" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <Button MinWidth="0" Content="r" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + </StackPanel> + <TextBox x:Name="webAddressBar" Grid.Column="1" Margin="10"> + <TextBox.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </TextBox.Foreground> + <TextBox.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBox.Background> + </TextBox> + <Button Content="GO" HorizontalAlignment="Right" Grid.Column="1" Click="Button_Click"/> + </Grid> + <WebView x:Name="webView" Grid.Row="1"/> + </Grid> + </Grid> + </Grid> + <Grid x:Name="MediaFragment" Grid.RowSpan="2" RequestedTheme="Dark" RenderTransformOrigin="0,0"> + <Grid.RenderTransform> + <CompositeTransform TranslateX="600"/> + </Grid.RenderTransform> + <Grid x:Name="imageContainerMedia" VerticalAlignment="Stretch"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Grid.Background> + <Viewbox StretchDirection="Both" Stretch="Uniform"> + <MediaElement x:Name="mediaPlayer" AudioCategory="BackgroundCapableMedia" VerticalAlignment="Center"/> + </Viewbox> + <Grid VerticalAlignment="Stretch" Margin="0"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid x:Name="grid1" ManipulationDelta="mediaFragManipDelta" ManipulationCompleted="mediaFragManipCompleted" ManipulationMode="TranslateX" CacheMode="BitmapCache" Opacity="1"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Grid MinWidth="50" MinHeight="0" > + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Button > + <StackPanel Margin="10,0" Orientation="Horizontal"> + <StackPanel VerticalAlignment="Center" CacheMode="BitmapCache" x:Name="grid" Grid.Column="1" Margin="0"> + <TextBlock x:Name="SongName" Text="no media" TextWrapping="NoWrap" MinWidth="175" FontSize="18.667" VerticalAlignment="Center" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" Margin="0" HorizontalAlignment="Left" Foreground="White"/> + <TextBlock x:Name="SongArtist" Text="" FontSize="10.667" VerticalAlignment="Center" Margin="0" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" HorizontalAlignment="Left" Foreground="White"/> + </StackPanel> + </StackPanel> + </Button> </Grid> - <Grid toolkit:TiltEffect.SuppressTilt="True" Margin="0,0,0,0" Width="310" Height="142" Background="{StaticResource PhoneBorderBrush}"> - <Rectangle x:Name="rect_above" HorizontalAlignment="Left" Height="22" Margin="24,30,0,0" VerticalAlignment="Top" Width="56" RenderTransformOrigin="0.5,0.5"> - <Rectangle.Projection> - <PlaneProjection RotationX="-67" /> - </Rectangle.Projection> + <Button x:Name="button2" Grid.Column="1" MinWidth="0" Visibility="Collapsed" Content="c" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + </Grid> + <Grid x:Name="grid2" Grid.Row="1" Visibility="Visible" > + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid ManipulationMode="TranslateX" ManipulationDelta="mediaFragManipDelta" ManipulationCompleted="mediaFragManipCompleted"> + <TextBlock x:Name="musicArt" Text="y" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Assets/Font/iconfont.ttf#iconfont" /> + <Rectangle> + <Rectangle.Fill> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.7"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="Black" Offset="1"/> + <GradientStop Offset="0.5"/> + <GradientStop Offset="0.05" Color="{ThemeResource ContentDialogDimmingColor}"/> + <GradientStop Offset="0.95" Color="{ThemeResource ContentDialogDimmingColor}"/> + </LinearGradientBrush> + </Rectangle.Fill> </Rectangle> + <!--<ListView x:Name="MusicView" + ItemTemplate="{StaticResource RecentPlayTemplate}"> + <ListView.Background> + + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.75"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="Black" Offset="1"/> + <GradientStop Offset="0.05" Color="{ThemeResource ContentDialogDimmingColor}"/> + <GradientStop Offset="0.95" Color="{ThemeResource ContentDialogDimmingColor}"/> + </LinearGradientBrush> + </ListView.Background> - <Rectangle x:Name="dl" HorizontalAlignment="Left" Height="43" Margin="25,54,0,0" VerticalAlignment="Top" Width="54"/> - <Ellipse x:Name="pl" HorizontalAlignment="Left" Height="78" Margin="206,35,0,0" VerticalAlignment="Top" Width="90"/> - <Image HorizontalAlignment="Right" Height="112" Margin="0,12,127,18" VerticalAlignment="Center" Tap="Music_Tap" Width="82" Source="/Resources/Assets/Images/MusicBar.png"/> - <Image Tap="downloads_Tap" HorizontalAlignment="Left" Height="91" VerticalAlignment="Center" Width="84" Source="/Resources/Assets/Images/download.png" Margin="10,22,0,29" OpacityMask="{StaticResource PhoneBackgroundBrush}" Opacity="0.9"/> - <Image HorizontalAlignment="Right" Height="120" Margin="0,12,14,10" VerticalAlignment="Center" Tap="VideoLister" Width="90" Source="/Resources/Assets/Images/video.png"/> + </ListView>--> + </Grid> + <Grid VerticalAlignment="Bottom"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <ToggleButton MinWidth="50" Content="X" FontFamily="Assets/Font/iconfont.ttf#iconfont" Style="{StaticResource ToggleButtonStyle}" VerticalAlignment="Bottom" Margin="10,0,0,25"/> + <Border Grid.Column="1" x:Name="border" VerticalAlignment="Center" RenderTransformOrigin="0.5,1"> + <Border.RenderTransform> + <CompositeTransform ScaleY="0"/> + </Border.RenderTransform> + <Border.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.98"/> + </Border.Background> + <TextBlock x:Name="sliderTimer" Margin="30" Text="{Binding Text, ElementName=currentDuration}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Border> + <ToggleButton Content="Y" MinWidth="50" Grid.Column="2" FontFamily="Assets/Font/iconfont.ttf#iconfont" Style="{StaticResource ToggleButtonStyle}" Margin="0,0,10,25" HorizontalAlignment="Right" VerticalAlignment="Bottom"/> </Grid> - </ListBox> - <Rectangle Fill="{StaticResource PhoneChromeBrush}" Stroke="{StaticResource PhoneChromeBrush}" toolkit:TiltEffect.SuppressTilt="True" Margin="-7,0,0,677" RadiusY="8" RadiusX="8"/> - <TextBox x:Name="searchBox" HorizontalAlignment="Left" Height="76" Margin="10,7,0,0" TextWrapping="NoWrap" VerticalAlignment="Top" Width="221" Style="{StaticResource CurvedTextBox}"/> - <Button x:Name="SearchModule" Click="SearchModule_Click" toolkit:TiltEffect.IsTiltEnabled="True" HorizontalAlignment="Left" Height="76" Margin="231,7,0,0" VerticalAlignment="Top" Width="69" ClickMode="Press" Style="{StaticResource SearchButton}"> - <Button.OpacityMask> - <ImageBrush Stretch="Uniform" ImageSource="/Resources/Assets/Images/Search.png"/> - </Button.OpacityMask> - </Button> + <Grid Grid.Row="1" VerticalAlignment="Center"> + <StackPanel> + <Grid ManipulationMode="TranslateX" ManipulationStarted="musicSlider_ManipulationStarted" ManipulationDelta="musicSlider_ManipulationDelta" ManipulationCompleted="musicSlider_ManipulationCompleted"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <ProgressBar Value="0" Margin="10" x:Name="musicSlider" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="5"/> - </Grid> - </Border> - <Border Width="370" CacheMode="BitmapCache" Grid.Column="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Height="768" Canvas.Left="800"> - <Border.Background> - <ImageBrush ImageSource="/Resources/Assets/Wallpaper/bg1.jpg"/> - </Border.Background> - <Grid x:Name="music_bg"> - <Grid.Background> - <SolidColorBrush Color="{StaticResource PhoneSemitransparentColor}"/> - </Grid.Background> - <Rectangle HorizontalAlignment="Left" Height="335" Margin="20,14,0,0" VerticalAlignment="Top" Width="327" RadiusY="22" RadiusX="22" Fill="{StaticResource PhoneDisabledBrush}" Stroke="{StaticResource PhoneChromeBrush}"/> - <Rectangle x:Name="coverArt" HorizontalAlignment="Left" Height="316" Margin="30,24,0,0" VerticalAlignment="Top" Width="306" RadiusY="22" RadiusX="22"> - <Rectangle.Fill> - <ImageBrush ImageSource="/Resources/Assets/Images/headphone.png" Stretch="None"/> - </Rectangle.Fill> - </Rectangle> - <Button x:Name="music_reverse" Content="" HorizontalAlignment="Left" Height="97" Margin="30,358,0,0" VerticalAlignment="Top" Width="102" Style="{StaticResource Previous}"/> - <Button x:Name="music_forward" Content="" HorizontalAlignment="Left" Height="97" Margin="234,358,0,0" VerticalAlignment="Top" Width="102" Style="{StaticResource Forward}"/> - <Slider x:Name="music_slider" HorizontalAlignment="Left" Height="82" Margin="30,276,0,0" VerticalAlignment="Top" Width="306" Style="{StaticResource SliderStyle}"/> - <toolkit:LongListMultiSelector - x:Name="musicLists" - Margin="0,482,0,0" - ItemTemplate="{StaticResource File360MusicTemplate}" - IsGroupingEnabled="False"/> - <Button HorizontalAlignment="Left" Height="97" Margin="132,358,0,0" VerticalAlignment="Top" Width="102" Style="{StaticResource ButtonPlay}"/> + <TextBlock x:Name="currentDuration" Grid.Row="1" Text="--:--" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,5,0,5"/> + <TextBlock x:Name="mediaDuration" Text="--:--" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,5,10,5"/> + </Grid> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Button Content="6" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + <Button x:Name="playPause" Grid.Column="1" Content="5" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="PlayCurrent" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + <Button Content="4" Grid.Column="2" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + </Grid> + </Grid> + </StackPanel> + </Grid> </Grid> - </Border> - <Grid x:Name="grdCommands" CacheMode="BitmapCache" Grid.Column="1" Height="{Binding ActualHeight, ElementName=canvas}" Width="485" Canvas.Left="315" > - <toolkit:LongListMultiSelector - x:Name="sdlists" - ItemTemplate="{StaticResource File360ItemTemplate}" - IsGroupingEnabled="False" - GridCellSize="107,90" LayoutMode="Grid" Margin="15,194,10,0"/> - <TextBlock HorizontalAlignment="Left" DoubleTap="vault_button_DoubleTap" TextWrapping="Wrap" VerticalAlignment="Top" Height="26" Width="139" Margin="68,17,0,0" Foreground="{StaticResource PhoneForegroundBrush}" FontSize="24"> - <Run Foreground="{StaticResource PhoneForegroundBrush}" Text="FILE360"/> - <Run FontWeight="Bold" Foreground="{StaticResource PhoneAccentBrush}" Text="°"/> + </Grid> + </Grid> + </Grid> + </Grid> + <local:DialogBox Visibility="Collapsed" IsOpen="False" HeadingText="ARE YOU SURE?" ContentText="...are you sure you want to exit?" x:Name="DialogBox"/> + <ScrollViewer VerticalAlignment="Bottom" Visibility="Visible" Height="20"> + <Grid VerticalAlignment="Top"> + <Grid.Background> + <SolidColorBrush Color="Black"/> + </Grid.Background> + <TextBlock TextWrapping="Wrap" x:Name="statusMsg" FontSize="18" Text="Status Message" Foreground="White"/> + </Grid> + </ScrollViewer> + <Border x:Name="aiBorder" CornerRadius="8" Visibility="Collapsed" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,10,0,10" BorderThickness="2"> + <Border.BorderBrush> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Border.BorderBrush> + <Border.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </Border.Background> + <StackPanel Margin="1"> + <TextBlock x:Name="aiText" TextWrapping="Wrap" Text="Rename Operation failed" FontSize="15" Margin="10,5" FontFamily="Segoe WP Light" FontWeight="Bold"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + <TextBlock x:Name="aiSubText" TextWrapping="Wrap" Text="A file or folder can't contain any of the following characters" FontSize="15" Margin="10,5" FontFamily="Segoe WP Light"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </StackPanel> + </Border> + + <Grid x:Name="PictureDisplayer" Visibility="Collapsed"> + <Grid > + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <FlipView x:Name="PictureFlipView" Grid.RowSpan="2"/> + + <StackPanel Grid.Row="1" > + <StackPanel.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> + <GradientStop Color="#19000000"/> + <GradientStop Color="#F2000000" Offset="1"/> + </LinearGradientBrush> + </StackPanel.Background> + <TextBlock x:Name="picName" Margin="10,2" Text="pic(1).jpg" Style="{StaticResource GroupHeaderTextBlockStyle}" Foreground="White"/> + <TextBlock x:Name="picDate" Margin="10,2" Text="05/02/2015" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" Foreground="White"/> + </StackPanel> + </Grid> + </Grid> + <Grid x:Name="ProgressDialog" Visibility="Collapsed"> + <Grid.Background> + <SolidColorBrush Color="#99000000"/> + </Grid.Background> + + <Grid x:Name="SubFrameGrid" Visibility="Collapsed"> + <Grid.Background> + <SolidColorBrush Color="#99000000"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <TextBlock x:Name="SubFrameHeader" Text="" FontSize="21.333" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="15,0,0,0"/> + <Button Content="X" HorizontalAlignment="Right" Click="HelpPageClose" MinWidth="0" Margin="0,0,15,0"/> + <Frame Margin="15" Grid.Row="1" x:Name="SubFrame" Background="{x:Null}"/> + </Grid> + + + <Border x:Name="FileMoveDialog" CornerRadius="20" Margin="20,100" VerticalAlignment="Center" Visibility="Collapsed"> + <Border.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Border.Background> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid> + <TextBlock Margin="10" TextWrapping="Wrap" Text="Paste" Style="{StaticResource SubheaderTextBlockStyle}"/> + <Button Content="x" HorizontalAlignment="Right" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="CloseDialog"/> + </Grid> + <TextBlock Grid.Row="1" Margin="10" TextWrapping="Wrap" Text="swipe horizontally to switch modes : copy / move" FontSize="20"/> + <Grid Grid.Row="2"> + <FlipView x:Name="PasteFlipView"> + <FlipViewItem> + + <StackPanel Margin="10" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="O" TextAlignment="Center" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="40"/> + <TextBlock Text="copy" TextAlignment="Center"/> + </StackPanel> + </FlipViewItem> + <FlipViewItem> + + <StackPanel Margin="10" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="R" TextAlignment="Center" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="40"/> + <TextBlock Text="move" TextAlignment="Center"/> + </StackPanel> + </FlipViewItem> + </FlipView> + </Grid> + <TextBlock Grid.Row="3" Margin="10" TextWrapping="Wrap" Text="select file actions" FontSize="20"/> + <Grid Grid.Row="4" Margin="0,10,0,0"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Button HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{ThemeResource PhoneAccentBrush}" Click="OverwriteContents"> + <StackPanel> + <TextBlock Text="Overwrite" TextAlignment="Center"/> + <TextBlock TextWrapping="Wrap" Text="replaces existing contents" FontSize="10.667" TextAlignment="Center"/> + </StackPanel> + </Button> + <Button Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{ThemeResource PhoneAccentBrush}" Click="KeepBothFiles"> + <StackPanel> + <TextBlock Text="Keep Both" TextAlignment="Center"/> + <TextBlock TextWrapping="Wrap" Text="gives unique file name" FontSize="10.667" TextAlignment="Center"/> + </StackPanel> + </Button> + </Grid> + </Grid> + </Border> + + + <Grid Margin="15" x:Name="ProgInfoView" HorizontalAlignment="Stretch" Visibility="Collapsed"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <TextBlock Margin="25" TextWrapping="Wrap" Text="Please do not close this app during this operation." TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"/> + <TextBlock Margin="25" TextWrapping="Wrap" Text="This dialog will close automatically upon completion." TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="2"/> + <StackPanel Grid.Row="1" VerticalAlignment="Center"> + <StackPanel.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </StackPanel.Background> + <TextBlock Margin="15,5" HorizontalAlignment="Center" TextWrapping="Wrap"> + <Run x:Name="cmstatus" Text="copying "/> + <Run x:Name="progFileSource" FontWeight="Bold" Text="Vedhalam"/> + <Run Text=" to "/> + <Run x:Name="progFileDest" Text="D:" FontWeight="Bold"/> + <Run/> </TextBlock> - <TextBlock x:Name="nosd" Visibility="Collapsed" Style="{StaticResource PhoneTextLargeStyle}" Margin="10,173,0,0" TextWrapping="Wrap" Height="104" Width="460" TextAlignment="Center" Foreground="{StaticResource PhoneForegroundBrush}"> - <Span Foreground="{StaticResource PhoneForegroundBrush}" FontSize="32"> - <Run Text="no "/> - </Span> - <Span Foreground="{StaticResource PhoneAccentBrush}" FontSize="32" > - <Run Text="sdcard " FontWeight="Bold"/> - </Span> - <Span Foreground="{StaticResource PhoneForegroundBrush}" FontSize="32"> - <Run Text="found, please insert one to view files. "/> - </Span> + <ProgressBar x:Name="progBar" Margin="15,10" IsIndeterminate="True" VerticalAlignment="Stretch" Height="18"/> + <TextBlock Margin="0,5" x:Name="progText" HorizontalAlignment="Center"> + <Run x:Name="progCurrentSize" FontWeight="Bold" Text="25.3 "/> + <Run Text="/ "/> + <Run x:Name="progTotalSize" FontWeight="Bold" Text="45.2 "/> + <Run Text="mb"/> </TextBlock> - <TextBlock x:Name="sd" Text="sdcard" Style="{StaticResource PhoneTextLargeStyle}" Margin="24,49,17,0" TextWrapping="Wrap" VerticalAlignment="Top" Height="49" Width="439" FontSize="40" Foreground="{StaticResource PhoneForegroundBrush}" /> - <Rectangle HorizontalAlignment="Left" Height="40" Margin="74,124,0,0" VerticalAlignment="Top" Width="401" Fill="{StaticResource PhoneChromeBrush}"/> - <TextBlock x:Name="textBlock" TextWrapping="NoWrap" Height="40" FontFamily="Segoe WP Semibold" FontSize="24" Canvas.Left="500" Canvas.Top="120" Margin="94,124,10,0" VerticalAlignment="Top" Foreground="{StaticResource PhoneForegroundBrush}"/> - <Ellipse HorizontalAlignment="Left" Height="70" Margin="15,109,0,0" VerticalAlignment="Top" Width="74" Fill="{StaticResource PhoneChromeBrush}"/> - <Button x:Name="homeButton" toolkit:TiltEffect.IsTiltEnabled="True" Tap="sdcard_menu_Tap" Content="" HorizontalAlignment="Left" Margin="14,109,0,0" VerticalAlignment="Top" Width="74" BorderBrush="{x:Null}" Foreground="{x:Null}" Height="70" Style="{StaticResource MainBarButton}"> - <Button.Background> - <ImageBrush Stretch="Uniform" ImageSource="greyhome.png"/> - </Button.Background> - <Button.OpacityMask> - <ImageBrush Stretch="Uniform" ImageSource="/Resources/Assets/Images/home.png"/> - </Button.OpacityMask> - </Button> - <Rectangle Visibility="Collapsed" x:Name="Blurer" HorizontalAlignment="Left" Height="784" VerticalAlignment="Top" Width="490" Margin="-10,0,0,-88" Fill="{StaticResource PhoneSemitransparentBrush}"/> - <Button toolkit:TiltEffect.IsTiltEnabled="True" Click="OpenClose_Left" Margin="10,11,412,639" BorderBrush="{x:Null}" Foreground="{x:Null}" Style="{StaticResource SideMenuInitiater}"> - <Button.Background> - <ImageBrush ImageSource="/Resources/Assets/Images/Hamburger.png" Stretch="Uniform"/> - </Button.Background> - </Button> - <toolkit:Rating x:Name="rating" HorizontalAlignment="Left" Height="34" Margin="685,27,-330,0" VerticalAlignment="Top" Width="130" Background="{x:Null}"/> - <Button Click="OpenClose_Right" HorizontalAlignment="Left" Height="57" Margin="416,0,0,0" VerticalAlignment="Top" Width="59"/> - </Grid> - </Canvas> - </Canvas> - </Grid> + <Button Style="{StaticResource DialogBoxButton}" HorizontalAlignment="Stretch" Content="Cancel" FontFamily="Assets/Font/Custom/HelveticaNeue-Thin.otf#Helvetica Neue" Background="{ThemeResource PhoneAccentBrush}"/> + </StackPanel> + </Grid> + </Grid> -</phone:PhoneApplicationPage> -\ No newline at end of file + <Grid.ChildrenTransitions> + <TransitionCollection> + <EntranceThemeTransition FromVerticalOffset="400" FromHorizontalOffset="0"/> + </TransitionCollection> + </Grid.ChildrenTransitions> + </Grid> +</Page> diff --git a/File360/MainPage.xaml.cs b/File360/MainPage.xaml.cs @@ -1,644 +1,2604 @@ -using System; +// Copyright (c) Microsoft. All rights reserved. + +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; +using System; using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Navigation; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; -using File360.Resources; +using Windows.Phone.UI.Input; +using Windows.UI.Xaml.Media.Animation; +using System.Collections.ObjectModel; +using Windows.UI.ViewManagement; +using Windows.Storage; +using Windows.Media.Playback; using System.Threading.Tasks; -using Microsoft.Phone.Storage; +using TagLib; using System.IO; -using System.Collections; -using System.Windows.Media; -using Windows.Phone.Storage.SharedAccess; -using System.Data.Linq; -using Windows.Storage; -using System.Text; -using Windows.ApplicationModel; +using Windows.UI.Xaml.Media.Imaging; +using System.IO.Compression; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel.DataTransfer; +using Windows.Foundation; +using System.Linq; +using Windows.Storage.FileProperties; +using Coding4Fun.Toolkit.Controls; +using Windows.ApplicationModel.Activation; +using Windows.Storage.Streams; +using Windows.Storage.Pickers; +using Windows.Storage.AccessCache; using Windows.Phone.Devices.Notification; -using Windows.Phone.UI.Input; -using System.ComponentModel; -using System.Resources; -using System.Windows.Input; -using System.IO.IsolatedStorage; -using System.Windows.Media.Imaging; -using System.Windows.Documents; -using System.Windows.Media.Animation; -using Microsoft.Xna.Framework.Media; -using Microsoft.Xna.Framework; - - +using System.Runtime.InteropServices; +using Windows.Media; +using System.Text; namespace File360 { - public partial class MainPage : PhoneApplicationPage + public sealed partial class MainPage : Page, IFolderPickerContinuable { - List<sdlist> l = new List<sdlist>(); - List<musiclist> ml = new List<musiclist>(); - const string SETTINGS_PAGE_URI = "/SettingsPage.xaml"; - const string VAULT_PAGE_URI = "/VaultPage.xaml"; - public string btns; - public static string Hbtns; - ExternalStorageFolder temp; - TextBox pb; - IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; - internal static BitmapImage bm = new BitmapImage(new Uri("pack://application:/Resources/Assets/Wallpaper/bg1.jpg", UriKind.Absolute)); + + + + //[DllImport("KernelBase.dll")] + //public static extern void KernelDll(); + #region Variables + + public bool GridType = true; + public ItemsControl musicItemsControlGrid = null; + + #region SettingsVaribles + ApplicationDataContainer settings = ApplicationData.Current.LocalSettings; + StorageFolder folder; + BitmapImage niy = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); + ImageSource musicCoverArt = null; + IReadOnlyList<IStorageItem> Items; + + ObservableCollection<sdlist> sd = new ObservableCollection<sdlist>(); + ObservableCollection<MusicList> music = new ObservableCollection<MusicList>(); + ObservableCollection<PictureList> picture = new ObservableCollection<PictureList>(); + ObservableCollection<VideoList> video = new ObservableCollection<VideoList>(); + + public IStorageFolder CurrentFolder = null; + ScrollViewer gridScrollViewer; + TextBlock txtBlockRe = null; + ItemsControl itemsControlGrid = null; + List<IStorageItem> SelectedItems = new List<IStorageItem>(); + bool InZipRoot = false; + + #region LibraryVariables + public bool IsVideoLibraryOpen = false; + public bool IsPictureLibraryOpen = false; + public bool IsMusicLibraryOpen = false; + #endregion + + bool singleTap = true; + + App app = (App)Application.Current; + bool IsSDLoading = true; + bool IsPhoneLoading = true; + private bool IsMediaOpen = false; + private DispatcherTimer musicDispatcher = new DispatcherTimer(); + + #region FileOperationVariables + bool IS_FILE_MOVE = false; + #endregion + + #region MusicVariables + SystemMediaTransportControls systemControls; + string title = String.Empty; + string artist = String.Empty; + #endregion + + + #endregion + public MainPage() { - InitializeComponent(); - VisualStateManager.GoToState(this, "Normal", false); - #region InitialKeyUpdater - if (appSettings.Count == 0) + + this.InitializeComponent(); + SDGridView.ItemsSource = sd; + SideMenu.InitializeDrawerLayout(); + Addresser.InitializeComponent(); + #region MusicPlayerInitialization + + + // Hook up app to system transport controls. + + systemControls = SystemMediaTransportControls.GetForCurrentView(); + + systemControls.ButtonPressed += async (sender, args) => + { + switch (args.Button) + + { + + case SystemMediaTransportControlsButton.Play: + + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + + { + mediaPlayer.Play(); + + }); + + break; + + case SystemMediaTransportControlsButton.Pause: + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => + + { + + mediaPlayer.Pause(); + + }); + + break; + + default: + + break; + + } + }; + + // Register to handle the following system transpot control buttons. + + systemControls.IsPlayEnabled = true; + + systemControls.IsPauseEnabled = true; + #endregion + musicCoverArt = niy; + #region SettingsSerializer + if (settings.Values.Count == 0) + { + settings.Values["userName"] = "User"; + app.UserName = (string)settings.Values["userName"]; + settings.Values["itemType"] = 1; + GridType = (int)settings.Values["itemType"] == 1; + + settings.Values["musicPlayer"] = "1"; + settings.Values["picturesPlayer"] = "1"; + settings.Values["videoPlayer"] = "1"; + settings.Values["ebookViewer"] = "1"; + settings.Values["musThumbnail"] = "0"; + settings.Values["vidThumbnail"] = "0"; + settings.Values["picThumbnail"] = "0"; + } + else + { + app.UserName = (string)settings.Values["userName"]; + GridType = (int)settings.Values["itemType"] == 1; + } + ChangeTemplate(); + #endregion + #region Orientation + Window.Current.SizeChanged += Current_SizeChanged; + #endregion + #region MediaPlayerDispatcherInitialization + musicDispatcher.Interval = TimeSpan.FromMilliseconds(1000); + + mediaPlayer.MediaFailed += async (s, t) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + UpdateMusic("no media", "", TimeSpan.FromSeconds(0)); + musicSlider.Value = 0; + playPause.Content = "5"; + currentDuration.Text = "--:--"; + mediaDuration.Text = "--:--"; + if (musicDispatcher.IsEnabled) + musicDispatcher.Stop(); + }); + }; + + mediaPlayer.MediaEnded += async (s, t) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + UpdateMusic("no media", "", mediaPlayer.NaturalDuration.TimeSpan); + musicSlider.Value = 0; + playPause.Content = "5"; + currentDuration.Text = "--:--"; + mediaDuration.Text = "--:--"; + musicDispatcher.Stop(); + }); + }; + musicDispatcher.Tick += (s, t) => + { + musicSlider.Value = mediaPlayer.Position.TotalSeconds; + currentDuration.Text = mediaPlayer.Position.Minutes + ":" + mediaPlayer.Position.Seconds; + + }; + #endregion + #region CriticalStartup + HideStatusBar(); + Loaded += MainPageLoaded; + HardwareButtons.BackPressed += HardwareButtons_BackPressed; + #endregion + } + + + #region FileOperationsNotifier + + private void PasteBarSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (PasteFlipView.SelectedIndex == 0) + IS_FILE_MOVE = false; + else IS_FILE_MOVE = true; + } + #endregion + + #region MainEvents + private void MainPageLoaded(object sender, RoutedEventArgs e) + { + SDLoad.Begin(); + PhoneLoad.Begin(); + GetSDRoot(); + gridScrollViewer = SDGridView.GetFirstLogicalChildByType<ScrollViewer>(false); + gridScrollViewer.VerticalScrollMode = ScrollMode.Auto; + LoadMemoryData(); + //SettingsTab.Height = Window.Current.Bounds.Width * 2 / 3; + PasteFlipView.SelectionChanged += PasteBarSelectionChanged; + AppearancePanel.Begin(); + SubFrame.ContentTransitions = new TransitionCollection { new PaneThemeTransition { Edge = EdgeTransitionLocation.Bottom } }; + + } + private async void HideStatusBar() + { + StatusBar statusBar = Windows.UI.ViewManagement.StatusBar.GetForCurrentView(); + + // Hide the status bar + await statusBar.HideAsync(); + } + public void OpenDialog() + { + if (!this.DialogBox.IsOpen) + { + this.DialogBox.IsOpen = true; + this.DialogBox.LeftButtonHandler += ExitApplicaton; + } + } + #region Navigaion Methods + protected override void OnNavigatedTo(NavigationEventArgs e) + { + + } + #endregion + + #region BackButtonHandler + public async void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e) + { + e.Handled = true; + if (PictureDisplayer.Visibility == Visibility.Visible) + { + PictureFlipView.Items.Clear(); + PictureDisplayer.Visibility = Visibility.Collapsed; + } + else if (FileMoveDialog.Visibility == Visibility.Visible) + { + CloseDialog(2); + } + else if (SubFrameGrid.Visibility == Visibility.Visible) + { + CloseDialog(0); + } + else if (IsMediaOpen) + { + MediaOpenRev.Begin(); + IsMediaOpen = false; + } + + else if (SortMenu.Visibility == Visibility.Visible) + { + SortMenu.Visibility = Visibility.Collapsed; + } + else if (WebBrowser.Visibility == Visibility.Visible) + { + WebBrowser.Visibility = Visibility.Collapsed; + } + else if (this.SideMenu.IsDrawerOpen == true) + { + this.SideMenu.CloseDrawer(); + } + else if (SDGridView.SelectionMode == ListViewSelectionMode.Multiple) + { + UnselectAll(); + } + else if (InZipRoot) + { + GetFilesAndFolder(CurrentFolder); + InZipRoot = false; + } + else if (!this.Addresser.Root) + { + try + { + int curFoldCharNm = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); + StorageFolder sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(curFoldCharNm)); + this.Addresser.RemoveLast(); + GetFilesAndFolder(sf); + } + catch { } + } + else + { + OpenDialog(); + } + } + #endregion + + #endregion + #region Music + #region MusicEvents + //private void MusicSegmentChanged(object sender, RangeBaseValueChangedEventArgs e) + //{ + // // if (!(mediaPlayer.CurrentState == MediaPlayerState.Closed)) + // // { + // // if (mediaPlayer.CanSeek) + // // { + // // mediaPlayer.Position = TimeSpan.FromSeconds(e.NewValue); + // // } + // // } + // // else + // // { + // // musicSlider.Value = 0; + // // } + //} + internal async void PlayMedia(IStorageFile selectedItem) + { + + mediaPlayer.Source = new Uri(selectedItem.Path); + + mediaPlayer.MediaOpened += async (s, t) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate + { + musicSlider.Maximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; + playPause.Content = "8"; + UpdateMusic(title, artist, mediaPlayer.NaturalDuration.TimeSpan); + musicDispatcher.Start(); + }); + }; + mediaPlayer.Play(); + + #region TagLib AlbumArt + Tag tags = null; + var fileStream = await selectedItem.OpenStreamForReadAsync(); + try + { + var tagFile = TagLib.File.Create(new StreamFileAbstraction(selectedItem.Name, fileStream, fileStream)); + if (selectedItem.FileType == ".mp3" || selectedItem.FileType == ".wma") + tags = tagFile.GetTag(TagTypes.Id3v2); + else if (selectedItem.FileType == ".m4a") + tags = tagFile.GetTag(TagLib.TagTypes.MovieId); + try + { + title = tags.Title; + } + catch (NullReferenceException) + { + title = selectedItem.Name; + } + try + { + artist = String.Concat(tags.Performers); + } + catch (NullReferenceException) + { + artist = String.Empty; + } + if (tags.Pictures != null) + { + try + { + MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); + WriteableBitmap wm = null; + var wwmV = wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); + await wwmV.ContinueWith(delegate + { +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + { + ms.Dispose(); + ImageBrush im = new ImageBrush(); + im.ImageSource = wwmV.Result; + im.Stretch = Stretch.UniformToFill; + musicArt.Visibility = Visibility.Collapsed; + imageContainerMedia.Background = im; + }); + }); + } + + catch (IndexOutOfRangeException) + { + imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; + musicArt.Visibility = Visibility.Visible; + } + catch (UnauthorizedAccessException) + { + } + #endregion + } + else + { + imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; + musicArt.Visibility = Visibility.Visible; + } + } + catch + { + imageContainerMedia.Background = (SolidColorBrush)App.Current.Resources["PhoneChromeBrush"]; + musicArt.Visibility = Visibility.Visible; + } + MusicStatusUpdate(); + } + + private void UpdateMusic(string songName, string songArtist, TimeSpan duration) + { + try + { + SongName.Text = songName; + SongArtist.Text = songArtist; + mediaDuration.Text = duration.Minutes + ":" + duration.Seconds; + } + catch + { + SongName.Text = "no media"; + SongArtist.Text = ""; + mediaDuration.Text = "--:--"; + } + } + #endregion + #region MusicMenu + public void MusicMenuClick() + { + if (IsMediaOpen) + { + MediaOpenRev.Begin(); + IsMediaOpen = false; + //OpenMusic.Content = "u"; + return; + } + else if (!IsMediaOpen) + { + //BitmapImage bm = new BitmapImage(new Uri("ms-appx:///SampleData/SampleDataSource1/SampleDataSource1_Files/image01.png", UriKind.RelativeOrAbsolute)); + //var wb = await WinRTXamlToolkit.Imaging.WriteableBitmapFromBitmapImageExtension.FromBitmapImage(bm); + //ColorSampler cs = new ColorSampler(); + //WriteableBitmap wd = wb; + //MusicDock.Background = new SolidColorBrush(cs.GetPixel(wd)); + MediaOpen.Begin(); + IsMediaOpen = true; + //OpenMusic.Content = "d"; + return; + } + } + + private void PlayCurrent(object sender, RoutedEventArgs e) + { + if (mediaPlayer.CurrentState == MediaElementState.Playing) + { + mediaPlayer.Pause(); + playPause.Content = "5"; + DurationBlink.Begin(); + } + else if (mediaPlayer.CurrentState == MediaElementState.Paused) + { + mediaPlayer.Play(); + playPause.Content = "8"; + DurationBlink.Stop(); + } + + else if (mediaPlayer.CurrentState == MediaElementState.Stopped) + { + KnownFolders.MusicLibrary.GetFilesAsync().Completed += (es,st)=> + { + mediaPlayer.Source = new Uri(es.GetResults().First().Path); + mediaPlayer.Play(); + playPause.Content = "8"; + }; + + } + + } + #endregion + #endregion + + #region MediaMaipulations + private void mediaFragManipDelta(object sender, ManipulationDeltaRoutedEventArgs e) + { + if (e.Cumulative.Translation.X > 0) + MediaFragment.RenderTransform = new CompositeTransform { TranslateX = e.Cumulative.Translation.X }; + else if (e.Delta.Translation.X < -25) + { + MediaOpen.Begin(); + IsMediaOpen = true; + } + } + + private void mediaFragManipCompleted(object sender, ManipulationCompletedRoutedEventArgs e) + { + var transform = (CompositeTransform)MediaFragment.RenderTransform; + if (transform == null) return; + var up = transform.TranslateX; + + var snapLimit = ActualHeight / 1.1; + + // Get init position of _listFragment + var initialPosition = ActualHeight; + + // If current left coordinate is smaller than snap limit, close drawer + if (Math.Abs(initialPosition - up) < snapLimit) + { + MediaOpenRev.Begin(); + IsMediaOpen = false; + } + else + { + MediaOpen.Begin(); + IsMediaOpen = true; + } + } + #endregion + + #region NotifyHelpers + public void NotifyUser(string info) + { + statusMsg.Text = info; + } + + public void AI(string header, string msg) + { + aiText.Text = header; + aiSubText.Text = msg; + aiBorder.Visibility = Visibility.Visible; + DispatcherTimer dt = new DispatcherTimer(); + dt.Interval = new TimeSpan(0, 0, 4); + dt.Tick += delegate + { + aiBorder.Visibility = Visibility.Collapsed; + dt.Stop(); + }; + dt.Start(); + } + #endregion + #region Pictures + + + public void DisplayPhoto(IStorageFile selectedItem) + { + FlipViewItem fvi = new FlipViewItem(); + ScrollViewer scv = new ScrollViewer(); + Image im = new Image(); + BitmapImage bi = new BitmapImage(new Uri(selectedItem.Path)); + im.Source = bi; + scv.Content = im; + fvi.Content = scv; + PictureFlipView.Items.Add(fvi); + PictureDisplayer.Visibility = Visibility.Visible; + } + + #endregion + + + #region MainGrid + public void CloseDrawer() + { + SideMenu.CloseDrawer(); + } + + + + private void ChangeTemplate() + { + if (!GridType) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; + gridList.ContentText = "list"; + gridList.ImageText = "b"; + settings.Values["itemType"] = 0; + GridType = false; + } + else + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; + gridList.ContentText = "grid"; + gridList.ImageText = "N"; + settings.Values["itemType"] = 1; + GridType = true; + } + } + + private async void GetSDRoot() + { + + if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FolderTokenSettingsKey")) + { + string token = (string)ApplicationData.Current.LocalSettings.Values["FolderTokenSettingsKey"]; + // if we do, use it to get the StorageFolder instance + folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); + this.Addresser.Reset(); + try + { + GetFilesAndFolder(folder); + RootFolder.Text = "3"; + IsMusicLibraryOpen = false; + IsVideoLibraryOpen = false; + IsPictureLibraryOpen = false; + } + catch (Exception ex) + { + ShowStatus(ex.Message); + //AI("no sdcard is detected", 2); + } + } + } + + + #region UserFolderCommunication + + + private void Reset() + { + SDGridView.ItemsSource = null; + sd.Clear(); + } + + + #endregion + #region OrientationHelpers + private void Current_SizeChanged(object sender, Windows.UI.Core.WindowSizeChangedEventArgs e) + { + //var b = Window.Current.Bounds; + VisualStateManager.GoToState(this, "Portrait", false); + } + public bool IsVertical() + { + if (Window.Current.Bounds.Height > Window.Current.Bounds.Width) return true; + else return false; + } + #endregion + #endregion + + + + #region ExitApplication + + private void ExitApplicaton(object sender, RoutedEventArgs e) + { + Application.Current.Exit(); + } + #endregion + #region FileLister + public async void GetFilesAndFolder(IStorageFolder anyFolder) + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async delegate + { + ShowStatus(anyFolder.Path); + if (anyFolder != null) + { + Items = null; + sd.Clear(); + SDGridView.ItemsSource = null; + CurrentFolder = anyFolder; + Items = await anyFolder.GetItemsAsync(); + if (Items.Count == 0) + { + CurrentFolder = anyFolder; + headerText.Text = anyFolder.Name; + sd.Clear(); + switch (anyFolder.Path) + { + case @"D:\Documents": + //display documents missing sad face + break; + case @"D:\Music": + //display music missing sad face + break; + case @"D:\Videos": + //display videos missing sad face + break; + case @"D:\Pictures": + //display pictures missing sad face + break; + default: + EmptyFolderStack.Visibility = Visibility.Visible; + //default options for other empty folders + break; + + } + return; + } + //if (GridType) + // SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + //else SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + else + { + EmptyFolderStack.Visibility = Visibility.Collapsed; + foreach (IStorageItem Data in Items) + { + if (Data.IsOfType(StorageItemTypes.Folder)) + { + IStorageFolder Folder; + Folder = (IStorageFolder)Data; + //IReadOnlyList<IStorageItem> item = await Folder.GetItemsAsync(); + headerText.Text = anyFolder.Name; + if (CurrentFolder.Path == @"D:\") + { + if (Folder.Name == "Videos") sd.Add(new sdlist(Folder.Name, "o", "")); + else if (Folder.Name == "Pictures") sd.Add(new sdlist(Folder.Name, "f", "")); + else if (Folder.Name == "Music") sd.Add(new sdlist(Folder.Name, "g", "")); + else if (Folder.Name == "Downloads") sd.Add(new sdlist(Folder.Name, "e", "")); + else if (Folder.Name == "Documents") sd.Add(new sdlist(Folder.Name, "n", "")); + else sd.Add(new sdlist(Folder.Name, "h", "")); + } + else sd.Add(new sdlist(Folder.Name, "h", "")); + } + if (Data.IsOfType(StorageItemTypes.File)) + { + IStorageFile File = (IStorageFile)Data; + string fn = File.Name; + string fi = File.FileType; + #region FileTypes + if (fi == ".mp3") + { + if (((string)settings.Values["musThumbnail"] == "1")) + { + + #region Mp3 + + //var fileStream = await File.OpenStreamForReadAsync(); + //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); + //var tags = tagFile.GetTag(TagTypes.Id3v2); + //try + //{ + // if (tags.Pictures != null) + // { + // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); + // WriteableBitmap wm = null; + // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); + + // ms.Dispose(); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = wwm; + // im.Stretch = Stretch.UniformToFill; + // sd.Add(new sdlist(fn, im, "")); + // #endregion + // } + //} + //catch (IndexOutOfRangeException ex) + //{ + // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = bm; + // sd.Add(new sdlist(fn, im, "")); + //} + //catch (Exception ex) + //{ + // AI(ex.Message, 2); + //} + #endregion + } + else sd.Add(new sdlist(fn, "m")); + + } + else if (fi == ".wma") + { + if (((string)settings.Values["musThumbnail"] == "1")) + { } + #region wma-work in progress + + //var fileStream = await File.OpenStreamForReadAsync(); + //var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); + //var tags = tagFile.GetTag(TagTypes.Id3v2); + //try + //{ + // if (tags.Pictures != null) + // { + // MemoryStream ms = new MemoryStream(tags.Pictures[0].Data.Data); + // WriteableBitmap wm = null; + // WriteableBitmap wwm = await wm.FromStream(ms, Windows.Graphics.Imaging.BitmapPixelFormat.Unknown); + + // ms.Dispose(); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = wwm; + // im.Stretch = Stretch.UniformToFill; + // sd.Add(new sdlist(fn, im, "")); + // #endregion + // } + //} + //catch (IndexOutOfRangeException ex) + //{ + // BitmapImage bm = new BitmapImage(new Uri("ms-appx:///Assets/IMG-20150528-WA0003.jpg", UriKind.Absolute)); + // ImageBrush im = new ImageBrush(); + // im.ImageSource = bm; + // sd.Add(new sdlist(fn, im, "")); + //} + //catch (Exception ex) + //{ + // AI(ex.Message, 2); + //} + #endregion + else sd.Add(new sdlist(fn, "m")); + + } + else if (fi == ".docx") + { + sd.Add(new sdlist(fn, "k")); + + } + else if (fi == ".png") + { + if (((string)settings.Values["picThumbnail"] == "1")) + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + else sd.Add(new sdlist(fn, "p")); + } + else if (fi == ".jpg") + { + if (((string)settings.Values["picThumbnail"] == "1")) + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + else sd.Add(new sdlist(fn, "p")); + } + else if (fi == ".mp4") + { + if (((string)settings.Values["vidThumbnail"] == "1")) + { + try + { + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + } + catch + { + sd.Add(new sdlist(fn, "v")); + } + } + else sd.Add(new sdlist(fn, "v")); + } + else if (fi == ".mov") + { + if (((string)settings.Values["vidThumbnail"] == "1")) + { + try + { + await GetThumbnailImageAsync((StorageFile)File, ThumbnailMode.ListView); + } + catch + { + sd.Add(new sdlist(fn, "v")); + } + } + else sd.Add(new sdlist(fn, "v")); + } + else if (fi == ".zip") + { + sd.Add(new sdlist(fn, "z")); + + } + else if (fi == ".cs") + { + sd.Add(new sdlist(fn, "c")); + } + else if (fi == ".pdf") + { + sd.Add(new sdlist(fn, "b")); + } + else if (fi == ".vcf") + { + sd.Add(new sdlist(fn, "l")); + } + else if (fi == ".doc") + { + sd.Add(new sdlist(fn, "k")); + } + else if (fi == ".xlx") + { + sd.Add(new sdlist(fn, "j")); + } + else if (fi == ".xlsx") + { + sd.Add(new sdlist(fn, "j")); + } + else if (fi == ".7z") + { + sd.Add(new sdlist(fn, "7")); + } + else if (fi == ".xml") + { + sd.Add(new sdlist(fn, "x")); + } + else if (fi == ".txt") + { + sd.Add(new sdlist(fn, "a")); + } + else if (fi == ".rar") + { + sd.Add(new sdlist(fn, "r")); + } + else + { + sd.Add(new sdlist(fn, "i")); + + } + #endregion + } + } + } + } + //else AI("This folder contains no items", 2); + SDGridView.ItemsSource = sd; + }); + } + + #endregion + #region LateralMenu + private void Menu_Click(object sender, RoutedEventArgs e) + { + if (SideMenu.IsDrawerOpen == false) + { + SideMenu.OpenDrawer(); + } + else + { + SideMenu.CloseDrawer(); + } + } + #endregion + #region ListBox + Object preObj = null; + Object curObj = null; + SideBarMenuButton stkChildren = null; + + private void SideMenuLeft_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + ListBox lBox = (ListBox)sender; + curObj = lBox.SelectedItem; + stkChildren = (SideBarMenuButton)curObj; + if (stkChildren.ContentText == "Settings") return; + if (preObj != null) + { + SideBarMenuButton preSBMB = (SideBarMenuButton)preObj; + preSBMB.BackgroundColor = null; + } + preObj = curObj; + stkChildren.BackgroundColor = (SolidColorBrush)Application.Current.Resources["PhoneAccentBrush"]; + } + #endregion + #region MenuHandlers + #region SDCard + private async void SDCardEnumerator(object sender, RoutedEventArgs e) + { + if (IsSDLoading) + { + textBlock.Visibility = Visibility.Visible; + } + if (!IsSDLoading) + { + StorageFolder folder; + // check if we already have a token + if (ApplicationData.Current.LocalSettings.Values.ContainsKey("FolderTokenSettingsKey")) + { + string token = (string)ApplicationData.Current.LocalSettings.Values["FolderTokenSettingsKey"]; + // if we do, use it to get the StorageFolder instance + folder = await StorageApplicationPermissions.FutureAccessList.GetFolderAsync(token); + this.Addresser.Reset(); + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate + { + IsMusicLibraryOpen = false; + IsVideoLibraryOpen = false; + IsPictureLibraryOpen = false; + headerText.Text = "SD Card"; + RootFolder.Text = "3"; + if (GridType) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; + } + else + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; + } + GetFilesAndFolder(folder); + }); + } + else + { + // if we don't, this is the first time the code is being executed; user has to give + // us a consent to use the folder + FolderPicker folderPicker = new FolderPicker(); + folderPicker.FileTypeFilter.Add("*"); + folderPicker.PickFolderAndContinue(); + + } + } + } + #endregion + #region Phone + private void PhoneStorageEnumerator(object sender, TappedRoutedEventArgs e) + { + + } + #endregion + #region Pictures + private async void PicturesLibraryTapped(object sender, RoutedEventArgs e) + { + IsPictureLibraryOpen = true; + var picturesAlbums = await KnownFolders.PicturesLibrary.GetItemsAsync(); + if (picturesAlbums.Count != 0) + { + sd.Clear(); + SDGridView.ItemsSource = null; + headerText.Text = "Pictures"; + RootFolder.Text = "M"; + this.Addresser.Reset(); + SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + Items = picturesAlbums; + foreach (var pFo in picturesAlbums) + { + try + { + if (pFo.IsOfType(StorageItemTypes.Folder)) + await GetThumbnailImageAsync((StorageFolder)pFo, ThumbnailMode.PicturesView); + else await GetThumbnailImageAsync((StorageFile)pFo, ThumbnailMode.PicturesView); + } + catch (Exception ex) + { + ShowStatus(ex.Message + ex.Source + ex.StackTrace); + } + + } + SDGridView.ItemsSource = sd; + } + else + { + AI("no pictures", "there no pictures in your phone"); + } + } + + private void SettingsPage(object sender, RoutedEventArgs e) + { + + if (!Frame.Navigate(typeof(SettingsPage))) + { + throw new Exception("Failed to create scenario list"); + } + } + + #endregion + #region Video + private async void VideoLibraryTapped(object sender, RoutedEventArgs e) + { + Items = await KnownFolders.VideosLibrary.GetItemsAsync(); + if (Items.Count != 0) + { + sd.Clear(); + SDGridView.ItemsSource = null; + SDGridView.ItemTemplate = VideosView; + SDGridView.ItemsPanel = GridViewItemsPanel; + this.Addresser.Reset(); + RootFolder.Text = ")"; + headerText.Text = "Videos"; + IsVideoLibraryOpen = true; + foreach (var pFo in Items) + { + try + { + if (pFo.IsOfType(StorageItemTypes.Folder)) + await GetThumbnailImageAsync((StorageFolder)pFo, ThumbnailMode.VideosView); + else await GetThumbnailImageAsync((StorageFile)pFo, ThumbnailMode.VideosView); + } + catch (Exception) + { + //AI(ex.Message + ex.Source + ex.StackTrace, 2); + } + + } + SDGridView.ItemsSource = sd; + } + else + { + AI("no videos", "there no videos in your phone"); + } + } + + private void ChangeListSource(int listType) + { + SDGridView.ItemsSource = null; + switch (listType) + { + + case 0: + sd.Clear(); + SDGridView.ItemsSource = sd; + break; + case 1: + music.Clear(); + SDGridView.ItemsSource = music; + IsMusicLibraryOpen = true; + break; + case 2: + picture.Clear(); + SDGridView.ItemsSource = picture; + IsPictureLibraryOpen = true; + break; + case 3: + video.Clear(); + SDGridView.ItemsSource = video; + IsVideoLibraryOpen = true; + break; + default: + throw new NotImplementedException(); + } + } + + #region Music + private async void MusicLibraryClick(object sender, RoutedEventArgs e) + { + var musicFolder = KnownFolders.MusicLibrary; + IReadOnlyList<IStorageItem> musicItems = await musicFolder.GetItemsAsync(); + ChangeListSource(1); + if (musicItems.Count != 0) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; + RootFolder.Text = "y"; + this.Addresser.Reset(); + Items = musicItems; + IsMusicLibraryOpen = true; + headerText.Text = "Music"; + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, async delegate + { + foreach (var pFo in musicItems) + { + try + { + if (pFo.IsOfType(StorageItemTypes.Folder)) + { + music.Add(new MusicList(pFo.Name, 0));//0 is passed as dummy count, the dummy value should be replaced by the folder's children count. + } + else + { + + IStorageFile File = (IStorageFile)pFo; + if (File.FileType == ".mp3") + { + var fileStream = await File.OpenStreamForReadAsync(); + var tagFile = TagLib.File.Create(new StreamFileAbstraction(File.Name, fileStream, fileStream)); + var tags = tagFile.GetTag(TagTypes.Id3v2); + try + { + if (tags.Pictures != null) + { + WriteableBitmap wm = null; + + try + { + wm.FromByteArray(tags.Pictures[0].Data.Data); + } + catch (UnauthorizedAccessException) + { + + } + catch (NullReferenceException) + { + + } + ImageBrush im = new ImageBrush(); + im.ImageSource = wm; + im.Stretch = Stretch.UniformToFill; + music.Add(new MusicList(tags.Title, tags.AlbumArtists[0], tags.Album, im)); + #endregion + } + } + catch (IndexOutOfRangeException) + { + music.Add(new MusicList(pFo.Name, tags.AlbumArtists[0], tags.Album, null)); + } + } + else if (File.FileType == ".m4a") + music.Add(new MusicList(pFo.Name,"","",null)); + } + } + catch (Exception ex) + { + ShowStatus(ex.Message + ex.Source + ex.StackTrace); + } + } + }); + } + else + { + ShowStatus("no music content can be found :("); + } + } + + private async Task GetThumbnailImageAsync(StorageFile item, ThumbnailMode mode) + { + if (item == null) + return; + using (var thumbnail = await item.GetThumbnailAsync(mode)) + { + if (thumbnail != null) + { + sd.Add(new sdlist(item.DisplayName, thumbnail, "")); + return; + } + } + } + //public async Task<bool> IsEmpty(IStorageFolder directory) + //{ + // var items = await directory.GetItemsAsync(); + // ShowStatus(directory.Path); + // bool isEmpty = items.Count == 0; + // if (isEmpty) + // { + // //Storyboard story = new Storyboard(); + // switch (directory.Path) + // { + + // case "D:/Documents": + // //EmptyFolderStack.Visibility = Visibility.Visible; + // break; + // case "D:/Music": + // EmptyFolderStack.Visibility = Visibility.Visible; + // break; + // default: + // EmptyFolderStack.Visibility = Visibility.Visible; + // break; + + + // } + // return true; + // } + // else + // { + // EmptyFolderStack.Visibility = Visibility.Collapsed; + // return false; + // } + //} + #endregion + + #endregion + #region ImageHelpers + public async Task GetThumbnailImageAsync(StorageFolder item, ThumbnailMode mode) + { + if (item == null) + return; + using (var thumbnail = await item.GetThumbnailAsync(mode)) + { + if (thumbnail != null /*&& thumbnail.Type == ThumbnailType.Image && thumbnail.Type == ThumbnailType.Icon*/) + { + sd.Add(new sdlist(item.DisplayName, thumbnail, "2")); + return; + } + } + } + #endregion + + #region UI + public double PicHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 3; + else return Window.Current.Bounds.Width / 3; + } + } + public double PicWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2; + else return Window.Current.Bounds.Height / 2; + } + } + public double ImageHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 3.5; + else return Window.Current.Bounds.Width / 3.5; + } + } + public double ImageWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2.2; + else return Window.Current.Bounds.Height / 2.2; + } + } + public double Space + { + get { return Window.Current.Bounds.Height / 600; } + } + public double GridHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 4; + else return Window.Current.Bounds.Width / 4; + } + } + public double GridWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 3; + else return Window.Current.Bounds.Height / 3; + } + } + + #endregion + #region FolderPicker + + + public void ContinueFolderPicker(FolderPickerContinuationEventArgs args) + { + folder = args.Folder; + if (folder != null) + { + try + { + var id = folder.FolderRelativeId; + if (folder != null) + { + if (folder.IsOfType(StorageItemTypes.Folder)) + { + this.Addresser.Reset(); + } + // after that, we can store the folder for future reuse + string pickedFolderToken = StorageApplicationPermissions.FutureAccessList.Add(folder); + ApplicationData.Current.LocalSettings.Values.Add("FolderTokenSettingsKey", pickedFolderToken); + StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); + string mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(folder); + IsMusicLibraryOpen = false; + IsVideoLibraryOpen = false; + IsPictureLibraryOpen = false; + headerText.Text = "SD Card"; + RootFolder.Text = "3"; + if (GridType) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; + } + else + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; + } + GetFilesAndFolder(folder); + } + else + { + return; + } + } + catch + { return; } + } + } + #endregion + #region FolderInteraction + private void FolderHold(object sender, HoldingRoutedEventArgs e) + { + if (SDGridView.SelectionMode == ListViewSelectionMode.None) + { + //folderHold.Begin(); + operationBar.Visibility = Windows.UI.Xaml.Visibility.Visible; + //compressButton.Visibility = Visibility.Visible; + //sortButton.Visibility = Visibility.Collapsed; + operationBarNormal.Visibility = Visibility.Collapsed;//Start Cool Animations also :) + + SDGridView.SelectionMode = ListViewSelectionMode.Multiple; + //int index = SDGridView.Items.IndexOf(((sdlist)((ItemsControl)sender).DataContext)); + //SDGridView.SelectedIndex = index; + } + } + + private void ItemDoubleTap(object sender, DoubleTappedRoutedEventArgs e) + { + if (SDGridView.SelectionMode == ListViewSelectionMode.Multiple) return; + singleTap = false; + Rename((ItemsControl)sender); + + } + + private async void Rename(ItemsControl itemsControl) + { + itemsControlGrid = itemsControl; + var sdl = await CurrentFolder.GetItemsAsync(); + int index = SDGridView.Items.IndexOf(((sdlist)itemsControlGrid.DataContext)); + var selectedItem = sdl.ElementAt(index); + SDGridView.SelectedIndex = index; + Windows.UI.Xaml.Controls.TextBox txtBoxRe = new Windows.UI.Xaml.Controls.TextBox(); + txtBoxRe.TextAlignment = TextAlignment.Center; + //txtBoxRe.Margin = new Thickness(0, 4, 0, 4); + StackPanel stk = itemsControlGrid.GetFirstLogicalChildByType<StackPanel>(false); + txtBlockRe = stk.GetLogicalChildrenByType<TextBlock>(false).ElementAt(0); + stk.Children.Add(txtBoxRe); + txtBlockRe.Visibility = Visibility.Collapsed; + txtBoxRe.GotFocus += (s, ex) => + { + try + { + txtBoxRe.Select(0, txtBoxRe.Text.LastIndexOf('.')); + } + catch + { + txtBoxRe.SelectAll(); + } + }; + txtBoxRe.LostFocus += (s, ex) => + { + txtBoxRe.Visibility = Visibility.Collapsed; + txtBlockRe.Visibility = Visibility.Visible; + }; + txtBoxRe.KeyDown += async (s, ex) => + { + if (ex.Key == Windows.System.VirtualKey.Enter) + { + if (txtBoxRe.Text == String.Empty) + { + txtBoxRe.Visibility = Visibility.Collapsed; + txtBlockRe.Visibility = Visibility.Visible; + } + else if (txtBoxRe.Text.Contains("/") || txtBoxRe.Text.Contains(@"\")) + { + AI("Cannot rename File or Folder", @"A file or folder can't contain any of the following characters: \ / : * ? " + "\"" + " < > |"); + } + else + { + try + { + txtBlockRe.Text = txtBoxRe.Text; + txtBoxRe.Visibility = Visibility.Collapsed; + txtBlockRe.Visibility = Visibility.Visible; + await selectedItem.RenameAsync(txtBoxRe.Text, NameCollisionOption.GenerateUniqueName); + } + catch + { + AI("Rename operation failed", "Cannot rename this file at the moment"); + } + GetFilesAndFolder(CurrentFolder); + } + } + }; + txtBoxRe.Focus(FocusState.Programmatic); + } + + private async void GridItemClick(object sender, TappedRoutedEventArgs e) + { + e.Handled = true; + ShowStatus(SDGridView.SelectedIndex.ToString()); + if (SDGridView.SelectedIndex != -1) return; + singleTap = true; + await Task.Delay(200); + itemsControlGrid = (ItemsControl)sender; + //if (!singleTap) return; + int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); + IStorageItem selectedItem = Items.ElementAt(index); + if (selectedItem.IsOfType(StorageItemTypes.Folder)) + { + #region Folder PopOut Animation + //Storyboard story = new Storyboard(); + //itemsControlGrid.RenderTransform = new CompositeTransform(); + //itemsControlGrid.RenderTransformOrigin = new Point(0.5, 0.5); + //CircleEase ease = new CircleEase(); + //DoubleAnimation opacity = new DoubleAnimation { From = 1, To = 0, Duration = TimeSpan.FromMilliseconds(100), EasingFunction=ease }; + //Storyboard.SetTargetProperty(opacity, "(UIElement.Opacity)"); + //Storyboard.SetTarget(opacity, itemsControlGrid); + //DoubleAnimation scaleX = new DoubleAnimation { From = 1, To = 6, Duration = TimeSpan.FromMilliseconds(100), EasingFunction = ease }; + //Storyboard.SetTargetProperty(scaleX, "(UIElement.RenderTransform).(CompositeTransform.ScaleX)"); + //Storyboard.SetTarget(scaleX, itemsControlGrid); + //DoubleAnimation scaleY = new DoubleAnimation { From = 1, To = 6, Duration = TimeSpan.FromMilliseconds(100), EasingFunction = ease }; + //Storyboard.SetTargetProperty(scaleY, "(UIElement.RenderTransform).(CompositeTransform.ScaleY)"); + //Storyboard.SetTarget(scaleY, itemsControlGrid); + //story.Children.Add(scaleX); + //story.Children.Add(scaleY); + //story.Children.Add(opacity); + //story.Begin(); + #endregion + Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); + if (IsVideoLibraryOpen || IsPictureLibraryOpen) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; + } + else if (IsMusicLibraryOpen) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; + } + GetFilesAndFolder((IStorageFolder)selectedItem); + return; + } + else if (selectedItem.IsOfType(StorageItemTypes.File)) + { + ExecuteFile((IStorageFile)selectedItem); + return; + } + } + + private async void VideoItemClick(object sender, TappedRoutedEventArgs e) + { + singleTap = true; + await Task.Delay(200); + itemsControlGrid = (ItemsControl)sender; + if (!singleTap) return; + int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); + IStorageItem selectedItem = Items.ElementAt(index); + if (selectedItem.IsOfType(StorageItemTypes.Folder)) + { + Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; + + GetFilesAndFolder((IStorageFolder)selectedItem); + return; + } + else if (selectedItem.IsOfType(StorageItemTypes.File)) + { + ExecuteFile((IStorageFile)selectedItem); + return; + } + } + private async void PictureItemClick(object sender, TappedRoutedEventArgs e) + { + singleTap = true; + await Task.Delay(200); + itemsControlGrid = (ItemsControl)sender; + if (!singleTap) return; + int index = SDGridView.Items.IndexOf((sdlist)(itemsControlGrid.DataContext)); + IStorageItem selectedItem = Items.ElementAt(index); + if (selectedItem.IsOfType(StorageItemTypes.Folder)) + { + Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["PicturesView"]; + + GetFilesAndFolder((IStorageFolder)selectedItem); + return; + } + else if (selectedItem.IsOfType(StorageItemTypes.File)) + { + ExecuteFile((IStorageFile)selectedItem); + return; + } + } + private async void MusicItemClick(object sender, TappedRoutedEventArgs e) + { + singleTap = true; + await Task.Delay(200); + musicItemsControlGrid = (ItemsControl)sender; + if (!singleTap) return; + int index = SDGridView.Items.IndexOf((sdlist)(musicItemsControlGrid.DataContext)); + IStorageItem selectedItem = Items.ElementAt(index); + if (selectedItem.IsOfType(StorageItemTypes.Folder)) + { + Addresser.Address(((IStorageFolder)selectedItem).Name, ((IStorageFolder)selectedItem).Path); + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["MusicsView"]; + + GetFilesAndFolder((IStorageFolder)selectedItem); + return; + } + else if (selectedItem.IsOfType(StorageItemTypes.File)) + { + ExecuteFile((IStorageFile)selectedItem); + return; + } + } + #endregion + #region MusicStatusUpdater(work-in progress) + public async void MusicStatusUpdate() + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + Grid grd = null; + if (!IsMusicLibraryOpen) return; + grd = musicItemsControlGrid.GetFirstLogicalChildByType<Grid>(false); + if (grd.Children.Count == 2) + { + Border brdB = grd.GetFirstLogicalChildByType<Border>(false); + grd.Children.Remove(brdB); + return; + } + Border brd = new Border(); + brd.CornerRadius = new CornerRadius(150); + TextBlock txt = new TextBlock(); + brd.VerticalAlignment = VerticalAlignment.Center; + brd.HorizontalAlignment = HorizontalAlignment.Center; + brd.Background = new SolidColorBrush(Windows.UI.Color.FromArgb(200, 0, 0, 0)); + txt.FontFamily = new FontFamily("Assets/Font/iconFont.ttf#iconfont"); + txt.Margin = new Thickness(20); + txt.FontSize = 50; + txt.Foreground = new SolidColorBrush(Windows.UI.Color.FromArgb(255, 255, 255, 255)); + txt.VerticalAlignment = VerticalAlignment.Center; + txt.HorizontalAlignment = HorizontalAlignment.Center; + txt.Text = "2"; + brd.Child = txt; + grd.Children.Add(brd); + }); + } + #endregion + #region FileExecution + private async void ExecuteFile(IStorageFile selectedItem) + { + + if (selectedItem.FileType == ".zip") + { + //var temps = await ApplicationData.Current.TemporaryFolder.GetItemsAsync(); + //foreach (var temp in temps) + //{ + // await temp.DeleteAsync(); + //} + //temps = await ApplicationData.Current.TemporaryFolder.GetItemsAsync(); + //if (temps.Count == 0) + GetFilesAndFolder((IStorageFolder)await OpenZip(selectedItem)); + } + else if (selectedItem.FileType == ".mp3") + { + if ((string)settings.Values["musicPlayer"] == "1") + PlayMedia(selectedItem); + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else if (selectedItem.FileType == ".wma") + { + if ((string)settings.Values["musicPlayer"] == "1") + PlayMedia(selectedItem); + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else if (selectedItem.FileType == ".m4a") + { + if ((string)settings.Values["musicPlayer"] == "1") + PlayMedia(selectedItem); + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else if (selectedItem.FileType == ".mp4") + { + if ((string)settings.Values["videosPlayer"] == "1") + { + PlayVideo(selectedItem); + } + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else if (selectedItem.FileType == ".mov") + { + if ((string)settings.Values["videosPlayer"] == "1") + { + PlayVideo(selectedItem); + } + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else if (selectedItem.FileType == ".jpg") + { + if ((string)settings.Values["picturesPlayer"] == "1") + { + DisplayPhoto(selectedItem); + } + else await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + else + { + await Windows.System.Launcher.LaunchFileAsync(selectedItem); + } + } + + private void PlayVideo(IStorageFile selectedItem) + { + this.Frame.Navigate(typeof(VideoPage),selectedItem); + //mediaPlayer.Source = new Uri(selectedItem.Path); + //musicArt.Text = ""; + //mediaPlayer.MediaOpened += async (s, t) => + //{ + // await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, delegate + // { + // musicSlider.Maximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; + // playPause.Content = "8"; + // UpdateMusic(title, artist, mediaPlayer.NaturalDuration.TimeSpan); + // musicDispatcher.Start(); + // }); + //}; + //mediaPlayer.Play(); + //var fileStream = await selectedItem.OpenStreamForReadAsync(); + //MusicStatusUpdate(); + } + + #endregion + #region ZipFileHelpers + public async Task<StorageFolder> OpenZip(IStorageFile compressedFile) + { + try + { + //using (MemoryStream zipMemoryStream = new MemoryStream(WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(compressedFile)))) + //{ + // using (ZipArchive zipArchive = new ZipArchive(zipMemoryStream, ZipArchiveMode.Read)) + // { + // var files = zipArchive.Entries; + // foreach (var file in files) + // { + // try + // { + // var uncompressedFol = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(file.Name, CreationCollisionOption.ReplaceExisting); + // } + // catch + // { + // var uncompressedFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(file.Name, CreationCollisionOption.ReplaceExisting); + // } + + // return ApplicationData.Current.TemporaryFolder; + // } + // return null; + // } + //} + var zipArchive = new System.IO.Compression.ZipArchive(await compressedFile.OpenStreamForReadAsync()); + + foreach (var entry in zipArchive.Entries) + { + using (var entryStream = entry.Open()) + { + if (true)//IsFileBinary(entry.Name) ? + { + using (BinaryReader br = new BinaryReader(entryStream)) + { + //var fileSize = await reader.LoadAsync((uint)entryStream.Length); + var fileSize = br.BaseStream.Length; + byte[] read = br.ReadBytes((int)fileSize); + + var binaryContent = read; + } + } + } + } + using (BinaryReader b = new BinaryReader(await compressedFile.OpenStreamForReadAsync())) + { + // Do not do this. + while (b.PeekChar() != -1) + { + int v = b.ReadInt32(); + } + } + } + catch (Exception ex) + { + ShowStatus(ex.Message); + return null; + } + return null; + } + + byte[] CentralDirImage = {50,01,05,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00}; + + public List<string> ReadCentralDir() + { + if (this.CentralDirImage == null) + throw new InvalidOperationException("Central directory currently does not exist"); + + List<string> result = new List<string>(); + + for (int pointer = 0; pointer < this.CentralDirImage.Length; ) + { + uint signature = BitConverter.ToUInt32(CentralDirImage, pointer); + if (signature != 0x02014b50) + break; + + bool encodeUTF8 = (BitConverter.ToUInt16(CentralDirImage, pointer + 8) & 0x0800) != 0; + ushort method = BitConverter.ToUInt16(CentralDirImage, pointer + 10); + uint modifyTime = BitConverter.ToUInt32(CentralDirImage, pointer + 12); + uint crc32 = BitConverter.ToUInt32(CentralDirImage, pointer + 16); + uint comprSize = BitConverter.ToUInt32(CentralDirImage, pointer + 20); + uint fileSize = BitConverter.ToUInt32(CentralDirImage, pointer + 24); + ushort filenameSize = BitConverter.ToUInt16(CentralDirImage, pointer + 28); + ushort extraSize = BitConverter.ToUInt16(CentralDirImage, pointer + 30); + ushort commentSize = BitConverter.ToUInt16(CentralDirImage, pointer + 32); + uint headerOffset = BitConverter.ToUInt32(CentralDirImage, pointer + 42); + uint headerSize = (uint)( 46 + filenameSize + extraSize + commentSize); + + Encoding encoder = encodeUTF8 ? Encoding.UTF8 : Encoding.Unicode; + + string zfe = new string(); + zfe.Method = (Compression)method; + zfe.FilenameInZip = encoder.GetString(CentralDirImage, pointer + 46, filenameSize); + zfe.FileOffset = GetFileOffset(headerOffset); + zfe.FileSize = fileSize; + zfe.CompressedSize = comprSize; + zfe.HeaderOffset = headerOffset; + zfe.HeaderSize = headerSize; + zfe.Crc32 = crc32; + zfe.ModifyTime = DosTimeToDateTime(modifyTime); + if (commentSize > 0) + zfe.Comment = encoder.GetString(CentralDirImage, pointer + 46 + filenameSize + extraSize, commentSize); + + result.Add(zfe); + pointer += (46 + filenameSize + extraSize + commentSize); + } + + return result; + } + + + public async Task<StorageFile> CreateZip(StorageFile file) + { + if (CurrentFolder != null) + { + try + { + using (MemoryStream zipMemoryStream = new MemoryStream()) + { + using (System.IO.Compression.ZipArchive zipArchive = new System.IO.Compression.ZipArchive(zipMemoryStream, ZipArchiveMode.Create)) + { + try + { + byte[] buffer = WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(file)); + ZipArchiveEntry entry = zipArchive.CreateEntry(file.Name); + using (Stream entryStream = entry.Open()) + { + await entryStream.WriteAsync(buffer, 0, buffer.Length); + } + GetFilesAndFolder(CurrentFolder); + } + catch (Exception ex) + { + ShowStatus(ex.Message); + } + } + + // Created new file to store compressed files + var compressedFileName = file.Name + ".zip"; + StorageFile zipFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(compressedFileName, CreationCollisionOption.GenerateUniqueName); + using (IRandomAccessStream zipStream = await zipFile.OpenAsync(FileAccessMode.ReadWrite)) + { + // Write compressed data from memory to file + using (Stream outstream = zipStream.AsStreamForWrite()) + { + byte[] buffer = zipMemoryStream.ToArray(); + outstream.Write(buffer, 0, buffer.Length); + outstream.Flush(); + return zipFile; + } + } + } + } + catch (Exception ex) + { + ShowStatus(ex.Message); + return null; + } + } + else + { + ShowStatus("Error! This is not a valid folder"); + return null; + } + } + #endregion + #region BottomBarmenuEventHandlers + private void GridListChange(object sender, RoutedEventArgs e) + { + if (GridType) + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["ListViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["ListFoldersView"]; + gridList.ContentText = "list"; + gridList.ImageText = "b"; + GridType = false; + } + else + { + SDGridView.ItemsPanel = (ItemsPanelTemplate)Resources["GridViewItemsPanel"]; + SDGridView.ItemTemplate = (DataTemplate)Resources["GridFoldersView"]; + gridList.ContentText = "grid"; + gridList.ImageText = "N"; + GridType = true; + } + } + private void SelectAll(object sender, RoutedEventArgs e) + { + SDGridView.SelectionMode = ListViewSelectionMode.Multiple; + SDGridView.SelectAll(); + operationBar.Visibility = Visibility.Visible; + operationBarNormal.Visibility = Visibility.Collapsed; + //folderHold.Begin(); + } + private void selectBox_Unchecked(object sender, RoutedEventArgs e) + { + UnselectAll(); + } + public void UnselectAll() + { + SDGridView.SelectionMode = ListViewSelectionMode.None; + operationBar.Visibility = Visibility.Collapsed; + operationBarNormal.Visibility = Visibility.Visible; + } + #endregion + #region SDGridViewSelectionChanged + private void SDGridViewSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (SDGridView.SelectedIndex == -1) { - appSettings.Add("Shaker","Off"); - appSettings.Save(); - appSettings.Add("Passer","Off"); - appSettings.Save(); - appSettings.Add("PasswordValue", "2580"); - appSettings.Save(); + //operationBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed; + //operationBarNormal.Visibility = Visibility.Visible; + //headerText.Visibility = Windows.UI.Xaml.Visibility.Visible; + //folderHoldRev.Begin(); + SDGridView.SelectionMode = ListViewSelectionMode.None; + //SDGridView.IsItemClickEnabled = true; + return; } - #endregion - #region ThemeChecker - //Visibility isVisible = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"]; - //if (isVisible == System.Windows.Visibility.Visible) - //{ + else { return; } + } + #endregion - //} - //else - //{ - //} - #endregion - StateHelper(); - WallpaperChanger(bm); - MusicStateCreator(); + + #region FileSortingMethods + + private void OpenSortMenu(object sender, RoutedEventArgs e) + { + OpenSortMenuAnim.Begin(); + //ToggleMenu(SortMenu); } - #region ContextMenu + private void ToggleMenu(Panel element) + { + if (element.Visibility == Visibility.Visible) + element.Visibility = Visibility.Collapsed; + else element.Visibility = Visibility.Visible; + } + private void SortMenuItemClick(object sender, RoutedEventArgs e) + { + Button bt = (Button)sender; + string buttonName = bt.Content.ToString(); + if (buttonName == "Name") + { + Sort(0); + } + else if (buttonName == "Type") + { + Sort(1); + } + else if (buttonName == "Size") + { + Sort(2); + } + else if (buttonName == "Date") + { + Sort(3); + } + SortMenu.Visibility = Visibility.Collapsed; + } - private void vault_button_Tap(object sender, System.Windows.Input.GestureEventArgs e) + public void Sort(int sortType) { - Button b = (Button)sender; - Hbtns = (b.Content).ToString(); + try + { + switch (sortType) + { + case 0: + sd.OrderBy(o => o.Name); + break; + case 1: + sd.OrderBy(o => o.Image); + break; + case 2: + sd.OrderBy(o => o.Name); + break; + case 3: + sd.OrderBy(o => o.Name); + break; + } + } + catch (ArgumentNullException) + { + + } } - private void Copy_Click(object sender, RoutedEventArgs e) + #endregion + private void ListBoxSelectionChanged(object sender, SelectionChangedEventArgs e) { - MessageBox.Show("Copied To Clipboard"); + if (stkChildren != null && stkChildren.ContentText == "Settings") return; + this.Addresser.Reset(); + sd.Clear(); + SDGridView.ItemsSource = null; + headerText.Text = String.Empty; } + private void PhoneRefreshTapped(object sender, TappedRoutedEventArgs e) + { - private void Cut_Click(object sender, RoutedEventArgs e) + } + private void PhoneEnumerator(object sender, RoutedEventArgs e) { - MessageBox.Show("Ready to be Pasted"); + FolderPicker fp = new FolderPicker(); + fp.PickFolderAndContinue(); + if (IsPhoneLoading) + { + phoneWarning.Visibility = Visibility.Visible; + } } - private void Delete_Click(object sender, RoutedEventArgs e) + private Task LoadMemoryData() { - MessageBox.Show("File Couldn't be deleted"); + textBlock.Visibility = Visibility.Collapsed; + phoneWarning.Visibility = Visibility.Collapsed; + IStorageItem sf = ApplicationData.Current.LocalFolder; + + var properties = sf.GetBasicPropertiesAsync().Completed += (es, t) => + { + es.GetResults().RetrievePropertiesAsync(new[] { "System.FreeSpace" }).Completed += (ex, tx) => + { + var freeSpace = ex.GetResults()["System.FreeSpace"]; +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + { + float freeSpaceGB = (float)Double.Parse((freeSpace.ToString())) / 1000000000; + FreeSpace.Text = Math.Round(freeSpaceGB, 2).ToString(); + sdProgbar.Maximum = 16.00; + sdProgbar.Value = 16.00 - freeSpaceGB; + IsSDLoading = false; + IsPhoneLoading = false; + SDLoad.Stop(); + symbolIcon.Visibility = Visibility.Collapsed; + PhoneLoad.Stop(); + symbolIcon1.Visibility = Visibility.Collapsed; + }); + }; + }; + + return null; } - private void Hide_Click(object sender, RoutedEventArgs e) + private void AddFile(object sender, RoutedEventArgs e) { - MenuItem m = (MenuItem)sender; - sdlists.ItemsSource = l; + CurrentFolder.CreateFileAsync("New File", CreationCollisionOption.GenerateUniqueName).Completed += (es,t) => + { +#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate +#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed + { + GetFilesAndFolder(CurrentFolder); + }); + }; } + private void AddZip(object sender, RoutedEventArgs e) + { + InputPrompt ip = new InputPrompt(); + ip.Completed += (async (ex, t) => + { + StorageFile sf = await CurrentFolder.CreateFileAsync(t.Result + ".zip", CreationCollisionOption.GenerateUniqueName); + if (sf != null && CreateZip(sf).IsCompleted) + { - #endregion + GetFilesAndFolder(CurrentFolder); + } + }); + ip.Title = "Enter file name"; + ip.Show(); + } - #region FileLister - async public void StateHelper() + private void AddFolder(object sender, RoutedEventArgs e) + { + InputPrompt ip = new InputPrompt(); + ip.Completed += (async (ex, t) => + { + StorageFolder sf = await CurrentFolder.CreateFolderAsync(t.Result, CreationCollisionOption.GenerateUniqueName); + GetFilesAndFolder(CurrentFolder); + }); + ip.Title = "Enter folder name"; + ip.Show(); + } + private async void DeleteItem(object sender, RoutedEventArgs e) { - ExternalStorageDevice sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault(); - if (sdCard != null) + var sdl = SDGridView.SelectedItems; + foreach (var sdli in sdl) { - ExternalStorageFolder sdrootFolder = sdCard.RootFolder; - temp = sdrootFolder; - var folder = await sdrootFolder.GetFoldersAsync(); - var files = await sdrootFolder.GetFilesAsync(); - foreach(ExternalStorageFolder currentChildFolder in folder) + try { - l.Add(new sdlist(currentChildFolder.Name, "/Resources/Assets/Images/folder.png")); + var si = (sdlist)sdli; + IStorageItem selectedItem = Items.ElementAt(sd.IndexOf(si)); + await selectedItem.DeleteAsync(); + sd.Remove(si); } - foreach (ExternalStorageFile currentChildFile in files) + catch (Exception ex) { - if (currentChildFile.Name.EndsWith(".pdf")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/pdf.png")); - if (currentChildFile.Name.EndsWith(".svg")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/svg.png")); - if (currentChildFile.Name.EndsWith(".mkv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/mkv.png")); - if (currentChildFile.Name.EndsWith(".rar")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/rar.png")); - if (currentChildFile.Name.EndsWith(".csv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/csv.png")); - if (currentChildFile.Name.EndsWith(".avi")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/avi.png")); - if (currentChildFile.Name.EndsWith(".7z")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/7z.png")); - + AI("Cannot Delete File", "Cannot delete file because the file may be locked"); + ShowStatus(ex.Message); } } + //GetFilesAndFolder(CurrentFolder); + } - else + private void RenameItem(object sender, RoutedEventArgs e) + { + Rename((ItemsControl)sender); + } + + List<StorageFile> clipboard = new List<StorageFile>(); + private void CutItems(object sender, RoutedEventArgs e) + { + clipboard.Clear(); + var sdl = SDGridView.SelectedItems; + foreach (var sdli in sdl) { - nosd.Visibility = System.Windows.Visibility.Visible; + try + { + var si = (sdlist)sdli; + IStorageItem selectedItem = Items.ElementAt(sd.IndexOf(si)); + if (selectedItem.IsOfType(StorageItemTypes.File)) + { + StorageFile sf = (StorageFile)selectedItem; + + clipboard.Add(sf); + } + + } + catch (Exception ex) + { + ShowStatus(ex.Message); + AI("Cannot add to clipboard",ex.Message); + } + } - sdlists.ItemsSource = l; - } - async private void folderTap_Click(object sender, System.Windows.Input.GestureEventArgs e) + + #region ShowStatus + public void ShowStatus(string info) { + NotifyUser(info); + } + #endregion - StackPanel sp = (StackPanel)sender; - TextBlock btn = (TextBlock)sp.FindName("folderTap"); - btns = btn.Text; - if (btns.EndsWith(".7z") || btns.EndsWith(".avi") || btns.EndsWith(".mkv")) + private void PasteItem(object sender, RoutedEventArgs e) + { + OpenDialog(2); + } + private void OverwriteContents(object sender, RoutedEventArgs e) + { + FileMoveDialog.Visibility = Visibility.Collapsed; + ProgInfoView.Visibility = Visibility.Visible; + int clipCount = 0; + if ((clipCount = clipboard.Count) != 0) { - if (btns.EndsWith(".7z")) - { - MessageBox.Show("It's a 7-zip File"); - } - if (btns.EndsWith(".avi")) + progFileDest.Text = CurrentFolder.Name; + progTotalSize.Text = clipCount.ToString(); + if (IS_FILE_MOVE)//move { - MessageBox.Show("It's a avi File"); + cmstatus.Text = "moving"; + try + { + foreach (var item in clipboard) + { + progFileSource.Text = item.Name; + progCurrentSize.Text = clipboard.IndexOf(item).ToString(); + var tb = item.MoveAsync(CurrentFolder, item.Name, NameCollisionOption.ReplaceExisting); + tb.Completed += async (i, s) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + ProgInfoView.Visibility = Visibility.Collapsed; + ProgressDialog.Visibility = Visibility.Collapsed; + }); + }; + } + GetFilesAndFolder(CurrentFolder); + } + catch (Exception ex) + { + AI("Error copying file", ex.Message); + } } - if (btns.EndsWith(".mkv")) + else//copy { - MessageBox.Show("It's a mkv File"); + cmstatus.Text = "copying"; + try + { + foreach (var item in clipboard) + { + progFileSource.Text = item.Name; + progCurrentSize.Text = clipboard.IndexOf(item).ToString(); + var tb = item.CopyAsync(CurrentFolder, item.Name, NameCollisionOption.ReplaceExisting); + tb.Completed += async (i, s) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + ProgInfoView.Visibility = Visibility.Collapsed; + ProgressDialog.Visibility = Visibility.Collapsed; + }); + }; + } + GetFilesAndFolder(CurrentFolder); + } + catch (Exception ex) + { + AI("Error copying file", ex.Message); + } } } - else + } + + private void KeepBothFiles(object sender, RoutedEventArgs e) + { + FileMoveDialog.Visibility = Visibility.Collapsed; + ProgInfoView.Visibility = Visibility.Visible; + int clipCount = 0; + if ((clipCount = clipboard.Count) != 0) { - var temps = await temp.GetFoldersAsync(); - l.Clear(); - foreach (ExternalStorageFolder subTemp in temps) + progFileDest.Text = CurrentFolder.Name; + progTotalSize.Text = clipCount.ToString(); + if (IS_FILE_MOVE)//move { - if (btns == subTemp.Name) + cmstatus.Text = "moving"; + try { - temp = subTemp; - textBlock.Text = subTemp.Path; - sd.Text = subTemp.Name; - var subtemps = await subTemp.GetFoldersAsync(); - var files = await subTemp.GetFilesAsync(); - l.Clear(); - l.Add(new sdlist("back", "/Resources/Assets/Images/back.png")); - foreach (ExternalStorageFolder subsTemp in subtemps) + foreach (var item in clipboard) { - l.Add(new sdlist(subsTemp.Name, "/Resources/Assets/Images/folder.png")); + progFileSource.Text = item.Name; + progCurrentSize.Text = clipboard.IndexOf(item).ToString(); + var tb = item.MoveAsync(CurrentFolder, item.Name, NameCollisionOption.GenerateUniqueName); + tb.Completed += async (i, s) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + ProgInfoView.Visibility = Visibility.Collapsed; + ProgressDialog.Visibility = Visibility.Collapsed; + }); + }; } - foreach (ExternalStorageFile currentChildFile in files) + GetFilesAndFolder(CurrentFolder); + } + catch (Exception ex) + { + AI("Error copying file", ex.Message); + } + } + else//copy + { + cmstatus.Text = "copying"; + try + { + foreach (var item in clipboard) { - if (currentChildFile.Name.EndsWith(".pdf")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/pdf.png")); - if (currentChildFile.Name.EndsWith(".svg")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/svg.png")); - if (currentChildFile.Name.EndsWith(".mkv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/mkv.png")); - if (currentChildFile.Name.EndsWith(".rar")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/rar.png")); - if (currentChildFile.Name.EndsWith(".csv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/csv.png")); - if (currentChildFile.Name.EndsWith(".avi")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/avi.png")); - if (currentChildFile.Name.EndsWith(".7z")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/7z.png")); + progFileSource.Text = item.Name; + progCurrentSize.Text = clipboard.IndexOf(item).ToString(); + var tb = item.CopyAsync(CurrentFolder, item.Name, NameCollisionOption.GenerateUniqueName); + tb.Completed += async (i, s) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + ProgInfoView.Visibility = Visibility.Collapsed; + ProgressDialog.Visibility = Visibility.Collapsed; + }); + }; } + GetFilesAndFolder(CurrentFolder); + } + catch (Exception ex) + { + AI("Error copying file", ex.Message); } } } - sdlists.ItemsSource = l; } - #endregion - - #region AppBarButtons - - - void NewFolder_Click(object sender, EventArgs e) + #region InternetBrowser + private void Browser(object sender, RoutedEventArgs e) { - l.Add(new sdlist("New Folder", "/Resources/Assets/Images/folder.png")); - sdlists.ItemsSource = l; + WebBrowser.Visibility = Visibility.Visible; } - - private void MultiSelect_Click(object sender, EventArgs e) + private void Button_Click(object sender, RoutedEventArgs e) { - if (sdlists.IsSelectionEnabled == false) + try { - sdlists.IsSelectionEnabled = true; + webView.Navigate(new Uri(webAddressBar.Text)); } - if (sdlists.IsSelectionEnabled == true) + catch { - sdlists.IsSelectionEnabled = false; + webView.Navigate(new Uri("https://www.google.com/")); } } - - private void Settings_Click(object sender, EventArgs e) + #endregion + #region FileShare + private void ShareContent(object sender, RoutedEventArgs e) { - NavigationService.Navigate(new Uri(SETTINGS_PAGE_URI, UriKind.Relative)); + DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); + dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(ShareStorageItemsHandler); + // If the user clicks the share button, invoke the share flow programatically. + DataTransferManager.ShowShareUI(); } - - - #endregion - + private void ShareStorageItemsHandler(DataTransferManager sender, DataRequestedEventArgs e) + { + DataRequest request = e.Request; + request.Data.Properties.Title = "File360"; + request.Data.Properties.Description = "files & folders"; - #region BackButtonControl + // Because we are making async calls in the DataRequested event handler, + // we need to get the deferral first. + DataRequestDeferral deferral = request.GetDeferral(); - protected override void OnBackKeyPress(CancelEventArgs e) - { - if (textBlock.Text == null) - { - e.Cancel = false; - } - if (textBlock.Text != null) - { - l.Clear(); - StateHelper(); - btns = null; - e.Cancel = true; - sd.Text = "sdcard"; - } - if (sdlists.IsSelectionEnabled == false) - { - e.Cancel = false; - } - if (sdlists.IsSelectionEnabled == true) + // Make sure we always call Complete on the deferral. + try { - sdlists.IsSelectionEnabled = false; - e.Cancel = true; - } - } - #endregion + var sdl = SDGridView.SelectedItems; + foreach (var sdli in sdl) + { + try + { + var si = (sdlist)sdli; + SelectedItems.Add(Items.ElementAt(sd.IndexOf(si))); + } + catch (Exception ex) + { + ShowStatus(ex.Message); + } + } - #region HiddenVault - private void vault_button_DoubleTap(object sender, System.Windows.Input.GestureEventArgs e) - { - if ((string)appSettings["Passer"] == "On") - { - pb = new TextBox(); - pb.Background = (SolidColorBrush)Resources["PhoneBackgroundBrush"]; - pb.Foreground = (SolidColorBrush)Resources["PhoneForegroundBrush"]; - pb.BorderBrush = (SolidColorBrush)Resources["PhoneBackgroundBrush"]; - pb.Height = 70; - pb.Width = 356; - pb.Margin = new Thickness(124, 0, 0, 625); - pb.InputScope = new InputScope { Names = { new InputScopeName { NameValue = InputScopeNameValue.Number } } }; - pb.LostFocus += pb_LostFocus; - pb.GotFocus += pb_GotFocus; - LayoutRoot.Children.Add(pb); - pb.Focus(); - pb.TextChanged += PChanged; + request.Data.SetStorageItems(SelectedItems); } - - if ((string)appSettings["Passer"] == "Off") + finally { - NavigationService.Navigate(new Uri(VAULT_PAGE_URI, UriKind.Relative)); + deferral.Complete(); } } + #endregion - private void PChanged(object sender, TextChangedEventArgs e) + private async void DeleteThisFolder(object sender, RoutedEventArgs e) { - if (pb.Text == (string)appSettings["PasswordValue"]) - { - LayoutRoot.Children.Remove(pb); - NavigationService.Navigate(new Uri(VAULT_PAGE_URI, UriKind.Relative)); - } + int index = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); + var sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(index)); + await CurrentFolder.DeleteAsync(); + GetFilesAndFolder(sf); + headerText.Text = CurrentFolder.Name; + this.Addresser.RemoveLast(); } - void pb_GotFocus(object sender, RoutedEventArgs e) + + private async void PersonalStorageEnumerator(object sender, RoutedEventArgs e) { - pb.Background = (SolidColorBrush)Resources["PhoneBackgroundBrush"]; - pb.Foreground = (SolidColorBrush)Resources["PhoneForegroundBrush"]; - pb.MaxLength = 5; - pb.BorderBrush = (SolidColorBrush)Resources["PhoneBackgroundBrush"]; - pb.TextAlignment = TextAlignment.Center; + var HomeFolderP = ApplicationData.Current.LocalFolder; + var HomeFolder = await HomeFolderP.CreateFolderAsync("Home", CreationCollisionOption.OpenIfExists); + GetFilesAndFolder(HomeFolder); + this.Addresser.Reset(); + headerText.Text = "Home"; + RootFolder.Text = "|"; } - private void pb_LostFocus(object sender, RoutedEventArgs e) + private void NowPlaying(object sender, RoutedEventArgs e) { - LayoutRoot.Children.Remove(pb); + MusicMenuClick(); } - #endregion - - #region LateralMenu - private void OpenClose_Left(object sender, RoutedEventArgs e) + private async void PreviousFolder(object sender, RoutedEventArgs e) { - var left = Canvas.GetLeft(CanvasRoot); - if (left > -100) + if (!this.Addresser.Root) { - ApplicationBar.IsVisible = true; - MoveViewWindow(-320); - Blurer.Visibility = System.Windows.Visibility.Collapsed; + try + { + int curFoldCharNm = CurrentFolder.Path.LastIndexOf(CurrentFolder.Name); + StorageFolder sf = await StorageFolder.GetFolderFromPathAsync(CurrentFolder.Path.Remove(curFoldCharNm)); + this.Addresser.RemoveLast(); + GetFilesAndFolder(sf); + } + catch { } } else { - ApplicationBar.IsVisible = false; - MoveViewWindow(0); - Blurer.Visibility = System.Windows.Visibility.Visible; + SideMenu.OpenDrawer(); } } - private void OpenClose_Right(object sender, RoutedEventArgs e) + #endregion + + private void password_rect_Tapped(object sender, TappedRoutedEventArgs e) { - var left = Canvas.GetLeft(CanvasRoot); - if (left > -350) - { - ApplicationBar.IsVisible = false; - MoveViewWindow(-680); - Blurer.Visibility = System.Windows.Visibility.Visible; - } - else - { - ApplicationBar.IsVisible = true; - MoveViewWindow(-320); - Blurer.Visibility = System.Windows.Visibility.Collapsed; - } + OpenDialog(1); } - void MoveViewWindow(double left) + + //#region Bluetooth + //private async void OpenBluetoothSettings(object sender, RoutedEventArgs e) + //{ + // await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:")); + //} + //#endregion + + #region HelpMenu + private void HelpOpen(object sender, RoutedEventArgs e) { - if (left == -320) - ApplicationBar.IsVisible = true; - else - ApplicationBar.IsVisible = false; - ((Storyboard)canvas.Resources["moveAnimation"]).SkipToFill(); - ((DoubleAnimation)((Storyboard)canvas.Resources["moveAnimation"]).Children[0]).To = left; - ((Storyboard)canvas.Resources["moveAnimation"]).Begin(); + OpenDialog(0); } - private void canvas_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) + private void HelpPageClose(object sender, RoutedEventArgs e) { - if (e.DeltaManipulation.Translation.X != 0) - Canvas.SetLeft(CanvasRoot, Math.Min(Math.Max(-680, Canvas.GetLeft(CanvasRoot) + e.DeltaManipulation.Translation.X), 0)); + CloseDialog(0); } + #endregion + - double initialPosition; - bool _viewMoved = false; - private void canvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e) + #region FTP + private void OpenFTP(object sender, RoutedEventArgs e) { - _viewMoved = false; - initialPosition = Canvas.GetLeft(CanvasRoot); + FTPOpen.Begin(); + FTPActive.Begin(); } - - private void canvas_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) + #endregion + #region Music + private void musicToggle_Checked(object sender, RoutedEventArgs e) { - var left = Canvas.GetLeft(CanvasRoot); - if (_viewMoved) - return; - if (Math.Abs(initialPosition - left) < 100) - { - //bouncing back - MoveViewWindow(initialPosition); - return; - } - //change of state - if (initialPosition - left > 0) - { - //slide to the left - if (initialPosition > -320) - MoveViewWindow(-320); - else - MoveViewWindow(-680); - } - else - { - //slide to the right - if (initialPosition < -320) - MoveViewWindow(-320); - else - MoveViewWindow(0); - } + settings.Values["musicPlayer"] = "1"; + } + private void musicToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["musicPlayer"] = "0"; + } + private void musThumbnailToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["musThumbnail"] = "1"; } + private void musThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["musThumbnail"] = "0"; + } #endregion + #region Videos + private void videosToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["videosPlayer"] = "1"; + } + private void videosToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["videosPlayer"] = "0"; + } + private void vidThumbnailToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["vidThumbnail"] = "1"; + } - private void downloads_Tap(object sender, System.Windows.Input.GestureEventArgs e) + private void vidThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) { - sd.Text = "downloads"; - textBlock.Text = "downloads"; - sdcard_menu.Background = null; - l.Clear(); - List<AlphaKeyGroup<sdlist>> DataSource = AlphaKeyGroup<sdlist>.CreateGroups(l, System.Threading.Thread.CurrentThread.CurrentUICulture, (sdlist s) => { return s.Name; }, true); - sdlists.ItemsSource = DataSource; - MoveViewWindow(-320); - dl.Fill = App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush; - rect_above.Fill = App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush; - pl.Fill = null; - Blurer.Visibility = System.Windows.Visibility.Collapsed; + settings.Values["vidThumbnail"] = "0"; } - private void sdcard_menu_Tap(object sender, System.Windows.Input.GestureEventArgs e) + #endregion + #region Ebooks + private void ebookToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["ebookViewer"] = "1"; + } + private void ebookToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["ebookViewer"] = "0"; + } + #endregion + #region Pictures + private void picturesToggle_Checked(object sender, RoutedEventArgs e) { - sd.Text = "sdcard"; - textBlock.Text = null; - l.Clear(); - StateHelper(); - MoveViewWindow(-320); - //HomeBrush.ImageSource = new BitmapImage(new Uri("pack://application:/Toolkit.Content/home.png", UriKind.Absolute)); - pl.Fill = null; - dl.Fill = null; - oneFill.Fill = null; - sdcard_menu.Background = App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush; - rect_above.Fill = null; - Blurer.Visibility = System.Windows.Visibility.Collapsed; + settings.Values["picturesPlayer"] = "1"; } - public void WallpaperChanger(BitmapImage bitm) + private void picturesToggle_Unchecked(object sender, RoutedEventArgs e) { - ImageBrush im = new ImageBrush(); - im.ImageSource = bitm; - ApplyGaussianFilter(im.ImageSource); + settings.Values["picturesPlayer"] = "0"; } - - public void ApplyGaussianFilter(ImageSource image) + + private void picThumbnailToggle_Checked(object sender, RoutedEventArgs e) { - ImageApply(image); + settings.Values["picThumbnail"] = "1"; } - public void ImageApply(ImageSource imt) + private void picThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) { - ImageBrush im = new ImageBrush(); - im.Stretch = Stretch.UniformToFill; - im.ImageSource = imt; - SideBar.Background = im; + settings.Values["picThumbnail"] = "0"; } - #region Music + #endregion - public void MusicStateCreator() + #region DialogOpenClose + public void OpenDialog(int dialogNo) { - int trackno = 0; - try - { - l.Clear(); - ml.Clear(); - using (var library = new MediaLibrary()) - { - SongCollection songs = library.Songs; - foreach (Song song in songs) - { - ml.Add(new musiclist((song.Name).ToString(), (song.Album).ToString(), (song.Artist).ToString(), (trackno+1).ToString())); - } - musicLists.ItemsSource = ml; - sdlists.ItemsSource = ml; - } - } - catch (ArgumentOutOfRangeException) - { - MessageBox.Show("There are no songs in your phone..."); - } - catch (InvalidOperationException iop) + ProgressDialog.Visibility = Visibility.Visible; + switch(dialogNo) { - MessageBox.Show(iop.ToString()); + case 0: + SubFrameGrid.Visibility = Visibility.Visible; + SubFrame.Navigate(typeof(HelpPage)); + SubFrameHeader.Text = "HELP"; + break; + + case 1: + SubFrameGrid.Visibility = Visibility.Visible; + SubFrame.Navigate(typeof(VaultPage)); + SubFrameHeader.Text = "VAULT"; + break; + case 2: + FileMoveDialog.Visibility = Visibility.Visible; + break; + case 3: + ProgInfoView.Visibility = Visibility.Visible; + break; + } } - private void Music_Tap(object sender, System.Windows.Input.GestureEventArgs e) + + public void CloseDialog(int dialogNo) { - int trackno = 0; - //ImageBrush ib = new ImageBrush(); - //ib.ImageSource = new BitmapImage(new Uri("pack://application:/Resources/Assets/Images/MusicBar.png", UriKind.Absolute)); - //homeButton.OpacityMask = ib; - sd.Text = "music"; - pl.Fill = null; - dl.Fill = null; - rect_above.Fill = null; - oneFill.Fill = null; - sdcard_menu.Background = null; - Blurer.Visibility = System.Windows.Visibility.Collapsed; - try - { - l.Clear(); - ml.Clear(); - using (var library = new MediaLibrary()) - { - SongCollection songs = library.Songs; - foreach (Song song in songs) - { - ml.Add(new musiclist((song.Name).ToString(), (song.Artist).ToString(), (song.Album).ToString(), (trackno+1).ToString())); - } - musicLists.ItemsSource = ml; - sdlists.ItemsSource = ml; - } - } - catch (ArgumentOutOfRangeException) + ProgressDialog.Visibility = Visibility.Collapsed ; + switch (dialogNo) { - MessageBox.Show("There are no songs in your phone..."); + case 0: + SubFrameGrid.Visibility = Visibility.Collapsed; + break; + + case 1: + SubFrameGrid.Visibility = Visibility.Collapsed; + break; + case 2: + FileMoveDialog.Visibility = Visibility.Collapsed; + break; + case 3: + ProgInfoView.Visibility = Visibility.Collapsed; + break; + } } + #endregion + private void CloseDialog(object sender, RoutedEventArgs e) + { + CloseDialog(2); + } - public void txtB_Tap(object sender, System.Windows.Input.GestureEventArgs e) + private void musicSlider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) { - TextBlock txt = (TextBlock)sender; - string txts = (txt.Name).ToString(); - int index = int.Parse(txts); - MainPage mp = new MainPage(); - using (var library = new MediaLibrary()) - { - SongCollection songs = library.Songs; - Song song = songs[index]; - try - { - FrameworkDispatcher.Update(); - MediaPlayer.Play(song); - } - catch (InvalidOperationException) - { - MediaPlayer.Play(songs[2]); - } - } + ((Storyboard)Resources["SeekOpen"]).Begin(); } - #endregion - async public void VideoLister(object sender, System.Windows.Input.GestureEventArgs e) + private void musicSlider_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) { - pl.Fill = App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush; - dl.Fill = null; - rect_above.Fill = null; - sdcard_menu.Background = null; - oneFill.Fill = null; - sd.Text = "videos"; - Blurer.Visibility = System.Windows.Visibility.Collapsed; - //HomeBrush.ImageSource = new BitmapImage(new Uri("pack://application:/Resources/Assets/Images/Video.png", UriKind.Absolute)); - ExternalStorageDevice sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault(); - if (sdCard != null) + int m = (int)(e.Delta.Translation.X *0.4); + if (m < 1 && m> -1) + return; + if (mediaPlayer.CanSeek && m > 0) { - ExternalStorageFolder sdrootFolder = sdCard.RootFolder; - temp = sdrootFolder; - var folder = await sdrootFolder.GetFoldersAsync(); - l.Clear(); - foreach (ExternalStorageFolder currentChildFolder in folder) - { - var files = await currentChildFolder.GetFilesAsync(); - foreach (ExternalStorageFile currentChildFile in files) - { - if (currentChildFile.Name.EndsWith(".avi")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/avi.png")); - if (currentChildFile.Name.EndsWith(".mkv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/mkv.png")); - } - var folderss = await currentChildFolder.GetFoldersAsync(); - foreach (ExternalStorageFolder currentChildFolder2 in folderss) - { - var filess = await currentChildFolder2.GetFilesAsync(); - foreach (ExternalStorageFile currentChildFile in filess) - { - if (currentChildFile.Name.EndsWith(".avi")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/avi.png")); - if (currentChildFile.Name.EndsWith(".mkv")) - l.Add(new sdlist(currentChildFile.Name, "/Resources/Assets/File_Types/mkv.png")); - } - } - - } - + mediaPlayer.Position.Add(new TimeSpan(0, 0, m)); } - - else + else if(mediaPlayer.CanSeek) { - nosd.Visibility = System.Windows.Visibility.Visible; + mediaPlayer.Position.Subtract(new TimeSpan(0, 0, m)); } - sdlists.ItemsSource = l; } - private void oneFill_Tap(object sender, System.Windows.Input.GestureEventArgs e) + private void musicSlider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) { - oneFill.Fill = App.Current.Resources["PhoneAccentBrush"] as SolidColorBrush; - pl.Fill = null; - dl.Fill = null; - rect_above.Fill = null; - Blurer.Visibility = System.Windows.Visibility.Collapsed; + ((Storyboard)Resources["SeekClose"]).Begin(); } - async private void SearchModule_Click(object sender, RoutedEventArgs e) + private void StopFTP(object sender, RoutedEventArgs e) { - if (searchBox.Text != null) + FTPOpen.Stop(); + FTPActive.Stop(); + } + + private void searchBox_TextChanged(object sender, TextChangedEventArgs e) + { + try { - ExternalStorageDevice sdCard = (await ExternalStorage.GetExternalStorageDevicesAsync()).FirstOrDefault(); - ExternalStorageFolder sdrootFolder = sdCard.RootFolder; - temp = sdrootFolder; - var folder = await sdrootFolder.GetFoldersAsync(); - foreach (ExternalStorageFolder currentChildFolder in folder) - { - var files = await currentChildFolder.GetFilesAsync(); - foreach (ExternalStorageFile currentChildFile in files) - { - l.Clear(); - if (currentChildFile.Name.EndsWith(searchBox.Text)) - l.Add(new sdlist(searchBox.Text, "/Resources/Assets/Images/folder.png")); - } - } - sdlists.ItemsSource = l; - + sd.Where(x => x.Name == searchBox.Text); + } + catch (ArgumentNullException) + { + sd.Clear(); } - } } } \ No newline at end of file diff --git a/File360/MarqueeText.xaml b/File360/MarqueeText.xaml @@ -0,0 +1,13 @@ +<UserControl + x:Class="File360.MarqueeText" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + + <Grid> + + </Grid> +</UserControl> diff --git a/File360/MarqueeText.xaml.cs b/File360/MarqueeText.xaml.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 + +namespace File360 +{ + public sealed partial class MarqueeText : UserControl + { + public MarqueeText() + { + this.InitializeComponent(); + } + } +} diff --git a/File360/MessageBox.xaml b/File360/MessageBox.xaml @@ -0,0 +1,50 @@ +<UserControl + x:Class="File360.MessageBox" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d"> + + <Grid x:Name="AlphaGrid"> + <Grid.Background> + <SolidColorBrush Color="#19000000"/> + </Grid.Background> + <StackPanel x:Name="LayoutRoot" + MinHeight="100" + MaxHeight="200" + MinWidth="300" + MaxWidth="450" + Background="{StaticResource PhoneChromeBrush}" + HorizontalAlignment="Center" + VerticalAlignment="Center"> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="2*"/> + <RowDefinition Height="50*"/> + <RowDefinition Height="2*"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="2*"/> + <ColumnDefinition Width="50*"/> + <ColumnDefinition Width="2*"/> + </Grid.ColumnDefinitions> + <StackPanel Grid.Row="1" Grid.Column="1" Margin="10,0"> + <TextBlock x:Name="heading" Foreground="{StaticResource PhoneForegroundBrush}" Text="ARE YOU SURE?" FontFamily="Segoe UI" FontSize="20" FontWeight="Bold" HorizontalAlignment="Left"/> + <Rectangle MinHeight="10"/> + <TextBlock x:Name="dialogDetails" Grid.Row="1" TextWrapping="Wrap" Text="Random Text and Messages Detailed about this operation comes here." FontFamily="Segoe WP Light" TextAlignment="Center" FontSize="20"/> + <Rectangle MinHeight="15"/> + </StackPanel> + </Grid> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="4*"/> + <ColumnDefinition Width="10*"/> + </Grid.ColumnDefinitions> + <Button MinWidth="0" x:Name="leftButton" Style="{StaticResource DialogBoxButton}" Content="&lt;" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="leftButton_Click" Margin="0" VerticalAlignment="Stretch" BorderBrush="{x:Null}" Background="{ThemeResource PhoneBackgroundBrush}" HorizontalAlignment="Stretch"/> + <Button x:Name="rightButton" Grid.Column="1" Background="{StaticResource PhoneAccentBrush}" BorderBrush="{x:Null}" HorizontalAlignment="Stretch" Click="rightButton_Click" Style="{StaticResource DialogBoxButton}" Content="K" FontFamily="Assets/Font/iconfont.ttf#iconfont" Foreground="White"/> + </Grid> + </StackPanel> + </Grid> +</UserControl> diff --git a/File360/MessageBox.xaml.cs b/File360/MessageBox.xaml.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + public sealed partial class MessageBox : UserControl + { + public MessageBox() + { + InitializeComponent(); + heading.FontSize = Window.Current.Bounds.Width / 20; + dialogDetails.FontSize = Window.Current.Bounds.Width / 30; + leftButton.FontSize = Window.Current.Bounds.Width / 35; + } + public string HeadingText + { + get { return heading.Text; } + set { heading.Text = value; } + } + public string ContentText + { + get { return dialogDetails.Text; } + set { dialogDetails.Text = value; } + } + public string LeftButtonContent + { + get { return leftButton.Content.ToString(); } + set { leftButton.Content = value; } + } + public string RightButtonContent + { + get { return rightButton.Content.ToString(); } + set { rightButton.Content = value; } + } + public RoutedEventHandler LeftButtonHandler + { + get { return leftButton_Click; } + set { leftButton.Click += value; } + } + + public RoutedEventHandler RightButtonHandler + { + get { return rightButton_Click; } + set { rightButton.Click += value; } + } + + + private void leftButton_Click(object sender, RoutedEventArgs e) + { + IsOpen = false; + } + private void rightButton_Click(object sender, RoutedEventArgs e) + { + + } + + public bool IsOpen + { + get + { + if (Height == 0) + { + return false; + } + else + { + return true; + } + } + set + { + if (value == true) + { + Height = Window.Current.Bounds.Height; + } + if (value == false) + { + Height = 0; + } + } + } + } +} diff --git a/File360/OccupyStack.cs b/File360/OccupyStack.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; + +namespace File360 +{ + class OccupyStack : StackPanel + { + public OccupyStack() + { + foreach (Button but in Children) + { + but.Height = ((Grid)Parent).ActualHeight; + but.Width = ActualWidth / Children.Count; + } + SizeChanged += OccupyStack_SizeChanged; + } + + private void OccupyStack_SizeChanged(object sender, Windows.UI.Xaml.SizeChangedEventArgs e) + { + Width = Window.Current.Bounds.Width; + UpdateLayout(); + foreach (Button but in Children) + { + but.Height = ((Grid)Parent).ActualHeight; + but.Width = ActualWidth / Children.Count; + } + } + } +} diff --git a/File360/Package.appxmanifest b/File360/Package.appxmanifest @@ -1,58 +1,46 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest" xmlns:m3="http://schemas.microsoft.com/appx/2014/manifest" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"> - - <Identity Name="c5e5323f-37ff-4a94-8835-ee041976b1b9" - Publisher="CN=Sri" - Version="1.0.0.0" /> - - <mp:PhoneIdentity PhoneProductId="6db737b7-6d8e-4901-86a4-3110a717c72f" PhonePublisherId="adf37227-c10c-460b-a659-59745477b5c6"/> - + <Identity Name="a7ce2a91-b87b-4cc7-b794-5bf854343085" Publisher="CN=Puli Bharatvaj" Version="1.0.0.0" /> + <mp:PhoneIdentity PhoneProductId="a7ce2a91-b87b-4cc7-b794-5bf854343085" PhonePublisherId="00000000-0000-0000-0000-000000000000" /> <Properties> <DisplayName>File360</DisplayName> - <PublisherDisplayName>Sri</PublisherDisplayName> + <PublisherDisplayName>Puli Bharatvaj</PublisherDisplayName> <Logo>Assets\StoreLogo.png</Logo> </Properties> - <Prerequisites> <OSMinVersion>6.3.1</OSMinVersion> <OSMaxVersionTested>6.3.1</OSMaxVersionTested> </Prerequisites> - <Resources> - <Resource Language="x-generate"/> + <Resource Language="x-generate" /> </Resources> - <Applications> - <Application Id="x6db737b7y6d8ey4901y86a4y3110a717c72fx" - Executable="AGHost.exe" - EntryPoint="MainPage.xaml"> - <m3:VisualElements - DisplayName="File360" - Square150x150Logo="Assets\SquareTile150x150.png" - Square44x44Logo="Assets\Logo.png" - Description="File360" - ForegroundText="light" - BackgroundColor="#464646"> - <m3:DefaultTile Square71x71Logo="Assets\SquareTile71x71.png"/> - <m3:SplashScreen Image="SplashScreenImage.jpg" /> + <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="File360.App"> + <m3:VisualElements DisplayName="File360" Square150x150Logo="Assets\Logo.png" Square44x44Logo="Assets\SmallLogo.png" Description="File360" ForegroundText="light" BackgroundColor="transparent"> + <m3:DefaultTile Wide310x150Logo="Assets\WideLogo.png" Square71x71Logo="Assets\Square71x71Logo.png"> + </m3:DefaultTile> + <m3:SplashScreen Image="Assets\SplashScreen.png" /> </m3:VisualElements> <Extensions> - <Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask"> + <Extension Category="windows.fileOpenPicker"> + <FileOpenPicker> + <SupportedFileTypes> + <SupportsAnyFileType /> + </SupportedFileTypes> + </FileOpenPicker> + </Extension> + <Extension Category="windows.backgroundTasks" EntryPoint="File360.app"> <BackgroundTasks> - <Task Type="systemEvent" /> + <Task Type="audio" /> </BackgroundTasks> </Extension> </Extensions> </Application> </Applications> <Capabilities> + <Capability Name="videosLibrary" /> + <Capability Name="removableStorage" /> + <Capability Name="musicLibrary" /> + <Capability Name="picturesLibrary" /> </Capabilities> - <Extensions> - <Extension Category="windows.activatableClass.inProcessServer"> - <InProcessServer> - <Path>AgHostSvcs.dll</Path> - <ActivatableClass ActivatableClassId="AgHost.BackgroundTask" ThreadingModel="both" /> - </InProcessServer> - </Extension> - </Extensions> </Package> \ No newline at end of file diff --git a/File360/Properties/AssemblyInfo.cs b/File360/Properties/AssemblyInfo.cs @@ -1,28 +1,19 @@ using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using System.Resources; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("File360")] -[assembly: AssemblyDescription("Best File Manager for Windows Phone 8.0")] +[assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("AMI")] +[assembly: AssemblyCompany("")] [assembly: AssemblyProduct("File360")] [assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("AMI")] +[assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("9d7b1f07-3c45-4014-baca-2741880a5f97")] - // Version information for an assembly consists of the following four values: // // Major Version @@ -30,8 +21,9 @@ using System.Resources; // Build Number // Revision // -// You can specify all the values or you can default the Revision and Build Numbers +// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] -[assembly: NeutralResourcesLanguageAttribute("en-US")] -\ No newline at end of file +[assembly: ComVisible(false)] +\ No newline at end of file diff --git a/File360/ReadMe.Coding4Fun.Toolkit.txt b/File360/ReadMe.Coding4Fun.Toolkit.txt @@ -0,0 +1,8 @@ +Thanks for using the Coding4Fun Toolkit! + +Migration Notes: +2.1.0 -> 2.1.1 + +1) Added Windows Phone 8 SL Components removed in 2.0.8 (no new functionality added) +2) Added David Anson's PlaceImage control to WinRT WP81 / Win81 +3) Added ToastPrompt to WinRT Win81 +\ No newline at end of file diff --git a/File360/SelectorItemEx.cs b/File360/SelectorItemEx.cs @@ -0,0 +1,60 @@ +using Windows.UI.Input; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Input; + +namespace File360 +{ + public static class SelectorItemEx + { + public static bool GetToggleSelectedOnHold(SelectorItem item) + { + return (bool)item.GetValue(ToggleSelectedOnHoldProperty); + } + + public static void SetToggleSelectedOnHold(SelectorItem item, bool value) + { + item.SetValue(ToggleSelectedOnHoldProperty, value); + } + + public static readonly DependencyProperty ToggleSelectedOnHoldProperty = + DependencyProperty.RegisterAttached( + "ToggleSelectedOnHold", + typeof(bool), + typeof(SelectorItemEx), + new PropertyMetadata( + false, + ToggleSelectedOnHoldChanged)); + + private static void ToggleSelectedOnHoldChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + var item = o as SelectorItem; + if (item == null) + return; + + var oldValue = (bool)e.OldValue; + var newValue = (bool)e.NewValue; + + if (oldValue && !newValue) + { + item.Holding -= Item_Holding; + } + else if (newValue && !oldValue) + { + item.Holding += Item_Holding; + } + } + + private static void Item_Holding(object sender, HoldingRoutedEventArgs e) + { + var item = sender as SelectorItem; + if (item == null) + return; + + + if (e.HoldingState == HoldingState.Started) + item.IsSelected = !item.IsSelected; + } + } +} +\ No newline at end of file diff --git a/File360/SettingsPage.xaml b/File360/SettingsPage.xaml @@ -1,44 +1,154 @@ -<phone:PhoneApplicationPage +<Page x:Class="File360.SettingsPage" - xmlns:local="clr-namespace:File360" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" + xmlns:local="using:File360" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - FontFamily="{StaticResource PhoneFontFamilyNormal}" - FontSize="{StaticResource PhoneFontSizeNormal}" - Foreground="{StaticResource PhoneForegroundBrush}" - local:TiltEffect.IsTiltEnabled="True" - SupportedOrientations="Portrait" Orientation="Portrait" - mc:Ignorable="d" - shell:SystemTray.IsVisible="True"> + mc:Ignorable="d"> - <phone:PhoneApplicationPage.Resources> - <DataTemplate x:Name="SettingsItemTemplate"> - <Grid Tap="SettingTap_Tap" x:Name="SettingTap"> - <TextBlock x:Name="txtB" Margin="116,12,10,47" Tap="txtB_Tap" Foreground="{StaticResource PhoneForegroundBrush}" Text="{Binding SettingName}" FontSize="46"/> - <TextBlock x:Name="txtB2" Margin="116,86,10,20" Foreground="{StaticResource PhoneSubtleBrush}" Text="{Binding SettingDescription}" FontFamily="Portable User Interface"/> - <Ellipse HorizontalAlignment="Left" Height="77" Margin="12,28,0,0" Stroke="{x:Null}" VerticalAlignment="Top" Width="77"> - <Ellipse.Fill> - <ImageBrush ImageSource="{Binding SettingPicture}"/> - </Ellipse.Fill> - </Ellipse> - </Grid> - </DataTemplate> - - </phone:PhoneApplicationPage.Resources> - <Grid> - <phone:Pivot HorizontalAlignment="Left" Height="768" Title="FILE360°" VerticalAlignment="Top" Width="480"> - <phone:PivotItem CacheMode="{x:Null}" Header="settings" Margin="0,28,-368,0" FontSize="24"> - <phone:LongListSelector - x:Name="SettingsList" - ItemTemplate="{StaticResource SettingsItemTemplate}" - IsGroupingEnabled="False" Margin="10,0"/> - </phone:PivotItem> - </phone:Pivot> - </Grid> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}" Opacity="0.92"/> + </Grid.Background> + <Grid.RenderTransform> + <CompositeTransform/> + </Grid.RenderTransform> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Button HorizontalContentAlignment="Left" Style="{StaticResource DefaultButton}" Click="GoBack" Margin="0" VerticalAlignment="Stretch" d:LayoutOverrides="Height, LeftPosition, RightPosition, TopPosition, BottomPosition" BorderThickness="0" HorizontalAlignment="Stretch" FontSize="26.667" FontWeight="Thin"> + <StackPanel Orientation="Horizontal"> + <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" TextAlignment="Left" FontSize="24" Text="g" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" FontWeight="Thin" FontStretch="UltraCondensed"/> + <TextBlock HorizontalAlignment="Left" + TextWrapping="Wrap" + Text="settings" + VerticalAlignment="Center" + FontWeight="Normal" Margin="5,0,0,0" TextLineBounds="TrimToCapHeight"/> + </StackPanel> + </Button> + <ScrollViewer Grid.Row="1"> + <ScrollViewer.Background> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.3"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="#00000000" Offset="0.02"/> + </LinearGradientBrush> + </ScrollViewer.Background> + <StackPanel Margin="10"> + <TextBlock Text="general" HorizontalAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" /> + <TextBlock Text="use built in viewer for" Style="{StaticResource ControlHeaderTextBlockStyle}"/> + <StackPanel Orientation="Horizontal"> + <ToggleButton x:Name="musicToggle" Checked="musicToggle_Checked" Unchecked="musicToggle_Unchecked"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text="b" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <TextBlock Text="music"/> + </StackPanel> + </ToggleButton> + <ToggleButton x:Name="videosToggle" Checked="videosToggle_Checked" Unchecked="videosToggle_Unchecked"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text=")" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <TextBlock Text="videos"/> + </StackPanel> + </ToggleButton> + <ToggleButton Visibility="Collapsed" x:Name="ebookToggle" Checked="ebookToggle_Checked" Unchecked="ebookToggle_Unchecked"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text="m" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <TextBlock Text="ebook"/> + </StackPanel> + </ToggleButton> + <ToggleButton x:Name="picturesToggle" Checked="picturesToggle_Checked" Unchecked="picturesToggle_Unchecked"> + <StackPanel> + <TextBlock HorizontalAlignment="Center" Text="M" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + <TextBlock Text="pictures"/> + </StackPanel> + </ToggleButton> + </StackPanel> + <TextBlock Text="show thumbnail for" Style="{StaticResource ControlHeaderTextBlockStyle}"/> + <CheckBox Visibility="Collapsed" x:Name="musThumbnailToggle" Content="music" Checked="musThumbnailToggle_Checked" Unchecked="musThumbnailToggle_Unchecked" /> + <CheckBox x:Name="vidThumbnailToggle" Content="videos" Checked="vidThumbnailToggle_Checked" Unchecked="vidThumbnailToggle_Unchecked" /> + <CheckBox x:Name="picThumbnailToggle" Content="pictures" Checked="picThumbnailToggle_Checked" Unchecked="picThumbnailToggle_Unchecked" /> + <TextBlock Text="personalization" HorizontalAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" /> + <StackPanel> + <!--<local:ColorPicker ColorSet="2" x:Name="folderColor" OptionName="folder" Foreground="Black" /> + <local:ColorPicker ColorSet="0" x:Name="accentColor" OptionName="app accent" /> + <local:ColorPicker ColorSet="1" x:Name="themeColor" OptionName="app theme" />--> + <ToggleSwitch Header="use slideshow" Margin="0,5" Height="75"/> + <TextBlock Text="folder view type" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}"/> + <ComboBox x:Name="typeComboBox" SelectionChanged="FolderViewChanged"> + <ComboBoxItem> + <StackPanel> + <TextBlock TextAlignment="Center" Text="c" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="29.333"/> + <TextBlock TextAlignment="Center" Text="list" FontSize="21.333"/> + </StackPanel> + </ComboBoxItem> + <ComboBoxItem> + <StackPanel> + <TextBlock TextAlignment="Center" Text="N" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="24"/> + <TextBlock TextAlignment="Center" Text="grid" /> + </StackPanel> + </ComboBoxItem> + </ComboBox> + </StackPanel> + <Grid> + <Button x:Name="button" HorizontalAlignment="Center" Style="{StaticResource DefaultButton}" RenderTransformOrigin="0.5,0.5" Click="OpenFTP"> + <Button.RenderTransform> + <CompositeTransform/> + </Button.RenderTransform> + <Border CornerRadius="50" VerticalAlignment="Center" Background="{ThemeResource PhoneAccentBrush}"> + <TextBlock Margin="20" Text="ftp" HorizontalAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" /> + </Border> + </Button> + <Border x:Name="border" RenderTransformOrigin="0.5,0.5"> + <Border.RenderTransform> + <CompositeTransform ScaleX="0" ScaleY="0" TranslateY="-30"/> + </Border.RenderTransform> + <StackPanel Margin="0,20" Background="{ThemeResource PhoneAccentBrush}"> + <TextBlock Text="Address" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" /> + <TextBlock Margin="0,5" Text="192.162.1.103:23" FontSize="13.333"/> + </StackPanel> + </Border> + </Grid> + <Grid HorizontalAlignment="Center"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Button Margin="25,0" Style="{StaticResource DefaultButton}" HorizontalAlignment="Center" VerticalAlignment="Center" Click="OpenBluetoothSettings"> + <StackPanel Margin="0,25" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="b" FontSize="26.667" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <TextBlock Text="bluetooth" FontSize="23.333" FontWeight="Thin" HorizontalAlignment="Center"/> + <TextBlock Text="configure bluetooth settings" HorizontalAlignment="Center" FontSize="13"/> + </StackPanel> + </Button> + <Button Margin="25,0" Style="{StaticResource DefaultButton}" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Click="HelpOpen"> + <StackPanel Margin="0,25" HorizontalAlignment="Center" VerticalAlignment="Center"> + <TextBlock Text="h" FontSize="26.667" FontFamily="Assets/Font/settingsfont.ttf#settingsfont" HorizontalAlignment="Center" TextAlignment="Center" VerticalAlignment="Top" Margin="5,0,10,5" Foreground="{ThemeResource PhoneAccentBrush}" Opacity="0.95" LineStackingStrategy="MaxHeight" FontWeight="Thin"/> + <TextBlock Text="help" FontSize="23.333" FontWeight="Thin" HorizontalAlignment="Center"/> + <TextBlock Text="check out this guide" HorizontalAlignment="Center" FontFamily="Helvetica Neue" FontSize="13" FontWeight="Normal"/> + </StackPanel> + </Button> + </Grid> + <StackPanel Margin="0,10"> + <StackPanel.Background> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}" Opacity="0.2"/> + </StackPanel.Background> + <TextBlock Text="security" HorizontalAlignment="Center" Style="{StaticResource ComboBoxPlaceholderTextBlockStyle}" Margin="0,10,0,0"/> + <ToggleSwitch Header="password protection" Toggled="PasswordToggle"/> + <Grid Margin="30,10" Background="{StaticResource ContentDialogDimmingThemeBrush}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <TextBlock VerticalAlignment="Center" MaxLines="1" Height="50" FontSize="20" TextWrapping="NoWrap" x:Name="securityBlock" Margin="10,0" HorizontalAlignment="Center"/> + <Button Grid.Column="1" Style="{StaticResource DefaultButton}" Content="clear" FontSize="12" Background="{StaticResource ContentDialogDimmingThemeBrush}"/> + </Grid> + <Grid Visibility="Collapsed" x:Name="wrapPanel" Height="260"/> + </StackPanel> -</phone:PhoneApplicationPage> -\ No newline at end of file + </StackPanel> + </ScrollViewer> + </Grid> + </Grid> +</Page> diff --git a/File360/SettingsPage.xaml.cs b/File360/SettingsPage.xaml.cs @@ -1,80 +1,207 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Navigation; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; +using Windows.Storage; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; namespace File360 { - public partial class SettingsPage : PhoneApplicationPage + public sealed partial class SettingsPage : Page { - const string about = "/AboutPage.xaml"; - const string security = "/SecurityPage.xaml"; - const string personalization = "/PersonalizationPage.xaml"; - string txts; - List<settinglist> sl = new List<settinglist>(); + + ApplicationDataContainer settings = ApplicationData.Current.LocalSettings; public SettingsPage() { - InitializeComponent(); - sl.Add(new settinglist("ftp", "configure file transfer prtocol","/Resources/Assets/Settings/ftp.png")); - sl.Add(new settinglist("bluetooth", "bluetooth settings","/Resources/Assets/Images/add.png")); - sl.Add(new settinglist("nfc", "nfc configuration","")); - sl.Add(new settinglist("personalization", "get a look","")); - sl.Add(new settinglist("music", "change your music settings","")); - sl.Add(new settinglist("security", "protect your files","")); - sl.Add(new settinglist("about", "About Us!","")); - SettingsList.ItemsSource = sl; + this.InitializeComponent(); + //Loaded += SettingsPage_Loaded; + } + + public void GoBack(object sender, RoutedEventArgs e) + { + this.Frame.GoBack(); } - async private void txtB_Tap(object sender, System.Windows.Input.GestureEventArgs e) + private void SettingsPage_Loaded(object sender, RoutedEventArgs e) { - TextBlock txt = (TextBlock)sender; - txts = (txt.Text).ToString(); - if (txts == "about") - { - NavigationService.Navigate(new Uri(about, UriKind.Relative)); - } - if (txts == "security") + #region SettingsSerializer + if (settings.Containers.Count == 9) { - NavigationService.Navigate(new Uri(security, UriKind.Relative)); + settings.Values["musicPlayer"] = "1"; + musicToggle.IsChecked = true; + settings.Values["picturesPlayer"] = "1"; + picturesToggle.IsChecked = true; + settings.Values["videoPlayer"] = "1"; + videosToggle.IsChecked = true; + settings.Values["ebookViewer"] = "1"; + ebookToggle.IsChecked = true; + settings.Values["itemType"] = 1; + typeComboBox.SelectedIndex = 1; + settings.Values["musThumbnail"] = "0"; + musThumbnailToggle.IsChecked = false; + settings.Values["vidThumbnail"] = "0"; + vidThumbnailToggle.IsChecked = false; + settings.Values["picThumbnail"] = "0"; + picThumbnailToggle.IsChecked = false; } - - if (txts == "bluetooth") + else { - await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:")); + musicToggle.IsChecked = ((string)settings.Values["musicPlayer"] == "1"); + picturesToggle.IsChecked = ((string)settings.Values["picturesPlayer"] == "1"); + videosToggle.IsChecked = ((string)settings.Values["videosPlayer"] == "1"); + ebookToggle.IsChecked = ((string)settings.Values["ebookViewer"] == "1"); + typeComboBox.SelectedIndex = (int)(settings.Values["itemType"]); + musThumbnailToggle.IsChecked = ((string)settings.Values["musThumbnail"] == "1"); + vidThumbnailToggle.IsChecked = ((string)settings.Values["vidThumbnail"] == "1"); + picThumbnailToggle.IsChecked = ((string)settings.Values["picThumbnail"] == "1"); } + #endregion - if (txts == "nfc") - { - MessageBox.Show("coming soon..."); - } - if (txts == "personalization") + #region InitializePasswordButtons + for (int i = 1; i <= 9; i++) { - NavigationService.Navigate(new Uri(personalization, UriKind.Relative)); + Button b = new Button(); + b.Content = i; + try + { + b.Height = (Window.Current.Bounds.Width / 3) - 40; + b.Width = Window.Current.Bounds.Width / 3; + } + catch + { + } + b.Click += B_Click; + b.Style = (Style)Application.Current.Resources["DefaultButton"]; + wrapPanel.Children.Add(b); } + #endregion + } + + + #region SettingsHandler + #region Bluetooth + private async void OpenBluetoothSettings(object sender, RoutedEventArgs e) + { + await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-bluetooth:")); + } + #endregion + + #region HelpMenu + private void HelpOpen(object sender, RoutedEventArgs e) + { + // SettingsFrameGrid.Visibility = Visibility.Visible; + // if (!SettingsFrame.Navigate(typeof(HelpPage))) + // { + // throw new Exception("Failed to create scenario list"); + // } + } + #endregion + #region FTP + private void OpenFTP(object sender, RoutedEventArgs e) + { + //FTPOpen.Begin(); + } + #endregion + #region Music + private void musicToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["musicPlayer"] = "1"; + } + private void musicToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["musicPlayer"] = "0"; + } + + private void musThumbnailToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["musThumbnail"] = "1"; + } + + private void musThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["musThumbnail"] = "0"; + } + #endregion + #region Videos + private void videosToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["videosPlayer"] = "1"; + } + private void videosToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["videosPlayer"] = "0"; + } + private void vidThumbnailToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["vidThumbnail"] = "1"; + } + + private void vidThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["vidThumbnail"] = "0"; + } + + #endregion + #region Ebooks + private void ebookToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["ebookViewer"] = "1"; + } + private void ebookToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["ebookViewer"] = "0"; + } + #endregion + #region Pictures + private void picturesToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["picturesPlayer"] = "1"; + } - if (txts == "ftp") + private void picturesToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["picturesPlayer"] = "0"; + } + + private void picThumbnailToggle_Checked(object sender, RoutedEventArgs e) + { + settings.Values["picThumbnail"] = "1"; + } + + private void picThumbnailToggle_Unchecked(object sender, RoutedEventArgs e) + { + settings.Values["picThumbnail"] = "0"; + } + #endregion + + #region Folder + private void FolderViewChanged(object sender, SelectionChangedEventArgs e) + { + settings.Values["itemType"] = typeComboBox.SelectedIndex; + } + #endregion + + #region Security + private void PasswordToggle(object sender, RoutedEventArgs e) + { + ToggleSwitch ts = (ToggleSwitch)sender; + if (ts.IsOn) { - MessageBox.Show("coming soon..."); + wrapPanel.Visibility = Visibility.Visible; } - if (txts == "music") + else { - MessageBox.Show("coming soon..."); + wrapPanel.Visibility = Visibility.Visible; } - } - - public void SettingTap_Tap(object sender, System.Windows.Input.GestureEventArgs e) - { - - } + } + private void B_Click(object sender, RoutedEventArgs e) + { + securityBlock.Text += ((Button)sender).Content; + } + #endregion + #endregion } -} -\ No newline at end of file +} diff --git a/File360/Shade.cs b/File360/Shade.cs @@ -0,0 +1,229 @@ +using System; +using System.Linq; +using System.Windows; +using Windows.Foundation; +using Windows.UI; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Animation; + +namespace File360 +{ + public class Shade : Grid + { + #region Globals and events + + private readonly PropertyPath _translatePath = new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"); + private readonly PropertyPath _colorPath = new PropertyPath("(Grid.Background).(SolidColorBrush.Color)"); + + private readonly TranslateTransform _listFragmentTransform = new TranslateTransform(); + private readonly TranslateTransform _deltaTransform = new TranslateTransform(); + private const int MaxAlpha = 190; + + public delegate void DrawerEventHandler(object sender); + public event DrawerEventHandler DrawerOpened; + public event DrawerEventHandler DrawerClosed; + + private Storyboard _fadeInStoryboard; + private Storyboard _fadeOutStoryboard; + private Grid _shadowFragment; + private Grid _slideFragment; + + #endregion + + #region Properties + + public bool Shadowed { get; set; } + private PropertyPath TranslatePath + { + get { return _translatePath; } + } + private PropertyPath ColorPath + { + get { return _colorPath; } + } + + #endregion + + #region Methods + + public Shade() + { + Shadowed = false; + } + + public void Shadow(Grid Element) + { + _slideFragment = (Grid)Element; + // Create a shadow element + _shadowFragment = new Grid + { + Name = "_shadowFragment", + Background = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)), + HorizontalAlignment = HorizontalAlignment.Stretch, + VerticalAlignment = VerticalAlignment.Stretch, + Visibility = Visibility.Collapsed + }; + _shadowFragment.Tapped += shadowFragment_Tapped; + _shadowFragment.IsHitTestVisible = false; + + // Set ZIndexes + Canvas.SetZIndex(_shadowFragment, 50); + Canvas.SetZIndex(_slideFragment, 51); + Children.Add(_shadowFragment); + + // Create a new fadeIn animation storyboard + _fadeInStoryboard = new Storyboard(); + + // New double animation + var doubleAnimation1 = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = 0 + }; + + Storyboard.SetTarget(doubleAnimation1, _slideFragment); + Storyboard.SetTargetProperty(doubleAnimation1, TranslatePath.Path); + _fadeInStoryboard.Children.Add(doubleAnimation1); + + // New color animation for _shadowFragment + var colorAnimation1 = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(190, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation1, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation1, ColorPath.Path); + _fadeInStoryboard.Children.Add(colorAnimation1); + + // Create a new fadeOut animation storyboard + _fadeOutStoryboard = new Storyboard(); + + // New double animation + var doubleAnimation2 = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = -_slideFragment.Width - 200 + }; + + Storyboard.SetTarget(doubleAnimation2, _slideFragment); + Storyboard.SetTargetProperty(doubleAnimation2, TranslatePath.Path); + _fadeOutStoryboard.Children.Add(doubleAnimation2); + + // New color animation for _shadowFragment + var colorAnimation2 = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(0, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation2, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation2, ColorPath.Path); + _fadeOutStoryboard.Children.Add(colorAnimation2); + + } + + public void UnShadow() + { + var shadow = new Storyboard(); + + var doubleAnimation = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = -_slideFragment.Width + }; + + Storyboard.SetTarget(doubleAnimation, _slideFragment); + Storyboard.SetTargetProperty(doubleAnimation, TranslatePath.Path); + shadow.Children.Add(doubleAnimation); + + var colorAnimation = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(0, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation, ColorPath.Path); + shadow.Children.Add(colorAnimation); + + shadow.Completed += shadow_Completed; + shadow.Begin(); + } + private void shadowFragment_Tapped(object sender, TappedRoutedEventArgs e) + { + var shadow = new Storyboard(); + + var doubleAnimation = new DoubleAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = -_slideFragment.Width + }; + + Storyboard.SetTarget(doubleAnimation, _slideFragment); + Storyboard.SetTargetProperty(doubleAnimation, TranslatePath.Path); + shadow.Children.Add(doubleAnimation); + + var colorAnimation = new ColorAnimation + { + Duration = new Duration(new TimeSpan(0, 0, 0, 0, 200)), + To = Color.FromArgb(0, 0, 0, 0) + }; + + Storyboard.SetTarget(colorAnimation, _shadowFragment); + Storyboard.SetTargetProperty(colorAnimation, ColorPath.Path); + shadow.Children.Add(colorAnimation); + + shadow.Completed += shadow_Completed; + shadow.Begin(); + } + private void shadow_Completed(object sender, object e) + { + _shadowFragment.IsHitTestVisible = false; + _shadowFragment.Visibility = Visibility.Collapsed; + Shadowed = false; + + // raise close event + if (DrawerClosed != null) DrawerClosed(this); + } + private void fadeOutStoryboard_Completed(object sender, object e) + { + _shadowFragment.Visibility = Visibility.Collapsed; + Shadowed = false; + if (DrawerClosed != null) DrawerClosed(this); + } + #region MoveShadow + private void MoveShadowFragment(double left) + { + // Show shadow fragment + _shadowFragment.Background = new SolidColorBrush(Color.FromArgb(255, 255, 255, 255)); + _shadowFragment.Visibility = Visibility.Visible; + + // Set bg color based on current _slideFragment position. + var maxLeft = _slideFragment.ActualWidth; + var currentLeft = maxLeft - left; + + var temp = Convert.ToInt32((currentLeft / maxLeft) * MaxAlpha); + + // Limit temp variable to 190 to avoid OverflowException + if (temp > MaxAlpha) temp = MaxAlpha; + + byte alphaColorIndex; + try + { + alphaColorIndex = Convert.ToByte(MaxAlpha - temp); + } + catch + { + alphaColorIndex = 0; + } + + _shadowFragment.Background = new SolidColorBrush(Color.FromArgb(alphaColorIndex, 0, 0, 0)); + } + #endregion + #endregion + } +} diff --git a/File360/SideBarMenuButton.xaml b/File360/SideBarMenuButton.xaml @@ -0,0 +1,25 @@ +<Button + x:Class="File360.SideBarMenuButton" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + HorizontalContentAlignment="Left" FontWeight="Thin" BorderBrush="{x:Null}"> + + <StackPanel Orientation="Horizontal" x:Name="LayoutGrid" Margin="0,5"> + <TextBlock x:Name="TextImage" + VerticalAlignment="Center" + FontFamily="Assets/Font/iconFont.ttf#iconfont" + FontSize="25" + Text="t" + TextAlignment="Left" Foreground="{ThemeResource PhoneForegroundBrush}"/> + <TextBlock x:Name="Text" + TextWrapping="NoWrap" + FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" + FontSize="18" + TextAlignment="Left" + Text="sd som" VerticalAlignment="Center" Foreground="{ThemeResource PhoneForegroundBrush}" Margin="5,0,0,0"/> + </StackPanel> +</Button> diff --git a/File360/SideBarMenuButton.xaml.cs b/File360/SideBarMenuButton.xaml.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 + +namespace File360 +{ + public sealed partial class SideBarMenuButton : Button + { + public SideBarMenuButton() + { + this.InitializeComponent(); + Width = (Window.Current.Bounds.Width*2)/3; + Height = Window.Current.Bounds.Height / 12; + } + public string ImageText + { + get { return TextImage.Text; } + set { TextImage.Text = value; } + } + public string ContentText + { + get { return Text.Text; } + set { Text.Text = value; } + } + public SolidColorBrush BackgroundColor + { + get { return (SolidColorBrush)LayoutGrid.Background; } + set { LayoutGrid.Background = value; } + } + } +} diff --git a/File360/StoreManifest.xml b/File360/StoreManifest.xml @@ -0,0 +1,5 @@ +<StoreManifest xmlns="http://schemas.microsoft.com/appx/2010/StoreManifest"> + <ProductFeatures> + <SDOptOut>true</SDOptOut> + </ProductFeatures> +</StoreManifest> +\ No newline at end of file diff --git a/File360/Strings/en-US/Resources.resw b/File360/Strings/en-US/Resources.resw @@ -0,0 +1,150 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <data name="AddAppBarButton.Label" xml:space="preserve"> + <value>add</value> + </data> + <data name="Header.Text" xml:space="preserve"> + <value>MY APPLICATION</value> + </data> + <data name="NavigationFailedExceptionMessage" xml:space="preserve"> + <value>Navigation failed.</value> + </data> + <data name="NewItemDescription" xml:space="preserve"> + <value>Item Description: Pellentesque porta, mauris quis interdum vehicula, urna sapien ultrices velit, nec venenatis dui odio in augue. Cras posuere, enim a cursus convallis, neque turpis malesuada erat, ut adipiscing neque tortor ac erat.</value> + </data> + <data name="NewItemTitle" xml:space="preserve"> + <value>Item Title: {0}</value> + </data> + <data name="Pivot.Title" xml:space="preserve"> + <value>MY APPLICATION</value> + </data> + <data name="PivotItem1.Header" xml:space="preserve"> + <value>first</value> + </data> + <data name="PivotItem2.Header" xml:space="preserve"> + <value>second</value> + </data> + <data name="SecondaryButton1.Label" xml:space="preserve"> + <value>secondary command 1</value> + </data> + <data name="SecondaryButton2.Label" xml:space="preserve"> + <value>secondary command 2</value> + </data> +</root> +\ No newline at end of file diff --git a/File360/Utility/Helper/NativeOperationsHelper.cs b/File360/Utility/Helper/NativeOperationsHelper.cs @@ -0,0 +1,86 @@ +/********************************************************************** + * VLC for WinRT + ********************************************************************** + * Copyright © 2013-2014 VideoLAN and Authors + * + * Licensed under GPLv2+ and MPLv2 + * Refer to COPYING file of the official project for license + **********************************************************************/ + +using System; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using Windows.Storage; + +namespace File360.Utility.Helpers +{ + internal class NativeOperationsHelper + { + // ReSharper disable InconsistentNaming + /// <summary> + /// La déclaration de l'API GetFileAttributesEx + /// </summary> + /// <param name="lpFileName">Le nom du fichier recherché</param> + /// <param name="fInfoLevelId">Quelles types d'info on recherche</param> + /// <param name="lpFileInformation">Structure contenant les informations une fois l'API appelée</param> + /// <returns></returns> + [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] + [return: MarshalAs(UnmanagedType.Bool)] + public static extern bool GetFileAttributesEx( + string lpFileName, + GET_FILEEX_INFO_LEVELS fInfoLevelId, + out WIN32_FILE_ATTRIBUTE_DATA lpFileInformation); + + /// <summary> + /// Type d'infos recherchées + /// </summary> + public enum GET_FILEEX_INFO_LEVELS + { + /// <summary> + /// C'est la seule valeur autorisée avec WinRT + /// </summary> + GetFileExInfoStandard, + /// <summary> + /// Ne fonctionne pas sous WinRT => marqué Obsolete + /// </summary> + [Obsolete] + GetFileExMaxInfoLevel + } + + /// <summary> + /// Structure contenant les informations sur le fichier + /// </summary> + [StructLayout(LayoutKind.Sequential)] + public struct WIN32_FILE_ATTRIBUTE_DATA + { + public FileAttributes dwFileAttributes; + public FILETIME ftCreationTime; + public FILETIME ftLastAccessTime; + public FILETIME ftLastWriteTime; + public uint nFileSizeHigh; + public uint nFileSizeLow; + } + + // quelques valeurs d'erreurs succeptibles d'arriver + private const int ERROR_FILE_NOT_FOUND = 2; + private const int ERROR_PATH_NOT_FOUND = 3; + private const int ERROR_ACCESS_DENIED = 5; + + public static bool FileExist(string fileName) + { + WIN32_FILE_ATTRIBUTE_DATA fileData; + if (GetFileAttributesEx(fileName, GET_FILEEX_INFO_LEVELS.GetFileExInfoStandard, out fileData)) + return true; + + // récupération de la dernière erreur (in the same thread of course ;-)) + var lastError = Marshal.GetLastWin32Error(); + if (lastError == ERROR_FILE_NOT_FOUND || lastError == ERROR_PATH_NOT_FOUND) return false; + // si c'est pas un fichier non trouvé, on lance une exception + if (lastError == ERROR_ACCESS_DENIED) + throw new SecurityAccessDeniedException("Acces Denied"); + + throw new InvalidOperationException(string.Format("Erreur pendant l'accès au fichier {0}, code {1}", fileName, lastError)); + } + + } +} diff --git a/File360/Utility/Helper/SecurityAccessDeniedException.cs b/File360/Utility/Helper/SecurityAccessDeniedException.cs @@ -0,0 +1,19 @@ +using System; + +namespace File360.Utility.Helpers +{ + internal class SecurityAccessDeniedException : Exception + { + public SecurityAccessDeniedException() + { + } + + public SecurityAccessDeniedException(string message) : base(message) + { + } + + public SecurityAccessDeniedException(string message, Exception innerException) : base(message, innerException) + { + } + } +} +\ No newline at end of file diff --git a/File360/VaultPage.xaml b/File360/VaultPage.xaml @@ -1,83 +1,74 @@ -<phone:PhoneApplicationPage - xmlns:local="clr-namespace:File360" - xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" - xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit" +<Page + x:Class="File360.VaultPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" - xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" - xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" + xmlns:local="using:File360" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - x:Class="File360.vault" - local:TiltEffect.IsTiltEnabled="True" mc:Ignorable="d" - Orientation="Portrait" - shell:SystemTray.IsVisible="True"> + RequestedTheme="Dark" + Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" FontSize="33.333"> + <Page.Resources> + <Storyboard x:Name="AuthenticationFailed" AutoReverse="True" RepeatBehavior="1x"> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="image"> + <SplineDoubleKeyFrame KeyTime="0" Value="0"/> + <EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="15"> + <EasingDoubleKeyFrame.EasingFunction> + <QuarticEase EasingMode="EaseIn"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + <EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="-15"> + <EasingDoubleKeyFrame.EasingFunction> + <QuadraticEase EasingMode="EaseInOut"/> + </EasingDoubleKeyFrame.EasingFunction> + </EasingDoubleKeyFrame> + </DoubleAnimationUsingKeyFrames> + </Storyboard> + </Page.Resources> - <phone:PhoneApplicationPage.Resources> - <Style x:Key="EmptyPressedState" TargetType="Button"> - <Setter Property="HorizontalAlignment" Value="Left"/> - <Setter Property="BorderBrush" Value="Transparent"/> - <Setter Property="VerticalAlignment" Value="Top"/> - <Setter Property="FontSize" Value="30"/> - <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilySemiLight}"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <Grid Background="Transparent"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneButtonBasePressedForegroundBrush}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="ButtonBackground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="Transparent"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"> - <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"/> - </Border> - </Grid> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - - <DataTemplate x:Key="VaultTemplate"> - <StackPanel Margin="0,0,15,50" > - <!--<Button x:Name="btnb" Content="{Binding Name}" Click="sdsub" Style="{StaticResource ListButtonStyle}"/>--> - <Button x:Name="folderTap" Content="{Binding VaultName}" Style="{StaticResource EmptyPressedState}" CharacterSpacing="0" Hold="folderTap_Hold" VerticalAlignment="Top" /> - <!--<TextBlock x:Name="subtxt" Text="{Binding Name2}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>--> - <toolkit:ContextMenuService.ContextMenu> - - <toolkit:ContextMenu IsZoomEnabled="True" x:Name="ContextMenu"> - - <toolkit:MenuItem x:Name="Remove" Header="remove" Click="Remove_Click"/> - - </toolkit:ContextMenu> - - </toolkit:ContextMenuService.ContextMenu> - </StackPanel> - </DataTemplate> - </phone:PhoneApplicationPage.Resources> - - <!--LayoutRoot is the root grid where all page content is placed--> - <Grid x:Name="LayoutRoot" Background="Transparent"> - <phone:Pivot x:Name="vaultpivot" HorizontalAlignment="Left" Height="768" Title="FILE360°" VerticalAlignment="Top" Width="480" Grid.RowSpan="2"> - <phone:PivotItem Header="vault" Margin="10,28,-358,0"> - <toolkit:LongListMultiSelector - x:Name="vaultLister" - ItemTemplate="{StaticResource VaultTemplate}" - IsGroupingEnabled="True"/> - </phone:PivotItem> - </phone:Pivot> - + <Grid> + <Grid> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="1.5*"/> + </Grid.RowDefinitions> + <Grid> + <Image x:Name="image" Margin="45" Source="Assets/SmallLogo.png" HorizontalAlignment="Center" VerticalAlignment="Center" RenderTransformOrigin="0.5,0.5"> + <Image.RenderTransform> + <CompositeTransform/> + </Image.RenderTransform> + </Image> + </Grid> + <Grid Grid.Row="1"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="1.5*"/> + <RowDefinition Height="5*"/> + </Grid.RowDefinitions> + <TextBox x:Name="passwordBox" InputScope="Number" VerticalAlignment="Stretch" BorderBrush="{x:Null}" Foreground="White" PlaceholderText="" FontSize="26.667" MaxLength="4" TextAlignment="Center" Style="{StaticResource PasswordTextBox}" Background="{x:Null}" TextChanged="passwordBox_TextChanged" LostFocus="passwordBox_LostFocus"/> + <!--<TextBlock x:Name="passwordBox" Text="" CharacterSpacing="1000" FontWeight="Bold" VerticalAlignment="Stretch" MaxLines="1"/>--> + <!--<Grid x:Name="passwordGrid" Grid.Row="1"> + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + </Grid>--> + <Grid Grid.Row="1" Tapped="Grid_Tapped"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneChromeColor}"/> + </Grid.Background> + </Grid> + </Grid> + </Grid> </Grid> - -</phone:PhoneApplicationPage> -\ No newline at end of file +</Page> diff --git a/File360/VaultPage.xaml.cs b/File360/VaultPage.xaml.cs @@ -1,114 +1,81 @@ -using System; +using File360.Common; +using System; using System.Collections.Generic; +using System.IO; using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Navigation; -using Microsoft.Phone.Controls; -using Microsoft.Phone.Shell; -using Microsoft.Devices.Sensors; -using Microsoft.Xna.Framework; -using System.ComponentModel; -using File360.Resources; -using System.IO.IsolatedStorage; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.Graphics.Display; +using Windows.UI.ViewManagement; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 namespace File360 { - public partial class vault : PhoneApplicationPage + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class VaultPage : Page { - Accelerometer accelerometer; - const string MAIN_PAGE_URI = "/MainPage.xaml"; - List<vaultlist> vl = new List<vaultlist>(); - public static string Vbtns; - IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings; - - int index; - public vault() + string PASS_KEY = "2580"; + public VaultPage() { - InitializeComponent(); - #region AccelerometerChecker - - if ((string)appSettings["Shaker"] == "On") - { - if (accelerometer == null) - { - accelerometer = new Accelerometer(); - accelerometer.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20); - accelerometer.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(accelerometer_CurrentValueChanged); - try - { - accelerometer.Start(); - } - catch (InvalidOperationException ex) - { - MessageBox.Show("Initiating Accelerometer Failed!" + "\nAdditional Information:\n" + ex); - } - } - } - -#endregion - #region FilesLister - if (MainPage.Hbtns != null) - { - vl.Add(new vaultlist(MainPage.Hbtns, "Folder")); - List<AlphaKeyGroup<vaultlist>> DataSource = AlphaKeyGroup<vaultlist>.CreateGroups(vl, System.Threading.Thread.CurrentThread.CurrentUICulture, (vaultlist v) => { return v.VaultName; }, true); - vaultLister.ItemsSource = DataSource; - } - #endregion + this.InitializeComponent(); + Loaded += VaultPage_Loaded; } - #region Accelerometer - - void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) + private void VaultPage_Loaded(object sender, RoutedEventArgs e) { - Dispatcher.BeginInvoke(() => UpdateUI(e.SensorReading)); + passwordBox.Focus(FocusState.Pointer); + //int btNo = 0; + //for (int i = 0; i <= 3; i++) + //{ + // for (int j = 0; j < 3; j++) + // { + // btNo++; + // Button bt = new Button(); + // bt.Content = btNo; + // bt.HorizontalAlignment = HorizontalAlignment.Stretch; + // bt.VerticalAlignment = VerticalAlignment.Stretch; + // bt.Click += (o, t) => + // { + // passwordBox.Text += bt.Content; + // }; + // Grid.SetRow(bt, i); + // Grid.SetColumn(bt, j); + // passwordGrid.Children.Add(bt); + // } + //} } - private void UpdateUI(AccelerometerReading accelerometerReading) + private void passwordBox_TextChanged(object sender, TextChangedEventArgs e) { - - Vector3 acceleration = accelerometerReading.Acceleration; - - if (acceleration.X >= 0.8 || acceleration.X <= -0.8) + if (passwordBox.Text.Count() == 4 && passwordBox.Text != PASS_KEY) { - if (accelerometer != null) - { - accelerometer.Stop(); - } - NavigationService.GoBack(); + AuthenticationFailed.Begin(); + passwordBox.Text = ""; } - } - protected override void OnBackKeyPress(CancelEventArgs e) + private void Grid_Tapped(object sender, TappedRoutedEventArgs e) { - if (accelerometer != null) - { - accelerometer.Stop(); - } + e.Handled = true; + passwordBox.Focus(FocusState.Pointer); } -#endregion - #region ContextMenu - - private void Remove_Click(object sender, RoutedEventArgs e) + private void passwordBox_LostFocus(object sender, RoutedEventArgs e) { - - vl.RemoveAt(index); - List<AlphaKeyGroup<vaultlist>> DataSource = AlphaKeyGroup<vaultlist>.CreateGroups(vl, System.Threading.Thread.CurrentThread.CurrentUICulture, (vaultlist v) => { return v.VaultName; }, true); - vaultLister.ItemsSource = DataSource; - } - - #endregion + ((Grid)(((Grid)this.Frame.Parent).Parent)).Visibility = Visibility.Collapsed; + this.Frame.Content = null; - private void folderTap_Hold(object sender, System.Windows.Input.GestureEventArgs e) - { - Button b = (Button)sender; - Vbtns = (b.Content).ToString(); - vaultlist dataObject = (vaultlist)b.DataContext; - index = vl.IndexOf(dataObject); } - } -} -\ No newline at end of file +} diff --git a/File360/VideoList.cs b/File360/VideoList.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; + +namespace File360 +{ + class VideoList + { + + public ImageBrush Preview { set; get; } + public string VideoName { set; get; } + public string VideoDuration { set; get; } + public string FolderName { get; set; } + public string Count { set; get; } + + public VideoList(string videoName, TimeSpan videoDuration,ImageBrush preview) + { + this.VideoName = videoName; + this.VideoDuration = videoDuration.ToString(); + this.Preview = preview; + } + + public VideoList(string folderName, int count) + { + this.FolderName = folderName; + this.Count = count.ToString(); + } + } + +} diff --git a/File360/VideoPage.xaml b/File360/VideoPage.xaml @@ -0,0 +1,213 @@ +<Page + x:Class="File360.VideoPage" + xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:local="using:File360" + xmlns:d="http://schemas.microsoft.com/expression/blend/2008" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" + mc:Ignorable="d" + Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> + <Page.Resources> + <Storyboard x:Name="MenuHide"> + <DoubleAnimation Duration="0:0:0.2" To="-50" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid1" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid1" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="-40" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="toggleButton" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="40" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="toggleButton1" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid3" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.3" To="1.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.3" To="1.2" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.3" To="80" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.3" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.4" To="1.1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="grid1" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.4" To="1.1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="grid1" d:IsOptimized="True"/> + <DoubleAnimation Duration="0:0:0.2" To="0" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/> + </Storyboard> + <Storyboard x:Name="MenuHideRev"> + <DoubleAnimation Duration="0:0:0.4" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="grid1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid1"> + <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="1"/> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="toggleButton"> + <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="0"/> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="toggleButton1"> + <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="0"/> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid3"> + <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="1"/> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimation Duration="0:0:0.4" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.4" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.4" To="0" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="stackPanel" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="stackPanel"> + <SplineDoubleKeyFrame KeyTime="0:0:0.4" Value="1"/> + </DoubleAnimationUsingKeyFrames> + <DoubleAnimation Duration="0:0:0.4" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="grid1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.4" To="1" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="grid1" d:IsOptimized="True"> + <DoubleAnimation.EasingFunction> + <QuarticEase EasingMode="EaseInOut"/> + </DoubleAnimation.EasingFunction> + </DoubleAnimation> + <DoubleAnimation Duration="0:0:0.2" To="1" Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="rectangle" d:IsOptimized="True"/> + </Storyboard> + </Page.Resources> + + <Grid x:Name="MediaFragment" Grid.RowSpan="2" RequestedTheme="Dark" RenderTransformOrigin="0,0"> + <Grid x:Name="imageContainerMedia" VerticalAlignment="Stretch"> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource PhoneBackgroundColor}"/> + </Grid.Background> + <Viewbox StretchDirection="Both" Stretch="Uniform"> + <MediaElement x:Name="mediaPlayer" AudioCategory="BackgroundCapableMedia" ManipulationStarted="mediaPlayer_ManipulationStarted" ManipulationDelta="mediaPlayer_ManipulationDelta" ManipulationCompleted="mediaPlayer_ManipulationCompleted"/> + </Viewbox> + <Grid VerticalAlignment="Stretch" Margin="0"> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="*"/> + </Grid.RowDefinitions> + <Grid x:Name="grid1" Opacity="1" RenderTransformOrigin="0.5,0.5"> + <Grid.RenderTransform> + <CompositeTransform/> + </Grid.RenderTransform> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Grid MinWidth="50" MinHeight="0" > + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto"/> + <ColumnDefinition Width="Auto"/> + </Grid.ColumnDefinitions> + <Button > + <StackPanel Margin="10,0" Orientation="Horizontal"> + <StackPanel VerticalAlignment="Center" CacheMode="BitmapCache" x:Name="grid" Grid.Column="1" Margin="0"> + <TextBlock x:Name="videoName" Text="no media" TextWrapping="NoWrap" MinWidth="175" FontSize="18.667" VerticalAlignment="Center" FontFamily="Assets/Font/Custom/Raleway-Light.ttf#Raleway" Margin="0" HorizontalAlignment="Left" Foreground="White"/> + <TextBlock Text="{Binding Text, ElementName=mediaDuration}" FontSize="13.333" VerticalAlignment="Center" Margin="0" FontFamily="Assets/Font/Custom/ClearSans-Thin.ttf#Clear Sans Thin" HorizontalAlignment="Left" Foreground="White"/> + </StackPanel> + </StackPanel> + </Button> + </Grid> + <Button x:Name="button2" Grid.Column="1" MinWidth="0" Visibility="Collapsed" Content="c" FontFamily="Assets/Font/iconfont.ttf#iconfont"/> + </Grid> + <Grid RequestedTheme="Dark" x:Name="grid2" Grid.Row="1" Visibility="Visible" > + <Grid.RowDefinitions> + <RowDefinition Height="*"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <Grid Tapped="Grid_Tapped"> + <TextBlock x:Name="vidoeStats" Text="" FontSize="150" VerticalAlignment="Center" HorizontalAlignment="Center" FontFamily="Assets/Font/iconfont.ttf#iconfont" /> + <Rectangle x:Name="rectangle"> + <Rectangle.Fill> + <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0" Opacity="0.7"> + <GradientStop Color="Black" Offset="0"/> + <GradientStop Color="Black" Offset="1"/> + <GradientStop Offset="0.5"/> + <GradientStop Offset="0.05" Color="{ThemeResource ContentDialogDimmingColor}"/> + <GradientStop Offset="0.95" Color="{ThemeResource ContentDialogDimmingColor}"/> + </LinearGradientBrush> + </Rectangle.Fill> + </Rectangle> + <Border Grid.Column="1" x:Name="border" VerticalAlignment="Center" RenderTransformOrigin="0.5,1"> + <Border.RenderTransform> + <CompositeTransform ScaleY="0"/> + </Border.RenderTransform> + <Border.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}" Opacity="0.98"/> + </Border.Background> + <TextBlock x:Name="sliderTimer" Margin="30" Text="{Binding Text, ElementName=currentDuration}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="30"> + <TextBlock.Foreground> + <SolidColorBrush Color="{ThemeResource PhoneForegroundColor}"/> + </TextBlock.Foreground> + </TextBlock> + </Border> + </Grid> + <Grid x:Name="grid3" VerticalAlignment="Bottom"> + <ToggleButton x:Name="toggleButton" MinWidth="50" Content="X" FontFamily="Assets/Font/iconfont.ttf#iconfont" Style="{StaticResource ToggleButtonStyle}" VerticalAlignment="Bottom" Margin="10,0,0,25" RenderTransformOrigin="0.5,0.5"> + <ToggleButton.RenderTransform> + <CompositeTransform/> + </ToggleButton.RenderTransform> + </ToggleButton> + + <ToggleButton x:Name="toggleButton1" Content="C" MinWidth="50" FontFamily="Assets/Font/iconfont.ttf#iconfont" Style="{StaticResource ToggleButtonStyle}" Margin="0,0,10,25" HorizontalAlignment="Right" VerticalAlignment="Bottom" RenderTransformOrigin="0.5,0.5"> + <ToggleButton.RenderTransform> + <CompositeTransform/> + </ToggleButton.RenderTransform> + </ToggleButton> + </Grid> + + <Grid Grid.Row="1" VerticalAlignment="Center"> + <StackPanel x:Name="stackPanel" RenderTransformOrigin="0.5,0.5"> + <StackPanel.RenderTransform> + <CompositeTransform/> + </StackPanel.RenderTransform> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid.RowDefinitions> + <RowDefinition Height="Auto"/> + <RowDefinition Height="Auto"/> + </Grid.RowDefinitions> + <ProgressBar Value="0" Margin="10" x:Name="musicSlider" BorderBrush="{x:Null}" VerticalAlignment="Top" Height="5"/> + + <TextBlock x:Name="currentDuration" Grid.Row="1" Text="--:--" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,5,0,5"/> + <TextBlock x:Name="mediaDuration" Text="--:--" Grid.Row="1" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,5,10,5"/> + </Grid> + <Grid> + <Grid.Background> + <SolidColorBrush Color="{ThemeResource ContentDialogDimmingColor}"/> + </Grid.Background> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="*"/> + </Grid.ColumnDefinitions> + <Button Content="6" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + <Button x:Name="playPause" Grid.Column="1" Content="8" FontFamily="Assets/Font/iconfont.ttf#iconfont" Click="PlayCurrent" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + <Button Content="4" Grid.Column="2" FontFamily="Assets/Font/iconfont.ttf#iconfont" FontSize="20" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> + </Grid> + </Grid> + </StackPanel> + </Grid> + </Grid> + </Grid> + </Grid> + </Grid> +</Page> diff --git a/File360/VideoPage.xaml.cs b/File360/VideoPage.xaml.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.Storage; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556 + +namespace File360 +{ + /// <summary> + /// An empty page that can be used on its own or navigated to within a Frame. + /// </summary> + public sealed partial class VideoPage : Page + { + + private bool MENU_HIDDEN = true; + private DispatcherTimer musicDispatcher; + public VideoPage() + { + this.InitializeComponent(); + Loaded += VideoPage_Loaded; + Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed; + SizeChanged += VideoPage_SizeChanged; + } + + private void VideoPage_SizeChanged(object sender, SizeChangedEventArgs e) + { + VisualStateManager.GoToState(this, "Landscape", false); + } + + private void VideoPage_Loaded(object sender, RoutedEventArgs e) + { + MenuHide.Begin(); + } + + private void HardwareButtons_BackPressed(object sender, Windows.Phone.UI.Input.BackPressedEventArgs e) + { + if (this.Frame.CanGoBack) + this.Frame.GoBack(); + else Application.Current.Exit(); + } + + /// <summary> + /// Invoked when this page is about to be displayed in a Frame. + /// </summary> + /// <param name="e">Event data that describes how this page was reached. + /// This parameter is typically used to configure the page.</param> + protected override void OnNavigatedTo(NavigationEventArgs e) + { + IStorageFile isf = (IStorageFile)e.Parameter; + mediaPlayer.Source = new Uri(isf.Path); + mediaPlayer.MediaOpened += (es,st) => + { + UpdateVideoInfo(isf.Name, mediaPlayer.NaturalDuration.TimeSpan.Minutes + ":" + mediaPlayer.NaturalDuration.TimeSpan.Seconds.ToString(),"8"); + musicSlider.Maximum = mediaPlayer.NaturalDuration.TimeSpan.TotalSeconds; + musicDispatcher.Start(); + }; + + musicDispatcher = new DispatcherTimer(); + musicDispatcher.Interval = TimeSpan.FromMilliseconds(1000); + + + mediaPlayer.MediaEnded += async (es,st) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + //UpdateVideoInfo("no media", "--:--", "5"); + //musicDispatcher.Stop(); + ExitOrGoBack(); + }); + }; + + mediaPlayer.MediaFailed += async (s, t) => + { + await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate + { + //UpdateVideoInfo("no media", "--:--", "5"); + if (musicDispatcher.IsEnabled) + musicDispatcher.Stop(); + MessageBox mb = new MessageBox(); + mb.HeadingText = "Cannot Play Media"; + mb.ContentText = "Cannot play this file, do you want to open with other video player?"; + mb.LeftButtonHandler += (es, st) => + { + ExitOrGoBack(); + }; + mb.RightButtonHandler += async (es, st) => + { + await Windows.System.Launcher.LaunchFileAsync(isf); + }; + MediaFragment.Children.Add(mb); + }); + }; + + + musicDispatcher.Tick += (s, t) => + { + musicSlider.Value = mediaPlayer.Position.TotalSeconds; + currentDuration.Text = mediaPlayer.Position.Minutes + ":" + mediaPlayer.Position.Seconds; + + }; + videoName.Text = isf.Name; + + } + + private void ExitOrGoBack() + { + if (this.Frame.CanGoBack) + this.Frame.GoBack(); + else Application.Current.Exit(); + } + + private void UpdateVideoInfo(string name, string dur, string playMode) + { + videoName.Text = name; + mediaDuration.Text = dur; + musicSlider.Value = 0; + playPause.Content = playMode; + } + + private void mediaPlayer_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) + { + + } + + private void mediaPlayer_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e) + { + + } + + private void mediaPlayer_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) + { + + } + + private void PlayCurrent(object sender, RoutedEventArgs e) + { + if (mediaPlayer.CurrentState == MediaElementState.Playing) + { + mediaPlayer.Pause(); + playPause.Content = "5"; + //DurationBlink.Begin(); + } + else if (mediaPlayer.CurrentState == MediaElementState.Paused) + { + mediaPlayer.Play(); + playPause.Content = "8"; + //DurationBlink.Stop(); + } + + } + + private void Grid_Tapped(object sender, TappedRoutedEventArgs e) + { + if (MENU_HIDDEN) + MenuHideRev.Begin(); + else MenuHide.Begin(); + MENU_HIDDEN = !MENU_HIDDEN; + } + } +} diff --git a/File360/musiclist.cs b/File360/musiclist.cs @@ -3,23 +3,74 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Media; namespace File360 { - class musiclist + class MusicList { - public string SongName{set;get;} + public double ImageHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 3.5; + else return Window.Current.Bounds.Width / 3.5; + } + } + public double ImageWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2.2; + else return Window.Current.Bounds.Height / 2.2; + } + } + + public double PicHeight + { + get + { + if (IsVertical()) return (Window.Current.Bounds.Height) / 2.5; + else return (Window.Current.Bounds.Width) / 2.5; + } + } + public double PicWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2; + else return Window.Current.Bounds.Height / 2; + } + } + public ImageBrush Background { set; get; } + public string SongName { set; get; } public string ArtistName { set; get; } public string AlbumName { set; get; } - public string Musicindex { set; get; } + public string Count{ set; get; } + public string FolderName { get; set; } - public musiclist(string songName, string artistName, string albumName, string index) + public MusicList(string songName, string artistName, string albumName, ImageBrush background) { this.SongName = songName; this.ArtistName = artistName; this.AlbumName = albumName; - this.Musicindex = index; + this.Background = background; + } + + public MusicList(string folderName, int count) + { + this.FolderName = folderName; + this.Count = count.ToString(); + } + + + private bool IsVertical() + { + if (Window.Current.Bounds.Height > Window.Current.Bounds.Width) return true; + else return false; } } + } diff --git a/File360/packages.config b/File360/packages.config @@ -1,4 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="WPtoolkit" version="4.2013.08.16" targetFramework="wp80" /> + <package id="Coding4Fun.Toolkit.Controls" version="2.1.7" targetFramework="wpa81" /> + <package id="TagLib.Portable" version="1.0.3" targetFramework="wpa81" /> + <package id="WinRTXamlToolkit.WindowsPhone" version="1.8.1.0" targetFramework="wpa81" /> + <package id="WriteableBitmapEx" version="1.5.0.0" targetFramework="wpa81" /> </packages> \ No newline at end of file diff --git a/File360/picturelist.cs b/File360/picturelist.cs @@ -2,10 +2,32 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading.Tasks; +using Windows.UI.Xaml.Media; namespace File360 { - class picturelist<T> + class PictureList { + + public ImageBrush Preview { set; get; } + public string PicName { set; get; } + public DateTime PicDate { set; get; } //pic created date. + public string Count { set; get; } + public string FolderName { get; set; } + + public PictureList(string picName, DateTime picDate, ImageBrush preview) + { + this.PicName = picName; + this.PicDate = picDate; + this.Preview = preview; + } + + public PictureList(string folderName, int count) + { + this.FolderName = folderName; + this.Count = count.ToString(); + } } + } diff --git a/File360/sdlist.cs b/File360/sdlist.cs @@ -1,22 +1,167 @@ -using System.Text; -using Microsoft.Phone.Storage; - +using System; +using System.Collections.ObjectModel; +using Windows.Foundation; +using Windows.Storage.FileProperties; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Media.Imaging; namespace File360 { - class sdlist + public class sdlist { + public ImageBrush Background { set; get; } + + public double BarHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 7.3; + else return Window.Current.Bounds.Width / 7.3; + } + } + + + + public double PopupHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 2; + else return Window.Current.Bounds.Width / 2; + } + } + + public string Name { set; get; } + + public string Image { set; get; } + + public string Count { set; get; } - public string Name + public bool IsVisible { set; get; } + + + public double VidHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 4; + else return Window.Current.Bounds.Width / 4; + } + } + public double VidWidth { - set; - get; + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 0.95; + else return Window.Current.Bounds.Height / 0.95; + } } - public string Name2 { set; get; } - public sdlist(string name, string FImage) + public double PicHeight + { + get + { + if (IsVertical()) return (Window.Current.Bounds.Height - 20) / 3; + else return (Window.Current.Bounds.Width -20) / 3; + } + } + public double PicWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2; + else return Window.Current.Bounds.Height / 2; + } + } + public double ImageHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 3.5; + else return Window.Current.Bounds.Width / 3.5; + } + } + public double ImageWidth + { + get + { + if (IsVertical()) return Window.Current.Bounds.Width / 2.2; + else return Window.Current.Bounds.Height / 2.2; + } + } + public double Space + { + get { return Window.Current.Bounds.Height / 600; } + } + public double GridHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 6; + else return Window.Current.Bounds.Width / 6; + } + } + public double GridWidth + { + get + { + if (IsVertical()) return (Window.Current.Bounds.Width ) / 3; + else return (Window.Current.Bounds.Height) / 3; + } + } + public double ListHeight + { + get + { + if (IsVertical()) return Window.Current.Bounds.Height / 8; + else return Window.Current.Bounds.Width / 8; + } + } + public double Width + { + get { return Window.Current.Bounds.Width; } + } + + + public sdlist(string name, string image) { this.Name = name; - this.Name2 = FImage; + this.Image = image; + if (image == "f") IsVisible = false; + else IsVisible = true; + } + +string Name; +string Image; + + public sdlist(string name, string image, string count) + { + this.Name = name; + this.Image = image; + this.Count = count; + } + public sdlist(string name, StorageItemThumbnail background, string count) + { + ImageBrush im = new ImageBrush(); + BitmapImage bm = new BitmapImage(); + bm.SetSource(background); + im.ImageSource = bm; + im.Stretch = Stretch.UniformToFill; + this.Name = name; + this.Background = im; + this.Count = count; + } + public sdlist(string name, ImageBrush background, string count) + { + this.Name = name; + this.Background = background; + this.Count = count; + } + private bool IsVertical() + { + if (Window.Current.Bounds.Height > Window.Current.Bounds.Width) return true; + else return false; } } }