From 6726dd221658b0e9f903458945d98957c8d79d96 Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Mon, 21 Sep 2026 11:00:01 +0200 Subject: [PATCH] Add app icon, product name/version, and document them - New app.ico (from the Cevolani favicon, background made transparent and cropped tighter to the logo so it stays legible at 16/24px), wired up via ApplicationIcon in the csproj and re-read at runtime for the window icon. - Named the product "Cevolani StepPrep" and set Version=0.1.0 in the csproj; shown in the window title. The CadSearchGui folder/namespace/csproj keep their technical name, only the product-facing name changed. - Updated CLAUDE.md, README.md and docs/architettura.md to reflect the product name/version, UiStile.cs, app.ico, and that this app is a pre-process step ahead of Creo Distributed Batch. Co-Authored-By: Claude Sonnet 5 --- CLAUDE.md | 17 +++++++++++++++-- CadSearchGui/CadSearchGui.csproj | 5 +++++ CadSearchGui/Form1.cs | 14 +++++++++++++- CadSearchGui/app.ico | Bin 0 -> 49654 bytes README.md | 12 +++++++----- docs/architettura.md | 26 ++++++++++++++++++++++---- 6 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 CadSearchGui/app.ico diff --git a/CLAUDE.md b/CLAUDE.md index 79f3111..b034795 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,10 +4,15 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## Cos'è questo progetto -`CadSearchGui` è un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di +`CadSearchGui` è il nome tecnico del progetto (cartella, namespace, csproj); il nome del +programma per l'utente finale è **Cevolani StepPrep** (versione in `` dentro +`CadSearchGui/CadSearchGui.csproj`, attualmente `0.1.0` — mostrata anche nel titolo della +finestra). È un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di cercare i file CAD Pro-ENGINEER/Creo contenuti in tutte le cartelle di primo livello di un disco/share di rete (radice di default `X:\`), salvando i metadati in un DB -SQLite locale (`cad_index.db`). +SQLite locale (`cad_index.db`). Il flusso a valle (fasi 2-5, vedi sotto) prepara i file +`raw/` da passare a Creo Distributed Batch per l'esportazione STEP: la app è quindi un +pre-processo per quel passaggio, non lo sostituisce. ## Comandi @@ -90,6 +95,14 @@ entrambi rimossi: ora l'unico programma è questo, con GUI e indicizzazione inte di progresso, conteggi nuovi/aggiornati/invariati/rimossi, tempo trascorso e stima del tempo rimanente (calcolata dal ritmo file/secondo rispetto al totale atteso, preso dal conteggio della scansione precedente salvato nel DB). +- **UiStile.cs** — stile bottoni condiviso da `Form1` e dai dialog secondari + (`Primario`/`Secondario`, entrambi `AutoSize` col padding invece di una `Size` fissa + in pixel, per evitare che il testo vada a capo e si tagli quando non ci sta) e + `Arrotonda` per gli angoli dei bottoni "Avanti"/"Indietro" del wizard. +- **app.ico** — icona dell'app (logo Cevolani + pezzo + STEP, sfondo trasparente), + referenziata da `` in `CadSearchGui.csproj` e riletta a runtime in + `Form1.BuildUi()` via `Icon.ExtractAssociatedIcon(Application.ExecutablePath)` per + la titlebar (stessa icona dell'exe, nessun file duplicato nell'output). ### Schema del DB (`cad_index.db`) diff --git a/CadSearchGui/CadSearchGui.csproj b/CadSearchGui/CadSearchGui.csproj index 22997bf..229bac9 100644 --- a/CadSearchGui/CadSearchGui.csproj +++ b/CadSearchGui/CadSearchGui.csproj @@ -7,6 +7,11 @@ true enable PerMonitorV2 + app.ico + Cevolani StepPrep + Cevolani StepPrep + Cevolani + 0.1.0 diff --git a/CadSearchGui/Form1.cs b/CadSearchGui/Form1.cs index 77fee35..46b9110 100644 --- a/CadSearchGui/Form1.cs +++ b/CadSearchGui/Form1.cs @@ -75,9 +75,21 @@ public partial class Form1 : Form private void BuildUi() { AllowDrop = true; - Text = "Distinta Base -> CSV con percorsi CAD"; + // Versione letta dall'assembly ( nel csproj) invece che duplicata qui a mano. + var versione = typeof(Form1).Assembly.GetName().Version; + Text = $"Cevolani StepPrep {versione?.ToString(3)} — Distinta Base -> CSV con percorsi CAD"; MinimumSize = new Size(760, 480); Font = new Font("Segoe UI", 9.5f); + // Stessa icona di ApplicationIcon nel csproj: la si rilegge dall'exe compilato invece + // di duplicare il file .ico come Content, funziona identica in Debug/Release/publish. + 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 headerPanel = new Panel { Dock = DockStyle.Top, Height = 40, BackColor = SystemColors.ControlLight }; _lblFase.Dock = DockStyle.Fill; diff --git a/CadSearchGui/app.ico b/CadSearchGui/app.ico new file mode 100644 index 0000000000000000000000000000000000000000..fc75ede16cd0fe5ae2fc585c11f49460c9922d12 GIT binary patch literal 49654 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 4014cb9..43070e0 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -# CadSearchGui +# Cevolani StepPrep -App Windows Forms (.NET 10) per indicizzare, cercare e recuperare i file CAD -Pro-ENGINEER/Creo di un disco/share di rete, e per trasformare l'estrazione -"Distinta Base" del gestionale (file `.xls`/`.xml`) in un CSV con il percorso -CAD di ogni componente. +App Windows Forms (.NET 10, progetto `CadSearchGui`) per indicizzare, cercare e +recuperare i file CAD Pro-ENGINEER/Creo di un disco/share di rete, e per trasformare +l'estrazione "Distinta Base" del gestionale (file `.xls`/`.xml`) in un CSV con il +percorso CAD di ogni componente, fino a raccogliere in `raw/` tutto il necessario per +l'esportazione STEP con **Creo Distributed Batch**: è un pre-processo per quel +passaggio, non lo sostituisce. ## Funzionalità diff --git a/docs/architettura.md b/docs/architettura.md index 949a874..c3025c1 100644 --- a/docs/architettura.md +++ b/docs/architettura.md @@ -1,8 +1,11 @@ -# Architettura di CadSearchGui +# Architettura di CadSearchGui (Cevolani StepPrep) -Panoramica di tutti i file sorgente e di come collaborano. Per il "come si usa" vedi il -`README.md` in root; per il formato binario `.asm` vedi `docs/formato-asm.md`; per la -parallelizzazione della copia in `raw/` vedi `docs/copia-raw-parallela.md`. +Panoramica di tutti i file sorgente e di come collaborano. `CadSearchGui` è il nome +tecnico del progetto; **Cevolani StepPrep** è il nome del programma per l'utente +finale (titolo finestra, icona, versione — vedi ``/`` in +`CadSearchGui.csproj`). Per il "come si usa" vedi il `README.md` in root; per il +formato binario `.asm` vedi `docs/formato-asm.md`; per la parallelizzazione della +copia in `raw/` vedi `docs/copia-raw-parallela.md`. ## Vista d'insieme @@ -96,6 +99,21 @@ Distinta (.xls/.xml) → CSV (componente;descrizione) → raw/ (CAD copiati salvato nel DB). - **ProgressoComponentiForm.cs** — dialog minimale (etichetta + barra) durante `RisolviAlberoComponenti` in fase 4. + +## Stile UI condiviso + +- **UiStile.cs** — `Primario`/`Secondario`: stile piatto per i bottoni (bordo sottile + per i secondari, blu pieno per l'azione principale di ogni fase), entrambi con + `AutoSize`+`Padding`+`MinimumSize` invece di una `Size` fissa in pixel indovinata a + mano (altrimenti il testo va a capo e si taglia in verticale se non ci sta nella + larghezza scelta). `Arrotonda` applica angoli arrotondati via `Region` calcolata su + `SizeChanged` (non una volta sola: con `AutoSize` la dimensione finale del bottone si + conosce solo a layout avvenuto), usata sui bottoni "Avanti"/"Indietro" del wizard. +- **app.ico** — icona dell'app, referenziata da `` nel csproj (icona + dell'exe in Esplora risorse/taskbar) e riletta esplicitamente in `Form1.BuildUi()` + con `Icon.ExtractAssociatedIcon(Application.ExecutablePath)` per la titlebar, senza + copiare il file `.ico` nell'output. Sfondo trasparente (nessuna card bianca), 7 + risoluzioni da 16 a 256px. - **PrtMancantiForm.cs** — esito della risoluzione ricorsiva dell'albero componenti: PRT e sotto-assiemi trovati e copiati in `raw/`, più i codici referenziati che non corrispondono a nessun file indicizzato (possono essere disegni, componenti davvero mancanti, o falsi