Skip to content

Commit 3a84b59

Browse files
committed
* Added ability enable or disable RAM Monitor
* Added initial SettingsWindow * Code improvements
1 parent 6c3351c commit 3a84b59

File tree

10 files changed

+155
-19
lines changed

10 files changed

+155
-19
lines changed

MemPlus/App.config

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
<setting name="Topmost" serializeAs="String">
2929
<value>False</value>
3030
</setting>
31+
<setting name="RamMonitor" serializeAs="String">
32+
<value>True</value>
33+
</setting>
3134
</MemPlus.Properties.Settings>
3235
</userSettings>
3336
</configuration>

MemPlus/Classes/RAM/RamController.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010

1111
namespace MemPlus.Classes.RAM
1212
{
13-
/// <inheritdoc />
1413
/// <summary>
1514
/// Sealed class containing methods and interaction logic in terms of RAM
1615
/// </summary>
17-
internal sealed class RamController : IDisposable
16+
internal sealed class RamController
1817
{
1918
#region Variables
2019
/// <summary>
@@ -104,15 +103,11 @@ internal RamController(Dispatcher dispatcher, SfCircularGauge gauge, Label lblTo
104103
_ramTimer = new Timer();
105104
_ramTimer.Elapsed += OnTimedEvent;
106105
_ramTimer.Interval = timerInterval;
106+
_ramTimer.Enabled = false;
107107

108108
_logController.AddLog(new ApplicationLog("Done initializing RamController"));
109109
}
110110

111-
~RamController()
112-
{
113-
_ramTimer?.Dispose();
114-
}
115-
116111
/// <summary>
117112
/// Enable RAM usage monitoring
118113
/// </summary>
@@ -136,6 +131,7 @@ internal void DisableMonitor()
136131
{
137132
_ramTimer.Enabled = false;
138133
RamMonitorEnabled = false;
134+
139135
_logController.AddLog(new ApplicationLog("The RAM monitor has been disabled"));
140136
}
141137

@@ -190,11 +186,14 @@ await Task.Run(async () =>
190186
await Task.Delay(10000);
191187

192188
UpdateRamUsage();
189+
UpdateGuiControls();
190+
193191
double newUsage = RamUsage;
194192

195193
RamSavings = oldUsage - newUsage;
196194
});
197195

196+
198197
_logController.AddLog(new ApplicationLog("Done clearing RAM memory"));
199198
}
200199

@@ -215,10 +214,5 @@ private void UpdateRamUsage()
215214

216215
_logController.AddLog(new ApplicationLog("Finished updating RAM usage"));
217216
}
218-
219-
public void Dispose()
220-
{
221-
_ramTimer?.Dispose();
222-
}
223217
}
224218
}

MemPlus/Classes/RAM/RamOptimizer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,10 @@ internal void EmptyWorkingSetFunction(List<string> processExceptions)
149149
EmptyWorkingSet(process.Handle);
150150
_logController.AddLog(new RamLog("Successfully emptied working set for process " + process.ProcessName));
151151
}
152+
else
153+
{
154+
_logController.AddLog(new RamLog("Excluded process: " + process.ProcessName));
155+
}
152156
}
153157
catch (Exception ex)
154158
{

MemPlus/MemPlus.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@
6666
<Generator>MSBuild:Compile</Generator>
6767
<SubType>Designer</SubType>
6868
</ApplicationDefinition>
69+
<Compile Include="Windows\SettingsWindow.xaml.cs">
70+
<DependentUpon>SettingsWindow.xaml</DependentUpon>
71+
</Compile>
6972
<Page Include="Windows\AboutWindow.xaml">
7073
<SubType>Designer</SubType>
7174
<Generator>MSBuild:Compile</Generator>
@@ -101,6 +104,10 @@
101104
<DependentUpon>MainWindow.xaml</DependentUpon>
102105
<SubType>Code</SubType>
103106
</Compile>
107+
<Page Include="Windows\SettingsWindow.xaml">
108+
<SubType>Designer</SubType>
109+
<Generator>MSBuild:Compile</Generator>
110+
</Page>
104111
</ItemGroup>
105112
<ItemGroup>
106113
<Compile Include="Properties\AssemblyInfo.cs">

MemPlus/Properties/Settings.Designer.cs

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

MemPlus/Properties/Settings.settings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,8 @@
2323
<Setting Name="Topmost" Type="System.Boolean" Scope="User">
2424
<Value Profile="(Default)">False</Value>
2525
</Setting>
26+
<Setting Name="RamMonitor" Type="System.Boolean" Scope="User">
27+
<Value Profile="(Default)">True</Value>
28+
</Setting>
2629
</Settings>
2730
</SettingsFile>

MemPlus/Windows/MainWindow.xaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<Image Width="16" Height="16" Source="/MemPlus;component/Resources/Images/ram.png"></Image>
3030
</MenuItem.Icon>
3131
</MenuItem>
32-
<MenuItem Header="Settings">
32+
<MenuItem Header="Settings" Click="SettingsMenuItem_OnClick">
3333
<MenuItem.Icon>
3434
<Image Width="16" Height="16" Source="/MemPlus;component/Resources/Images/settings.png"></Image>
3535
</MenuItem.Icon>
@@ -70,6 +70,7 @@
7070
</MenuItem>
7171

7272
<MenuItem Header="_Tools">
73+
<MenuItem x:Name="MniRamMonitor" Header="RAM Monitor" IsCheckable="True" Checked="RamMonitorMenuItem_OnCheckedChanged" Unchecked="RamMonitorMenuItem_OnCheckedChanged" />
7374
<MenuItem Header="RAM Analyzer">
7475
<MenuItem.Icon>
7576
<Image Width="16" Height="16" Source="/Resources/Images/ram.png"/>
@@ -93,7 +94,7 @@
9394
<MenuItem x:Name="MniOnTop" Header="Always on top" IsCheckable="True" Checked="TopMenuItem_OnCheckedChanged" Unchecked="TopMenuItem_OnCheckedChanged" />
9495
<MenuItem x:Name="MniDisableInactive" Header="Disable when inactive" IsCheckable="True" Checked="DisableInactiveMenuItem_OnCheckedChanged" Unchecked="DisableInactiveMenuItem_OnCheckedChanged" />
9596
</MenuItem>
96-
<MenuItem Header="Settings">
97+
<MenuItem Header="Settings" Click="SettingsMenuItem_OnClick">
9798
<MenuItem.Icon>
9899
<Image Width="16" Height="16" Source="/Resources/Images/settings.png"/>
99100
</MenuItem.Icon>

MemPlus/Windows/MainWindow.xaml.cs

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,14 @@ public MainWindow()
2727

2828
InitializeComponent();
2929
ChangeVisualStyle();
30-
LoadProperties();
3130

32-
_ramController = new RamController(Dispatcher, CgRamUsage,LblTotalPhysicalMemory, LblAvailablePhysicalMemory, 1000, _logController);
33-
_rmEnabledBeforeInvisible = true;
34-
_ramController.EnableMonitor();
31+
_ramController = new RamController(Dispatcher, CgRamUsage, LblTotalPhysicalMemory, LblAvailablePhysicalMemory, 1000, _logController);
3532

3633
Application app = Application.Current;
3734
app.Activated += Active;
3835
app.Deactivated += Passive;
3936

37+
LoadProperties();
4038
_logController.AddLog(new ApplicationLog("Done initializing MainWindow"));
4139
}
4240

@@ -45,13 +43,27 @@ private void LoadProperties()
4543
_logController.AddLog(new ApplicationLog("Loading properties"));
4644
MniDisableInactive.IsChecked = Properties.Settings.Default.DisableOnInactive;
4745
MniOnTop.IsChecked = Properties.Settings.Default.Topmost;
46+
MniRamMonitor.IsChecked = Properties.Settings.Default.RamMonitor;
4847
_logController.AddLog(new ApplicationLog("Done loading properties"));
48+
49+
if (Properties.Settings.Default.RamMonitor)
50+
{
51+
_rmEnabledBeforeInvisible = true;
52+
_ramController.EnableMonitor();
53+
}
54+
else
55+
{
56+
_rmEnabledBeforeInvisible = false;
57+
}
4958
}
5059

5160
private void Active(object sender, EventArgs args)
5261
{
5362
if (!Properties.Settings.Default.DisableOnInactive) return;
54-
_ramController.EnableMonitor();
63+
if (Properties.Settings.Default.RamMonitor)
64+
{
65+
_ramController.EnableMonitor();
66+
}
5567
Overlay.Visibility = Visibility.Collapsed;
5668
}
5769

@@ -245,5 +257,27 @@ private void DisableInactiveMenuItem_OnCheckedChanged(object sender, RoutedEvent
245257
Properties.Settings.Default.DisableOnInactive = MniDisableInactive.IsChecked;
246258
Properties.Settings.Default.Save();
247259
}
260+
261+
private void SettingsMenuItem_OnClick(object sender, RoutedEventArgs e)
262+
{
263+
new SettingsWindow(this, _logController).ShowDialog();
264+
}
265+
266+
private void RamMonitorMenuItem_OnCheckedChanged(object sender, RoutedEventArgs e)
267+
{
268+
if (MniRamMonitor.IsChecked)
269+
{
270+
Properties.Settings.Default.RamMonitor = true;
271+
_rmEnabledBeforeInvisible = false;
272+
_ramController.EnableMonitor();
273+
}
274+
else
275+
{
276+
Properties.Settings.Default.RamMonitor = false;
277+
_ramController.DisableMonitor();
278+
}
279+
280+
Properties.Settings.Default.Save();
281+
}
248282
}
249283
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<syncfusion:ChromelessWindow
2+
x:Class="MemPlus.Windows.SettingsWindow"
3+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5+
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6+
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
7+
xmlns:local="clr-namespace:MemPlus.Windows"
8+
xmlns:syncfusion="http://schemas.syncfusion.com/wpf"
9+
mc:Ignorable="d"
10+
UseLayoutRounding="True"
11+
TitleTextAlignment="Center"
12+
WindowStartupLocation="CenterScreen"
13+
Title="MemPlus - Settings" Height="300" Width="300">
14+
<Grid>
15+
16+
</Grid>
17+
</syncfusion:ChromelessWindow>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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+
using MemPlus.Classes.GUI;
15+
using MemPlus.Classes.LOG;
16+
17+
namespace MemPlus.Windows
18+
{
19+
/// <inheritdoc cref="Syncfusion.Windows.Shared.ChromelessWindow" />
20+
/// <summary>
21+
/// Interaction logic for SettingsWindow.xaml
22+
/// </summary>
23+
public partial class SettingsWindow
24+
{
25+
private readonly MainWindow _mainWindow;
26+
private readonly LogController _logController;
27+
28+
public SettingsWindow(MainWindow mainWindow, LogController logController)
29+
{
30+
InitializeComponent();
31+
ChangeVisualStyle();
32+
33+
_mainWindow = mainWindow;
34+
_logController = logController;
35+
}
36+
37+
/// <summary>
38+
/// Change the visual style of the controls, depending on the settings.
39+
/// </summary>
40+
private void ChangeVisualStyle()
41+
{
42+
_logController.AddLog(new ApplicationLog("Changing SettingsWindow theme style"));
43+
44+
StyleManager.ChangeStyle(this);
45+
46+
_logController.AddLog(new ApplicationLog("Done changing SettingsWindow theme style"));
47+
}
48+
49+
private void LoadSettings()
50+
{
51+
//TODO
52+
}
53+
54+
private void SaveSettings()
55+
{
56+
//TODO
57+
Properties.Settings.Default.Save();
58+
_logController.AddLog(new ApplicationLog("Settings have been saved"));
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)