Ridisegna la fase 1 in card di stato e aggiunge un passo esplicito di verifica in fase 2
Fase 1: le info su DB e cartella di lavoro erano testo grigio uniforme
disallineato con bottoni squadrati senza gerarchia. Ora vivono in una
card di stato ("Database") con un indicatore verde/rosso per lo stato
di caricamento; la card "Cartella di lavoro" è stata rimossa (resta
gestibile da File → Scegli cartella di lavoro..., già presente nel
menu). Le icone sui bottoni (prima Segoe MDL2 Assets, poi disegnate a
mano via GDI+) sono state provate e infine tolte su richiesta: restano
solo testo, più semplici da mantenere per due bottoni.
Fase 2: "Verifica presenza" ora compare solo dopo un import riuscito
(dialogo o drag&drop) invece di essere sempre visibile, ed è lei —non
il solo import— a sbloccare "Avanti" (mancava la constatazione che
l'utente può ancora avanzare senza aver verificato che i file esistano
sul server). Aggiunte etichette numerate "1. Carica la distinta" /
"2. Verifica la presenza dei file sul server" accanto ai bottoni, e
rimosso il messaggio verde ridondante dopo l'import.
Doc aggiornati nello stesso commit: CLAUDE.md, docs/architettura.md,
GuidaForm.cs.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3e9c78074c
commit
e94331b69f
5 files changed
+166
-73
No files matched your search
+100
-45
@@ -1,4 +1,5 @@
|
||||
using System.Diagnostics;
|
||||
using System.Drawing.Drawing2D;
|
||||
using Microsoft.Data.Sqlite;
|
||||
|
||||
namespace PrepStep;
|
||||
@@ -10,11 +11,13 @@ public partial class Form1 : Form
|
||||
private readonly Button _btnCreaRaw = new();
|
||||
private readonly Button _btnTrovaPrt = new();
|
||||
private readonly Button _btnVerifica = new();
|
||||
private readonly FlowLayoutPanel _rigaVerifica = new();
|
||||
private readonly ListView _lstAnteprimaAsm = new();
|
||||
private readonly Label _lblStatus = new();
|
||||
private readonly Label _lblDb = new();
|
||||
private readonly Label _lblUltimoAggiornamento = new();
|
||||
private readonly Label _lblCartellaLavoro = new();
|
||||
private readonly Panel _indicatoreDb = new();
|
||||
private bool _dbCaricato;
|
||||
private readonly DataGridView _gridImport = new();
|
||||
private readonly DataGridView _gridRaw = new();
|
||||
private readonly Label _lblImportStatus = new();
|
||||
@@ -250,7 +253,7 @@ public partial class Form1 : Form
|
||||
private bool AvantiConsentito(int fase) => fase switch
|
||||
{
|
||||
0 => _dbPath is not null && _cartellaLavoro is not null,
|
||||
1 => _righeCorrenti is { Count: > 0 },
|
||||
1 => _righeCorrenti is { Count: > 0 } && _ultimaVerifica is not null,
|
||||
2 => _ultimaCartellaRaw is not null,
|
||||
3 => true, // risoluzione ricorsiva opzionale: non tutti gli assiemi hanno sotto-componenti
|
||||
_ => true,
|
||||
@@ -278,6 +281,7 @@ public partial class Form1 : Form
|
||||
_gridRaw.Rows.Clear();
|
||||
_lstAnteprimaAsm.Items.Clear();
|
||||
ImpostaStatoImport("", Color.Black);
|
||||
_rigaVerifica.Visible = false;
|
||||
|
||||
VaiAllaFase(1);
|
||||
}
|
||||
@@ -301,57 +305,78 @@ public partial class Form1 : Form
|
||||
Dock = DockStyle.Top,
|
||||
AutoSize = true,
|
||||
ForeColor = SystemColors.GrayText,
|
||||
Margin = new Padding(0, 0, 0, 12),
|
||||
Text = "L'indice CAD viene caricato automaticamente all'avvio, se già presente. "
|
||||
+ "Usa 'Apri DB...' per selezionarne un altro, oppure 'Aggiorna indice' per "
|
||||
+ "scansionare di nuovo il disco (X:\\).",
|
||||
Margin = new Padding(0, 0, 0, 16),
|
||||
Text = "L'indice CAD viene caricato automaticamente all'avvio, se già presente.",
|
||||
};
|
||||
contenuto.Controls.Add(lblIstruzioni);
|
||||
|
||||
var cardDb = UiStile.Card();
|
||||
var contenutoCardDb = new TableLayoutPanel
|
||||
{
|
||||
Dock = DockStyle.Top,
|
||||
AutoSize = true,
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink,
|
||||
ColumnCount = 1,
|
||||
};
|
||||
contenutoCardDb.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100));
|
||||
|
||||
var rigaTitoloDb = new FlowLayoutPanel
|
||||
{
|
||||
AutoSize = true,
|
||||
FlowDirection = FlowDirection.LeftToRight,
|
||||
Margin = new Padding(0, 0, 0, 6),
|
||||
};
|
||||
|
||||
_indicatoreDb.Size = new Size(10, 10);
|
||||
_indicatoreDb.Margin = new Padding(0, 5, 8, 0);
|
||||
_indicatoreDb.Paint += (_, e) =>
|
||||
{
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
var colore = _dbCaricato ? Color.FromArgb(30, 160, 90) : Color.FromArgb(200, 60, 60);
|
||||
using var pennello = new SolidBrush(colore);
|
||||
e.Graphics.FillEllipse(pennello, 0, 0, _indicatoreDb.Width - 1, _indicatoreDb.Height - 1);
|
||||
};
|
||||
rigaTitoloDb.Controls.Add(_indicatoreDb);
|
||||
|
||||
var lblTitoloDb = new Label
|
||||
{
|
||||
AutoSize = true,
|
||||
Font = new Font(Font, FontStyle.Bold),
|
||||
Text = "Database",
|
||||
};
|
||||
rigaTitoloDb.Controls.Add(lblTitoloDb);
|
||||
|
||||
contenutoCardDb.Controls.Add(rigaTitoloDb);
|
||||
|
||||
_lblDb.Dock = DockStyle.Top;
|
||||
_lblDb.AutoSize = true;
|
||||
_lblDb.ForeColor = SystemColors.GrayText;
|
||||
_lblDb.Margin = new Padding(0, 0, 0, 4);
|
||||
contenuto.Controls.Add(_lblDb);
|
||||
_lblDb.ForeColor = SystemColors.ControlText;
|
||||
_lblDb.Margin = new Padding(0, 0, 0, 2);
|
||||
contenutoCardDb.Controls.Add(_lblDb);
|
||||
|
||||
_lblUltimoAggiornamento.AutoSize = true;
|
||||
_lblUltimoAggiornamento.ForeColor = SystemColors.GrayText;
|
||||
_lblUltimoAggiornamento.Margin = new Padding(0, 0, 0, 12);
|
||||
contenuto.Controls.Add(_lblUltimoAggiornamento);
|
||||
_lblUltimoAggiornamento.Margin = new Padding(0, 0, 0, 14);
|
||||
contenutoCardDb.Controls.Add(_lblUltimoAggiornamento);
|
||||
|
||||
var bottoni = new FlowLayoutPanel { AutoSize = true, FlowDirection = FlowDirection.LeftToRight };
|
||||
var bottoniDb = new FlowLayoutPanel { AutoSize = true, FlowDirection = FlowDirection.LeftToRight };
|
||||
|
||||
_btnApriDb.Text = "Apri DB...";
|
||||
_btnApriDb.Margin = new Padding(0, 0, 8, 0);
|
||||
UiStile.Secondario(_btnApriDb);
|
||||
UiStile.Arrotonda(_btnApriDb);
|
||||
_btnApriDb.Click += (_, _) => ScegliDatabase();
|
||||
bottoni.Controls.Add(_btnApriDb);
|
||||
bottoniDb.Controls.Add(_btnApriDb);
|
||||
|
||||
_btnAggiorna.Text = "Aggiorna indice";
|
||||
UiStile.Secondario(_btnAggiorna);
|
||||
UiStile.Arrotonda(_btnAggiorna);
|
||||
_btnAggiorna.Click += (_, _) => AggiornaIndice();
|
||||
bottoni.Controls.Add(_btnAggiorna);
|
||||
bottoniDb.Controls.Add(_btnAggiorna);
|
||||
|
||||
contenuto.Controls.Add(bottoni);
|
||||
|
||||
var lblIstruzioniCartella = new Label
|
||||
{
|
||||
Dock = DockStyle.Top,
|
||||
AutoSize = true,
|
||||
ForeColor = SystemColors.GrayText,
|
||||
Margin = new Padding(0, 20, 0, 4),
|
||||
Text = "Cartella di lavoro: qui vengono scritti il CSV della distinta e la "
|
||||
+ "cartella 'raw' (gli STEP esportati con Creo vanno invece in 'step', "
|
||||
+ "dentro la stessa cartella). Proposta automaticamente (ricordata da un "
|
||||
+ "avvio all'altro), modificabile da 'File → Scegli cartella di lavoro...'.",
|
||||
};
|
||||
contenuto.Controls.Add(lblIstruzioniCartella);
|
||||
|
||||
_lblCartellaLavoro.Dock = DockStyle.Top;
|
||||
_lblCartellaLavoro.AutoSize = true;
|
||||
_lblCartellaLavoro.ForeColor = SystemColors.GrayText;
|
||||
_lblCartellaLavoro.Margin = new Padding(0, 0, 0, 4);
|
||||
contenuto.Controls.Add(_lblCartellaLavoro);
|
||||
contenutoCardDb.Controls.Add(bottoniDb);
|
||||
cardDb.Controls.Add(contenutoCardDb);
|
||||
contenuto.Controls.Add(cardDb);
|
||||
|
||||
var panel = new Panel();
|
||||
panel.Controls.Add(contenuto);
|
||||
@@ -382,20 +407,47 @@ public partial class Form1 : Form
|
||||
};
|
||||
contenuto.Controls.Add(lblIstruzioni);
|
||||
|
||||
var rigaImporta = new FlowLayoutPanel
|
||||
{
|
||||
AutoSize = true,
|
||||
FlowDirection = FlowDirection.LeftToRight,
|
||||
Margin = new Padding(0, 0, 0, 8),
|
||||
};
|
||||
var btnSfoglia = new Button
|
||||
{
|
||||
Text = "Scegli file distinta...",
|
||||
Margin = new Padding(0, 0, 0, 8),
|
||||
Margin = new Padding(0, 0, 8, 0),
|
||||
};
|
||||
UiStile.Secondario(btnSfoglia);
|
||||
btnSfoglia.Click += (_, _) => ScegliFileDistinta();
|
||||
contenuto.Controls.Add(btnSfoglia);
|
||||
rigaImporta.Controls.Add(btnSfoglia);
|
||||
rigaImporta.Controls.Add(new Label
|
||||
{
|
||||
AutoSize = true,
|
||||
ForeColor = SystemColors.GrayText,
|
||||
Margin = new Padding(0, 9, 0, 0),
|
||||
Text = "1. Carica la distinta",
|
||||
});
|
||||
contenuto.Controls.Add(rigaImporta);
|
||||
|
||||
_rigaVerifica.AutoSize = true;
|
||||
_rigaVerifica.FlowDirection = FlowDirection.LeftToRight;
|
||||
_rigaVerifica.Margin = new Padding(0, 0, 0, 8);
|
||||
_rigaVerifica.Visible = false; // compare solo dopo un import riuscito (file o drag&drop)
|
||||
|
||||
_btnVerifica.Text = "Verifica presenza";
|
||||
_btnVerifica.Margin = new Padding(0, 0, 0, 8);
|
||||
_btnVerifica.Margin = new Padding(0, 0, 8, 0);
|
||||
UiStile.Secondario(_btnVerifica);
|
||||
_btnVerifica.Click += (_, _) => VerificaCodiciNelDb();
|
||||
contenuto.Controls.Add(_btnVerifica);
|
||||
_rigaVerifica.Controls.Add(_btnVerifica);
|
||||
_rigaVerifica.Controls.Add(new Label
|
||||
{
|
||||
AutoSize = true,
|
||||
ForeColor = SystemColors.GrayText,
|
||||
Margin = new Padding(0, 9, 0, 0),
|
||||
Text = "2. Verifica la presenza dei file sul server",
|
||||
});
|
||||
contenuto.Controls.Add(_rigaVerifica);
|
||||
|
||||
_lblImportStatus.Dock = DockStyle.Top;
|
||||
_lblImportStatus.AutoSize = false;
|
||||
@@ -601,7 +653,7 @@ public partial class Form1 : Form
|
||||
{
|
||||
try
|
||||
{
|
||||
var (csv, righe) = DistintaBaseImporter.ConvertiInCsv(percorso, _cartellaLavoro!);
|
||||
var (_, righe) = DistintaBaseImporter.ConvertiInCsv(percorso, _cartellaLavoro!);
|
||||
_percorsoInputCorrente = percorso;
|
||||
_righeCorrenti = righe;
|
||||
|
||||
@@ -614,7 +666,8 @@ public partial class Form1 : Form
|
||||
_ultimaCartellaRaw = null;
|
||||
_ultimaVerifica = null;
|
||||
|
||||
ImpostaStatoImport($"CSV generato ({righe.Count} righe): {csv}", Color.DarkGreen);
|
||||
ImpostaStatoImport("", Color.Black);
|
||||
_rigaVerifica.Visible = true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -622,6 +675,7 @@ public partial class Form1 : Form
|
||||
_righeCorrenti = null;
|
||||
_gridImport.Rows.Clear();
|
||||
ImpostaStatoImport($"Errore durante la conversione: {ex.Message}", Color.DarkRed);
|
||||
_rigaVerifica.Visible = false;
|
||||
}
|
||||
AggiornaStatoAvanti();
|
||||
}
|
||||
@@ -649,6 +703,7 @@ public partial class Form1 : Form
|
||||
? Color.FromArgb(198, 239, 206)
|
||||
: Color.FromArgb(255, 199, 206);
|
||||
}
|
||||
AggiornaStatoAvanti();
|
||||
}
|
||||
|
||||
private void CreaCartellaRaw()
|
||||
@@ -1091,14 +1146,13 @@ public partial class Form1 : Form
|
||||
/// c'è ancora una preferenza salvata (o punta a una cartella cancellata), la cartella dove si
|
||||
/// trova il DB (più sensata dell'eseguibile: quella è dove l'utente tiene il proprio lavoro,
|
||||
/// non dov'è installata la app). Richiede quindi che InizializzaDatabase sia già stata
|
||||
/// chiamata. Sempre modificabile con "Cambia cartella..." in fase 1.</summary>
|
||||
/// chiamata. Sempre modificabile con "File → Scegli cartella di lavoro...".</summary>
|
||||
private void InizializzaCartellaLavoro()
|
||||
{
|
||||
var ultima = LeggiUltimaCartellaLavoro();
|
||||
_cartellaLavoro = ultima is not null && Directory.Exists(ultima)
|
||||
? ultima
|
||||
: (_dbPath is not null ? Path.GetDirectoryName(_dbPath) : null) ?? AppContext.BaseDirectory;
|
||||
AggiornaLabelCartellaLavoro();
|
||||
AggiornaStatoAvanti();
|
||||
}
|
||||
|
||||
@@ -1114,13 +1168,10 @@ public partial class Form1 : Form
|
||||
|
||||
string percorso = dialog.SelectedPath;
|
||||
_cartellaLavoro = percorso;
|
||||
AggiornaLabelCartellaLavoro();
|
||||
SalvaUltimaCartellaLavoro(percorso);
|
||||
AggiornaStatoAvanti();
|
||||
}
|
||||
|
||||
private void AggiornaLabelCartellaLavoro() => _lblCartellaLavoro.Text = $"Cartella di lavoro: {_cartellaLavoro}";
|
||||
|
||||
private static string? LeggiUltimaCartellaLavoro()
|
||||
{
|
||||
try
|
||||
@@ -1161,6 +1212,8 @@ public partial class Form1 : Form
|
||||
_lblStatus.Text = "Database non trovato. Usa 'Apri DB...' per selezionarlo oppure 'Aggiorna indice' per crearlo.";
|
||||
_lblDb.Text = "Nessun database caricato. Premi 'Aggiorna indice' per crearlo da X:\\, oppure 'Apri DB...' se ne hai gi\u00e0 uno.";
|
||||
_lblUltimoAggiornamento.Text = "";
|
||||
_dbCaricato = false;
|
||||
_indicatoreDb.Invalidate();
|
||||
AggiornaStatoAvanti();
|
||||
return;
|
||||
}
|
||||
@@ -1205,6 +1258,8 @@ public partial class Form1 : Form
|
||||
MessageBox.Show(this, $"Impossibile aprire il database:\n{ex.Message}", "Errore",
|
||||
MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
}
|
||||
_dbCaricato = _dbPath is not null;
|
||||
_indicatoreDb.Invalidate();
|
||||
AggiornaStatoAvanti();
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user