Skip to content

Commit 8098a03

Browse files
author
Ariel Silahian
committed
Add visibility controls for tile UI elements and plugin opts
Introduce visibility bindings for footer, settings, and chart buttons in MetricTile and MetricTileCustomUI. Update vmTile and plugin interfaces to support new visibility properties, allowing plugins to control UI element display. Add StopAllAsync to vmTile for async study shutdown. Minor cleanup in Dispose logic.
1 parent 5c72399 commit 8098a03

5 files changed

Lines changed: 60 additions & 15 deletions

File tree

UserControls/MetricTile.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
<StackPanel Orientation="Vertical" Grid.Row="1">
4343
<Separator HorizontalAlignment="Stretch" Height="10" BorderBrush="White"/>
4444
<TextBlock Text="{Binding Title}" FontSize="16" Margin="0 0 0 5 " VerticalAlignment="Center" HorizontalAlignment="Center"/>
45-
<TextBlock FontSize="9" Margin="0 0 0 5" Padding="0" VerticalAlignment="Center" HorizontalAlignment="Center">
45+
<TextBlock Visibility="{Binding FooterVisibility}" FontSize="9" Margin="0 0 0 5" Padding="0" VerticalAlignment="Center" HorizontalAlignment="Center">
4646
<TextBlock.Text>
4747
<MultiBinding StringFormat="{}{0}: {1}">
4848
<Binding Path="SelectedProviderName"/>

UserControls/MetricTileCustomUI.xaml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@
3434
</Grid.ColumnDefinitions>
3535

3636
<!-- Title Label -->
37-
<Button Content="" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="20" Height="20" Margin="0 0 0 0" Padding="0" ToolTip="Settings" Command="{Binding OpenSettingsCommand}" />
37+
<Button Content="" Visibility="{Binding SettingButtonVisibility}" Grid.Column="0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="20" Height="20" Margin="0 0 0 0" Padding="0" ToolTip="Settings" Command="{Binding OpenSettingsCommand}" />
3838
<TextBlock Text="{Binding Title}" Grid.Column="0" VerticalAlignment="Center" Margin="25 0 0 0"/>
39-
<Button Content="📈" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Right" Width="20" Height="20" Margin="0" Padding="0" ToolTip="Open Chart" Command="{Binding OpenChartCommand}" />
39+
<Button Content="📈" Visibility="{Binding ChartButtonVisibility}" Grid.Column="1" VerticalAlignment="Top" HorizontalAlignment="Right" Width="20" Height="20" Margin="0" Padding="0" ToolTip="Open Chart" Command="{Binding OpenChartCommand}" />
40+
4041
</Grid>
4142
</GroupBox.Header>
4243

@@ -59,12 +60,12 @@
5960
Visibility="{Binding UCVisibility}" />
6061
</ScrollViewer>
6162

62-
<Separator Grid.Row="1"
63+
<Separator Grid.Row="1" Visibility="{Binding FooterVisibility}"
6364
HorizontalAlignment="Stretch"
6465
Height="10"
6566
BorderBrush="White"/>
6667

67-
<TextBlock Grid.Row="2"
68+
<TextBlock Visibility="{Binding FooterVisibility}" Grid.Row="2"
6869
FontSize="9"
6970
Margin="0 0 0 5"
7071
Padding="0"

ViewModel/vmTile.cs

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
using Prism.Mvvm;
22
using System;
3+
using System.Collections.ObjectModel;
34
using System.Linq;
4-
using System.Windows.Input;
5+
using System.Threading;
6+
using System.Threading.Tasks;
57
using System.Windows;
6-
using VisualHFT.Helpers;
7-
using VisualHFT.Model;
8-
using VisualHFT.ViewModels;
8+
using System.Windows.Controls;
9+
using System.Windows.Input;
910
using System.Windows.Media;
1011
using VisualHFT.Commons.Studies;
12+
using VisualHFT.Helpers;
13+
using VisualHFT.Model;
1114
using VisualHFT.View;
12-
using System.Collections.ObjectModel;
13-
using System.Windows.Controls;
15+
using VisualHFT.ViewModels;
1416

1517
namespace VisualHFT.ViewModel
1618
{
@@ -28,6 +30,8 @@ public class vmTile : BindableBase, IDisposable
2830

2931
private System.Windows.Visibility _settingButtonVisibility;
3032
private System.Windows.Visibility _chartButtonVisibility;
33+
private System.Windows.Visibility _footerVisibility;
34+
3135
private System.Windows.Visibility _valueVisibility = Visibility.Visible;
3236
private System.Windows.Visibility _ucVisibility = Visibility.Hidden;
3337

@@ -69,14 +73,16 @@ public vmTile(IStudy study)
6973
IsGroup = true;
7074
ValueVisibility = Visibility.Hidden;
7175
UCVisibility = Visibility.Visible;
76+
study.IsChartButtonVisible = false; //hide chart button for user controls
7277

7378
OpenSettingsCommand = new RelayCommand<vmTile>(OpenSettings);
7479
}
7580
RaisePropertyChanged(nameof(SelectedSymbol));
7681
RaisePropertyChanged(nameof(SelectedProviderName));
7782
RaisePropertyChanged(nameof(IsGroup));
78-
SettingButtonVisibility = Visibility.Visible;
79-
ChartButtonVisibility = Visibility.Visible;
83+
SettingButtonVisibility = study.IsSettingsButtonVisisble ? Visibility.Visible : Visibility.Collapsed;
84+
ChartButtonVisibility = study.IsChartButtonVisible ? Visibility.Visible : Visibility.Collapsed;
85+
FooterVisibility = study.IsFooterVisible ? Visibility.Visible : Visibility.Collapsed;
8086
}
8187
public vmTile(IMultiStudy multiStudy)
8288
{
@@ -279,6 +285,11 @@ public System.Windows.Visibility ChartButtonVisibility
279285
get { return _chartButtonVisibility; }
280286
set { SetProperty(ref _chartButtonVisibility, value); }
281287
}
288+
public System.Windows.Visibility FooterVisibility
289+
{
290+
get { return _footerVisibility; }
291+
set { SetProperty(ref _footerVisibility, value); }
292+
}
282293
public UserControl CustomControl
283294
{
284295
get => _customControl;
@@ -332,6 +343,33 @@ private void OpenSettings(object obj)
332343

333344
}
334345

346+
347+
/*
348+
* Stop all studies (main and children) asynchronously
349+
* ONLY FOR L3 VERSION
350+
*/
351+
public async Task StopAllAsync(CancellationToken cancellationToken)
352+
{
353+
cancellationToken = cancellationToken == default ? CancellationToken.None : cancellationToken;
354+
355+
if (_study != null && !cancellationToken.IsCancellationRequested)
356+
{
357+
await _study.StopAsync();
358+
}
359+
360+
if (_multiStudy != null)
361+
{
362+
foreach (var study in _multiStudy.Studies)
363+
{
364+
if (cancellationToken.IsCancellationRequested)
365+
break;
366+
367+
await study.StopAsync();
368+
}
369+
}
370+
}
371+
372+
335373
protected virtual void Dispose(bool disposing)
336374
{
337375
if (!_disposed)
@@ -362,7 +400,7 @@ protected virtual void Dispose(bool disposing)
362400
}
363401
catch (Exception ex)
364402
{
365-
// Log but continue disposing other children
403+
// Log but continue disposing of other children
366404
System.Diagnostics.Debug.WriteLine($"Error disposing child tile: {ex.Message}");
367405
}
368406
}

VisualHFT.Commons/PluginManager/BasePluginStudy.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ public abstract class BasePluginStudy : IStudy, VisualHFT.PluginManager.IPlugin,
3737
public abstract Action CloseSettingWindow { get; set; }
3838
public abstract string TileTitle { get; set; }
3939
public abstract string TileToolTip { get; set; }
40+
public bool IsChartButtonVisible { get; set; } = true;
41+
public bool IsSettingsButtonVisisble { get; set; } = true;
42+
public bool IsFooterVisible { get; set; } = true;
43+
4044
public ePluginType PluginType
4145
{
4246
get { return ePluginType.STUDY; }

VisualHFT.Commons/Studies/IStudy.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ public interface IStudy : IDisposable
1313
string TileToolTip { get; set; }
1414
object GetCustomUI(); //Allow to setup own UI for the plugin
1515
//using object type because this csproj doesn't support UI
16-
16+
bool IsChartButtonVisible { get; set; }
17+
bool IsSettingsButtonVisisble { get; set; }
18+
bool IsFooterVisible { get; set; }
1719
}
1820

1921
}

0 commit comments

Comments
 (0)