initial commit
This commit is contained in:
parent
9691e6b54e
commit
4c9fa6feff
52
App.config
Normal file
52
App.config
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="MeetingClock.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="MeetingClock.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
|
||||
</startup>
|
||||
<applicationSettings>
|
||||
<MeetingClock.Properties.Settings>
|
||||
<setting name="Version" serializeAs="String">
|
||||
<value>v. 1.0.0</value>
|
||||
</setting>
|
||||
</MeetingClock.Properties.Settings>
|
||||
</applicationSettings>
|
||||
<userSettings>
|
||||
<MeetingClock.Properties.Settings>
|
||||
<setting name="CheckForUpdates" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="StartMinimized" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="StartBluetooth" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="IgnoreAllDayAppointments" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="IgnoreCancelledAppointments" serializeAs="String">
|
||||
<value>True</value>
|
||||
</setting>
|
||||
<setting name="IgnoreFreeAppointments" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="IgnoreOutOfOfficeAppointments" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="IgnoreTentativeAppointments" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="ReminderTime" serializeAs="String">
|
||||
<value>10</value>
|
||||
</setting>
|
||||
</MeetingClock.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
171
BluetoothManager.cs
Normal file
171
BluetoothManager.cs
Normal file
@ -0,0 +1,171 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using System.Timers;
|
||||
using Windows.Devices.Bluetooth;
|
||||
using Windows.Devices.Radios;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
public class BluetoothManager
|
||||
{
|
||||
public enum BluetoothState
|
||||
{
|
||||
NotInitialized,
|
||||
Exception,
|
||||
NoBluetoothAdapter,
|
||||
NoBluetoothRadio,
|
||||
Disabled,
|
||||
Off,
|
||||
On,
|
||||
Unknown
|
||||
}
|
||||
|
||||
public delegate void BluetoothStateChangeHandler(BluetoothManager manager, BluetoothState oldState, BluetoothState newState);
|
||||
public event BluetoothStateChangeHandler StateChanged;
|
||||
|
||||
public BluetoothState State { get; private set; } = BluetoothState.NotInitialized;
|
||||
|
||||
private BluetoothAdapter adapter;
|
||||
private Radio radio;
|
||||
private Timer updateTimer;
|
||||
|
||||
public BluetoothManager()
|
||||
{
|
||||
this.updateTimer = new Timer(100);
|
||||
this.updateTimer.Elapsed += UpdateTimer_Elapsed;
|
||||
}
|
||||
|
||||
public async Task Initialize()
|
||||
{
|
||||
await this.InitializePrivate(true);
|
||||
}
|
||||
|
||||
private async Task InitializePrivate(bool withLog)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.adapter = await BluetoothAdapter.GetDefaultAsync();
|
||||
if (this.adapter == null)
|
||||
{
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine("No BluetoothAdapter found");
|
||||
}
|
||||
this.State = BluetoothState.NoBluetoothAdapter;
|
||||
this.StateChanged(this, BluetoothState.NotInitialized, BluetoothState.NoBluetoothAdapter);
|
||||
this.updateTimer.Start();
|
||||
return;
|
||||
}
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Found BluetoothAdapter device id: {0}, address: {1}", this.adapter.DeviceId, this.adapter.BluetoothAddress));
|
||||
}
|
||||
|
||||
this.radio = await this.adapter.GetRadioAsync();
|
||||
if (this.radio == null)
|
||||
{
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine("No Radio found");
|
||||
}
|
||||
this.State = BluetoothState.NoBluetoothRadio;
|
||||
this.StateChanged(this, BluetoothState.NotInitialized, BluetoothState.NoBluetoothRadio);
|
||||
this.updateTimer.Start();
|
||||
return;
|
||||
}
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Found Bluetooth Radio device: {0}", this.radio.Name));
|
||||
}
|
||||
|
||||
this.radio.StateChanged += Radio_StateChanged;
|
||||
this.UpdateState();
|
||||
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Bluetooth State: {0}", this.State));
|
||||
}
|
||||
|
||||
this.updateTimer.Start();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
|
||||
if (withLog)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Exception while discovering bluetooth adapter, radio, and state: {0}", exception.Message));
|
||||
}
|
||||
this.State = BluetoothState.Exception;
|
||||
this.StateChanged(this, BluetoothState.NotInitialized, BluetoothState.Exception);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateState() {
|
||||
RadioState state = this.radio.State;
|
||||
BluetoothState oldState = this.State;
|
||||
BluetoothState btState;
|
||||
switch (state)
|
||||
{
|
||||
case RadioState.Disabled:
|
||||
btState = BluetoothState.Disabled;
|
||||
break;
|
||||
case RadioState.Off:
|
||||
btState = BluetoothState.Off;
|
||||
break;
|
||||
case RadioState.On:
|
||||
btState = BluetoothState.On;
|
||||
break;
|
||||
default:
|
||||
btState = BluetoothState.Unknown;
|
||||
break;
|
||||
}
|
||||
|
||||
if (btState != this.State)
|
||||
{
|
||||
Debug.WriteLine(String.Format("New Bluetooth state detected. Old state {0}, new state {1}", this.State, btState));
|
||||
this.State = btState;
|
||||
if (this.StateChanged != null)
|
||||
{
|
||||
this.StateChanged(this, oldState, btState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Radio_StateChanged(Radio sender, object args)
|
||||
{
|
||||
this.UpdateState();
|
||||
}
|
||||
|
||||
private async void UpdateTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
switch (this.State)
|
||||
{
|
||||
case BluetoothState.Exception:
|
||||
this.updateTimer.Stop();
|
||||
break;
|
||||
case BluetoothState.NotInitialized:
|
||||
case BluetoothState.NoBluetoothAdapter:
|
||||
case BluetoothState.NoBluetoothRadio:
|
||||
await this.InitializePrivate(false);
|
||||
break;
|
||||
default:
|
||||
this.UpdateState();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<RadioAccessStatus> Enable()
|
||||
{
|
||||
if (this.radio != null) {
|
||||
return await this.radio.SetStateAsync(RadioState.On);
|
||||
}
|
||||
return RadioAccessStatus.Unspecified;
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
this.updateTimer.Stop();
|
||||
}
|
||||
}
|
||||
}
|
752
MainWindow.Designer.cs
generated
Normal file
752
MainWindow.Designer.cs
generated
Normal file
@ -0,0 +1,752 @@
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
partial class MainWindow
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainWindow));
|
||||
this.groupBoxState = new System.Windows.Forms.GroupBox();
|
||||
this.buttonWebsite = new System.Windows.Forms.Button();
|
||||
this.buttonOpenSystemSettingsBluetooth = new System.Windows.Forms.Button();
|
||||
this.labelMeetingClockState = new System.Windows.Forms.Label();
|
||||
this.labelMeetingClockStateTitle = new System.Windows.Forms.Label();
|
||||
this.buttonOpenSystemSettingsPrivacy = new System.Windows.Forms.Button();
|
||||
this.buttonEnableBluetooth = new System.Windows.Forms.Button();
|
||||
this.labelBluetoothState = new System.Windows.Forms.Label();
|
||||
this.labelBluetoothStateTitle = new System.Windows.Forms.Label();
|
||||
this.groupBoxApplicationSettings = new System.Windows.Forms.GroupBox();
|
||||
this.checkBoxEnableBluetooth = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxCheckForUpdates = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxStartMinimized = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxAutostart = new System.Windows.Forms.CheckBox();
|
||||
this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components);
|
||||
this.timerEnableBalloon = new System.Windows.Forms.Timer(this.components);
|
||||
this.groupBoxAppointmentSettings = new System.Windows.Forms.GroupBox();
|
||||
this.checkBoxIgnoreTentativeAppointments = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxIgnoreFreeAppointments = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxIgnoreCancelledAppointments = new System.Windows.Forms.CheckBox();
|
||||
this.checkBoxIgnoreAllDayAppointments = new System.Windows.Forms.CheckBox();
|
||||
this.groupBoxClockSettings = new System.Windows.Forms.GroupBox();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.numericUpDownScrollWait = new System.Windows.Forms.NumericUpDown();
|
||||
this.labelScrollWaitTitle = new System.Windows.Forms.Label();
|
||||
this.labelScrollSpeed = new System.Windows.Forms.Label();
|
||||
this.labelScrollSpeedTitle = new System.Windows.Forms.Label();
|
||||
this.trackBarScrollSpeed = new System.Windows.Forms.TrackBar();
|
||||
this.labelBrightness = new System.Windows.Forms.Label();
|
||||
this.labelBrightnessTitle = new System.Windows.Forms.Label();
|
||||
this.trackBarBrightness = new System.Windows.Forms.TrackBar();
|
||||
this.labelTemperatureIntervalTitleSeconds = new System.Windows.Forms.Label();
|
||||
this.numericUpDownTemperatureInterval = new System.Windows.Forms.NumericUpDown();
|
||||
this.checkBoxTemperatureEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.labelDateIntervalTitleSeconds = new System.Windows.Forms.Label();
|
||||
this.numericUpDownDateInterval = new System.Windows.Forms.NumericUpDown();
|
||||
this.labelTimeIntervalTitleSeconds = new System.Windows.Forms.Label();
|
||||
this.numericUpDownTimeInterval = new System.Windows.Forms.NumericUpDown();
|
||||
this.labelTimeIntervalTitle = new System.Windows.Forms.Label();
|
||||
this.checkBoxDateEnabled = new System.Windows.Forms.CheckBox();
|
||||
this.timerScrollDemo = new System.Windows.Forms.Timer(this.components);
|
||||
this.buttonResetDefault = new System.Windows.Forms.Button();
|
||||
this.timerAdjustClock = new System.Windows.Forms.Timer(this.components);
|
||||
this.timerGetAppointment = new System.Windows.Forms.Timer(this.components);
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.numericUpDownReminderTime = new System.Windows.Forms.NumericUpDown();
|
||||
this.labelStartReminderTitle = new System.Windows.Forms.Label();
|
||||
this.groupBoxState.SuspendLayout();
|
||||
this.groupBoxApplicationSettings.SuspendLayout();
|
||||
this.groupBoxAppointmentSettings.SuspendLayout();
|
||||
this.groupBoxClockSettings.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownScrollWait)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBarScrollSpeed)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBarBrightness)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTemperatureInterval)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownDateInterval)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeInterval)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownReminderTime)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// groupBoxState
|
||||
//
|
||||
this.groupBoxState.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxState.Controls.Add(this.buttonWebsite);
|
||||
this.groupBoxState.Controls.Add(this.buttonOpenSystemSettingsBluetooth);
|
||||
this.groupBoxState.Controls.Add(this.labelMeetingClockState);
|
||||
this.groupBoxState.Controls.Add(this.labelMeetingClockStateTitle);
|
||||
this.groupBoxState.Controls.Add(this.buttonOpenSystemSettingsPrivacy);
|
||||
this.groupBoxState.Controls.Add(this.buttonEnableBluetooth);
|
||||
this.groupBoxState.Controls.Add(this.labelBluetoothState);
|
||||
this.groupBoxState.Controls.Add(this.labelBluetoothStateTitle);
|
||||
this.groupBoxState.Location = new System.Drawing.Point(12, 12);
|
||||
this.groupBoxState.Name = "groupBoxState";
|
||||
this.groupBoxState.Size = new System.Drawing.Size(560, 100);
|
||||
this.groupBoxState.TabIndex = 0;
|
||||
this.groupBoxState.TabStop = false;
|
||||
this.groupBoxState.Text = "State";
|
||||
//
|
||||
// buttonWebsite
|
||||
//
|
||||
this.buttonWebsite.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonWebsite.Location = new System.Drawing.Point(392, 65);
|
||||
this.buttonWebsite.Name = "buttonWebsite";
|
||||
this.buttonWebsite.Size = new System.Drawing.Size(162, 23);
|
||||
this.buttonWebsite.TabIndex = 8;
|
||||
this.buttonWebsite.Text = "Open Website";
|
||||
this.buttonWebsite.UseVisualStyleBackColor = true;
|
||||
this.buttonWebsite.Click += new System.EventHandler(this.buttonWebsite_Click);
|
||||
//
|
||||
// buttonOpenSystemSettingsBluetooth
|
||||
//
|
||||
this.buttonOpenSystemSettingsBluetooth.Location = new System.Drawing.Point(197, 65);
|
||||
this.buttonOpenSystemSettingsBluetooth.Name = "buttonOpenSystemSettingsBluetooth";
|
||||
this.buttonOpenSystemSettingsBluetooth.Size = new System.Drawing.Size(185, 23);
|
||||
this.buttonOpenSystemSettingsBluetooth.TabIndex = 7;
|
||||
this.buttonOpenSystemSettingsBluetooth.Text = "Open System Settings: Bluetooth";
|
||||
this.buttonOpenSystemSettingsBluetooth.UseVisualStyleBackColor = true;
|
||||
this.buttonOpenSystemSettingsBluetooth.Click += new System.EventHandler(this.buttonOpenSystemSettingsBluetooth_Click);
|
||||
//
|
||||
// labelMeetingClockState
|
||||
//
|
||||
this.labelMeetingClockState.AutoSize = true;
|
||||
this.labelMeetingClockState.Location = new System.Drawing.Point(99, 46);
|
||||
this.labelMeetingClockState.Name = "labelMeetingClockState";
|
||||
this.labelMeetingClockState.Size = new System.Drawing.Size(51, 13);
|
||||
this.labelMeetingClockState.TabIndex = 6;
|
||||
this.labelMeetingClockState.Text = "unknown";
|
||||
//
|
||||
// labelMeetingClockStateTitle
|
||||
//
|
||||
this.labelMeetingClockStateTitle.AutoSize = true;
|
||||
this.labelMeetingClockStateTitle.Location = new System.Drawing.Point(7, 46);
|
||||
this.labelMeetingClockStateTitle.Name = "labelMeetingClockStateTitle";
|
||||
this.labelMeetingClockStateTitle.Size = new System.Drawing.Size(78, 13);
|
||||
this.labelMeetingClockStateTitle.TabIndex = 5;
|
||||
this.labelMeetingClockStateTitle.Text = "Meeting Clock:";
|
||||
//
|
||||
// buttonOpenSystemSettingsPrivacy
|
||||
//
|
||||
this.buttonOpenSystemSettingsPrivacy.Location = new System.Drawing.Point(6, 65);
|
||||
this.buttonOpenSystemSettingsPrivacy.Name = "buttonOpenSystemSettingsPrivacy";
|
||||
this.buttonOpenSystemSettingsPrivacy.Size = new System.Drawing.Size(185, 23);
|
||||
this.buttonOpenSystemSettingsPrivacy.TabIndex = 3;
|
||||
this.buttonOpenSystemSettingsPrivacy.Text = "Open System Settings: Privacy";
|
||||
this.buttonOpenSystemSettingsPrivacy.UseVisualStyleBackColor = true;
|
||||
this.buttonOpenSystemSettingsPrivacy.Click += new System.EventHandler(this.ButtonOpenSystemSettingsPrivacy_Click);
|
||||
//
|
||||
// buttonEnableBluetooth
|
||||
//
|
||||
this.buttonEnableBluetooth.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
this.buttonEnableBluetooth.Location = new System.Drawing.Point(392, 19);
|
||||
this.buttonEnableBluetooth.Name = "buttonEnableBluetooth";
|
||||
this.buttonEnableBluetooth.Size = new System.Drawing.Size(162, 40);
|
||||
this.buttonEnableBluetooth.TabIndex = 2;
|
||||
this.buttonEnableBluetooth.Text = "Enable Bluetooth";
|
||||
this.buttonEnableBluetooth.UseVisualStyleBackColor = true;
|
||||
this.buttonEnableBluetooth.Click += new System.EventHandler(this.ButtonEnableBluetooth_Click);
|
||||
//
|
||||
// labelBluetoothState
|
||||
//
|
||||
this.labelBluetoothState.AutoSize = true;
|
||||
this.labelBluetoothState.Location = new System.Drawing.Point(99, 24);
|
||||
this.labelBluetoothState.Name = "labelBluetoothState";
|
||||
this.labelBluetoothState.Size = new System.Drawing.Size(51, 13);
|
||||
this.labelBluetoothState.TabIndex = 1;
|
||||
this.labelBluetoothState.Text = "unknown";
|
||||
//
|
||||
// labelBluetoothStateTitle
|
||||
//
|
||||
this.labelBluetoothStateTitle.AutoSize = true;
|
||||
this.labelBluetoothStateTitle.Location = new System.Drawing.Point(7, 24);
|
||||
this.labelBluetoothStateTitle.Name = "labelBluetoothStateTitle";
|
||||
this.labelBluetoothStateTitle.Size = new System.Drawing.Size(83, 13);
|
||||
this.labelBluetoothStateTitle.TabIndex = 0;
|
||||
this.labelBluetoothStateTitle.Text = "Bluetooth State:";
|
||||
//
|
||||
// groupBoxApplicationSettings
|
||||
//
|
||||
this.groupBoxApplicationSettings.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxApplicationSettings.Controls.Add(this.checkBoxEnableBluetooth);
|
||||
this.groupBoxApplicationSettings.Controls.Add(this.checkBoxCheckForUpdates);
|
||||
this.groupBoxApplicationSettings.Controls.Add(this.checkBoxStartMinimized);
|
||||
this.groupBoxApplicationSettings.Controls.Add(this.checkBoxAutostart);
|
||||
this.groupBoxApplicationSettings.Location = new System.Drawing.Point(12, 118);
|
||||
this.groupBoxApplicationSettings.Name = "groupBoxApplicationSettings";
|
||||
this.groupBoxApplicationSettings.Size = new System.Drawing.Size(560, 116);
|
||||
this.groupBoxApplicationSettings.TabIndex = 1;
|
||||
this.groupBoxApplicationSettings.TabStop = false;
|
||||
this.groupBoxApplicationSettings.Text = "Application Settings";
|
||||
//
|
||||
// checkBoxEnableBluetooth
|
||||
//
|
||||
this.checkBoxEnableBluetooth.AutoSize = true;
|
||||
this.checkBoxEnableBluetooth.Location = new System.Drawing.Point(6, 91);
|
||||
this.checkBoxEnableBluetooth.Name = "checkBoxEnableBluetooth";
|
||||
this.checkBoxEnableBluetooth.Size = new System.Drawing.Size(172, 17);
|
||||
this.checkBoxEnableBluetooth.TabIndex = 3;
|
||||
this.checkBoxEnableBluetooth.Text = "Automatically Enable Bluetooth";
|
||||
this.checkBoxEnableBluetooth.UseVisualStyleBackColor = true;
|
||||
this.checkBoxEnableBluetooth.CheckedChanged += new System.EventHandler(this.checkBoxEnableBluetooth_CheckedChanged);
|
||||
//
|
||||
// checkBoxCheckForUpdates
|
||||
//
|
||||
this.checkBoxCheckForUpdates.AutoSize = true;
|
||||
this.checkBoxCheckForUpdates.Location = new System.Drawing.Point(6, 67);
|
||||
this.checkBoxCheckForUpdates.Name = "checkBoxCheckForUpdates";
|
||||
this.checkBoxCheckForUpdates.Size = new System.Drawing.Size(180, 17);
|
||||
this.checkBoxCheckForUpdates.TabIndex = 2;
|
||||
this.checkBoxCheckForUpdates.Text = "Automatically Check for Updates";
|
||||
this.checkBoxCheckForUpdates.UseVisualStyleBackColor = true;
|
||||
this.checkBoxCheckForUpdates.CheckedChanged += new System.EventHandler(this.checkBoxCheckForUpdates_CheckedChanged);
|
||||
//
|
||||
// checkBoxStartMinimized
|
||||
//
|
||||
this.checkBoxStartMinimized.AutoSize = true;
|
||||
this.checkBoxStartMinimized.Location = new System.Drawing.Point(6, 43);
|
||||
this.checkBoxStartMinimized.Name = "checkBoxStartMinimized";
|
||||
this.checkBoxStartMinimized.Size = new System.Drawing.Size(97, 17);
|
||||
this.checkBoxStartMinimized.TabIndex = 1;
|
||||
this.checkBoxStartMinimized.Text = "Start Minimized";
|
||||
this.checkBoxStartMinimized.UseVisualStyleBackColor = true;
|
||||
this.checkBoxStartMinimized.CheckedChanged += new System.EventHandler(this.checkBoxStartMinimized_CheckedChanged);
|
||||
//
|
||||
// checkBoxAutostart
|
||||
//
|
||||
this.checkBoxAutostart.AutoSize = true;
|
||||
this.checkBoxAutostart.Location = new System.Drawing.Point(6, 19);
|
||||
this.checkBoxAutostart.Name = "checkBoxAutostart";
|
||||
this.checkBoxAutostart.Size = new System.Drawing.Size(182, 17);
|
||||
this.checkBoxAutostart.TabIndex = 0;
|
||||
this.checkBoxAutostart.Text = "Automatically Start with Windows";
|
||||
this.checkBoxAutostart.UseVisualStyleBackColor = true;
|
||||
this.checkBoxAutostart.CheckedChanged += new System.EventHandler(this.checkBoxAutostart_CheckedChanged);
|
||||
//
|
||||
// notifyIcon
|
||||
//
|
||||
this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
|
||||
this.notifyIcon.BalloonTipText = "Meeting Clock was minimized to the tray";
|
||||
this.notifyIcon.BalloonTipTitle = "Minimized to Tray";
|
||||
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon")));
|
||||
this.notifyIcon.Text = "Meeting Clock";
|
||||
this.notifyIcon.Visible = true;
|
||||
this.notifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.NotifyIcon_MouseDoubleClick);
|
||||
//
|
||||
// timerEnableBalloon
|
||||
//
|
||||
this.timerEnableBalloon.Enabled = true;
|
||||
this.timerEnableBalloon.Interval = 1000;
|
||||
this.timerEnableBalloon.Tick += new System.EventHandler(this.timerEnableBalloon_Tick);
|
||||
//
|
||||
// groupBoxAppointmentSettings
|
||||
//
|
||||
this.groupBoxAppointmentSettings.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.label2);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.checkBoxIgnoreTentativeAppointments);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.numericUpDownReminderTime);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.labelStartReminderTitle);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.checkBoxIgnoreOutOfOfficeAppointments);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.checkBoxIgnoreFreeAppointments);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.checkBoxIgnoreCancelledAppointments);
|
||||
this.groupBoxAppointmentSettings.Controls.Add(this.checkBoxIgnoreAllDayAppointments);
|
||||
this.groupBoxAppointmentSettings.Location = new System.Drawing.Point(12, 241);
|
||||
this.groupBoxAppointmentSettings.Name = "groupBoxAppointmentSettings";
|
||||
this.groupBoxAppointmentSettings.Size = new System.Drawing.Size(560, 166);
|
||||
this.groupBoxAppointmentSettings.TabIndex = 2;
|
||||
this.groupBoxAppointmentSettings.TabStop = false;
|
||||
this.groupBoxAppointmentSettings.Text = "Appointment Settings";
|
||||
//
|
||||
// checkBoxIgnoreTentativeAppointments
|
||||
//
|
||||
this.checkBoxIgnoreTentativeAppointments.AutoSize = true;
|
||||
this.checkBoxIgnoreTentativeAppointments.Location = new System.Drawing.Point(6, 115);
|
||||
this.checkBoxIgnoreTentativeAppointments.Name = "checkBoxIgnoreTentativeAppointments";
|
||||
this.checkBoxIgnoreTentativeAppointments.Size = new System.Drawing.Size(234, 17);
|
||||
this.checkBoxIgnoreTentativeAppointments.TabIndex = 4;
|
||||
this.checkBoxIgnoreTentativeAppointments.Text = "Ignore Appointments Marked as \"Tentative\"";
|
||||
this.checkBoxIgnoreTentativeAppointments.UseVisualStyleBackColor = true;
|
||||
this.checkBoxIgnoreTentativeAppointments.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreTentativeAppointments_CheckedChanged);
|
||||
//
|
||||
// checkBoxIgnoreOutOfOfficeAppointments
|
||||
//
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.AutoSize = true;
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.Location = new System.Drawing.Point(6, 91);
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.Name = "checkBoxIgnoreOutOfOfficeAppointments";
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.Size = new System.Drawing.Size(249, 17);
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.TabIndex = 3;
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.Text = "Ignore Appointments Marked as \"Out of Office\"";
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.UseVisualStyleBackColor = true;
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreOutOfOfficeAppointments_CheckedChanged);
|
||||
//
|
||||
// checkBoxIgnoreFreeAppointments
|
||||
//
|
||||
this.checkBoxIgnoreFreeAppointments.AutoSize = true;
|
||||
this.checkBoxIgnoreFreeAppointments.Location = new System.Drawing.Point(6, 67);
|
||||
this.checkBoxIgnoreFreeAppointments.Name = "checkBoxIgnoreFreeAppointments";
|
||||
this.checkBoxIgnoreFreeAppointments.Size = new System.Drawing.Size(210, 17);
|
||||
this.checkBoxIgnoreFreeAppointments.TabIndex = 2;
|
||||
this.checkBoxIgnoreFreeAppointments.Text = "Ignore Appointments Marked as \"Free\"";
|
||||
this.checkBoxIgnoreFreeAppointments.UseVisualStyleBackColor = true;
|
||||
this.checkBoxIgnoreFreeAppointments.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreFreeAppointments_CheckedChanged);
|
||||
//
|
||||
// checkBoxIgnoreCancelledAppointments
|
||||
//
|
||||
this.checkBoxIgnoreCancelledAppointments.AutoSize = true;
|
||||
this.checkBoxIgnoreCancelledAppointments.Location = new System.Drawing.Point(6, 43);
|
||||
this.checkBoxIgnoreCancelledAppointments.Name = "checkBoxIgnoreCancelledAppointments";
|
||||
this.checkBoxIgnoreCancelledAppointments.Size = new System.Drawing.Size(173, 17);
|
||||
this.checkBoxIgnoreCancelledAppointments.TabIndex = 1;
|
||||
this.checkBoxIgnoreCancelledAppointments.Text = "Ignore Cancelled Appointments";
|
||||
this.checkBoxIgnoreCancelledAppointments.UseVisualStyleBackColor = true;
|
||||
this.checkBoxIgnoreCancelledAppointments.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreCancelledAppointments_CheckedChanged);
|
||||
//
|
||||
// checkBoxIgnoreAllDayAppointments
|
||||
//
|
||||
this.checkBoxIgnoreAllDayAppointments.AutoSize = true;
|
||||
this.checkBoxIgnoreAllDayAppointments.Location = new System.Drawing.Point(6, 19);
|
||||
this.checkBoxIgnoreAllDayAppointments.Name = "checkBoxIgnoreAllDayAppointments";
|
||||
this.checkBoxIgnoreAllDayAppointments.Size = new System.Drawing.Size(159, 17);
|
||||
this.checkBoxIgnoreAllDayAppointments.TabIndex = 0;
|
||||
this.checkBoxIgnoreAllDayAppointments.Text = "Ignore All-Day Appointments";
|
||||
this.checkBoxIgnoreAllDayAppointments.UseVisualStyleBackColor = true;
|
||||
this.checkBoxIgnoreAllDayAppointments.CheckedChanged += new System.EventHandler(this.checkBoxIgnoreAllDayAppointments_CheckedChanged);
|
||||
//
|
||||
// groupBoxClockSettings
|
||||
//
|
||||
this.groupBoxClockSettings.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.groupBoxClockSettings.Controls.Add(this.buttonResetDefault);
|
||||
this.groupBoxClockSettings.Controls.Add(this.label1);
|
||||
this.groupBoxClockSettings.Controls.Add(this.numericUpDownScrollWait);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelScrollWaitTitle);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelScrollSpeed);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelScrollSpeedTitle);
|
||||
this.groupBoxClockSettings.Controls.Add(this.trackBarScrollSpeed);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelBrightness);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelBrightnessTitle);
|
||||
this.groupBoxClockSettings.Controls.Add(this.trackBarBrightness);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelTemperatureIntervalTitleSeconds);
|
||||
this.groupBoxClockSettings.Controls.Add(this.numericUpDownTemperatureInterval);
|
||||
this.groupBoxClockSettings.Controls.Add(this.checkBoxTemperatureEnabled);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelDateIntervalTitleSeconds);
|
||||
this.groupBoxClockSettings.Controls.Add(this.numericUpDownDateInterval);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelTimeIntervalTitleSeconds);
|
||||
this.groupBoxClockSettings.Controls.Add(this.numericUpDownTimeInterval);
|
||||
this.groupBoxClockSettings.Controls.Add(this.labelTimeIntervalTitle);
|
||||
this.groupBoxClockSettings.Controls.Add(this.checkBoxDateEnabled);
|
||||
this.groupBoxClockSettings.Enabled = false;
|
||||
this.groupBoxClockSettings.Location = new System.Drawing.Point(12, 413);
|
||||
this.groupBoxClockSettings.Name = "groupBoxClockSettings";
|
||||
this.groupBoxClockSettings.Size = new System.Drawing.Size(560, 200);
|
||||
this.groupBoxClockSettings.TabIndex = 3;
|
||||
this.groupBoxClockSettings.TabStop = false;
|
||||
this.groupBoxClockSettings.Text = "Clock Settings";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(227, 170);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(49, 13);
|
||||
this.label1.TabIndex = 18;
|
||||
this.label1.Text = "Seconds";
|
||||
//
|
||||
// numericUpDownScrollWait
|
||||
//
|
||||
this.numericUpDownScrollWait.DecimalPlaces = 1;
|
||||
this.numericUpDownScrollWait.Location = new System.Drawing.Point(162, 166);
|
||||
this.numericUpDownScrollWait.Maximum = new decimal(new int[] {
|
||||
255,
|
||||
0,
|
||||
0,
|
||||
65536});
|
||||
this.numericUpDownScrollWait.Name = "numericUpDownScrollWait";
|
||||
this.numericUpDownScrollWait.Size = new System.Drawing.Size(63, 20);
|
||||
this.numericUpDownScrollWait.TabIndex = 17;
|
||||
this.numericUpDownScrollWait.Value = new decimal(new int[] {
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownScrollWait.ValueChanged += new System.EventHandler(this.numericUpDownScrollWait_ValueChanged);
|
||||
//
|
||||
// labelScrollWaitTitle
|
||||
//
|
||||
this.labelScrollWaitTitle.AutoSize = true;
|
||||
this.labelScrollWaitTitle.Location = new System.Drawing.Point(6, 170);
|
||||
this.labelScrollWaitTitle.Name = "labelScrollWaitTitle";
|
||||
this.labelScrollWaitTitle.Size = new System.Drawing.Size(106, 13);
|
||||
this.labelScrollWaitTitle.TabIndex = 16;
|
||||
this.labelScrollWaitTitle.Text = "Wait Before Scrolling";
|
||||
//
|
||||
// labelScrollSpeed
|
||||
//
|
||||
this.labelScrollSpeed.AutoSize = true;
|
||||
this.labelScrollSpeed.Location = new System.Drawing.Point(503, 131);
|
||||
this.labelScrollSpeed.Name = "labelScrollSpeed";
|
||||
this.labelScrollSpeed.Size = new System.Drawing.Size(13, 13);
|
||||
this.labelScrollSpeed.TabIndex = 15;
|
||||
this.labelScrollSpeed.Text = "5";
|
||||
//
|
||||
// labelScrollSpeedTitle
|
||||
//
|
||||
this.labelScrollSpeedTitle.AutoSize = true;
|
||||
this.labelScrollSpeedTitle.Location = new System.Drawing.Point(6, 131);
|
||||
this.labelScrollSpeedTitle.Name = "labelScrollSpeedTitle";
|
||||
this.labelScrollSpeedTitle.Size = new System.Drawing.Size(67, 13);
|
||||
this.labelScrollSpeedTitle.TabIndex = 14;
|
||||
this.labelScrollSpeedTitle.Text = "Scroll Speed";
|
||||
//
|
||||
// trackBarScrollSpeed
|
||||
//
|
||||
this.trackBarScrollSpeed.Location = new System.Drawing.Point(162, 126);
|
||||
this.trackBarScrollSpeed.Maximum = 100;
|
||||
this.trackBarScrollSpeed.Name = "trackBarScrollSpeed";
|
||||
this.trackBarScrollSpeed.Size = new System.Drawing.Size(334, 45);
|
||||
this.trackBarScrollSpeed.TabIndex = 13;
|
||||
this.trackBarScrollSpeed.TickFrequency = 5;
|
||||
this.trackBarScrollSpeed.Value = 5;
|
||||
this.trackBarScrollSpeed.ValueChanged += new System.EventHandler(this.trackBarScrollSpeed_ValueChanged);
|
||||
//
|
||||
// labelBrightness
|
||||
//
|
||||
this.labelBrightness.AutoSize = true;
|
||||
this.labelBrightness.Location = new System.Drawing.Point(503, 93);
|
||||
this.labelBrightness.Name = "labelBrightness";
|
||||
this.labelBrightness.Size = new System.Drawing.Size(19, 13);
|
||||
this.labelBrightness.TabIndex = 12;
|
||||
this.labelBrightness.Text = "15";
|
||||
//
|
||||
// labelBrightnessTitle
|
||||
//
|
||||
this.labelBrightnessTitle.AutoSize = true;
|
||||
this.labelBrightnessTitle.Location = new System.Drawing.Point(6, 93);
|
||||
this.labelBrightnessTitle.Name = "labelBrightnessTitle";
|
||||
this.labelBrightnessTitle.Size = new System.Drawing.Size(56, 13);
|
||||
this.labelBrightnessTitle.TabIndex = 11;
|
||||
this.labelBrightnessTitle.Text = "Brightness";
|
||||
//
|
||||
// trackBarBrightness
|
||||
//
|
||||
this.trackBarBrightness.Location = new System.Drawing.Point(162, 88);
|
||||
this.trackBarBrightness.Maximum = 15;
|
||||
this.trackBarBrightness.Minimum = 1;
|
||||
this.trackBarBrightness.Name = "trackBarBrightness";
|
||||
this.trackBarBrightness.Size = new System.Drawing.Size(334, 45);
|
||||
this.trackBarBrightness.TabIndex = 10;
|
||||
this.trackBarBrightness.Value = 15;
|
||||
this.trackBarBrightness.ValueChanged += new System.EventHandler(this.trackBarBrightness_ValueChanged);
|
||||
//
|
||||
// labelTemperatureIntervalTitleSeconds
|
||||
//
|
||||
this.labelTemperatureIntervalTitleSeconds.AutoSize = true;
|
||||
this.labelTemperatureIntervalTitleSeconds.Location = new System.Drawing.Point(227, 68);
|
||||
this.labelTemperatureIntervalTitleSeconds.Name = "labelTemperatureIntervalTitleSeconds";
|
||||
this.labelTemperatureIntervalTitleSeconds.Size = new System.Drawing.Size(49, 13);
|
||||
this.labelTemperatureIntervalTitleSeconds.TabIndex = 9;
|
||||
this.labelTemperatureIntervalTitleSeconds.Text = "Seconds";
|
||||
//
|
||||
// numericUpDownTemperatureInterval
|
||||
//
|
||||
this.numericUpDownTemperatureInterval.Location = new System.Drawing.Point(162, 64);
|
||||
this.numericUpDownTemperatureInterval.Maximum = new decimal(new int[] {
|
||||
255,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTemperatureInterval.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTemperatureInterval.Name = "numericUpDownTemperatureInterval";
|
||||
this.numericUpDownTemperatureInterval.Size = new System.Drawing.Size(63, 20);
|
||||
this.numericUpDownTemperatureInterval.TabIndex = 8;
|
||||
this.numericUpDownTemperatureInterval.Value = new decimal(new int[] {
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTemperatureInterval.ValueChanged += new System.EventHandler(this.numericUpDownTemperatureInterval_ValueChanged);
|
||||
//
|
||||
// checkBoxTemperatureEnabled
|
||||
//
|
||||
this.checkBoxTemperatureEnabled.AutoSize = true;
|
||||
this.checkBoxTemperatureEnabled.Location = new System.Drawing.Point(6, 66);
|
||||
this.checkBoxTemperatureEnabled.Name = "checkBoxTemperatureEnabled";
|
||||
this.checkBoxTemperatureEnabled.Size = new System.Drawing.Size(149, 17);
|
||||
this.checkBoxTemperatureEnabled.TabIndex = 7;
|
||||
this.checkBoxTemperatureEnabled.Text = "Show the Temperature for";
|
||||
this.checkBoxTemperatureEnabled.UseVisualStyleBackColor = true;
|
||||
this.checkBoxTemperatureEnabled.CheckedChanged += new System.EventHandler(this.checkBoxTemperatureEnabled_CheckedChanged);
|
||||
//
|
||||
// labelDateIntervalTitleSeconds
|
||||
//
|
||||
this.labelDateIntervalTitleSeconds.AutoSize = true;
|
||||
this.labelDateIntervalTitleSeconds.Location = new System.Drawing.Point(227, 45);
|
||||
this.labelDateIntervalTitleSeconds.Name = "labelDateIntervalTitleSeconds";
|
||||
this.labelDateIntervalTitleSeconds.Size = new System.Drawing.Size(49, 13);
|
||||
this.labelDateIntervalTitleSeconds.TabIndex = 6;
|
||||
this.labelDateIntervalTitleSeconds.Text = "Seconds";
|
||||
//
|
||||
// numericUpDownDateInterval
|
||||
//
|
||||
this.numericUpDownDateInterval.Location = new System.Drawing.Point(162, 41);
|
||||
this.numericUpDownDateInterval.Maximum = new decimal(new int[] {
|
||||
255,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownDateInterval.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownDateInterval.Name = "numericUpDownDateInterval";
|
||||
this.numericUpDownDateInterval.Size = new System.Drawing.Size(63, 20);
|
||||
this.numericUpDownDateInterval.TabIndex = 5;
|
||||
this.numericUpDownDateInterval.Value = new decimal(new int[] {
|
||||
3,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownDateInterval.ValueChanged += new System.EventHandler(this.numericUpDownDateInterval_ValueChanged);
|
||||
//
|
||||
// labelTimeIntervalTitleSeconds
|
||||
//
|
||||
this.labelTimeIntervalTitleSeconds.AutoSize = true;
|
||||
this.labelTimeIntervalTitleSeconds.Location = new System.Drawing.Point(227, 22);
|
||||
this.labelTimeIntervalTitleSeconds.Name = "labelTimeIntervalTitleSeconds";
|
||||
this.labelTimeIntervalTitleSeconds.Size = new System.Drawing.Size(49, 13);
|
||||
this.labelTimeIntervalTitleSeconds.TabIndex = 4;
|
||||
this.labelTimeIntervalTitleSeconds.Text = "Seconds";
|
||||
//
|
||||
// numericUpDownTimeInterval
|
||||
//
|
||||
this.numericUpDownTimeInterval.Location = new System.Drawing.Point(162, 18);
|
||||
this.numericUpDownTimeInterval.Maximum = new decimal(new int[] {
|
||||
255,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTimeInterval.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTimeInterval.Name = "numericUpDownTimeInterval";
|
||||
this.numericUpDownTimeInterval.Size = new System.Drawing.Size(63, 20);
|
||||
this.numericUpDownTimeInterval.TabIndex = 3;
|
||||
this.numericUpDownTimeInterval.Value = new decimal(new int[] {
|
||||
35,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownTimeInterval.ValueChanged += new System.EventHandler(this.numericUpDownTimeInterval_ValueChanged);
|
||||
//
|
||||
// labelTimeIntervalTitle
|
||||
//
|
||||
this.labelTimeIntervalTitle.AutoSize = true;
|
||||
this.labelTimeIntervalTitle.Location = new System.Drawing.Point(6, 22);
|
||||
this.labelTimeIntervalTitle.Name = "labelTimeIntervalTitle";
|
||||
this.labelTimeIntervalTitle.Size = new System.Drawing.Size(93, 13);
|
||||
this.labelTimeIntervalTitle.TabIndex = 2;
|
||||
this.labelTimeIntervalTitle.Text = "Show the Time for";
|
||||
//
|
||||
// checkBoxDateEnabled
|
||||
//
|
||||
this.checkBoxDateEnabled.AutoSize = true;
|
||||
this.checkBoxDateEnabled.Location = new System.Drawing.Point(6, 43);
|
||||
this.checkBoxDateEnabled.Name = "checkBoxDateEnabled";
|
||||
this.checkBoxDateEnabled.Size = new System.Drawing.Size(112, 17);
|
||||
this.checkBoxDateEnabled.TabIndex = 1;
|
||||
this.checkBoxDateEnabled.Text = "Show the Date for";
|
||||
this.checkBoxDateEnabled.UseVisualStyleBackColor = true;
|
||||
this.checkBoxDateEnabled.CheckedChanged += new System.EventHandler(this.checkBoxDateEnabled_CheckedChanged);
|
||||
//
|
||||
// timerScrollDemo
|
||||
//
|
||||
this.timerScrollDemo.Interval = 10000;
|
||||
this.timerScrollDemo.Tick += new System.EventHandler(this.timerScrollDemo_Tick);
|
||||
//
|
||||
// buttonResetDefault
|
||||
//
|
||||
this.buttonResetDefault.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonResetDefault.Location = new System.Drawing.Point(392, 18);
|
||||
this.buttonResetDefault.Name = "buttonResetDefault";
|
||||
this.buttonResetDefault.Size = new System.Drawing.Size(162, 43);
|
||||
this.buttonResetDefault.TabIndex = 19;
|
||||
this.buttonResetDefault.Text = "Reset All to Default";
|
||||
this.buttonResetDefault.UseVisualStyleBackColor = true;
|
||||
this.buttonResetDefault.Click += new System.EventHandler(this.buttonResetDefault_Click);
|
||||
//
|
||||
// timerAdjustClock
|
||||
//
|
||||
this.timerAdjustClock.Enabled = true;
|
||||
this.timerAdjustClock.Interval = 7200000;
|
||||
this.timerAdjustClock.Tick += new System.EventHandler(this.timerAdjustClock_Tick);
|
||||
//
|
||||
// timerGetAppointment
|
||||
//
|
||||
this.timerGetAppointment.Enabled = true;
|
||||
this.timerGetAppointment.Interval = 60000;
|
||||
this.timerGetAppointment.Tick += new System.EventHandler(this.timerGetAppointment_Tick);
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(227, 142);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(188, 13);
|
||||
this.label2.TabIndex = 22;
|
||||
this.label2.Text = "Minutes Before the Appointment Starts";
|
||||
//
|
||||
// numericUpDownReminderTime
|
||||
//
|
||||
this.numericUpDownReminderTime.Location = new System.Drawing.Point(162, 138);
|
||||
this.numericUpDownReminderTime.Maximum = new decimal(new int[] {
|
||||
60,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownReminderTime.Minimum = new decimal(new int[] {
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownReminderTime.Name = "numericUpDownReminderTime";
|
||||
this.numericUpDownReminderTime.Size = new System.Drawing.Size(63, 20);
|
||||
this.numericUpDownReminderTime.TabIndex = 21;
|
||||
this.numericUpDownReminderTime.Value = new decimal(new int[] {
|
||||
10,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.numericUpDownReminderTime.ValueChanged += new System.EventHandler(this.numericUpDownReminderTime_ValueChanged);
|
||||
//
|
||||
// labelStartReminderTitle
|
||||
//
|
||||
this.labelStartReminderTitle.AutoSize = true;
|
||||
this.labelStartReminderTitle.Location = new System.Drawing.Point(6, 142);
|
||||
this.labelStartReminderTitle.Name = "labelStartReminderTitle";
|
||||
this.labelStartReminderTitle.Size = new System.Drawing.Size(149, 13);
|
||||
this.labelStartReminderTitle.TabIndex = 20;
|
||||
this.labelStartReminderTitle.Text = "Show Appointment Reminders";
|
||||
//
|
||||
// MainWindow
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(584, 641);
|
||||
this.Controls.Add(this.groupBoxClockSettings);
|
||||
this.Controls.Add(this.groupBoxAppointmentSettings);
|
||||
this.Controls.Add(this.groupBoxApplicationSettings);
|
||||
this.Controls.Add(this.groupBoxState);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.MaximumSize = new System.Drawing.Size(800, 800);
|
||||
this.MinimumSize = new System.Drawing.Size(600, 680);
|
||||
this.Name = "MainWindow";
|
||||
this.Text = "Meeting Clock";
|
||||
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainWindow_FormClosed);
|
||||
this.Load += new System.EventHandler(this.MainWindow_Load);
|
||||
this.Resize += new System.EventHandler(this.MainWindow_Resize);
|
||||
this.groupBoxState.ResumeLayout(false);
|
||||
this.groupBoxState.PerformLayout();
|
||||
this.groupBoxApplicationSettings.ResumeLayout(false);
|
||||
this.groupBoxApplicationSettings.PerformLayout();
|
||||
this.groupBoxAppointmentSettings.ResumeLayout(false);
|
||||
this.groupBoxAppointmentSettings.PerformLayout();
|
||||
this.groupBoxClockSettings.ResumeLayout(false);
|
||||
this.groupBoxClockSettings.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownScrollWait)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBarScrollSpeed)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.trackBarBrightness)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTemperatureInterval)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownDateInterval)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeInterval)).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.numericUpDownReminderTime)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.GroupBox groupBoxState;
|
||||
private System.Windows.Forms.Label labelBluetoothState;
|
||||
private System.Windows.Forms.Label labelBluetoothStateTitle;
|
||||
private System.Windows.Forms.Button buttonOpenSystemSettingsPrivacy;
|
||||
private System.Windows.Forms.Button buttonEnableBluetooth;
|
||||
private System.Windows.Forms.Label labelMeetingClockState;
|
||||
private System.Windows.Forms.Label labelMeetingClockStateTitle;
|
||||
private System.Windows.Forms.Button buttonOpenSystemSettingsBluetooth;
|
||||
private System.Windows.Forms.Button buttonWebsite;
|
||||
private System.Windows.Forms.GroupBox groupBoxApplicationSettings;
|
||||
private System.Windows.Forms.CheckBox checkBoxEnableBluetooth;
|
||||
private System.Windows.Forms.CheckBox checkBoxCheckForUpdates;
|
||||
private System.Windows.Forms.CheckBox checkBoxStartMinimized;
|
||||
private System.Windows.Forms.CheckBox checkBoxAutostart;
|
||||
private System.Windows.Forms.NotifyIcon notifyIcon;
|
||||
private System.Windows.Forms.Timer timerEnableBalloon;
|
||||
private System.Windows.Forms.GroupBox groupBoxAppointmentSettings;
|
||||
private System.Windows.Forms.CheckBox checkBoxIgnoreAllDayAppointments;
|
||||
private System.Windows.Forms.CheckBox checkBoxIgnoreCancelledAppointments;
|
||||
private System.Windows.Forms.CheckBox checkBoxIgnoreFreeAppointments;
|
||||
private System.Windows.Forms.CheckBox checkBoxIgnoreOutOfOfficeAppointments;
|
||||
private System.Windows.Forms.CheckBox checkBoxIgnoreTentativeAppointments;
|
||||
private System.Windows.Forms.GroupBox groupBoxClockSettings;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownScrollWait;
|
||||
private System.Windows.Forms.Label labelScrollWaitTitle;
|
||||
private System.Windows.Forms.Label labelScrollSpeed;
|
||||
private System.Windows.Forms.Label labelScrollSpeedTitle;
|
||||
private System.Windows.Forms.TrackBar trackBarScrollSpeed;
|
||||
private System.Windows.Forms.Label labelBrightness;
|
||||
private System.Windows.Forms.Label labelBrightnessTitle;
|
||||
private System.Windows.Forms.TrackBar trackBarBrightness;
|
||||
private System.Windows.Forms.Label labelTemperatureIntervalTitleSeconds;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownTemperatureInterval;
|
||||
private System.Windows.Forms.CheckBox checkBoxTemperatureEnabled;
|
||||
private System.Windows.Forms.Label labelDateIntervalTitleSeconds;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownDateInterval;
|
||||
private System.Windows.Forms.Label labelTimeIntervalTitleSeconds;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownTimeInterval;
|
||||
private System.Windows.Forms.Label labelTimeIntervalTitle;
|
||||
private System.Windows.Forms.CheckBox checkBoxDateEnabled;
|
||||
private System.Windows.Forms.Timer timerScrollDemo;
|
||||
private System.Windows.Forms.Button buttonResetDefault;
|
||||
private System.Windows.Forms.Timer timerAdjustClock;
|
||||
private System.Windows.Forms.Timer timerGetAppointment;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.NumericUpDown numericUpDownReminderTime;
|
||||
private System.Windows.Forms.Label labelStartReminderTitle;
|
||||
}
|
||||
}
|
563
MainWindow.cs
Normal file
563
MainWindow.cs
Normal file
@ -0,0 +1,563 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Net.Http;
|
||||
using System.Windows.Forms;
|
||||
using Outlook = Microsoft.Office.Interop.Outlook;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
public partial class MainWindow : Form
|
||||
{
|
||||
private readonly string LINK_URL = "https://zechert.net/meeting-clock";
|
||||
private readonly string LINK_URL_UPDATE = "https://zechert.net/meeting-clock/update.txt";
|
||||
|
||||
private BluetoothManager bluetoothManager;
|
||||
private MeetingClockManager meetingClockManager;
|
||||
private readonly HttpClient client = new HttpClient();
|
||||
private string clockVersion = null;
|
||||
private Settings settings = new Settings();
|
||||
private bool showBalloon = false;
|
||||
private OutlookManager outlookManager = new OutlookManager();
|
||||
private bool clockSettingsCanBeChanged;
|
||||
private string currentAppointment = "";
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Text += " - " + Properties.Settings.Default.Version;
|
||||
}
|
||||
|
||||
private async void MainWindow_Load(object sender, System.EventArgs e)
|
||||
{
|
||||
this.clockSettingsCanBeChanged = false;
|
||||
this.checkBoxAutostart.Checked = this.settings.Autostart;
|
||||
this.checkBoxStartMinimized.Checked = this.settings.StartMinimized;
|
||||
this.checkBoxCheckForUpdates.Checked = this.settings.CheckForUpdates;
|
||||
this.checkBoxEnableBluetooth.Checked = this.settings.StartBluetooth;
|
||||
this.checkBoxIgnoreAllDayAppointments.Checked = this.settings.IgnoreAllDayAppointments;
|
||||
this.checkBoxIgnoreCancelledAppointments.Checked = this.settings.IgnoreCancelledAppointments;
|
||||
this.checkBoxIgnoreFreeAppointments.Checked = this.settings.IgnoreFreeAppointments;
|
||||
this.checkBoxIgnoreOutOfOfficeAppointments.Checked = this.settings.IgnoreOutOfOfficeAppointments;
|
||||
this.checkBoxIgnoreTentativeAppointments.Checked = this.settings.IgnoreTentativeAppointments;
|
||||
this.numericUpDownReminderTime.Value = this.settings.ReminderTime;
|
||||
|
||||
if (this.settings.StartMinimized)
|
||||
{
|
||||
this.WindowState = FormWindowState.Minimized;
|
||||
}
|
||||
|
||||
if (this.settings.CheckForUpdates)
|
||||
{
|
||||
this.CheckForUpdate();
|
||||
}
|
||||
|
||||
this.bluetoothManager = new BluetoothManager();
|
||||
this.bluetoothManager.StateChanged += BluetoothManager_StateChanged;
|
||||
|
||||
this.meetingClockManager = new MeetingClockManager(bluetoothManager);
|
||||
this.meetingClockManager.StateChanged += MeetingClockManager_StateChanged;
|
||||
|
||||
await this.bluetoothManager.Initialize();
|
||||
|
||||
if (this.settings.StartBluetooth && this.bluetoothManager.State != BluetoothManager.BluetoothState.On)
|
||||
{
|
||||
await this.bluetoothManager.Enable();
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateBluetoothState()
|
||||
{
|
||||
switch (this.bluetoothManager.State)
|
||||
{
|
||||
case BluetoothManager.BluetoothState.NotInitialized:
|
||||
this.labelBluetoothState.Text = "not initialized";
|
||||
this.labelBluetoothState.ForeColor = SystemColors.ControlText;
|
||||
this.UpdateIcon(Properties.Resources.icon_neutral);
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.Exception:
|
||||
this.labelBluetoothState.Text = "system exception";
|
||||
this.labelBluetoothState.ForeColor = Color.Red;
|
||||
this.UpdateIcon(Properties.Resources.icon_error);
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
ShowArchitectureWarning();
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.NoBluetoothAdapter:
|
||||
this.labelBluetoothState.Text = "no bluetooth adapter found";
|
||||
this.labelBluetoothState.ForeColor = Color.Red;
|
||||
this.UpdateIcon(Properties.Resources.icon_error);
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.NoBluetoothRadio:
|
||||
this.labelBluetoothState.Text = "no bluetooth radio found";
|
||||
this.labelBluetoothState.ForeColor = Color.Red;
|
||||
this.UpdateIcon(Properties.Resources.icon_error);
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.Disabled:
|
||||
this.labelBluetoothState.Text = "disabled";
|
||||
this.labelBluetoothState.ForeColor = SystemColors.ControlText;
|
||||
this.UpdateIcon(Properties.Resources.icon_warning);
|
||||
this.buttonEnableBluetooth.Enabled = true;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.Off:
|
||||
this.labelBluetoothState.Text = "off";
|
||||
this.labelBluetoothState.ForeColor = Color.DarkOrange;
|
||||
this.UpdateIcon(Properties.Resources.icon_warning);
|
||||
this.buttonEnableBluetooth.Enabled = true;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.On:
|
||||
this.labelBluetoothState.Text = "on";
|
||||
this.UpdateIcon(Properties.Resources.icon_neutral);
|
||||
this.labelBluetoothState.ForeColor = Color.Green;
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
break;
|
||||
case BluetoothManager.BluetoothState.Unknown:
|
||||
this.labelBluetoothState.Text = "unknown";
|
||||
this.UpdateIcon(Properties.Resources.icon_off);
|
||||
this.labelBluetoothState.ForeColor = SystemColors.ControlText;
|
||||
this.buttonEnableBluetooth.Enabled = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void BluetoothManager_StateChanged(BluetoothManager manager, BluetoothManager.BluetoothState oldState, BluetoothManager.BluetoothState newState)
|
||||
{
|
||||
this.BeginInvoke((Action) (() => { this.UpdateBluetoothState(); }));
|
||||
}
|
||||
|
||||
private void UpdateMeetingClockState()
|
||||
{
|
||||
this.clockSettingsCanBeChanged = false;
|
||||
switch (this.meetingClockManager.State)
|
||||
{
|
||||
case MeetingClockManager.MeetingClockState.NotInitialized:
|
||||
this.labelMeetingClockState.Text = "not initialized";
|
||||
this.labelMeetingClockState.ForeColor = SystemColors.ControlText;
|
||||
this.UpdateIcon(Properties.Resources.icon_neutral);
|
||||
this.groupBoxClockSettings.Enabled = false;
|
||||
break;
|
||||
case MeetingClockManager.MeetingClockState.NoComPort:
|
||||
if (this.bluetoothManager.State == BluetoothManager.BluetoothState.On)
|
||||
{
|
||||
this.labelMeetingClockState.Text = "not paired";
|
||||
}
|
||||
else
|
||||
{
|
||||
this.labelMeetingClockState.Text = "bluetooth disabled";
|
||||
}
|
||||
this.labelMeetingClockState.ForeColor = Color.Red;
|
||||
this.UpdateIcon(Properties.Resources.icon_error);
|
||||
this.groupBoxClockSettings.Enabled = false;
|
||||
break;
|
||||
case MeetingClockManager.MeetingClockState.Disconnected:
|
||||
this.labelMeetingClockState.Text = "not connected";
|
||||
this.labelMeetingClockState.ForeColor = Color.DarkOrange;
|
||||
this.UpdateIcon(Properties.Resources.icon_neutral);
|
||||
this.groupBoxClockSettings.Enabled = false;
|
||||
break;
|
||||
case MeetingClockManager.MeetingClockState.Connected:
|
||||
this.labelMeetingClockState.Text = "connected on " + this.meetingClockManager.Port + ", " + this.meetingClockManager.Version;
|
||||
this.labelMeetingClockState.ForeColor = Color.Green;
|
||||
this.UpdateIcon(Properties.Resources.icon_ok);
|
||||
if (this.clockVersion != null && this.meetingClockManager.Version != this.clockVersion)
|
||||
{
|
||||
DialogResult result = MessageBox.Show("A new version of the meeting clock firmware is available.\n\n" +
|
||||
"Do you want to open " + LINK_URL + " to download the new version now?", "New Firmware Available", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
System.Diagnostics.Process.Start(LINK_URL);
|
||||
}
|
||||
}
|
||||
this.groupBoxClockSettings.Enabled = true;
|
||||
this.ReadClockSettings();
|
||||
this.ShowNextAppointment();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void MeetingClockManager_StateChanged(MeetingClockManager manager, MeetingClockManager.MeetingClockState oldState, MeetingClockManager.MeetingClockState newState)
|
||||
{
|
||||
this.BeginInvoke((Action)(() => { this.UpdateMeetingClockState(); }));
|
||||
}
|
||||
|
||||
private void ShowArchitectureWarning()
|
||||
{
|
||||
String computerArchitecture = Environment.Is64BitOperatingSystem ? "x64" : "x86";
|
||||
String programArchitecture = Environment.Is64BitProcess ? "x64" : "x86";
|
||||
|
||||
String message = "" +
|
||||
"This application cannot access the Bluetooth device on your computer. " +
|
||||
"This is normally a sign that you downloaded the wrong architecture (x64, x86) of this application.\n" +
|
||||
"\n" +
|
||||
"Your computer uses " + computerArchitecture + " architecture.\n" +
|
||||
"This application is " + programArchitecture + " architecture.\n" +
|
||||
"\n" +
|
||||
"This application will only work on Windows 10.\n\n" +
|
||||
"Please download the correct version of this application from " + LINK_URL + ".\n" +
|
||||
"\n" +
|
||||
"This application will now exit!\n" +
|
||||
"\n" +
|
||||
"Do you want to open " + LINK_URL + " now?";
|
||||
|
||||
DialogResult result = MessageBox.Show(message, "Bluetooth Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
System.Diagnostics.Process.Start(LINK_URL);
|
||||
}
|
||||
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
private void ButtonOpenSystemSettingsPrivacy_Click(object sender, EventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("ms-settings:privacy-radios");
|
||||
}
|
||||
|
||||
private void buttonOpenSystemSettingsBluetooth_Click(object sender, EventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start("ms-settings:bluetooth");
|
||||
}
|
||||
|
||||
private void buttonWebsite_Click(object sender, EventArgs e)
|
||||
{
|
||||
System.Diagnostics.Process.Start(LINK_URL);
|
||||
}
|
||||
|
||||
private async void ButtonEnableBluetooth_Click(object sender, EventArgs e)
|
||||
{
|
||||
Windows.Devices.Radios.RadioAccessStatus result = await this.bluetoothManager.Enable();
|
||||
DialogResult open = DialogResult.Cancel;
|
||||
String openLink = "";
|
||||
|
||||
switch (result)
|
||||
{
|
||||
case Windows.Devices.Radios.RadioAccessStatus.DeniedBySystem:
|
||||
open = MessageBox.Show(
|
||||
"The operating system denied access to the bluetooth radio. Please enable bluetooth yourself.\n\nDo you want to open bluetooth settings now?",
|
||||
"Access denied", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
|
||||
openLink = "ms-settings:bluetooth";
|
||||
break;
|
||||
case Windows.Devices.Radios.RadioAccessStatus.DeniedByUser:
|
||||
open = MessageBox.Show(
|
||||
"Switching the bluetooth state automatically is forbidden by your privacy settings.\n\nDo you want to open privacy settings now?",
|
||||
"Access denied", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
|
||||
openLink = "ms-settings:privacy-radios";
|
||||
break;
|
||||
case Windows.Devices.Radios.RadioAccessStatus.Unspecified:
|
||||
open = MessageBox.Show(
|
||||
"Switching the bluetooth state failed for an unknown reason. Please enable bluetooth yourself.\n\nDo you want to open bluetooth settings now?",
|
||||
"Access denied", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
|
||||
openLink = "ms-settings:bluetooth";
|
||||
break;
|
||||
}
|
||||
|
||||
if (open == DialogResult.Yes)
|
||||
{
|
||||
System.Diagnostics.Process.Start(openLink);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateIcon(Icon newIcon)
|
||||
{
|
||||
this.Icon = newIcon;
|
||||
this.notifyIcon.Icon = newIcon;
|
||||
}
|
||||
|
||||
private async void CheckForUpdate()
|
||||
{
|
||||
HttpResponseMessage response = await this.client.GetAsync(LINK_URL_UPDATE);
|
||||
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
string responseBody = await response.Content.ReadAsStringAsync();
|
||||
string[] versions = responseBody.Split('\n');
|
||||
Debug.WriteLine(String.Format("Versions available:\n{0}", responseBody));
|
||||
|
||||
if (versions.Length >= 2)
|
||||
{
|
||||
string winVersion = versions[0].Trim();
|
||||
this.clockVersion = versions[1].Trim();
|
||||
|
||||
if (winVersion != Properties.Settings.Default.Version)
|
||||
{
|
||||
DialogResult result = MessageBox.Show("A new version of this software is available.\n\n" +
|
||||
"Do you want to open " + LINK_URL + " to download the new version now?", "New Version Available", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
System.Diagnostics.Process.Start(LINK_URL);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
Debug.WriteLine(String.Format("Check for update failed: {0}", response.StatusCode));
|
||||
}
|
||||
}
|
||||
|
||||
private void MainWindow_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Form was closed because of {0}", e.CloseReason.ToString()));
|
||||
this.bluetoothManager.Stop();
|
||||
this.meetingClockManager.Stop();
|
||||
}
|
||||
|
||||
private void checkBoxAutostart_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.Autostart = this.checkBoxAutostart.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxStartMinimized_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.StartMinimized = this.checkBoxStartMinimized.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxCheckForUpdates_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.CheckForUpdates = this.checkBoxCheckForUpdates.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxEnableBluetooth_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.StartBluetooth = this.checkBoxEnableBluetooth.Checked;
|
||||
}
|
||||
|
||||
private void MainWindow_Resize(object sender, EventArgs e)
|
||||
{
|
||||
if (this.WindowState == FormWindowState.Minimized)
|
||||
{
|
||||
if (this.showBalloon)
|
||||
{
|
||||
this.notifyIcon.ShowBalloonTip(3000);
|
||||
}
|
||||
this.ShowInTaskbar = false;
|
||||
this.FormBorderStyle = FormBorderStyle.SizableToolWindow;
|
||||
}
|
||||
}
|
||||
|
||||
private void NotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
|
||||
{
|
||||
this.FormBorderStyle = FormBorderStyle.Sizable;
|
||||
this.WindowState = FormWindowState.Normal;
|
||||
this.ShowInTaskbar = true;
|
||||
}
|
||||
|
||||
private void timerEnableBalloon_Tick(object sender, EventArgs e)
|
||||
{
|
||||
this.showBalloon = true;
|
||||
this.timerEnableBalloon.Stop();
|
||||
}
|
||||
|
||||
private void checkBoxIgnoreAllDayAppointments_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.IgnoreAllDayAppointments = this.checkBoxIgnoreAllDayAppointments.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxIgnoreCancelledAppointments_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.IgnoreCancelledAppointments = this.checkBoxIgnoreCancelledAppointments.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxIgnoreFreeAppointments_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.IgnoreFreeAppointments = this.checkBoxIgnoreFreeAppointments.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxIgnoreOutOfOfficeAppointments_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.IgnoreOutOfOfficeAppointments = this.checkBoxIgnoreOutOfOfficeAppointments.Checked;
|
||||
}
|
||||
|
||||
private void checkBoxIgnoreTentativeAppointments_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.IgnoreTentativeAppointments = this.checkBoxIgnoreTentativeAppointments.Checked;
|
||||
}
|
||||
|
||||
private void ReadClockSettings()
|
||||
{
|
||||
this.numericUpDownTimeInterval.Value = this.meetingClockManager.GetTimeInterval() ?? this.numericUpDownTimeInterval.Value;
|
||||
this.numericUpDownDateInterval.Value = this.meetingClockManager.GetDateInterval() ?? this.numericUpDownDateInterval.Value;
|
||||
this.numericUpDownTemperatureInterval.Value = this.meetingClockManager.GetTemperatureInterval() ?? this.numericUpDownTemperatureInterval.Value;
|
||||
|
||||
this.trackBarBrightness.Value = this.meetingClockManager.GetBrightness() ?? this.trackBarBrightness.Value;
|
||||
this.labelBrightness.Text = this.trackBarBrightness.Value.ToString();
|
||||
|
||||
this.trackBarScrollSpeed.Value = this.meetingClockManager.GetScrollSpeed() ?? this.trackBarScrollSpeed.Value;
|
||||
this.labelScrollSpeed.Text = this.trackBarScrollSpeed.Value.ToString();
|
||||
|
||||
this.numericUpDownScrollWait.Value = (this.meetingClockManager.GetScrollWait() / 10) ?? this.numericUpDownScrollWait.Value;
|
||||
|
||||
this.checkBoxDateEnabled.Checked = this.meetingClockManager.GetDateEnabled() ?? this.checkBoxDateEnabled.Checked;
|
||||
this.checkBoxTemperatureEnabled.Checked = this.meetingClockManager.GetTemperatureEnabled() ?? this.checkBoxTemperatureEnabled.Checked;
|
||||
|
||||
this.clockSettingsCanBeChanged = true;
|
||||
}
|
||||
|
||||
private void trackBarBrightness_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.labelBrightness.Text = trackBarBrightness.Value.ToString();
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetBrightness(trackBarBrightness.Value);
|
||||
}
|
||||
}
|
||||
|
||||
private void trackBarScrollSpeed_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.labelScrollSpeed.Text = trackBarScrollSpeed.Value.ToString();
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetScrollSpeed(trackBarScrollSpeed.Value);
|
||||
this.StartScrollDemo();
|
||||
}
|
||||
}
|
||||
|
||||
private void numericUpDownScrollWait_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetScrollWait((int)(this.numericUpDownScrollWait.Value * 10));
|
||||
this.StartScrollDemo();
|
||||
}
|
||||
}
|
||||
|
||||
private void StartScrollDemo()
|
||||
{
|
||||
if (this.timerScrollDemo.Enabled)
|
||||
{
|
||||
this.timerScrollDemo.Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.meetingClockManager.ScrollText("Beispiel-Text");
|
||||
}
|
||||
|
||||
this.timerScrollDemo.Start();
|
||||
}
|
||||
|
||||
private void timerScrollDemo_Tick(object sender, EventArgs e)
|
||||
{
|
||||
this.meetingClockManager.ScrollText("");
|
||||
timerScrollDemo.Stop();
|
||||
}
|
||||
|
||||
private void numericUpDownTimeInterval_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetTimeInterval((int)(this.numericUpDownTimeInterval.Value));
|
||||
}
|
||||
}
|
||||
|
||||
private void numericUpDownDateInterval_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetDateInterval((int)(this.numericUpDownDateInterval.Value));
|
||||
}
|
||||
}
|
||||
|
||||
private void numericUpDownTemperatureInterval_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetTemperatureInterval((int)(this.numericUpDownTemperatureInterval.Value));
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBoxDateEnabled_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetDateEnabled(this.checkBoxDateEnabled.Checked);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBoxTemperatureEnabled_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.SetTemperatureEnabled(this.checkBoxTemperatureEnabled.Checked);
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonResetDefault_Click(object sender, EventArgs e)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show("Are you sure? All clock settings will be reset to their default values!", "Confirm Reset",
|
||||
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
|
||||
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
this.clockSettingsCanBeChanged = false;
|
||||
this.meetingClockManager.SetBrightness(15);
|
||||
this.meetingClockManager.SetTimeInterval(35);
|
||||
this.meetingClockManager.SetDateInterval(3);
|
||||
this.meetingClockManager.SetDateEnabled(true);
|
||||
this.meetingClockManager.SetDateInterval(3);
|
||||
this.meetingClockManager.SetTemperatureEnabled(true);
|
||||
this.meetingClockManager.SetTemperatureInterval(3);
|
||||
this.meetingClockManager.SetScrollSpeed(5);
|
||||
this.meetingClockManager.SetScrollWait(40);
|
||||
|
||||
this.ReadClockSettings();
|
||||
}
|
||||
}
|
||||
|
||||
private void timerAdjustClock_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.meetingClockManager.Adjust();
|
||||
}
|
||||
}
|
||||
|
||||
private void timerGetAppointment_Tick(object sender, EventArgs e)
|
||||
{
|
||||
this.ShowNextAppointment();
|
||||
}
|
||||
|
||||
private async void ShowNextAppointment() {
|
||||
if (!this.clockSettingsCanBeChanged)
|
||||
{
|
||||
this.currentAppointment = "";
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Outlook.AppointmentItem appointment = await this.outlookManager.GetNextAppointment(
|
||||
this.settings.IgnoreAllDayAppointments, this.settings.IgnoreCancelledAppointments, this.settings.IgnoreFreeAppointments,
|
||||
this.settings.IgnoreOutOfOfficeAppointments, this.settings.IgnoreTentativeAppointments);
|
||||
|
||||
if (appointment == null)
|
||||
{
|
||||
Debug.WriteLine("No upcoming appointment send to clock");
|
||||
this.currentAppointment = "";
|
||||
return;
|
||||
}
|
||||
|
||||
string appointmentName = String.Format("{0} - {1} {2}", appointment.Start.ToString("t"), appointment.End.ToString("t"), appointment.Subject);
|
||||
if (appointment.Start > DateTime.Now.AddMinutes(this.settings.ReminderTime))
|
||||
{
|
||||
Debug.WriteLine(String.Format("Upcoming appointment is too far in future, not displaying: {0}", appointmentName));
|
||||
this.currentAppointment = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.currentAppointment == appointmentName)
|
||||
{
|
||||
Debug.WriteLine("Current appointment is already displayed, not doing anything");
|
||||
return;
|
||||
}
|
||||
|
||||
this.currentAppointment = appointmentName;
|
||||
this.meetingClockManager.ScrollText(this.currentAppointment);
|
||||
this.meetingClockManager.NextDate(appointment.Start);
|
||||
Debug.WriteLine(String.Format("Current appointment is set to: {0}", this.currentAppointment));
|
||||
}
|
||||
|
||||
private void numericUpDownReminderTime_ValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
this.settings.ReminderTime = (int)this.numericUpDownReminderTime.Value;
|
||||
}
|
||||
}
|
||||
}
|
372
MainWindow.resx
Normal file
372
MainWindow.resx
Normal file
@ -0,0 +1,372 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="notifyIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="notifyIcon.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAIAQEAAAAEACAAoFgAAJgAAAEBAAgABAAEAMAQAAE4WAAAoAAAAQAAAAIAAAAABAAgAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA/38AAP+ADQD/gyYA/4QqAP+HOAD/iDsA/4pAAP+KQgD/i0UA/4xHAP+P
|
||||
TwD/kFEA/5FVAP+TWgD/lV8A/5djAP+YZQD/mWgA/51uAP+ecQD/n3MA/6F3AP+ieAD/onkA/6N6AP+l
|
||||
fgD/pn8A/6aAAP+ngQD/p4IA/6yJAP+tiwD/ro0A/6+PAP+wkAD/sJEA/7GTAP+0lwD/tZgA/7WZAP+5
|
||||
nwD/uqAA/7yjAP+8pAD/vqcA/7+nAP/BqgD/x7QA/8i2AP/JtgD/zbwA/829AP/OvgD/0MAA/9HCAP/S
|
||||
wwD/0sQA/9PFAP/UxgD/1McA/9XIAP/YywD/2c4A/9vQAP/c0QD/3dIA/9/VAP/f1gD/4toA/+TcAP/l
|
||||
3QD/5+AA/+jiAP/p4gD/6eMA/+3oAP/u6QD/7+sA//HtAP/x7gD/8u8A//PvAP/08AD/9PEA//XyAP/1
|
||||
8wD/+PYA//n3AP/5+AD/+/oA//z7AP/9/AD//v0A//7+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0snAQAAAAAAAAAAHF1A
|
||||
EgAAAAAAAAAAADpWMQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXk0eAAAAAAAA
|
||||
ABxeXl1CCgAAAAAAAAA6Xl5XLwAAAAAAAAAPOU1ZXl5eXl5bVEMgAAAAAAAAAAAAAAAAAABTXl5eOgAA
|
||||
AAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAAAhWV5eXl5eXl5eXl5eXjkAAAAAAAAAAAAAAAAAU15e
|
||||
XjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAAALWF5eXl5eXl5eXl5eXl5eKAAAAAAAAAAAAAAA
|
||||
AFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAMF5eXl5eXl5eXl5eXl5eXksAAAAAAAAA
|
||||
AAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAEVeXl5dMycmJiYmLVNeXl5eCAAA
|
||||
AAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABNXl5eRAAAAAAAAAApXl5e
|
||||
XhMAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAUl5eXjsAAAAAAAAA
|
||||
HV5eXl4bAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAFNeXl46AAAA
|
||||
AAAAABxeXl5eHAAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABTXl5e
|
||||
OgAAAAAAAAAOS15eXhwAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAA
|
||||
U15eXjoAAAAAAAAAAAAiR14cAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMA
|
||||
AAAAAFNeXl46AAAAAAAAAAAAAAAMAwAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpe
|
||||
Xl5TAAAAAABTXl5eOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAA
|
||||
AAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwA
|
||||
AAAAAAAAOl5eXlMAAAAAAFNeXl46AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5e
|
||||
Xl4cAAAAAAAAADpeXl5TAAAAAABTXl5eOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXl46AAAAAAAA
|
||||
ABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTXl5eOgAA
|
||||
AAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAFNeXl46AAAAAAAAABxdTT4uCAAAAAAAAAAAAAAAU15e
|
||||
XjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAAAAA
|
||||
AFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAA
|
||||
AAAAAABOXl5eQAAAAAAAAAAkXl5eXiQAAAAAAAAAQF5eXk4AAAAAAE9eXl4/AAAAAAAAAB5eXl5eFQAA
|
||||
AAAAAAAAAAAASV5eXlgZAQAAAAAKRl5eXl5GCgAAAAABGVheXl5IAAAAAABKXl5eVxgBAAAAAAlBXl5e
|
||||
Xg0AAAAAAAAAAAAAADheXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eNwAAAAAAOV5eXl5eXl5eXl5e
|
||||
Xl5eXlUAAAAAAAAAAAAAAAAUXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXhMAAAAAABZeXl5eXl5e
|
||||
Xl5eXl5eXl40AAAAAAAAAAAAAAAAADNeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXjIAAAAAAAAANV5e
|
||||
Xl5eXl5eXl5eXl5MBAAAAAAAAAAAAAAAAAAAK1BeXl5eXl5eXl5cPTZaXl5eXl5eXl5eUCoAAAAAAAAA
|
||||
AAAsUV5eXl5eXl5eXlk8BgAAAAAAAAAAAAAAAAAAAAAAEB8lJiYmJiQdBwAABRokJiYmJiUfEAAAAAAA
|
||||
AAAAAAAAAAARHyUmJiYmIxcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAACgAAABAAAAAgAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAA=
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="timerEnableBalloon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>123, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timerScrollDemo.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>280, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timerAdjustClock.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>423, 17</value>
|
||||
</metadata>
|
||||
<metadata name="timerGetAppointment.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>568, 17</value>
|
||||
</metadata>
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
AAABAAIAQEAAAAEACAAoFgAAJgAAAEBAAgABAAEAMAQAAE4WAAAoAAAAQAAAAIAAAAABAAgAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAA/38AAP+ADQD/gyYA/4QqAP+HOAD/iDsA/4pAAP+KQgD/i0UA/4xHAP+P
|
||||
TwD/kFEA/5FVAP+TWgD/lV8A/5djAP+YZQD/mWgA/51uAP+ecQD/n3MA/6F3AP+ieAD/onkA/6N6AP+l
|
||||
fgD/pn8A/6aAAP+ngQD/p4IA/6yJAP+tiwD/ro0A/6+PAP+wkAD/sJEA/7GTAP+0lwD/tZgA/7WZAP+5
|
||||
nwD/uqAA/7yjAP+8pAD/vqcA/7+nAP/BqgD/x7QA/8i2AP/JtgD/zbwA/829AP/OvgD/0MAA/9HCAP/S
|
||||
wwD/0sQA/9PFAP/UxgD/1McA/9XIAP/YywD/2c4A/9vQAP/c0QD/3dIA/9/VAP/f1gD/4toA/+TcAP/l
|
||||
3QD/5+AA/+jiAP/p4gD/6eMA/+3oAP/u6QD/7+sA//HtAP/x7gD/8u8A//PvAP/08AD/9PEA//XyAP/1
|
||||
8wD/+PYA//n3AP/5+AD/+/oA//z7AP/9/AD//v0A//7+AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0snAQAAAAAAAAAAHF1A
|
||||
EgAAAAAAAAAAADpWMQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXk0eAAAAAAAA
|
||||
ABxeXl1CCgAAAAAAAAA6Xl5XLwAAAAAAAAAPOU1ZXl5eXl5bVEMgAAAAAAAAAAAAAAAAAABTXl5eOgAA
|
||||
AAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAAAhWV5eXl5eXl5eXl5eXjkAAAAAAAAAAAAAAAAAU15e
|
||||
XjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAAALWF5eXl5eXl5eXl5eXl5eKAAAAAAAAAAAAAAA
|
||||
AFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAMF5eXl5eXl5eXl5eXl5eXksAAAAAAAAA
|
||||
AAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAEVeXl5dMycmJiYmLVNeXl5eCAAA
|
||||
AAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABNXl5eRAAAAAAAAAApXl5e
|
||||
XhMAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAUl5eXjsAAAAAAAAA
|
||||
HV5eXl4bAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAFNeXl46AAAA
|
||||
AAAAABxeXl5eHAAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABTXl5e
|
||||
OgAAAAAAAAAOS15eXhwAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAA
|
||||
U15eXjoAAAAAAAAAAAAiR14cAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMA
|
||||
AAAAAFNeXl46AAAAAAAAAAAAAAAMAwAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAAADpe
|
||||
Xl5TAAAAAABTXl5eOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXl46AAAAAAAAABxeXl5eHAAAAAAA
|
||||
AAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwA
|
||||
AAAAAAAAOl5eXlMAAAAAAFNeXl46AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU15eXjoAAAAAAAAAHF5e
|
||||
Xl4cAAAAAAAAADpeXl5TAAAAAABTXl5eOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFNeXl46AAAAAAAA
|
||||
ABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABTXl5eOgAA
|
||||
AAAAAAAcXl5eXhwAAAAAAAAAOl5eXlMAAAAAAFNeXl46AAAAAAAAABxdTT4uCAAAAAAAAAAAAAAAU15e
|
||||
XjoAAAAAAAAAHF5eXl4cAAAAAAAAADpeXl5TAAAAAABTXl5eOgAAAAAAAAAcXl5eXhwAAAAAAAAAAAAA
|
||||
AFNeXl46AAAAAAAAABxeXl5eHAAAAAAAAAA6Xl5eUwAAAAAAU15eXjoAAAAAAAAAHF5eXl4cAAAAAAAA
|
||||
AAAAAABOXl5eQAAAAAAAAAAkXl5eXiQAAAAAAAAAQF5eXk4AAAAAAE9eXl4/AAAAAAAAAB5eXl5eFQAA
|
||||
AAAAAAAAAAAASV5eXlgZAQAAAAAKRl5eXl5GCgAAAAABGVheXl5IAAAAAABKXl5eVxgBAAAAAAlBXl5e
|
||||
Xg0AAAAAAAAAAAAAADheXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eNwAAAAAAOV5eXl5eXl5eXl5e
|
||||
Xl5eXlUAAAAAAAAAAAAAAAAUXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXhMAAAAAABZeXl5eXl5e
|
||||
Xl5eXl5eXl40AAAAAAAAAAAAAAAAADNeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXjIAAAAAAAAANV5e
|
||||
Xl5eXl5eXl5eXl5MBAAAAAAAAAAAAAAAAAAAK1BeXl5eXl5eXl5cPTZaXl5eXl5eXl5eUCoAAAAAAAAA
|
||||
AAAsUV5eXl5eXl5eXlk8BgAAAAAAAAAAAAAAAAAAAAAAEB8lJiYmJiQdBwAABRokJiYmJiUfEAAAAAAA
|
||||
AAAAAAAAAAARHyUmJiYmIxcCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAACgAAABAAAAAgAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAA=
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
163
Meeting-Clock.csproj
Normal file
163
Meeting-Clock.csproj
Normal file
@ -0,0 +1,163 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{97CA08CF-C8F9-4D6C-8C15-77695A995169}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>MeetingClock</RootNamespace>
|
||||
<AssemblyName>Meeting Clock</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject>MeetingClock.MeetingClock</StartupObject>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>
|
||||
</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Office.Interop.Outlook, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Deployment" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="BluetoothManager.cs" />
|
||||
<Compile Include="MainWindow.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainWindow.Designer.cs">
|
||||
<DependentUpon>MainWindow.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="MeetingClock.cs" />
|
||||
<Compile Include="MeetingClockManager.cs" />
|
||||
<Compile Include="OutlookManager.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Settings.cs" />
|
||||
<EmbeddedResource Include="MainWindow.resx">
|
||||
<DependentUpon>MainWindow.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Windows.SDK.Contracts">
|
||||
<Version>10.0.19041.1</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\icon-neutral.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icons\icon-error.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icons\icon-neutral.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icons\icon-off.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icons\icon-ok.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="icons\icon-warning.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
37
Meeting-Clock.sln
Normal file
37
Meeting-Clock.sln
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30717.126
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Meeting-Clock", "Meeting-Clock.csproj", "{97CA08CF-C8F9-4D6C-8C15-77695A995169}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|x64.Build.0 = Debug|x64
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Debug|x86.Build.0 = Debug|x86
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|x64.ActiveCfg = Release|x64
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|x64.Build.0 = Release|x64
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|x86.ActiveCfg = Release|x86
|
||||
{97CA08CF-C8F9-4D6C-8C15-77695A995169}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {8BF71566-EA72-4AF7-B52D-0D54EE96FC46}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
19
MeetingClock.cs
Normal file
19
MeetingClock.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
static class MeetingClock
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new MainWindow());
|
||||
}
|
||||
}
|
||||
}
|
479
MeetingClockManager.cs
Normal file
479
MeetingClockManager.cs
Normal file
@ -0,0 +1,479 @@
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO.Ports;
|
||||
using System.Text;
|
||||
using System.Timers;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
public class MeetingClockManager
|
||||
{
|
||||
private const string MTC = "MTC";
|
||||
|
||||
public enum MeetingClockState
|
||||
{
|
||||
NotInitialized,
|
||||
NoComPort,
|
||||
Disconnected,
|
||||
Connected
|
||||
}
|
||||
|
||||
public MeetingClockState State { get; private set; } = MeetingClockState.NotInitialized;
|
||||
public string Version { get; private set; }
|
||||
public string Port {
|
||||
get
|
||||
{
|
||||
if (this.serialPort != null && this.serialPort.IsOpen)
|
||||
{
|
||||
return this.serialPort.PortName;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void MeetingClockStateChangeHandler(MeetingClockManager manager, MeetingClockState oldState, MeetingClockState newState);
|
||||
public event MeetingClockStateChangeHandler StateChanged;
|
||||
|
||||
private System.Timers.Timer startTimer;
|
||||
private System.Timers.Timer checkTimer;
|
||||
private BluetoothManager bluetoothManager;
|
||||
private SerialPort serialPort;
|
||||
|
||||
public MeetingClockManager(BluetoothManager bluetoothManager)
|
||||
{
|
||||
this.NewSerialPort();
|
||||
|
||||
this.startTimer = new System.Timers.Timer(1000);
|
||||
this.startTimer.AutoReset = false;
|
||||
this.startTimer.Elapsed += ConnectTimer_Elapsed;
|
||||
|
||||
this.checkTimer = new System.Timers.Timer(30000);
|
||||
this.checkTimer.AutoReset = false;
|
||||
this.checkTimer.Elapsed += CheckTimer_Elapsed;
|
||||
this.checkTimer.Start();
|
||||
|
||||
this.bluetoothManager = bluetoothManager;
|
||||
this.bluetoothManager.StateChanged += BluetoothManager_StateChanged;
|
||||
}
|
||||
|
||||
private void NewSerialPort() {
|
||||
lock (this) {
|
||||
if (this.serialPort != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.serialPort.Close();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
this.serialPort = new SerialPort();
|
||||
this.serialPort.BaudRate = 9600;
|
||||
this.serialPort.Parity = Parity.None;
|
||||
this.serialPort.DataBits = 8;
|
||||
this.serialPort.StopBits = StopBits.One;
|
||||
this.serialPort.Encoding = Encoding.GetEncoding("iso8859-1");
|
||||
this.serialPort.ReadTimeout = 1000;
|
||||
this.serialPort.WriteTimeout = 1000;
|
||||
}
|
||||
}
|
||||
|
||||
private void BluetoothManager_StateChanged(BluetoothManager manager, BluetoothManager.BluetoothState oldState, BluetoothManager.BluetoothState newState)
|
||||
{
|
||||
switch (newState)
|
||||
{
|
||||
case BluetoothManager.BluetoothState.On:
|
||||
this.startTimer.Start();
|
||||
break;
|
||||
default:
|
||||
this.Disconnect();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ConnectTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
this.Connect();
|
||||
}
|
||||
|
||||
private void Connect()
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
if (this.State == MeetingClockState.Connected && this.serialPort.IsOpen)
|
||||
{
|
||||
Debug.WriteLine("Meeting clock already connected. Not trying to connect again.");
|
||||
return;
|
||||
}
|
||||
|
||||
string[] portNames = SerialPort.GetPortNames();
|
||||
if (portNames.Length == 0)
|
||||
{
|
||||
Debug.WriteLine("No COM ports are available at the moment.");
|
||||
this.ChangeState(MeetingClockState.NoComPort);
|
||||
return;
|
||||
}
|
||||
|
||||
this.ChangeState(MeetingClockState.Disconnected);
|
||||
this.NewSerialPort();
|
||||
|
||||
foreach (string portName in portNames)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Trying to connect to {0}", portName));
|
||||
try
|
||||
{
|
||||
this.serialPort.PortName = portName;
|
||||
this.serialPort.Open();
|
||||
|
||||
if (this.Handshake())
|
||||
{
|
||||
Debug.WriteLine(String.Format("Successfully connected to meeting clock {0} on port {1}", this.Version, portName));
|
||||
this.Adjust();
|
||||
this.ScrollText("");
|
||||
this.NextDate(DateTime.Now.AddMinutes(-5));
|
||||
this.ChangeState(MeetingClockState.Connected);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine(String.Format("Failed to connect to meeting clock on port {0}. Invalid Handshake.", portName));
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Failed to connect to meeting clock on port {0}. {1}", portName, exception.Message));
|
||||
}
|
||||
|
||||
this.Disconnect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void Disconnect()
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
if (this.serialPort.IsOpen)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Closing connection on port {0}", this.serialPort.PortName));
|
||||
try
|
||||
{
|
||||
this.serialPort.Close();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
this.ChangeState(MeetingClockState.Disconnected);
|
||||
this.NewSerialPort();
|
||||
}
|
||||
}
|
||||
|
||||
private bool Handshake()
|
||||
{
|
||||
string rx = this.SendAndReceive(MTC);
|
||||
|
||||
if (rx == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (rx.StartsWith(MTC))
|
||||
{
|
||||
this.Version = rx.Substring(MTC.Length).Trim();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Adjust()
|
||||
{
|
||||
this.SendAndReceive(String.Format("ADJ {0}", DateTime.Now.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss")));
|
||||
}
|
||||
|
||||
private string SendAndReceive(string tx)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (this.serialPort.IsOpen)
|
||||
{
|
||||
Debug.WriteLine(String.Format(">>> {0}", tx));
|
||||
this.serialPort.WriteLine(tx);
|
||||
string rx = this.serialPort.ReadLine().Trim();
|
||||
Debug.WriteLine(String.Format("<<< {0}", rx));
|
||||
return rx;
|
||||
}
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Failed to send/receiv on port {0}. {1}", this.serialPort.PortName, exception.Message));
|
||||
this.Disconnect();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void ChangeState(MeetingClockState newState)
|
||||
{
|
||||
MeetingClockState oldState = this.State;
|
||||
this.State = newState;
|
||||
|
||||
if (newState != oldState)
|
||||
{
|
||||
Debug.WriteLine("Meeting Clock state change detected. Old state: {0}, new state {1}.", oldState, newState);
|
||||
|
||||
if (this.StateChanged != null)
|
||||
{
|
||||
this.StateChanged(this, oldState, newState);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckTimer_Elapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (this.serialPort.IsOpen)
|
||||
{
|
||||
if (!this.Handshake())
|
||||
{
|
||||
this.Disconnect();
|
||||
}
|
||||
}
|
||||
else if (this.bluetoothManager.State == BluetoothManager.BluetoothState.On)
|
||||
{
|
||||
this.Connect();
|
||||
}
|
||||
|
||||
this.checkTimer.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
this.Disconnect();
|
||||
this.checkTimer.Stop();
|
||||
this.startTimer.Stop();
|
||||
}
|
||||
|
||||
public int? GetTimeInterval()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET TI").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTimeInterval(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET TI " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public int? GetDateInterval()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET DI").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetDateInterval(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET DI " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public int? GetTemperatureInterval()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET CI").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public void SetTemperatureInterval(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET CI " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public int? GetBrightness()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET IN").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int? GetScrollSpeed()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET SS").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int? GetScrollWait()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET SW").Substring(7);
|
||||
return int.Parse(rx);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetBrightness(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET IN " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void SetScrollSpeed(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET SS " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void SetScrollWait(int value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET SW " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public void ScrollText(string value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SCR " + value);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public bool? GetDateEnabled()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET DE").Substring(7);
|
||||
return int.Parse(rx) > 0;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetDateEnabled(bool value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET DE " + (value ? "1" : "0"));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public bool? GetTemperatureEnabled()
|
||||
{
|
||||
try
|
||||
{
|
||||
string rx = this.SendAndReceive("GET CE").Substring(7);
|
||||
return int.Parse(rx) > 0;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetTemperatureEnabled(bool value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("SET CE " + (value ? "1" : "0"));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
internal void NextDate(DateTime value)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.SendAndReceive("NXT " + value.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss"));
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
181
OutlookManager.cs
Normal file
181
OutlookManager.cs
Normal file
@ -0,0 +1,181 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Outlook = Microsoft.Office.Interop.Outlook;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
public class OutlookManager
|
||||
{
|
||||
private Outlook.Application application;
|
||||
|
||||
public OutlookManager()
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<Outlook.AppointmentItem> GetNextAppointment(
|
||||
bool ignoreAllDayEvents, bool ignoreCancelledMeetings, bool ignoreFreeMeetings, bool ignoreOutOfOfficeMeetings, bool ignoreTentativeMeetings)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
lock(this)
|
||||
{
|
||||
int retries = 5;
|
||||
while (this.application == null && retries-- > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
this.application = new Outlook.Application();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
this.application = null;
|
||||
Debug.WriteLine(String.Format("Failed to start outlook application: {0}", exception.Message));
|
||||
Thread.Sleep(3000);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
List<Outlook.AppointmentItem> appointmentItems = new List<Outlook.AppointmentItem>();
|
||||
|
||||
lock (this)
|
||||
{
|
||||
if (this.application == null)
|
||||
{
|
||||
return null; // not available at the moment
|
||||
}
|
||||
try
|
||||
{
|
||||
Outlook.Folder calendarFolder = this.application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar) as Outlook.Folder;
|
||||
DateTime start = DateTime.Now;
|
||||
DateTime end = start.AddHours(2);
|
||||
|
||||
string filter = String.Format("[Start] >= '{0}' AND [Start] <= '{1}'", start.ToString("g"), end.ToString("g"));
|
||||
Debug.WriteLine(String.Format("Filtering Outlook Events: {0}", filter));
|
||||
|
||||
Outlook.Items appointments = calendarFolder.Items;
|
||||
appointments.IncludeRecurrences = true;
|
||||
appointments.Sort("[Start]", Type.Missing);
|
||||
Outlook.Items filteredAppointments = appointments.Restrict(filter);
|
||||
|
||||
Debug.WriteLine(String.Format("Found {0} outlook appointments between {1} and {2}", filteredAppointments.Count, start.ToString("g"), end.ToString("g")));
|
||||
|
||||
DateTime? firstAppointmentTime = null;
|
||||
|
||||
foreach (Outlook.AppointmentItem appointment in filteredAppointments)
|
||||
{
|
||||
Debug.WriteLine(String.Format("{0}-{5} ({6}): {1} ({2}), allday: {3}, busy: {4}, importance: {7}, recurring: {8}, scheduled: {9}, conflict: {10}",
|
||||
appointment.Start.ToString("g"), appointment.Subject, appointment.MeetingStatus, appointment.AllDayEvent, appointment.BusyStatus, appointment.End.ToString("g"),
|
||||
appointment.Duration, appointment.Importance, appointment.RecurrenceState, appointment.CreationTime.ToString("g"), appointment.IsConflict));
|
||||
|
||||
if (ignoreAllDayEvents && appointment.AllDayEvent)
|
||||
{
|
||||
continue; // ignore all day events
|
||||
}
|
||||
if (ignoreCancelledMeetings
|
||||
&& (appointment.MeetingStatus == Outlook.OlMeetingStatus.olMeetingCanceled || appointment.MeetingStatus == Outlook.OlMeetingStatus.olMeetingReceivedAndCanceled))
|
||||
{
|
||||
continue; // ignore cancelled meetings
|
||||
}
|
||||
|
||||
if (ignoreFreeMeetings && appointment.BusyStatus == Outlook.OlBusyStatus.olFree)
|
||||
{
|
||||
continue; // ignore free meetings
|
||||
}
|
||||
|
||||
if (ignoreOutOfOfficeMeetings && appointment.BusyStatus == Outlook.OlBusyStatus.olOutOfOffice)
|
||||
{
|
||||
continue; // ignore out of office meetings
|
||||
}
|
||||
|
||||
if (ignoreTentativeMeetings && appointment.BusyStatus == Outlook.OlBusyStatus.olTentative)
|
||||
{
|
||||
continue; // ignore tentative meetings
|
||||
}
|
||||
|
||||
if (firstAppointmentTime == null)
|
||||
{
|
||||
firstAppointmentTime = appointment.Start;
|
||||
}
|
||||
|
||||
// ignore appointments that do not start first
|
||||
if (firstAppointmentTime < appointment.Start)
|
||||
{
|
||||
continue; // ignore later appointments
|
||||
}
|
||||
|
||||
appointmentItems.Add(appointment);
|
||||
Debug.WriteLine(String.Format("Next possible appointment is {0}-{1}: {2}", appointment.Start.ToString("t"), appointment.End.ToString("t"), appointment.Subject));
|
||||
}
|
||||
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
Debug.WriteLine(String.Format("Exception getting outlook appointments: {0}", exception.Message));
|
||||
this.application = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (appointmentItems.Count == 0)
|
||||
{
|
||||
return null; // no appointments upcoming
|
||||
}
|
||||
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // exactly one appointment upcoming
|
||||
}
|
||||
|
||||
// remove cancelled events
|
||||
appointmentItems = appointmentItems.AsQueryable()
|
||||
.Where(item => item.MeetingStatus != Outlook.OlMeetingStatus.olMeetingCanceled && item.MeetingStatus != Outlook.OlMeetingStatus.olMeetingReceivedAndCanceled).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
// remove duplicates by priority, select highest priority
|
||||
Outlook.OlImportance importance = appointmentItems.AsQueryable().OrderByDescending(item => (int)item.Importance).Select(item => item.Importance).First();
|
||||
appointmentItems = appointmentItems.AsQueryable().Where(item => item.Importance == importance).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
// remove all day events
|
||||
appointmentItems = appointmentItems.AsQueryable().Where(item => !item.AllDayEvent).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
// remove free appointment
|
||||
appointmentItems = appointmentItems.AsQueryable().Where(item => item.BusyStatus != Outlook.OlBusyStatus.olFree).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
// remove tentative appointment
|
||||
appointmentItems = appointmentItems.AsQueryable().Where(item => item.BusyStatus != Outlook.OlBusyStatus.olTentative).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
// remove out of office appointment
|
||||
appointmentItems = appointmentItems.AsQueryable().Where(item => item.BusyStatus != Outlook.OlBusyStatus.olOutOfOffice).ToList();
|
||||
if (appointmentItems.Count == 1)
|
||||
{
|
||||
return appointmentItems[0]; // one appointment still left
|
||||
}
|
||||
|
||||
return appointmentItems[0];
|
||||
}
|
||||
}
|
||||
}
|
38
Properties/AssemblyInfo.cs
Normal file
38
Properties/AssemblyInfo.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System.Resources;
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("Meeting-Clock")]
|
||||
[assembly: AssemblyDescription("Meeting Clock")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("Frank Zechert")]
|
||||
[assembly: AssemblyProduct("Meeting-Clock")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("97ca08cf-c8f9-4d6c-8c15-77695a995169")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: NeutralResourcesLanguage("en")]
|
113
Properties/Resources.Designer.cs
generated
Normal file
113
Properties/Resources.Designer.cs
generated
Normal file
@ -0,0 +1,113 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace MeetingClock.Properties {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Resources {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Resources() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MeetingClock.Properties.Resources", typeof(Resources).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon icon_error {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icon_error", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon icon_neutral {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icon_neutral", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon icon_off {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icon_off", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon icon_ok {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icon_ok", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
|
||||
/// </summary>
|
||||
internal static System.Drawing.Icon icon_warning {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("icon_warning", resourceCulture);
|
||||
return ((System.Drawing.Icon)(obj));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
136
Properties/Resources.resx
Normal file
136
Properties/Resources.resx
Normal file
@ -0,0 +1,136 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||
<data name="icon_error" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icons\icon-error.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icon_neutral" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icons\icon-neutral.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icon_off" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icons\icon-off.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icon_ok" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icons\icon-ok.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="icon_warning" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\icons\icon-warning.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
143
Properties/Settings.Designer.cs
generated
Normal file
143
Properties/Settings.Designer.cs
generated
Normal file
@ -0,0 +1,143 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace MeetingClock.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.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.ApplicationScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("v. 1.0.0")]
|
||||
public string Version {
|
||||
get {
|
||||
return ((string)(this["Version"]));
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool CheckForUpdates {
|
||||
get {
|
||||
return ((bool)(this["CheckForUpdates"]));
|
||||
}
|
||||
set {
|
||||
this["CheckForUpdates"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool StartMinimized {
|
||||
get {
|
||||
return ((bool)(this["StartMinimized"]));
|
||||
}
|
||||
set {
|
||||
this["StartMinimized"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool StartBluetooth {
|
||||
get {
|
||||
return ((bool)(this["StartBluetooth"]));
|
||||
}
|
||||
set {
|
||||
this["StartBluetooth"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool IgnoreAllDayAppointments {
|
||||
get {
|
||||
return ((bool)(this["IgnoreAllDayAppointments"]));
|
||||
}
|
||||
set {
|
||||
this["IgnoreAllDayAppointments"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("True")]
|
||||
public bool IgnoreCancelledAppointments {
|
||||
get {
|
||||
return ((bool)(this["IgnoreCancelledAppointments"]));
|
||||
}
|
||||
set {
|
||||
this["IgnoreCancelledAppointments"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool IgnoreFreeAppointments {
|
||||
get {
|
||||
return ((bool)(this["IgnoreFreeAppointments"]));
|
||||
}
|
||||
set {
|
||||
this["IgnoreFreeAppointments"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool IgnoreOutOfOfficeAppointments {
|
||||
get {
|
||||
return ((bool)(this["IgnoreOutOfOfficeAppointments"]));
|
||||
}
|
||||
set {
|
||||
this["IgnoreOutOfOfficeAppointments"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("False")]
|
||||
public bool IgnoreTentativeAppointments {
|
||||
get {
|
||||
return ((bool)(this["IgnoreTentativeAppointments"]));
|
||||
}
|
||||
set {
|
||||
this["IgnoreTentativeAppointments"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("10")]
|
||||
public int ReminderTime {
|
||||
get {
|
||||
return ((int)(this["ReminderTime"]));
|
||||
}
|
||||
set {
|
||||
this["ReminderTime"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
36
Properties/Settings.settings
Normal file
36
Properties/Settings.settings
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="MeetingClock.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="Version" Type="System.String" Scope="Application">
|
||||
<Value Profile="(Default)">v. 1.0.0</Value>
|
||||
</Setting>
|
||||
<Setting Name="CheckForUpdates" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="StartMinimized" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="StartBluetooth" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreAllDayAppointments" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreCancelledAppointments" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">True</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreFreeAppointments" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreOutOfOfficeAppointments" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="IgnoreTentativeAppointments" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="ReminderTime" Type="System.Int32" Scope="User">
|
||||
<Value Profile="(Default)">10</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
164
Settings.cs
Normal file
164
Settings.cs
Normal file
@ -0,0 +1,164 @@
|
||||
using Microsoft.Win32;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace MeetingClock
|
||||
{
|
||||
public class Settings
|
||||
{
|
||||
|
||||
private readonly string AUTOSTART_REGKEY = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
|
||||
private readonly string AUTOSTART_VALUE = "Meeting-Clock";
|
||||
|
||||
public bool Autostart
|
||||
{
|
||||
get
|
||||
{
|
||||
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(AUTOSTART_REGKEY, false))
|
||||
{
|
||||
return (string) key.GetValue(AUTOSTART_VALUE) == "\"" + Application.ExecutablePath + "\"";
|
||||
}
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(AUTOSTART_REGKEY, true))
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
key.SetValue(AUTOSTART_VALUE, "\"" + Application.ExecutablePath + "\"");
|
||||
}
|
||||
else
|
||||
{
|
||||
key.DeleteValue(AUTOSTART_VALUE, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool StartMinimized
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.StartMinimized;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.StartMinimized = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool CheckForUpdates
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.CheckForUpdates;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.CheckForUpdates = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool StartBluetooth
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.StartBluetooth;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.StartBluetooth = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IgnoreAllDayAppointments
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.IgnoreAllDayAppointments;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.IgnoreAllDayAppointments = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IgnoreCancelledAppointments
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.IgnoreCancelledAppointments;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.IgnoreCancelledAppointments = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IgnoreFreeAppointments
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.IgnoreFreeAppointments;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.IgnoreFreeAppointments = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IgnoreOutOfOfficeAppointments
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.IgnoreOutOfOfficeAppointments;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.IgnoreOutOfOfficeAppointments = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public bool IgnoreTentativeAppointments
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.IgnoreTentativeAppointments;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.IgnoreTentativeAppointments = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
public int ReminderTime
|
||||
{
|
||||
get
|
||||
{
|
||||
return Properties.Settings.Default.ReminderTime;
|
||||
}
|
||||
set
|
||||
{
|
||||
Properties.Settings.Default.ReminderTime = value;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
BIN
icons/icon-error.ico
Normal file
BIN
icons/icon-error.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
icons/icon-error.xcf
Normal file
BIN
icons/icon-error.xcf
Normal file
Binary file not shown.
BIN
icons/icon-neutral.ico
Normal file
BIN
icons/icon-neutral.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
icons/icon-neutral.xcf
Normal file
BIN
icons/icon-neutral.xcf
Normal file
Binary file not shown.
BIN
icons/icon-off.ico
Normal file
BIN
icons/icon-off.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
icons/icon-off.xcf
Normal file
BIN
icons/icon-off.xcf
Normal file
Binary file not shown.
BIN
icons/icon-ok.ico
Normal file
BIN
icons/icon-ok.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
icons/icon-ok.xcf
Normal file
BIN
icons/icon-ok.xcf
Normal file
Binary file not shown.
BIN
icons/icon-warning.ico
Normal file
BIN
icons/icon-warning.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
icons/icon-warning.xcf
Normal file
BIN
icons/icon-warning.xcf
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user