Horizon – Rev 1

Subversion Repositories:
Rev:
using System;
using System.Drawing;
using System.Windows.Forms;
using Horizon.Database;
using Horizon.Utilities;

namespace Horizon.Snapshots
{
    public partial class SnapshotPreviewForm : Form
    {
        #region Private Methods

        private void Relocate()
        {
            _snapshotManagerForm.InvokeIfRequired(snapshotForm =>
            {
                var snapshotPreviewLocation = snapshotForm.Location;
                Location = new Point(snapshotPreviewLocation.X + snapshotForm.Size.Width,
                    snapshotPreviewLocation.Y);
            });
        }

        #endregion

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

        private readonly SnapshotDatabase _snapshotDatabase;

        private readonly SnapshotManagerForm _snapshotManagerForm;

        #endregion

        #region Constructors, Destructors and Finalizers

        public SnapshotPreviewForm()
        {
            InitializeComponent();
            Utilities.WindowState.FormTracker.Track(this);
        }

        public SnapshotPreviewForm(SnapshotManagerForm snapshotManagerForm, SnapshotDatabase snapshotDatabase) : this()
        {
            _snapshotManagerForm = snapshotManagerForm;
            _snapshotManagerForm.Move += SnapshotManagerFormMove;
            _snapshotManagerForm.Resize += SnapshotManagerFormResize;
            _snapshotManagerForm.PreviewRetrieved += SnapshotManagerForm_PreviewRetrieved;
            ;

            _snapshotDatabase = snapshotDatabase;
            _snapshotDatabase.SnapshotNoteUpdate += SnapshotDatabase_SnapshotNoteUpdate;
        }

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

            _snapshotDatabase.SnapshotNoteUpdate -= SnapshotDatabase_SnapshotNoteUpdate;
            _snapshotManagerForm.PreviewRetrieved -= SnapshotManagerForm_PreviewRetrieved;

            _snapshotManagerForm.Move -= SnapshotManagerFormMove;
            _snapshotManagerForm.Resize -= SnapshotManagerFormResize;

            base.Dispose(disposing);
        }

        #endregion

        #region Event Handlers

        private void SnapshotManagerForm_PreviewRetrieved(object sender, PreviewRetrievedEventArgs e)
        {
            using (var image = pictureBox1.Image)
            {
                pictureBox1.Image = e.SnapshotPreview.Shot;
                richTextBox1.Text = e.SnapshotPreview.Note;
            }

            if (string.IsNullOrEmpty(e.SnapshotPreview.Note))
            {
                splitContainer1.Panel2Collapsed = true;
                return;
            }

            splitContainer1.Panel2Collapsed = false;
        }

        private void SnapshotDatabase_SnapshotNoteUpdate(object sender, SnapshotNoteUpdateEventArgs e)
        {
            switch (e)
            {
                case SnapshotNoteUpdateSuccessEventArgs snapshotNoteUpdateSuccessEventArgs:

                    richTextBox1.InvokeIfRequired(richTextBox =>
                    {
                        richTextBox.Text = snapshotNoteUpdateSuccessEventArgs.Note;
                    });

                    splitContainer1.InvokeIfRequired(splitContainer =>
                    {
                        if (string.IsNullOrEmpty(snapshotNoteUpdateSuccessEventArgs.Note))
                        {
                            splitContainer.Panel2Collapsed = true;
                            return;
                        }

                        splitContainer.Panel2Collapsed = false;
                    });
                    break;
                case SnapshotNoteUpdateFailureEventArgs _:
                    break;
            }
        }

        private void SnapshotManagerFormResize(object sender, EventArgs e)
        {
            Relocate();
        }

        private void SnapshotPreviewForm_Load(object sender, EventArgs e)
        {
            Relocate();
        }

        private void SnapshotManagerFormMove(object sender, EventArgs e)
        {
            Relocate();
        }

        private void SplitContainer1_Paint(object sender, PaintEventArgs e)
        {
            var control = (SplitContainer)sender;
            // paint the three dots
            var points = new Point[3];
            var w = control.Width;
            var h = control.Height;
            var d = control.SplitterDistance;
            var sW = control.SplitterWidth;

            //calculate the position of the points
            if (control.Orientation == Orientation.Horizontal)
            {
                points[0] = new Point(w / 2, d + sW / 2);
                points[1] = new Point(points[0].X - 10, points[0].Y);
                points[2] = new Point(points[0].X + 10, points[0].Y);
            }
            else
            {
                points[0] = new Point(d + sW / 2, h / 2);
                points[1] = new Point(points[0].X, points[0].Y - 10);
                points[2] = new Point(points[0].X, points[0].Y + 10);
            }

            foreach (var p in points)
            {
                p.Offset(-2, -2);
                e.Graphics.FillEllipse(SystemBrushes.ControlDark,
                    new Rectangle(p, new Size(3, 3)));

                p.Offset(1, 1);
                e.Graphics.FillEllipse(SystemBrushes.ControlLight,
                    new Rectangle(p, new Size(3, 3)));
            }
        }

        #endregion
    }
}

Generated by GNU Enscript 1.6.5.90.