Add multichannel export to GUI

Closes #12
This commit is contained in:
Alexey Golub 2019-02-09 19:03:34 +02:00
parent 65c5df89f4
commit e4b0d60c40
13 changed files with 366 additions and 136 deletions

View file

@ -30,22 +30,33 @@
</Ellipse.Fill>
</Ellipse>
<!-- Guild and channel name -->
<!-- Placeholder (for multiple channels) -->
<TextBlock
Grid.Column="1"
Margin="8,0,0,0"
VerticalAlignment="Center"
FontSize="19"
TextTrimming="CharacterEllipsis">
Text="Multiple channels"
TextTrimming="CharacterEllipsis"
Visibility="{Binding IsSingleChannel, Converter={x:Static s:BoolToVisibilityConverter.InverseInstance}}" />
<!-- Category and channel name (for single channel) -->
<TextBlock
Grid.Column="1"
Margin="8,0,0,0"
VerticalAlignment="Center"
FontSize="19"
TextTrimming="CharacterEllipsis"
Visibility="{Binding IsSingleChannel, Converter={x:Static s:BoolToVisibilityConverter.Instance}}">
<Run
Foreground="{DynamicResource SecondaryTextBrush}"
Text="{Binding Channel.Category, Mode=OneWay}"
ToolTip="{Binding Channel.Category, Mode=OneWay}" />
Text="{Binding Channels[0].Category, Mode=OneWay}"
ToolTip="{Binding Channels[0].Category, Mode=OneWay}" />
<Run Text="/" />
<Run
Foreground="{DynamicResource PrimaryTextBrush}"
Text="{Binding Channel.Model.Name, Mode=OneWay}"
ToolTip="{Binding Channel.Model.Name, Mode=OneWay}" />
Text="{Binding Channels[0].Model.Name, Mode=OneWay}"
ToolTip="{Binding Channels[0].Model.Name, Mode=OneWay}" />
</TextBlock>
</Grid>

View file

@ -2,7 +2,9 @@
x:Class="DiscordChatExporter.Gui.Views.RootView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:behaviors="clr-namespace:DiscordChatExporter.Gui.Behaviors"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="https://github.com/canton7/Stylet"
@ -30,7 +32,6 @@
<Grid
Grid.Row="0"
Background="{DynamicResource PrimaryHueMidBrush}"
IsEnabled="{Binding IsEnabled}"
TextElement.Foreground="{DynamicResource SecondaryInverseTextBrush}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
@ -117,7 +118,7 @@
Grid.Row="1"
Background="{DynamicResource PrimaryHueMidBrush}"
IsIndeterminate="{Binding IsProgressIndeterminate}"
Value="{Binding Progress, Mode=OneWay}" />
Value="{Binding ProgressManager.Progress, Mode=OneWay}" />
<!-- Content -->
<Grid Grid.Row="2">
@ -186,10 +187,7 @@
</Grid>
<!-- Guilds and channels -->
<Grid
Background="{DynamicResource MaterialDesignCardBackground}"
IsEnabled="{Binding IsEnabled}"
Visibility="{Binding AvailableGuilds, Converter={x:Static s:BoolToVisibilityConverter.Instance}}">
<Grid Background="{DynamicResource MaterialDesignCardBackground}" Visibility="{Binding AvailableGuilds, Converter={x:Static s:BoolToVisibilityConverter.Instance}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
@ -203,7 +201,8 @@
<ListBox
ItemsSource="{Binding AvailableGuilds}"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
SelectedItem="{Binding SelectedGuild}">
SelectedItem="{Binding SelectedGuild}"
SelectionMode="Single">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid
@ -235,7 +234,13 @@
<!-- Channels -->
<Border Grid.Column="1">
<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding SelectedGuild.Channels}">
<ListBox
HorizontalContentAlignment="Stretch"
ItemsSource="{Binding SelectedGuild.Channels}"
SelectionMode="Extended">
<i:Interaction.Behaviors>
<behaviors:ChannelViewModelMultiSelectionListBoxBehavior SelectedItems="{Binding SelectedChannels}" />
</i:Interaction.Behaviors>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel
@ -243,12 +248,6 @@
Background="Transparent"
Cursor="Hand"
Orientation="Horizontal">
<StackPanel.InputBindings>
<MouseBinding
Command="{s:Action ExportChannel}"
CommandParameter="{Binding}"
MouseAction="LeftClick" />
</StackPanel.InputBindings>
<materialDesign:PackIcon
Margin="16,7,0,6"
VerticalAlignment="Center"
@ -257,9 +256,9 @@
Margin="3,8,8,8"
VerticalAlignment="Center"
FontSize="14">
<Run Text="{Binding Category, Mode=OneWay}" Foreground="{DynamicResource SecondaryTextBrush}" />
<Run Text="/" Foreground="{DynamicResource SecondaryTextBrush}" />
<Run Text="{Binding Model.Name, Mode=OneWay}" Foreground="{DynamicResource PrimaryTextBrush}" />
<Run Foreground="{DynamicResource SecondaryTextBrush}" Text="{Binding Category, Mode=OneWay}" />
<Run Text="/" />
<Run Foreground="{DynamicResource PrimaryTextBrush}" Text="{Binding Model.Name, Mode=OneWay}" />
</TextBlock>
</StackPanel>
</DataTemplate>
@ -268,6 +267,20 @@
</Border>
</Grid>
<!-- Export button -->
<Button
Margin="32,24"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Command="{s:Action ExportChannels}"
Style="{StaticResource MaterialDesignFloatingActionAccentButton}"
Visibility="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={x:Static s:BoolToVisibilityConverter.Instance}}">
<materialDesign:PackIcon
Width="32"
Height="32"
Kind="Download" />
</Button>
<!-- Notifications snackbar -->
<materialDesign:Snackbar MessageQueue="{Binding Notifications}" />
</Grid>