Winify – Rev 69

Subversion Repositories:
Rev:
using System;
using System.Linq;
using System.Threading;
using System.Windows.Forms;
using Announcements;
using Servers;

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 Announcements.Announcements _announcements;

        private readonly BindingSource _serverBindingSource;

        private Servers.Servers _servers;

        private Announcement _announcement;

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

        #endregion

        #region Constructors, Destructors and Finalizers

        public SettingsForm()
        {
            InitializeComponent();
        }

        public SettingsForm(MainForm mainForm, Servers.Servers servers, Announcements.Announcements announcements,
            CancellationToken cancellationToken) : this()
        {
            _mainForm = mainForm;
            _servers = servers;
            _announcements = announcements;
            _cancellationToken = cancellationToken;

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

            _configurationProxyBindingSource = new BindingSource();
            _configurationProxyBindingSource.DataSource = _mainForm.Configuration.Proxy;

            switch (_servers?.Server == null)
            {
                case true:
                    _servers = new Servers.Servers();
                    _server = new Server();
                    _servers.Server.Add(_server);
                    break;
                default:
                    _server = _servers.Server.FirstOrDefault();
                    if (_server == null)
                    {
                        _server = new Server();
                        _servers.Server.Add(_server);
                    }
                    break;
            }

            _serverBindingSource = new BindingSource();
            _serverBindingSource.DataSource = _server;

            switch (_announcements?.Announcement == null)
            {
                case true:
                    _announcements = new Announcements.Announcements();
                    _announcement = new Announcement();
                    _announcements.Announcement.Add(_announcement);
                    break;
                default:
                    _announcement = _announcements.Announcement.FirstOrDefault();
                    if (_announcement == null)
                    {
                        _announcement = new Announcement();
                        _announcements.Announcement.Add(_announcement);
                    }
                    break;
            }

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

        #endregion

        #region Event Handlers

        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();
        }

        #endregion

        private void checkBox4_CheckedStateChanged(object sender, EventArgs e)
        {
            var checkBox = (CheckBox)sender;
            var state = checkBox.Checked;
            if (state)
            {
                ToggleTableRow(tableLayoutPanel13, 0, false);

                return;
            }

            ToggleTableRow(tableLayoutPanel13, 0, true);
        }

        private static void ToggleTableRow(TableLayoutPanel tableLayoutPanel, int row, bool enable)
        {
            var count = tableLayoutPanel.RowCount;
            foreach (var i in Enumerable.Range(0, count))
            {
                var control = tableLayoutPanel.GetControlFromPosition(i, row);
                control.Enabled = enable;
            }
        }

        private void SettingsForm_Load(object sender, EventArgs e)
        {
            Utilities.WindowState.FormTracker.Track(this);

            // Databindings.
            trackBar1.DataBindings.Add(new Binding("Value", _configurationBindingSource,
                nameof(_mainForm.Configuration.RetrievePastNotificationHours), true,
                DataSourceUpdateMode.OnPropertyChanged));

            textBox4.DataBindings.Add(new Binding("Text", _configurationBindingSource,
                nameof(_mainForm.Configuration.RetrievePastNotificationHours), true,
                DataSourceUpdateMode.OnPropertyChanged));

            numericUpDown1.DataBindings.Add(new Binding("Value", _configurationBindingSource,
                nameof(_mainForm.Configuration.ToastDuration), true,
                DataSourceUpdateMode.OnPropertyChanged));

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

            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));

            checkBox3.DataBindings.Add(
                new Binding("Checked", _configurationProxyBindingSource, nameof(_mainForm.Configuration.Proxy.Enable), true,
                    DataSourceUpdateMode.OnPropertyChanged));
            textBox1.DataBindings.Add(
                new Binding("Text", _configurationProxyBindingSource, nameof(_mainForm.Configuration.Proxy.Url), true,
                    DataSourceUpdateMode.OnPropertyChanged));
            textBox2.DataBindings.Add(
                new Binding("Text", _configurationProxyBindingSource, nameof(_mainForm.Configuration.Proxy.Username), true,
                    DataSourceUpdateMode.OnPropertyChanged));
            textBox3.DataBindings.Add(
                new Binding("Text", _configurationProxyBindingSource, nameof(_mainForm.Configuration.Proxy.Password), 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));

            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));

            // Miscellaneous.
            ToggleTableRow(tableLayoutPanel13, 0, !_mainForm.Configuration.InfiniteToastDuration);
        }

        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {

        }
    }
}

Generated by GNU Enscript 1.6.5.90.