Welcome to mirror list, hosted at ThFree Co, Russian Federation.

FrmSettings.cs « Forms « UVtools.GUI - github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: dba9b4db8db20b6db8ff288ab0cff599df2d98db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Windows.Forms;
using UVtools.Core.FileFormats;
using UVtools.GUI.Properties;

namespace UVtools.GUI.Forms
{
    public partial class FrmSettings : Form
    {
        public FrmSettings()
        {
            InitializeComponent();

            Text = $"UVtools - Settings [v{FrmAbout.AssemblyVersion}]";

            var fileFormats = new List<string>
            {
                FileFormat.AllSlicerFiles.Replace("*", string.Empty)
            };
            fileFormats.AddRange(from format in FileFormat.AvaliableFormats from extension in format.FileExtensions select $"{extension.Description} (.{extension.Extension})");
            cbDefaultOpenFileExtension.Items.AddRange(fileFormats.ToArray());

            // Derive strings for the zoom lock and crosshair fade combo-boxes from the
            // ZoomLevels constant array, and add those strings to the comboboxes.
            var zoomRange = FrmMain.ZoomLevels.Skip(FrmMain.ZoomLevelSkipCount).Select(
            s => Convert.ToString((double)s / 100, CultureInfo.InvariantCulture) + "x").ToArray();
            cbZoomLockLevel.Items.AddRange(zoomRange);
            cbCrosshairFadeLevel.Items.AddRange(zoomRange);

            Init();
        }

        public void Init()
        {
            try
            {
                // General
                cbCheckForUpdatesOnStartup.Checked = Settings.Default.CheckForUpdatesOnStartup;
                cbStartMaximized.Checked = Settings.Default.StartMaximized;
                cbDefaultOpenFileExtension.SelectedIndex = Settings.Default.DefaultOpenFileExtension;
                tbFileOpenDefaultDirectory.Text = Settings.Default.FileOpenDefaultDirectory;
                tbFileSaveDefaultDirectory.Text = Settings.Default.FileSaveDefaultDirectory;
                tbFileExtractDefaultDirectory.Text = Settings.Default.FileExtractDefaultDirectory;
                tbFileConvertDefaultDirectory.Text = Settings.Default.FileConvertDefaultDirectory;
                cbFileSavePromptOverwrite.Checked = Settings.Default.FileSavePromptOverwrite;
                tbFileSaveNamePreffix.Text = Settings.Default.FileSaveNamePreffix;
                tbFileSaveNameSuffix.Text = Settings.Default.FileSaveNameSuffix;

                // Layer Preview
                btnLayerTooltipOverlayColor.BackColor = Settings.Default.LayerTooltipOverlayColor;
                nmLayerTooltipOverlayOpacity.Value = Settings.Default.LayerTooltipOverlayOpacity;
                cbLayerTooltipOverlay.Checked = Settings.Default.LayerTooltipOverlay;


                btnPreviousNextLayerColor.BackColor = Settings.Default.PreviousNextLayerColor;
                btnPreviousLayerColor.BackColor = Settings.Default.PreviousLayerColor;
                btnNextLayerColor.BackColor = Settings.Default.NextLayerColor;
                btnIslandColor.BackColor = Settings.Default.IslandColor;
                btnIslandHLColor.BackColor = Settings.Default.IslandHLColor;
                btnOverhangColor.BackColor = Settings.Default.OverhangColor;
                btnOverhangHLColor.BackColor = Settings.Default.OverhangHLColor;
                btnResinTrapColor.BackColor = Settings.Default.ResinTrapColor;
                btnResinTrapHLColor.BackColor = Settings.Default.ResinTrapHLColor;
                btnTouchingBoundsColor.BackColor = Settings.Default.TouchingBoundsColor;
                btnCrosshairColor.BackColor = Settings.Default.CrosshairColor;


                btnOutlinePrintVolumeBoundsColor.BackColor = Settings.Default.OutlinePrintVolumeBoundsColor;
                btnOutlineLayerBoundsColor.BackColor = Settings.Default.OutlineLayerBoundsColor;
                btnOutlineHollowAreasColor.BackColor = Settings.Default.OutlineHollowAreasColor;

                nmOutlinePrintVolumeBoundsLineThickness.Value = Settings.Default.OutlinePrintVolumeBoundsLineThickness;
                nmOutlineLayerBoundsLineThickness.Value = Settings.Default.OutlineLayerBoundsLineThickness;
                nmOutlineHollowAreasLineThickness.Value = Settings.Default.OutlineHollowAreasLineThickness;

                cbOutlinePrintVolumeBounds.Checked = Settings.Default.OutlinePrintVolumeBounds;
                cbOutlineLayerBounds.Checked = Settings.Default.OutlineLayerBounds;
                cbOutlineHollowAreas.Checked = Settings.Default.OutlineHollowAreas;

                cbLayerAutoRotateBestView.Checked = Settings.Default.LayerAutoRotateBestView;
                cbLayerZoomToFit.Checked = Settings.Default.LayerZoomToFit;

                cbZoomToFit.SelectedIndex = Settings.Default.ZoomToFitPrintVolumeBounds == true ? 0 : 1;
                cbZoomIssues.Checked = Settings.Default.ZoomIssues;
                cbZoomLockLevel.SelectedIndex = Settings.Default.ZoomLockLevel;
                cbLayerDifferenceDefault.Checked = Settings.Default.LayerDifferenceDefault;
                cbCrosshairShowOnlyOnSelectedIssues.Checked = Settings.Default.CrosshairShowOnlyOnSelectedIssues;
                cbCrosshairFadeLevel.SelectedIndex = Settings.Default.CrosshairFadeLevel;
                nmCrosshairLineLength.Value = Settings.Default.CrosshairLineLength;
                nmCrosshairLineMargin.Value = Settings.Default.CrosshairLineMargin;

                // Issues
                cbComputeIssuesOnLoad.Checked = Settings.Default.ComputeIssuesOnLoad;
                cbAutoComputeIssuesClickOnTab.Checked = Settings.Default.AutoComputeIssuesClickOnTab;
                cbComputeIslands.Checked = Settings.Default.ComputeIslands;
                cbComputeOverhangs.Checked = Settings.Default.ComputeOverhangs;
                cbComputeResinTraps.Checked = Settings.Default.ComputeResinTraps;
                cbComputeTouchingBounds.Checked = Settings.Default.ComputeTouchingBounds;
                cbComputeEmptyLayers.Checked = Settings.Default.ComputeEmptyLayers;

                cbIslandAllowDiagonalBonds.Checked = Settings.Default.IslandAllowDiagonalBonds;
                nmIslandBinaryThreshold.Value = Settings.Default.IslandBinaryThreshold;
                nmIslandRequiredAreaToProcessCheck.Value = Settings.Default.IslandRequiredAreaToProcessCheck;
                nmIslandRequiredPixelBrightnessToProcessCheck.Value = Settings.Default.IslandRequiredPixelBrightnessToProcessCheck;
                nmIslandRequiredPixelsToSupport.Value = Settings.Default.IslandRequiredPixelsToSupport;
                nmIslandRequiredPixelBrightnessToSupport.Value = Settings.Default.IslandRequiredPixelBrightnessToSupport;

                cbOverhangIndependentFromIslands.Checked = Settings.Default.OverhangIndependentFromIslands;
                nmOverhangErodeIterations.Value = Settings.Default.OverhangErodeIterations;

                nmResinTrapBinaryThreshold.Value = Settings.Default.ResinTrapBinaryThreshold;
                nmResinTrapRequiredAreaToProcessCheck.Value = Settings.Default.ResinTrapRequiredAreaToProcessCheck;
                nmResinTrapRequiredBlackPixelsToDrain.Value = Settings.Default.ResinTrapRequiredBlackPixelsToDrain;
                nmResinTrapMaximumPixelBrightnessToDrain.Value = Settings.Default.ResinTrapMaximumPixelBrightnessToDrain;

                // Pixel Editor
                btnPixelEditorAddPixelColor.BackColor = Settings.Default.PixelEditorAddPixelColor;
                btnPixelEditorAddPixelHLColor.BackColor = Settings.Default.PixelEditorAddPixelHLColor;
                btnPixelEditorRemovePixelColor.BackColor = Settings.Default.PixelEditorRemovePixelColor;
                btnPixelEditorRemovePixelHLColor.BackColor = Settings.Default.PixelEditorRemovePixelHLColor;
                btnPixelEditorSupportColor.BackColor = Settings.Default.PixelEditorSupportColor;
                btnPixelEditorSupportHLColor.BackColor = Settings.Default.PixelEditorSupportHLColor;
                btnPixelEditorDrainHoleColor.BackColor = Settings.Default.PixelEditorDrainHoleColor;
                btnPixelEditorDrainHoleHLColor.BackColor = Settings.Default.PixelEditorDrainHoleHLColor;
                cbPartialUpdateIslandsOnEditing.Checked = Settings.Default.PartialUpdateIslandsOnEditing;
                cbCloseEditOnApply.Checked = Settings.Default.CloseEditOnApply;

                // Layer Repair
                nmLayerRepairDefaultClosingIterations.Value = Settings.Default.LayerRepairDefaultClosingIterations;
                nmLayerRepairDefaultOpeningIterations.Value = Settings.Default.LayerRepairDefaultOpeningIterations;
                nmLayerRepairRemoveIslandsBelowEqualPixelsDefault.Value = Settings.Default.LayerRepairRemoveIslandsBelowEqualPixelsDefault;
                cbLayerRepairLayersIslands.Checked = Settings.Default.LayerRepairLayersIslands;
                cbLayerRepairRemoveEmptyLayers.Checked = Settings.Default.LayerRepairRemoveEmptyLayers;
                cbLayerRepairResinTraps.Checked = Settings.Default.LayerRepairResinTraps;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Unable to use current settings, a reset will be performed.\n{ex.Message}",
                    "Unable to use current settings", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Settings.Default.Reset();
                Settings.Default.Save();
                Init();
            }
        }

        private void EventClick(object sender, EventArgs e)
        {
            if (
                ReferenceEquals(sender, btnPreviousNextLayerColor) ||
                ReferenceEquals(sender, btnPreviousLayerColor) ||
                ReferenceEquals(sender, btnNextLayerColor) ||
                ReferenceEquals(sender, btnIslandColor) ||
                ReferenceEquals(sender, btnIslandHLColor) ||
                ReferenceEquals(sender, btnOverhangColor) ||
                ReferenceEquals(sender, btnOverhangHLColor) ||
                ReferenceEquals(sender, btnResinTrapColor) ||
                ReferenceEquals(sender, btnResinTrapHLColor) ||
                ReferenceEquals(sender, btnTouchingBoundsColor) ||
                ReferenceEquals(sender, btnCrosshairColor) ||
                ReferenceEquals(sender, btnLayerTooltipOverlayColor) ||
                ReferenceEquals(sender, btnOutlinePrintVolumeBoundsColor) ||
                ReferenceEquals(sender, btnOutlineLayerBoundsColor) ||
                ReferenceEquals(sender, btnOutlineHollowAreasColor) ||
                ReferenceEquals(sender, btnPixelEditorAddPixelColor) ||
                ReferenceEquals(sender, btnPixelEditorAddPixelHLColor) ||
                ReferenceEquals(sender, btnPixelEditorRemovePixelColor) ||
                ReferenceEquals(sender, btnPixelEditorRemovePixelHLColor) ||
                ReferenceEquals(sender, btnPixelEditorSupportColor) ||
                ReferenceEquals(sender, btnPixelEditorDrainHoleColor) ||
                ReferenceEquals(sender, btnPixelEditorSupportHLColor) ||
                ReferenceEquals(sender, btnPixelEditorDrainHoleHLColor)
                )
            {
                Button btn = sender as Button;
                colorDialog.Color = btn.BackColor;
                if (colorDialog.ShowDialog() != DialogResult.OK) return;
                
                btn.BackColor = colorDialog.Color;

                return;

            }

            if (ReferenceEquals(sender, btnFileOpenDefaultDirectorySearch) || ReferenceEquals(sender, btnFileSaveDefaultDirectorySearch) || ReferenceEquals(sender, btnFileConvertDefaultDirectorySearch) || ReferenceEquals(sender, btnFileExtractDefaultDirectorySearch))
            {
                using (FolderBrowserDialog folder = new FolderBrowserDialog())
                {
                    if (folder.ShowDialog() != DialogResult.OK) return;
                    if (ReferenceEquals(sender, btnFileOpenDefaultDirectorySearch)) tbFileOpenDefaultDirectory.Text = folder.SelectedPath;
                    else if (ReferenceEquals(sender, btnFileSaveDefaultDirectorySearch)) tbFileSaveDefaultDirectory.Text = folder.SelectedPath;
                    else if (ReferenceEquals(sender, btnFileExtractDefaultDirectorySearch)) tbFileExtractDefaultDirectory.Text = folder.SelectedPath;
                    else if (ReferenceEquals(sender, btnFileConvertDefaultDirectorySearch)) tbFileConvertDefaultDirectory.Text = folder.SelectedPath;
                }

                return;
            }

            if (ReferenceEquals(sender, btnFileOpenDefaultDirectoryClear))
            {
                tbFileOpenDefaultDirectory.Text = string.Empty;
                return;
            }
            if (ReferenceEquals(sender, btnFileSaveDefaultDirectoryClear))
            {
                tbFileSaveDefaultDirectory.Text = string.Empty;
                return;
            }
            if (ReferenceEquals(sender, btnFileExtractDefaultDirectoryClear))
            {
                tbFileExtractDefaultDirectory.Text = string.Empty;
                return;
            }
            if (ReferenceEquals(sender, btnFileConvertDefaultDirectoryClear))
            {
                tbFileConvertDefaultDirectory.Text = string.Empty;
                return;
            }

            if (ReferenceEquals(sender, btnReset))
            {
                if (MessageBox.Show("Are you sure you want to reset the settings to the default values?",
                        "Reset settings?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) !=
                    DialogResult.Yes) return;

                Settings.Default.Reset();
                Settings.Default.UpgradeSettings = false;
                Init();

                return;
            }
            
            if (ReferenceEquals(sender, btnSave))
            {
                // General
                Settings.Default.CheckForUpdatesOnStartup = cbCheckForUpdatesOnStartup.Checked;
                Settings.Default.StartMaximized = cbStartMaximized.Checked;
                Settings.Default.DefaultOpenFileExtension = (byte) cbDefaultOpenFileExtension.SelectedIndex;
                Settings.Default.FileOpenDefaultDirectory = tbFileOpenDefaultDirectory.Text;
                Settings.Default.FileSaveDefaultDirectory = tbFileSaveDefaultDirectory.Text;
                Settings.Default.FileExtractDefaultDirectory = tbFileExtractDefaultDirectory.Text;
                Settings.Default.FileConvertDefaultDirectory = tbFileConvertDefaultDirectory.Text;
                Settings.Default.FileSavePromptOverwrite = cbFileSavePromptOverwrite.Checked;
                Settings.Default.FileSaveNamePreffix = tbFileSaveNamePreffix.Text.Trim();
                Settings.Default.FileSaveNameSuffix = tbFileSaveNameSuffix.Text.Trim();

                // Layer Preview
                Program.FrmMain.lbLayerImageTooltipOverlay.TransparentBackColor = Settings.Default.LayerTooltipOverlayColor = btnLayerTooltipOverlayColor.BackColor;
                Program.FrmMain.lbLayerImageTooltipOverlay.Opacity = Settings.Default.LayerTooltipOverlayOpacity = (byte) nmLayerTooltipOverlayOpacity.Value;
                Settings.Default.LayerTooltipOverlay = cbLayerTooltipOverlay.Checked;

                Settings.Default.PreviousNextLayerColor = btnPreviousNextLayerColor.BackColor;
                Settings.Default.PreviousLayerColor = btnPreviousLayerColor.BackColor;
                Settings.Default.NextLayerColor = btnNextLayerColor.BackColor;
                Settings.Default.IslandColor = btnIslandColor.BackColor;
                Settings.Default.IslandHLColor = btnIslandHLColor.BackColor;
                Settings.Default.OverhangColor =   btnOverhangColor.BackColor;
                Settings.Default.OverhangHLColor = btnOverhangHLColor.BackColor;
                Settings.Default.ResinTrapColor = btnResinTrapColor.BackColor;
                Settings.Default.ResinTrapHLColor = btnResinTrapHLColor.BackColor;
                Settings.Default.TouchingBoundsColor = btnTouchingBoundsColor.BackColor;
                Settings.Default.CrosshairColor = btnCrosshairColor.BackColor;

                Settings.Default.OutlinePrintVolumeBoundsColor = btnOutlinePrintVolumeBoundsColor.BackColor;
                Settings.Default.OutlineLayerBoundsColor = btnOutlineLayerBoundsColor.BackColor;
                Settings.Default.OutlineHollowAreasColor = btnOutlineHollowAreasColor.BackColor;

                Settings.Default.OutlinePrintVolumeBoundsLineThickness = (byte) nmOutlinePrintVolumeBoundsLineThickness.Value;
                Settings.Default.OutlineLayerBoundsLineThickness = (byte) nmOutlineLayerBoundsLineThickness.Value;
                Settings.Default.OutlineHollowAreasLineThickness = (sbyte) nmOutlineHollowAreasLineThickness.Value;

                Settings.Default.OutlinePrintVolumeBounds = cbOutlinePrintVolumeBounds.Checked;
                Settings.Default.OutlineLayerBounds = cbOutlineLayerBounds.Checked;
                Settings.Default.OutlineHollowAreas = cbOutlineHollowAreas.Checked;

                Settings.Default.LayerAutoRotateBestView = cbLayerAutoRotateBestView.Checked;
                Settings.Default.LayerZoomToFit = cbLayerZoomToFit.Checked;
                Settings.Default.ZoomToFitPrintVolumeBounds = cbZoomToFit.SelectedIndex == 0;
                Settings.Default.ZoomIssues = cbZoomIssues.Checked;
                Settings.Default.ZoomLockLevel = (byte)cbZoomLockLevel.SelectedIndex;
                Settings.Default.LayerDifferenceDefault = cbLayerDifferenceDefault.Checked;
                Settings.Default.CrosshairShowOnlyOnSelectedIssues = cbCrosshairShowOnlyOnSelectedIssues.Checked;
                Settings.Default.CrosshairFadeLevel = (byte)cbCrosshairFadeLevel.SelectedIndex;
                Settings.Default.CrosshairLineLength = (uint)nmCrosshairLineLength.Value;
                Settings.Default.CrosshairLineMargin = (byte)nmCrosshairLineMargin.Value;

                // Issues
                Settings.Default.ComputeIssuesOnLoad = cbComputeIssuesOnLoad.Checked;
                Settings.Default.AutoComputeIssuesClickOnTab = cbAutoComputeIssuesClickOnTab.Checked;
                Settings.Default.ComputeIslands = cbComputeIslands.Checked;
                Settings.Default.ComputeOverhangs = cbComputeOverhangs.Checked;
                Settings.Default.ComputeResinTraps = cbComputeResinTraps.Checked;
                Settings.Default.ComputeTouchingBounds = cbComputeTouchingBounds.Checked;
                Settings.Default.ComputeEmptyLayers = cbComputeEmptyLayers.Checked;

                Settings.Default.IslandAllowDiagonalBonds = cbIslandAllowDiagonalBonds.Checked;
                Settings.Default.IslandBinaryThreshold = (byte)nmIslandBinaryThreshold.Value;
                Settings.Default.IslandRequiredAreaToProcessCheck = (byte) nmIslandRequiredAreaToProcessCheck.Value;
                Settings.Default.IslandRequiredPixelBrightnessToProcessCheck = (byte)nmIslandRequiredPixelBrightnessToProcessCheck.Value;
                Settings.Default.IslandRequiredPixelsToSupport = (byte)nmIslandRequiredPixelsToSupport.Value;
                Settings.Default.IslandRequiredPixelBrightnessToSupport = (byte)nmIslandRequiredPixelBrightnessToSupport.Value;

                Settings.Default.OverhangIndependentFromIslands = cbOverhangIndependentFromIslands.Checked;
                Settings.Default.OverhangErodeIterations = (byte)nmOverhangErodeIterations.Value;

                Settings.Default.ResinTrapBinaryThreshold = (byte) nmResinTrapBinaryThreshold.Value;
                Settings.Default.ResinTrapRequiredAreaToProcessCheck = (byte)nmResinTrapRequiredAreaToProcessCheck.Value;
                Settings.Default.ResinTrapRequiredBlackPixelsToDrain = (byte)nmResinTrapRequiredBlackPixelsToDrain.Value;
                Settings.Default.ResinTrapMaximumPixelBrightnessToDrain = (byte)nmResinTrapMaximumPixelBrightnessToDrain.Value;

                // Pixel Editor
                Settings.Default.PixelEditorAddPixelColor = btnPixelEditorAddPixelColor.BackColor;
                Settings.Default.PixelEditorAddPixelHLColor = btnPixelEditorAddPixelHLColor.BackColor;
                Settings.Default.PixelEditorRemovePixelColor = btnPixelEditorRemovePixelColor.BackColor;
                Settings.Default.PixelEditorRemovePixelHLColor = btnPixelEditorRemovePixelHLColor.BackColor;
                Settings.Default.PixelEditorSupportColor = btnPixelEditorSupportColor.BackColor;
                Settings.Default.PixelEditorDrainHoleColor = btnPixelEditorDrainHoleColor.BackColor;
                Settings.Default.PixelEditorSupportHLColor = btnPixelEditorSupportHLColor.BackColor;
                Settings.Default.PixelEditorDrainHoleHLColor = btnPixelEditorDrainHoleHLColor.BackColor;
                Settings.Default.PartialUpdateIslandsOnEditing = cbPartialUpdateIslandsOnEditing.Checked;
                Settings.Default.CloseEditOnApply = cbCloseEditOnApply.Checked;

                // Layer Repair
                Settings.Default.LayerRepairDefaultClosingIterations = (byte) nmLayerRepairDefaultClosingIterations.Value;
                Settings.Default.LayerRepairDefaultOpeningIterations = (byte) nmLayerRepairDefaultOpeningIterations.Value;
                Settings.Default.LayerRepairRemoveIslandsBelowEqualPixelsDefault = (byte) nmLayerRepairRemoveIslandsBelowEqualPixelsDefault.Value;
                Settings.Default.LayerRepairLayersIslands = cbLayerRepairLayersIslands.Checked;
                Settings.Default.LayerRepairRemoveEmptyLayers = cbLayerRepairRemoveEmptyLayers.Checked;
                Settings.Default.LayerRepairResinTraps = cbLayerRepairResinTraps.Checked;

                Settings.Default.Save();
                DialogResult = DialogResult.OK;
                return;
            }
        }
    }
}