diff options
-rw-r--r-- | support/hololens/ServoApp/BrowserPage.cpp | 12 | ||||
-rw-r--r-- | support/hololens/ServoApp/BrowserPage.h | 4 | ||||
-rw-r--r-- | support/hololens/ServoApp/BrowserPage.xaml | 220 |
3 files changed, 134 insertions, 102 deletions
diff --git a/support/hololens/ServoApp/BrowserPage.cpp b/support/hololens/ServoApp/BrowserPage.cpp index a9de7e2942d..98521ccd7da 100644 --- a/support/hololens/ServoApp/BrowserPage.cpp +++ b/support/hololens/ServoApp/BrowserPage.cpp @@ -7,6 +7,7 @@ #include "BrowserPage.h" #include "BrowserPage.g.cpp" +using namespace std::placeholders; using namespace winrt::Windows::Foundation; using namespace winrt::Windows::UI::Xaml; using namespace winrt::Windows::UI::Core; @@ -50,6 +51,17 @@ void BrowserPage::BindServoEvents() { }); servoControl().OnCaptureGesturesEnded( [=] { navigationBar().IsHitTestVisible(true); }); + urlTextbox().GotFocus(std::bind(&BrowserPage::OnURLFocused, this, _1)); +} + +void BrowserPage::OnURLFocused(Windows::Foundation::IInspectable const &) { + urlTextbox().SelectAll(); +} + +void BrowserPage::OnURLKeyboardAccelerator( + Windows::Foundation::IInspectable const &, + Windows::UI::Xaml::Input::KeyboardAcceleratorInvokedEventArgs const &) { + urlTextbox().Focus(FocusState::Programmatic); } void BrowserPage::LoadServoURI(Uri uri) { diff --git a/support/hololens/ServoApp/BrowserPage.h b/support/hololens/ServoApp/BrowserPage.h index 8c3a540d4c1..6c1af3f9059 100644 --- a/support/hololens/ServoApp/BrowserPage.h +++ b/support/hololens/ServoApp/BrowserPage.h @@ -26,6 +26,10 @@ public: Windows::UI::Xaml::RoutedEventArgs const &); void OnURLEdited(Windows::Foundation::IInspectable const &, Windows::UI::Xaml::Input::KeyRoutedEventArgs const &); + void OnURLFocused(Windows::Foundation::IInspectable const &); + void OnURLKeyboardAccelerator( + Windows::Foundation::IInspectable const &, + Windows::UI::Xaml::Input::KeyboardAcceleratorInvokedEventArgs const &); void Shutdown(); void LoadServoURI(Windows::Foundation::Uri uri); void SetTransientMode(bool); diff --git a/support/hololens/ServoApp/BrowserPage.xaml b/support/hololens/ServoApp/BrowserPage.xaml index 386a20accac..3cd8aabff55 100644 --- a/support/hololens/ServoApp/BrowserPage.xaml +++ b/support/hololens/ServoApp/BrowserPage.xaml @@ -7,108 +7,124 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> - <Page.Resources> - <Style x:Key="NavigationBarButton" TargetType="Button"> - <Setter Property="Background" Value="Transparent"/> - <Setter Property="Foreground" Value="{ThemeResource ButtonForeground}"/> - <Setter Property="BorderBrush" Value="{ThemeResource ButtonBorderBrush}"/> - <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/> - <Setter Property="Padding" Value="0"/> - <Setter Property="Margin" Value="10,2"/> - <Setter Property="MinWidth" Value="30"/> - <Setter Property="MinHeight" Value="30"/> - <Setter Property="HorizontalAlignment" Value="Center"/> - <Setter Property="VerticalAlignment" Value="Center"/> - <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> - <Setter Property="FontWeight" Value="Normal"/> - <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> - <Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}"/> - <Setter Property="FocusVisualMargin" Value="-3"/> - <Setter Property="Template"> - <Setter.Value> - <ControlTemplate TargetType="Button"> - <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" CornerRadius="{TemplateBinding CornerRadius}" ContentTransitions="{TemplateBinding ContentTransitions}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"> - <VisualStateManager.VisualStateGroups> - <VisualStateGroup x:Name="CommonStates"> - <VisualState x:Name="Normal"> - <Storyboard> - <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter"/> - </Storyboard> - </VisualState> - <VisualState x:Name="PointerOver"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBackgroundPointerOver}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBorderBrushPointerOver}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonForegroundPointerOver}"/> - </ObjectAnimationUsingKeyFrames> - <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Pressed"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBackgroundPressed}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBorderBrushPressed}"/> - </ObjectAnimationUsingKeyFrames> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> - <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonForegroundPressed}"/> - </ObjectAnimationUsingKeyFrames> - <PointerDownThemeAnimation Storyboard.TargetName="ContentPresenter"/> - </Storyboard> - </VisualState> - <VisualState x:Name="Disabled"> - <Storyboard> - <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Opacity"> - <DiscreteObjectKeyFrame KeyTime="0" Value="0.2"/> - </ObjectAnimationUsingKeyFrames> - </Storyboard> - </VisualState> - </VisualStateGroup> - </VisualStateManager.VisualStateGroups> - </ContentPresenter> - </ControlTemplate> - </Setter.Value> - </Setter> - </Style> - </Page.Resources> + <Page.Resources> + <Style x:Key="NavigationBarButton" TargetType="Button"> + <Setter Property="Background" Value="Transparent"/> + <Setter Property="Foreground" Value="{ThemeResource ButtonForeground}"/> + <Setter Property="BorderBrush" Value="{ThemeResource ButtonBorderBrush}"/> + <Setter Property="BorderThickness" Value="{ThemeResource ButtonBorderThemeThickness}"/> + <Setter Property="Padding" Value="0"/> + <Setter Property="Margin" Value="10,2"/> + <Setter Property="MinWidth" Value="30"/> + <Setter Property="MinHeight" Value="30"/> + <Setter Property="HorizontalAlignment" Value="Center"/> + <Setter Property="VerticalAlignment" Value="Center"/> + <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> + <Setter Property="FontWeight" Value="Normal"/> + <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> + <Setter Property="UseSystemFocusVisuals" Value="{StaticResource UseSystemFocusVisuals}"/> + <Setter Property="FocusVisualMargin" Value="-3"/> + <Setter Property="Template"> + <Setter.Value> + <ControlTemplate TargetType="Button"> + <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" CornerRadius="{TemplateBinding CornerRadius}" ContentTransitions="{TemplateBinding ContentTransitions}" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"> + <VisualStateManager.VisualStateGroups> + <VisualStateGroup x:Name="CommonStates"> + <VisualState x:Name="Normal"> + <Storyboard> + <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter"/> + </Storyboard> + </VisualState> + <VisualState x:Name="PointerOver"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBackgroundPointerOver}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBorderBrushPointerOver}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonForegroundPointerOver}"/> + </ObjectAnimationUsingKeyFrames> + <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Pressed"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Background"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBackgroundPressed}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="BorderBrush"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonBorderBrushPressed}"/> + </ObjectAnimationUsingKeyFrames> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground"> + <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonForegroundPressed}"/> + </ObjectAnimationUsingKeyFrames> + <PointerDownThemeAnimation Storyboard.TargetName="ContentPresenter"/> + </Storyboard> + </VisualState> + <VisualState x:Name="Disabled"> + <Storyboard> + <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Opacity"> + <DiscreteObjectKeyFrame KeyTime="0" Value="0.2"/> + </ObjectAnimationUsingKeyFrames> + </Storyboard> + </VisualState> + </VisualStateGroup> + </VisualStateManager.VisualStateGroups> + </ContentPresenter> + </ControlTemplate> + </Setter.Value> + </Setter> + </Style> + </Page.Resources> - <Grid VerticalAlignment="Stretch"> - <Grid.RowDefinitions> - <RowDefinition Height="auto"/> - <RowDefinition Height="*"/> - <RowDefinition Height="auto"/> - </Grid.RowDefinitions> - <Grid Grid.Row="0" x:Name="navigationBar" Background="{ThemeResource InkToolbarButtonBackgroundThemeBrush}"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="auto"/> - <ColumnDefinition Width="*"/> - <ColumnDefinition Width="auto"/> - </Grid.ColumnDefinitions> - <StackPanel Orientation="Horizontal" Grid.Column="0"> - <Button Style="{StaticResource NavigationBarButton}" x:Name="backButton" IsTabStop="true" IsEnabled="false" Click="OnBackButtonClicked" AutomationProperties.Name="Back"> - <Image Source="Assets/UI/back.png" Height="12"></Image> - </Button> - <Button Style="{StaticResource NavigationBarButton}" x:Name="forwardButton" IsTabStop="true" IsEnabled="false" Click="OnForwardButtonClicked" AutomationProperties.Name="Forward"> - <Image Source="Assets/UI/forward.png" Height="12"></Image> - </Button> - <Button Style="{StaticResource NavigationBarButton}" x:Name="reloadButton" IsTabStop="true" IsEnabled="false" Visibility="Visible" Click="OnReloadButtonClicked" AutomationProperties.Name="Reload"> - <Image Source="Assets/UI/reload.png" Height="12"></Image> - </Button> - <Button Style="{StaticResource NavigationBarButton}" x:Name="stopButton" IsTabStop="true" IsEnabled="false" Visibility="Collapsed" Click="OnStopButtonClicked" AutomationProperties.Name="Stop"> - <Image Source="Assets/UI/stop.png" Height="12"></Image> - </Button> - </StackPanel> - <TextBox Text="" IsTabStop="true" InputScope="Url" PlaceholderText="Type a URL" x:Name="urlTextbox" Grid.Column="1" KeyUp="OnURLEdited" IsSpellCheckEnabled="False" Margin="3,0"/> - <ProgressRing x:Name="urlbarLoadingIndicator" Grid.Column="2" Margin="10,0"/> + <Grid VerticalAlignment="Stretch"> + <Grid.RowDefinitions> + <RowDefinition Height="auto"/> + <RowDefinition Height="*"/> + <RowDefinition Height="auto"/> + </Grid.RowDefinitions> + <Grid Grid.Row="0" x:Name="navigationBar" Background="{ThemeResource InkToolbarButtonBackgroundThemeBrush}"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="auto"/> + <ColumnDefinition Width="*"/> + <ColumnDefinition Width="auto"/> + </Grid.ColumnDefinitions> + <StackPanel Orientation="Horizontal" Grid.Column="0"> + <Button Style="{StaticResource NavigationBarButton}" x:Name="backButton" IsTabStop="true" IsEnabled="false" Click="OnBackButtonClicked" AutomationProperties.Name="Back"> + <Image Source="Assets/UI/back.png" Height="12"></Image> + <Button.KeyboardAccelerators> + <KeyboardAccelerator Key="Left" Modifiers="Menu" /> + </Button.KeyboardAccelerators> + </Button> + <Button Style="{StaticResource NavigationBarButton}" x:Name="forwardButton" IsTabStop="true" IsEnabled="false" Click="OnForwardButtonClicked" AutomationProperties.Name="Forward"> + <Image Source="Assets/UI/forward.png" Height="12"></Image> + <Button.KeyboardAccelerators> + <KeyboardAccelerator Key="Right" Modifiers="Menu" /> + </Button.KeyboardAccelerators> + </Button> + <Button Style="{StaticResource NavigationBarButton}" x:Name="reloadButton" IsTabStop="true" IsEnabled="false" Visibility="Visible" Click="OnReloadButtonClicked" AutomationProperties.Name="Reload"> + <Image Source="Assets/UI/reload.png" Height="12"></Image> + <Button.KeyboardAccelerators> + <KeyboardAccelerator Key="R" Modifiers="Control" /> + </Button.KeyboardAccelerators> + </Button> + <Button Style="{StaticResource NavigationBarButton}" x:Name="stopButton" IsTabStop="true" IsEnabled="false" Visibility="Collapsed" Click="OnStopButtonClicked" AutomationProperties.Name="Stop"> + <Image Source="Assets/UI/stop.png" Height="12"></Image> + <Button.KeyboardAccelerators> + <KeyboardAccelerator Key="Escape" Modifiers="None" /> + </Button.KeyboardAccelerators> + </Button> + </StackPanel> + <TextBox Text="" IsTabStop="true" InputScope="Url" PlaceholderText="Type a URL" x:Name="urlTextbox" Grid.Column="1" KeyUp="OnURLEdited" IsSpellCheckEnabled="False" Margin="3,0"> + <TextBox.KeyboardAccelerators> + <KeyboardAccelerator Key="L" Modifiers="Control" Invoked="OnURLKeyboardAccelerator"/> + </TextBox.KeyboardAccelerators> + </TextBox> + <ProgressRing x:Name="urlbarLoadingIndicator" Grid.Column="2" Margin="10,0"/> + </Grid> + <local:ServoControl TabIndex="0" x:Name="servoControl" Grid.Row="1"/> + <ProgressBar x:Name="transientLoadingIndicator" Visibility="Collapsed" Grid.Row="2"/> </Grid> - <local:ServoControl TabIndex="0" x:Name="servoControl" Grid.Row="1"/> - <ProgressBar x:Name="transientLoadingIndicator" Visibility="Collapsed" Grid.Row="2"/> - </Grid> </Page> |