Пример #1
0
        void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            // Retrieve arguments
            int      parentFileIndex = (int)(e.Argument as List <object>)[0];
            MASSFile file            = (MASSFile)(e.Argument as List <object>)[1];

            int progressPercentage = 0;

            // Loop through all subfiles
            for (int i = 0; i < file.SubFileCount; i++)
            {
                // Recalculate current progress percent
                progressPercentage = Convert.ToInt32(((double)i / file.SubFileCount) * 100);

                // Report Progress
                List <object> progressState = new List <object> {
                    parentFileIndex, i, file.SubFiles[i].Header.Name
                };
                (sender as BackgroundWorker).ReportProgress(progressPercentage, progressState);

                // Sleep, sweet summer child
                Thread.Sleep(1);
            }

            e.Result = parentFileIndex;
        }
Пример #2
0
        private void ParentFileRepack_Click(object sender, RoutedEventArgs e)
        {
            var parent = (TreeViewItem)FileTree.Items[0];

            MASSFile context = (MASSFile)parent.DataContext;

            SaveFileDialog saveDialog = new SaveFileDialog
            {
                Filter   = $"{context.Name} | *.*",
                FileName = context.Name
            };

            if (saveDialog.ShowDialog() == true)
            {
                FileHandler.Save(saveDialog.FileName, context.GetData());
            }

            // FileHandler.Save(); ;
        }
Пример #3
0
        private void PopulateAsync(string targetFile)
        {
            // Clean up PropertyListView items for later
            PropertyListView.Items.Clear();


            //FileHandler.GetFormat(targetFile);
            //XBNFile s = FileHandler.Open<XBNFile>(targetFile);
            // TODO: Don't assume type MASSFile
            MASSFile file = FileHandler.Open <MASSFile>(targetFile);

            // Clear Tree of previous files
            // TODO: remove this for multi-file support
            FileTree.Items.Clear();

            // Add parent to file tree and save its index
            int parentFileIndex = FileTree.Items.Add(new TreeViewItem
            {
                DataContext = file,
                Header      = $"{file.Name} ({file.SubFileCount} files)",
                IsExpanded  = true
            });

            ((TreeViewItem)FileTree.Items[parentFileIndex]).Selected   += TreeViewFile_Selected;
            ((TreeViewItem)FileTree.Items[parentFileIndex]).ContextMenu = (ContextMenu)this.Resources["TreeViewItemContextMenu"];

            // Create a new BackgroundWorker for populating FileTree
            BackgroundWorker worker = new BackgroundWorker {
                WorkerReportsProgress = true
            };

            worker.DoWork             += Worker_DoWork;
            worker.ProgressChanged    += Worker_ProgressChanged;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;

            // Execute worker, sending the parentIndex and MASSFile
            worker.RunWorkerAsync(new List <object> {
                parentFileIndex,
                file
            });
        }