private void AddBlock(string blockName, int templateIndex) { Template.Block templateBlock = Helper.Template.Data.Files[this.Data.TemplateIndex].Blocks.Values[templateIndex]; // add options to new block EditorIniBlock editorBlock = new EditorIniBlock(blockName, templateIndex); for (int i = 0; i < templateBlock.Options.Count; ++i) { Template.Option option = templateBlock.Options[i]; editorBlock.Options.Add(new EditorIniOption(option.Name, i)); if (templateBlock.Identifier != null && templateBlock.Identifier.Equals(editorBlock.Options[editorBlock.Options.Count - 1].Name, StringComparison.OrdinalIgnoreCase)) { editorBlock.MainOptionIndex = editorBlock.Options.Count - 1; editorBlock.Options[editorBlock.Options.Count - 1].Values.Add(new EditorIniEntry(blockName)); } } // add actual block this.AddBlocks(new List <TableBlock> { new TableBlock(this.GetNewBlockId(), this.Data.MaxId++, editorBlock, this.Data.TemplateIndex) }); }
public PropertyBlock(EditorINIBlock block, Template.Block templateBlock) { foreach (EditorINIOption option in block.Options) { List.Add(new PropertyOption(option.Values, templateBlock.Options[option.TemplateIndex], option.ChildTemplateIndex != -1)); } // show comments List.Add(new PropertyOption("comments", block.Comments)); }
EditorINIData GetEditorData(INIBlocks iniData, int templateFileIndex) { #if DEBUG System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); st.Start(); #endif EditorINIData editorData = new EditorINIData(templateFileIndex); //loop each template block for (int i = 0; i < Helper.Template.Data.Files[templateFileIndex].Blocks.Count; i++) { Template.Block templateBlock = Helper.Template.Data.Files[templateFileIndex].Blocks[i]; List <INIOptions> iniBlocks; if (iniData.TryGetValue(templateBlock.Name, out iniBlocks)) { //loop each ini block foreach (INIOptions iniBlock in iniBlocks) { EditorINIBlock editorBlock = new EditorINIBlock(templateBlock.Name, i); //loop each template option for (int j = 0; j < templateBlock.Options.Count; j++) { Template.Option childTemplateOption = null; if (j < templateBlock.Options.Count - 1 && templateBlock.Options[j + 1].Parent != null) { //next option is child of current option childTemplateOption = templateBlock.Options[j + 1]; } Template.Option templateOption = templateBlock.Options[j]; EditorINIOption editorOption = new EditorINIOption(templateOption.Name, j); List <INIOption> iniOptions; if (iniBlock.TryGetValue(templateOption.Name, out iniOptions)) { //h is used to start again at last child option in order to provide better performance int h = 0; if (templateOption.Multiple) { //loop each ini option for (int k = 0; k < iniOptions.Count; k++) { List <object> editorChildOptions = null; List <INIOption> iniChildOptions; if (childTemplateOption != null && iniBlock.TryGetValue(childTemplateOption.Name, out iniChildOptions)) { editorOption.ChildTemplateIndex = j + 1; editorOption.ChildName = childTemplateOption.Name; editorChildOptions = new List <object>(); //loop each ini option of child for (; h < iniChildOptions.Count; h++) { INIOption childOption = iniChildOptions[h]; if (k < iniOptions.Count - 1 && childOption.Index > iniOptions[k + 1].Index) { break; } if (childOption.Index > iniOptions[k].Index) { editorChildOptions.Add(ConvertToTemplate(childTemplateOption.Type, childOption.Value)); } } } //add entry editorOption.Values.Add(new EditorINIEntry(ConvertToTemplate(templateOption.Type, iniOptions[k].Value), editorChildOptions)); } } else { //just add the first option if aviable to prevent multiple options which should be single if (iniBlock[templateOption.Name].Count > 0) { editorOption.Values.Add(new EditorINIEntry(ConvertToTemplate(templateOption.Type, iniOptions[0].Value))); } } //add option editorBlock.Options.Add(editorOption); } else { //add empty option editorBlock.Options.Add(new EditorINIOption(templateOption.Name, j)); } //set index of main option (value displayed in table view) if (templateBlock.Identifier != null && templateBlock.Identifier.ToLower() == editorBlock.Options[editorBlock.Options.Count - 1].Name.ToLower()) { editorBlock.MainOptionIndex = editorBlock.Options.Count - 1; } //ignore next option because we already added it as children to the current option if (childTemplateOption != null) { j++; } } //add block editorData.Blocks.Add(editorBlock); } } } #if DEBUG st.Stop(); System.Diagnostics.Debug.WriteLine("typecast data: " + st.ElapsedMilliseconds + "ms"); #endif return(editorData); }
public void Write(EditorINIData data) { //sort blocks first for (int i = 0; i < Helper.Template.Data.Files[data.TemplateIndex].Blocks.Count; i++) { Template.Block templateBlock = Helper.Template.Data.Files[data.TemplateIndex].Blocks[i]; for (int j = i; j < data.Blocks.Count; j++) { if (data.Blocks[j].Name.ToLower() == templateBlock.Name.ToLower()) { //swap blocks EditorINIBlock temporaryBlock = data.Blocks[i]; data.Blocks[i] = data.Blocks[j]; data.Blocks[j] = temporaryBlock; break; } } } //save data INIBlocks newData = new INIBlocks(); foreach (EditorINIBlock block in data.Blocks) { INIOptions newBlock = new INIOptions(); for (int i = 0; i < block.Options.Count; i++) { if (block.Options[i].Values.Count > 0) { List <INIOption> newOption = new List <INIOption>(); for (int j = 0; j < block.Options[i].Values.Count; j++) { newOption.Add(new INIOption(block.Options[i].Values[j].Value.ToString())); //add suboptions as options with defined parent if (block.Options[i].Values[j].SubOptions != null) { for (int k = 0; k < block.Options[i].Values[j].SubOptions.Count; k++) { newOption.Add(new INIOption(block.Options[i].Values[j].SubOptions[k].ToString(), block.Options[i].ChildName)); } } } newBlock.Add(block.Options[i].Name, newOption); } } newData.Add(block.Name, newBlock); } try { //if (IsBini) //{ // BINIManager biniManager = new BINIManager(File); // biniManager.Data = newData; // biniManager.Write(); //} //else //{ INIManager iniManager = new INIManager(File); iniManager.Write(newData); //} } catch (Exception ex) { throw ex; } }
private void AddBlocks(List <TableBlock> blocks) { List <TableBlock> newAdditionalBlocks = new List <TableBlock>(); List <TableBlock> oldBlocks = new List <TableBlock>(); for (int i = 0; i < blocks.Count; ++i) { TableBlock block = blocks[i]; // set block to be modified block.Modified = TableModified.ChangedAdded; // set archetype of block and make visible if possible if (block.Archetype == null) { this.SetBlockType(block); block.SetVisibleIfPossible(); } // check if block which can only exist once already exists Template.Block templateBlock = Helper.Template.Data.Files[this.Data.TemplateIndex].Blocks.Values[block.Block.TemplateIndex]; if (!templateBlock.Multiple) { for (int j = 0; j < this.Data.Blocks.Count; ++j) { TableBlock existingBlock = this.Data.Blocks[j]; // block already exists if (existingBlock.Block.TemplateIndex == block.Block.TemplateIndex) { block.Index = existingBlock.Index; block.Id = existingBlock.Id; // overwrite block if it can only exist once newAdditionalBlocks.Add(block); oldBlocks.Add(existingBlock); // remove overwritten block from new ones blocks.RemoveAt(i); --i; } } } } if (newAdditionalBlocks.Count == 0) { this.undoManager.Execute(new ChangedData { Type = ChangedType.Add, NewBlocks = blocks, }); } else { if (blocks.Count == 0) { this.undoManager.Execute(new ChangedData { Type = ChangedType.Edit, NewBlocks = newAdditionalBlocks, OldBlocks = oldBlocks, }); } else { this.undoManager.Execute(new ChangedData { Type = ChangedType.AddAndEdit, NewBlocks = blocks, NewAdditionalBlocks = newAdditionalBlocks, OldBlocks = oldBlocks, }); } } }