public static void LoadChangeset(string FileName, bool RevertChanges) { XmlDocument Changeset = new XmlDocument(); try { Changeset.Load(FileName); } catch (Exception E) { MessageBox.Show(String.Format(I18N.GetText("Message:ChangesetLoadError"), E.Message), I18N.GetText("Title:ChangesetLoadError"), MessageBoxButtons.OK, MessageBoxIcon.Error); } foreach (XmlNode XN in Changeset.DocumentElement.ChildNodes) { XmlElement XNameChange = XN as XmlElement; if (XNameChange != null && XNameChange.Name == "name-change" && XNameChange.HasAttribute("id") && XNameChange.HasAttribute("old") && XNameChange.HasAttribute("new")) { uint ID = XmlConvert.ToUInt32(XNameChange.Attributes["id"].InnerText); string Old = XNameChange.Attributes["old"].InnerText; string New = XNameChange.Attributes["new"].InnerText; if (RevertChanges) { NameChange.Add(ID, New, Old); } else { NameChange.Add(ID, Old, New); } } } }
private void RefreshList() { this.lstNameChanges.Items.Clear(); this.lstNameChanges.Groups.Clear(); ListViewGroup lvgPending = new ListViewGroup("Pending", I18N.GetText("Group:PendingChanges")); this.lstNameChanges.Groups.Add(lvgPending); foreach (NameChange NC in NameChange.Pending) { ListViewItem LVI = this.lstNameChanges.Items.Add(NC.Area); LVI.Tag = NC; LVI.Group = lvgPending; LVI.SubItems.Add(NC.Old); LVI.SubItems.Add(NC.New); } ListViewGroup lvgApplied = new ListViewGroup("Applied", I18N.GetText("Group:AppliedChanges")); this.lstNameChanges.Groups.Add(lvgApplied); foreach (NameChange NC in NameChange.Applied) { ListViewItem LVI = this.lstNameChanges.Items.Add(NC.Area); LVI.Tag = NC; LVI.Group = lvgApplied; LVI.SubItems.Add(NC.Old); LVI.SubItems.Add(NC.New); } this.btnForgetAll.Enabled = this.btnRevertAll.Enabled = (this.lstNameChanges.Items.Count > 0); this.btnDiscardPending.Enabled = this.btnWritePending.Enabled = (lvgPending.Items.Count > 0); NameChange.SaveHistory(); }
public static void Apply(NameChange NC) { if (!NameChange.Pending.Contains(NC)) { return; } { string DATFileName = FFXI.GetFilePath(6720 + (ushort)((NC.ID_ >> 12) & 0xff)); if (DATFileName != null) { FileStream DATFile = new FileStream(DATFileName, FileMode.Open, FileAccess.ReadWrite); BinaryReader BR = new BinaryReader(DATFile, Encoding.ASCII); bool Found = false; while (DATFile.Position < DATFile.Length) { string Name = new string(BR.ReadChars(0x18)).TrimEnd('\0'); uint ID = BR.ReadUInt32(); if (ID == NC.ID_) { Found = true; if (Name != NC.Old_) { if (MessageBox.Show(String.Format(I18N.GetText("Message:OldNameMismatch"), NC.Old_, NC.New_, Name), I18N.GetText("Title:OldNameMismatch"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { return; } } break; } } if (!Found) { MessageBox.Show(String.Format(I18N.GetText("Message:EntryNotFound"), NC.ID_, NC.Old_, NC.New_, DATFileName), I18N.GetText("Title:EntryNotFound"), MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string NewName = NC.New_.PadRight(0x18, '\0'); DATFile.Position -= 0x1C; DATFile.Write(Encoding.ASCII.GetBytes(NewName), 0, 0x18); DATFile.Close(); } } NameChange.Pending.Remove(NC); foreach (NameChange ANC in NameChange.Applied) { if (ANC.ID == NC.ID) { if (ANC.Old_ == NC.New_) // Reverting existing applied change { NameChange.Applied.Remove(ANC); } else { ANC.New_ = NC.New_; } return; } } NameChange.Applied.Add(NC); }
private void btnUnapplySet_Click(object sender, EventArgs e) { if (this.dlgLoadChangeset.ShowDialog(this) == DialogResult.OK) { NameChange.LoadChangeset(this.dlgLoadChangeset.FileName, true); this.RefreshList(); } }
private void mnuRevertSelected_Click(object sender, EventArgs e) { foreach (ListViewItem LVI in this.lstNameChanges.SelectedItems) { NameChange.Revert(LVI.Tag as NameChange); } this.RefreshList(); }
public static void Add(uint ID, string Old, string New) { NameChange NC = new NameChange(ID, Old, New); foreach (NameChange PNC in NameChange.Pending) { if (PNC.ID == NC.ID) { NC.Old_ = PNC.Old_; NameChange.Pending.Remove(PNC); break; } } if (NC.Old_ == NC.New_) return; // No change -> no need to add a change NameChange.Pending.Add(NC); }
public MainWindow() { this.InitializeComponent(); this.Icon = Icons.TextFile; NameChange.LoadHistory(); for (ushort AreaID = 0; AreaID < 256; ++AreaID) { string AreaName = FFXIResourceManager.GetAreaName(AreaID); if (AreaName == null || AreaName == String.Empty) { continue; } this.cmbArea.Items.Add(new Area(AreaID)); } }
private void btnRevertAll_Click(object sender, EventArgs e) { if (MessageBox.Show(this, I18N.GetText("Message:RevertAll"), I18N.GetText("Title:RevertAll"), MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { NameChange.Pending.Clear(); foreach (NameChange NC in NameChange.Applied) { NameChange.Revert(NC); } while (NameChange.Pending.Count > 0) { NameChange.Apply(NameChange.Pending[0]); } this.RefreshList(); } }
private void mnuWriteSelected_Click(object sender, EventArgs e) { if (this.lstNameChanges.SelectedItems.Count > 0) { this.prbWriteChanges.Value = 0; this.prbWriteChanges.Maximum = this.lstNameChanges.SelectedItems.Count; this.prbWriteChanges.Visible = true; foreach (ListViewItem LVI in this.lstNameChanges.SelectedItems) { NameChange.Apply(LVI.Tag as NameChange); ++this.prbWriteChanges.Value; } this.RefreshList(); this.prbWriteChanges.Visible = false; } }
private void btnWritePending_Click(object sender, EventArgs e) { if (NameChange.Pending.Count > 0) { this.prbWriteChanges.Value = 0; this.prbWriteChanges.Maximum = NameChange.Pending.Count; this.prbWriteChanges.Visible = true; while (NameChange.Pending.Count > 0) { NameChange.Apply(NameChange.Pending[0]); ++this.prbWriteChanges.Value; } this.RefreshList(); this.prbWriteChanges.Visible = false; } }
public static void Add(uint ID, string Old, string New) { NameChange NC = new NameChange(ID, Old, New); foreach (NameChange PNC in NameChange.Pending) { if (PNC.ID == NC.ID) { NC.Old_ = PNC.Old_; NameChange.Pending.Remove(PNC); break; } } if (NC.Old_ == NC.New_) { return; // No change -> no need to add a change } NameChange.Pending.Add(NC); }
public static void SaveHistory() { try { XmlDocument History = NameChange.CreateChangeset(); foreach (NameChange NC in NameChange.Applied) { NC.AddToChangeset(History); } string HistoryFolder = Path.GetDirectoryName(NameChange.HistoryFileName); if (!Directory.Exists(HistoryFolder)) { Directory.CreateDirectory(HistoryFolder); } History.Save(NameChange.HistoryFileName); } catch (Exception E) { MessageBox.Show(String.Format(I18N.GetText("Message:HistorySaveError"), E.Message), I18N.GetText("Title:HistorySaveError"), MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void lstNPCNames_AfterLabelEdit(object sender, LabelEditEventArgs e) { if (e.Label == null) // User made no changes to the label text { return; } NPCInfo NI = this.lstNPCNames.Items[e.Item].Tag as NPCInfo; if (NI != null) { string NewName = e.Label; if (NewName.Length > 0x18) { NewName = NewName.Substring(0, 0x18); this.lstNPCNames.Items[e.Item].Text = NewName; } NameChange.Add(NI.ID, NI.Name, NewName); NI.Name = NewName; } }
private void mnuSaveSelected_Click(object sender, EventArgs e) { if (this.dlgSaveChangeset.ShowDialog(this) == DialogResult.OK) { try { XmlDocument Changeset = NameChange.CreateChangeset(); foreach (ListViewItem LVI in this.lstNameChanges.SelectedItems) { NameChange NC = LVI.Tag as NameChange; if (NC != null) { NC.AddToChangeset(Changeset); } } Changeset.Save(this.dlgSaveChangeset.FileName); } catch (Exception E) { MessageBox.Show(String.Format(I18N.GetText("Message:ChangesetSaveError"), E.Message), I18N.GetText("Title:ChangesetSaveError"), MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
public static void Revert(NameChange NC) { NameChange.Add(NC.ID, NC.New_, NC.Old_); }
public static void LoadChangeset(string FileName) { NameChange.LoadChangeset(FileName, false); }
public static void Apply(NameChange NC) { if (!NameChange.Pending.Contains(NC)) { return; } { string DATFileName = FFXI.GetFilePath(6720 + (ushort)((NC.ID_ >> 12) & 0xff)); if (DATFileName != null) { FileStream DATFile = new FileStream(DATFileName, FileMode.Open, FileAccess.ReadWrite); BinaryReader BR = new BinaryReader(DATFile, Encoding.ASCII); bool Found = false; while (DATFile.Position < DATFile.Length) { string Name = new string(BR.ReadChars(0x1C)).TrimEnd('\0'); uint ID = BR.ReadUInt32(); if (ID == NC.ID_) { Found = true; if (Name != NC.Old_) { if ( MessageBox.Show(String.Format(I18N.GetText("Message:OldNameMismatch"), NC.Old_, NC.New_, Name), I18N.GetText("Title:OldNameMismatch"), MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { return; } } break; } } if (!Found) { MessageBox.Show( String.Format(I18N.GetText("Message:EntryNotFound"), NC.ID_, NC.Old_, NC.New_, DATFileName), I18N.GetText("Title:EntryNotFound"), MessageBoxButtons.OK, MessageBoxIcon.Error); return; } string NewName = NC.New_.PadRight(0x1C, '\0'); DATFile.Position -= 0x20; DATFile.Write(Encoding.ASCII.GetBytes(NewName), 0, 0x1C); DATFile.Close(); } } NameChange.Pending.Remove(NC); foreach (NameChange ANC in NameChange.Applied) { if (ANC.ID == NC.ID) { if (ANC.Old_ == NC.New_) // Reverting existing applied change { NameChange.Applied.Remove(ANC); } else { ANC.New_ = NC.New_; } return; } } NameChange.Applied.Add(NC); }