using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace SmallNotepad
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            #if DEBUG
                MinimizeBox = false;
            #else       
                MinimizeBox = true;
            #endif
        }

        string fname = "";
        bool flag = false;

        private void MainForm_Load(object sender, EventArgs e)
        {
            // Устанавливаем фокус
            txtEditor.Focus();
            // Высоту текстового поля устанавливаем в зависимости от SIP
            SetTextBoxHeight();
        }

        // устанавливаем размеры текстового поля 
        // в зависимости от активности SIP
        private void SetTextBoxHeight()
        {
            if (inputPanel.Enabled)
                txtEditor.Height = inputPanel.VisibleDesktop.Height + 2;
            else
                txtEditor.Height = this.Height;
        }

        private void inputPanel_EnabledChanged(object sender, EventArgs e)
        {
            SetTextBoxHeight();
        }

        private void menuItemCopy_Click(object sender, EventArgs e)
        {
            // Копируем выделенный текст в буфер обмена
            if (txtEditor.SelectedText != "")
                Clipboard.SetDataObject(txtEditor.SelectedText);
        }

        private void menuItemPaste_Click(object sender, EventArgs e)
        {
            // Вставляем текст из буфера обмена в текстовое поле

            // Получаем данные из буфера обмена
            IDataObject iData = Clipboard.GetDataObject();

            // Если в буфере находится текст
            //if (iData.GetDataPresent(DataFormats.Text))
            //{
            //    // То вставляем его в текстовое поле
            //    txtEditor.SelectedText = (String)iData.GetData(DataFormats.Text);
            //}

            if (IsText())
                txtEditor.SelectedText = (string)iData.GetData(DataFormats.Text);
        }

        private void menuItemSelectAll_Click(object sender, EventArgs e)
        {
            // Выделяем весь текст
            txtEditor.SelectAll();
        }

        private void menuItemDelete_Click(object sender, EventArgs e)
        {
            // Удаляем выделенный текст
            txtEditor.SelectedText = "";
        }

        private void menuItemCut_Click(object sender, EventArgs e)
        {
            // Вырезаем текст
            // Сначала копируем выделенный текст в буфер обмена
            if (txtEditor.SelectedText != "")
                Clipboard.SetDataObject(txtEditor.SelectedText);
            // Затем удаляем выделенный текст
            txtEditor.SelectedText = "";
        }

        private void menuItemUndo_Click(object sender, EventArgs e)
        {
            txtEditor.Undo();
        }

        private void cmenuItemCut_Click(object sender, EventArgs e)
        {
            // Вырезаем текст
            // Сначала копируем выделенный текст в буфер обмена
            if (txtEditor.SelectedText != "")
                Clipboard.SetDataObject(txtEditor.SelectedText);
            // Затем удаляем выделенный текст
            txtEditor.SelectedText = "";
        }

        private void cmenuItemCopy_Click(object sender, EventArgs e)
        {
            // Копируем выделенный текст в буфер обмена
            if (txtEditor.SelectedText != "")
                Clipboard.SetDataObject(txtEditor.SelectedText);
        }

        private void menuItemEdit_Popup(object sender, EventArgs e)
        {
            if (IsText())
            {
                menuItemPaste.Enabled = true;
            }
            else
            {
                menuItemPaste.Enabled = false;
            }

            //Если текст выделен
            if (txtEditor.SelectionLength > 0)
            {
                menuItemCut.Enabled = true;
                menuItemCopy.Enabled = true;
                menuItemDelete.Enabled = true;
            }
            // А если не выделен
            else
            {
                menuItemCut.Enabled = false;
                menuItemCopy.Enabled = false;
                menuItemDelete.Enabled = false;
            }
        }

        public bool IsText()
        {
            // Получаем данные из буфера обмена
            IDataObject iData = Clipboard.GetDataObject();

            // Если в буфере находится текст
            if (iData.GetDataPresent(DataFormats.Text))
            {
                return true;
            }
            else return false;
        }

        private void cmenuItemPaste_Click(object sender, EventArgs e)
        {
            // Вставляем текст из буфера обмена в текстовое поле

            // Получаем данные из буфера обмена
            IDataObject iData = Clipboard.GetDataObject();

            if (IsText())
                txtEditor.SelectedText = (string)iData.GetData(DataFormats.Text);
        }

        private void contextMenu1_Popup(object sender, EventArgs e)
        {
            if (IsText())
            {
                cmenuItemPaste.Enabled = true;
            }
            else
            {
                cmenuItemPaste.Enabled = false;
            }

            //Если текст выделен
            if (txtEditor.SelectionLength > 0)
            {
                cmenuItemCut.Enabled = true;
                cmenuItemCopy.Enabled = true;
                cmenuItemDelete.Enabled = true;
            }
            // А если не выделен
            else
            {
                cmenuItemCut.Enabled = false;
                cmenuItemCopy.Enabled = false;
                cmenuItemDelete.Enabled = false;
            }
        }

        private void menuItemOpen_Click(object sender, EventArgs e)
        {
            openFileDlg.Filter = "Текстовые документы (*.txt)|*.txt|Все файлы|*.*";
            openFileDlg.ShowDialog();
            if (File.Exists(openFileDlg.FileName))
            {
                fname = openFileDlg.FileName;
                StreamReader sr = new StreamReader(fname,
                   System.Text.Encoding.GetEncoding("Windows-1251"),
                   false);
                txtEditor.Text = sr.ReadToEnd();
                flag = false;
                sr.Close();
            }
        }

        private void menuItemSave_Click(object sender, EventArgs e)
        {
            SaveData();
        }

        private void SaveData()
        {
            if (fname == "")
            {
                saveFileDlg.Filter = "Текстовые документы (*.txt)|*.txt|Все файлы|*.*";
                DialogResult res = saveFileDlg.ShowDialog();
                if (res == DialogResult.Cancel)
                {
                    return;
                }
                fname = saveFileDlg.FileName;
                MessageBox.Show(fname);
            }
            StreamWriter sw = new StreamWriter(fname, false,
            System.Text.Encoding.GetEncoding("Windows-1251"));
            sw.WriteLine(txtEditor.Text);
            sw.Flush();
            sw.Close();
            flag = false;
        }

        private void menuItemSaveAs_Click(object sender, EventArgs e)
        {
            saveFileDlg.Filter = "Текстовые документы (*.txt)|*.txt|Все файлы|*.*";
            saveFileDlg.ShowDialog();
            fname = saveFileDlg.FileName;
            SaveData();
        }

        private void txtEditor_TextChanged(object sender, EventArgs e)
        {
            flag = true;
        }

        private void menuItemExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void menuItemAbout_Click(object sender, EventArgs e)
        {
            AboutForm about = new AboutForm();
            about.ShowDialog();
        }

        private void MainForm_HelpRequested(object sender, HelpEventArgs hlpevent)
        {
            Help.ShowHelp(this, "snotepad.htm");
        }


    }
}