Skip to content

Commit 4a15809

Browse files
committed
fix SimpleThresholderWindowViewModel (analogically like a few commits ago in ThresholderWindowViewModel), develop settings, bring back old language settings in App.xaml.cs
1 parent 6678703 commit 4a15809

11 files changed

Lines changed: 188 additions & 61 deletions

JSharp/App.config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
<setting name="LanguageVersion" serializeAs="String">
1111
<value />
1212
</setting>
13+
<setting name="saveFileExtension" serializeAs="String">
14+
<value>.bmp</value>
15+
</setting>
16+
<setting name="jpqSaveQuality" serializeAs="String">
17+
<value>90</value>
18+
</setting>
1319
</JSharp.Properties.Settings>
1420
</userSettings>
1521
</configuration>

JSharp/App.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected override void OnStartup(StartupEventArgs e)
2121
#if DEBUG
2222
CultureInfo culture = CultureInfo.InvariantCulture; // Force invariant culture for debugging
2323
#else
24-
CultureInfo culture = CultureInfo.CreateSpecificCulture("pl-PL"); // Use the current culture in release mode
24+
CultureInfo culture = CultureInfo.CurrentCulture; // Use the current culture in release mode
2525
#endif
2626
// Set default culture for the application - seems unnecessary
2727
CultureInfo.DefaultThreadCurrentCulture = culture;

JSharp/MainWindow.xaml

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,34 +22,39 @@
2222
<RowDefinition Height="Auto"/>
2323
</Grid.RowDefinitions>
2424
<Menu Width="Auto" Height="20" VerticalAlignment="Top" Grid.Row="0">
25-
<MenuItem Header="Lab1">
25+
<MenuItem Header="File">
2626
<MenuItem x:Name="Open" Header="{x:Static resx:Strings.Open}">
2727
<MenuItem x:Name="OpenGray" Header="{x:Static resx:Strings.OpenGray}" Command="{Binding OpenGray_ClickCommand}"/>
2828
<MenuItem x:Name="OpenRGB" Header="{x:Static resx:Strings.OpenRGB}" Command="{Binding OpenRgb_ClickCommand}"/>
2929
</MenuItem>
30-
<MenuItem x:Name="Duplicate" Header="{x:Static resx:Strings.Duplicate}" Command="{Binding Duplicate_CommandClick}"/>
3130
<MenuItem x:Name="Save" Header="{x:Static resx:Strings.Save}" Command="{Binding Save_ClickCommand}"/>
3231
<MenuItem x:Name="SaveAs" Header="{x:Static resx:Strings.SaveAs}" Command="{Binding SaveAs_ClickCommand}"/>
3332
<MenuItem x:Name="SaveAll" Header="{x:Static resx:Strings.SaveAll}" Command="{Binding SaveAll_ClickCommand}"/>
3433
<Separator/>
34+
<MenuItem x:Name="Exit" Header="{x:Static resx:Strings.Exit}" Command="{Binding Exit_ClickCommand}"/>
35+
</MenuItem>
36+
<MenuItem Header="Image">
37+
<MenuItem x:Name="Duplicate" Header="{x:Static resx:Strings.Duplicate}" Command="{Binding Duplicate_CommandClick}"/>
3538
<MenuItem x:Name="Convert" Header="{x:Static resx:Strings.Convert}">
3639
<MenuItem x:Name="Grayize" Header="{x:Static resx:Strings.Grayize}" Command="{Binding Grayize_ClickCommand}"/>
3740
<MenuItem x:Name="ConvertRgbToHsv" Header="{x:Static resx:Strings.RgbToHsv}" Command="{Binding ConvertRgbToHsv_ClickCommand}"/>
3841
<MenuItem x:Name="ConvertRgbToLab" Header="{x:Static resx:Strings.RgbToLab}" Command="{Binding ConvertRgbToLab_ClickCommand}"/>
3942
</MenuItem>
4043
<Separator/>
41-
<MenuItem x:Name="Negate" Header="{x:Static resx:Strings.Negate}" Command="{Binding Negate_ClickCommand}"/>
42-
<Separator/>
43-
<MenuItem x:Name="ShowHistogram" Header="{x:Static resx:Strings.ShowHistogram}" Command="{Binding ShowHistogram_ClickCommand}"/>
44-
<MenuItem x:Name="StretchHistogram" Header="{x:Static resx:Strings.StretchHistogram}" Command="{Binding StretchHistogram_ClickCommand}"/>
45-
<MenuItem x:Name="StretchContrast" Header="{x:Static resx:Strings.StretchContrast}" Command="{Binding StretchContrast_ClickCommand}"/>
46-
<MenuItem x:Name="EqualizeHistogram" Header="{x:Static resx:Strings.EqualizeHistogram}" Command="{Binding EqualizeHistogram_ClickCommand}" />
44+
<MenuItem Header="Histogram">
45+
<MenuItem x:Name="ShowHistogram" Header="{x:Static resx:Strings.ShowHistogram}" Command="{Binding ShowHistogram_ClickCommand}"/>
46+
<MenuItem x:Name="StretchHistogram" Header="{x:Static resx:Strings.StretchHistogram}" Command="{Binding StretchHistogram_ClickCommand}"/>
47+
<MenuItem x:Name="StretchContrast" Header="{x:Static resx:Strings.StretchContrast}" Command="{Binding StretchContrast_ClickCommand}"/>
48+
<MenuItem x:Name="EqualizeHistogram" Header="{x:Static resx:Strings.EqualizeHistogram}" Command="{Binding EqualizeHistogram_ClickCommand}" />
49+
</MenuItem>
4750
<Separator/>
4851
<MenuItem x:Name="SplitChannels" Header="{x:Static resx:Strings.SplitChannels}" Command="{Binding SplitChannels_ClickCommand}"/>
4952
<Separator/>
50-
<MenuItem x:Name="Exit" Header="{x:Static resx:Strings.Exit}" Command="{Binding Exit_ClickCommand}"/>
53+
<MenuItem Header="{x:Static resx:Strings.PyramidUp}" Command="{Binding PyramidUp_ClickCommand}"/>
54+
<MenuItem Header="{x:Static resx:Strings.PyramidDown}" Command="{Binding PyramidDown_ClickCommand}"/>
5155
</MenuItem>
52-
<MenuItem Header="Lab2">
56+
<MenuItem Header="Basic operations">
57+
<MenuItem x:Name="Negate" Header="{x:Static resx:Strings.Negate}" Command="{Binding Negate_ClickCommand}"/>
5358
<MenuItem Header="{x:Static resx:Strings.Posterize}" Command="{Binding Posterize_ClickCommand}"/>
5459
<MenuItem Header="{x:Static resx:Strings.Filters}">
5560
<MenuItem Header="{x:Static resx:Strings.Convolve}" Command="{Binding Convolve_ClickCommand}"/>
@@ -58,7 +63,7 @@
5863
</MenuItem>
5964
<MenuItem Header="{x:Static resx:Strings.ImageCalculator}" Command="{Binding ImageCalculator_ClickCommand}"/>
6065
</MenuItem>
61-
<MenuItem Header="Lab3">
66+
<MenuItem Header="Process">
6267
<MenuItem Header="{x:Static resx:Strings.MorphologicalOperations}">
6368
<MenuItem Header="{x:Static resx:Strings.Erode}" Command="{Binding Erode_ClickCommand}"/>
6469
<MenuItem Header="{x:Static resx:Strings.Dilate}" Command="{Binding Dilate_ClickCommand}"/>
@@ -69,29 +74,27 @@
6974
<MenuItem Header="{x:Static resx:Strings.EdgeDetection_Hough}" Command="{Binding Hough_ClickCommand}"/>
7075
<Separator/>
7176
<MenuItem Header="{x:Static resx:Strings.PlotProfile}" Command="{Binding PlotProfile_ClickCommand}"/>
72-
<Separator/>
73-
<MenuItem Header="{x:Static resx:Strings.PyramidUp}" Command="{Binding PyramidUp_ClickCommand}"/>
74-
<MenuItem Header="{x:Static resx:Strings.PyramidDown}" Command="{Binding PyramidDown_ClickCommand}"/>
7577
</MenuItem>
76-
<MenuItem Header="Lab4">
78+
<MenuItem Header="Advanced operations">
7779
<MenuItem Header="{x:Static resx:Strings.Thresholding}" Command="{Binding SimpleThreshold_ClickCommand}"/>
80+
<MenuItem Header="{x:Static resx:Project.Thresholding}" Command="{Binding Threshold_ClickCommand}"/>
7881
<!--<MenuItem Header="{x:Static resx:Strings.Watershed}" Command="{Binding Watershed_ClickCommand}"/>-->
7982
<MenuItem Header="{x:Static resx:Strings.Inpaint}" Command="{Binding Inpaint_ClickCommand}"/>
8083
<!--<MenuItem Header="{x:Static resx:Strings.GrabCut}" Command="{Binding GrabCut_ClickCommand}"/>-->
8184
<!--<MenuItem Header="Analyze" Command="{Binding DetailedAnalyze_ClickCommand}"/>-->
8285
</MenuItem>
8386
<!--<MenuItem Header="{x:Static resx:Strings.Settings}"/>-->
84-
<MenuItem x:Name="Help" Header="{x:Static resx:Strings.Help}">
85-
<MenuItem x:Name="About" Header="{x:Static resx:Strings.About}" Click="About_Click"/>
86-
</MenuItem>
87-
<MenuItem Header="{x:Static resx:Project.ProjectStr}">
88-
<MenuItem Header="{x:Static resx:Project.Thresholding}" Command="{Binding Threshold_ClickCommand}"/>
87+
<MenuItem Header="Analyze">
8988
<MenuItem Header="{x:Static resx:Project.SimpleAnalyze}" Command="{Binding SimpleAnalyze_ClickCommand}"/>
9089
<MenuItem Header="{x:Static resx:Project.Analyze}" Command="{Binding Analyze_ClickCommand}"/>
9190
</MenuItem>
91+
<MenuItem Header="Settings" Command="{Binding OpenSettings_ClickCommand}"/>
92+
<MenuItem x:Name="Help" Header="{x:Static resx:Strings.Help}">
93+
<MenuItem x:Name="About" Header="{x:Static resx:Strings.About}" Click="About_Click"/>
94+
</MenuItem>
9295
</Menu>
93-
<Label x:Name="LblFocusedImage" Content="{Binding LblFocusedImageContent, TargetNullValue=null}" HorizontalAlignment="Center" Margin="100,-3,0,0" VerticalAlignment="Top" Height="31" Width="Auto"/>
94-
<ToolBar HorizontalAlignment="Left" Height="36" Margin="-3,0,0,0" VerticalAlignment="Top" Width="300" Grid.Row="1" ToolBarTray.IsLocked="True">
96+
<Label x:Name="LblFocusedImage" Content="{Binding LblFocusedImageContent, TargetNullValue=null}" Grid.Row="1" HorizontalAlignment="Left" Margin="0,-3,0,0" VerticalAlignment="Top" Height="31" Width="Auto"/>
97+
<ToolBar HorizontalAlignment="Left" Height="36" VerticalAlignment="Top" Width="300" Grid.Row="2" ToolBarTray.IsLocked="True">
9598
<RadioButton x:Name="RadioBtnNone" GroupName="ToolGroup" Checked="RadioButton_Checked" Unchecked="RadioButton_Unchecked">
9699
<RadioButton.Background>
97100
<ImageBrush ImageSource="/Resources/NoneIcon.ico"/>

JSharp/Properties/Settings.Designer.cs

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

JSharp/Properties/Settings.settings

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,11 @@
55
<Setting Name="LanguageVersion" Type="System.String" Scope="User">
66
<Value Profile="(Default)" />
77
</Setting>
8+
<Setting Name="saveFileExtension" Type="System.String" Scope="User">
9+
<Value Profile="(Default)">.bmp</Value>
10+
</Setting>
11+
<Setting Name="jpqSaveQuality" Type="System.Byte" Scope="User">
12+
<Value Profile="(Default)">90</Value>
13+
</Setting>
814
</Settings>
915
</SettingsFile>

JSharp/SettingsWindow.xaml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<Window x:Class="JSharp.SettingsWindow"
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6+
xmlns:local="clr-namespace:JSharp"
7+
xmlns:properties="clr-namespace:JSharp.Properties"
8+
xmlns:viewModels="clr-namespace:JSharp.ViewModels"
9+
mc:Ignorable="d"
10+
Title="SettingsWindow" Height="450" Width="800">
11+
<Window.Resources>
12+
<ObjectDataProvider x:Key="FileExtensionTypesProvider"
13+
ObjectType="{x:Type viewModels:SettingsWindowViewModel}"
14+
MethodName="GetFileExtensionTypes"/>
15+
</Window.Resources>
16+
<Grid Background="#F7F9FA">
17+
<Grid.ColumnDefinitions>
18+
<ColumnDefinition Width="*"/>
19+
<ColumnDefinition Width="*"/>
20+
</Grid.ColumnDefinitions>
21+
22+
23+
<Label Content="Language :" Grid.Column="0" HorizontalAlignment="Right" HorizontalContentAlignment="Right" VerticalAlignment="Center" Margin="0,-168,5,0" FontSize="18" FontFamily="Segoe UI Semibold" Foreground="#FF5E6366"/>
24+
<Label Content="Theme :" Grid.Column="0" HorizontalAlignment="Right" HorizontalContentAlignment="Right" VerticalAlignment="Center" Margin="0,-68,5,0" FontSize="18" FontFamily="Segoe UI Semibold" Foreground="#FF5E6366"/>
25+
<Label Content="JPG Quality :" Grid.Column="0" HorizontalAlignment="Right" HorizontalContentAlignment="Right" VerticalAlignment="Center" Margin="0,32,5,0" FontSize="18" FontFamily="Segoe UI Semibold" Foreground="#FF5E6366"/>
26+
<Label Content="Default File Saving Extension :" Grid.Column="0" HorizontalAlignment="Right" HorizontalContentAlignment="Right" VerticalAlignment="Center" Margin="0,132,5,0" FontSize="18" FontFamily="Segoe UI Semibold" Foreground="#FF5E6366"/>
27+
28+
29+
<ComboBox Name="LanguageCombobox" Padding="10,8" Grid.Column="1" HorizontalAlignment="Left" HorizontalContentAlignment="Left" VerticalAlignment="Center" Width="200" Margin="5,-168,5,0" FontSize="16" FontFamily="Segoe UI Semibold"/>
30+
<ComboBox Name="ThemesCombobox" Padding="10,8" Grid.Column="1" HorizontalAlignment="Left" HorizontalContentAlignment="Left" VerticalAlignment="Center" Width="200" Margin="5,-68,5,0" FontSize="16" FontFamily="Segoe UI Semibold"/>
31+
<TextBox Text="{Binding Source={x:Static properties:Settings.Default}, Path=jpqSaveQuality, Mode=OneTime}" Grid.Column="1" Padding="10,8" HorizontalAlignment="Left" HorizontalContentAlignment="Left" VerticalAlignment="Center" Width="200" Margin="5,32,5,0" FontSize="16" FontFamily="Segoe UI Semibold"/>
32+
<ComboBox ItemsSource="{Binding Source={StaticResource FileExtensionTypesProvider}}" SelectedValue="{Binding Source={x:Static properties:Settings.Default}, Path=saveFileExtension, Mode=OneTime}" Grid.Column="1" Padding="10,8" HorizontalAlignment="Left" HorizontalContentAlignment="Left" VerticalAlignment="Center" Width="200" Margin="5,132,5,0" FontSize="16" FontFamily="Segoe UI Semibold"/>
33+
34+
35+
<Button FontSize="20" Grid.ColumnSpan="2" Content="Save" HorizontalAlignment="Center" Margin="0,0,0,25" VerticalAlignment="Bottom" Height="30" Width="50" Click="Button_Click" />
36+
</Grid>
37+
</Window>

JSharp/SettingsWindow.xaml.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
using System.Windows;
7+
using System.Windows.Controls;
8+
using System.Windows.Data;
9+
using System.Windows.Documents;
10+
using System.Windows.Input;
11+
using System.Windows.Media;
12+
using System.Windows.Media.Imaging;
13+
using System.Windows.Shapes;
14+
15+
namespace JSharp
16+
{
17+
/// <summary>
18+
/// Interaction logic for SettingsWindow.xaml
19+
/// </summary>
20+
public partial class SettingsWindow : Window
21+
{
22+
public SettingsWindow()
23+
{
24+
InitializeComponent();
25+
}
26+
27+
private void Button_Click(object sender, RoutedEventArgs e)
28+
{
29+
30+
}
31+
}
32+
}

JSharp/ViewModels/MainWindowViewModel.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public System.Windows.Controls.RadioButton SelectedButton
101101
public DelegateCommand Inpaint_ClickCommand { get; }
102102
public DelegateCommand GrabCut_ClickCommand { get; }
103103
public DelegateCommand DetailedAnalyze_ClickCommand { get; }
104+
public DelegateCommand OpenSettings_ClickCommand { get; }
104105
#endregion
105106

106107
public MainWindowViewModel()
@@ -144,6 +145,7 @@ public MainWindowViewModel()
144145
Inpaint_ClickCommand = new DelegateCommand(Inpaint_Click);
145146
GrabCut_ClickCommand = new DelegateCommand(GrabCut_Click);
146147
DetailedAnalyze_ClickCommand = new DelegateCommand(DetailedAnalyze_Click);
148+
OpenSettings_ClickCommand = new DelegateCommand(OpenSettings_Click);
147149
#endregion
148150
}
149151

@@ -265,7 +267,7 @@ private void Duplicate_Click()
265267
{
266268
OpenFileDialog openFileDialog = new OpenFileDialog();
267269
openFileDialog.Multiselect = true;
268-
openFileDialog.DefaultExt = ".bmp";
270+
openFileDialog.DefaultExt = Properties.Settings.Default.saveFileExtension;
269271
openFileDialog.Filter = Constants.ImageFilterString;
270272

271273
List<Mat> images = new List<Mat>();
@@ -1060,7 +1062,7 @@ private void SimpleThreshold_Click()
10601062
}
10611063

10621064
Mat image = FocusedImage.MatImage.Clone();
1063-
SimpleThresholderWindowViewModel thresholderWindowViewModel = new SimpleThresholderWindowViewModel(image);
1065+
SimpleThresholderWindowViewModel thresholderWindowViewModel = new SimpleThresholderWindowViewModel(image, FocusedImage);
10641066
SimpleThresholderWindow thresholderWindow = new SimpleThresholderWindow();
10651067
thresholderWindow.DataContext = thresholderWindowViewModel;
10661068

@@ -1135,6 +1137,17 @@ private void GrabCut_Click()
11351137
FocusedImage.UpdateImageSource(image);
11361138
}
11371139

1140+
public void OpenSettings_Click()
1141+
{
1142+
SettingsWindow settingsWindow = new SettingsWindow();
1143+
settingsWindow.ShowDialog();
1144+
1145+
if (settingsWindow.DialogResult == true)
1146+
{
1147+
1148+
}
1149+
}
1150+
11381151
private void DetailedAnalyze_Click()
11391152
{
11401153
if (FocusedImage == null)

JSharp/ViewModels/NewImageWindowViewModel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public void SaveAs()
233233
case ".jpg":
234234
case ".jpeg":
235235
// For JPEG format, save the MatImage with JPEG compression quality
236-
CvInvoke.Imwrite(fileName, this.MatImage, new[] { new KeyValuePair<ImwriteFlags, int>(ImwriteFlags.JpegQuality, 90) });
236+
CvInvoke.Imwrite(fileName, this.MatImage, new[] { new KeyValuePair<ImwriteFlags, int>(ImwriteFlags.JpegQuality, Properties.Settings.Default.jpqSaveQuality) });
237237
break;
238238
case ".png":
239239
// For PNG format, save the MatImage with PNG compression level
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using JSharp.Utility;
2+
using Prism.Mvvm;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace JSharp.ViewModels
10+
{
11+
public class SettingsWindowViewModel : BindableBase
12+
{
13+
public SettingsWindowViewModel() { }
14+
15+
public IEnumerable<string> GetFileExtensionTypes()
16+
{
17+
IEnumerable<string> types = new List<string>() { ".bmp", ".jpg", ".jpeg", ".tiff", ".png" };
18+
return types;
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)