Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace LogicAnalyzer.Classes
{
public class GeneralSettings
{
public int MinSamples { get; set; } = 10;
public int MaxSamples { get; set; } = 10000;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Media;
using Avalonia.Media.Imaging;
using LogicAnalyzer.Classes;
Expand All @@ -23,10 +24,14 @@ public partial class SamplePreviewer : UserControl, ISampleDisplay
public int VisibleSamples { get; private set; }

public event EventHandler<PinnedEventArgs>? PinnedChanged;
public event EventHandler<ViewChangedEventArgs>? ViewChanged;

bool pinned = false;
public bool Pinned { get { return pinned; } set { pinned = value; if (PinnedChanged != null) PinnedChanged(this, new PinnedEventArgs { Pinned = pinned }); } }

bool dragging = false;
double dragOffset = 0;

public SamplePreviewer()
{
InitializeComponent();
Expand Down Expand Up @@ -125,6 +130,71 @@ public void UpdateVisibleSamples(int FirstSample, int VisibleSamples)
InvalidateVisual();
}

protected override void OnPointerPressed(PointerPressedEventArgs e)
{
base.OnPointerPressed(e);

if (e.Source == lblPin)
return;

var point = e.GetPosition(this);
double ratio = Bounds.Width / sampleCount;
double visibleWidth = VisibleSamples * ratio;
double startX = FirstSample * ratio;

if (point.X >= startX && point.X <= startX + visibleWidth)
{
dragOffset = point.X - startX;
}
else
{
dragOffset = visibleWidth / 2.0;
updateView(point.X);
}

dragging = true;
e.Pointer.Capture(this);
}

protected override void OnPointerMoved(PointerEventArgs e)
{
base.OnPointerMoved(e);

if (!dragging)
return;

var point = e.GetPosition(this);
updateView(point.X);
}

protected override void OnPointerReleased(PointerReleasedEventArgs e)
{
base.OnPointerReleased(e);

if (!dragging)
return;

dragging = false;
e.Pointer.Capture(null);

var point = e.GetPosition(this);
updateView(point.X);
}

void updateView(double x)
{
if (sampleCount == 0)
return;

double ratio = Bounds.Width / sampleCount;
double newStart = x - dragOffset;

int first = (int)(newStart / ratio);
first = Math.Clamp(first, 0, sampleCount - VisibleSamples);

ViewChanged?.Invoke(this, new ViewChangedEventArgs { FirstSample = first });
}

private void TextBlock_PointerPressed(object? sender, Avalonia.Input.PointerPressedEventArgs e)
{
pinned = !pinned;
Expand All @@ -137,5 +207,10 @@ public class PinnedEventArgs : EventArgs
{
public bool Pinned { get; set; }
}

public class ViewChangedEventArgs : EventArgs
{
public int FirstSample { get; set; }
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="LogicAnalyzer.Dialogs.GeneralSettingsDialog"
Background="#383838" Title="Settings"
Classes="tool_window" Icon="/Assets/Ico40.ico"
Width="300" Height="180" CanResize="False" WindowStartupLocation="CenterOwner">
<Panel>
<Grid ColumnDefinitions="140,*" RowDefinitions="*,*,Auto" Margin="10,15,10,15">
<TextBlock Grid.Column="0" Grid.Row="0" VerticalAlignment="Center" Margin="5,0,0,0">Min display samples:</TextBlock>
<NumericUpDown Grid.Column="1" Grid.Row="0" Height="32" Minimum="1" Maximum="1000000" Name="nudMin" />
<TextBlock Grid.Column="0" Grid.Row="1" VerticalAlignment="Center" Margin="5,0,0,0">Max display samples:</TextBlock>
<NumericUpDown Grid.Column="1" Grid.Row="1" Height="32" Minimum="1" Maximum="1000000" Name="nudMax" />
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Grid.Column="1" Grid.Row="2" HorizontalAlignment="Right">
<Button Name="btnAccept">Accept</Button>
<Button Name="btnCancel" Margin="10,0,0,0">Cancel</Button>
</StackPanel>
</Grid>
</Panel>
</Window>
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Avalonia.Controls;
using LogicAnalyzer.Extensions;
using System;

namespace LogicAnalyzer.Dialogs
{
public partial class GeneralSettingsDialog : Window
{
public int MinSamples { get; set; }
public int MaxSamples { get; set; }

public int MinSamplesLimit { get; set; }
public int MaxSamplesLimit { get; set; }

public GeneralSettingsDialog()
{
InitializeComponent();
btnAccept.Click += BtnAccept_Click;
btnCancel.Click += BtnCancel_Click;
}

protected override void OnOpened(EventArgs e)
{
base.OnOpened(e);
this.FixStartupPosition();
nudMin.Minimum = MinSamplesLimit;
nudMin.Maximum = MaxSamplesLimit;
nudMax.Minimum = MinSamplesLimit;
nudMax.Maximum = MaxSamplesLimit;

nudMin.Value = Math.Clamp(MinSamples, MinSamplesLimit, MaxSamplesLimit);
nudMax.Value = Math.Clamp(MaxSamples, MinSamplesLimit, MaxSamplesLimit);

var tooltip = $"Min: {MinSamplesLimit:#,##0}\r\nMax: {MaxSamplesLimit:#,##0}";
ToolTip.SetTip(nudMin, tooltip);
ToolTip.SetTip(nudMax, tooltip);
}

private void BtnCancel_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
Close(false);
}

private async void BtnAccept_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
if (nudMax.Value < nudMin.Value)
{
await this.ShowError("Invalid settings", "Max samples must be greater than Min samples.");
return;
}
MinSamples = (int)nudMin.Value;
MaxSamples = (int)nudMax.Value;
Close(true);
}
}
}
13 changes: 8 additions & 5 deletions Software/LogicAnalyzer/LogicAnalyzer/LogicAnalyzer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,14 @@
<ProjectReference Include="..\SharedDriver\SharedDriver.csproj" />
<ProjectReference Include="..\SignalDescriptionLanguage\SignalDescriptionLanguage.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Dialogs\SelectedRegionDialog.axaml.cs">
<DependentUpon>SelectedRegionDialog.axaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Update="Dialogs\SelectedRegionDialog.axaml.cs">
<DependentUpon>SelectedRegionDialog.axaml</DependentUpon>
</Compile>
<Compile Update="Dialogs\GeneralSettingsDialog.axaml.cs">
<DependentUpon>GeneralSettingsDialog.axaml</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<AvaloniaResource Include="Assets\**" />
</ItemGroup>
Expand Down
19 changes: 15 additions & 4 deletions Software/LogicAnalyzer/LogicAnalyzer/MainWindow.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@
<Separator/>
<MenuItem Header="_Exit" Name="mnuExit"/>
</MenuItem>
<MenuItem Header="Network settings" IsEnabled="False" Name="mnuSettings">
<MenuItem Header="_Settings" Name="mnuSettings">
<MenuItem Header="General" Name="mnuGeneralSettings"></MenuItem>
<MenuItem Header="Update network settings" Name="mnuNetSettings"></MenuItem>
</MenuItem>
<MenuItem Header="Profiles" Name="mnuProfiles" IsEnabled="False">
Expand Down Expand Up @@ -90,9 +91,19 @@
<TextBlock Grid.Row="1" Grid.Column="2" Margin="0,5,10,0" Name="lblMaxSamples" HorizontalAlignment="Right">
10000
</TextBlock>
<Border Grid.Row="2" Grid.ColumnSpan="3" Margin="10,0,10,0" >
<Slider Margin="0,-10,0,0" TickFrequency="50" TickPlacement="BottomRight" Minimum="10" Maximum="10000" Value="1024" Name="tkInScreen"></Slider>
</Border>
<Border Grid.Row="2" Grid.ColumnSpan="3" Margin="10,0,10,0" >
<Slider Margin="0,-10,0,0"
TickFrequency="50"
TickPlacement="BottomRight"
Minimum="10"
Maximum="10000"
Value="1024"
Name="tkInScreen"
ToolTip.ShowDelay="0"
ToolTip.Placement="AnchorAndGravity"
ToolTip.Tip="{Binding Value, RelativeSource={RelativeSource Self}, StringFormat='{}{0:F0}'}">
</Slider>
</Border>
</Grid>
<StackPanel Margin="5,5,5,0" Background="#80383838">
<TextBlock Margin="5,2,5,2">
Expand Down
Loading