Files
Mimante/Mimante/v2.4_UI_REFINEMENTS.md
T
Alberto Balbo 995732f379 Aggiornamento alla versione 2.6.0
- Introdotta la modalità Multi-Asta per monitorare più aste contemporaneamente.
- Aggiunta griglia Multi-Asta con timer, prezzo e dettagli per asta.
- Implementata gestione per-asta con impostazioni individuali e log dedicati.
- Aggiunti pulsanti separati per pausa/riprendi con feedback visivo.
- Introdotta griglia utenti per-asta con aggiornamento real-time e ordinamento.
- Resi simmetrici i margini e migliorata la leggibilità dell'interfaccia.
- Implementata navigazione automatica ai Preferiti all'avvio in modalità Multi-Asta.
- Ottimizzato il layout con GridSplitter ridimensionabile tra griglia e log.
- Rimosso il pulsante di pausa globale e semplificata la gestione UI.
- Evidenziate le aste in pausa e le puntate dell'utente con colori distintivi.
2025-10-14 21:30:01 +02:00

12 KiB

?? AutoBidder v2.4 - UI Refinements

? Modifiche Completate

?? Lista Richieste

  1. ? Margine simmetrico tra griglia e dettagli (8px bottom match top)
  2. ? Rimosso pulsante Pausa globale (solo per-asta)
  3. ? Rimossa icona da pulsante Pausa (solo testo)
  4. ? Due pulsanti separati Pausa e Riprendi
  5. ? Colore distintivo per aste in pausa (#78350F - marrone/arancio scuro)

?? Modifiche UI (XAML)

1. Spaziatura Simmetrica Griglia

PRIMA (v2.3):

<!-- Griglia Aste -->
<Border Margin="12,0,12,0">
    <DataGrid Margin="8,8,8,12" ... />  <!-- Bottom: 12px -->
</Border>

<!-- Dettagli -->
<Border Margin="12,8,12,12">  <!-- Top: 8px -->

ORA (v2.4):

<!-- Griglia Aste -->
<Border Margin="12,0,12,8">
    <DataGrid Margin="8,8,8,8" ... />  <!-- Bottom: 8px ? -->
</Border>

<!-- Dettagli -->
<Border Margin="12,8,12,12">  <!-- Top: 8px ? -->

Risultato:

  • Spazio uniforme sopra e sotto GridSplitter
  • Visual balance migliorato

2. Rimosso Pulsante Pausa Globale

PRIMA (v2.3):

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="8"/>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="8"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Button x:Name="StartButton" Grid.Column="0" ... />
<Button x:Name="PauseBidButton" Grid.Column="2" ... />
<Button x:Name="StopButton" Grid.Column="4" ... />

ORA (v2.4):

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="*"/>
    <ColumnDefinition Width="8"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Button x:Name="StartButton" Grid.Column="0" ... />
<Button x:Name="StopButton" Grid.Column="2" ... />

Benefici:

  • UI più pulita e semplice
  • Pausa gestita solo per-asta (più preciso)
  • Meno confusione per l'utente

3. Pulsanti Pausa/Riprendi Separati

PRIMA (v2.3):

<!-- Un solo pulsante toggle -->
<Button x:Name="PauseAuctionButton" Content="? Pausa" ... />

ORA (v2.4):

<!-- Due pulsanti distinti -->
<StackPanel Orientation="Horizontal">
    <Button x:Name="PauseAuctionButton" Content="Pausa" ... />
    <Button x:Name="ResumeAuctionButton" Content="Riprendi" Margin="4,0,0,0" ... />
</StackPanel>

Comportamento:

  • Pausa (Giallo): Attivo se asta NON in pausa
  • Riprendi (Verde): Attivo se asta in pausa
  • Opacity 0.5 quando disabilitato

Vantaggi:

  • Chiaro quale azione si può fare
  • No icone (più spazio, più leggibile)
  • Stati visivi immediati

4. Colore Aste in Pausa

Nuovo DataTrigger:

<DataTrigger Binding="{Binding IsPaused}" Value="True">
    <Setter Property="Background" Value="#78350F" /> <!-- Marrone/Arancio scuro -->
    <Setter Property="Opacity" Value="0.7" />
</DataTrigger>

Palette colori griglia:

Stato Colore Codice Significato
Normale Grigio scuro #0B1220 Asta attiva standard
Selezionata Blu #1E40AF Click sulla riga
Mia puntata Verde #15803D Ultima puntata è tua
In pausa Marrone scuro #78350F Asta disabilitata

?? Modifiche Code-Behind (C#)

1. IsPaused con INotifyPropertyChanged

PRIMA (v2.3):

public bool IsPaused { get; set; } = false;

ORA (v2.4):

private bool _isPaused = false;
public bool IsPaused
{
    get => _isPaused;
    set { _isPaused = value; OnPropertyChanged(nameof(IsPaused)); }
}

Motivo:

  • Trigger XAML si attiva automaticamente
  • Riga cambia colore real-time quando metti in pausa
  • Binding reattivo

2. Due Metodi Click Separati

PRIMA (v2.3):

private void PauseAuctionButton_Click(object sender, RoutedEventArgs e)
{
    _selectedAuction.IsPaused = !_selectedAuction.IsPaused;
    // Toggle Content, Background...
}

ORA (v2.4):

private void PauseAuctionButton_Click(object sender, RoutedEventArgs e)
{
    if (_selectedAuction == null) return;
    _selectedAuction.IsPaused = true;
    UpdateAuctionButtonStates();
    LogAuction(_selectedAuction, "? Asta messa in pausa");
}

private void ResumeAuctionButton_Click(object sender, RoutedEventArgs e)
{
    if (_selectedAuction == null) return;
    _selectedAuction.IsPaused = false;
    UpdateAuctionButtonStates();
    LogAuction(_selectedAuction, "? Asta riattivata");
}

Più chiaro e manutenibile!

3. Gestione Stati Pulsanti

Nuovo metodo:

private void UpdateAuctionButtonStates()
{
    if (_selectedAuction == null) return;

    Dispatcher.BeginInvoke(() =>
    {
        var pauseBtn = FindName("PauseAuctionButton") as Button;
        var resumeBtn = FindName("ResumeAuctionButton") as Button;

        if (pauseBtn != null)
        {
            pauseBtn.IsEnabled = !_selectedAuction.IsPaused;
            pauseBtn.Opacity = _selectedAuction.IsPaused ? 0.5 : 1.0;
        }

        if (resumeBtn != null)
        {
            resumeBtn.IsEnabled = _selectedAuction.IsPaused;
            resumeBtn.Opacity = _selectedAuction.IsPaused ? 1.0 : 0.5;
        }
    });
}

Chiamato da:

  • PauseAuctionButton_Click()
  • ResumeAuctionButton_Click()
  • UpdateSelectedAuctionDetails() (al cambio selezione)

4. Rimosso UpdatePauseButtonContent

Metodo obsoleto eliminato:

// ? RIMOSSO
private void UpdatePauseButtonContent() { ... }

Era per il pulsante globale, non più necessario.


?? Workflow Utente v2.4

Pausa Asta

Prima (v2.3):

1. Seleziona asta
2. Click [? Pausa]
3. Pulsante diventa [? Riprendi]

Ora (v2.4):

1. Seleziona asta
2. Click [Pausa] (giallo)
3. [Pausa] diventa disabilitato (opacity 50%)
4. [Riprendi] diventa abilitato (verde)
5. Riga in griglia diventa MARRONE SCURO + opacity 70%

Immediato feedback visivo! ??

Riprendi Asta

1. Click [Riprendi] (verde)
2. [Riprendi] diventa disabilitato
3. [Pausa] diventa abilitato
4. Riga torna al colore normale

?? Confronto Versioni

Stati Visivi Griglia

Versione Normale Selezionata Mia puntata In pausa
v2.3 Grigio Blu Verde -
v2.4 Grigio Blu Verde Marrone ?

Controlli Pausa

Versione Globale Per-asta UI
v2.3 Pulsante Toggle 1 pulsante con icona
v2.4 Rimosso ? 2 pulsanti Pausa + Riprendi

Spaziatura

Versione Griglia bottom Dettagli top Simmetria
v2.3 12px 8px ?
v2.4 8px 8px ?

?? Benefici v2.4

1. Chiarezza UI

v2.3:

  • ? Pulsante Pausa globale + per-asta (confuso)
  • ? Toggle con cambio icona/colore
  • ? Aste in pausa non distinguibili

v2.4:

  • ? Solo pausa per-asta (chiaro)
  • ? Due pulsanti distinti (intuitivo)
  • ? Colore marrone immediato (visibile)

2. Feedback Visivo

Quando metti in pausa:

1. Riga diventa MARRONE + trasparente
2. Pulsante [Pausa] si disabilita
3. Pulsante [Riprendi] si abilita
4. Log conferma azione

Tutto in un colpo d'occhio! ???

3. Coerenza Estetica

  • Margini simmetrici ?
  • Allineamento perfetto ?
  • Palette colori distintiva ?

?? Fix Tecnici

1. IsPaused Binding

Problema:

IsPaused era property semplice, il trigger XAML non si attivava

Fix:

// Ora è observable
private bool _isPaused = false;
public bool IsPaused
{
    get => _isPaused;
    set { _isPaused = value; OnPropertyChanged(nameof(IsPaused)); }
}

2. UpdatePauseButtonContent Rimosso

Problema:

Metodo per pulsante globale causava null reference se chiamato

Fix:

// Rimosso dalla chiamata InitializeComponent()
webView.CoreWebView2InitializationCompleted += ...;
// ? UpdatePauseButtonContent(); // RIMOSSO

?? File Modificati

MainWindow.xaml

Modifiche:

  1. Border griglia: Margin="12,0,12,0" ? Margin="12,0,12,8"
  2. DataGrid: Margin="8,8,8,12" ? Margin="8,8,8,8"
  3. Rimosso <Button x:Name="PauseBidButton" ... /> globale
  4. Grid controlli: 5 colonne ? 3 colonne
  5. Aggiunto <DataTrigger Binding="{Binding IsPaused}" Value="True"> con colore #78350F
  6. Header dettagli: 1 pulsante ? 2 pulsanti
  7. Pulsanti: Content="? Pausa" ? Content="Pausa" (senza icone)

Righe modificate: ~30

MainWindow.xaml.cs

Modifiche:

  1. IsPaused: Da property semplice ? Observable property con backing field
  2. PauseAuctionButton_Click: Da toggle ? Set true
  3. Aggiunto ResumeAuctionButton_Click: Set false
  4. Aggiunto UpdateAuctionButtonStates(): Gestisce enable/opacity
  5. UpdateSelectedAuctionDetails: Usa UpdateAuctionButtonStates()
  6. Rimosso UpdatePauseButtonContent()
  7. Constructor: Rimossa chiamata UpdatePauseButtonContent()

Righe modificate: ~60


? Testing

Build

? Compilazione: SUCCESS
? Errori: 0
? Warning: 0

Funzionalità da Testare

  • Click [Pausa] ? Riga diventa marrone + opacity 70%
  • Click [Pausa] ? Pulsante si disabilita
  • Click [Pausa] ? [Riprendi] si abilita
  • Click [Riprendi] ? Riga torna normale
  • Click [Riprendi] ? [Pausa] si abilita
  • Asta in pausa viene skippata nel loop
  • Margini simmetrici griglia/dettagli

?? Come Testare

Test Pausa Visiva

1. Apri AutoBidder
2. Vai su Multi-Asta (default)
3. Aggiungi 3 aste ai preferiti
4. Avvia monitoraggio
5. Click su un'asta
6. Click [Pausa]
7. ? Verifica riga diventa MARRONE
8. ? Verifica [Pausa] disabilitato (50% opacity)
9. ? Verifica [Riprendi] abilitato (100% opacity)
10. Click [Riprendi]
11. ? Verifica riga torna normale

Test Funzionale Pausa

1. Pausa un'asta con timer basso (es: 2s)
2. ? Verifica nel log: "? Asta messa in pausa"
3. ? Verifica loop skippa quell'asta
4. ? Verifica altre aste continuano
5. Riprendi l'asta
6. ? Verifica nel log: "? Asta riattivata"
7. ? Verifica loop riprende a processarla

?? Riepilogo Colori UI

Palette Griglia v2.4

Stato Background Opacity Font Weight
Normale #0B1220 1.0 Normal
Alternato #081016 1.0 Normal
Selezionata #1E40AF 1.0 Normal
Mia puntata #15803D 1.0 Bold
In pausa #78350F 0.7 Normal

Palette Pulsanti

Pulsante Colore Codice Stato
Pausa Giallo #F59E0B Attivo se asta NON pausa
Riprendi Verde #16A34A Attivo se asta pausa
Disabilitato - opacity 0.5 Grigio out

?? Conclusione v2.4

Obiettivi Raggiunti

? UI Pulita

  • Rimosso pulsante globale confuso
  • Margini perfettamente simmetrici
  • Icone rimosse (più spazio)

? Feedback Visivo Immediato

  • Colore marrone per aste in pausa
  • Opacity ridotta per disabilitato
  • Stati pulsanti chiari

? Semplicità

  • Due pulsanti distinti (no toggle)
  • Azioni chiare (Pausa vs Riprendi)
  • Comportamento prevedibile

Progressione Versioni

v2.3:

  • ? Gestione per-asta
  • ? Reset per-asta
  • ? Evidenziazione verde
  • ? Pausa globale ancora presente
  • ? Toggle con icone
  • ? Aste in pausa non visibili

v2.4:

  • ? Tutto di v2.3
  • ? Solo pausa per-asta ?
  • ? Due pulsanti separati ?
  • ? Colore marrone pausa ?
  • ? Margini simmetrici ?
  • ? Niente icone ?

?? Prossimi Passi

Immediate

  1. Test completo pausa/riprendi
  2. Verifica colori su diversi monitor
  3. Test con 10+ aste

Future v2.5

  • Salvataggio stato pausa
  • Shortcuts tastiera (P = Pausa, R = Riprendi)
  • Pausa multipla (checkbox per ogni riga)
  • Statistiche aste in pausa

AutoBidder v2.4 - UI Refinements Complete
Clean, Clear, Immediate! ???