Skip to content

Commit

Permalink
Added U/I support for displaying accumulated move amount for relative…
Browse files Browse the repository at this point in the history
… and absolute focusers.

Added direct move amount for relative focusers.
Updated user guide
Bumped version number to 6.6.0.1
Changed telescope park warning messagebox to OK/Cancel to support unit test limitation.
  • Loading branch information
astroman133 committed Feb 12, 2022
1 parent 382f968 commit fb1fbb4
Show file tree
Hide file tree
Showing 13 changed files with 330 additions and 72 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ASCOM.DeviceHub
{
internal class FocuserMoveAmountMessage
{
public FocuserMoveAmountMessage( int moveAmount )
{
MoveAmount = moveAmount;
}

public int MoveAmount { get; private set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace ASCOM.DeviceHub
{
internal class EditLockTextBooleanValueConverter : IValueConverter
{
public object Convert( object value, Type targetType, object parameter, CultureInfo culture )
{
bool bval = (bool)value;

return bval ? "Lock" : "Edit";
}

public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture )
{
throw new System.NotImplementedException();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Diagnostics;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
Expand All @@ -10,8 +11,8 @@ public class FocuserTemperatureValueConverter : IMultiValueConverter
public object Convert( object[] values, Type targetType, object parameter, CultureInfo culture )
{
string retval = "NO DATA";
double rawTemp = Double.NaN;
bool convertToF = false;
double rawTemp = 0.0;
bool convertToF = true;
double offset = 0.0;

if ( values[0] != DependencyProperty.UnsetValue )
Expand All @@ -24,7 +25,7 @@ public object Convert( object[] values, Type targetType, object parameter, Cultu
offset = (double)values[1];
}

if ( values[2] != null )
if ( values[2] != DependencyProperty.UnsetValue )
{
convertToF = (bool)values[2];
}
Expand Down
2 changes: 2 additions & 0 deletions DeviceHub/DeviceHub.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@
<Compile Include="Business Object Classes\Telescope Classes\TelescopeRates.cs" />
<Compile Include="Business Object Classes\Value Converters\MultiBooleanVisibilityConverter.cs" />
<Compile Include="Business Object Classes\Value Converters\MultiBindingTrueIfNotParking.cs" />
<Compile Include="Business Object Classes\Value Converters\EditLockTextBooleanValueConverter.cs" />
<Compile Include="Business Object Classes\Message Types\FocuserMoveAmountMessage.cs" />
<Compile Include="Resources\Strings.Designer.cs" />
<Compile Include="View Classes\AboutView.xaml.cs">
<DependentUpon>AboutView.xaml</DependentUpon>
Expand Down
1 change: 1 addition & 0 deletions DeviceHub/DeviceManagers/FocuserManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ public void MoveFocuserBy( int amount )
// Ensure that our move amount does not exceed the MaxIncrement.

int moveAmount = Math.Max( Math.Min( amount, maxIncrement ), -MaxIncrement );
Messenger.Default.Send( new FocuserMoveAmountMessage( moveAmount ) );

if ( Parameters.Absolute )
{
Expand Down
96 changes: 65 additions & 31 deletions DeviceHub/View Classes/Focuser Views/FocuserControlView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
xmlns:local="clr-namespace:ASCOM.DeviceHub"
mc:Ignorable="d"
Background="{DynamicResource WindowBackgroundBrush}"
d:DesignHeight="330" d:DesignWidth="340" MinWidth="420">
d:DesignHeight="320" d:DesignWidth="340" MinWidth="420">
<UserControl.Resources>
<local:MoveValueConverter x:Key="MoveValueConverter" />
<local:FocuserPositionValueConverter x:Key="FocuserPositionValueConverter" />
Expand All @@ -16,6 +16,8 @@
<local:BooleanVisibilityConverter x:Key="BoolVisConverter" />
<local:NegatedBooleanToVisibilityConverter x:Key="NegBoolVisConverter" />
<local:BooleanToConnectStringConverter x:Key="BoolConnectConverter" />
<local:NegatedBooleanValueConverter x:Key="NegBoolValueConverter" />
<local:EditLockTextBooleanValueConverter x:Key="EditLockConverter" />

<Style x:Key="StateLabel" TargetType="{x:Type Label}">
<Setter Property="Margin" Value="0" />
Expand All @@ -40,7 +42,7 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox Grid.Row="0" Grid.ColumnSpan="2" Header="Temperature Calibration" Foreground="{DynamicResource NormalTextBrush}" Margin="6" Width="360">
<GroupBox Grid.Row="0" Grid.ColumnSpan="2" Header="Temperature Calibration" Foreground="{DynamicResource NormalTextBrush}" Margin="6,0" Width="360">
<StackPanel Orientation="Horizontal">
<Label Content="Temperature Offset (°C):" Foreground="{DynamicResource NormalTextBrush}" VerticalAlignment="Center" Margin="6" />
<Slider Width="120" Minimum="-10" Maximum="10" TickFrequency="0.5" IsSnapToTickEnabled="True" VerticalAlignment="Center"
Expand Down Expand Up @@ -82,7 +84,7 @@
<Label Grid.Row="2" Grid.Column="0" Content="Temperature:" Style="{StaticResource StateLabel}" FontSize="18" />
<Label Grid.Row="2" Grid.Column="1" Style="{DynamicResource StateValue}" Margin="6,0" Padding="0" HorizontalAlignment="Right" FontSize="18" >
<Label.Content>
<MultiBinding Converter="{StaticResource FocuserTemperatureValueConverter}">
<MultiBinding Converter="{StaticResource FocuserTemperatureValueConverter}" FallbackValue="0.0">
<Binding Path="Status.Temperature" />
<Binding Path="TemperatureOffset" />
<Binding Path="TemperatureDisplayDegF" />
Expand All @@ -101,9 +103,9 @@
, FallbackValue=Visible}"
Command="{Binding ToggleTempCompCommand}" CommandParameter="{Binding IsChecked, RelativeSource={RelativeSource Self}}"/>
</Grid>
<Grid Grid.Row="2" Margin="0,8" HorizontalAlignment="center">
<Grid Grid.Row="2" Margin="0,4" HorizontalAlignment="center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
Expand All @@ -112,48 +114,80 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0" Content="Select the move amount:" Style="{DynamicResource StateLabel}" VerticalAlignment="Top"/>
<StackPanel Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Orientation="Vertical" Margin="0,0,0,6" HorizontalAlignment="Left">
<Slider Value="{Binding Path=MoveIndex, Mode=TwoWay}" Width="130" VerticalAlignment="Top" Minimum="0" Maximum="6" TickFrequency="1" IsSnapToTickEnabled="True" Margin="0,0,0,0" Padding="0"
<StackPanel Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Orientation="Horizontal" Width="360">
<Label Grid.Row="0" Grid.Column="0" Content="Select the move amount:" Style="{DynamicResource StateLabel}" VerticalAlignment="Top"/>
<StackPanel Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" Orientation="Vertical" Margin="0,0,0,4" HorizontalAlignment="Left">
<Slider Value="{Binding Path=MoveIndex, Mode=TwoWay}" Width="130" VerticalAlignment="Top" Minimum="0" Maximum="6" TickFrequency="1" IsSnapToTickEnabled="True" Margin="4,0,0,0" Padding="0"
IsEnabled="{Binding Status.Connected, FallbackValue=False}" />
<Label Height="20" Style="{DynamicResource StateLabel}" HorizontalAlignment="Center" VerticalContentAlignment="Top" HorizontalContentAlignment="Center"
<Label Height="20" Style="{DynamicResource StateLabel}" HorizontalAlignment="Center" VerticalContentAlignment="Top" HorizontalContentAlignment="Center"
Content="{Binding MoveIncrement, Converter={StaticResource MoveValueConverter}, FallbackValue='0 steps/move'}"/>
</StackPanel>
</StackPanel>
<Button Grid.Row="1" Grid.Column="0" Height="50" Width="50" HorizontalAlignment="Right" Style="{StaticResource CircleButton}"
<StackPanel Grid.Row="1" Grid.Column="0" Orientation="Horizontal">
<Button Height="50" Width="50" HorizontalAlignment="Left" Style="{StaticResource CircleButton}"
Command="{Binding MoveFocuserInwardCommand}">
<Button.Content>
<TextBlock TextAlignment="Center" TextWrapping="Wrap">
<Button.Content>
<TextBlock TextAlignment="Center" TextWrapping="Wrap">
Move<LineBreak/>In
</TextBlock>
</Button.Content>
</Button>
<Button Grid.Row="1" Grid.Column="1" Height="50" Width="50" Style="{StaticResource CircleButton}"
</TextBlock>
</Button.Content>
</Button>
<Button Height="50" Width="50" Style="{StaticResource CircleButton}"
ToolTip="Abort Movement"
Command="{Binding HaltFocuserCommand}"
IsEnabled="{Binding FocuserBusy, Converter={StaticResource NegBoolVisConverter}}">
<Button.Content>
<Image Width="36" Height="36" Source="/ASCOM.DeviceHub;component/Images/Stop.ico" />
</Button.Content>
</Button>
<Button Grid.Row="1" Grid.Column="2" Height="50" Width="50" HorizontalAlignment="Left" Style="{StaticResource CircleButton}"
<Button.Content>
<Image Width="36" Height="36" Source="/ASCOM.DeviceHub;component/Images/Stop.ico" />
</Button.Content>
</Button>
<Button Height="50" Width="50" HorizontalAlignment="Left" Style="{StaticResource CircleButton}"
Command="{Binding MoveFocuserOutwardCommand}">
<Button.Content>
<TextBlock TextAlignment="Center" TextWrapping="Wrap">
<Button.Content>
<TextBlock TextAlignment="Center" TextWrapping="Wrap">
Move<LineBreak/>Out
</TextBlock>
</Button.Content>
</Button>
</TextBlock>
</Button.Content>
</Button>
</StackPanel>

<StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,2"
Visibility="{Binding Parameters.Absolute, Converter={StaticResource BoolVisConverter}}">
<Label Content="Move To Position:" Style="{DynamicResource StateLabel}" VerticalAlignment="Center" />
<TextBox Height="20" MinWidth="50" Margin="6,0" VerticalAlignment="Center"
<StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Orientation="Horizontal" >
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0"
Visibility="{Binding Parameters.Absolute, FallbackValue=Visible, Converter={StaticResource BoolVisConverter}}">
<Label Content="Move To Position: " Style="{DynamicResource StateLabel}" VerticalAlignment="Center" />
<TextBox Height="20" MinWidth="50" Margin="6,0" VerticalAlignment="Center"
local:Masking.Mask="^([-\+]?[1-9]\d*|0)$"
IsEnabled="{Binding Path=Status.Connected}"
Text="{Binding TargetPosition, FallbackValue=15700}" />
<Button Content="Go" Height="30" Width="30" Style="{StaticResource CircleButton}"
<Button Content="Go" Height="30" Width="30" Style="{StaticResource CircleButton}"
Command="{Binding MoveFocuserToPositionCommand}" />
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0"
Visibility="{Binding Parameters.Absolute, FallbackValue=Collapsed, Converter={StaticResource NegBoolVisConverter}}">
<Label Content="Movement Amount:" Style="{DynamicResource StateLabel}" VerticalAlignment="Center" />
<TextBox Height="20" MinWidth="50" Margin="6,0" VerticalAlignment="Center"
local:Masking.Mask="^([-\+]?[1-9]\d*|0)$"
IsEnabled="{Binding Path=Status.Connected}"
Text="{Binding TargetAmount, FallbackValue=1000}" />
<Button Content="Go" Height="30" Width="30" Style="{StaticResource CircleButton}"
Command="{Binding MoveFocuserByAmountCommand}" />
</StackPanel>
</StackPanel>
<GroupBox Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" Header="Accumulated Total Steps" Margin="4,0,0,0"
Foreground="{DynamicResource NormalTextBrush}" HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal">
<TextBox Height="22" Width="60" Margin="2,0,2,0"
local:Masking.Mask="^([-\+]?[1-9]\d*|0)$"
IsEnabled="{Binding Path=Status.Connected}"
IsReadOnly="{Binding CanEditAccumulatedSteps, Converter={StaticResource NegBoolValueConverter}}"
Text="{Binding AccumulatedSteps, FallbackValue=0}" />
<Button Height="40" Width="40" Margin="2,2" Style="{StaticResource CircleButton}"
Content="{Binding CanEditAccumulatedSteps, Converter={StaticResource EditLockConverter}, FallbackValue=Edit}"
Command="{Binding ToggleCanEditAccumulatedStepsCommand}"/>
<Button Content="Reset" Height="40" Width="40" Margin="2,0" Style="{StaticResource CircleButton}"
Command="{Binding ResetAccumulatedStepsCommand}"
/>
</StackPanel>
</GroupBox>
</Grid>
</Grid>
</UserControl>
Loading

0 comments on commit fb1fbb4

Please sign in to comment.