La barra Avanti/Indietro era un footer bianco a tutta larghezza con una linea di separazione da 1px. Ora è una card bianca staccata su tutti e 4 i lati dalla finestra (UiStile.FloatBar, angoli arrotondati, bordo sottile), riusata anche in PrtMancantiForm per Chiudi/Apri cartella raw. Avanti e Indietro avevano dimensioni diverse (testi di lunghezza diversa, più il grassetto di Primario che richiede più altezza del testo normale) ed erano visivamente disomogenei (bordo sottile quasi invisibile su sfondo bianco per Indietro contro il blu pieno di Avanti). Aggiunti UiStile.SecondarioPieno (variante piena, senza bordo, stessa costruzione di Primario ma grigio chiaro) e UiStile.LarghezzaUguale (stessa larghezza e altezza tra due bottoni, chiamata PRIMA di arrotondare gli angoli: arrotondare e poi ridimensionare lasciava un bordo residuo della Region vecchia). Doc aggiornati nello stesso commit: docs/architettura.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
97 lines
3.8 KiB
C#
97 lines
3.8 KiB
C#
using System.Diagnostics;
|
|
|
|
namespace PrepStep;
|
|
|
|
/// <summary>Mostra l'esito della risoluzione ricorsiva dell'albero componenti: i PRT e i
|
|
/// sotto-assiemi trovati nell'indice e già copiati in "raw" a partire dagli assiemi iniziali.</summary>
|
|
public class PrtMancantiForm : Form
|
|
{
|
|
public PrtMancantiForm(List<(string Codice, string Tipo, string Percorso)> righe, List<string> codiciNonTrovati, string cartellaRaw)
|
|
{
|
|
int numPrt = righe.Count(r => r.Tipo == "prt");
|
|
int numAsm = righe.Count(r => r.Tipo == "asm");
|
|
|
|
Text = "Componenti referenziati trovati";
|
|
ClientSize = new Size(720, 440);
|
|
StartPosition = FormStartPosition.CenterParent;
|
|
Font = new Font("Segoe UI", 9.5f);
|
|
try
|
|
{
|
|
Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
|
|
}
|
|
catch (Exception ex) when (ex is IOException or ArgumentException)
|
|
{
|
|
// ponytail: nessuna icona nell'exe (es. lanciato da dotnet run) -> resta quella di default
|
|
}
|
|
|
|
var lblInfo = new Label
|
|
{
|
|
Dock = DockStyle.Top,
|
|
AutoSize = true,
|
|
MaximumSize = new Size(ClientSize.Width - 24, 0),
|
|
Padding = new Padding(12, 8, 12, 8),
|
|
Text = $"Copiati in \"{cartellaRaw}\": {numPrt} PRT e {numAsm} sotto-assiemi trovati nell'indice."
|
|
+ (codiciNonTrovati.Count > 0
|
|
? $" {codiciNonTrovati.Count} codici referenziati non corrispondono a nessun file indicizzato "
|
|
+ "(righe 'non trovato' sotto: possono essere disegni, componenti davvero mancanti, "
|
|
+ "o falsi positivi della scansione)."
|
|
: ""),
|
|
};
|
|
|
|
var grid = new DataGridView
|
|
{
|
|
Dock = DockStyle.Fill,
|
|
ReadOnly = true,
|
|
AllowUserToAddRows = false,
|
|
AllowUserToDeleteRows = false,
|
|
RowHeadersVisible = false,
|
|
SelectionMode = DataGridViewSelectionMode.FullRowSelect,
|
|
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
|
|
};
|
|
grid.Columns.Add("codice", "Codice");
|
|
grid.Columns.Add("tipo", "Tipo");
|
|
grid.Columns.Add("percorso", "Percorso CAD");
|
|
grid.Columns["codice"]!.FillWeight = 20;
|
|
grid.Columns["tipo"]!.FillWeight = 10;
|
|
grid.Columns["percorso"]!.FillWeight = 70;
|
|
foreach (var (codice, tipo, percorso) in righe.OrderBy(r => r.Tipo).ThenBy(r => r.Codice))
|
|
{
|
|
grid.Rows.Add(codice, tipo, percorso);
|
|
}
|
|
foreach (var codice in codiciNonTrovati.OrderBy(c => c))
|
|
{
|
|
int i = grid.Rows.Add(codice, "non trovato", "");
|
|
grid.Rows[i].DefaultCellStyle.ForeColor = Color.DarkRed;
|
|
}
|
|
|
|
var (pannelloAzioni, flowAzioni) = UiStile.FloatBar();
|
|
|
|
var btnChiudi = new Button { Text = "Chiudi" };
|
|
UiStile.Primario(btnChiudi);
|
|
UiStile.Arrotonda(btnChiudi, 10);
|
|
btnChiudi.Click += (_, _) => Close();
|
|
flowAzioni.Controls.Add(btnChiudi);
|
|
|
|
var btnApriCartella = new Button { Text = "Apri cartella raw", Margin = new Padding(8, 0, 0, 0) };
|
|
UiStile.SecondarioPieno(btnApriCartella);
|
|
UiStile.Arrotonda(btnApriCartella, 10);
|
|
btnApriCartella.Click += (_, _) =>
|
|
{
|
|
try { Process.Start("explorer.exe", cartellaRaw); }
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(this, $"Impossibile aprire Esplora risorse:\n{ex.Message}", "Errore",
|
|
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
};
|
|
flowAzioni.Controls.Add(btnApriCartella);
|
|
|
|
Controls.Add(grid);
|
|
Controls.Add(lblInfo);
|
|
Controls.Add(pannelloAzioni);
|
|
CancelButton = btnChiudi;
|
|
|
|
Resize += (_, _) => lblInfo.MaximumSize = new Size(ClientSize.Width - 24, 0);
|
|
}
|
|
}
|