Ottimizzazione RAM, UI e sistema di timing aste
- Ridotto consumo RAM: limiti log, pulizia e compattazione dati aste, timer periodico di cleanup - UI più fluida: cache locale aste, throttling aggiornamenti, refresh log solo se necessario - Nuovo sistema Ticker Loop: timing configurabile, strategie solo vicino alla scadenza, feedback puntate tardive - Migliorato layout e splitter, log visivo, gestione cache HTML - Aggiornata UI impostazioni e fix vari per performance e thread-safety
This commit is contained in:
@@ -208,6 +208,68 @@
|
||||
background: rgba(239, 68, 68, 0.15);
|
||||
}
|
||||
|
||||
/* ═══════════════════════════════════════════════════════════════════
|
||||
LOG BOX - SCROLL FISSO
|
||||
═══════════════════════════════════════════════════════════════════ */
|
||||
|
||||
.log-box {
|
||||
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.4;
|
||||
padding: 0.5rem;
|
||||
height: 100%; /* Usa altezza dal pannello */
|
||||
overflow-y: auto; /* Scroll verticale */
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.log-box-compact {
|
||||
font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.4;
|
||||
padding: 0.5rem;
|
||||
max-height: 100%; /* Non superare il contenitore */
|
||||
overflow-y: auto; /* Scroll verticale */
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.log-entry {
|
||||
padding: 0.25rem 0.5rem;
|
||||
margin-bottom: 0.15rem;
|
||||
border-radius: 4px;
|
||||
word-wrap: break-word;
|
||||
transition: background 0.1s ease;
|
||||
}
|
||||
|
||||
.log-entry:hover {
|
||||
background: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
.log-entry-error {
|
||||
color: #f87171;
|
||||
background: rgba(239, 68, 68, 0.1);
|
||||
border-left: 3px solid #ef4444;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
.log-entry-warning {
|
||||
color: #fbbf24;
|
||||
background: rgba(245, 158, 11, 0.1);
|
||||
border-left: 3px solid #f59e0b;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
.log-entry-success {
|
||||
color: #4ade80;
|
||||
background: rgba(34, 197, 94, 0.1);
|
||||
border-left: 3px solid #22c55e;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
.log-entry-debug {
|
||||
color: #60a5fa;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
/* ═══════════════════════════════════════════════════════════════════
|
||||
LAYOUT CON SPLITTER TRASCINABILI
|
||||
═══════════════════════════════════════════════════════════════════ */
|
||||
@@ -220,34 +282,38 @@
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
gap: 0; /* IMPORTANTE: nessun gap tra toolbar e content */
|
||||
}
|
||||
|
||||
/* Area contenuto principale */
|
||||
.main-content-area {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
flex: 1 1 auto; /* Cresce e si riduce */
|
||||
min-height: 0; /* IMPORTANTE per flex */
|
||||
overflow: hidden;
|
||||
gap: 0;
|
||||
gap: 0; /* IMPORTANTE: nessun gap, gli splitter gestiscono lo spazio */
|
||||
}
|
||||
|
||||
/* Riga superiore (Aste + Log) */
|
||||
.top-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex: 1;
|
||||
min-height: 150px;
|
||||
flex: 1 1 auto; /* Cresce e si riduce - NON percentuale fissa */
|
||||
min-height: 200px; /* Altezza minima */
|
||||
overflow: hidden;
|
||||
gap: 0;
|
||||
gap: 0; /* IMPORTANTE: nessun gap, gutter gestisce lo spazio */
|
||||
}
|
||||
|
||||
/* Riga inferiore (Dettagli) */
|
||||
.bottom-row {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 80px;
|
||||
flex: 0 0 auto; /* NON cresce automaticamente */
|
||||
height: 300px; /* Altezza iniziale fissa */
|
||||
min-height: 150px; /* Altezza minima */
|
||||
overflow: hidden;
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
/* Pannello generico */
|
||||
@@ -259,33 +325,55 @@
|
||||
border-radius: var(--radius-md);
|
||||
overflow: hidden;
|
||||
box-sizing: border-box;
|
||||
height: 100%; /* IMPORTANTE: altezza fissa dal contenitore */
|
||||
position: relative; /* Per z-index */
|
||||
}
|
||||
|
||||
/* IMPORTANTE: Previeni collasso dei bordi */
|
||||
.panel::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
/* Pannello Aste */
|
||||
.panel-auctions {
|
||||
flex: 1;
|
||||
min-width: 200px;
|
||||
flex: 1 1 auto; /* Cresce per riempire lo spazio */
|
||||
min-width: 300px;
|
||||
height: 100%; /* Usa tutta l'altezza del contenitore */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Pannello Log */
|
||||
.panel-log {
|
||||
flex: 0 0 280px;
|
||||
min-width: 150px;
|
||||
max-width: 450px;
|
||||
flex: 0 0 auto; /* NON cresce/riduce automaticamente */
|
||||
width: 320px; /* Larghezza fissa iniziale */
|
||||
min-width: 200px;
|
||||
max-width: 500px;
|
||||
height: 100%; /* Usa tutta l'altezza del contenitore */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Pannello Dettagli */
|
||||
.panel-details {
|
||||
flex: 1;
|
||||
min-height: 80px;
|
||||
overflow: auto;
|
||||
flex: 1 1 auto; /* Cresce per riempire */
|
||||
min-height: 150px;
|
||||
height: 100%; /* Usa tutta l'altezza del contenitore */
|
||||
overflow: hidden; /* Il contenitore non scrolla */
|
||||
}
|
||||
|
||||
/* Gutter/Splitter */
|
||||
.gutter {
|
||||
background: rgba(255, 255, 255, 0.03);
|
||||
flex-shrink: 0;
|
||||
flex-shrink: 0; /* NON si riduce mai */
|
||||
flex-grow: 0; /* NON cresce mai */
|
||||
transition: background 0.15s ease;
|
||||
z-index: 10; /* Sopra i pannelli */
|
||||
}
|
||||
|
||||
.gutter:hover {
|
||||
@@ -299,11 +387,15 @@
|
||||
.gutter-vertical {
|
||||
width: 6px;
|
||||
cursor: col-resize;
|
||||
min-width: 6px; /* Larghezza fissa */
|
||||
max-width: 6px;
|
||||
}
|
||||
|
||||
.gutter-horizontal {
|
||||
height: 6px;
|
||||
cursor: row-resize;
|
||||
min-height: 6px; /* Altezza fissa */
|
||||
max-height: 6px;
|
||||
}
|
||||
|
||||
/* Header pannello */
|
||||
@@ -327,15 +419,47 @@
|
||||
|
||||
.panel-content {
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
min-height: 0;
|
||||
overflow-y: auto; /* Scroll verticale */
|
||||
overflow-x: hidden;
|
||||
min-height: 0; /* Importante per flex */
|
||||
max-height: 100%; /* Non superare il pannello */
|
||||
}
|
||||
|
||||
/* Contenuto dettagli */
|
||||
.auction-details-content {
|
||||
padding: 0.5rem;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden; /* Il contenitore non scrolla */
|
||||
}
|
||||
|
||||
/* Tab content deve scrollare */
|
||||
.tab-content {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
min-height: 0;
|
||||
display: flex; /* IMPORTANTE per i tab-pane */
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tab-pane {
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
display: none; /* Bootstrap lo gestisce con show active */
|
||||
}
|
||||
|
||||
.tab-pane.show.active {
|
||||
display: flex; /* Quando attivo diventa flex */
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.tab-panel-content {
|
||||
flex: 1; /* Riempie il tab-pane */
|
||||
overflow-y: auto; /* Scroll per il contenuto dei tab */
|
||||
overflow-x: hidden;
|
||||
padding: 0.5rem;
|
||||
min-height: 0; /* IMPORTANTE per flex */
|
||||
}
|
||||
|
||||
.details-header {
|
||||
|
||||
Reference in New Issue
Block a user