private void Items_CurrentChanging(object sender, System.ComponentModel.CurrentChangingEventArgs e)
        {
            // Annuler l'événement si nécessaire
            if (!this.IsLoaded || tabControl.SelectedIndex < 0 || _tabState == TabStateEnum.Change1)
            {
                if (e.IsCancelable)
                {
                    e.Cancel = true;
                }
                return;
            }

            // 2ème étape du changement
            if (_tabState == TabStateEnum.Change2)
            {
                _tabState = TabStateEnum.Normal;
                return;
            }

            // Se souvenir de l'onglet sélectionner et annuler l'action (elle sera refaite manuellement après animation)
            int previousIndex = tabControl.SelectedIndex;

            if (e.IsCancelable)
            {
                e.Cancel = true;
            }

            // Démarrer l'animation de sortie
            ModFactory.ChangeTabAnimation(_currentGameName, 0);

            // Mettre à jour le statut
            _tabState = TabStateEnum.Change1;

            // Attendre la fin de l'animation
            Task.Factory.StartNew(() =>
            {
                Thread.Sleep(Convert.ToInt32(CHANGE_TAB_ANIMATION_DURATION_IN_SECONDS * 1000));
            }).ContinueWith(antecedent =>
            {
                // Stuff pour que l'animation fonctionne
                tabControl.SelectedIndex = -1;
                _tabState = TabStateEnum.Change2;
                tabControl.SelectedIndex = previousIndex;

                // Prendre note du changement de jeu
                _currentGameName = ((TabItem)tabControl.Items.GetItemAt(tabControl.SelectedIndex)).Name;

                // Afficher et lancer l'animation
                ModFactory.Refresh(_currentGameName, true);
                ModFactory.ChangeTabAnimation(_currentGameName, 1);
            }, _uiScheduler);
        }
        private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
        {
            DataContext = this;

            // Faire la collection pour le tab
            TabItem tabItemGenerals = new TabItem {
                Header = "GENERALS", Name = "Generals"
            };
            ScrollViewer svGenerals = new ScrollViewer {
                Name = "svGenerals", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, 0), VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            };

            tabItemGenerals.Content = svGenerals;
            Grid gridGenerals = new Grid {
                Name = "gridButtonsGenerals"
            };

            svGenerals.Content = gridGenerals;

            TabItem tabItemHeureH = new TabItem {
                Header = "HEURE H", Name = "HeureH"
            };
            ScrollViewer svHeureH = new ScrollViewer {
                Name = "svHeureH", HorizontalAlignment = HorizontalAlignment.Left, Margin = new Thickness(0, 0, 0, 0), VerticalScrollBarVisibility = ScrollBarVisibility.Auto
            };

            tabItemHeureH.Content = svHeureH;
            Grid gridHeureH = new Grid {
                Name = "gridButtonsHeureH"
            };

            svHeureH.Content = gridHeureH;

            TabItems = new List <TabItem>();
            TabItems.Add(tabItemGenerals);
            TabItems.Add(tabItemHeureH);

            TabItemsCollectionView = new ListCollectionView(TabItems);

            // Load mods
            _currentGameName = "HeureH";
            ModFactory.Init(this, new List <string> {
                "Generals", "HeureH"
            }, new List <string> {
                _pathToMapsGenerals, _pathToMapsZeroHour
            }, _pathToExe, _uiScheduler,
                            new List <Grid> {
                gridGenerals, gridHeureH
            },
                            new List <double> {
                Convert.ToInt32(_currentGameName.Equals("Generals")), Convert.ToInt32(_currentGameName.Equals("HeureH"))
            },
                            new List <ComboBox> {
                comboBoxMapsGenerals, comboBoxMapsHeureH
            },
                            new List <CheckBox> {
                checkBoxGentoolGenerals, checkBoxGentoolHeureH
            },
                            new List <CheckBox> {
                checkBoxForceZoomGenerals, checkBoxForceZoomHeureH
            });

            // Evenements sur changement de tab
            tabControl.SelectionChanged += tabControl_SelectionChanged;

            // Sélectionner le bon jeu
            tabControl.SelectedIndex = 1;

            // Réappliquer les sélection après update
            if ((bool)Properties.Settings.Default["JustUpdated"])
            {
                ModFactory.AllGamesRefreshForceZoom();
                ModFactory.AllGamesRefreshFullscreenMode();
                ModFactory.AllGamesRefreshGentool();
                Properties.Settings.Default["JustUpdated"] = false;
                Properties.Settings.Default.Save();
            }

            // Démarrer l'affichage
            ModFactory.Refresh(_currentGameName);

            // Démarrer le détecteur de lancement
            MonitorGameRunning();
        }