Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Thick-Common
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
潘栩锋
Thick-Common
Commits
2c9d6c0f
Commit
2c9d6c0f
authored
Feb 10, 2025
by
潘栩锋
🚴
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复定点图样式
parent
f503cd7b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
129 additions
and
172 deletions
+129
-172
FlyADBase.csproj
Project.FLY.FlyADBase/FlyADBase/FlyADBase.csproj
+1
-1
FixGraph.xaml
...ck.Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraph.xaml
+68
-105
FixGraph.xaml.cs
...Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraph.xaml.cs
+2
-44
FixGraphVm.cs
...ck.Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraphVm.cs
+35
-4
WdPassword.xaml.cs
Project.FLY.Thick.Base/FLY.Thick.Base.UI/WdPassword.xaml.cs
+23
-18
No files found.
Project.FLY.FlyADBase/FlyADBase/FlyADBase.csproj
View file @
2c9d6c0f
...
...
@@ -80,7 +80,7 @@
<Version>
10.1.1
</Version>
</PackageReference>
<PackageReference
Include=
"NLog"
>
<Version>
5.1.0
</Version>
<Version>
4.6.8
</Version>
</PackageReference>
<PackageReference
Include=
"PropertyChanged.Fody"
>
<Version>
4.1.0
</Version>
...
...
Project.FLY.Thick.Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraph.xaml
View file @
2c9d6c0f
...
...
@@ -11,8 +11,7 @@
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/FLY.ControlLibrary;component/Converter/Dictionary_MyConv.xaml"/>
<ResourceDictionary Source="pack://application:,,,/FLY.Thick.Base.UI;component/Themes/Styles.xaml"/>
<ResourceDictionary Source="pack://application:,,,/FLY.ControlLibrary;component/Converter/Converters.xaml"/>
<ResourceDictionary Source="pack://application:,,,/FLY.Thick.Base.UI;component/Themes/GraphStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
<local:FixGraphVmUt x:Key="viewModel" Max="65540" Min="655" Average="123" Sigma3="3.2"/>
...
...
@@ -36,23 +35,23 @@
<lvc:LineSeries
Values="{Binding Values}"
StrokeThickness = "3"
Stroke = "{StaticResource Brushes.Activity}"
Stroke = "{StaticResource Brushes.Accent}"
Fill = "Transparent"
PointGeometry ="{x:Null}"/>
</lvc:CartesianChart.Series>
<lvc:CartesianChart.AxisX>
<lvc:Axis LabelFormatter="{Binding XFormatter}" Fo
ntSize="16" Foreground="Black
"
<lvc:Axis LabelFormatter="{Binding XFormatter}" Fo
reground="{StaticResource Brushes.Text.Black}
"
MaxValue="{Binding XMax}" MinValue="{Binding XMin}">
<lvc:Axis.Separator>
<lvc:Separator Stroke="
LightGray"
/>
<lvc:Separator Stroke="
{StaticResource Brushes.Text.Gray}" StrokeDashArray="3"
/>
</lvc:Axis.Separator>
</lvc:Axis>
</lvc:CartesianChart.AxisX>
<lvc:CartesianChart.AxisY>
<lvc:Axis LabelFormatter="{Binding YFormatter}" MaxValue="{Binding YMax}" MinValue="{Binding YMin}" Panel.ZIndex="0" Foreground="Black">
<lvc:Axis LabelFormatter="{Binding YFormatter}" Foreground="{StaticResource Brushes.Text.Black}"
MaxValue="{Binding YMax}" MinValue="{Binding YMin}" >
<lvc:Axis.Separator>
<lvc:Separator Stroke
Thickness="1" Stroke="LightGray"
/>
<lvc:Separator Stroke
="{StaticResource Brushes.Text.Gray}" StrokeDashArray="3"
/>
</lvc:Axis.Separator>
</lvc:Axis>
</lvc:CartesianChart.AxisY >
...
...
@@ -68,43 +67,51 @@
</TextBlock>
</Grid>
</Button>
<Grid Grid.Column="1" Grid.RowSpan="2" Panel.ZIndex="2" >
<Grid Grid.Column="1" Grid.RowSpan="2" Panel.ZIndex="2"
VerticalAlignment="Top"
>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Left" Margin="{StaticResource ControlMargin}">
<Viewbox MaxHeight="{StaticResource FontSize.Value}" HorizontalAlignment="Left" Margin="2">
<StackPanel Orientation="Horizontal" >
<TextBlock Style="{StaticResource TitleStyle}" Text="AD值" Foreground="{StaticResource Brushes.Highlight}" Visibility="{Binding IsADMode,Converter={StaticResource visbilityconv}}"/>
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Time,StringFormat={}{0:HH:mm:ss}}"/>
</StackPanel>
</Viewbox>
<Viewbox MaxHeight="{StaticResource FontSize.Value}" HorizontalAlignment="Left" Margin="2">
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource SemiTransparentGreyBrush2}">
<TextBlock Style="{StaticResource TitleStyle}" Text="间隔:" />
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Intervalms}"/>
<TextBlock Style="{StaticResource UnitStyle}" Text="ms" />
<Grid
HorizontalAlignment="Left" >
<Viewbox MaxHeight="{StaticResource GraphInfo2RowMaxHeight}" Margin="{StaticResource ControlMargin}">
<StackPanel>
<StackPanel Orientation="Horizontal" >
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}">
<TextBlock Style="{StaticResource TitleStyle}" Text="AD" Foreground="{StaticResource Brushes.Highlight}" Visibility="{Binding IsADMode,Converter={StaticResource visbilityconv}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}">
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Time,StringFormat={}{0:HH:mm:ss}}"/>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource SemiTransparentGreyBrush2}">
<TextBlock Style="{StaticResource TitleStyle}" Text="混合:" />
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Mix}"/>
<StackPanel Orientation="Horizontal">
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource TextTransparentBackgroundBrush}">
<TextBlock Style="{StaticResource TitleStyle}" Text="间隔" />
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Intervalms}"/>
<TextBlock Style="{StaticResource UnitStyle}" Text="ms" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource TextTransparentBackgroundBrush}">
<TextBlock Style="{StaticResource TitleStyle}" Text="混合" />
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Mix}"/>
</StackPanel>
</StackPanel>
</StackPanel>
</Viewbox>
</
StackPanel
>
</
Grid
>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Grid.Column="2" Grid.RowSpan="2">
<Button Click="button_pause_Click" >
<StackPanel Orientation="Horizontal" Grid.Column="1" >
<Button Style="{StaticResource Styles.Button.Icon.Rectangle}" Command="{Binding ClearCmd}">
<iconPacks:PackIconMaterial Kind="Delete"/>
</Button>
<Button Command="{Binding PauseCmd}">
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource Styles.Button.Icon.Rectangle}">
<Setter Property="Background" Value="{StaticResource Brushes.
Activity
}"/>
<Setter Property="Background" Value="{StaticResource Brushes.
Fault
}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsPaused}" Value="True">
<Setter Property="Background" Value="{StaticResource Brushes.
NoAct
}"/>
<Setter Property="Background" Value="{StaticResource Brushes.
Pass
}"/>
</DataTrigger>
</Style.Triggers>
</Style>
...
...
@@ -122,98 +129,54 @@
</iconPacks:PackIconMaterial.Style>
</iconPacks:PackIconMaterial>
</Button>
<Button Click="button_save_Click" IsEnabled="{Binding IsPaused}" >
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource Styles.Button.Icon.Rectangle}">
<Setter Property="Background" Value="{StaticResource Brushes.NoAct}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsPaused}" Value="True">
<Setter Property="Background" Value="{StaticResource Brushes.Activity}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<iconPacks:PackIconMaterial Kind="Floppy" />
<Button Style="{StaticResource Styles.Button.Icon.Rectangle}" IsEnabled="{Binding IsPaused}" Command="{Binding SaveCmd}">
<iconPacks:PackIconMaterial Kind="Floppy"/>
</Button>
<Button Click="button_analyze_Click" IsEnabled="{Binding IsPaused}" >
<Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource Styles.Button.Icon.Rectangle}">
<Setter Property="Background" Value="{StaticResource Brushes.NoAct}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsPaused}" Value="True">
<Setter Property="Background" Value="{StaticResource Brushes.Activity}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
<iconPacks:PackIconMaterial Kind="ChartLine" />
<Button Style="{StaticResource Styles.Button.Icon.Rectangle}" IsEnabled="{Binding IsPaused}" Command="{Binding AnalyzeCmd}">
<iconPacks:PackIconMaterial Kind="ChartLine"/>
</Button>
</StackPanel>
</Grid>
<Grid Grid.Column="2" Grid.RowSpan="2" Panel.ZIndex="1"
Margin="10,0" VerticalAlignment="Top" HorizontalAlignment="Right"
Background="{StaticResource SemiTransparentGreyBrush}" >
<Viewbox MaxHeight="50">
<StackPanel Margin="{StaticResource ControlMargin}">
<StackPanel.Resources>
<Style TargetType="Viewbox">
<Setter Property="Height" Value="25"/>
<Setter Property="Width" Value="120"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Top"/>
</Style>
</StackPanel.Resources>
<StackPanel Orientation="Horizontal">
<Viewbox >
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TitleStyle}"
<Viewbox MaxHeight="{StaticResource GraphInfo2RowMaxHeight}" Margin="{StaticResource ControlMargin}">
<UniformGrid Columns="2">
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource TextBrush}">
<TextBlock Style="{StaticResource TitleStyle}"
Foreground="{StaticResource WhiteBrush}"
Background="{StaticResource TextBrush}"
Opacity="0.8"
Text="平均: "
Text="平均"
/>
<TextBlock Style="{StaticResource ValueStyle}"
<TextBlock Style="{StaticResource ValueStyle}"
Foreground="{StaticResource WhiteBrush}"
Background="{StaticResource TextBrush}"
Text="{Binding Average,StringFormat={}{0:F1}}"
/>
</StackPanel>
</Viewbox>
<Viewbox>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TitleStyle}"
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}"
Background="{StaticResource TextBrush}">
<TextBlock Style="{StaticResource TitleStyle}"
Foreground="{StaticResource WhiteBrush}"
Background="{StaticResource TextBrush}"
Opacity="0.8"
Text="3σ: "
Text="2σ"
/>
<TextBlock Style="{StaticResource ValueStyle}"
<TextBlock Style="{StaticResource ValueStyle}"
Foreground="{StaticResource WhiteBrush}"
Background="{StaticResource TextBrush}"
Text="{Binding Sigma3,StringFormat={}{0:F1}}"
Text="{Binding Sigma2,StringFormat={}{0:F2}}"
/>
</StackPanel>
</Viewbox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Viewbox >
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TitleStyle}" Text="最大: "/>
<TextBlock Style="{StaticResource ValueStyle}" Text="{Binding Max,StringFormat={}{0:F1}}"/>
</StackPanel>
</Viewbox>
<Viewbox >
<StackPanel Orientation="Horizontal" >
<TextBlock Style="{StaticResource TitleStyle}"
Text="最小: " />
<TextBlock Style="{StaticResource ValueStyle}"
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}" >
<TextBlock Style="{StaticResource TitleStyle}"
Text="最大" />
<TextBlock Style="{StaticResource ValueStyle}"
Text="{Binding Max,StringFormat={}{0:F1}}"/>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="{StaticResource TextMargin}" >
<TextBlock Style="{StaticResource TitleStyle}"
Text="最小" />
<TextBlock Style="{StaticResource ValueStyle}"
Text="{Binding Min,StringFormat={}{0:F1}}"/>
</StackPanel>
</Viewbox>
</StackPanel>
</StackPanel>
</UniformGrid>
</Viewbox>
</Grid>
</Grid>
...
...
Project.FLY.Thick.Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraph.xaml.cs
View file @
2c9d6c0f
using
FLY.Thick.Base.Client
;
using
FLY.Thick.Base.Common
;
using
FLY.Thick.Base.IService
;
using
MultiLayout.UiModule
;
using
FObjBase
;
using
LiveCharts
;
using
Misc
;
using
System
;
using
System.Collections.Generic
;
using
System.ComponentModel
;
using
System.IO
;
using
System.Linq
;
using
System.Text
;
using
System.Threading.Tasks
;
using
FLY.Thick.Base.IService
;
using
System.Windows
;
using
System.Windows.Controls
;
using
System.Windows.Data
;
using
System.Windows.Documents
;
using
System.Windows.Input
;
using
System.Windows.Media
;
using
System.Windows.Media.Imaging
;
using
System.Windows.Navigation
;
using
System.Windows.Shapes
;
using
FLY.Thick.Base.UI
;
using
Unity
;
namespace
FLY.Thick.Base.UI.UiModule
...
...
@@ -38,7 +17,7 @@ namespace FLY.Thick.Base.UI.UiModule
InitializeComponent
();
}
[
InjectionMethod
]
public
void
Init
(
int
id
,
IUnityContainer
container
,
public
void
Init
(
int
id
,
IUnityContainer
container
,
IFixService
fixService
,
ITDGageService
gageService
)
{
//查找参数
...
...
@@ -68,27 +47,6 @@ namespace FLY.Thick.Base.UI.UiModule
w
.
ShowDialog
();
viewModel
.
IsPaused
=
isPaused
;
}
private
void
button_pause_Click
(
object
sender
,
RoutedEventArgs
e
)
{
viewModel
.
IsPaused
=
!
viewModel
.
IsPaused
;
}
private
void
button_save_Click
(
object
sender
,
RoutedEventArgs
e
)
{
viewModel
.
PreSave
();
WdSaveDatas
w
=
new
WdSaveDatas
();
w
.
Init
(
viewModel
);
w
.
ShowDialog
();
}
private
void
button_analyze_Click
(
object
sender
,
RoutedEventArgs
e
)
{
viewModel
.
GetDatas
(
out
double
intervalms
,
out
List
<
double
>
datas
);
PgFixAnalyze
p
=
new
PgFixAnalyze
();
p
.
Init
(
intervalms
,
datas
);
MultiLayout
.
FlyLayoutManager
.
NavigationService
.
Navigate
(
p
);
}
}
...
...
Project.FLY.Thick.Base/FLY.Thick.Base.UI/UiModule/FixGraph/FixGraphVm.cs
View file @
2c9d6c0f
...
...
@@ -11,6 +11,7 @@ using System.Text;
using
System.Threading.Tasks
;
using
FLY.Thick.Base.UI
;
using
FLY.Thick.Base.Common
;
using
CommunityToolkit.Mvvm.Input
;
namespace
FLY.Thick.Base.UI.UiModule
{
...
...
@@ -61,9 +62,9 @@ namespace FLY.Thick.Base.UI.UiModule
/// </summary>
public
double
Min
{
get
;
set
;
}
/// <summary>
///
3
sigma
///
2
sigma
/// </summary>
public
double
Sigma
3
{
get
;
set
;
}
public
double
Sigma
2
{
get
;
set
;
}
#
endregion
#
region
状态
...
...
@@ -92,6 +93,12 @@ namespace FLY.Thick.Base.UI.UiModule
/// </summary>
public
bool
IsADMode
{
get
;
private
set
;
}
#
endregion
public
RelayCommand
PauseCmd
{
get
;
private
set
;
}
public
RelayCommand
SaveCmd
{
get
;
private
set
;
}
public
RelayCommand
AnalyzeCmd
{
get
;
private
set
;
}
public
RelayCommand
ClearCmd
{
get
;
private
set
;
}
/// <summary>
/// 真实接收的数据,与 Values 不一样, Values只是mDatas的一部分
/// </summary>
...
...
@@ -119,6 +126,11 @@ namespace FLY.Thick.Base.UI.UiModule
DynArea
dynArea
;
public
FixGraphVm
()
{
PauseCmd
=
new
RelayCommand
(
Pause
);
SaveCmd
=
new
RelayCommand
(
Save
);
AnalyzeCmd
=
new
RelayCommand
(
Analyze
);
ClearCmd
=
new
RelayCommand
(
UpdateIsADMode
);
#
region
与数据无关界面参数
XFormatter
=
(
x
)
=>
{
...
...
@@ -147,7 +159,26 @@ namespace FLY.Thick.Base.UI.UiModule
IsPaused
=
this
.
dynArea
.
ControllerState
!=
CTRL_STATE
.
FIX
;
}
private
void
Analyze
()
{
GetDatas
(
out
double
intervalms
,
out
List
<
double
>
datas
);
var
p
=
new
FLY
.
Thick
.
Base
.
UI
.
UiModule
.
PgFixAnalyze
();
p
.
Init
(
intervalms
,
datas
);
MultiLayout
.
FlyLayoutManager
.
NavigationService
.
Navigate
(
p
);
}
private
void
Save
()
{
PreSave
();
WdSaveDatas
w
=
new
WdSaveDatas
();
w
.
Init
(
this
);
w
.
ShowDialog
();
}
private
void
Pause
()
{
IsPaused
=
!
IsPaused
;
}
private
void
DynArea_PropertyChanged
(
object
sender
,
PropertyChangedEventArgs
e
)
{
if
(
e
.
PropertyName
==
nameof
(
DynArea
.
ControllerState
))
{
...
...
@@ -426,7 +457,7 @@ namespace FLY.Thick.Base.UI.UiModule
Max
=
double
.
NaN
;
Min
=
double
.
NaN
;
Average
=
double
.
NaN
;
Sigma
3
=
double
.
NaN
;
Sigma
2
=
double
.
NaN
;
AutoTarget
=
double
.
NaN
;
return
;
}
...
...
@@ -434,7 +465,7 @@ namespace FLY.Thick.Base.UI.UiModule
Max
=
mDatas
.
Max
();
Min
=
mDatas
.
Min
();
Average
=
mDatas
.
Average
();
Sigma
3
=
mDatas
.
Sigma
()
*
3
;
Sigma
2
=
mDatas
.
Sigma
()
*
2
;
if
(
mDatas
.
Count
>
100
)
{
...
...
Project.FLY.Thick.Base/FLY.Thick.Base.UI/WdPassword.xaml.cs
View file @
2c9d6c0f
...
...
@@ -73,23 +73,23 @@ namespace FLY.Thick.Base.UI
/// <returns></returns>
public
static
bool
Authorize
(
string
uiName
,
out
int
pwLv
,
string
msg
=
null
)
{
pwLv
=
0
;
//从容器获取
var
container
=
Application
.
Current
.
Properties
[
"container"
]
as
IUnityContainer
;
if
(
container
==
null
)
return
true
;
return
Authorize
(
uiName
,
0
,
out
pwLv
,
msg
);
}
var
passwordAuthorize
=
container
.
Resolve
<
PasswordAuthorize
>();
int
level
=
passwordAuthorize
.
GetLv
(
uiName
);
if
(
level
<=
0
)
return
true
;
/// <summary>
///
/// </summary>
/// <param name="level">要求的级别</param>
/// <param name="pwLv">当密码正确时,密码的级别</param>
/// <returns></returns>
public
static
bool
Authorize
(
int
level
,
out
int
pwLv
)
{
return
Authorize
(
null
,
level
,
out
pwLv
);
}
WdPassword
w
=
new
WdPassword
();
w
.
Init
(
passwordAuthorize
,
level
,
msg
);
w
.
Owner
=
Application
.
Current
.
MainWindow
;
bool
ret
=
(
bool
)
w
.
ShowDialog
();
pwLv
=
w
.
PwLv
;
return
ret
;
public
static
bool
Authorize
(
int
level
,
string
msg
)
{
return
Authorize
(
null
,
level
,
out
int
pwLv
,
msg
);
}
/// <summary>
...
...
@@ -98,7 +98,7 @@ namespace FLY.Thick.Base.UI
/// <param name="level">要求的级别</param>
/// <param name="pwLv">当密码正确时,密码的级别</param>
/// <returns></returns>
public
static
bool
Authorize
(
int
level
,
out
int
pwLv
)
public
static
bool
Authorize
(
string
uiName
,
int
level
,
out
int
pwLv
,
string
msg
=
null
)
{
pwLv
=
0
;
//从容器获取
...
...
@@ -107,11 +107,16 @@ namespace FLY.Thick.Base.UI
return
true
;
var
passwordAuthorize
=
container
.
Resolve
<
PasswordAuthorize
>();
if
(!
string
.
IsNullOrEmpty
(
uiName
))
{
level
=
passwordAuthorize
.
GetLv
(
uiName
);
}
if
(
level
<=
0
)
return
true
;
WdPassword
w
=
new
WdPassword
();
w
.
Init
(
passwordAuthorize
,
level
);
w
.
Init
(
passwordAuthorize
,
level
,
msg
);
w
.
Owner
=
Application
.
Current
.
MainWindow
;
bool
ret
=
(
bool
)
w
.
ShowDialog
();
pwLv
=
w
.
PwLv
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment