aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-06-07 18:19:55 +0300
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-06-07 18:19:55 +0300
commite051d309be2153f60b32c12022cfd0fe8f2ab913 (patch)
tree0adf3223bb68acc5f88204ceaa3d727b8d067906 /Software
parent7ec6d80f838749faa39fec5eb838a34ebdd3e411 (diff)
downloadTango-e051d309be2153f60b32c12022cfd0fe8f2ab913.tar.gz
Tango-e051d309be2153f60b32c12022cfd0fe8f2ab913.zip
Working on PPC.
Diffstat (limited to 'Software')
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/MessageBox.xaml2
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/JobsViewVM.cs9
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Views/JobsView.xaml52
-rw-r--r--Software/Visual_Studio/Tango.Touch/Components/Ripple.cs13
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/Shared.xaml78
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.cs17
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.xaml61
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchDataGridRow.cs252
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchIconButton.xaml3
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.cs69
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.xaml86
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchThumb.cs58
-rw-r--r--Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs1
-rw-r--r--Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj6
-rw-r--r--Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml1
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj30
-rw-r--r--Software/Visual_Studio/Utilities/Tango.Stubs.UI/Properties/AssemblyInfo.cs4
17 files changed, 578 insertions, 164 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/MessageBox.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/MessageBox.xaml
index 07d3b11ac..b1fe7ddcc 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/MessageBox.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Notifications/MessageBox.xaml
@@ -15,7 +15,7 @@
<DropShadowEffect BlurRadius="10" />
</Border.Effect>
- <Grid>
+ <Grid ClipToBounds="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="75*"/>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/JobsViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/JobsViewVM.cs
index 2af15b1ad..75ef7a2ac 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/JobsViewVM.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/JobsViewVM.cs
@@ -51,6 +51,8 @@ namespace Tango.PPC.UI.ViewModels
public RelayCommand<DropEventArgs> OnDragAndDropCommand { get; set; }
+ public RelayCommand<Job> RemoveJobCommand { get; set; }
+
private void OnDragAndDropJobs(Job draggedJob, Job droppedJob)
{
Debug.WriteLine(draggedJob.Name + " Dragged on to " + droppedJob.Name);
@@ -92,6 +94,13 @@ namespace Tango.PPC.UI.ViewModels
OnDragAndDropJobs(draggedJob, droppedJob);
});
+
+ RemoveJobCommand = new RelayCommand<Job>(RemoveJob);
+ }
+
+ private void RemoveJob(Job job)
+ {
+ NotificationProvider.ShowQuestion("Are you sure you want to remove " + job.Name);
}
public override void OnApplicationStarted()
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/JobsView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/JobsView.xaml
index c67d09445..3e54d45f3 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/JobsView.xaml
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/JobsView.xaml
@@ -43,12 +43,6 @@
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
- <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" VerticalAlignment="Top" Height="57" Margin="0 -28 30 0">
- <touch:TouchIconButton Margin="0 0 30 0" Padding="20" Icon="Plus" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton>
- <touch:TouchIconButton Margin="0 0 30 0" Padding="20" Icon="Copy" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton>
- <touch:TouchIconButton Padding="20" Icon="Refresh" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton>
- </StackPanel>
-
<touch:TouchNavigationLinks VerticalAlignment="Bottom" Margin="20" FontSize="{StaticResource TangoNavigationLinksFontSize}">
<sys:String>READY TO DYE</sys:String>
<sys:String>NOT READY</sys:String>
@@ -57,6 +51,16 @@
<Grid Grid.Row="1">
<touch:TouchDataGrid x:Name="dataGridJobs" OnDragAndDropCommand="{Binding OnDragAndDropCommand}" ItemSelectedCommand="{Binding JobSelectedCommand}" ItemsSource="{Binding JobsCollectionView}" Margin="10" EnableDropShadow="True" ShadowColor="#ECECEC" AutoGenerateColumns="False" RowHeight="68" ColumnHeaderHeight="67">
+ <touch:TouchDataGrid.SlideContentTemplate>
+ <DataTemplate>
+ <Grid Height="67">
+ <StackPanel Orientation="Horizontal">
+ <touch:TouchIconButton Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RemoveJobCommand}" CommandParameter="{Binding}" RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleCentered="True" RippleFactor="1" EnableDropShadow="False" Icon="TrashOutline" CornerRadius="25" Padding="15" Foreground="DimGray" Margin="5" />
+ <touch:TouchIconButton RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleCentered="True" RippleFactor="1" EnableDropShadow="False" Icon="Copy" CornerRadius="25" Padding="15" Foreground="DimGray" Margin="5" />
+ </StackPanel>
+ </Grid>
+ </DataTemplate>
+ </touch:TouchDataGrid.SlideContentTemplate>
<touch:TouchDataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
@@ -68,17 +72,41 @@
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
- <DataGridTextColumn Width="90" Header="Status" Binding="{Binding JobStatus,Converter={StaticResource EnumToDescriptionConverter}}"></DataGridTextColumn>
- <DataGridTextColumn Width="240" Header="Name" Binding="{Binding Name}"></DataGridTextColumn>
- <DataGridTextColumn Width="117" Header="Length (m)" Binding="{Binding Length,StringFormat=0.0}"></DataGridTextColumn>
+ <DataGridTemplateColumn Width="90" Header="Status" SortMemberPath="JobStatus">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock IsHitTestVisible="False" Text="{Binding JobStatus,Converter={StaticResource EnumToDescriptionConverter}}"></TextBlock>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTemplateColumn Width="240" Header="Name" SortMemberPath="Name">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock IsHitTestVisible="False" Text="{Binding Name}"></TextBlock>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTemplateColumn Width="117" Header="Length (m)" SortMemberPath="Length">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock IsHitTestVisible="False" Text="{Binding Length,StringFormat=0.0}"></TextBlock>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
<DataGridTemplateColumn Header="Colors" SortMemberPath="Segments.Count" Width="85">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
- <ContentControl Content="{Binding Segments,Converter={StaticResource SegmentsToPieConverter}}" Width="23" Height="23" HorizontalAlignment="Left"></ContentControl>
+ <ContentControl IsHitTestVisible="False" Content="{Binding Segments,Converter={StaticResource SegmentsToPieConverter}}" Width="23" Height="23" HorizontalAlignment="Left"></ContentControl>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTemplateColumn Width="100" Header="Updated" SortMemberPath="LastUpdated">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <TextBlock IsHitTestVisible="False" Text="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
- <DataGridTextColumn Width="100" Header="Updated" Binding="{Binding LastUpdated,Converter={StaticResource DateTimeUTCToShortDateConverter}}"></DataGridTextColumn>
<DataGridTemplateColumn x:Name="userSortColumn" SortMemberPath="JobIndex" SortDirection="{x:Null}" Width="78" CanUserSort="False">
<DataGridTemplateColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
@@ -126,6 +154,8 @@
</touch:TouchDataGrid>
<TextBox VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="100" Width="200" keyboard:KeyboardView.Mode="Alpha"></TextBox>
+
+ <touch:TouchIconButton HorizontalAlignment="Right" Width="100" Height="100" Margin="40" VerticalAlignment="Bottom" Padding="30" Icon="Plus" Style="{StaticResource TangoRoundTouchIconButton}"></touch:TouchIconButton>
</Grid>
</Grid>
</Grid>
diff --git a/Software/Visual_Studio/Tango.Touch/Components/Ripple.cs b/Software/Visual_Studio/Tango.Touch/Components/Ripple.cs
index 2cfd2a0b8..7cf097d8e 100644
--- a/Software/Visual_Studio/Tango.Touch/Components/Ripple.cs
+++ b/Software/Visual_Studio/Tango.Touch/Components/Ripple.cs
@@ -79,6 +79,15 @@ namespace Tango.Touch.Components
public static readonly DependencyProperty CenteredProperty =
DependencyProperty.Register("Centered", typeof(bool), typeof(Ripple), new PropertyMetadata(false));
+ public bool Disabled
+ {
+ get { return (bool)GetValue(DisabledProperty); }
+ set { SetValue(DisabledProperty, value); }
+ }
+ public static readonly DependencyProperty DisabledProperty =
+ DependencyProperty.Register("Disabled", typeof(bool), typeof(Ripple), new PropertyMetadata(false));
+
+
#region Attached Properties
#region PreventRipple
@@ -207,7 +216,7 @@ namespace Tango.Touch.Components
OnRippleDown(new Point(e.GetTouchPoint(this).Position.X, e.GetTouchPoint(this).Position.Y));
}
- private void CancelRipple(bool immidiate = false)
+ public void CancelRipple(bool immidiate = false)
{
if (_isAnimating)
{
@@ -230,6 +239,8 @@ namespace Tango.Touch.Components
private void OnRippleDown(Point position)
{
+ if (Disabled) return;
+
_isAnimating = true;
if (!Centered)
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/Shared.xaml b/Software/Visual_Studio/Tango.Touch/Controls/Shared.xaml
index ba73cce29..96e965952 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/Shared.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/Shared.xaml
@@ -20,83 +20,5 @@
</Style.Triggers>
</Style>
- <Style x:Key="TouchScrollBarThumb" TargetType="{x:Type Thumb}">
- <Setter Property="OverridesDefaultStyle" Value="true"/>
- <Setter Property="IsTabStop" Value="false"/>
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate TargetType="{x:Type Thumb}">
- <Border Height="{TemplateBinding Height}" SnapsToDevicePixels="True" Width="{TemplateBinding Width}" CornerRadius="5" Background="{StaticResource TangoLightBorderBrush}" />
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </Style>
-
- <Style x:Key="TouchScrollBar" TargetType="{x:Type ScrollBar}">
- <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
- <Setter Property="Stylus.IsFlicksEnabled" Value="false"/>
- <Setter Property="Background" Value="Transparent"/>
- <Setter Property="BorderBrush" Value="Transparent"/>
- <Setter Property="Foreground" Value="Gray"/>
- <Setter Property="BorderThickness" Value="0"/>
- <Setter Property="Width" Value="5"/>
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate TargetType="{x:Type ScrollBar}">
- <Grid x:Name="Bg" SnapsToDevicePixels="true">
- <Border BorderBrush="{TemplateBinding BorderBrush}" HorizontalAlignment="Right" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Row="1"/>
- <Track x:Name="PART_Track" IsDirectionReversed="true" HorizontalAlignment="Right" Width="5" IsEnabled="{TemplateBinding IsMouseOver}" Grid.Row="1">
- <Track.Thumb>
- <Thumb Style="{StaticResource TouchScrollBarThumb}"></Thumb>
- </Track.Thumb>
- </Track>
- </Grid>
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </Style>
-
- <Style TargetType="ScrollViewer" x:Key="TouchScrollViewer">
- <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"></Setter>
- <Setter Property="PanningMode" Value="VerticalOnly"></Setter>
- <Setter Property="CanContentScroll" Value="False"></Setter>
- <Setter Property="VerticalScrollBarVisibility" Value="Visible"></Setter>
- <Setter Property="Template">
- <Setter.Value>
- <ControlTemplate TargetType="{x:Type ScrollViewer}">
- <Grid x:Name="Grid" Background="{TemplateBinding Background}">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*"/>
- </Grid.ColumnDefinitions>
- <Grid.RowDefinitions>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </Grid.RowDefinitions>
- <Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
- <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
- <ScrollBar Opacity="0" x:Name="PART_VerticalScrollBar" Style="{StaticResource TouchScrollBar}" HorizontalAlignment="Right" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
- <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
- </Grid>
-
- <ControlTemplate.Triggers>
- <EventTrigger RoutedEvent="ScrollViewer.ScrollChanged">
- <EventTrigger.Actions>
- <BeginStoryboard>
- <Storyboard>
- <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" Duration="00:00:01" FillBehavior="Stop">
- <EasingDoubleKeyFrame KeyTime="00:00:0.2" Value="1"></EasingDoubleKeyFrame>
- <DiscreteDoubleKeyFrame KeyTime="00:00:0.2" Value="1"></DiscreteDoubleKeyFrame>
- <EasingDoubleKeyFrame KeyTime="00:00:01" Value="0"></EasingDoubleKeyFrame>
- </DoubleAnimationUsingKeyFrames>
- </Storyboard>
- </BeginStoryboard>
- </EventTrigger.Actions>
- </EventTrigger>
- </ControlTemplate.Triggers>
- </ControlTemplate>
- </Setter.Value>
- </Setter>
- </Style>
-
</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.cs
index 2564c6c9c..d72e4fc12 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.cs
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.cs
@@ -20,6 +20,8 @@ namespace Tango.Touch.Controls
{
public class TouchDataGrid : DataGrid, ITouchControl
{
+ public TouchScrollViewer ScrollViewer { get; set; }
+
public CornerRadius CornerRadius
{
get { return (CornerRadius)GetValue(CornerRadiusProperty); }
@@ -113,10 +115,19 @@ namespace Tango.Touch.Controls
get { return (IList)GetValue(SelectedItemsListProperty); }
set { SetValue(SelectedItemsListProperty, value); }
}
-
public static readonly DependencyProperty SelectedItemsListProperty =
DependencyProperty.Register(nameof(SelectedItemsList), typeof(IList), typeof(TouchDataGrid), new PropertyMetadata(null));
+ public DataTemplate SlideContentTemplate
+ {
+ get { return (DataTemplate)GetValue(SlideContentTemplateProperty); }
+ set { SetValue(SlideContentTemplateProperty, value); }
+ }
+ public static readonly DependencyProperty SlideContentTemplateProperty =
+ DependencyProperty.Register("SlideContentTemplate", typeof(DataTemplate), typeof(TouchDataGrid), new PropertyMetadata(null));
+
+
+
protected override void OnSelectionChanged(SelectionChangedEventArgs e)
{
base.OnSelectionChanged(e);
@@ -143,8 +154,8 @@ namespace Tango.Touch.Controls
DraggingSurface = GetTemplateChild("PART_DraggingSurface") as DraggingSurface;
ScrollViewer scrollViewer = GetTemplateChild("DG_ScrollViewer") as ScrollViewer;
-
- scrollViewer.IsManipulationEnabled = false;
+ ScrollViewer = scrollViewer as TouchScrollViewer;
+ scrollViewer.IsManipulationEnabled = true;
}
public IEnumerable<TouchDataGridRow> GetRows()
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.xaml
index ae058bb98..92073b25d 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGrid.xaml
@@ -4,6 +4,7 @@
xmlns:surface="http://schemas.microsoft.com/surface/2008"
xmlns:components="clr-namespace:Tango.Touch.Components"
xmlns:dragAndDrop="clr-namespace:Tango.DragAndDrop;assembly=Tango.DragAndDrop"
+ xmlns:converters="clr-namespace:Tango.SharedUI.Converters;assembly=Tango.SharedUI"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:local="clr-namespace:Tango.Touch.Controls">
@@ -11,6 +12,11 @@
<ResourceDictionary Source="../Resources/Colors.xaml" />
<ResourceDictionary Source="../Resources/Fonts.xaml" />
<ResourceDictionary Source="../Controls/Shared.xaml" />
+ <ResourceDictionary Source="../Controls/TouchScrollViewer.xaml" />
+
+ <ResourceDictionary>
+ <converters:BooleanInverseConverter x:Key="BooleanInverseConverter" />
+ </ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<Style TargetType="{x:Type local:TouchDataGrid}">
@@ -79,7 +85,7 @@
<Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{StaticResource TangoLightBorderBrush}"></Setter>
<Setter Property="BorderThickness" Value="1"></Setter>
- <Setter Property="components:TransformationHelper.TransformWhenPressed" Value="True"></Setter>
+ <Setter Property="IsManipulationEnabled" Value="False"></Setter>
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
@@ -127,35 +133,40 @@
</Style>
</Grid.Style>
+ <ContentControl Margin="0 0 10 0" Background="{StaticResource TangoPrimaryBackgroundBrush}" x:Name="PART_SlideContentControl" HorizontalAlignment="Right" ContentTemplate="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDataGrid},Path=SlideContentTemplate}" Content="{Binding}" />
+
<Border x:Name="DGR_Border" Margin="5 2" Style="{StaticResource DropShadowBorder}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
- <components:Ripple RippleFactor="20" SynchedScrollViewer="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer}}" CornerRadius="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDataGrid},Path=CornerRadius}">
- <components:Ripple.RippleBrush>
- <SolidColorBrush Color="{StaticResource TangoMidAccentColor}" Opacity="0.5" />
- </components:Ripple.RippleBrush>
- <SelectiveScrollingGrid>
- <SelectiveScrollingGrid.ColumnDefinitions>
- <ColumnDefinition Width="Auto"/>
- <ColumnDefinition Width="*"/>
- </SelectiveScrollingGrid.ColumnDefinitions>
- <SelectiveScrollingGrid.RowDefinitions>
- <RowDefinition Height="*"/>
- <RowDefinition Height="Auto"/>
- </SelectiveScrollingGrid.RowDefinitions>
- <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
- <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
- <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
- </SelectiveScrollingGrid>
- </components:Ripple>
+ <Border.RenderTransform>
+ <TranslateTransform X="0" Y="0" x:Name="PART_Translate" />
+ </Border.RenderTransform>
+ <Grid>
+ <!--<Thumb x:Name="PART_Thumb" Opacity="0" />-->
+ <components:Ripple x:Name="PART_Ripple" Disabled="{TemplateBinding IsSlideMode}" RippleBrush="{StaticResource TangoRippleDarkBrush}" RippleFactor="20" SynchedScrollViewer="{Binding RelativeSource={RelativeSource AncestorType=ScrollViewer}}" CornerRadius="{Binding RelativeSource={RelativeSource AncestorType=local:TouchDataGrid},Path=CornerRadius}">
+ <SelectiveScrollingGrid>
+ <SelectiveScrollingGrid.ColumnDefinitions>
+ <ColumnDefinition Width="Auto"/>
+ <ColumnDefinition Width="*"/>
+ </SelectiveScrollingGrid.ColumnDefinitions>
+ <SelectiveScrollingGrid.RowDefinitions>
+ <RowDefinition Height="*"/>
+ <RowDefinition Height="Auto"/>
+ </SelectiveScrollingGrid.RowDefinitions>
+ <DataGridCellsPresenter Grid.Column="1" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
+ <DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
+ <DataGridRowHeader Grid.RowSpan="2" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
+ </SelectiveScrollingGrid>
+ </components:Ripple>
+ </Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
- <Trigger Property="IsSelected" Value="True">
+ <!--<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="{StaticResource TangoLightSelectedBrush}"></Setter>
<Setter Property="BorderBrush" Value="{StaticResource TangoMidAccentBrush}"></Setter>
- </Trigger>
+ </Trigger>-->
</Style.Triggers>
</Style>
@@ -208,8 +219,8 @@
<ControlTemplate TargetType="{x:Type local:TouchDataGrid}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
<DockPanel>
- <ScrollViewer x:Name="DG_ScrollViewer" Focusable="false" Style="{StaticResource TouchScrollViewer}" IsManipulationEnabled="False">
- <ScrollViewer.Template>
+ <local:TouchScrollViewer x:Name="DG_ScrollViewer" Focusable="false" IsManipulationEnabled="False">
+ <local:TouchScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.RowDefinitions>
@@ -238,9 +249,9 @@
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
- </ScrollViewer.Template>
+ </local:TouchScrollViewer.Template>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
- </ScrollViewer>
+ </local:TouchScrollViewer>
<dragAndDrop:DraggingSurface x:Name="PART_DraggingSurface" />
</DockPanel>
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGridRow.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGridRow.cs
index 5ae18d540..7f023831f 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGridRow.cs
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchDataGridRow.cs
@@ -6,10 +6,14 @@ using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
using Tango.Core.EventArguments;
using Tango.DragAndDrop;
using Tango.SharedUI.Helpers;
+using Tango.Touch.Components;
namespace Tango.Touch.Controls
{
@@ -20,15 +24,34 @@ namespace Tango.Touch.Controls
private bool _canSelect = false;
private TouchDataGrid _grid;
private bool _isLoaded;
+ private Thumb _thumbSlide;
+ private Ripple _ripple;
+ private TranslateTransform _translate;
+ private ContentControl _slideContentControl;
+ private bool _touchDown;
+ private Point _touchDownLocation;
+ private bool isMoving;
+ private bool _okToMove;
+
+
+
+ public bool IsSlideMode
+ {
+ get { return (bool)GetValue(IsSlideModeProperty); }
+ set { SetValue(IsSlideModeProperty, value); }
+ }
+ public static readonly DependencyProperty IsSlideModeProperty =
+ DependencyProperty.Register("IsSlideMode", typeof(bool), typeof(TouchDataGridRow), new PropertyMetadata(false));
+
+
public TouchDataGridRow()
{
- this.RegisterForPreviewMouseOrTouchDown(OnMouseDown);
+ this.PreviewMouseUp += TouchDataGridRow_PreviewMouseUp;
this.Loaded += (_, __) =>
{
if (!_isLoaded)
{
- _grid = UIHelper.FindAncestor<TouchDataGrid>(this);
_isLoaded = true;
DragAndDropService.AddDropHandler(this, OnDragAndDrop);
@@ -36,58 +59,235 @@ namespace Tango.Touch.Controls
};
}
+ private void TouchDataGridRow_PreviewMouseUp(object sender, MouseButtonEventArgs e)
+ {
+ if (!IsSlideMode && Math.Abs((e.GetPosition(this).X - _touchDownLocation.X)) < 5)
+ {
+ _grid.ItemSelectedCommand?.Execute(DataContext);
+ }
+ }
+
private void OnDragAndDrop(object sender, DropEventArgs e)
{
_grid.OnDragAndDropCommand?.Execute(e);
}
- private async void OnMouseDown(object sender, MouseOrTouchEventArgs e)
+ public override void OnApplyTemplate()
+ {
+ base.OnApplyTemplate();
+
+ _thumbSlide = GetTemplateChild("PART_Thumb") as Thumb;
+ _ripple = GetTemplateChild("PART_Ripple") as Ripple;
+ _translate = GetTemplateChild("PART_Translate") as TranslateTransform;
+ _slideContentControl = GetTemplateChild("PART_SlideContentControl") as ContentControl;
+ Border border = GetTemplateChild("DGR_Border") as Border;
+
+ _grid = UIHelper.FindAncestor<TouchDataGrid>(this);
+
+ //_thumbSlide.AddHandler(Thumb.DragCompletedEvent, new DragCompletedEventHandler(_thumbSlide_DragCompleted), true);
+ //_thumbSlide.AddHandler(Thumb.DragDeltaEvent, new DragDeltaEventHandler(_thumbSlide_DragDelta), true);
+
+ //_thumbSlide.DragDelta += _thumbSlide_DragDelta;
+ //_thumbSlide.DragCompleted += _thumbSlide_DragCompleted;
+
+ border.PreviewTouchDown += ((_, e) =>
+ {
+ _okToMove = false;
+
+ if (e.OriginalSource.GetType() == typeof(DragThumb))
+ {
+ border.IsManipulationEnabled = false;
+ return;
+ }
+ else
+ {
+ border.IsManipulationEnabled = true;
+ }
+
+ _touchDownLocation = new Point(e.GetTouchPoint(this).Position.X - _translate.X, e.GetTouchPoint(this).Position.Y);
+ _touchDown = true;
+ });
+ border.PreviewTouchMove += ((_, e) =>
+ {
+ if (!_touchDown) return;
+
+ double offsetX = e.GetTouchPoint(this).Position.X - _touchDownLocation.X;
+ double offsetY = e.GetTouchPoint(this).Position.Y - _touchDownLocation.Y;
+
+ if (Math.Abs(offsetX) < 50 && !_okToMove)
+ {
+ return;
+ }
+ else
+ {
+ _okToMove = true;
+ }
+
+ if (offsetX >= 0 || Math.Abs(offsetY) > ActualHeight)
+ {
+ return;
+ }
+
+ if (e.OriginalSource.GetType() == typeof(DragThumb))
+ {
+ return;
+ }
+
+ _grid.ScrollViewer.FixPosition();
+
+ isMoving = true;
+
+ _ripple.CancelRipple(true);
+
+ IsSlideMode = true;
+
+ _translate.BeginAnimation(TranslateTransform.XProperty, null);
+
+ if (offsetX <= 0)
+ {
+ _translate.X = offsetX;
+ }
+
+ var otherRow = _grid.GetRows().FirstOrDefault(x => x != this && x.IsSlideMode);
+
+ if (otherRow != null)
+ {
+ otherRow.IsSlideMode = false;
+ DoubleAnimation ani = new DoubleAnimation();
+ ani.Duration = TimeSpan.FromSeconds(0.2);
+ ani.To = 0;
+ otherRow._translate.BeginAnimation(TranslateTransform.XProperty, ani);
+ }
+ });
+
+ _grid.ScrollViewer.AddHandler(PreviewTouchUpEvent, new EventHandler<TouchEventArgs>((_, __) =>
+ {
+ if (!_touchDown) return;
+
+ _touchDown = false;
+ isMoving = false;
+
+ DoubleAnimation ani = new DoubleAnimation();
+ ani.Duration = TimeSpan.FromSeconds(0.2);
+
+ if (_translate.X > -(_slideContentControl.ActualWidth + 10))
+ {
+ IsSlideMode = false;
+ ani.To = 0;
+ }
+ else
+ {
+ IsSlideMode = true;
+ ani.To = -(_slideContentControl.ActualWidth + 10);
+ }
+
+ _translate.BeginAnimation(TranslateTransform.XProperty, ani);
+ }), true);
+ }
+
+ private void _thumbSlide_DragCompleted(object sender, DragCompletedEventArgs e)
+ {
+ DoubleAnimation ani = new DoubleAnimation();
+ ani.Duration = TimeSpan.FromSeconds(0.2);
+
+ if (_translate.X > -(_slideContentControl.ActualWidth + 10))
+ {
+ IsSlideMode = false;
+ ani.To = 0;
+ }
+ else
+ {
+ IsSlideMode = true;
+ ani.To = -(_slideContentControl.ActualWidth + 10);
+ }
+
+ _translate.BeginAnimation(TranslateTransform.XProperty, ani);
+ }
+
+ private void _thumbSlide_DragDelta(object sender, DragDeltaEventArgs e)
{
if (e.OriginalSource.GetType() == typeof(DragThumb))
{
- _grid.GetRows().ToList().ForEach(x => x.IsSelected = false);
return;
}
- Keyboard.TouchKeyboard.PressCtrl();
+ _ripple.CancelRipple(true);
- IsSelected = false;
+ IsSlideMode = true;
- _downTime = DateTime.Now;
- await Task.Delay(_grid.SelectionDelay);
+ _translate.BeginAnimation(TranslateTransform.XProperty, null);
- if (DateTime.Now > _downTime.AddMilliseconds(_grid.SelectionDelay))
+ if (_translate.X + e.HorizontalChange <= 0)
{
- _canSelect = true;
- IsSelected = !IsSelected;
- _canSelect = false;
+ _translate.X += e.HorizontalChange;
}
- else
- {
- _canSelect = true;
- IsSelected = true;
- _canSelect = false;
- _grid.GetRows().Where(x => x != this).ToList().ForEach(x => x.IsSelected = false);
- _grid.ItemSelectedCommand?.Execute(DataContext);
+ var otherRow = _grid.GetRows().FirstOrDefault(x => x != this && x.IsSlideMode);
+
+ if (otherRow != null)
+ {
+ otherRow.IsSlideMode = false;
+ DoubleAnimation ani = new DoubleAnimation();
+ ani.Duration = TimeSpan.FromSeconds(0.2);
+ ani.To = 0;
+ otherRow._translate.BeginAnimation(TranslateTransform.XProperty, ani);
}
+ }
- Keyboard.TouchKeyboard.ReleaseCtrl();
+ private async void OnMouseDown(object sender, MouseOrTouchEventArgs e)
+ {
+ //if (_thumbSlide.IsDragging)
+ //{
+ // e.Handled = true;
+ //}
+
+ //if (e.OriginalSource.GetType() == typeof(DragThumb))
+ //{
+ // //_grid.GetRows().ToList().ForEach(x => x.IsSelected = false);
+ // //e.Handled = true;
+ // return;
+ //}
+
+ //Keyboard.TouchKeyboard.PressCtrl();
+
+ //IsSelected = false;
+
+ //_downTime = DateTime.Now;
+ //await Task.Delay(_grid.SelectionDelay);
+
+ //if (DateTime.Now > _downTime.AddMilliseconds(_grid.SelectionDelay))
+ //{
+ // _canSelect = true;
+ // IsSelected = !IsSelected;
+ // _canSelect = false;
+ //}
+ //else
+ //{
+ // _canSelect = true;
+ // IsSelected = true;
+ // _canSelect = false;
+ // _grid.GetRows().Where(x => x != this).ToList().ForEach(x => x.IsSelected = false);
+
+ // _grid.ItemSelectedCommand?.Execute(DataContext);
+ //}
+
+ //await Task.Delay(200);
+ //Keyboard.TouchKeyboard.ReleaseCtrl();
}
protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
{
- Keyboard.TouchKeyboard.ReleaseCtrl();
+ //Keyboard.TouchKeyboard.ReleaseCtrl();
base.OnPreviewMouseUp(e);
- _downTime = DateTime.Now;
+ //_downTime = DateTime.Now;
}
protected override void OnSelected(RoutedEventArgs e)
{
- if (!_canSelect)
- {
- IsSelected = false;
- }
+ //if (!_canSelect)
+ //{
+ // IsSelected = false;
+ //}
}
}
}
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchIconButton.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchIconButton.xaml
index f0c3b5f7f..5619b9136 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchIconButton.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchIconButton.xaml
@@ -9,7 +9,8 @@
<Style TargetType="{x:Type local:TouchIconButton}" BasedOn="{StaticResource {x:Type local:TouchButton}}">
<Setter Property="Icon" Value="None"></Setter>
- <Setter Property="Width" Value="100"></Setter>
+ <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight}"></Setter>
+ <Setter Property="Background" Value="Transparent"></Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.cs
new file mode 100644
index 000000000..f8f103d2b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Tango.DragAndDrop;
+
+namespace Tango.Touch.Controls
+{
+ public class TouchScrollViewer : ScrollViewer
+ {
+ private double _position;
+ private bool _fixed;
+
+ static TouchScrollViewer()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(TouchScrollViewer), new FrameworkPropertyMetadata(typeof(TouchScrollViewer)));
+ }
+
+ //public TouchScrollViewer()
+ //{
+ // this.RegisterForPreviewMouseOrTouchDown((_, e) =>
+ // {
+ // if (e.OriginalSource.GetType() == typeof(DragThumb))
+ // {
+ // e.Handled = true;
+ // return;
+ // }
+ // });
+ //}
+
+ public void FixPosition()
+ {
+ _position = VerticalOffset;
+ _fixed = true;
+ }
+
+ public void ReleasePosition()
+ {
+ _fixed = false;
+ }
+
+ public TouchScrollViewer()
+ {
+ AddHandler(PreviewTouchUpEvent, new EventHandler<TouchEventArgs>(async (_, __) =>
+ {
+ await Task.Delay(250);
+ ReleasePosition();
+ }), true);
+ }
+
+ protected override void OnScrollChanged(ScrollChangedEventArgs e)
+ {
+ if (_fixed)
+ {
+ ScrollToVerticalOffset(_position);
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.xaml
new file mode 100644
index 000000000..eea9ddf76
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchScrollViewer.xaml
@@ -0,0 +1,86 @@
+<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:Tango.Touch.Controls">
+
+ <ResourceDictionary.MergedDictionaries>
+ <ResourceDictionary Source="../Resources/Colors.xaml" />
+ </ResourceDictionary.MergedDictionaries>
+
+ <Style x:Key="TouchScrollBarThumb" TargetType="{x:Type Thumb}">
+ <Setter Property="OverridesDefaultStyle" Value="true"/>
+ <Setter Property="IsTabStop" Value="false"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type Thumb}">
+ <Border Height="{TemplateBinding Height}" SnapsToDevicePixels="True" Width="{TemplateBinding Width}" CornerRadius="5" Background="{StaticResource TangoLightBorderBrush}" />
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+
+ <Style x:Key="TouchScrollBar" TargetType="{x:Type ScrollBar}">
+ <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
+ <Setter Property="Stylus.IsFlicksEnabled" Value="false"/>
+ <Setter Property="Background" Value="Transparent"/>
+ <Setter Property="BorderBrush" Value="Transparent"/>
+ <Setter Property="Foreground" Value="Gray"/>
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="Width" Value="5"/>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type ScrollBar}">
+ <Grid x:Name="Bg" SnapsToDevicePixels="true">
+ <Border BorderBrush="{TemplateBinding BorderBrush}" HorizontalAlignment="Right" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Row="1"/>
+ <Track x:Name="PART_Track" IsDirectionReversed="true" HorizontalAlignment="Right" Width="5" IsEnabled="{TemplateBinding IsMouseOver}" Grid.Row="1">
+ <Track.Thumb>
+ <Thumb Style="{StaticResource TouchScrollBarThumb}"></Thumb>
+ </Track.Thumb>
+ </Track>
+ </Grid>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+
+ <Style TargetType="{x:Type local:TouchScrollViewer}">
+ <Setter Property="HorizontalScrollBarVisibility" Value="Disabled"></Setter>
+ <Setter Property="PanningMode" Value="VerticalOnly"></Setter>
+ <Setter Property="CanContentScroll" Value="False"></Setter>
+ <Setter Property="VerticalScrollBarVisibility" Value="Visible"></Setter>
+ <Setter Property="Template">
+ <Setter.Value>
+ <ControlTemplate TargetType="{x:Type ScrollViewer}">
+ <Grid x:Name="Grid" Background="{TemplateBinding Background}">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="*"/>
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="*"/>
+ <RowDefinition Height="Auto"/>
+ </Grid.RowDefinitions>
+ <Rectangle x:Name="Corner" Grid.Column="1" Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" Grid.Row="1"/>
+ <ScrollContentPresenter x:Name="PART_ScrollContentPresenter" CanContentScroll="{TemplateBinding CanContentScroll}" CanHorizontallyScroll="False" CanVerticallyScroll="False" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="0" Margin="{TemplateBinding Padding}" Grid.Row="0"/>
+ <ScrollBar Opacity="0" x:Name="PART_VerticalScrollBar" Style="{StaticResource TouchScrollBar}" HorizontalAlignment="Right" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" Grid.Column="1" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportHeight}"/>
+ <ScrollBar x:Name="PART_HorizontalScrollBar" AutomationProperties.AutomationId="HorizontalScrollBar" Cursor="Arrow" Grid.Column="0" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" ViewportSize="{TemplateBinding ViewportWidth}"/>
+ </Grid>
+
+ <ControlTemplate.Triggers>
+ <EventTrigger RoutedEvent="ScrollViewer.ScrollChanged">
+ <EventTrigger.Actions>
+ <BeginStoryboard>
+ <Storyboard>
+ <DoubleAnimationUsingKeyFrames Storyboard.TargetName="PART_VerticalScrollBar" Storyboard.TargetProperty="Opacity" Duration="00:00:01" FillBehavior="Stop">
+ <EasingDoubleKeyFrame KeyTime="00:00:0.2" Value="1"></EasingDoubleKeyFrame>
+ <DiscreteDoubleKeyFrame KeyTime="00:00:0.2" Value="1"></DiscreteDoubleKeyFrame>
+ <EasingDoubleKeyFrame KeyTime="00:00:01" Value="0"></EasingDoubleKeyFrame>
+ </DoubleAnimationUsingKeyFrames>
+ </Storyboard>
+ </BeginStoryboard>
+ </EventTrigger.Actions>
+ </EventTrigger>
+ </ControlTemplate.Triggers>
+ </ControlTemplate>
+ </Setter.Value>
+ </Setter>
+ </Style>
+</ResourceDictionary> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchThumb.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchThumb.cs
new file mode 100644
index 000000000..e96f92d5b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchThumb.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Controls.Primitives;
+using System.Windows.Input;
+
+namespace Tango.Touch.Controls
+{
+ public class TouchThumb : Thumb
+ {
+ private TouchDevice currentDevice = null;
+
+ protected override void OnPreviewTouchDown(TouchEventArgs e)
+ {
+ // Release any previous capture
+ ReleaseCurrentDevice();
+ // Capture the new touch
+ CaptureCurrentDevice(e);
+ }
+
+ protected override void OnPreviewTouchUp(TouchEventArgs e)
+ {
+ ReleaseCurrentDevice();
+ }
+
+ protected override void OnLostTouchCapture(TouchEventArgs e)
+ {
+ // Only re-capture if the reference is not null
+ // This way we avoid re-capturing after calling ReleaseCurrentDevice()
+ if (currentDevice != null)
+ {
+ CaptureCurrentDevice(e);
+ }
+ }
+
+ private void ReleaseCurrentDevice()
+ {
+ if (currentDevice != null)
+ {
+ // Set the reference to null so that we don't re-capture in the OnLostTouchCapture() method
+ var temp = currentDevice;
+ currentDevice = null;
+ ReleaseTouchCapture(temp);
+ }
+ }
+
+ private void CaptureCurrentDevice(TouchEventArgs e)
+ {
+ bool gotTouch = CaptureTouch(e.TouchDevice);
+ if (gotTouch)
+ {
+ currentDevice = e.TouchDevice;
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs b/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs
index b0728e087..ab5191fe0 100644
--- a/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs
+++ b/Software/Visual_Studio/Tango.Touch/Keyboard/TouchKeyboard.cs
@@ -353,7 +353,6 @@ namespace Tango.Touch.Keyboard
private Task SendKeys(String key)
{
Application.Current.MainWindow.Activate();
- ReleaseCtrl();
var isSpecialChar = IsSpecialCharactersOn;
var definition = CurrentKeyboardDefinition;
diff --git a/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj b/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
index af184b187..e4627ecbe 100644
--- a/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
+++ b/Software/Visual_Studio/Tango.Touch/Tango.Touch.csproj
@@ -88,6 +88,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
+ <Page Include="Controls\TouchScrollViewer.xaml">
+ <SubType>Designer</SubType>
+ <Generator>MSBuild:Compile</Generator>
+ </Page>
<Page Include="Controls\TouchSideMenu.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -141,7 +145,9 @@
<Compile Include="Controls\TouchNavigationLinks.cs" />
<Compile Include="Controls\TouchButton.cs" />
<Compile Include="Controls\TouchDataGrid.cs" />
+ <Compile Include="Controls\TouchScrollViewer.cs" />
<Compile Include="Controls\TouchSideMenu.cs" />
+ <Compile Include="Controls\TouchThumb.cs" />
<Compile Include="Controls\TouchToggleButton.cs" />
<Compile Include="Converters\ArcEndPointConverter.cs" />
<Compile Include="Converters\ArcSizeConverter.cs" />
diff --git a/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml b/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
index 2aa811b10..339473f7b 100644
--- a/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Themes/Generic.xaml
@@ -9,6 +9,7 @@
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Components/Ripple.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Keyboard/TouchKeyboard.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Keyboard/KeyboardView.xaml" />
+ <ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchScrollViewer.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/Shared.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchButton.xaml" />
<ResourceDictionary Source="pack://application:,,,/Tango.Touch;component/Controls/TouchToggleButton.xaml" />
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj b/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
index 13a3a3c1c..29fc98da1 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.Installer/Tango.Stubs.Installer.vdproj
@@ -465,7 +465,7 @@
"DisplayName" = "8:Debug"
"IsDebugOnly" = "11:TRUE"
"IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:..\\..\\Build\\Debug\\Installers\\Tango Stubs Installer v1.8.msi"
+ "OutputFilename" = "8:..\\..\\Build\\Debug\\Installers\\Tango Stubs Installer v1.9.msi"
"PackageFilesAs" = "3:2"
"PackageFileSize" = "3:-2147483648"
"CabType" = "3:1"
@@ -556,7 +556,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_0712ECEB4DE24D8B9E9936D94BDC61B4"
@@ -644,7 +644,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.PMR, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.PMR, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_25CD57B9CA3242F18E33F548DDB13C14"
@@ -706,7 +706,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.PMR, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.PMR, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_5397E5B2CD05015FD556CF7136D97D21"
@@ -737,7 +737,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:StubsExecutionGUI, Version=1.8.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:StubsExecutionGUI, Version=1.9.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_61BDC9339D1440BCBC454CC904BCE79C"
@@ -768,7 +768,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Scripting, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_6290C6253BE08D5AEAF445DC538F5A32"
@@ -861,7 +861,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Settings, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Settings, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_78C9B7DB89C8CFF3E6F812DBDAF18DC7"
@@ -892,7 +892,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.SharedUI, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.SharedUI, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_8F0D060313A40E3D6C4B196C5819AA1F"
@@ -923,7 +923,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Transport, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Transport, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_92474495A2F0D65A21D2BFF4587358D8"
@@ -954,7 +954,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Stubs, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Stubs, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_94CDF51D67BB69C2699CEC4485EBCA30"
@@ -1078,7 +1078,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Logging, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Logging, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_BFCEC942CF3BF1B9FB6AEACA2A8753C3"
@@ -1264,7 +1264,7 @@
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
- "AssemblyAsmDisplayName" = "8:Tango.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
+ "AssemblyAsmDisplayName" = "8:Tango.Core, Version=1.0.0.1, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_F35F069FCC8C9B6808AAD45B8039A4FB"
@@ -1347,15 +1347,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Tango Stubs GUI"
- "ProductCode" = "8:{CC56E442-9CBC-4D3A-BB41-90A952C25758}"
- "PackageCode" = "8:{40459E65-A8AA-46F8-B259-5BE1128CABED}"
+ "ProductCode" = "8:{67EC0E77-000C-4CEF-9BBB-F89B0FB94FEA}"
+ "PackageCode" = "8:{E7855B80-5D28-4959-8728-9BFCD16D94D2}"
"UpgradeCode" = "8:{72B680FB-E47D-486A-A81E-6C035F2EBA42}"
"AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:FALSE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:FALSE"
- "ProductVersion" = "8:1.8"
+ "ProductVersion" = "8:1.9"
"Manufacturer" = "8:Twine"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
diff --git a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Properties/AssemblyInfo.cs
index 3c587548f..107c7d0b4 100644
--- a/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Properties/AssemblyInfo.cs
+++ b/Software/Visual_Studio/Utilities/Tango.Stubs.UI/Properties/AssemblyInfo.cs
@@ -9,6 +9,6 @@ using System.Runtime.InteropServices;
[assembly: AssemblyProduct("Stubs execution utility")]
[assembly: AssemblyCopyright("Twine LTD 2018")]
[assembly: AssemblyTrademark("Twine LTD")]
-[assembly: AssemblyVersion("1.8")]
-[assembly: AssemblyFileVersion("1.8")]
+[assembly: AssemblyVersion("1.9")]
+[assembly: AssemblyFileVersion("1.9")]