MainPage.xaml
  1  <Page
  2      x:Class="PowerToys.FileLocksmithUI.Views.MainPage"
  3      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  4      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  5      xmlns:converters="using:PowerToys.FileLocksmithUI.Converters"
  6      xmlns:core="using:Microsoft.Xaml.Interactions.Core"
  7      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  8      xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
  9      xmlns:interop="using:PowerToys.FileLocksmithLib.Interop"
 10      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
 11      xmlns:tkcontrols="using:CommunityToolkit.WinUI.Controls"
 12      xmlns:tkconverters="using:CommunityToolkit.WinUI.Converters"
 13      xmlns:ui="using:CommunityToolkit.WinUI"
 14      mc:Ignorable="d">
 15      <Page.Resources>
 16          <tkconverters:BoolToVisibilityConverter
 17              x:Key="boolToVisibilityConverter"
 18              FalseValue="Visible"
 19              TrueValue="Collapsed" />
 20  
 21          <tkconverters:DoubleToVisibilityConverter
 22              x:Key="doubleToVisibilityConverter"
 23              FalseValue="Visible"
 24              GreaterThan="0"
 25              TrueValue="Collapsed" />
 26          <converters:FileCountConverter x:Key="fileCountConverter" />
 27          <converters:PidToIconConverter x:Key="pidToIconConverter" />
 28          <converters:UserToSystemWarningVisibilityConverter x:Key="userToSystemWarningVisibilityConverter" />
 29          <converters:FileListToDescriptionConverter x:Key="fileListToDescriptionConverter" />
 30      </Page.Resources>
 31  
 32      <interactivity:Interaction.Behaviors>
 33          <core:EventTriggerBehavior EventName="Loaded">
 34              <core:InvokeCommandAction Command="{x:Bind ViewModel.LoadProcessesCommand}" />
 35          </core:EventTriggerBehavior>
 36      </interactivity:Interaction.Behaviors>
 37  
 38      <Grid RowSpacing="8">
 39          <Grid.RowDefinitions>
 40              <RowDefinition x:Name="ButtonsRow" Height="Auto" />
 41              <RowDefinition Height="*" />
 42          </Grid.RowDefinitions>
 43  
 44          <Grid Margin="16,0">
 45              <Button Click="ShowSelectedPathsButton_Click" Content="{x:Bind ViewModel.Paths, Converter={StaticResource fileListToDescriptionConverter}}">
 46                  <Button.Template>
 47                      <ControlTemplate TargetType="Button">
 48                          <TextBlock
 49                              HorizontalAlignment="Left"
 50                              Style="{ThemeResource BodyStrongTextBlockStyle}"
 51                              Text="{TemplateBinding Content}" />
 52                      </ControlTemplate>
 53                  </Button.Template>
 54                  <ToolTipService.ToolTip>
 55                      <TextBlock x:Uid="PathsTooltipDescription" TextWrapping="WrapWholeWords" />
 56                  </ToolTipService.ToolTip>
 57              </Button>
 58  
 59              <StackPanel
 60                  HorizontalAlignment="Right"
 61                  Orientation="Horizontal"
 62                  Spacing="8">
 63                  <Button
 64                      Command="{Binding LoadProcessesCommand}"
 65                      Content="{ui:FontIcon Glyph=&#xe72c;,
 66                                            FontSize=16}"
 67                      Style="{StaticResource SubtleButtonStyle}">
 68                      <ToolTipService.ToolTip>
 69                          <TextBlock x:Uid="Reload" />
 70                      </ToolTipService.ToolTip>
 71                  </Button>
 72                  <Button
 73                      x:Name="RestartAsAdminBtn"
 74                      Command="{Binding RestartElevatedCommand}"
 75                      Content="{ui:FontIcon Glyph=&#xe7ef;,
 76                                            FontSize=16}"
 77                      Style="{StaticResource SubtleButtonStyle}"
 78                      Visibility="{x:Bind ViewModel.IsElevated, Converter={StaticResource boolToVisibilityConverter}}">
 79                      <ToolTipService.ToolTip>
 80                          <TextBlock x:Uid="RestartAsAdmin" />
 81                      </ToolTipService.ToolTip>
 82                  </Button>
 83              </StackPanel>
 84          </Grid>
 85  
 86          <Grid Grid.Row="1">
 87              <Grid Visibility="{x:Bind ViewModel.IsLoading, Converter={StaticResource boolToVisibilityConverter}, Mode=OneWay}">
 88                  <ListView
 89                      x:Name="ProcessesListView"
 90                      Padding="0,0,0,12"
 91                      IncrementalLoadingThreshold="10"
 92                      ItemsSource="{x:Bind ViewModel.Processes}"
 93                      SelectionMode="None">
 94                      <ListView.ItemTemplate>
 95                          <DataTemplate x:DataType="interop:ProcessResult">
 96                              <tkcontrols:SettingsExpander Margin="0,0,0,4">
 97                                  <tkcontrols:SettingsExpander.Resources>
 98                                      <x:Double x:Key="SettingsCardWrapThreshold">0</x:Double>
 99                                  </tkcontrols:SettingsExpander.Resources>
100                                  <tkcontrols:SettingsExpander.Header>
101                                      <!--  We can't use the HeaderIcon because it only support a BitmapIcon, which only supports UriSource - not a direct BitmapImage  -->
102                                      <StackPanel Orientation="Horizontal" Spacing="8">
103                                          <Image
104                                              Width="16"
105                                              Height="16"
106                                              Source="{x:Bind pid, Converter={StaticResource pidToIconConverter}}" />
107                                          <TextBlock IsTextSelectionEnabled="True" Text="{x:Bind name}" />
108                                      </StackPanel>
109                                  </tkcontrols:SettingsExpander.Header>
110                                  <tkcontrols:SettingsExpander.Content>
111                                      <StackPanel Orientation="Horizontal" Spacing="8">
112                                          <FontIcon
113                                              Foreground="{ThemeResource InfoBarWarningSeverityIconBackground}"
114                                              Glyph="&#xE7BA;"
115                                              Visibility="{x:Bind user, Mode=OneTime, Converter={StaticResource userToSystemWarningVisibilityConverter}}">
116                                              <ToolTipService.ToolTip>
117                                                  <TextBlock x:Uid="ProcessIsSystemUserWarning" TextWrapping="Wrap" />
118                                              </ToolTipService.ToolTip>
119                                          </FontIcon>
120                                          <Button
121                                              MinWidth="128"
122                                              Command="{Binding Path=DataContext.EndTaskCommand, ElementName=ProcessesListView}"
123                                              CommandParameter="{Binding}">
124                                              <StackPanel Orientation="Horizontal" Spacing="8">
125                                                  <FontIcon FontSize="16" Glyph="&#xf140;" />
126                                                  <TextBlock x:Uid="EndTask" />
127                                              </StackPanel>
128                                          </Button>
129                                      </StackPanel>
130                                  </tkcontrols:SettingsExpander.Content>
131                                  <tkcontrols:SettingsExpander.Items>
132                                      <tkcontrols:SettingsCard x:Uid="ProcessID">
133                                          <TextBlock
134                                              Foreground="{ThemeResource TextFillColorSecondaryBrush}"
135                                              IsTextSelectionEnabled="True"
136                                              Text="{x:Bind pid}" />
137                                      </tkcontrols:SettingsCard>
138                                      <tkcontrols:SettingsCard x:Uid="User">
139                                          <TextBlock
140                                              Foreground="{ThemeResource TextFillColorSecondaryBrush}"
141                                              IsTextSelectionEnabled="True"
142                                              Text="{x:Bind user}" />
143                                      </tkcontrols:SettingsCard>
144                                      <tkcontrols:SettingsCard>
145                                          <tkcontrols:SettingsCard.Header>
146                                              <TextBlock>
147                                                  <Run x:Uid="Files" />
148                                                  <Run Text="(" /><Run Text="{x:Bind files, Converter={StaticResource fileCountConverter}}" /><Run Text=")" />
149                                              </TextBlock>
150                                          </tkcontrols:SettingsCard.Header>
151                                          <Button Click="ShowProcessFiles_Click">
152                                              <TextBlock x:Uid="ShowProcessFiles" />
153                                          </Button>
154                                      </tkcontrols:SettingsCard>
155                                  </tkcontrols:SettingsExpander.Items>
156                              </tkcontrols:SettingsExpander>
157                          </DataTemplate>
158                      </ListView.ItemTemplate>
159                  </ListView>
160  
161                  <StackPanel
162                      HorizontalAlignment="Center"
163                      VerticalAlignment="Center"
164                      Orientation="Vertical"
165                      Spacing="8"
166                      Visibility="{x:Bind ViewModel.Processes.Count, Mode=OneWay, Converter={StaticResource doubleToVisibilityConverter}}">
167                      <Button HorizontalAlignment="Center" Command="{Binding LoadProcessesCommand}">
168                          <Button.Template>
169                              <ControlTemplate TargetType="Button">
170                                  <FontIcon FontSize="32" Glyph="&#xE9F3;" />
171                              </ControlTemplate>
172                          </Button.Template>
173                          <ToolTipService.ToolTip>
174                              <TextBlock x:Uid="Reload" />
175                          </ToolTipService.ToolTip>
176                      </Button>
177                      <TextBlock x:Uid="EmptyListDescription" Foreground="{ThemeResource TextFillColorSecondaryBrush}" />
178                  </StackPanel>
179              </Grid>
180              <ProgressRing
181                  Width="48"
182                  Height="48"
183                  IsActive="{x:Bind ViewModel.IsLoading, Mode=OneWay}" />
184          </Grid>
185  
186          <ContentDialog x:Name="SelectedFilesListDialog" x:Uid="SelectedFilesListDialog">
187              <TextBlock
188                  IsTextSelectionEnabled="True"
189                  Text="{x:Bind ViewModel.PathsToString, Mode=OneWay}"
190                  TextWrapping="Wrap" />
191          </ContentDialog>
192          <ContentDialog x:Name="ProcessFilesListDialog" x:Uid="ProcessFilesListDialog">
193              <ScrollViewer Padding="16" HorizontalScrollBarVisibility="Auto">
194                  <TextBlock
195                      x:Name="ProcessFilesListDialogTextBlock"
196                      x:Uid="ProcessFilesListDialogTextBlock"
197                      IsTextSelectionEnabled="True" />
198              </ScrollViewer>
199          </ContentDialog>
200      </Grid>
201  </Page>