Fixed circular propertyChange problem on ToolTip.
Added Dequeue per coin functionality with right click in coinlist
Hightlighted rows in coinlist
MODIFY
WalletWasabi.Dependencies/AvalonStudio.Shell
WalletWasabi.Dependencies/AvalonStudio.Shell
-Subproject commit abcc38a6a3f55aa75d958948111ff920ce34a7b6
+Subproject commit b40507bbdabb83e48388f4d7969cc4f49aeb0975

MODIFY
WalletWasabi.Gui/Controls/WalletExplorer/CoinListView.xaml
WalletWasabi.Gui/Controls/WalletExplorer/CoinListView.xaml
<Style Selector="TextBox.Transaparent">
<Setter Property="Background" Value="Transparent" />
</Style>
- <Style Selector="ListBoxItem:selected /template/ ContentPresenter">
+<!-- <Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="{DynamicResource ThemeBackgroundBrush}" />
</Style>
<Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
</Style>
<Style Selector="ListBoxItem:selected:focus /template/ ContentPresenter">
<Setter Property="Background" Value="{DynamicResource ThemeBackgroundBrush}" />
- </Style>
+ </Style>-->
</UserControl.Styles>
<DockPanel LastChildFill="True">
<TextBlock Text="Privacy" Grid.Column="4" Margin="20 0 0 0" />
<TextBlock Text="History" Grid.Column="5" />
</Grid>
- <ListBox Items="{Binding Coins}" VirtualizationMode="None">
+ <ListBox Items="{Binding Coins}" VirtualizationMode="None" SelectedItem="{Binding Path=SelectedCoin, Mode=TwoWay}">
+ <ListBox.ContextMenu>
+ <ContextMenu>
+ <!--Enqueuing needs password, TODO: jump to password box OR display pw box in context menu + send button-->
+ <MenuItem Command="{Binding EnqueueCoin}" IsVisible="false">
+ <MenuItem.Header>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition/>
+ <ColumnDefinition/>
+ </Grid.ColumnDefinitions>
+ <TextBlock Text="Enqueue Coin, password:" VerticalAlignment="Center"/>
+ <TextBox Width="50" Grid.Column="1"/>
+ </Grid>
+ </MenuItem.Header>
+ </MenuItem>
+ <MenuItem Header="Dequeue from CoinJoin" Command="{Binding DequeueCoin}"/>
+ </ContextMenu>
+ </ListBox.ContextMenu>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Expander ExpandDirection="Down">
- <StackPanel Background="{DynamicResource ThemeControlBackgroundBrush}">
+ <StackPanel Background="Transparent">
<Grid HorizontalAlignment="Left" ColumnDefinitions="150, *" RowDefinitions="Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto,Auto" MaxWidth="800">
<TextBlock Text="Transaction Id:" Grid.Row="0" />
<controls:ExtendedTextBox Classes="selectableTextBlock Transaparent" Text="{Binding TransactionId}" Background="Transparent" Grid.Column="1" Grid.Row="0" />
<DrawingPresenter Drawing="{Binding Icon}" Margin="0 0 25 0" />
</Panel>
- <controls:ExtendedTextBox Classes="selectableTextBlock" Grid.Column="5" Text="{Binding History}" />
+ <controls:ExtendedTextBox Classes="selectableTextBlock" Background="Transparent" Grid.Column="5" Text="{Binding History}" />
<TextBlock Text="" Grid.Column="6" />
</Grid>

MODIFY
WalletWasabi.Gui/Controls/WalletExplorer/CoinListViewModel.cs
WalletWasabi.Gui/Controls/WalletExplorer/CoinListViewModel.cs
@@ -9,6 +9,28 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
{
#pragma warning disable CS0618 // Type or member is obsolete
private IReactiveDerivedList<CoinViewModel> _coins;
+ private CoinViewModel _selectedCoin;
+
+ public ReactiveCommand EnqueueCoin { get; }
+ public ReactiveCommand DequeueCoin { get; }
+ public CoinViewModel SelectedCoin
+ {
+ get => _selectedCoin;
+ set
+ {
+ this.RaiseAndSetIfChanged(ref _selectedCoin, value);
+ this.RaisePropertyChanged(nameof(CanDeqeue));
+ }
+ }
+
+ public bool CanDeqeue
+ {
+ get
+ {
+ if (SelectedCoin == null) return false;
+ return SelectedCoin.CoinJoinInProgress;
+ }
+ }
public CoinListViewModel(IReactiveDerivedList<CoinViewModel> coins, Money preSelectMinAmountIncludingCondition = null, int? preSelectMaxAnonSetExcludingCondition = null)
{
@@ -24,6 +46,16 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
}
}
}
+ EnqueueCoin = ReactiveCommand.Create(() =>
+ {
+ if (SelectedCoin == null) return;
+ //await Global.ChaumianClient.QueueCoinsToMixAsync()
+ });
+ DequeueCoin = ReactiveCommand.Create(async () =>
+ {
+ if (SelectedCoin == null) return;
+ await Global.ChaumianClient.DequeueCoinsFromMixAsync(SelectedCoin.Model);
+ }, this.WhenAnyValue(x => x.CanDeqeue));
}
public IReactiveDerivedList<CoinViewModel> Coins

MODIFY
WalletWasabi.Gui/Controls/WalletExplorer/CoinViewModel.cs
WalletWasabi.Gui/Controls/WalletExplorer/CoinViewModel.cs
@@ -16,7 +16,7 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
public class CoinViewModel : ViewModelBase
{
private bool _isSelected;
- private SmartCoinStatus _status;
+ private SmartCoinStatus _smartCoinStatus;
public CoinViewModel(SmartCoin model)
{
@@ -25,7 +25,7 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
model.WhenAnyValue(x => x.Confirmed).ObserveOn(RxApp.MainThreadScheduler).Subscribe(confirmed =>
{
this.RaisePropertyChanged(nameof(Confirmed));
- this.RaisePropertyChanged(nameof(Status));
+ RefreshSmartCoinStatus();
});
model.WhenAnyValue(x => x.SpentOrCoinJoinInProgress).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
@@ -36,17 +36,17 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
model.WhenAnyValue(x => x.CoinJoinInProgress).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
{
this.RaisePropertyChanged(nameof(CoinJoinInProgress));
- this.RaisePropertyChanged(nameof(Status));
+ RefreshSmartCoinStatus();
});
model.WhenAnyValue(x => x.IsBanned).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
{
- this.RaisePropertyChanged(nameof(Status));
+ RefreshSmartCoinStatus();
});
model.WhenAnyValue(x => x.SpentAccordingToBackend).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
{
- this.RaisePropertyChanged(nameof(Status));
+ RefreshSmartCoinStatus();
});
this.WhenAnyValue(x => x.Status).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
@@ -57,7 +57,7 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
Global.IndexDownloader.WhenAnyValue(x => x.BestHeight).ObserveOn(RxApp.MainThreadScheduler).Subscribe(_ =>
{
this.RaisePropertyChanged(nameof(Confirmations));
- this.RaisePropertyChanged(nameof(Status));
+ RefreshSmartCoinStatus();
});
Global.ChaumianClient.StateUpdated += ChaumianClient_StateUpdated;
@@ -129,9 +129,26 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
public string History => string.Join(", ", Global.WalletService.GetHistory(Model, Enumerable.Empty<SmartCoin>()).Select(x => x.Label).Distinct());
+
+
public SmartCoinStatus Status
{
get
+ {
+ return _smartCoinStatus;
+ }
+ set
+ {
+ this.RaiseAndSetIfChanged(ref _smartCoinStatus, value);
+ }
+ }
+
+ void RefreshSmartCoinStatus()
+ {
+ Status = GetSmartCoinStatus();
+ }
+
+ SmartCoinStatus GetSmartCoinStatus()
{
if (Model.IsBanned)
{
@@ -198,7 +215,6 @@ namespace WalletWasabi.Gui.Controls.WalletExplorer
}
}
}
- set { this.RaiseAndSetIfChanged(ref _status, value); }
- }
+
}
}

MODIFY
WalletWasabi.Gui/Controls/WalletExplorer/SendTabView.xaml
WalletWasabi.Gui/Controls/WalletExplorer/SendTabView.xaml
</i:Interaction.Behaviors>
<UserControl.Styles>
- <Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
+<!-- <Style Selector="ListBoxItem:pointerover /template/ ContentPresenter">
<Setter Property="Background" Value="Transparent" />
- </Style>
+ </Style>-->
</UserControl.Styles>
<DockPanel LastChildFill="True">

- Fixed circular propertyChange problem on ToolTip.
- Added Dequeue per coin functionality with right click in coinlist
- Hightlighted rows in coinlist