Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст программы.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
102.68 Кб
Скачать

TextAddForm.Cs

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using VStepanov.CourseWork.First;

using VStepanov.CourseWork.First.Steganography;

namespace VStepanov.CourseWork.First.Gui

{

    /// <summary>

    /// Форма, предоставляющая интерфейс для добавления текста в контейнер.

    /// </summary>

    public partial class TextAddForm : Form

    {

        #region Поля

        /// <summary>

        /// Стеганограмма, обрабатываемая в данный момент.

        /// </summary>

        public Steganogram Steganogram { get; private set; } 

        #endregion

        #region Конструкторы

        /// <summary>

        /// Конструктор формы добавления текста.

        /// </summary>

        /// <param name="steganogram">Стеганограмма, в которую будет проводиться запись.</param>

        public TextAddForm(Steganogram steganogram)

        {

            InitializeComponent();

            Steganogram = steganogram;

            if (steganogram.Info.HasValue)

            {

                trackBarBits.Value = steganogram.Info.Value.nLastBitsUsing;

            }

            else

            {

                trackBarBits.Value = 2;

            }

            this.Text = Steganogram.ContainerFile.Name;

        }

        /// <summary>

        /// Конструктор формы добавления текста с исходным заданным текстом.

        /// </summary>

        /// <param name="steganogram">Стеганограмма, в которую будет проводиться запись.</param>

        /// <param name="content">Исходный текст.</param>

        public TextAddForm(Steganogram steganogram, string content)

            : this(steganogram)

        {

            textBoxContent.Text = content;

        }

        #endregion

        #region Обработчики событий

        /// <summary>

        /// Обработчик нажатия на кнопку записи.

        /// </summary>

        private void buttonWrite_Click(object sender, EventArgs e)

        {

            (Program.MainForm.CurrentForm as AnimatedForm).ContainerWatcher.EnableRaisingEvents = false;

            SteganogramMessage message;

            SteganogramInfo info;

            if (textBoxPassword.Text != String.Empty)

            {

                message = SteganogramMessage.FromString(textBoxContent.Text, textBoxPassword.Text);

            }

            else

            {

                message = SteganogramMessage.FromString(textBoxContent.Text);

            }

            info = new SteganogramInfo(message, trackBarBits.Value);

            Steganogram.WriteSteganogramToFile(info, message);

            this.Hide();

            this.Close();

            MessageBox.Show("Сообщение записано в контейнер.\nОбновлённый контейнер находится по прежнему адресу.\n\nИзображение-контейнер готово для передачи.");

            (Program.MainForm.CurrentForm as AnimatedForm).ContainerWatcher.EnableRaisingEvents = true;

        }

        /// <summary>

        /// Обработчик изменения значения переключателя числа последних бит.

        /// </summary>

        private void trackBarBits_ValueChanged(object sender, EventArgs e)

        {

            int limit = Steganogram.GetMessageMaxLength(trackBarBits.Value);

            string ending = String.Empty;

            if (limit % 10 < 5 && limit % 10 != 1)

            {

                if ((limit % 100 > 10 && limit % 100 < 20) || limit % 10 == 0)

                {

                    ending = "ов";

                }

                else

                {

                    ending = "а";

                }

            }

            else if (limit >= 5)

            {

                ending = "ов";

            }

            labelSizeLimit.Text = String.Format("Возможно записать\nсообщение, длинной не более,\nчем {0} символ{1}.", limit, ending);

            textBoxContent.MaxLength = limit > 0 ? limit : 0;

        }

        #endregion

    }

}