private void SaveAllButton_Click(object sender, RoutedEventArgs e)
        {
            var backupSuccess = LocaleEditorCommands.BackupDataFiles(ViewModel, ModuleData.Settings.BackupRootDirectory);

            if (backupSuccess.Result == true)
            {
                var successes = LocaleEditorCommands.SaveDataFiles(ViewModel);
                Log.Here().Important($"Saved {successes} localization files.");
            }
        }
        private async void OpenLocalizationEditorAsync()
        {
            LocaleViewModel localizationData = new LocaleViewModel();

            LocaleEditorCommands.LoadSettings(_instance.ViewModel, localizationData);
            await LocaleEditorCommands.LoadLocalizationDataAsync(localizationData, ViewModel, ViewModel.ManagedProjects.Where(p => p.Selected));

            RxApp.MainThreadScheduler.Schedule(_ =>
            {
                _instance.OpenLocalizationEditorWithData(localizationData);
            });
        }
        public static async Task <Unit> OpenLocalizationEditorForProject(ModProjectData modData)
        {
            Log.Here().Activity($"Opening locale editor for project {modData.DisplayName}");
            LocaleViewModel localizationData = new LocaleViewModel();

            LocaleEditorCommands.LoadSettings(_instance.ViewModel, localizationData);
            await LocaleEditorCommands.LoadLocalizationDataAsync(localizationData, _instance.ViewModel, modData);

            RxApp.MainThreadScheduler.Schedule(_ =>
            {
                _instance.OpenLocalizationEditorWithData(localizationData);
            });
            return(Unit.Default);
        }
        public void LoadFromTextualStream(System.IO.StreamReader stream, char delimiter = '\t')
        {
            int    lineNum = 0;
            string line;
            Dictionary <string, int> fileParameters = null;

            while ((line = stream.ReadLine()) != null)
            {
                lineNum += 1;
                // Skip top line, as it typically describes the columns
                if (lineNum == 1)
                {
                    fileParameters = LocaleEditorCommands.GetSheetParamOrder(line, delimiter);
                }
                else if (!string.IsNullOrWhiteSpace(line) && fileParameters.Count > 0)
                {
                    var lineEntries = line.Split(delimiter);

                    string key     = LocaleEditorCommands.GetSheetValue("key", fileParameters, lineEntries);
                    string content = LocaleEditorCommands.GetSheetValue("content", fileParameters, lineEntries);
                    string handle  = LocaleEditorCommands.GetSheetValue("handle", fileParameters, lineEntries);

                    var entry = new LocaleCustomKeyEntry(this)
                    {
                        Key     = key,
                        Content = content
                    };
                    if (!string.IsNullOrEmpty(handle))
                    {
                        entry.Handle = handle;
                    }
                    entry.ChangesUnsaved = false;
                    Entries.Add(entry);
                }
            }
        }
        public LocaleEditorDesignData() : base()
        {
            //var metaFile = new FileInfo(@"G:\Divinity Original Sin 2\DefEd\Data\Mods\Nemesis_627c8d3a-7e6b-4fd2-8ce5-610d553fdbe9\meta.lsx");
            //ModProjectData testData = new ModProjectData(metaFile, @"G:\Divinity Original Sin 2\DefEd\Data\Projects");

            //var result = LoadStringKeyData(@"G:\Divinity Original Sin 2\DefEd\Data\", testData);
            //Data = result.Data;
            //Name = result.Error;

            ModsGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Skills")
            {
                ChangesUnsaved = true
            });
            ModsGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Statuses"));
            for (var i = 1; i < 4; i++)
            {
                ModsGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Potionslalalalala" + i));
            }

            PublicGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Skills"));
            PublicGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Statuses"));
            PublicGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Potions"));

            for (var i = 1; i < 5; i++)
            {
                CustomGroup.DataFiles.Add(new LocaleTestFileData(ModsGroup, "Custom" + i));
            }

            foreach (var d in ModsGroup.DataFiles)
            {
                LocaleEditorCommands.Debug_CreateEntries(d, d.Entries);
            }

            foreach (var d in PublicGroup.DataFiles)
            {
                LocaleEditorCommands.Debug_CreateEntries(d, d.Entries);
                d.ChangesUnsaved = true;
                d.Entries.First().ChangesUnsaved = true;
            }

            foreach (var d in CustomGroup.DataFiles)
            {
                d.CanClose = d.CanRename = true;
                LocaleEditorCommands.Debug_CreateCustomEntries(d, d.Entries);
            }

            UpdateCombinedGroup(true);

            //SelectedGroupIndex = 1;
            //SelectedGroup.SelectedFileIndex = 2;

            System.Diagnostics.Trace.WriteLine("Design data test");

            SelectedGroupIndex = Groups.IndexOf(PublicGroup);
            SelectedEntry      = CombinedGroup.Tabs.First().Entries.First();

            LinkedProjects.Add(new ModProjectData()
            {
                DisplayName = "TestMod1"
            });
            LinkedProjects.Add(new ModProjectData()
            {
                DisplayName = "TestMod2"
            });
        }
 private void LocaleWindow_Closing(object sender, CancelEventArgs e)
 {
     LocaleEditorCommands.SaveSettings(ModuleData, ViewModel);
     ViewModel.MenuData.UnregisterShortcuts(this.InputBindings);
 }
 public void SaveSettings()
 {
     LocaleEditorCommands.SaveSettings(ModuleData, ViewModel);
 }