Winify – Rev 48

Subversion Repositories:
Rev:
using System;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using Announcements;
using Servers;
using Winify.Utilities;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace Winify.Settings
{
    public partial class SettingsForm : Form
    {
        #region Public Events & Delegates

        public event EventHandler<SettingsSavedEventArgs> Save;

        #endregion

        #region Private Delegates, Events, Enums, Properties, Indexers and Fields

        private readonly BindingSource _announcementBindingSource;

        private readonly Announcements.Announcements _announcements;

        private readonly BindingSource _serverBindingSource;

        private readonly Servers.Servers _servers;

        private Announcement _announcement;

        private Server _server;
        private readonly MainForm _mainForm;
        private readonly CancellationToken _cancellationToken;
        private readonly BindingSource _configurationBindingSource;

        #endregion

        #region Constructors, Destructors and Finalizers

        public SettingsForm()
        {
            InitializeComponent();

            Utilities.WindowState.FormTracker.Track(this);
        }

        public SettingsForm(MainForm mainForm) : this()
        {
            _mainForm = mainForm;
        }

        public SettingsForm(MainForm mainForm, Servers.Servers servers, Announcements.Announcements announcements,
            CancellationToken cancellationToken) : this(mainForm)
        {
            _servers = servers;
            _server = _servers.Server.FirstOrDefault() ?? new Server();
            _cancellationToken = cancellationToken;

            _serverBindingSource = new BindingSource();
            _serverBindingSource.DataSource = _server;
            _configurationBindingSource = new BindingSource();
            _configurationBindingSource.DataSource = _mainForm.Configuration;

            checkBox1.DataBindings.Add(new Binding("Checked", _configurationBindingSource,
                nameof(_mainForm.Configuration.LaunchOnBoot), true, DataSourceUpdateMode.OnPropertyChanged));

            checkBox2.DataBindings.Add(new Binding("Checked", _configurationBindingSource,
                nameof(_mainForm.Configuration.IgnoreSelfSignedCertificates), true, DataSourceUpdateMode.OnPropertyChanged));

            serverNameTextBox.DataBindings.Add(new Binding("Text", _serverBindingSource, nameof(_server.Name), true,
                DataSourceUpdateMode.OnPropertyChanged));
            serverUrlTextBox.DataBindings.Add(new Binding("Text", _serverBindingSource, nameof(_server.Url), true,
                DataSourceUpdateMode.OnPropertyChanged));
            serverUsernameTextBox.DataBindings.Add(new Binding("Text", _serverBindingSource, nameof(_server.Username),
                true,
                DataSourceUpdateMode.OnPropertyChanged));
            serverPasswordTextBox.DataBindings.Add(new Binding("Text", _serverBindingSource, nameof(_server.Password),
                true,
                DataSourceUpdateMode.OnPropertyChanged));

            listBox1.DataSource = _servers.Server;
            listBox1.DisplayMember = "Name";
            listBox1.DataBindings.Add(new Binding("Text", _servers.Server, "Name", true,
                DataSourceUpdateMode.OnPropertyChanged));

            _announcements = announcements;
            _announcement = _announcements.Announcement.FirstOrDefault() ?? new Announcement();

            _announcementBindingSource = new BindingSource();
            _announcementBindingSource.DataSource = _announcement;

            appIdTextBox.DataBindings.Add(new Binding("Text", _announcementBindingSource, nameof(_announcement.AppId),
                true,
                DataSourceUpdateMode.OnPropertyChanged));
            lingerTimeTextBox.DataBindings.Add(new Binding("Text", _announcementBindingSource,
                nameof(_announcement.LingerTime), true,
                DataSourceUpdateMode.OnPropertyChanged));

            listBox2.DataSource = _announcements.Announcement;
            listBox2.DisplayMember = "Id";
            listBox2.DataBindings.Add(new Binding("Text", _announcements.Announcement, "Id", true,
                DataSourceUpdateMode.OnPropertyChanged));
        }

        #endregion

        #region Event Handlers

        private void CheckBox1_CheckedChanged(object sender, EventArgs e)
        {
            _mainForm.Configuration.LaunchOnBoot = ((CheckBox)sender).Checked;

            _mainForm.ChangedConfigurationContinuation.Schedule(TimeSpan.FromSeconds(1),
                async () => { await _mainForm.SaveConfiguration(); }, _cancellationToken);

            Miscellaneous.LaunchOnBootSet(_mainForm.Configuration.LaunchOnBoot);
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            var server = new Server();
            server.Name = "New Server";

            _servers.Server.Add(server);
            _serverBindingSource.DataSource = server;

            Save?.Invoke(this, new SettingsSavedEventArgs(_servers, _announcements));

            listBox1.SelectedItem = server;
        }

        private void Button2_Click(object sender, EventArgs e)
        {
            var index = -1;

            if (listBox1.SelectedItem is Server server)
            {
                index = listBox1.Items.IndexOf(server);
                _servers.Server.Remove(server);
            }

            if (index >= listBox1.Items.Count)
            {
                --index;
            }

            listBox1.SelectedIndex = index;
        }

        private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            var listBox = (ListBox)sender;
            if (listBox.SelectedIndex == -1)
            {
                _serverBindingSource.DataSource = new
                    { Name = string.Empty, Url = string.Empty, Username = string.Empty, Password = string.Empty };
                return;
            }

            if (listBox.SelectedItem is Server server)
            {
                _server = server;

                _serverBindingSource.DataSource = _server;
            }
        }

        private void Button3_Click(object sender, EventArgs e)
        {
            if (listBox2.SelectedItem is Announcement announcement) _announcements.Announcement.Remove(announcement);
        }

        private void Button4_Click(object sender, EventArgs e)
        {
            var announcement = new Announcement();
            if (int.TryParse(appIdTextBox.Text, out var appId)) announcement.AppId = appId;

            if (int.TryParse(lingerTimeTextBox.Text, out var lingerTime)) announcement.LingerTime = lingerTime;

            _announcements.Announcement.Add(announcement);

            Save?.Invoke(this, new SettingsSavedEventArgs(_servers, _announcements));

            listBox2.SelectedItem = announcement;
        }

        private void ListBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            var listBox = (ListBox)sender;

            if (listBox.SelectedItem is Announcement announcement)
            {
                _announcement = announcement;

                _announcementBindingSource.DataSource = _announcement;
            }
        }

        private void Button6_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void Button5_Click(object sender, EventArgs e)
        {
            Save?.Invoke(this, new SettingsSavedEventArgs(_servers, _announcements));

            Close();
        }

        private void SettingsForm_Load(object sender, EventArgs e)
        {
            checkBox1.Checked = _mainForm.Configuration.LaunchOnBoot;
        }

        #endregion

        private void CheckBox2_CheckedChanged(object sender, EventArgs e)
        {
            _mainForm.Configuration.IgnoreSelfSignedCertificates = ((CheckBox)sender).Checked;

            _mainForm.ChangedConfigurationContinuation.Schedule(TimeSpan.FromSeconds(1),
                async () => { await _mainForm.SaveConfiguration(); }, _cancellationToken);
        }
    }
}

Generated by GNU Enscript 1.6.5.90.