aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE/Modules/Tango.FSE.PPCConsole/Views/FileSystemView.xaml
blob: 55a51a492d7c54b398d06f85ca0d0f82297f942c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
<UserControl x:Class="Tango.FSE.PPCConsole.Views.FileSystemView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:global="clr-namespace:Tango.FSE.PPCConsole"
             xmlns:vm="clr-namespace:Tango.FSE.PPCConsole.ViewModels"
             xmlns:controls="clr-namespace:Tango.FSE.Common.Controls;assembly=Tango.FSE.Common"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Tango.FSE.PPCConsole.Views"
             xmlns:material="http://materialdesigninxaml.net/winfx/xaml/themes"
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:FileSystemViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.FileSystemViewVM}">
    <Grid IsEnabled="{Binding IsFree}">
        <Grid Margin="0 20 0 0" IsEnabled="{Binding MachineProvider.IsPPCAvailable}">
            <Grid.RowDefinitions>
                <RowDefinition Height="30" />
                <RowDefinition Height="1*" />
            </Grid.RowDefinitions>

            <DockPanel IsEnabled="{Binding MachineProvider.IsConnected}">
                <ListBox x:Name="listView" SelectedIndex="1" Background="{StaticResource FSE_PrimaryBackgroundLightBrush}" SelectionChanged="ListView_SelectionChanged" Style="{StaticResource MaterialDesignToolToggleListBox}" Margin="50 0 0 0" DockPanel.Dock="Right">
                    <ListBox.Resources>
                        <SolidColorBrush x:Key="MaterialDesignDivider" Color="{StaticResource FSE_PrimaryBackgroundDarkColor}"/>
                    </ListBox.Resources>
                    <ListBoxItem Width="60" HorizontalContentAlignment="Center" Tag="Large">
                        <material:PackIcon Kind="ViewList" Width="Auto" Height="20" />
                    </ListBoxItem>
                    <ListBoxItem Width="60" HorizontalContentAlignment="Center" Tag="Details">
                        <material:PackIcon Kind="FormatListBulleted" Width="Auto" Height="20" />
                    </ListBoxItem>
                </ListBox>
                <DockPanel>
                    <StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
                        <Button Command="{Binding NavigateCommand}" material:ButtonAssist.CornerRadius="0 3 3 0" Style="{StaticResource FSE_RaisedButton_Dark_Hover}" Padding="0" Width="60" Height="Auto">
                            <material:PackIcon Kind="Refresh" Width="Auto" Height="20" />
                        </Button>
                    </StackPanel>
                    <StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
                        <Button Command="{Binding BackCommand}" material:ButtonAssist.CornerRadius="3 0 0 3" Style="{StaticResource FSE_RaisedButton_Dark_Hover}" Padding="0" Width="60" Height="Auto">
                            <material:PackIcon Kind="ChevronLeft" Width="Auto" Height="20" />
                        </Button>
                    </StackPanel>
                    <Border>
                        <Border BorderThickness="3" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" Background="{StaticResource FSE_PrimaryBackgroundDarkBrush}">
                            <Border.Effect>
                                <DropShadowEffect BlurRadius="2" ShadowDepth="2" Opacity="0.3" Direction="270" />
                            </Border.Effect>
                            <Grid>
                                <Border IsHitTestVisible="False" Visibility="{Binding IsBusy,Converter={StaticResource BooleanToVisibilityConverter}}">
                                    <Border.Background>
                                        <LinearGradientBrush>
                                            <GradientStop Offset="0" Color="Transparent" />
                                            <GradientStop Offset="0.5" Color="#6303A9F4" />
                                            <GradientStop Offset="1" Color="Transparent" />
                                        </LinearGradientBrush>
                                    </Border.Background>
                                    <Border.Style>
                                        <Style TargetType="Border">
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding IsBusy}" Value="True">
                                                    <DataTrigger.EnterActions>
                                                        <BeginStoryboard Name="loadingStory">
                                                            <Storyboard>
                                                                <DoubleAnimation Storyboard.TargetProperty="Background.GradientStops[1].Offset" From="0" To="1" AutoReverse="True" RepeatBehavior="Forever" />
                                                            </Storyboard>
                                                        </BeginStoryboard>
                                                    </DataTrigger.EnterActions>
                                                    <DataTrigger.ExitActions>
                                                        <RemoveStoryboard BeginStoryboardName="loadingStory" />
                                                    </DataTrigger.ExitActions>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </Border.Style>
                                </Border>

                                <TextBox IsEnabled="{Binding IsFree}" Padding="5 0 0 0" Text="{Binding CurrentPath,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" Foreground="{StaticResource FSE_PrimaryForegroundBrush}" CaretBrush="{StaticResource FSE_PrimaryForegroundBrush}" Background="Transparent" BorderThickness="0" VerticalContentAlignment="Center" Style="{x:Null}">
                                    <TextBox.InputBindings>
                                        <KeyBinding Key="Return" Command="{Binding NavigateCommand}" />
                                    </TextBox.InputBindings>
                                </TextBox>
                            </Grid>
                        </Border>
                    </Border>
                </DockPanel>
            </DockPanel>

            <Grid Grid.Row="1" Margin="0 10 0 0">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="200" />
                    <ColumnDefinition Width="5" />
                    <ColumnDefinition Width="1*" />
                </Grid.ColumnDefinitions>

                <Border IsEnabled="{Binding MachineProvider.IsConnected}" Background="{StaticResource FSE_PrimaryBackgroundDarkBrush}" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" BorderThickness="3" CornerRadius="3" Padding="10 5">
                    <StackPanel>
                        <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="Computer" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}">Devices</controls:TextIconButton>
                        <StackPanel Margin="30 0 0 0">
                            <ItemsControl ItemsSource="{Binding Drives}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="Harddisk" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}" Content="{Binding Label}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.NavigateToFolderCommand}" CommandParameter="{Binding Path}"></controls:TextIconButton>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </StackPanel>

                        <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="Computer" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}">Computer</controls:TextIconButton>
                        <StackPanel Margin="30 0 0 0">
                            <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="DesktopMac" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}" Command="{Binding NavigateSpecialFolderCommand}" CommandParameter="DesktopDirectory">Desktop</controls:TextIconButton>
                            <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="FileDocument" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}" Command="{Binding NavigateSpecialFolderCommand}" CommandParameter="MyDocuments">Documents</controls:TextIconButton>
                            <controls:TextIconButton HorizontalContentAlignment="Left" Padding="5" Icon="Application" Background="Transparent" BorderThickness="0" FocusVisualStyle="{x:Null}" Command="{Binding NavigateToFolderCommand}" CommandParameter='%appdata%\Twine\Tango'>Application Data</controls:TextIconButton>
                        </StackPanel>
                    </StackPanel>
                </Border>

                <Grid Margin="10 0 0 0" Grid.Column="2">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="1*" MinHeight="100" />
                        <RowDefinition Height="5" />
                        <RowDefinition Height="105" MinHeight="0" />
                    </Grid.RowDefinitions>
                    <controls:FileSystemControl
                                            x:Name="fileSystemControl"
                                            IsEnabled="{Binding MachineProvider.IsConnected}"
                                            AllowDrag="True"
                                            AllowDrop="True"
                                            CurrentItem="{Binding CurrentItem}" 
                                            Mode="{Binding ElementName=listView,Path=SelectedItem.Tag}"
                                            ItemDoubleClickedCommand="{Binding OpenItemCommand}" 
                                            DeleteCommand="{Binding DeleteCommand}"
                                            SelectedItems="{Binding SelectedItems}"
                                            DragCommand="{Binding DragCommand}"
                                            DropCommand="{Binding DropCommand}"
                                            CutPasteCommand="{Binding CutPasteCommand}"
                                            CopyPasteCommand="{Binding CopyPasteCommand}"
                                            DownloadCommand="{Binding DownloadCommand}"
                                            UploadCommand="{Binding UploadCommand}"
                                            BackCommand="{Binding BackCommand}"
                                            RenameCommand="{Binding RenameCommand}"
                                            NewFolderCommand="{Binding NewFolderCommand}"/>

                    <GridSplitter Grid.Row="1" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Center" />

                    <Grid Grid.Row="2">
                        <DockPanel>
                            <Grid DockPanel.Dock="Top" >
                                <StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Left">
                                    <material:PackIcon Kind="Download" />
                                    <material:PackIcon Margin="-2 0 0 0" Kind="Upload" />
                                    <TextBlock Margin="5 0 0 0" Foreground="{StaticResource FSE_PrimaryAccentBrush}" FontSize="{StaticResource FSE_SmallFontSize}">Transfer Queue</TextBlock>
                                    <TextBlock Margin="10 0 0 0" Foreground="{StaticResource FSE_GrayBrush}" FontSize="{StaticResource FSE_SmallFontSize}">
                                    <Run>(</Run><Run Text="{Binding FileSystemHandlers.Count,Mode=OneWay}"></Run><Run>)</Run>
                                    </TextBlock>
                                </StackPanel>
                                <StackPanel VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 10 0" Orientation="Horizontal">
                                    <material:PackIcon ToolTip="P2P channel is available" Visibility="{Binding FileSystemProvider.IsWebRtcAvailable,Converter={StaticResource BooleanToVisibilityConverter}}" Kind="LightningBoltCircle" HorizontalAlignment="Right" Width="18" Height="18" Foreground="{StaticResource FSE_GreenBrush}" />
                                    <CheckBox Margin="5 0 0 0" IsEnabled="{Binding FileSystemProvider.IsWebRtcAvailable}" FontSize="{StaticResource FSE_SmallFontSize}" IsChecked="{Binding FileSystemProvider.EnableWebRTC}">Enable P2P communication channel</CheckBox>
                                </StackPanel>
                            </Grid>
                            <Border CornerRadius="3" BorderThickness="3" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" Background="{StaticResource FSE_PrimaryBackgroundDarkBrush}">
                                <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                                    <ItemsControl ItemsSource="{Binding FileSystemHandlers}" HorizontalContentAlignment="Stretch" FontSize="10" Background="Transparent">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <Border Margin="5 5 5 0" CornerRadius="3" BorderBrush="{StaticResource FSE_PrimaryBackgroundLightBrush}" BorderThickness="2" Padding="10">
                                                    <DockPanel Height="40">
                                                        <Grid DockPanel.Dock="Left" Width="40">
                                                            <Image HorizontalAlignment="Left" RenderOptions.BitmapScalingMode="Fant" Stretch="Uniform">
                                                                <Image.Style>
                                                                    <Style TargetType="Image">
                                                                        <Setter Property="Source" Value="{Binding FileSystemItem.Icon}"></Setter>
                                                                        <Style.Triggers>
                                                                            <DataTrigger Binding="{Binding FileSystemItem.Type}" Value="Folder">
                                                                                <Setter Property="Source" Value="{Binding ElementName=fileSystemControl,Path=FolderIcon}"></Setter>
                                                                            </DataTrigger>
                                                                        </Style.Triggers>
                                                                    </Style>
                                                                </Image.Style>
                                                            </Image>
                                                            <Ellipse Margin="-5 -5 0 0"  Fill="{StaticResource FSE_PrimaryBackgroundDarkBrush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="20" Height="20" />
                                                            <material:PackIcon Margin="-3 -3 0 0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="15" Height="15">
                                                                <material:PackIcon.Style>
                                                                    <Style TargetType="material:PackIcon">
                                                                        <Setter Property="Kind" Value="Hourglass"></Setter>
                                                                        <Setter Property="Foreground" Value="{StaticResource FSE_GrayBrush}"></Setter>
                                                                        <Style.Triggers>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Downloading">
                                                                                <Setter Property="Kind" Value="Download"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_PrimaryForegroundBrush}"></Setter>
                                                                            </DataTrigger>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Uploading">
                                                                                <Setter Property="Kind" Value="Upload"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_PrimaryForegroundBrush}"></Setter>
                                                                            </DataTrigger>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Paused">
                                                                                <Setter Property="Kind" Value="Pause"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_OrangeBrush}"></Setter>
                                                                            </DataTrigger>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Failed">
                                                                                <Setter Property="Kind" Value="Alert"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_ErrorBrush}"></Setter>
                                                                            </DataTrigger>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Aborted">
                                                                                <Setter Property="Kind" Value="Alert"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_WarningBrush}"></Setter>
                                                                            </DataTrigger>
                                                                            <DataTrigger Binding="{Binding Status}" Value="Completed">
                                                                                <Setter Property="Kind" Value="Check"></Setter>
                                                                                <Setter Property="Foreground" Value="{StaticResource FSE_SuccessBrush}"></Setter>
                                                                            </DataTrigger>
                                                                        </Style.Triggers>
                                                                    </Style>
                                                                </material:PackIcon.Style>
                                                            </material:PackIcon>
                                                        </Grid>

                                                        <Grid DockPanel.Dock="Right" Width="140" Margin="20 0 0 0">
                                                            <UniformGrid Columns="3">
                                                                <Grid>
                                                                    <controls:ToggleIconButton ToolTip="Pause/Resume" Width="24" Height="24" UncheckedForeground="{StaticResource FSE_OrangeBrush}" CheckedForeground="{StaticResource FSE_GreenBrush}" UncheckedIcon="Pause" CheckedIcon="Play" Cursor="Hand" IsChecked="{Binding IsPaused,Mode=TwoWay}">
                                                                        <controls:ToggleIconButton.Style>
                                                                            <Style TargetType="controls:ToggleIconButton" BasedOn="{StaticResource {x:Type controls:ToggleIconButton}}">
                                                                                <Setter Property="IsEnabled" Value="False"></Setter>
                                                                                <Setter Property="Visibility" Value="Visible"></Setter>
                                                                                <Setter Property="Opacity" Value="0.2"></Setter>
                                                                                <Style.Triggers>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Downloading">
                                                                                        <Setter Property="IsEnabled" Value="True"></Setter>
                                                                                        <Setter Property="Opacity" Value="1"></Setter>
                                                                                    </DataTrigger>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Uploading">
                                                                                        <Setter Property="IsEnabled" Value="True"></Setter>
                                                                                        <Setter Property="Opacity" Value="1"></Setter>
                                                                                    </DataTrigger>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Paused">
                                                                                        <Setter Property="IsEnabled" Value="True"></Setter>
                                                                                        <Setter Property="Opacity" Value="1"></Setter>
                                                                                    </DataTrigger>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Failed">
                                                                                        <Setter Property="Visibility" Value="Hidden"></Setter>
                                                                                    </DataTrigger>
                                                                                </Style.Triggers>
                                                                            </Style>
                                                                        </controls:ToggleIconButton.Style>
                                                                    </controls:ToggleIconButton>
                                                                    <controls:IconButton Icon="Restart" ToolTip="Try again" Cursor="Hand" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.RetryFailedFileSystemHandlerCommand}" CommandParameter="{Binding}">
                                                                        <controls:IconButton.Style>
                                                                            <Style TargetType="controls:IconButton" BasedOn="{StaticResource {x:Type controls:IconButton}}">
                                                                                <Setter Property="Visibility" Value="Hidden"></Setter>
                                                                                <Style.Triggers>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Failed">
                                                                                        <Setter Property="Visibility" Value="Visible"></Setter>
                                                                                    </DataTrigger>
                                                                                </Style.Triggers>
                                                                            </Style>
                                                                        </controls:IconButton.Style>
                                                                    </controls:IconButton>
                                                                </Grid>
                                                                <controls:IconButton Icon="FolderOpen" ToolTip="Open containing folder" Cursor="Hand" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.OpenFileSystemHandlerDestinationCommand}" CommandParameter="{Binding}" />
                                                                <controls:IconButton Icon="DeleteForever" ToolTip="Remove from queue" Foreground="{StaticResource FSE_RedBrush}" Cursor="Hand" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.DeleteFileSystemHandlerCommand}" CommandParameter="{Binding}" />
                                                            </UniformGrid>
                                                        </Grid>

                                                        <Grid Margin="10 0 0 0">
                                                            <DockPanel>
                                                                <TextBlock FontSize="{StaticResource FSE_SmallFontSize}" DockPanel.Dock="Top" HorizontalAlignment="Left" Text="{Binding FileSystemItem.Name}" TextTrimming="CharacterEllipsis"></TextBlock>
                                                                <DockPanel Width="140" TextElement.Foreground="{StaticResource FSE_GrayBrush}" Margin="0 2 0 0" DockPanel.Dock="Top" HorizontalAlignment="Left">
                                                                    <TextBlock TextTrimming="CharacterEllipsis">
                                                                        <Run Text="{Binding Progress.Value,Mode=OneWay,Converter={StaticResource ByteArrayToFileSizeConverter}}"></Run>
                                                                        <Run>/</Run>
                                                                        <Run Text="{Binding Progress.Maximum,Mode=OneWay,Converter={StaticResource ByteArrayToFileSizeConverter}}"></Run>
                                                                    </TextBlock>
                                                                    <TextBlock HorizontalAlignment="Right">
                                                                        <Run Text="{Binding TransferRate,Mode=OneWay,Converter={StaticResource ByteArrayToFileSizeConverter}}"></Run><Run>/s</Run>
                                                                    </TextBlock>
                                                                </DockPanel>

                                                                <Border VerticalAlignment="Bottom" Height="5" Background="{StaticResource FSE_PrimaryBackgroundBrush}">
                                                                    <ProgressBar Height="Auto" Minimum="0" Maximum="{Binding Progress.Maximum}" Value="{Binding Progress.Value}">
                                                                        <ProgressBar.Style>
                                                                            <Style TargetType="ProgressBar" BasedOn="{StaticResource {x:Type ProgressBar}}">
                                                                                <Setter Property="IsIndeterminate" Value="False"></Setter>
                                                                                <Style.Triggers>
                                                                                    <DataTrigger Binding="{Binding Status}" Value="Pending">
                                                                                        <Setter Property="IsIndeterminate" Value="True"></Setter>
                                                                                    </DataTrigger>
                                                                                </Style.Triggers>
                                                                            </Style>
                                                                        </ProgressBar.Style>
                                                                    </ProgressBar>
                                                                </Border>


                                                            </DockPanel>

                                                            <TextBlock FontSize="{StaticResource FSE_SmallFontSize}" HorizontalAlignment="Right" VerticalAlignment="Top" Text="{Binding Status}"></TextBlock>
                                                        </Grid>
                                                    </DockPanel>
                                                </Border>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </ScrollViewer>
                            </Border>
                        </DockPanel>
                    </Grid>
                </Grid>
            </Grid>
        </Grid>
    </Grid>
</UserControl>