示例#1
0
        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);
                    }
                }
            }
        }
示例#2
0
        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();
        }
示例#3
0
 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);
 }
示例#4
0
 private void btnUnapplySet_Click(object sender, EventArgs e)
 {
     if (this.dlgLoadChangeset.ShowDialog(this) == DialogResult.OK)
     {
         NameChange.LoadChangeset(this.dlgLoadChangeset.FileName, true);
         this.RefreshList();
     }
 }
示例#5
0
 private void mnuRevertSelected_Click(object sender, EventArgs e)
 {
     foreach (ListViewItem LVI in this.lstNameChanges.SelectedItems)
     {
         NameChange.Revert(LVI.Tag as NameChange);
     }
     this.RefreshList();
 }
示例#6
0
 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);
 }
示例#7
0
 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));
     }
 }
示例#8
0
 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();
     }
 }
示例#9
0
 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;
     }
 }
示例#10
0
 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;
     }
 }
示例#11
0
        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);
        }
示例#12
0
 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);
     }
 }
示例#13
0
        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;
            }
        }
示例#14
0
 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);
         }
     }
 }
示例#15
0
 public static void Revert(NameChange NC)
 {
     NameChange.Add(NC.ID, NC.New_, NC.Old_);
 }
示例#16
0
 public static void LoadChangeset(string FileName)
 {
     NameChange.LoadChangeset(FileName, false);
 }
示例#17
0
 public static void Revert(NameChange NC)
 {
     NameChange.Add(NC.ID, NC.New_, NC.Old_);
 }
示例#18
0
 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);
 }