Обновление отображения

This commit is contained in:
2025-04-27 12:22:52 +04:00
parent 76167f1b24
commit 06d154eccc
9 changed files with 523 additions and 402 deletions
+20 -112
View File
@@ -1,6 +1,4 @@
using System.Windows.Forms;
using Microsoft.EntityFrameworkCore;
using Newtonsoft.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Pf2eModel;
@@ -9,7 +7,6 @@ using Pf2eModel.Model.Base;
using Pf2eModel.Model.Common.I18n;
using Pf2eModel.Model.Enum;
using Pf2eViewer.Converters;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace Pf2eViewer;
@@ -19,7 +16,7 @@ public partial class MainViewForm : Form
public readonly string JsonViewerHtml;
public readonly DatabaseViewer Viewer = new();
public readonly EntityView Viewer;
public MainViewForm()
{
@@ -27,16 +24,12 @@ public partial class MainViewForm : Form
_ = new DarkModeCS(this) { ColorMode = DarkModeCS.DisplayMode.SystemDefault };
Reset();
EntityGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
using StreamReader reader = new("Resources/json-viewer.html");
JsonViewerHtml = reader.ReadToEnd();
Viewer.ViewUpdateStart += Viewer_ViewUpdateStart;
Viewer.ViewUpdate += Viewer_ViewUpdate;
Viewer.ViewSelect += Viewer_ViewSelect;
DatabaseViewer.EntityChange += DatabaseViewer_EntityChange;
Reset();
}
public void Reset()
@@ -44,45 +37,21 @@ public partial class MainViewForm : Form
Context.Dispose();
Context = new();
TypesListBox.DataSource = Context.Entities.Select(e => e.Type).Distinct().ToList();
TypesListBox.DataSource = Context
.Entities.Select(e => e.Type)
.Distinct()
.OrderBy(t => t.ToString())
.ToList();
TypesListBox.SelectedIndex = 0;
}
private void ToggleFreeze(bool state)
{
EntityGridView.Visible = state;
JsonWebView.Visible = state;
FirstPageButton.Enabled = state;
PrevPageButton.Enabled = state;
NextPageButton.Enabled = state;
LastPageButton.Enabled = state;
PageTextBox.Enabled = state;
// EntityGridView.Visible = state;
// JsonWebView.Visible = state;
}
// Viewer events
private void Viewer_ViewUpdateStart()
{
ToggleFreeze(false);
}
private void Viewer_ViewUpdate()
{
EntityGridView.DataSource = Viewer.Entities.Select(e => new EntityGridRow(e));
PaginationLabel.Text = $@"Всего: {Viewer.Count} объектов, {Viewer.MaxPage} страниц";
FirstPageButton.Enabled = Viewer.Page > 1;
PrevPageButton.Enabled = Viewer.Page > 1;
NextPageButton.Enabled = Viewer.Page < Viewer.MaxPage;
LastPageButton.Enabled = Viewer.Page < Viewer.MaxPage;
ToggleFreeze(true);
}
private void Viewer_ViewSelect(Entity? entity, IEntity? subEntity)
private void DatabaseViewer_EntityChange(EntityView newEntity)
{
JsonSerializerSettings settings = new()
{
@@ -95,15 +64,15 @@ public partial class MainViewForm : Form
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
};
string result = JsonConvert.SerializeObject(entity, settings);
string subResult = JsonConvert.SerializeObject(subEntity, settings);
string result = JsonConvert.SerializeObject(newEntity.Entity, settings);
string subResult = JsonConvert.SerializeObject(newEntity.SubEntity, settings);
string json = result[..^1] + $",\"SubEntity\":{subResult}}}";
RenderJson(json);
}
// Form events
DescriptionTextBox.Text = newEntity.Entity!.Description;
}
private void TypesListBox_SelectedIndexChanged(object sender, EventArgs _)
{
@@ -112,58 +81,8 @@ public partial class MainViewForm : Form
return;
}
Viewer.Page = 1;
}
private void FirstPageButton_Click(object sender, EventArgs e)
{
Viewer.Page = 1;
}
private void PrevPageButton_Click(object sender, EventArgs e)
{
Viewer.Page--;
}
private void NextPageButton_Click(object sender, EventArgs e)
{
Viewer.Page++;
}
private void LastPageButton_Click(object sender, EventArgs e)
{
Viewer.Page = Viewer.MaxPage;
}
private void PageTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (e.KeyChar == (char)Keys.Return)
{
Viewer.Page = Convert.ToInt32(PageTextBox.Text);
}
}
private void EntityGridView_RowStateChanged(
object sender,
DataGridViewRowStateChangedEventArgs e
)
{
int rowsCount = EntityGridView.SelectedRows.Count;
if (rowsCount is 0 or > 1)
{
return;
}
DataGridViewRow row = EntityGridView.SelectedRows[0];
EntityGridRow data = (EntityGridRow)row.DataBoundItem;
Viewer.Select(data.GetEntity());
DatabaseViewer.Type = (EntityType)TypesListBox.SelectedItem;
// Viewer.Page = 1;
}
public void RenderJson(string json)
@@ -184,17 +103,6 @@ public partial class MainViewForm : Form
)
{
JsonWebView.Visible = true;
Viewer_ViewSelect(Viewer.LastEntity, Viewer.LastSubEntity);
DatabaseViewer_EntityChange(DatabaseViewer.CurrentEntity);
}
}
internal class EntityGridRow(Entity e)
{
public int Id { get; set; } = e.Id;
public string Name { get; set; } = e.Name[LocaleType.English];
public EntityRarity Rarity { get; set; } = e.Rarity;
private readonly Entity _e = e;
public Entity GetEntity() => _e;
}