Files
prep-step/PrepStep/PrtMancantiForm.cs
T
davideandClaude Sonnet 5 be4989fc8d Sistema il testo delle fasi 3-4 e completa il dialogo "Componenti referenziati trovati"
Fase 3: spostata la spiegazione da paragrafo sopra il bottone a etichetta
affiancata ("Copia i file dal server nella cartella 'raw'."), stesso
pattern già usato in fase 2. Fase 4: tolta la frase finale sul passo
opzionale, ridondante con la frase precedente.

PrtMancantiForm (l'esito di "Trova componenti referenziati"): mancava un
modo esplicito per chiudere la finestra (solo la X) e usava l'icona
default di WinForms invece di quella dell'app. Aggiunto "Chiudi" accanto
ad "Apri cartella raw" (Esc la chiude) e impostata l'icona dall'eseguibile,
stesso pattern già usato in Form1.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 16:00:25 +02:00

103 lines
4.0 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 = new Panel { Dock = DockStyle.Bottom, Height = 50 };
var flowAzioni = new FlowLayoutPanel
{
Dock = DockStyle.Fill,
FlowDirection = FlowDirection.RightToLeft,
Padding = new Padding(12, 8, 12, 8),
};
var btnChiudi = new Button { Text = "Chiudi" };
UiStile.Primario(btnChiudi);
btnChiudi.Click += (_, _) => Close();
flowAzioni.Controls.Add(btnChiudi);
var btnApriCartella = new Button { Text = "Apri cartella raw", Margin = new Padding(8, 0, 0, 0) };
UiStile.Secondario(btnApriCartella);
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);
pannelloAzioni.Controls.Add(flowAzioni);
Controls.Add(grid);
Controls.Add(lblInfo);
Controls.Add(pannelloAzioni);
CancelButton = btnChiudi;
Resize += (_, _) => lblInfo.MaximumSize = new Size(ClientSize.Width - 24, 0);
}
}