@@ -1,6 +1,33 @@ | |||||
<?xml version="1.0" encoding="utf-8" ?> | <?xml version="1.0" encoding="utf-8" ?> | ||||
<configuration> | <configuration> | ||||
<configSections> | |||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > | |||||
<section name="GPSDOTimeSync.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> | |||||
</sectionGroup> | |||||
</configSections> | |||||
<startup> | <startup> | ||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> | <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> | ||||
</startup> | </startup> | ||||
<userSettings> | |||||
<GPSDOTimeSync.Properties.Settings> | |||||
<setting name="minimumUpdateInterval" serializeAs="String"> | |||||
<value>10</value> | |||||
</setting> | |||||
<setting name="maximumCorrectionEnabled" serializeAs="String"> | |||||
<value>False</value> | |||||
</setting> | |||||
<setting name="maximumCorrection" serializeAs="String"> | |||||
<value>1</value> | |||||
</setting> | |||||
<setting name="maximumCorrectionUnit" serializeAs="String"> | |||||
<value>0</value> | |||||
</setting> | |||||
<setting name="deviceName" serializeAs="String"> | |||||
<value /> | |||||
</setting> | |||||
<setting name="serialPortName" serializeAs="String"> | |||||
<value /> | |||||
</setting> | |||||
</GPSDOTimeSync.Properties.Settings> | |||||
</userSettings> | |||||
</configuration> | </configuration> |
@@ -42,10 +42,15 @@ namespace GPSDOTimeSync { | |||||
private int lastSystemTimeUpdate; | private int lastSystemTimeUpdate; | ||||
private ITimeProvider timeProvider; | private ITimeProvider timeProvider; | ||||
Properties.Settings settings; | |||||
public FormMain() { | public FormMain() { | ||||
InitializeComponent(); | InitializeComponent(); | ||||
PopulateDropDowns(); | PopulateDropDowns(); | ||||
settings = Properties.Settings.Default; | |||||
LoadSettings(); | |||||
lastSystemTimeUpdate = 0; | lastSystemTimeUpdate = 0; | ||||
statusStrip.Renderer = new TruncatedTextEllipsisRenderer(); | statusStrip.Renderer = new TruncatedTextEllipsisRenderer(); | ||||
@@ -146,7 +151,7 @@ namespace GPSDOTimeSync { | |||||
string serialPortName = (string) comboBoxSerialPortNames.SelectedItem; | string serialPortName = (string) comboBoxSerialPortNames.SelectedItem; | ||||
string deviceName = (string) comboBoxDeviceNames.SelectedItem; | string deviceName = (string) comboBoxDeviceNames.SelectedItem; | ||||
SerialPort serialPort = new SerialPort(serialPortName); | |||||
SerialPort serialPort = new SerialPort(serialPortName); | |||||
timeProvider = TIME_PROVIDER_CONSTRUCTORS[deviceName](serialPort); | timeProvider = TIME_PROVIDER_CONSTRUCTORS[deviceName](serialPort); | ||||
ConfigureTimeProvider(); | ConfigureTimeProvider(); | ||||
@@ -181,6 +186,75 @@ namespace GPSDOTimeSync { | |||||
DateTime systemTime = SystemTimeUtils.GetSystemTime(); | DateTime systemTime = SystemTimeUtils.GetSystemTime(); | ||||
labelCurrentDateTime.Text = systemTime.ToString("HH:mm:ss\ndd\\/MM\\/yyyy\nUTC"); | labelCurrentDateTime.Text = systemTime.ToString("HH:mm:ss\ndd\\/MM\\/yyyy\nUTC"); | ||||
} | } | ||||
#region Settings Management | |||||
private int GetIndexOfComboBoxStringItem(ComboBox comboBox, string itemText) { | |||||
for (int i = 0; i < comboBox.Items.Count; ++i) { | |||||
if ((string) comboBox.Items[i] == itemText) { | |||||
return i; | |||||
} | |||||
} | |||||
return 0; | |||||
} | |||||
private void LoadSettings() { | |||||
// Populate values | |||||
comboBoxDeviceNames.SelectedIndex = GetIndexOfComboBoxStringItem(comboBoxDeviceNames, settings.deviceName); | |||||
comboBoxSerialPortNames.SelectedIndex = GetIndexOfComboBoxStringItem(comboBoxSerialPortNames, settings.serialPortName); | |||||
checkBoxMaximumCorrectionEnabled.Checked = settings.maximumCorrectionEnabled; | |||||
numericUpDownMaximumCorrection.Value = settings.maximumCorrection; | |||||
comboBoxMaximumCorrectionUnit.SelectedIndex = GetIndexOfComboBoxStringItem(comboBoxMaximumCorrectionUnit, settings.maximumCorrectionUnit); | |||||
numericUpDownMimimumUpdateInterval.Value = settings.minimumUpdateInterval; | |||||
// Add event listeners | |||||
comboBoxDeviceNames.SelectedIndexChanged += comboBoxDeviceNames_SelectedIndexChanged_UpdateSettings; | |||||
comboBoxSerialPortNames.SelectedIndexChanged += comboBoxSerialPortNames_SelectedIndexChanged_UpdateSettings; | |||||
checkBoxMaximumCorrectionEnabled.CheckedChanged += checkBoxMaximumCorrectionEnabled_CheckedChanged_UpdateSettings; | |||||
numericUpDownMaximumCorrection.ValueChanged += numericUpDownMaximumCorrection_ValueChanged_UpdateSettings; | |||||
comboBoxMaximumCorrectionUnit.SelectedIndexChanged += comboBoxMaximumCorrectionUnit_SelectedIndexChanged_UpdateSettings; | |||||
numericUpDownMimimumUpdateInterval.ValueChanged += numericUpDownMimimumUpdateInterval_ValueChanged_UpdateSettings; | |||||
// Push possible changes through | |||||
comboBoxDeviceNames_SelectedIndexChanged_UpdateSettings(null, null); | |||||
comboBoxSerialPortNames_SelectedIndexChanged_UpdateSettings(null, null); | |||||
comboBoxMaximumCorrectionUnit_SelectedIndexChanged_UpdateSettings(null, null); | |||||
} | |||||
private void comboBoxDeviceNames_SelectedIndexChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.deviceName = (string) comboBoxDeviceNames.SelectedItem; | |||||
settings.Save(); | |||||
} | |||||
private void comboBoxSerialPortNames_SelectedIndexChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.serialPortName = (string) comboBoxSerialPortNames.SelectedItem; | |||||
settings.Save(); | |||||
} | |||||
private void checkBoxMaximumCorrectionEnabled_CheckedChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.maximumCorrectionEnabled = checkBoxMaximumCorrectionEnabled.Checked; | |||||
settings.Save(); | |||||
} | |||||
private void numericUpDownMaximumCorrection_ValueChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.maximumCorrection = numericUpDownMaximumCorrection.Value; | |||||
settings.Save(); | |||||
} | |||||
private void comboBoxMaximumCorrectionUnit_SelectedIndexChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.maximumCorrectionUnit = (string) comboBoxMaximumCorrectionUnit.SelectedItem; | |||||
settings.Save(); | |||||
} | |||||
private void numericUpDownMimimumUpdateInterval_ValueChanged_UpdateSettings(object sender, EventArgs e) { | |||||
settings.minimumUpdateInterval = numericUpDownMimimumUpdateInterval.Value; | |||||
settings.Save(); | |||||
} | |||||
#endregion | |||||
} | } | ||||
public class TruncatedTextEllipsisRenderer : ToolStripProfessionalRenderer { | public class TruncatedTextEllipsisRenderer : ToolStripProfessionalRenderer { | ||||
@@ -9,18 +9,90 @@ | |||||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||||
namespace GPSDOTimeSync.Properties { | namespace GPSDOTimeSync.Properties { | ||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] | |||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { | |||||
private static Settings defaultInstance = ((Settings) (global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | |||||
public static Settings Default { | |||||
get { | |||||
return defaultInstance; | |||||
} | |||||
} | |||||
} | |||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] | |||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { | |||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | |||||
public static Settings Default { | |||||
get { | |||||
return defaultInstance; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("10")] | |||||
public decimal minimumUpdateInterval { | |||||
get { | |||||
return ((decimal)(this["minimumUpdateInterval"])); | |||||
} | |||||
set { | |||||
this["minimumUpdateInterval"] = value; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("False")] | |||||
public bool maximumCorrectionEnabled { | |||||
get { | |||||
return ((bool)(this["maximumCorrectionEnabled"])); | |||||
} | |||||
set { | |||||
this["maximumCorrectionEnabled"] = value; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("1")] | |||||
public decimal maximumCorrection { | |||||
get { | |||||
return ((decimal)(this["maximumCorrection"])); | |||||
} | |||||
set { | |||||
this["maximumCorrection"] = value; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("0")] | |||||
public string maximumCorrectionUnit { | |||||
get { | |||||
return ((string)(this["maximumCorrectionUnit"])); | |||||
} | |||||
set { | |||||
this["maximumCorrectionUnit"] = value; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("")] | |||||
public string deviceName { | |||||
get { | |||||
return ((string)(this["deviceName"])); | |||||
} | |||||
set { | |||||
this["deviceName"] = value; | |||||
} | |||||
} | |||||
[global::System.Configuration.UserScopedSettingAttribute()] | |||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||||
[global::System.Configuration.DefaultSettingValueAttribute("")] | |||||
public string serialPortName { | |||||
get { | |||||
return ((string)(this["serialPortName"])); | |||||
} | |||||
set { | |||||
this["serialPortName"] = value; | |||||
} | |||||
} | |||||
} | |||||
} | } |
@@ -1,7 +1,24 @@ | |||||
<?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='utf-8'?> | ||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> | |||||
<Profiles> | |||||
<Profile Name="(Default)" /> | |||||
</Profiles> | |||||
<Settings /> | |||||
</SettingsFile> | |||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="GPSDOTimeSync.Properties" GeneratedClassName="Settings"> | |||||
<Profiles /> | |||||
<Settings> | |||||
<Setting Name="minimumUpdateInterval" Type="System.Decimal" Scope="User"> | |||||
<Value Profile="(Default)">10</Value> | |||||
</Setting> | |||||
<Setting Name="maximumCorrectionEnabled" Type="System.Boolean" Scope="User"> | |||||
<Value Profile="(Default)">False</Value> | |||||
</Setting> | |||||
<Setting Name="maximumCorrection" Type="System.Decimal" Scope="User"> | |||||
<Value Profile="(Default)">1</Value> | |||||
</Setting> | |||||
<Setting Name="maximumCorrectionUnit" Type="System.String" Scope="User"> | |||||
<Value Profile="(Default)">0</Value> | |||||
</Setting> | |||||
<Setting Name="deviceName" Type="System.String" Scope="User"> | |||||
<Value Profile="(Default)" /> | |||||
</Setting> | |||||
<Setting Name="serialPortName" Type="System.String" Scope="User"> | |||||
<Value Profile="(Default)" /> | |||||
</Setting> | |||||
</Settings> | |||||
</SettingsFile> |