mirror of
https://github.com/AdAstra-LD/DS-Pokemon-Rom-Editor.git
synced 2026-05-27 10:33:03 -05:00
Merge pull request #45 from Mixone-FinallyHere/learnset-editor-update
Learnset Editor: Allow custom sorting of level up moves
This commit is contained in:
commit
425bba66d2
|
|
@ -403,7 +403,7 @@
|
|||
<Compile Include="Editors\SpawnEditor.Designer.cs">
|
||||
<DependentUpon>SpawnEditor.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="UniqueList.cs" />
|
||||
<Compile Include="Editors\Utils\UniqueList.cs" />
|
||||
<Compile Include="Editors\WildEditorHGSS.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace DSPRE {
|
|||
private int currentLoadedId = 0;
|
||||
private EvolutionFile currentLoadedFile = null;
|
||||
|
||||
private static bool dirty = false;
|
||||
public bool dirty = false;
|
||||
private static readonly string formName = "Evolutions Editor";
|
||||
|
||||
private (ComboBox m, Label l, NumericUpDown p, ComboBox t)[] evoRows;
|
||||
|
|
@ -181,6 +181,7 @@ namespace DSPRE {
|
|||
dirty = false;
|
||||
this.Text = formName;
|
||||
}
|
||||
_parent.UpdateTabPageNames();
|
||||
}
|
||||
|
||||
private void evoMethodComboBox1_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
|
|
|
|||
292
DS_Map/Editors/LearnsetEditor.Designer.cs
generated
292
DS_Map/Editors/LearnsetEditor.Designer.cs
generated
|
|
@ -32,24 +32,26 @@
|
|||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.movesListBox = new System.Windows.Forms.ListBox();
|
||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||
this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.editLayoutPanel = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.entryCountLabel = new System.Windows.Forms.Label();
|
||||
this.descriptorLabel = new System.Windows.Forms.Label();
|
||||
this.addMoveButton = new System.Windows.Forms.Button();
|
||||
this.deleteMoveButton = new System.Windows.Forms.Button();
|
||||
this.editMoveButton = new System.Windows.Forms.Button();
|
||||
this.levelNumericUpDown = new System.Windows.Forms.NumericUpDown();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.moveInputComboBox = new DSPRE.InputComboBox();
|
||||
this.levelLabel = new System.Windows.Forms.Label();
|
||||
this.statusLabel = new System.Windows.Forms.Label();
|
||||
this.moveUpButton = new System.Windows.Forms.Button();
|
||||
this.moveDownButton = new System.Windows.Forms.Button();
|
||||
this.moveInputComboBox = new DSPRE.InputComboBox();
|
||||
this.pokemonNameInputComboBox = new DSPRE.InputComboBox();
|
||||
this.entryCountLabel = new System.Windows.Forms.Label();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pokemonPictureBox)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.monNumberNumericUpDown)).BeginInit();
|
||||
this.tableLayoutPanel2.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.groupBox3.SuspendLayout();
|
||||
this.tableLayoutPanel3.SuspendLayout();
|
||||
this.editLayoutPanel.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.levelNumericUpDown)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
|
|
@ -66,23 +68,21 @@
|
|||
this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.pokemonNameInputComboBox, 1, 0);
|
||||
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(7, 6);
|
||||
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.tableLayoutPanel1.Location = new System.Drawing.Point(5, 5);
|
||||
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
|
||||
this.tableLayoutPanel1.RowCount = 2;
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 11.58022F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 88.41978F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(654, 553);
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(491, 449);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// saveDataButton
|
||||
//
|
||||
this.saveDataButton.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.saveDataButton.Image = ((System.Drawing.Image)(resources.GetObject("saveDataButton.Image")));
|
||||
this.saveDataButton.Location = new System.Drawing.Point(588, 4);
|
||||
this.saveDataButton.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.saveDataButton.Location = new System.Drawing.Point(441, 3);
|
||||
this.saveDataButton.Name = "saveDataButton";
|
||||
this.saveDataButton.Size = new System.Drawing.Size(62, 56);
|
||||
this.saveDataButton.Size = new System.Drawing.Size(47, 45);
|
||||
this.saveDataButton.TabIndex = 30;
|
||||
this.saveDataButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.saveDataButton.UseVisualStyleBackColor = true;
|
||||
|
|
@ -91,10 +91,9 @@
|
|||
// pokemonPictureBox
|
||||
//
|
||||
this.pokemonPictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.pokemonPictureBox.Location = new System.Drawing.Point(4, 4);
|
||||
this.pokemonPictureBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.pokemonPictureBox.Location = new System.Drawing.Point(3, 3);
|
||||
this.pokemonPictureBox.Name = "pokemonPictureBox";
|
||||
this.pokemonPictureBox.Size = new System.Drawing.Size(59, 56);
|
||||
this.pokemonPictureBox.Size = new System.Drawing.Size(44, 45);
|
||||
this.pokemonPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
|
||||
this.pokemonPictureBox.TabIndex = 12;
|
||||
this.pokemonPictureBox.TabStop = false;
|
||||
|
|
@ -102,10 +101,9 @@
|
|||
// monNumberNumericUpDown
|
||||
//
|
||||
this.monNumberNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.monNumberNumericUpDown.Location = new System.Drawing.Point(465, 21);
|
||||
this.monNumberNumericUpDown.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.monNumberNumericUpDown.Location = new System.Drawing.Point(349, 15);
|
||||
this.monNumberNumericUpDown.Name = "monNumberNumericUpDown";
|
||||
this.monNumberNumericUpDown.Size = new System.Drawing.Size(115, 22);
|
||||
this.monNumberNumericUpDown.Size = new System.Drawing.Size(86, 20);
|
||||
this.monNumberNumericUpDown.TabIndex = 16;
|
||||
this.monNumberNumericUpDown.ValueChanged += new System.EventHandler(this.monNumberNumericUpDown_ValueChanged);
|
||||
//
|
||||
|
|
@ -115,29 +113,26 @@
|
|||
this.tableLayoutPanel1.SetColumnSpan(this.tableLayoutPanel2, 4);
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 8.303955F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 8.303955F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 27F));
|
||||
this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel2.Controls.Add(this.groupBox2, 0, 0);
|
||||
this.tableLayoutPanel2.Controls.Add(this.groupBox3, 1, 0);
|
||||
this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(4, 68);
|
||||
this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 54);
|
||||
this.tableLayoutPanel2.Name = "tableLayoutPanel2";
|
||||
this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6);
|
||||
this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(5);
|
||||
this.tableLayoutPanel2.RowCount = 1;
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 470F));
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(646, 481);
|
||||
this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 382F));
|
||||
this.tableLayoutPanel2.Size = new System.Drawing.Size(485, 392);
|
||||
this.tableLayoutPanel2.TabIndex = 17;
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.movesListBox);
|
||||
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.groupBox2.Location = new System.Drawing.Point(11, 10);
|
||||
this.groupBox2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.groupBox2.Location = new System.Drawing.Point(8, 8);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.groupBox2.Size = new System.Drawing.Size(308, 461);
|
||||
this.groupBox2.Size = new System.Drawing.Size(231, 376);
|
||||
this.groupBox2.TabIndex = 34;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "View";
|
||||
|
|
@ -146,79 +141,93 @@
|
|||
//
|
||||
this.movesListBox.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.movesListBox.FormattingEnabled = true;
|
||||
this.movesListBox.ItemHeight = 16;
|
||||
this.movesListBox.Location = new System.Drawing.Point(4, 19);
|
||||
this.movesListBox.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.movesListBox.Location = new System.Drawing.Point(3, 16);
|
||||
this.movesListBox.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.movesListBox.Name = "movesListBox";
|
||||
this.movesListBox.Size = new System.Drawing.Size(300, 438);
|
||||
this.movesListBox.Size = new System.Drawing.Size(225, 357);
|
||||
this.movesListBox.TabIndex = 0;
|
||||
this.movesListBox.SelectedIndexChanged += new System.EventHandler(this.movesListBox_SelectedIndexChanged);
|
||||
//
|
||||
// groupBox3
|
||||
//
|
||||
this.groupBox3.Controls.Add(this.tableLayoutPanel3);
|
||||
this.groupBox3.Controls.Add(this.editLayoutPanel);
|
||||
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.groupBox3.Location = new System.Drawing.Point(327, 10);
|
||||
this.groupBox3.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.groupBox3.Location = new System.Drawing.Point(245, 8);
|
||||
this.groupBox3.Name = "groupBox3";
|
||||
this.groupBox3.Padding = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.groupBox3.Size = new System.Drawing.Size(308, 461);
|
||||
this.groupBox3.Size = new System.Drawing.Size(232, 376);
|
||||
this.groupBox3.TabIndex = 35;
|
||||
this.groupBox3.TabStop = false;
|
||||
this.groupBox3.Text = "Edit";
|
||||
//
|
||||
// tableLayoutPanel3
|
||||
// editLayoutPanel
|
||||
//
|
||||
this.tableLayoutPanel3.ColumnCount = 3;
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
|
||||
this.tableLayoutPanel3.Controls.Add(this.entryCountLabel, 0, 5);
|
||||
this.tableLayoutPanel3.Controls.Add(this.descriptorLabel, 0, 1);
|
||||
this.tableLayoutPanel3.Controls.Add(this.addMoveButton, 0, 4);
|
||||
this.tableLayoutPanel3.Controls.Add(this.deleteMoveButton, 2, 4);
|
||||
this.tableLayoutPanel3.Controls.Add(this.editMoveButton, 1, 4);
|
||||
this.tableLayoutPanel3.Controls.Add(this.levelNumericUpDown, 1, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.label1, 0, 2);
|
||||
this.tableLayoutPanel3.Controls.Add(this.moveInputComboBox, 0, 0);
|
||||
this.tableLayoutPanel3.Controls.Add(this.statusLabel, 0, 3);
|
||||
this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tableLayoutPanel3.Location = new System.Drawing.Point(4, 19);
|
||||
this.tableLayoutPanel3.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.tableLayoutPanel3.Name = "tableLayoutPanel3";
|
||||
this.tableLayoutPanel3.Padding = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.tableLayoutPanel3.RowCount = 6;
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 34.50088F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 65.49912F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 144F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
|
||||
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F));
|
||||
this.tableLayoutPanel3.Size = new System.Drawing.Size(226, 357);
|
||||
this.tableLayoutPanel3.TabIndex = 0;
|
||||
this.editLayoutPanel.ColumnCount = 3;
|
||||
this.editLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33112F));
|
||||
this.editLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33444F));
|
||||
this.editLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33444F));
|
||||
this.editLayoutPanel.Controls.Add(this.moveDownButton, 1, 4);
|
||||
this.editLayoutPanel.Controls.Add(this.moveUpButton, 0, 4);
|
||||
this.editLayoutPanel.Controls.Add(this.addMoveButton, 0, 5);
|
||||
this.editLayoutPanel.Controls.Add(this.deleteMoveButton, 2, 5);
|
||||
this.editLayoutPanel.Controls.Add(this.editMoveButton, 1, 5);
|
||||
this.editLayoutPanel.Controls.Add(this.levelNumericUpDown, 1, 2);
|
||||
this.editLayoutPanel.Controls.Add(this.moveInputComboBox, 0, 0);
|
||||
this.editLayoutPanel.Controls.Add(this.descriptorLabel, 0, 1);
|
||||
this.editLayoutPanel.Controls.Add(this.entryCountLabel, 0, 6);
|
||||
this.editLayoutPanel.Controls.Add(this.levelLabel, 0, 2);
|
||||
this.editLayoutPanel.Controls.Add(this.statusLabel, 0, 3);
|
||||
this.editLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.editLayoutPanel.Location = new System.Drawing.Point(3, 16);
|
||||
this.editLayoutPanel.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.editLayoutPanel.Name = "editLayoutPanel";
|
||||
this.editLayoutPanel.Padding = new System.Windows.Forms.Padding(2);
|
||||
this.editLayoutPanel.RowCount = 7;
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
|
||||
this.editLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
|
||||
this.editLayoutPanel.Size = new System.Drawing.Size(226, 357);
|
||||
this.editLayoutPanel.TabIndex = 0;
|
||||
//
|
||||
// entryCountLabel
|
||||
//
|
||||
this.entryCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.entryCountLabel.AutoSize = true;
|
||||
this.editLayoutPanel.SetColumnSpan(this.entryCountLabel, 3);
|
||||
this.entryCountLabel.Location = new System.Drawing.Point(4, 334);
|
||||
this.entryCountLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.entryCountLabel.Name = "entryCountLabel";
|
||||
this.entryCountLabel.Padding = new System.Windows.Forms.Padding(1, 4, 1, 4);
|
||||
this.entryCountLabel.Size = new System.Drawing.Size(70, 21);
|
||||
this.entryCountLabel.TabIndex = 9;
|
||||
this.entryCountLabel.Text = "Entry Count: ";
|
||||
this.entryCountLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// descriptorLabel
|
||||
//
|
||||
this.descriptorLabel.Anchor = System.Windows.Forms.AnchorStyles.Left;
|
||||
this.descriptorLabel.AutoSize = true;
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.descriptorLabel, 3);
|
||||
this.descriptorLabel.Location = new System.Drawing.Point(7, 52);
|
||||
this.descriptorLabel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.editLayoutPanel.SetColumnSpan(this.descriptorLabel, 3);
|
||||
this.descriptorLabel.Location = new System.Drawing.Point(5, 45);
|
||||
this.descriptorLabel.Name = "descriptorLabel";
|
||||
this.descriptorLabel.Padding = new System.Windows.Forms.Padding(1, 6, 1, 6);
|
||||
this.descriptorLabel.Size = new System.Drawing.Size(71, 28);
|
||||
this.descriptorLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5);
|
||||
this.descriptorLabel.Size = new System.Drawing.Size(57, 23);
|
||||
this.descriptorLabel.TabIndex = 8;
|
||||
this.descriptorLabel.Text = "Descriptor";
|
||||
//
|
||||
// addMoveButton
|
||||
//
|
||||
this.addMoveButton.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.addMoveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.addMoveButton.Enabled = false;
|
||||
this.addMoveButton.Image = global::DSPRE.Properties.Resources.addIcon;
|
||||
this.addMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.addMoveButton.Location = new System.Drawing.Point(4, 286);
|
||||
this.addMoveButton.Location = new System.Drawing.Point(4, 201);
|
||||
this.addMoveButton.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.addMoveButton.Name = "addMoveButton";
|
||||
this.addMoveButton.Size = new System.Drawing.Size(70, 40);
|
||||
this.addMoveButton.Size = new System.Drawing.Size(69, 32);
|
||||
this.addMoveButton.TabIndex = 1;
|
||||
this.addMoveButton.Text = "Add";
|
||||
this.addMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
|
@ -227,14 +236,14 @@
|
|||
//
|
||||
// deleteMoveButton
|
||||
//
|
||||
this.deleteMoveButton.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.deleteMoveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.deleteMoveButton.Enabled = false;
|
||||
this.deleteMoveButton.Image = global::DSPRE.Properties.Resources.deleteIcon;
|
||||
this.deleteMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.deleteMoveButton.Location = new System.Drawing.Point(152, 286);
|
||||
this.deleteMoveButton.Location = new System.Drawing.Point(151, 201);
|
||||
this.deleteMoveButton.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.deleteMoveButton.Name = "deleteMoveButton";
|
||||
this.deleteMoveButton.Size = new System.Drawing.Size(70, 40);
|
||||
this.deleteMoveButton.Size = new System.Drawing.Size(71, 32);
|
||||
this.deleteMoveButton.TabIndex = 2;
|
||||
this.deleteMoveButton.Text = "Delete";
|
||||
this.deleteMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
|
@ -243,14 +252,14 @@
|
|||
//
|
||||
// editMoveButton
|
||||
//
|
||||
this.editMoveButton.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.editMoveButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.editMoveButton.Enabled = false;
|
||||
this.editMoveButton.Image = global::DSPRE.Properties.Resources.RenameIcon;
|
||||
this.editMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.editMoveButton.Location = new System.Drawing.Point(78, 286);
|
||||
this.editMoveButton.Location = new System.Drawing.Point(77, 201);
|
||||
this.editMoveButton.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.editMoveButton.Name = "editMoveButton";
|
||||
this.editMoveButton.Size = new System.Drawing.Size(70, 40);
|
||||
this.editMoveButton.Size = new System.Drawing.Size(70, 32);
|
||||
this.editMoveButton.TabIndex = 3;
|
||||
this.editMoveButton.Text = "Edit";
|
||||
this.editMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
|
@ -259,89 +268,108 @@
|
|||
//
|
||||
// levelNumericUpDown
|
||||
//
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.levelNumericUpDown, 2);
|
||||
this.levelNumericUpDown.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.levelNumericUpDown.Location = new System.Drawing.Point(103, 148);
|
||||
this.levelNumericUpDown.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.levelNumericUpDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.editLayoutPanel.SetColumnSpan(this.levelNumericUpDown, 2);
|
||||
this.levelNumericUpDown.Location = new System.Drawing.Point(77, 82);
|
||||
this.levelNumericUpDown.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.levelNumericUpDown.Name = "levelNumericUpDown";
|
||||
this.levelNumericUpDown.Size = new System.Drawing.Size(191, 22);
|
||||
this.levelNumericUpDown.Size = new System.Drawing.Size(145, 20);
|
||||
this.levelNumericUpDown.TabIndex = 4;
|
||||
this.levelNumericUpDown.ValueChanged += new System.EventHandler(this.levelNumericUpDown_ValueChanged);
|
||||
//
|
||||
// label1
|
||||
// levelLabel
|
||||
//
|
||||
this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(6, 150);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(91, 16);
|
||||
this.label1.TabIndex = 5;
|
||||
this.label1.Text = "Level:";
|
||||
this.levelLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.levelLabel.AutoSize = true;
|
||||
this.levelLabel.Location = new System.Drawing.Point(4, 85);
|
||||
this.levelLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.levelLabel.Name = "levelLabel";
|
||||
this.levelLabel.Size = new System.Drawing.Size(69, 13);
|
||||
this.levelLabel.TabIndex = 5;
|
||||
this.levelLabel.Text = "Level:";
|
||||
//
|
||||
// statusLabel
|
||||
//
|
||||
this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.statusLabel.AutoSize = true;
|
||||
this.editLayoutPanel.SetColumnSpan(this.statusLabel, 3);
|
||||
this.statusLabel.Location = new System.Drawing.Point(4, 119);
|
||||
this.statusLabel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
|
||||
this.statusLabel.Name = "statusLabel";
|
||||
this.statusLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5);
|
||||
this.statusLabel.Size = new System.Drawing.Size(39, 23);
|
||||
this.statusLabel.TabIndex = 7;
|
||||
this.statusLabel.Text = "Status";
|
||||
//
|
||||
// moveUpButton
|
||||
//
|
||||
this.moveUpButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.moveUpButton.Enabled = false;
|
||||
this.moveUpButton.Image = global::DSPRE.Properties.Resources.arrowup;
|
||||
this.moveUpButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.moveUpButton.Location = new System.Drawing.Point(4, 151);
|
||||
this.moveUpButton.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.moveUpButton.Name = "moveUpButton";
|
||||
this.moveUpButton.Size = new System.Drawing.Size(69, 32);
|
||||
this.moveUpButton.TabIndex = 10;
|
||||
this.moveUpButton.Text = "Move";
|
||||
this.moveUpButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.moveUpButton.UseVisualStyleBackColor = true;
|
||||
this.moveUpButton.Click += new System.EventHandler(this.moveUpButton_Click);
|
||||
//
|
||||
// moveDownButton
|
||||
//
|
||||
this.moveDownButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.moveDownButton.Enabled = false;
|
||||
this.moveDownButton.Image = global::DSPRE.Properties.Resources.arrowdown;
|
||||
this.moveDownButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||
this.moveDownButton.Location = new System.Drawing.Point(77, 151);
|
||||
this.moveDownButton.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.moveDownButton.Name = "moveDownButton";
|
||||
this.moveDownButton.Size = new System.Drawing.Size(70, 32);
|
||||
this.moveDownButton.TabIndex = 11;
|
||||
this.moveDownButton.Text = "Move";
|
||||
this.moveDownButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.moveDownButton.UseVisualStyleBackColor = true;
|
||||
this.moveDownButton.Click += new System.EventHandler(this.moveDownButton_Click);
|
||||
//
|
||||
// moveInputComboBox
|
||||
//
|
||||
this.moveInputComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.moveInputComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.moveInputComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.moveInputComboBox, 3);
|
||||
this.editLayoutPanel.SetColumnSpan(this.moveInputComboBox, 3);
|
||||
this.moveInputComboBox.FormattingEnabled = true;
|
||||
this.moveInputComboBox.Location = new System.Drawing.Point(6, 15);
|
||||
this.moveInputComboBox.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
|
||||
this.moveInputComboBox.Location = new System.Drawing.Point(4, 11);
|
||||
this.moveInputComboBox.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.moveInputComboBox.Name = "moveInputComboBox";
|
||||
this.moveInputComboBox.Size = new System.Drawing.Size(288, 24);
|
||||
this.moveInputComboBox.Size = new System.Drawing.Size(218, 21);
|
||||
this.moveInputComboBox.TabIndex = 6;
|
||||
this.moveInputComboBox.SelectedIndexChanged += new System.EventHandler(this.moveInputComboBox_SelectedIndexChanged);
|
||||
//
|
||||
// statusLabel
|
||||
//
|
||||
this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.statusLabel.AutoSize = true;
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.statusLabel, 3);
|
||||
this.statusLabel.Location = new System.Drawing.Point(5, 261);
|
||||
this.statusLabel.Name = "statusLabel";
|
||||
this.statusLabel.Padding = new System.Windows.Forms.Padding(1, 6, 1, 6);
|
||||
this.statusLabel.Size = new System.Drawing.Size(46, 28);
|
||||
this.statusLabel.TabIndex = 7;
|
||||
this.statusLabel.Text = "Status";
|
||||
//
|
||||
// pokemonNameInputComboBox
|
||||
//
|
||||
this.pokemonNameInputComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.pokemonNameInputComboBox.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
|
||||
this.pokemonNameInputComboBox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
|
||||
this.pokemonNameInputComboBox.FormattingEnabled = true;
|
||||
this.pokemonNameInputComboBox.Location = new System.Drawing.Point(71, 20);
|
||||
this.pokemonNameInputComboBox.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.pokemonNameInputComboBox.Location = new System.Drawing.Point(53, 15);
|
||||
this.pokemonNameInputComboBox.Name = "pokemonNameInputComboBox";
|
||||
this.pokemonNameInputComboBox.Size = new System.Drawing.Size(386, 24);
|
||||
this.pokemonNameInputComboBox.Size = new System.Drawing.Size(290, 21);
|
||||
this.pokemonNameInputComboBox.TabIndex = 31;
|
||||
this.pokemonNameInputComboBox.SelectedIndexChanged += new System.EventHandler(this.pokemonNameInputComboBox_SelectedIndexChanged);
|
||||
//
|
||||
// entryCountLabel
|
||||
//
|
||||
this.entryCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.entryCountLabel.AutoSize = true;
|
||||
this.tableLayoutPanel3.SetColumnSpan(this.entryCountLabel, 3);
|
||||
this.entryCountLabel.Location = new System.Drawing.Point(5, 332);
|
||||
this.entryCountLabel.Name = "entryCountLabel";
|
||||
this.entryCountLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5);
|
||||
this.entryCountLabel.Size = new System.Drawing.Size(70, 23);
|
||||
this.entryCountLabel.TabIndex = 9;
|
||||
this.entryCountLabel.Text = "Entry Count: ";
|
||||
this.entryCountLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// LearnsetEditor
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(668, 565);
|
||||
this.ClientSize = new System.Drawing.Size(501, 459);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||
this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "LearnsetEditor";
|
||||
this.Padding = new System.Windows.Forms.Padding(7, 6, 7, 6);
|
||||
this.Padding = new System.Windows.Forms.Padding(5);
|
||||
this.Text = "Learnset Editor";
|
||||
this.tableLayoutPanel1.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pokemonPictureBox)).EndInit();
|
||||
|
|
@ -349,8 +377,8 @@
|
|||
this.tableLayoutPanel2.ResumeLayout(false);
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox3.ResumeLayout(false);
|
||||
this.tableLayoutPanel3.ResumeLayout(false);
|
||||
this.tableLayoutPanel3.PerformLayout();
|
||||
this.editLayoutPanel.ResumeLayout(false);
|
||||
this.editLayoutPanel.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.levelNumericUpDown)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
|
|
@ -365,17 +393,19 @@
|
|||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.GroupBox groupBox3;
|
||||
private System.Windows.Forms.ListBox movesListBox;
|
||||
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
|
||||
private System.Windows.Forms.TableLayoutPanel editLayoutPanel;
|
||||
private System.Windows.Forms.Button addMoveButton;
|
||||
private System.Windows.Forms.Button deleteMoveButton;
|
||||
private System.Windows.Forms.Button editMoveButton;
|
||||
private System.Windows.Forms.NumericUpDown levelNumericUpDown;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label levelLabel;
|
||||
private InputComboBox moveInputComboBox;
|
||||
private System.Windows.Forms.Label descriptorLabel;
|
||||
private System.Windows.Forms.Label statusLabel;
|
||||
public InputComboBox pokemonNameInputComboBox;
|
||||
public System.Windows.Forms.NumericUpDown monNumberNumericUpDown;
|
||||
private System.Windows.Forms.Label entryCountLabel;
|
||||
private System.Windows.Forms.Button moveUpButton;
|
||||
private System.Windows.Forms.Button moveDownButton;
|
||||
}
|
||||
}
|
||||
|
|
@ -10,10 +10,18 @@ using MessageBox = System.Windows.Forms.MessageBox;
|
|||
namespace DSPRE {
|
||||
public partial class LearnsetEditor : Form {
|
||||
|
||||
private PokemonEditor _parent;
|
||||
private readonly string[] fileNames;
|
||||
private readonly string[] pokenames;
|
||||
private readonly string[] moveNames;
|
||||
private PokemonEditor _parent;
|
||||
|
||||
private bool editMode = false;
|
||||
public bool dirty = false;
|
||||
private int currentLoadedId = 0;
|
||||
private LearnsetData currentLoadedFile = null;
|
||||
|
||||
private readonly string formName = "Learnset Editor";
|
||||
|
||||
private readonly string[] editButtonNames = new string[] {
|
||||
"Edit",
|
||||
"Confirm"
|
||||
|
|
@ -23,55 +31,190 @@ namespace DSPRE {
|
|||
"Delete",
|
||||
"Discard"
|
||||
};
|
||||
|
||||
private bool editMode = false;
|
||||
private int currentLoadedId = 0;
|
||||
private LearnsetData currentLoadedFile = null;
|
||||
|
||||
private bool dirty = false;
|
||||
private readonly string formName = "Learnset Editor";
|
||||
|
||||
|
||||
public LearnsetEditor(string[] moveNames, Control parent, PokemonEditor pokeEditor) {
|
||||
this.moveNames = moveNames;
|
||||
this._parent = pokeEditor;
|
||||
|
||||
InitializeComponent();
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
||||
this.FormBorderStyle = FormBorderStyle.None;
|
||||
this.Size = parent.Size;
|
||||
this.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top | AnchorStyles.Bottom;
|
||||
|
||||
Helpers.DisableHandlers();
|
||||
|
||||
BindingList<string> listMoveNames = new BindingList<string>(moveNames);
|
||||
moveInputComboBox.DataSource = listMoveNames;
|
||||
|
||||
/* ---------------- */
|
||||
int count = RomInfo.GetLearnsetFilesCount();
|
||||
this._parent = pokeEditor;
|
||||
this.moveNames = moveNames;
|
||||
this.pokenames = RomInfo.GetPokemonNames();
|
||||
List<string> fileNames = new List<string>(count);
|
||||
fileNames.AddRange(pokenames);
|
||||
this.fileNames = GetFileNames();
|
||||
|
||||
for (int i = 0; i < PokeDatabase.PersonalData.personalExtraFiles.Length; i++) {
|
||||
PokeDatabase.PersonalData.PersonalExtraFiles altFormEntry = PokeDatabase.PersonalData.personalExtraFiles[i];
|
||||
fileNames.Add(fileNames[altFormEntry.monId] + " - " + altFormEntry.description);
|
||||
}
|
||||
InitDataRanges();
|
||||
|
||||
int extraEntries = fileNames.Count;
|
||||
for (int i = 0; i < count - extraEntries; i++) {
|
||||
fileNames.Add($"Extra entry {fileNames.Count}");
|
||||
}
|
||||
|
||||
this.fileNames = fileNames.ToArray();
|
||||
monNumberNumericUpDown.Maximum = fileNames.Count - 1;
|
||||
pokemonNameInputComboBox.Items.AddRange(this.fileNames);
|
||||
/* ---------------- */
|
||||
|
||||
descriptorLabel.Text = "";
|
||||
statusLabel.Text = "";
|
||||
|
||||
Helpers.EnableHandlers();
|
||||
ChangeLoadedFile(1);
|
||||
|
||||
Helpers.EnableHandlers();
|
||||
}
|
||||
|
||||
private void InitDataRanges()
|
||||
{
|
||||
moveInputComboBox.DataSource = moveNames;
|
||||
pokemonNameInputComboBox.DataSource = fileNames;
|
||||
monNumberNumericUpDown.Minimum = 0;
|
||||
monNumberNumericUpDown.Maximum = RomInfo.GetLearnsetFilesCount() - 1;
|
||||
|
||||
pokemonNameInputComboBox.SelectedIndex = 1;
|
||||
monNumberNumericUpDown.Value = 1;
|
||||
levelNumericUpDown.Value = 1;
|
||||
|
||||
}
|
||||
private void setDirty(bool status) {
|
||||
|
||||
private string[] GetFileNames()
|
||||
{
|
||||
|
||||
int learnsetCount = RomInfo.GetLearnsetFilesCount();
|
||||
|
||||
List<string> fileNames = new List<string>(RomInfo.GetLearnsetFilesCount());
|
||||
fileNames.AddRange(pokenames);
|
||||
for (int i = 0; i < PokeDatabase.PersonalData.personalExtraFiles.Length; i++) {
|
||||
PokeDatabase.PersonalData.PersonalExtraFiles altFormEntry = PokeDatabase.PersonalData.personalExtraFiles[i];
|
||||
fileNames.Add(fileNames[altFormEntry.monId] + " - " + altFormEntry.description);
|
||||
}
|
||||
|
||||
for (int i = 0; i < learnsetCount - fileNames.Count; i++)
|
||||
{
|
||||
fileNames.Add($"Extra entry {fileNames.Count}");
|
||||
}
|
||||
|
||||
return fileNames.ToArray();
|
||||
}
|
||||
|
||||
public void ChangeLoadedFile(int learnsetID)
|
||||
{
|
||||
currentLoadedFile = new LearnsetData(learnsetID);
|
||||
currentLoadedId = learnsetID;
|
||||
|
||||
monNumberNumericUpDown.Value = currentLoadedId;
|
||||
pokemonNameInputComboBox.SelectedIndex = currentLoadedId;
|
||||
|
||||
UpdateMovesListFromFile();
|
||||
UpdateEntryCountLabel();
|
||||
UpdateButtonsOnMoveSelection();
|
||||
UpdatePokePic();
|
||||
UpdateAddEditStatus();
|
||||
SetDirty(false);
|
||||
}
|
||||
|
||||
private void UpdateMovesListFromFile()
|
||||
{
|
||||
movesListBox.BeginUpdate();
|
||||
movesListBox.Items.Clear();
|
||||
foreach (var elem in currentLoadedFile.list)
|
||||
{
|
||||
movesListBox.Items.Add(ElemToString(elem));
|
||||
}
|
||||
movesListBox.EndUpdate();
|
||||
}
|
||||
|
||||
private void UpdateEntryCountLabel()
|
||||
{
|
||||
StringBuilder labelText = new StringBuilder("Entry Count: ");
|
||||
labelText.Append(movesListBox.Items.Count);
|
||||
|
||||
if (movesListBox.Items.Count > LearnsetData.VanillaLimit)
|
||||
{
|
||||
labelText.Append("!");
|
||||
entryCountLabel.ForeColor = Color.FromArgb(210, 120, 0);
|
||||
entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Bold);
|
||||
}
|
||||
else
|
||||
{
|
||||
entryCountLabel.ForeColor = Color.Black;
|
||||
entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Regular);
|
||||
}
|
||||
|
||||
entryCountLabel.Text = labelText.ToString();
|
||||
}
|
||||
|
||||
private void UpdatePokePic()
|
||||
{
|
||||
int excess = currentLoadedId - pokenames.Length;
|
||||
int toLoad = currentLoadedId; // Default to the current ID
|
||||
try
|
||||
{
|
||||
if (excess >= 0)
|
||||
{
|
||||
toLoad = PokeDatabase.PersonalData.personalExtraFiles[excess].iconId;
|
||||
}
|
||||
}
|
||||
catch (IndexOutOfRangeException)
|
||||
{
|
||||
toLoad = 0;
|
||||
}
|
||||
finally
|
||||
{
|
||||
pokemonPictureBox.Image = DSUtils.GetPokePic(toLoad, pokemonPictureBox.Width, pokemonPictureBox.Height);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAddEditStatus()
|
||||
{
|
||||
(byte level, ushort move) newEntry = ((byte)levelNumericUpDown.Value, (ushort)moveInputComboBox.SelectedIndex);
|
||||
|
||||
if (currentLoadedFile == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool duplicate = currentLoadedFile.list.Contains(newEntry);
|
||||
|
||||
if (duplicate)
|
||||
{
|
||||
if (editMode)
|
||||
{
|
||||
editMoveButton.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
addMoveButton.Enabled = false;
|
||||
}
|
||||
statusLabel.Text = "Entry already exists!";
|
||||
}
|
||||
else
|
||||
{
|
||||
bool addable = IsValidEntry();
|
||||
if (addable)
|
||||
{
|
||||
statusLabel.Text = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
statusLabel.Text = "Invalid Move ID or Level!";
|
||||
}
|
||||
|
||||
if (editMode)
|
||||
{
|
||||
editMoveButton.Enabled = addable;
|
||||
}
|
||||
else
|
||||
{
|
||||
addMoveButton.Enabled = addable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SaveLearnsetData() {
|
||||
if (currentLoadedFile == null) {
|
||||
return;
|
||||
}
|
||||
currentLoadedFile.SaveToFileDefaultDir(currentLoadedId, false);
|
||||
SetDirty(false);
|
||||
}
|
||||
|
||||
private void SetDirty(bool status) {
|
||||
if (status) {
|
||||
dirty = true;
|
||||
this.Text = formName + "*";
|
||||
|
|
@ -79,90 +222,172 @@ namespace DSPRE {
|
|||
dirty = false;
|
||||
this.Text = formName;
|
||||
}
|
||||
_parent.UpdateTabPageNames();
|
||||
}
|
||||
public bool CheckDiscardChanges() {
|
||||
public bool CheckDiscardChanges()
|
||||
{
|
||||
if (!dirty) {
|
||||
return true;
|
||||
}
|
||||
|
||||
DialogResult res = MessageBox.Show(this, "Learnsets Editor\nThere are unsaved changes to the current Learnset data.\nDiscard and proceed?", "Learnset Editor - Unsaved changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||
if (res.Equals(DialogResult.Yes)) {
|
||||
return true;
|
||||
DialogResult res = MessageBox.Show(this,
|
||||
"You have unsaved changes. Do you want to save them before switching Pokémon?",
|
||||
"Learnset Editor - Unsaved changes", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
|
||||
|
||||
if (res == DialogResult.Yes)
|
||||
{
|
||||
SaveLearnsetData();
|
||||
}
|
||||
else if (res == DialogResult.Cancel)
|
||||
{
|
||||
monNumberNumericUpDown.Value = currentLoadedId;
|
||||
pokemonNameInputComboBox.SelectedIndex = currentLoadedId;
|
||||
return false; // Cancel the change
|
||||
}
|
||||
|
||||
monNumberNumericUpDown.Value = currentLoadedId;
|
||||
pokemonNameInputComboBox.SelectedIndex = currentLoadedId;
|
||||
|
||||
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
private string ElemToString((ushort level, ushort move) elem) {
|
||||
return $"Lv. {elem.level}: {moveNames[elem.move]}";
|
||||
}
|
||||
public void ChangeLoadedFile(int toLoad) {
|
||||
currentLoadedId = toLoad;
|
||||
currentLoadedFile = new LearnsetData(currentLoadedId);
|
||||
PopulateAllFromCurrentFile();
|
||||
UpdateButtonsOnMoveSelection();
|
||||
|
||||
int excess = toLoad - pokenames.Length;
|
||||
try {
|
||||
if (excess >= 0) {
|
||||
toLoad = PokeDatabase.PersonalData.personalExtraFiles[excess].iconId;
|
||||
}
|
||||
} catch (IndexOutOfRangeException) {
|
||||
toLoad = 0;
|
||||
} finally {
|
||||
pokemonPictureBox.Image = DSUtils.GetPokePic(toLoad, pokemonPictureBox.Width, pokemonPictureBox.Height);
|
||||
}
|
||||
setDirty(false);
|
||||
private bool IsValidEntry()
|
||||
{
|
||||
return levelNumericUpDown.Value > 0 &&
|
||||
moveInputComboBox.SelectedIndex > 0;
|
||||
}
|
||||
|
||||
private void PopulateAllFromCurrentFile() {
|
||||
movesListBox.BeginUpdate();
|
||||
movesListBox.Items.Clear();
|
||||
foreach (var elem in currentLoadedFile.list) {
|
||||
movesListBox.Items.Add(ElemToString(elem));
|
||||
}
|
||||
|
||||
UpdateEntryCountLabel();
|
||||
movesListBox.EndUpdate();
|
||||
private void UpdateByEditMode()
|
||||
{
|
||||
int index = editMode == false ? 0 : 1;
|
||||
editMoveButton.Text = editButtonNames[index];
|
||||
deleteMoveButton.Text = deleteButtonNames[index];
|
||||
}
|
||||
|
||||
//-------------------------------
|
||||
private void saveDataButton_Click(object sender, EventArgs e) {
|
||||
currentLoadedFile.SaveToFileDefaultDir(currentLoadedId, true);
|
||||
setDirty(false);
|
||||
}
|
||||
private void UpdateButtonsOnMoveSelection()
|
||||
{
|
||||
int sel = movesListBox.SelectedIndex;
|
||||
|
||||
private void pokemonNameInputComboBox_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
Update();
|
||||
if (Helpers.HandlersDisabled) {
|
||||
if (sel < 0)
|
||||
{
|
||||
editMoveButton.Enabled = false;
|
||||
deleteMoveButton.Enabled = false;
|
||||
moveUpButton.Enabled = false;
|
||||
moveDownButton.Enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
editMoveButton.Enabled = true;
|
||||
deleteMoveButton.Enabled = true;
|
||||
|
||||
int moveLevel = currentLoadedFile.list[sel].level;
|
||||
int previousLevel = sel > 0 ? currentLoadedFile.list[sel - 1].level : 0;
|
||||
int nextLevel = sel < currentLoadedFile.list.Count - 1 ? currentLoadedFile.list[sel + 1].level : 255;
|
||||
|
||||
// Allow reordering only if the levels are the same
|
||||
moveUpButton.Enabled = moveLevel == previousLevel;
|
||||
moveDownButton.Enabled = moveLevel == nextLevel;
|
||||
}
|
||||
|
||||
private int InsertEntrySafe(int level, int moveID)
|
||||
{
|
||||
if (currentLoadedFile == null || !IsValidEntry())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
(byte level, ushort move) newEntry = ((byte)level, (ushort)moveID);
|
||||
|
||||
if (currentLoadedFile.list.Contains(newEntry))
|
||||
{
|
||||
MessageBox.Show(this, "This entry already exists!\nThis should not have happened.", "Learnset Editor - Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||
AppLogger.Error("Learnset Editor: Attempted to insert a duplicate entry: " + newEntry);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int index = currentLoadedFile.list.FindIndex(x => x.level > newEntry.level || (x.level == newEntry.level && x.move > newEntry.move));
|
||||
|
||||
if (index < 0)
|
||||
{
|
||||
currentLoadedFile.list.Add(newEntry);
|
||||
return currentLoadedFile.list.Count - 1; // Add to the end if no larger entry is found
|
||||
}
|
||||
else
|
||||
{
|
||||
currentLoadedFile.list.Insert(index, newEntry);
|
||||
return index; // Insert at the found index
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private bool ShiftEntry(int index, int direction)
|
||||
{
|
||||
if (currentLoadedFile == null || index < 0 || index >= currentLoadedFile.list.Count)
|
||||
{
|
||||
return false; // Invalid index
|
||||
}
|
||||
|
||||
int newIndex = index + direction;
|
||||
if (newIndex < 0 || newIndex >= currentLoadedFile.list.Count)
|
||||
{
|
||||
return false; // Out of bounds
|
||||
}
|
||||
// Move the entry safely
|
||||
SwapEntriesSafe(index, newIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool SwapEntriesSafe(int indexA, int indexB)
|
||||
{
|
||||
if (currentLoadedFile == null || indexA < 0 || indexB < 0 || indexA >= currentLoadedFile.list.Count || indexB >= currentLoadedFile.list.Count)
|
||||
{
|
||||
return false; // Invalid indices
|
||||
}
|
||||
(byte level, ushort move) entryA = currentLoadedFile.list[indexA];
|
||||
(byte level, ushort move) entryB = currentLoadedFile.list[indexB];
|
||||
// Swap the entries
|
||||
currentLoadedFile.list[indexA] = entryB;
|
||||
currentLoadedFile.list[indexB] = entryA;
|
||||
|
||||
return true; // Successfully swapped
|
||||
}
|
||||
|
||||
#region Event Handlers
|
||||
private void saveDataButton_Click(object sender, EventArgs e) {
|
||||
SaveLearnsetData();
|
||||
}
|
||||
|
||||
private void pokemonNameInputComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Helpers.HandlersDisabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Update();
|
||||
|
||||
this._parent.TrySyncIndices((ComboBox)sender);
|
||||
Helpers.DisableHandlers();
|
||||
UpdateAddEditStatus();
|
||||
if (CheckDiscardChanges()) {
|
||||
int newNumber = pokemonNameInputComboBox.SelectedIndex;
|
||||
monNumberNumericUpDown.Value = newNumber;
|
||||
ChangeLoadedFile(newNumber);
|
||||
if (CheckDiscardChanges())
|
||||
{
|
||||
ChangeLoadedFile(pokemonNameInputComboBox.SelectedIndex);
|
||||
}
|
||||
Helpers.EnableHandlers();
|
||||
}
|
||||
|
||||
private void monNumberNumericUpDown_ValueChanged(object sender, EventArgs e) {
|
||||
Update();
|
||||
if (Helpers.HandlersDisabled) {
|
||||
|
||||
if (Helpers.HandlersDisabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Update();
|
||||
|
||||
this._parent.TrySyncIndices((NumericUpDown)sender);
|
||||
Helpers.DisableHandlers();
|
||||
UpdateAddEditStatus();
|
||||
if (CheckDiscardChanges()) {
|
||||
int newNumber = (int)monNumberNumericUpDown.Value;
|
||||
pokemonNameInputComboBox.SelectedIndex = newNumber;
|
||||
ChangeLoadedFile(newNumber);
|
||||
if (CheckDiscardChanges())
|
||||
{
|
||||
ChangeLoadedFile((int)monNumberNumericUpDown.Value);
|
||||
}
|
||||
Helpers.EnableHandlers();
|
||||
}
|
||||
|
|
@ -175,10 +400,6 @@ namespace DSPRE {
|
|||
descriptorLabel.Text = "Move ID: " + moveInputComboBox.SelectedIndex;
|
||||
}
|
||||
|
||||
private bool CheckValidEntry() {
|
||||
return levelNumericUpDown.Value > 0 &&
|
||||
moveInputComboBox.SelectedIndex > 0;
|
||||
}
|
||||
private void levelNumericUpDown_ValueChanged(object sender, EventArgs e) {
|
||||
if (currentLoadedFile == null) {
|
||||
return;
|
||||
|
|
@ -186,61 +407,39 @@ namespace DSPRE {
|
|||
UpdateAddEditStatus();
|
||||
}
|
||||
|
||||
private void UpdateAddEditStatus() {
|
||||
(byte level, ushort move) newEntry = ((byte)levelNumericUpDown.Value, (ushort)moveInputComboBox.SelectedIndex);
|
||||
|
||||
if (currentLoadedFile == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool duplicate = currentLoadedFile.list.Contains(newEntry);
|
||||
|
||||
if (duplicate) {
|
||||
if (editMode) {
|
||||
editMoveButton.Enabled = false;
|
||||
} else {
|
||||
addMoveButton.Enabled = false;
|
||||
}
|
||||
statusLabel.Text = "Entry already exists!";
|
||||
} else {
|
||||
bool addable = CheckValidEntry();
|
||||
if (addable) {
|
||||
statusLabel.Text = "";
|
||||
} else {
|
||||
statusLabel.Text = "Invalid Move ID or Level!";
|
||||
}
|
||||
|
||||
if (editMode) {
|
||||
editMoveButton.Enabled = addable;
|
||||
} else {
|
||||
addMoveButton.Enabled = addable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addMoveButton_Click(object sender, EventArgs e) {
|
||||
(byte level, ushort move) newEntry = ((byte)levelNumericUpDown.Value, (ushort)moveInputComboBox.SelectedIndex);
|
||||
currentLoadedFile.list.Add(newEntry);
|
||||
|
||||
currentLoadedFile.list.Sort();
|
||||
PopulateAllFromCurrentFile();
|
||||
movesListBox.SelectedIndex = currentLoadedFile.list.FindIndex(x => x == newEntry);
|
||||
|
||||
int index = InsertEntrySafe((byte)levelNumericUpDown.Value, (ushort)moveInputComboBox.SelectedIndex);
|
||||
|
||||
if (index < 0) {
|
||||
return; // Insertion failed, likely due to invalid entry
|
||||
}
|
||||
|
||||
UpdateMovesListFromFile();
|
||||
movesListBox.SelectedIndex = index;
|
||||
UpdateAddEditStatus();
|
||||
setDirty(true);
|
||||
SetDirty(true);
|
||||
}
|
||||
|
||||
private void deleteMoveButton_Click(object sender, EventArgs e) {
|
||||
|
||||
if (currentLoadedFile == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int sel = movesListBox.SelectedIndex;
|
||||
if (sel < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (editMode) {
|
||||
if (editMode)
|
||||
{
|
||||
editMode = false;
|
||||
movesListBox.Enabled = true;
|
||||
UpdateButtonsOnMoveSelection();
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
currentLoadedFile.list.RemoveAt(sel);
|
||||
movesListBox.Items.RemoveAt(sel);
|
||||
|
||||
|
|
@ -254,7 +453,7 @@ namespace DSPRE {
|
|||
|
||||
UpdateByEditMode();
|
||||
UpdateAddEditStatus();
|
||||
setDirty(true);
|
||||
SetDirty(true);
|
||||
}
|
||||
|
||||
private void editMoveButton_Click(object sender, EventArgs e) {
|
||||
|
|
@ -268,16 +467,19 @@ namespace DSPRE {
|
|||
|
||||
int newSelection;
|
||||
int oldLevel = currentLoadedFile.list[sel].level;
|
||||
currentLoadedFile.list[sel] = newEntry;
|
||||
|
||||
if (newEntry.level == oldLevel) {
|
||||
if (newEntry.level == oldLevel)
|
||||
{
|
||||
currentLoadedFile.list[sel] = newEntry;
|
||||
movesListBox.Items[sel] = ElemToString(newEntry);
|
||||
newSelection = sel;
|
||||
} else {
|
||||
currentLoadedFile.list.Sort();
|
||||
PopulateAllFromCurrentFile();
|
||||
newSelection = currentLoadedFile.list.FindIndex(x => x == newEntry);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentLoadedFile.list.RemoveAt(sel);
|
||||
newSelection = InsertEntrySafe(newEntry.level, newEntry.move);
|
||||
UpdateMovesListFromFile();
|
||||
}
|
||||
|
||||
UpdateEntryCountLabel();
|
||||
movesListBox.SelectedIndex = newSelection;
|
||||
|
|
@ -286,6 +488,8 @@ namespace DSPRE {
|
|||
} else {
|
||||
editMode = true;
|
||||
movesListBox.Enabled = false;
|
||||
moveUpButton.Enabled = false;
|
||||
moveDownButton.Enabled = false;
|
||||
|
||||
editMoveButton.Text = editButtonNames[1];
|
||||
deleteMoveButton.Text = deleteButtonNames[1];
|
||||
|
|
@ -296,50 +500,39 @@ namespace DSPRE {
|
|||
}
|
||||
|
||||
UpdateByEditMode();
|
||||
addMoveButton.Enabled = (editMode == false && CheckValidEntry());
|
||||
setDirty(true);
|
||||
}
|
||||
|
||||
private void UpdateByEditMode() {
|
||||
UpdateButtonNames(editMode);
|
||||
}
|
||||
|
||||
private void UpdateButtonNames(bool editMode) {
|
||||
int index = editMode == false ? 0 : 1;
|
||||
editMoveButton.Text = editButtonNames[index];
|
||||
deleteMoveButton.Text = deleteButtonNames[index];
|
||||
UpdateAddEditStatus();
|
||||
SetDirty(true);
|
||||
}
|
||||
|
||||
private void movesListBox_SelectedIndexChanged(object sender, EventArgs e) {
|
||||
UpdateButtonsOnMoveSelection();
|
||||
}
|
||||
|
||||
private void UpdateButtonsOnMoveSelection() {
|
||||
private void moveUpButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
int sel = movesListBox.SelectedIndex;
|
||||
if (sel < 0) {
|
||||
editMoveButton.Enabled = false;
|
||||
deleteMoveButton.Enabled = false;
|
||||
if (!ShiftEntry(sel, -1))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
editMoveButton.Enabled = true;
|
||||
deleteMoveButton.Enabled = true;
|
||||
UpdateMovesListFromFile();
|
||||
movesListBox.SelectedIndex = sel-1;
|
||||
SetDirty(true);
|
||||
}
|
||||
|
||||
private void UpdateEntryCountLabel(){
|
||||
StringBuilder labelText = new StringBuilder("Entry Count: ");
|
||||
labelText.Append(movesListBox.Items.Count);
|
||||
|
||||
if (movesListBox.Items.Count > LearnsetData.VanillaLimit) {
|
||||
labelText.Append("!");
|
||||
entryCountLabel.ForeColor = Color.FromArgb(210, 120, 0);
|
||||
entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Bold);
|
||||
} else {
|
||||
entryCountLabel.ForeColor = Color.Black;
|
||||
entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Regular);
|
||||
private void moveDownButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
int sel = movesListBox.SelectedIndex;
|
||||
if (!ShiftEntry(sel, 1))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
entryCountLabel.Text = labelText.ToString();
|
||||
UpdateMovesListFromFile();
|
||||
movesListBox.SelectedIndex = sel+1;
|
||||
SetDirty(true);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ namespace DSPRE {
|
|||
private int currentLoadedId = 0;
|
||||
private PokemonPersonalData currentLoadedFile = null;
|
||||
|
||||
private static bool dirty = false;
|
||||
public bool dirty = false;
|
||||
private bool modifiedAbilities = false;
|
||||
private static readonly string formName = "Personal Data Editor";
|
||||
|
||||
|
|
@ -87,6 +87,7 @@ namespace DSPRE {
|
|||
dirty = false;
|
||||
this.Text = formName;
|
||||
}
|
||||
_parent.UpdateTabPageNames();
|
||||
}
|
||||
private void baseHpNumericUpDown_ValueChanged(object sender, EventArgs e) {
|
||||
if (Helpers.HandlersDisabled) {
|
||||
|
|
|
|||
1
DS_Map/Editors/PokemonEditor.Designer.cs
generated
1
DS_Map/Editors/PokemonEditor.Designer.cs
generated
|
|
@ -33,6 +33,7 @@
|
|||
this.syncChangesCheckbox = new System.Windows.Forms.CheckBox();
|
||||
this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.FormClosing += PokemonEditor_FormClosing;
|
||||
this.tabControl.SuspendLayout();
|
||||
this.flowLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
|
|
|
|||
|
|
@ -106,5 +106,37 @@ namespace DSPRE {
|
|||
}
|
||||
Helpers.RestoreDisableHandler();
|
||||
}
|
||||
|
||||
public void UpdateTabPageNames()
|
||||
{
|
||||
if (personalEditor == null || learnsetEditor == null || evoEditor == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
personalPage.Text = personalEditor.Text;
|
||||
learnsetPage.Text = learnsetEditor.Text;
|
||||
evoPage.Text = evoEditor.Text;
|
||||
}
|
||||
|
||||
private void PokemonEditor_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (personalEditor == null || learnsetEditor == null || evoEditor == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (personalEditor.dirty || learnsetEditor.dirty || evoEditor.dirty)
|
||||
{
|
||||
DialogResult result = MessageBox.Show("There are unsaved changes. Closing the editor will discard them!", "Unsaved Changes", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
|
||||
|
||||
if (result != DialogResult.OK)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,22 @@ namespace DSPRE.ROMFiles {
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool Insert(int index, T item) {
|
||||
if (set.Contains(item)) {
|
||||
//If the item is already in the set, we just move it to the new index
|
||||
int oldIndex = list.FindIndex(x => x.Equals(item));
|
||||
if (oldIndex != index) {
|
||||
list.Move(oldIndex, index);
|
||||
}
|
||||
return false; //No insertion happened
|
||||
} else {
|
||||
//New item, insert it
|
||||
list.Insert(index, item);
|
||||
set.Add(item);
|
||||
return true; //Insertion happened
|
||||
}
|
||||
}
|
||||
|
||||
// Expose some methods from the internal List
|
||||
public T Find(Predicate<T> match) {
|
||||
return list.Find(match);
|
||||
Loading…
Reference in New Issue
Block a user