private void Button_Cancel_Click(object sender, RoutedEventArgs e)
        {
            if (TableTo == null)
            {
                MessageBox.Show("Please open a database to continue.",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            for (int i = 0; i < changesTo.Count; i++)
            {
                CardItem card = changesTo[i];
                if (card.IsOriginal)
                {
                    card.IsDeleted = false;
                    card.IsNew     = false;
                }
                else
                {
                    changesTo.RemoveAt(i);
                    card.IsNew = false;
                    i--;
                }
            }
            ListBox_TransTo.Items.Refresh();
            ListBox_TransFrom.Items.Refresh();
            hasChanges = false;
        }
        private void LoadFromCard(CardItem card, string databasePath)
        {
            ///<summary>
            ///[Card Types?] Monster Type?/Attribute?
            ///[Level] ATK/DEF PendScaleL/PendScaleR
            ///Card Text
            ///</summary>

            //Get Zip File Path
            string imageFile   = Path.GetDirectoryName(databasePath) + "\\pics\\" + card.Code + ".jpg";
            string zipFileName = GetZipFilePath(databasePath);

            //if (Image_SelCard.Source != null) Image_SelCard.Source;
            if (File.Exists(imageFile))
            {
                using (var fileStream = File.Open(imageFile, FileMode.Open))
                    using (var memoryStream = new MemoryStream())
                    {
                        fileStream.CopyTo(memoryStream);
                        memoryStream.Position = 0;

                        var bitmap = new BitmapImage();
                        bitmap.BeginInit();
                        bitmap.CacheOption  = BitmapCacheOption.OnLoad;
                        bitmap.StreamSource = memoryStream;
                        bitmap.EndInit();

                        Image_SelCard.Source = bitmap;
                    }
            }
            else if (File.Exists(zipFileName))
            {
                using (var zipFile = ZipFile.OpenRead(zipFileName))
                {
                    var picEntry = zipFile.GetEntry("pics/" + card.Code + ".jpg");
                    if (picEntry != null)
                    {
                        using (var zipStream = picEntry.Open())
                            using (var memoryStream = new MemoryStream())
                            {
                                if (Image_SelCard.Source != null)
                                {
                                    ((BitmapImage)Image_SelCard.Source).StreamSource.Close();
                                }
                                zipStream.CopyTo(memoryStream); // here
                                memoryStream.Position = 0;

                                var bitmap = new BitmapImage();
                                bitmap.BeginInit();
                                bitmap.CacheOption  = BitmapCacheOption.OnLoad;
                                bitmap.StreamSource = memoryStream;
                                bitmap.EndInit();

                                Image_SelCard.Source = bitmap;
                            }
                    }
                }
            }
        }
        private void ListBox_TransTo_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            if (ListBox_TransTo.SelectedItem == null)
            {
                return;
            }
            CardItem selectedCard = (CardItem)ListBox_TransTo.SelectedItem;

            if (selectedCard.IsNew)
            {
                LoadFromCard(selectedCard, fromFilePath);
            }
            else
            {
                LoadFromCard(selectedCard, toFilePath);
            }
        }
        private void Button_Transfer_Click(object sender, RoutedEventArgs e)
        {
            if (TableTo == null || TableFrom == null)
            {
                //Check if Database has been Opened (Initialized)
                MessageBox.Show("Please open a database to continue.",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            else if (ListBox_TransFrom.SelectedItem == null)
            {
                //Make Sure Item is Selected
                MessageBox.Show("Select a card to transfer.",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //Add New Card to Changes
            CardItem selectedCard = (CardItem)ListBox_TransFrom.SelectedItem;
            int      index        = changesTo.FindIndex(item => item.Code == selectedCard.Code);

            //Determine whether to Update or Add card
            if (index != -1)
            {
                if (!changesTo[index].IsNew)
                {
                    //Set the Change as Replacement IsNew = true & IsDeleted = true
                    changesTo[index].IsNew     = true;
                    changesTo[index].IsDeleted = true;
                }
            }
            else
            {
                changesTo.Add(selectedCard); //Add New Card to List
                ListBox_TransTo.Items.Refresh();
                selectedCard.IsNew = true;
            }

            //Refresh List
            SortListChanged();
        }
        private void Button_Delete_Click(object sender, RoutedEventArgs e)
        {
            if (TableTo == null)
            {
                MessageBox.Show("Please open a database to continue.",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            else if (ListBox_TransTo.SelectedItem == null)
            {
                MessageBox.Show("Select a card to delete.",
                                "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            //Get Selected Item
            CardItem selectedCard = (CardItem)ListBox_TransTo.SelectedItem;

            //Remove from List if it is not already in Database Originally
            if (!selectedCard.IsOriginal)
            {
                changesTo.Remove(selectedCard);
                selectedCard.IsNew = false;
            }
            else
            {
                if (selectedCard.IsNew)
                {
                    selectedCard.IsNew     = false;
                    selectedCard.IsDeleted = false;
                }
                else
                {
                    selectedCard.IsDeleted = true;
                }
            }
            //Prevent Loading new Database
            SortListChanged();
        }
 private bool FilterFunc(CardItem card, System.Windows.Controls.TextBox nameBox, System.Windows.Controls.TextBox codeBox)
 {
     return((card.Name.Contains(nameBox.Text) || nameBox.Foreground != Brushes.Black) &&
            (card.Code.ToString().Contains(codeBox.Text) || codeBox.Foreground != Brushes.Black));
 }