Skip to content

Commit ce8a5a1

Browse files
committed
ApplicationProfileAssignemnt
Created new assignment feature
1 parent b900fb4 commit ce8a5a1

13 files changed

+212
-41
lines changed

Source/Debug_Any/AutoHDR.exe

3.5 KB
Binary file not shown.
0 Bytes
Binary file not shown.

Source/HDRProfile/App.xaml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,12 @@
211211

212212

213213
<Style x:Key="DefaultCheckBox" TargetType="{x:Type CheckBox}">
214+
<Style.Triggers>
215+
<Trigger Property="IsEnabled" Value="False">
216+
<Setter Property="BorderBrush" Value="{StaticResource DisabledAccentBrush}"></Setter>
217+
</Trigger>
218+
</Style.Triggers>
219+
214220
<Setter Property="SnapsToDevicePixels"
215221
Value="true" />
216222
<Setter Property="OverridesDefaultStyle"
@@ -234,7 +240,7 @@
234240
<SolidColorBrush Color="{DynamicResource GlyphColor}" />
235241
</Path.Stroke>
236242
</Path>
237-
243+
238244
</Grid>
239245
</Border>
240246
</BulletDecorator.Bullet>
@@ -255,10 +261,17 @@
255261
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)">
256262
<EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlPressedColor}" />
257263
</ColorAnimationUsingKeyFrames>
258-
259264
</Storyboard>
260265
</VisualState>
261-
<VisualState x:Name="Disabled" />
266+
<VisualState x:Name="Disabled">
267+
<Storyboard>
268+
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
269+
Storyboard.TargetProperty="(BorderBrush).(SolidColorBrush.Color)">
270+
<EasingColorKeyFrame KeyTime="0" Value="{StaticResource DisabledBorderDarkColor}" />
271+
</ColorAnimationUsingKeyFrames>
272+
</Storyboard>
273+
</VisualState>
274+
262275
</VisualStateGroup>
263276
<VisualStateGroup x:Name="CheckStates">
264277
<VisualState x:Name="Checked">
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
using AutoHDR.Profiles;
2+
using CodectoryCore.UI.Wpf;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Collections.ObjectModel;
6+
using System.Linq;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
namespace AutoHDR
11+
{
12+
public class ApplicationProfileAssignment : BaseViewModel
13+
{
14+
private int _position = -1;
15+
private ApplicationItem _application = null;
16+
17+
private Profiles.Profile _profile = null;
18+
19+
private static SortableObservableCollection<ApplicationProfileAssignment> Assignments => Globals.Instance.Settings.ApplicationProfileAssignments;
20+
21+
public ApplicationItem Application { get => _application; set { _application = value; OnPropertyChanged(); }
22+
}
23+
24+
public Profile Profile { get => _profile; set { _profile = value; OnPropertyChanged(); } }
25+
26+
public int Position { get => _position; set { _position = value; OnPropertyChanged(); } }
27+
28+
29+
private ApplicationProfileAssignment()
30+
{
31+
32+
}
33+
34+
private ApplicationProfileAssignment(ApplicationItem application)
35+
{
36+
Application = application;
37+
}
38+
39+
public void RemoveAssignment()
40+
{
41+
int removedPosition = Position;
42+
foreach (ApplicationProfileAssignment a in Assignments)
43+
{
44+
if (a.Position >= removedPosition)
45+
a.Position = a.Position - 1;
46+
}
47+
Assignments.Remove(this);
48+
Assignments.Sort(x => x.Position, System.ComponentModel.ListSortDirection.Ascending);
49+
50+
}
51+
52+
public void ChangePosition(bool up)
53+
{
54+
int newPosition = up ? Position - 1 : Position + 1;
55+
if (Assignments.Any(x => x.Position == newPosition))
56+
{
57+
Assignments.First(x => x.Position == newPosition).Position = up ? newPosition + 1 : newPosition - 1;
58+
}
59+
Position = newPosition;
60+
Assignments.Sort(x => x.Position, System.ComponentModel.ListSortDirection.Ascending);
61+
62+
63+
}
64+
65+
66+
67+
public static ApplicationProfileAssignment NewAssigment(ApplicationItem application)
68+
{
69+
ApplicationProfileAssignment assigment = new ApplicationProfileAssignment(application);
70+
assigment.Position = GetNextPosition();
71+
Assignments.Add(assigment);
72+
Assignments.Sort(x => x.Position, System.ComponentModel.ListSortDirection.Ascending);
73+
74+
return assigment;
75+
}
76+
77+
78+
private static int GetNextPosition()
79+
{
80+
int position = 0;
81+
while (Assignments.Any(x => x.Position == position))
82+
{
83+
position++;
84+
}
85+
return position;
86+
}
87+
88+
89+
90+
}
91+
92+
}

Source/HDRProfile/AutoHDR.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@
175175
<SubType>Designer</SubType>
176176
</Page>
177177
<Compile Include="ApplicationChangedEventArgs.cs" />
178+
<Compile Include="ApplicationProfileAssignment.cs" />
178179
<Compile Include="Globals.cs" />
179180
<Compile Include="Profiles\Actions\ActionEndResult.cs" />
180181
<Compile Include="Profiles\Actions\BaseProfileAction.cs" />
@@ -190,6 +191,7 @@
190191
<Compile Include="Profiles\Actions\ProfileActionAdder.cs" />
191192
<Compile Include="Profiles\Profile.cs" />
192193
<Compile Include="Profiles\ProfileMode.cs" />
194+
<Compile Include="SortedObservableCollection.cs" />
193195
<Compile Include="Views\ApplicationActionView.xaml.cs">
194196
<DependentUpon>ApplicationActionView.xaml</DependentUpon>
195197
</Compile>

Source/HDRProfile/AutoHDRDaemon.cs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using System.ComponentModel;
1010
using System.Diagnostics;
1111
using System.Globalization;
12-
using System.IO;
1312
using System.Linq;
1413
using System.Threading;
1514
using System.Threading.Tasks;
@@ -41,8 +40,8 @@ public class AutoHDRDaemon : BaseViewModel
4140

4241
public RelayCommand ActivateHDRCommand { get; private set; }
4342
public RelayCommand DeactivateHDRCommand { get; private set; }
44-
public RelayCommand AddApplicationCommand { get; private set; }
45-
public RelayCommand<ApplicationItem> RemoveApplicationCommand { get; private set; }
43+
public RelayCommand AddAssignmentCommand { get; private set; }
44+
public RelayCommand<ApplicationProfileAssignment> RemoveAssignmentCommand { get; private set; }
4645

4746
public RelayCommand AddProfileCommand { get; private set; }
4847
public RelayCommand<Profile> RemoveProfileCommand { get; private set; }
@@ -224,8 +223,8 @@ private void CreateRelayCommands()
224223
{
225224
ActivateHDRCommand = new RelayCommand(MonitorManager.ActivateHDR);
226225
DeactivateHDRCommand = new RelayCommand(MonitorManager.DeactivateHDR);
227-
AddApplicationCommand = new RelayCommand(AddAplication);
228-
RemoveApplicationCommand = new RelayCommand<ApplicationItem>(RemoveApplication);
226+
AddAssignmentCommand = new RelayCommand(AddAssignment);
227+
RemoveAssignmentCommand = new RelayCommand<ApplicationProfileAssignment>(RemoveAssignment);
229228
AddProfileCommand = new RelayCommand(AddProfile);
230229
RemoveProfileCommand = new RelayCommand<Profile>(RemoveProfile);
231230

@@ -265,12 +264,12 @@ private void LoadSettings()
265264
{
266265
Globals.Instance.LoadSettings();
267266

268-
Settings.ApplicationItems.CollectionChanged += ApplicationItems_CollectionChanged;
267+
Settings.ApplicationProfileAssignments.CollectionChanged += ApplicationProfileAssigments_CollectionChanged;
269268
Settings.PropertyChanged += Settings_PropertyChanged;
270-
foreach (var application in Settings.ApplicationItems)
269+
foreach (var assignment in Settings.ApplicationProfileAssignments)
271270
{
272-
ApplicationWatcher.AddProcess(application);
273-
application.PropertyChanged += ApplicationItem_PropertyChanged;
271+
ApplicationWatcher.AddProcess(assignment.Application);
272+
assignment.Application.PropertyChanged += ApplicationItem_PropertyChanged;
274273
}
275274
Tools.Logs.Add("Settings loaded", false);
276275
}
@@ -384,27 +383,27 @@ public void Stop()
384383

385384
#region Process handling
386385

387-
private void ApplicationItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
386+
private void ApplicationProfileAssigments_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
388387
{
389388
lock (_accessLock)
390389
{
391390
switch (e.Action)
392391
{
393392
case NotifyCollectionChangedAction.Add:
394-
foreach (var applicationItem in e.NewItems)
393+
foreach (var assignment in e.NewItems)
395394
{
396-
Tools.Logs.Add($"Application added: {((ApplicationItem)applicationItem).ApplicationName}", false);
397-
ApplicationWatcher.AddProcess(((ApplicationItem)applicationItem));
398-
((ApplicationItem)applicationItem).PropertyChanged += ApplicationItem_PropertyChanged;
395+
Tools.Logs.Add($"Application added: {((ApplicationProfileAssignment)assignment).Application.ApplicationName}", false);
396+
ApplicationWatcher.AddProcess(((ApplicationProfileAssignment)assignment).Application);
397+
((ApplicationProfileAssignment)assignment).PropertyChanged += ApplicationItem_PropertyChanged;
399398
}
400399

401400
break;
402401
case NotifyCollectionChangedAction.Remove:
403-
foreach (var applicationItem in e.OldItems)
402+
foreach (var assignment in e.OldItems)
404403
{
405-
Tools.Logs.Add($"Application removed: {((ApplicationItem)applicationItem).ApplicationName}", false);
406-
ApplicationWatcher.RemoveProcess(((ApplicationItem)applicationItem));
407-
((ApplicationItem)applicationItem).PropertyChanged -= ApplicationItem_PropertyChanged;
404+
Tools.Logs.Add($"Application removed: {((ApplicationProfileAssignment)assignment).Application.ApplicationName}", false);
405+
ApplicationWatcher.RemoveProcess(((ApplicationProfileAssignment)assignment).Application);
406+
((ApplicationProfileAssignment)assignment).PropertyChanged -= ApplicationItem_PropertyChanged;
408407

409408
}
410409
break;
@@ -425,23 +424,25 @@ private void ApplicationItem_PropertyChanged(object sender, PropertyChangedEvent
425424
SaveSettings();
426425
}
427426

428-
private void AddAplication()
427+
private void AddAssignment()
429428
{
430429
ApplicationAdder adder = new ApplicationAdder();
431430
adder.DialogService = DialogService;
432431
adder.OKClicked += (o, e) =>
433432
{
434-
if (!Settings.ApplicationItems.Any(pi => pi.ApplicationFilePath == adder.ApplicationItem.ApplicationFilePath))
435-
Settings.ApplicationItems.Add(adder.ApplicationItem);
433+
if (!Settings.ApplicationProfileAssignments.Any(pi => pi.Application.ApplicationFilePath == adder.ApplicationItem.ApplicationFilePath))
434+
{
435+
ApplicationProfileAssignment.NewAssigment(adder.ApplicationItem);
436+
}
436437
};
437438
if (DialogService != null)
438439
DialogService.ShowDialogModal(adder, new System.Drawing.Size(640, 450));
439440
}
440441

441442

442-
private void RemoveApplication(ApplicationItem process)
443+
private void RemoveAssignment(ApplicationProfileAssignment process)
443444
{
444-
Settings.ApplicationItems.Remove(process);
445+
Settings.ApplicationProfileAssignments.Remove(process);
445446

446447
}
447448

Source/HDRProfile/Globals.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@ public class Globals : BaseViewModel
1919

2020
private UserAppSettings _settings;
2121
public UserAppSettings Settings { get => _settings; set { _settings = value; OnPropertyChanged(); } }
22+
private bool _settingsLoadedOnce = false;
2223

2324
public void SaveSettings()
2425
{
26+
if (!_settingsLoadedOnce)
27+
return;
2528
Tools.Logs.Add("Saving settings..", false);
2629
try
2730
{
@@ -43,17 +46,20 @@ public void LoadSettings()
4346
{
4447
Tools.Logs.Add("Loading settings...", false);
4548
Settings = UserAppSettings.ReadSettings(SettingsPath);
49+
_settingsLoadedOnce = true;
4650
}
4751
else if (File.Exists(SettingsPathCompatible))
4852
{
4953
Tools.Logs.Add("Loading settings...", false);
5054
Settings = UserAppSettings.Convert(HDRProfileSettings.ReadSettings(SettingsPathCompatible));
55+
_settingsLoadedOnce = true;
5156
File.Delete(SettingsPathCompatible);
5257
}
5358
else
5459
{
5560
Tools.Logs.Add("Creating settings file", false);
5661
Settings = new UserAppSettings();
62+
_settingsLoadedOnce = true;
5763
SaveSettings();
5864
}
5965
}

Source/HDRProfile/Profiles/Profile.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public Profile()
5858

5959
private void Profile_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
6060
{
61+
6162
Globals.Instance.SaveSettings();
6263
}
6364

@@ -171,5 +172,10 @@ public void RemoveProfileAction(ProfileActionListType listType, IProfileAction p
171172
}
172173

173174
}
175+
176+
public override string ToString()
177+
{
178+
return Name;
179+
}
174180
}
175181
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Collections.ObjectModel;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace AutoHDR
9+
{
10+
public class SortableObservableCollection<T> : ObservableCollection<T>
11+
{
12+
public SortableObservableCollection(List<T> list)
13+
: base(list)
14+
{
15+
}
16+
17+
public SortableObservableCollection(IEnumerable<T> collection)
18+
: base(collection)
19+
{
20+
}
21+
22+
public void Sort<TKey>(Func<T, TKey> keySelector, System.ComponentModel.ListSortDirection direction)
23+
{
24+
switch (direction)
25+
{
26+
case System.ComponentModel.ListSortDirection.Ascending:
27+
{
28+
ApplySort(Items.OrderBy(keySelector));
29+
break;
30+
}
31+
case System.ComponentModel.ListSortDirection.Descending:
32+
{
33+
ApplySort(Items.OrderByDescending(keySelector));
34+
break;
35+
}
36+
}
37+
}
38+
39+
public void Sort<TKey>(Func<T, TKey> keySelector, IComparer<TKey> comparer)
40+
{
41+
ApplySort(Items.OrderBy(keySelector, comparer));
42+
}
43+
44+
private void ApplySort(IEnumerable<T> sortedItems)
45+
{
46+
var sortedItemsList = sortedItems.ToList();
47+
48+
foreach (var item in sortedItemsList)
49+
{
50+
Move(IndexOf(item), sortedItemsList.IndexOf(item));
51+
}
52+
}
53+
}
54+
}

0 commit comments

Comments
 (0)