using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Reflection;
using MahApps.Metro.Controls;

namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{
    /// <summary>
    /// 创建时间:2012年2月22日
    /// 创建者:  杨震宇
    /// 
    /// 主要用途:自定义的关于框。
    ///           AboutBox.xaml 的交互逻辑
    /// </summary>
    public partial class AboutBox : MetroWindow
    {
        public AboutBox(Window owner)
        {
            InitializeComponent();

            this.Owner = owner;
        }

        private void BtnOk_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }

    /// <summary>
    /// 主要用途:利用反射取出需要呈现在“关于”框中的几个属性值。然后在关于框中可以直接利用x:Static 绑定。
    /// </summary>
    public class AssemblyInfoWrap
    {
        /// <summary>
        /// [静态构造方法]利用反射取出相关属性的值。
        /// </summary>
        static AssemblyInfoWrap()
        {
            var assembly = System.Reflection.Assembly.GetExecutingAssembly();
            object[] attributes = assembly.GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
            if (attributes.Length > 0)
            {
                company = (attributes[0] as AssemblyCompanyAttribute).Company;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false);
            if (attributes.Length > 0)
            {
                copyright = (attributes[0] as AssemblyCopyrightAttribute).Copyright;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
            if (attributes.Length > 0)
            {
                description = (attributes[0] as AssemblyDescriptionAttribute).Description;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false);
            if (attributes.Length > 0)
            {
                product = (attributes[0] as AssemblyProductAttribute).Product;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
            if (attributes.Length > 0)
            {
                title = (attributes[0] as AssemblyTitleAttribute).Title;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyTrademarkAttribute), false);
            if (attributes.Length > 0)
            {
                trademark = (attributes[0] as AssemblyTrademarkAttribute).Trademark;
            }

            attributes = assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
            if (attributes.Length > 0)
            {
                version = (attributes[0] as AssemblyFileVersionAttribute).Version;
            }
        }

        private static string company;
        /// <summary>
        /// [只读]返回公司名。
        /// </summary>
        public static string Company
        {
            get { return AssemblyInfoWrap.company; }
        }

        private static string copyright;
        /// <summary>
        /// [只读]返回版权声明。
        /// </summary>
        public static string Copyright
        {
            get { return AssemblyInfoWrap.copyright; }
        }

        private static string description;
        /// <summary>
        /// [只读]返回描述。
        /// </summary>
        public static string Description
        {
            get { return AssemblyInfoWrap.description; }
        }

        private static string product;
        /// <summary>
        /// [只读]返回产品名。
        /// </summary>
        public static string Product
        {
            get { return AssemblyInfoWrap.product; }
        }

        private static string title;
        /// <summary>
        /// [只读]返回程序标题。
        /// </summary>
        public static string Title
        {
            get { return AssemblyInfoWrap.title; }
        }

        private static string trademark;
        /// <summary>
        /// [只读]返回商标名。
        /// </summary>
        public static string Trademark
        {
            get { return AssemblyInfoWrap.trademark; }
        }

        private static string version;
        /// <summary>
        /// [只读]返回程序版本号字符串。
        /// </summary>
        public static string Version
        {
            get { return AssemblyInfoWrap.version; }
        }
    }
}