public MtbWindow AddWindow(ImageSource Icon, object Content, string Title, MtbPlugin Plugin)
 {
     foreach (TaskBarButton task in tasks.Children)
     {
         if (task.Plugin == Plugin)
         {
             MtbWindow window = new MtbWindow(Icon, Content, Title, task);
             ShowWindow(window);
             windows.Children.Add(window);
             window.Height = windows.ActualHeight;
             window.Width  = windows.ActualWidth;
             return(window);
         }
     }
     return(null);
 }
        public MainWindow()
        {
            SplashScreen splash = new SplashScreen("images/SplashScreen.png");

            splash.Show(true, true);
            //load configuration
            NameValueCollection             cfg           = ConfigurationManager.AppSettings;
            Configuration                   configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
            KeyValueConfigurationCollection c             = configuration.AppSettings.Settings;
            List <string>                   list          = new List <string>(); list.AddRange(c.AllKeys);

            if (!list.Contains("Height"))
            {
                c.Add(new KeyValueConfigurationElement("Height", "720"));
            }
            if (!list.Contains("Width"))
            {
                c.Add(new KeyValueConfigurationElement("Width", "1280"));
            }
            if (!list.Contains("Account"))
            {
                c.Add(new KeyValueConfigurationElement("Account", "Steve"));
            }
            if (!list.Contains("Memory"))
            {
                c.Add(new KeyValueConfigurationElement("Memory", "1024"));
            }
            if (!list.Contains("JavaPath"))
            {
                c.Add(new KeyValueConfigurationElement("JavaPath", ""));
            }
            if (!list.Contains("MCPath"))
            {
                c.Add(new KeyValueConfigurationElement("MCPath", ""));
            }
            if (!list.Contains("DataShare"))
            {
                c.Add(new KeyValueConfigurationElement("DataShare", "true"));
            }
            if (!list.Contains("Online"))
            {
                c.Add(new KeyValueConfigurationElement("Online", "true"));
            }
            if (!list.Contains("FirstRun"))
            {
                c.Add(new KeyValueConfigurationElement("FirstRun", "true"));
            }
            configuration.Save();
            ConfigurationManager.RefreshSection("appSettings");
            Config.UpdateSettings();
            //initialize UI
            InitializeComponent();
            DataContext = this;
            (About.Content as About).ver.Content = "Version: 3.0";
            //load plugins
            if (!Directory.Exists(Environment.CurrentDirectory + "\\plugins"))
            {
                Directory.CreateDirectory(Environment.CurrentDirectory + "\\plugins");
            }
            foreach (string file in Directory.GetFiles(Environment.CurrentDirectory + "\\plugins"))
            {
                if (file.Substring(file.Length - 3) != "dll")
                {
                    continue;
                }
                Assembly asm = Assembly.LoadFile(file);
                Type[]   t   = asm.GetExportedTypes();
                foreach (Type type in t)
                {
                    if (type.BaseType == typeof(MtbPlugin))
                    {
                        MtbPlugin plugin = (MtbPlugin)Activator.CreateInstance(type);
                        plugin.LoadPlugin();
                        if (plugin.CheckUpdate())
                        {
                            Console.WriteLine(plugin.Name + ":" + plugin.UpdateMessage);
                        }

                        foreach (KeyValuePair <string, Tile[]> item in plugin.GetPages())
                        {
                            WrapPanel wp = new WrapPanel {
                                Orientation = Orientation.Vertical, Height = 252
                            };
                            foreach (Tile page in item.Value)
                            {
                                page.Height     = page.Width = 120;
                                page.Background = tileBrush;
                                wp.Children.Add(page);
                            }
                            GroupBox grop = new GroupBox
                            {
                                Header              = item.Key,
                                Content             = wp,
                                Margin              = new Thickness(5, 5, 10, 10),
                                HorizontalAlignment = HorizontalAlignment.Left,
                                Background          = Brushes.Transparent,
                                BorderBrush         = groupBrush
                            };
                            ControlsHelper.SetHeaderFontSize(grop, 14);
                            GroupBoxHelper.SetHeaderForeground(grop, Brushes.White);
                            panel.Children.Add(grop);
                        }
                        tasks.Children.Add(new TaskBarButton {
                            Tip = plugin.Name, Source = plugin.Icon, Plugin = plugin
                        });
                    }
                }
            }
            Task.Run(new Action(CheckUpdate));
        }