Modernizzazione UI con controlli e tema scuro
- Introdotti nuovi controlli moderni (es. ModernButton, ModernDataGridView). - Aggiunto il tema scuro con colori, font e spaziature uniformi. - Aggiornati `Main.Designer.cs` e `Main.cs` per utilizzare i nuovi controlli. - Rimossi controlli e metodi obsoleti (es. ProgressDialog). - Migliorati layout, dimensioni e testi per una migliore usabilità. - Aggiunti metodi helper per configurazioni rapide nei controlli. - Implementato design modulare per una maggiore manutenibilità.
This commit is contained in:
@@ -200,6 +200,31 @@
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UI\Controls\ModernButton.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernDataGridView.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernDateTimePicker.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernLabel.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernPanel.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernProgressBar.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernTabControl.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\Controls\ModernTextBox.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="UI\ModernTheme.cs" />
|
||||
<EmbeddedResource Include="Main.resx">
|
||||
<DependentUpon>Main.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using BettingPredictor.UI.Controls;
|
||||
using BettingPredictor.UI;
|
||||
|
||||
namespace BettingPredictor
|
||||
{
|
||||
@@ -9,37 +12,29 @@ namespace BettingPredictor
|
||||
// Container
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
// Grafica
|
||||
private TabControl tabControl;
|
||||
// Grafica moderna
|
||||
private ModernTabControl tabControl;
|
||||
|
||||
// Horse tab
|
||||
private TabPage tabPageHorse;
|
||||
private TextBox textBoxFolderPath;
|
||||
private Button buttonBrowse;
|
||||
private Button buttonPredict; // New button for predictions
|
||||
private Button buttonImport; // New button for import
|
||||
private ProgressBar progressBarHorse;
|
||||
private Label labelStatusHorse;
|
||||
private DataGridView dataGridViewHorse;
|
||||
private ModernPanel panelHorseTop;
|
||||
private ModernTextBox textBoxFolderPath;
|
||||
private ModernButton buttonBrowse;
|
||||
private ModernButton buttonPredict;
|
||||
private ModernButton buttonImport;
|
||||
private ModernProgressBar progressBarHorse;
|
||||
private ModernLabel labelStatusHorse;
|
||||
private ModernDataGridView dataGridViewHorse;
|
||||
|
||||
// Replace the buttonLoadFootball with buttonImportFootball and add buttonDownloadFootball
|
||||
// Football tab
|
||||
private TabPage tabPageFootball;
|
||||
private DateTimePicker dateTimePicker;
|
||||
private Button buttonImportFootball;
|
||||
private Button buttonDownloadFootball;
|
||||
private DataGridView dataGridViewFootball;
|
||||
private ProgressBar progressBarFootball;
|
||||
private Label labelStatusFootball;
|
||||
|
||||
// ApiOptions class definition - rimosso GetLeagueData
|
||||
public static class ApiOptions
|
||||
{
|
||||
public const string GetLeagueFixtures = "Visualizza elenco partite alla data";
|
||||
public const string GetLeagueOdds = "Visualizza elenco quote partite";
|
||||
|
||||
public static readonly string[] AllOptions = { GetLeagueFixtures, GetLeagueOdds };
|
||||
}
|
||||
private ModernPanel panelFootballTop;
|
||||
private ModernDateTimePicker dateTimePicker;
|
||||
private ModernButton buttonImportFootball;
|
||||
private ModernButton buttonDownloadFootball;
|
||||
private ModernDataGridView dataGridViewFootball;
|
||||
private ModernProgressBar progressBarFootball;
|
||||
private ModernLabel labelStatusFootball;
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
@@ -53,308 +48,313 @@ namespace BettingPredictor
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
this.tabControl = new System.Windows.Forms.TabControl();
|
||||
|
||||
// Horse Tab
|
||||
this.tabPageHorse = new System.Windows.Forms.TabPage();
|
||||
this.textBoxFolderPath = new System.Windows.Forms.TextBox();
|
||||
this.buttonBrowse = new System.Windows.Forms.Button();
|
||||
this.buttonPredict = new System.Windows.Forms.Button(); // New button for predictions
|
||||
this.buttonImport = new System.Windows.Forms.Button(); // New button for import
|
||||
this.progressBarHorse = new System.Windows.Forms.ProgressBar();
|
||||
this.labelStatusHorse = new System.Windows.Forms.Label();
|
||||
this.dataGridViewHorse = new System.Windows.Forms.DataGridView();
|
||||
|
||||
// In the InitializeComponent method, update:
|
||||
// Football Tab
|
||||
this.tabPageFootball = new System.Windows.Forms.TabPage();
|
||||
this.dateTimePicker = new System.Windows.Forms.DateTimePicker();
|
||||
this.buttonImportFootball = new System.Windows.Forms.Button();
|
||||
this.buttonDownloadFootball = new System.Windows.Forms.Button();
|
||||
this.progressBarFootball = new System.Windows.Forms.ProgressBar();
|
||||
this.labelStatusFootball = new System.Windows.Forms.Label();
|
||||
this.dataGridViewFootball = new System.Windows.Forms.DataGridView();
|
||||
|
||||
this.tabControl.SuspendLayout();
|
||||
this.tabPageHorse.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewHorse)).BeginInit();
|
||||
this.tabPageFootball.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewFootball)).BeginInit();
|
||||
|
||||
// Form settings
|
||||
this.SuspendLayout();
|
||||
|
||||
|
||||
// Inizializza i componenti
|
||||
InitializeTabControl();
|
||||
InitializeHorseTab();
|
||||
InitializeFootballTab();
|
||||
|
||||
//
|
||||
// Main Form
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1400, 800);
|
||||
this.BackColor = ModernTheme.Colors.PrimaryBackground;
|
||||
this.Controls.Add(this.tabControl);
|
||||
this.Font = ModernTheme.Fonts.RegularFont;
|
||||
this.Name = "Main";
|
||||
this.Text = "Betting Predictor - Modern UI";
|
||||
this.StartPosition = FormStartPosition.CenterScreen;
|
||||
this.Load += new System.EventHandler(this.Main_Load);
|
||||
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
|
||||
private void InitializeTabControl()
|
||||
{
|
||||
this.tabControl = new ModernTabControl();
|
||||
this.tabPageHorse = new TabPage();
|
||||
this.tabPageFootball = new TabPage();
|
||||
|
||||
//
|
||||
// tabControl
|
||||
//
|
||||
this.tabControl.Controls.Add(this.tabPageHorse);
|
||||
this.tabControl.Controls.Add(this.tabPageFootball);
|
||||
this.tabControl.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tabControl.Location = new System.Drawing.Point(0, 0);
|
||||
this.tabControl.Dock = DockStyle.Fill;
|
||||
this.tabControl.Location = new Point(0, 0);
|
||||
this.tabControl.Name = "tabControl";
|
||||
this.tabControl.SelectedIndex = 0;
|
||||
this.tabControl.Size = new System.Drawing.Size(800, 450);
|
||||
this.tabControl.Size = new Size(1400, 800);
|
||||
this.tabControl.TabIndex = 0;
|
||||
|
||||
}
|
||||
|
||||
private void InitializeHorseTab()
|
||||
{
|
||||
// Inizializza i controlli
|
||||
this.panelHorseTop = new ModernPanel();
|
||||
this.textBoxFolderPath = new ModernTextBox();
|
||||
this.buttonBrowse = new ModernButton();
|
||||
this.buttonImport = new ModernButton();
|
||||
this.buttonPredict = new ModernButton();
|
||||
this.progressBarHorse = new ModernProgressBar();
|
||||
this.labelStatusHorse = new ModernLabel();
|
||||
this.dataGridViewHorse = new ModernDataGridView();
|
||||
|
||||
this.tabPageHorse.SuspendLayout();
|
||||
this.panelHorseTop.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewHorse)).BeginInit();
|
||||
|
||||
//
|
||||
// tabPageHorse
|
||||
//
|
||||
this.tabPageHorse.BackColor = ModernTheme.Colors.PrimaryBackground;
|
||||
this.tabPageHorse.Controls.Add(this.dataGridViewHorse);
|
||||
this.tabPageHorse.Controls.Add(this.labelStatusHorse);
|
||||
this.tabPageHorse.Controls.Add(this.progressBarHorse);
|
||||
this.tabPageHorse.Controls.Add(this.buttonPredict); // Add new button
|
||||
this.tabPageHorse.Controls.Add(this.buttonImport); // Add new button
|
||||
this.tabPageHorse.Controls.Add(this.buttonBrowse);
|
||||
this.tabPageHorse.Controls.Add(this.textBoxFolderPath);
|
||||
this.tabPageHorse.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPageHorse.Controls.Add(this.panelHorseTop);
|
||||
this.tabPageHorse.Location = new Point(4, 44);
|
||||
this.tabPageHorse.Name = "tabPageHorse";
|
||||
this.tabPageHorse.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPageHorse.Size = new System.Drawing.Size(792, 424);
|
||||
this.tabPageHorse.Padding = new Padding(ModernTheme.Spacing.Large);
|
||||
this.tabPageHorse.Size = new Size(1392, 752);
|
||||
this.tabPageHorse.TabIndex = 0;
|
||||
this.tabPageHorse.Text = "Horse";
|
||||
this.tabPageHorse.UseVisualStyleBackColor = true;
|
||||
|
||||
this.tabPageHorse.Text = "🏇 Horse Racing";
|
||||
|
||||
//
|
||||
// panelHorseTop
|
||||
//
|
||||
this.panelHorseTop.BackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
this.panelHorseTop.BorderRadius = ModernTheme.BorderRadius.Large;
|
||||
this.panelHorseTop.BorderColor = ModernTheme.Colors.BorderPrimary;
|
||||
this.panelHorseTop.BorderWidth = 1;
|
||||
this.panelHorseTop.Controls.Add(this.textBoxFolderPath);
|
||||
this.panelHorseTop.Controls.Add(this.buttonBrowse);
|
||||
this.panelHorseTop.Controls.Add(this.buttonImport);
|
||||
this.panelHorseTop.Controls.Add(this.buttonPredict);
|
||||
this.panelHorseTop.Dock = DockStyle.Top;
|
||||
this.panelHorseTop.Location = new Point(15, 15);
|
||||
this.panelHorseTop.Name = "panelHorseTop";
|
||||
this.panelHorseTop.Padding = new Padding(ModernTheme.Spacing.Medium);
|
||||
this.panelHorseTop.Size = new Size(1362, 60);
|
||||
this.panelHorseTop.TabIndex = 0;
|
||||
|
||||
//
|
||||
// textBoxFolderPath
|
||||
//
|
||||
this.textBoxFolderPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.textBoxFolderPath.Location = new System.Drawing.Point(8, 8);
|
||||
this.textBoxFolderPath.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.textBoxFolderPath.Location = new Point(10, 15);
|
||||
this.textBoxFolderPath.Name = "textBoxFolderPath";
|
||||
this.textBoxFolderPath.ReadOnly = true;
|
||||
this.textBoxFolderPath.Size = new System.Drawing.Size(510, 20);
|
||||
this.textBoxFolderPath.Size = new Size(920, 30);
|
||||
this.textBoxFolderPath.TabIndex = 0;
|
||||
|
||||
this.textBoxFolderPath.Text = "Seleziona una cartella...";
|
||||
this.textBoxFolderPath.ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
|
||||
//
|
||||
// buttonBrowse
|
||||
//
|
||||
this.buttonBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonBrowse.Location = new System.Drawing.Point(524, 6); // Moved position to make room for Predict button
|
||||
this.buttonBrowse.Size = new System.Drawing.Size(80, 23);
|
||||
this.buttonBrowse.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right)));
|
||||
this.buttonBrowse.Location = new Point(940, 15);
|
||||
this.buttonBrowse.Name = "buttonBrowse";
|
||||
this.buttonBrowse.Size = new Size(120, 30);
|
||||
this.buttonBrowse.TabIndex = 1;
|
||||
this.buttonBrowse.Text = "Sfoglia...";
|
||||
this.buttonBrowse.UseVisualStyleBackColor = true;
|
||||
this.buttonBrowse.Click += new System.EventHandler(this.buttonBrowse_Click);
|
||||
|
||||
this.buttonBrowse.Text = "📁 Sfoglia";
|
||||
this.buttonBrowse.NormalColor = ModernTheme.Colors.AccentPrimary;
|
||||
this.buttonBrowse.HoverColor = ModernTheme.Colors.AccentSecondary;
|
||||
this.buttonBrowse.Click += new EventHandler(this.buttonBrowse_Click);
|
||||
|
||||
//
|
||||
// buttonImport
|
||||
//
|
||||
this.buttonImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonImport.Location = new System.Drawing.Point(610, 6);
|
||||
this.buttonImport.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right)));
|
||||
this.buttonImport.Location = new Point(1070, 15);
|
||||
this.buttonImport.Name = "buttonImport";
|
||||
this.buttonImport.Size = new System.Drawing.Size(80, 23);
|
||||
this.buttonImport.TabIndex = 6;
|
||||
this.buttonImport.Text = "Importa";
|
||||
this.buttonImport.UseVisualStyleBackColor = true;
|
||||
this.buttonImport.Click += new System.EventHandler(this.buttonImport_Click);
|
||||
|
||||
this.buttonImport.Size = new Size(130, 30);
|
||||
this.buttonImport.TabIndex = 2;
|
||||
this.buttonImport.Text = "📥 Importa";
|
||||
this.buttonImport.NormalColor = ModernTheme.Colors.AccentSuccess;
|
||||
this.buttonImport.HoverColor = ColorTranslator.FromHtml("#6FE9D0");
|
||||
this.buttonImport.Enabled = false;
|
||||
this.buttonImport.Click += new EventHandler(this.buttonImport_Click);
|
||||
|
||||
//
|
||||
// buttonPredict
|
||||
//
|
||||
this.buttonPredict.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonPredict.Location = new System.Drawing.Point(696, 6);
|
||||
this.buttonPredict.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right)));
|
||||
this.buttonPredict.Location = new Point(1210, 15);
|
||||
this.buttonPredict.Name = "buttonPredict";
|
||||
this.buttonPredict.Size = new System.Drawing.Size(80, 23);
|
||||
this.buttonPredict.TabIndex = 5;
|
||||
this.buttonPredict.Text = "Predici";
|
||||
this.buttonPredict.UseVisualStyleBackColor = true;
|
||||
this.buttonPredict.Click += new System.EventHandler(this.buttonPredict_Click);
|
||||
|
||||
this.buttonPredict.Size = new Size(130, 30);
|
||||
this.buttonPredict.TabIndex = 3;
|
||||
this.buttonPredict.Text = "🎯 Predici";
|
||||
this.buttonPredict.NormalColor = ModernTheme.Colors.AccentWarning;
|
||||
this.buttonPredict.HoverColor = ColorTranslator.FromHtml("#E8B198");
|
||||
this.buttonPredict.Click += new EventHandler(this.buttonPredict_Click);
|
||||
|
||||
//
|
||||
// progressBarHorse
|
||||
//
|
||||
this.progressBarHorse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.progressBarHorse.Location = new System.Drawing.Point(8, 34);
|
||||
this.progressBarHorse.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.progressBarHorse.Location = new Point(15, 85);
|
||||
this.progressBarHorse.Name = "progressBarHorse";
|
||||
this.progressBarHorse.Size = new System.Drawing.Size(762, 20);
|
||||
this.progressBarHorse.TabIndex = 2;
|
||||
|
||||
this.progressBarHorse.Size = new Size(1362, 6);
|
||||
this.progressBarHorse.TabIndex = 1;
|
||||
|
||||
//
|
||||
// labelStatusHorse
|
||||
//
|
||||
this.labelStatusHorse.AutoSize = true;
|
||||
this.labelStatusHorse.Location = new System.Drawing.Point(8, 57);
|
||||
this.labelStatusHorse.ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
this.labelStatusHorse.Font = ModernTheme.Fonts.RegularFont;
|
||||
this.labelStatusHorse.Location = new Point(15, 100);
|
||||
this.labelStatusHorse.Name = "labelStatusHorse";
|
||||
this.labelStatusHorse.Size = new System.Drawing.Size(38, 13);
|
||||
this.labelStatusHorse.TabIndex = 3;
|
||||
this.labelStatusHorse.Size = new Size(38, 13);
|
||||
this.labelStatusHorse.TabIndex = 2;
|
||||
this.labelStatusHorse.Text = "Pronto";
|
||||
|
||||
this.labelStatusHorse.BackColor = Color.Transparent;
|
||||
|
||||
//
|
||||
// dataGridViewHorse
|
||||
//
|
||||
this.dataGridViewHorse.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.dataGridViewHorse.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.dataGridViewHorse.Location = new System.Drawing.Point(8, 73);
|
||||
this.dataGridViewHorse.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.dataGridViewHorse.Location = new Point(15, 125);
|
||||
this.dataGridViewHorse.Name = "dataGridViewHorse";
|
||||
this.dataGridViewHorse.ReadOnly = true;
|
||||
this.dataGridViewHorse.Size = new System.Drawing.Size(762, 343);
|
||||
this.dataGridViewHorse.TabIndex = 4;
|
||||
|
||||
// Update controls add to the tab page:
|
||||
this.dataGridViewHorse.Size = new Size(1362, 612);
|
||||
this.dataGridViewHorse.TabIndex = 3;
|
||||
|
||||
this.tabPageHorse.ResumeLayout(false);
|
||||
this.tabPageHorse.PerformLayout();
|
||||
this.panelHorseTop.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewHorse)).EndInit();
|
||||
}
|
||||
|
||||
private void InitializeFootballTab()
|
||||
{
|
||||
// Inizializza i controlli
|
||||
this.panelFootballTop = new ModernPanel();
|
||||
this.dateTimePicker = new ModernDateTimePicker();
|
||||
this.buttonDownloadFootball = new ModernButton();
|
||||
this.buttonImportFootball = new ModernButton();
|
||||
this.progressBarFootball = new ModernProgressBar();
|
||||
this.labelStatusFootball = new ModernLabel();
|
||||
this.dataGridViewFootball = new ModernDataGridView();
|
||||
|
||||
this.tabPageFootball.SuspendLayout();
|
||||
this.panelFootballTop.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewFootball)).BeginInit();
|
||||
|
||||
//
|
||||
// tabPageFootball
|
||||
//
|
||||
this.tabPageFootball.BackColor = ModernTheme.Colors.PrimaryBackground;
|
||||
this.tabPageFootball.Controls.Add(this.dataGridViewFootball);
|
||||
this.tabPageFootball.Controls.Add(this.labelStatusFootball);
|
||||
this.tabPageFootball.Controls.Add(this.progressBarFootball);
|
||||
this.tabPageFootball.Controls.Add(this.buttonImportFootball);
|
||||
this.tabPageFootball.Controls.Add(this.buttonDownloadFootball);
|
||||
this.tabPageFootball.Controls.Add(this.dateTimePicker);
|
||||
this.tabPageFootball.Location = new System.Drawing.Point(4, 22);
|
||||
this.tabPageFootball.Controls.Add(this.panelFootballTop);
|
||||
this.tabPageFootball.Location = new Point(4, 44);
|
||||
this.tabPageFootball.Name = "tabPageFootball";
|
||||
this.tabPageFootball.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.tabPageFootball.Size = new System.Drawing.Size(792, 424);
|
||||
this.tabPageFootball.Padding = new Padding(ModernTheme.Spacing.Large);
|
||||
this.tabPageFootball.Size = new Size(1392, 752);
|
||||
this.tabPageFootball.TabIndex = 1;
|
||||
this.tabPageFootball.Text = "Football";
|
||||
this.tabPageFootball.UseVisualStyleBackColor = true;
|
||||
|
||||
this.tabPageFootball.Text = "⚽ Football";
|
||||
|
||||
//
|
||||
// panelFootballTop
|
||||
//
|
||||
this.panelFootballTop.BackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
this.panelFootballTop.BorderRadius = ModernTheme.BorderRadius.Large;
|
||||
this.panelFootballTop.BorderColor = ModernTheme.Colors.BorderPrimary;
|
||||
this.panelFootballTop.BorderWidth = 1;
|
||||
this.panelFootballTop.Controls.Add(this.dateTimePicker);
|
||||
this.panelFootballTop.Controls.Add(this.buttonDownloadFootball);
|
||||
this.panelFootballTop.Controls.Add(this.buttonImportFootball);
|
||||
this.panelFootballTop.Dock = DockStyle.Top;
|
||||
this.panelFootballTop.Location = new Point(15, 15);
|
||||
this.panelFootballTop.Name = "panelFootballTop";
|
||||
this.panelFootballTop.Padding = new Padding(ModernTheme.Spacing.Medium);
|
||||
this.panelFootballTop.Size = new Size(1362, 60);
|
||||
this.panelFootballTop.TabIndex = 0;
|
||||
|
||||
//
|
||||
// dateTimePicker
|
||||
//
|
||||
this.dateTimePicker.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.dateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Short;
|
||||
this.dateTimePicker.Location = new System.Drawing.Point(8, 8);
|
||||
this.dateTimePicker.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.dateTimePicker.CalendarMonthBackground = ModernTheme.Colors.TertiaryBackground;
|
||||
this.dateTimePicker.CalendarForeColor = ModernTheme.Colors.TextPrimary;
|
||||
this.dateTimePicker.CalendarTitleBackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
this.dateTimePicker.CalendarTitleForeColor = ModernTheme.Colors.TextPrimary;
|
||||
this.dateTimePicker.CalendarTrailingForeColor = ModernTheme.Colors.TextDisabled;
|
||||
this.dateTimePicker.Font = ModernTheme.Fonts.RegularFont;
|
||||
this.dateTimePicker.Location = new Point(10, 18);
|
||||
this.dateTimePicker.Name = "dateTimePicker";
|
||||
// Update dateTimePicker size to make room for two buttons
|
||||
this.dateTimePicker.Size = new System.Drawing.Size(596, 20);
|
||||
this.dateTimePicker.TabIndex = 1;
|
||||
this.dateTimePicker.Value = System.DateTime.Today;
|
||||
|
||||
// buttonDownloadFootball properties
|
||||
this.buttonDownloadFootball.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonDownloadFootball.Location = new System.Drawing.Point(610, 6);
|
||||
this.dateTimePicker.Size = new Size(1090, 25);
|
||||
this.dateTimePicker.TabIndex = 0;
|
||||
this.dateTimePicker.Value = DateTime.Today;
|
||||
|
||||
//
|
||||
// buttonDownloadFootball
|
||||
//
|
||||
this.buttonDownloadFootball.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right)));
|
||||
this.buttonDownloadFootball.Location = new Point(1110, 15);
|
||||
this.buttonDownloadFootball.Name = "buttonDownloadFootball";
|
||||
this.buttonDownloadFootball.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonDownloadFootball.TabIndex = 6;
|
||||
this.buttonDownloadFootball.Text = "Scarica";
|
||||
this.buttonDownloadFootball.UseVisualStyleBackColor = true;
|
||||
this.buttonDownloadFootball.Click += new System.EventHandler(this.buttonDownloadFootball_Click);
|
||||
|
||||
// buttonImportFootball properties (replace buttonLoadFootball)
|
||||
this.buttonImportFootball.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.buttonImportFootball.Location = new System.Drawing.Point(695, 6);
|
||||
this.buttonDownloadFootball.Size = new Size(120, 30);
|
||||
this.buttonDownloadFootball.TabIndex = 1;
|
||||
this.buttonDownloadFootball.Text = "📥 Scarica";
|
||||
this.buttonDownloadFootball.NormalColor = ModernTheme.Colors.AccentPrimary;
|
||||
this.buttonDownloadFootball.HoverColor = ModernTheme.Colors.AccentSecondary;
|
||||
this.buttonDownloadFootball.Click += new EventHandler(this.buttonDownloadFootball_Click);
|
||||
|
||||
//
|
||||
// buttonImportFootball
|
||||
//
|
||||
this.buttonImportFootball.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right)));
|
||||
this.buttonImportFootball.Location = new Point(1240, 15);
|
||||
this.buttonImportFootball.Name = "buttonImportFootball";
|
||||
this.buttonImportFootball.Size = new System.Drawing.Size(75, 23);
|
||||
this.buttonImportFootball.Size = new Size(110, 30);
|
||||
this.buttonImportFootball.TabIndex = 2;
|
||||
this.buttonImportFootball.Text = "Importa";
|
||||
this.buttonImportFootball.UseVisualStyleBackColor = true;
|
||||
this.buttonImportFootball.Click += new System.EventHandler(this.buttonImportFootball_Click);
|
||||
|
||||
this.buttonImportFootball.Text = "🔄 Importa";
|
||||
this.buttonImportFootball.NormalColor = ModernTheme.Colors.AccentSuccess;
|
||||
this.buttonImportFootball.HoverColor = ColorTranslator.FromHtml("#6FE9D0");
|
||||
this.buttonImportFootball.Click += new EventHandler(this.buttonImportFootball_Click);
|
||||
|
||||
//
|
||||
// progressBarFootball
|
||||
//
|
||||
this.progressBarFootball.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.progressBarFootball.Location = new System.Drawing.Point(8, 35);
|
||||
this.progressBarFootball.Anchor = ((AnchorStyles)(((AnchorStyles.Top | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.progressBarFootball.Location = new Point(15, 85);
|
||||
this.progressBarFootball.Name = "progressBarFootball";
|
||||
this.progressBarFootball.Size = new System.Drawing.Size(762, 20);
|
||||
this.progressBarFootball.TabIndex = 3;
|
||||
|
||||
this.progressBarFootball.Size = new Size(1362, 6);
|
||||
this.progressBarFootball.TabIndex = 1;
|
||||
|
||||
//
|
||||
// labelStatusFootball
|
||||
//
|
||||
this.labelStatusFootball.AutoSize = true;
|
||||
this.labelStatusFootball.Location = new System.Drawing.Point(8, 58);
|
||||
this.labelStatusFootball.ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
this.labelStatusFootball.Font = ModernTheme.Fonts.RegularFont;
|
||||
this.labelStatusFootball.Location = new Point(15, 100);
|
||||
this.labelStatusFootball.Name = "labelStatusFootball";
|
||||
this.labelStatusFootball.Size = new System.Drawing.Size(38, 13);
|
||||
this.labelStatusFootball.TabIndex = 4;
|
||||
this.labelStatusFootball.Size = new Size(38, 13);
|
||||
this.labelStatusFootball.TabIndex = 2;
|
||||
this.labelStatusFootball.Text = "Pronto";
|
||||
|
||||
this.labelStatusFootball.BackColor = Color.Transparent;
|
||||
|
||||
//
|
||||
// dataGridViewFootball
|
||||
//
|
||||
this.dataGridViewFootball.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
||||
| System.Windows.Forms.AnchorStyles.Left)
|
||||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.dataGridViewFootball.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
|
||||
this.dataGridViewFootball.Location = new System.Drawing.Point(8, 74);
|
||||
this.dataGridViewFootball.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) | AnchorStyles.Left) | AnchorStyles.Right)));
|
||||
this.dataGridViewFootball.Location = new Point(15, 125);
|
||||
this.dataGridViewFootball.Name = "dataGridViewFootball";
|
||||
this.dataGridViewFootball.ReadOnly = true;
|
||||
this.dataGridViewFootball.Size = new System.Drawing.Size(762, 342);
|
||||
this.dataGridViewFootball.TabIndex = 5;
|
||||
|
||||
//
|
||||
// Main
|
||||
//
|
||||
this.ClientSize = new System.Drawing.Size(800, 450);
|
||||
this.Controls.Add(this.tabControl);
|
||||
this.Name = "Main";
|
||||
this.Text = "Betting Predictor";
|
||||
this.Load += new System.EventHandler(this.Main_Load);
|
||||
this.tabControl.ResumeLayout(false);
|
||||
this.tabPageHorse.ResumeLayout(false);
|
||||
this.tabPageHorse.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewHorse)).EndInit();
|
||||
this.dataGridViewFootball.Size = new Size(1362, 612);
|
||||
this.dataGridViewFootball.TabIndex = 3;
|
||||
|
||||
this.tabPageFootball.ResumeLayout(false);
|
||||
this.tabPageFootball.PerformLayout();
|
||||
this.panelFootballTop.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)(this.dataGridViewFootball)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
}
|
||||
}
|
||||
|
||||
public partial class ProgressDialog : Form
|
||||
{
|
||||
public ProgressDialog()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
public void UpdateProgress(int currentPage, int totalPages)
|
||||
{
|
||||
progressBar.Maximum = totalPages;
|
||||
progressBar.Value = currentPage;
|
||||
labelProgress.Text = $"Scaricamento pagina {currentPage} di {totalPages}";
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.progressBar = new System.Windows.Forms.ProgressBar();
|
||||
this.labelProgress = new System.Windows.Forms.Label();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// progressBar
|
||||
//
|
||||
this.progressBar.Location = new System.Drawing.Point(12, 12);
|
||||
this.progressBar.Name = "progressBar";
|
||||
this.progressBar.Size = new System.Drawing.Size(360, 23);
|
||||
this.progressBar.TabIndex = 0;
|
||||
//
|
||||
// labelProgress
|
||||
//
|
||||
this.labelProgress.AutoSize = true;
|
||||
this.labelProgress.Location = new System.Drawing.Point(12, 38);
|
||||
this.labelProgress.Name = "labelProgress";
|
||||
this.labelProgress.Size = new System.Drawing.Size(0, 13);
|
||||
this.labelProgress.TabIndex = 1;
|
||||
//
|
||||
// ProgressDialog
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(384, 61);
|
||||
this.Controls.Add(this.labelProgress);
|
||||
this.Controls.Add(this.progressBar);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
||||
this.MaximizeBox = false;
|
||||
this.MinimizeBox = false;
|
||||
this.Name = "ProgressDialog";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
|
||||
this.Text = "Scaricamento in corso...";
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
}
|
||||
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
private ProgressBar progressBar;
|
||||
private Label labelProgress;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
using HorseRacingPredictor.Football.Manager;
|
||||
using HorseRacingPredictor.Horses;
|
||||
using HorseRacingPredictor.Horses.ML;
|
||||
using BettingPredictor.UI;
|
||||
using BettingPredictor.UI.Controls;
|
||||
using System;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
@@ -230,7 +232,7 @@ namespace BettingPredictor
|
||||
/// <summary>
|
||||
/// Formatta la griglia dei dati dei cavalli per una migliore visualizzazione
|
||||
/// </summary>
|
||||
private void FormatHorseDataGrid(DataGridView grid)
|
||||
private void FormatHorseDataGrid(ModernDataGridView grid)
|
||||
{
|
||||
if (grid.Columns.Count == 0)
|
||||
return;
|
||||
@@ -280,44 +282,9 @@ namespace BettingPredictor
|
||||
grid.Columns[columnName].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
||||
}
|
||||
|
||||
// Colora le righe in base al risultato
|
||||
grid.CellFormatting += (sender, e) =>
|
||||
{
|
||||
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
|
||||
{
|
||||
var row = grid.Rows[e.RowIndex];
|
||||
if (grid.Columns.Contains("Risultato Reale") && row.Cells["Risultato Reale"].Value != null)
|
||||
{
|
||||
string resultStr = row.Cells["Risultato Reale"].Value.ToString();
|
||||
if (int.TryParse(resultStr, out int result))
|
||||
{
|
||||
if (result == 1)
|
||||
row.DefaultCellStyle.BackColor = System.Drawing.Color.LightGreen;
|
||||
else if (result <= 3)
|
||||
row.DefaultCellStyle.BackColor = System.Drawing.Color.LightYellow;
|
||||
}
|
||||
}
|
||||
if (grid.Columns.Contains("Risultato Reale") && grid.Columns.Contains("Posizione Prevista"))
|
||||
{
|
||||
var realResultCell = row.Cells["Risultato Reale"];
|
||||
var predictedCell = row.Cells["Posizione Prevista"];
|
||||
if (realResultCell.Value != null && predictedCell.Value != null)
|
||||
{
|
||||
if (int.TryParse(realResultCell.Value.ToString(), out int realPos) &&
|
||||
float.TryParse(predictedCell.Value.ToString(), out float predictedPos))
|
||||
{
|
||||
if (Math.Abs(realPos - predictedPos) <= 0.5)
|
||||
{
|
||||
predictedCell.Style.BackColor = System.Drawing.Color.LightGreen;
|
||||
predictedCell.Style.ForeColor = System.Drawing.Color.DarkGreen;
|
||||
predictedCell.Style.Font = new System.Drawing.Font(grid.Font, System.Drawing.FontStyle.Bold);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Usa il metodo della griglia moderna per evidenziare i vincitori
|
||||
grid.HighlightWinnerRows();
|
||||
|
||||
// Abilita il riordino delle colonne
|
||||
grid.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
|
||||
grid.AllowUserToOrderColumns = true;
|
||||
@@ -382,7 +349,7 @@ namespace BettingPredictor
|
||||
/// <summary>
|
||||
/// Nuovo metodo per gestire l'importazione dei dati calcistici
|
||||
/// </summary>
|
||||
private async Task ImportFootballDataAsync(DataGridView dataGridViewFootball)
|
||||
private async Task ImportFootballDataAsync(ModernDataGridView dataGridViewFootball)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -442,7 +409,7 @@ namespace BettingPredictor
|
||||
/// <summary>
|
||||
/// Metodo aggiornato per il processo completo (scaricamento + importazione)
|
||||
/// </summary>
|
||||
private async Task ProcessFootballDataAsync(DateTime selectedDate, DataGridView dataGridViewFootball)
|
||||
private async Task ProcessFootballDataAsync(DateTime selectedDate, ModernDataGridView dataGridViewFootball)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -468,7 +435,7 @@ namespace BettingPredictor
|
||||
/// <summary>
|
||||
/// Formatta la griglia dei dati calcistici per una migliore visualizzazione
|
||||
/// </summary>
|
||||
private void FormatFootballDataGrid(DataGridView grid)
|
||||
private void FormatFootballDataGrid(ModernDataGridView grid)
|
||||
{
|
||||
if (grid.Columns.Count == 0)
|
||||
return;
|
||||
@@ -505,21 +472,6 @@ namespace BettingPredictor
|
||||
grid.Columns[columnName].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
|
||||
}
|
||||
|
||||
// Colora le righe in base al risultato della previsione
|
||||
grid.CellFormatting += (sender, e) =>
|
||||
{
|
||||
if (e.RowIndex >= 0 && grid.Columns.Contains("Risultato") && e.ColumnIndex >= 0)
|
||||
{
|
||||
var resultCell = grid.Rows[e.RowIndex].Cells["Risultato"];
|
||||
if (resultCell.Value != null)
|
||||
{
|
||||
// Se la previsione è corretta, colora di verde
|
||||
if (Convert.ToInt32(resultCell.Value) == 1)
|
||||
grid.Rows[e.RowIndex].DefaultCellStyle.BackColor = System.Drawing.Color.LightGreen;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Abilita il riordino delle colonne
|
||||
grid.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
|
||||
grid.AllowUserToOrderColumns = true;
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Pulsante moderno con tema scuro e effetti hover
|
||||
/// </summary>
|
||||
public class ModernButton : Button
|
||||
{
|
||||
private bool isHovering = false;
|
||||
private Color normalColor = ModernTheme.Colors.AccentPrimary;
|
||||
private Color hoverColor = ModernTheme.Colors.AccentSecondary;
|
||||
private int borderRadius = ModernTheme.BorderRadius.Medium;
|
||||
|
||||
public ModernButton()
|
||||
{
|
||||
// Configurazione base
|
||||
FlatStyle = FlatStyle.Flat;
|
||||
FlatAppearance.BorderSize = 0;
|
||||
BackColor = normalColor;
|
||||
ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
Font = ModernTheme.Fonts.ButtonFont;
|
||||
Cursor = Cursors.Hand;
|
||||
Size = new Size(100, 35);
|
||||
|
||||
// Abilita il double buffering per evitare flickering
|
||||
SetStyle(ControlStyles.UserPaint |
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer, true);
|
||||
}
|
||||
|
||||
public Color NormalColor
|
||||
{
|
||||
get => normalColor;
|
||||
set
|
||||
{
|
||||
normalColor = value;
|
||||
if (!isHovering) BackColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Color HoverColor
|
||||
{
|
||||
get => hoverColor;
|
||||
set => hoverColor = value;
|
||||
}
|
||||
|
||||
public int BorderRadius
|
||||
{
|
||||
get => borderRadius;
|
||||
set
|
||||
{
|
||||
borderRadius = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnMouseEnter(EventArgs e)
|
||||
{
|
||||
base.OnMouseEnter(e);
|
||||
isHovering = true;
|
||||
BackColor = hoverColor;
|
||||
}
|
||||
|
||||
protected override void OnMouseLeave(EventArgs e)
|
||||
{
|
||||
base.OnMouseLeave(e);
|
||||
isHovering = false;
|
||||
BackColor = normalColor;
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
// Disegna il background con bordi arrotondati
|
||||
using (GraphicsPath path = GetRoundedRectangle(ClientRectangle, borderRadius))
|
||||
{
|
||||
using (SolidBrush brush = new SolidBrush(BackColor))
|
||||
{
|
||||
e.Graphics.FillPath(brush, path);
|
||||
}
|
||||
}
|
||||
|
||||
// Disegna il testo centrato
|
||||
TextRenderer.DrawText(e.Graphics, Text, Font, ClientRectangle,
|
||||
ForeColor, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
|
||||
}
|
||||
|
||||
private GraphicsPath GetRoundedRectangle(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
int diameter = radius * 2;
|
||||
|
||||
path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
|
||||
path.CloseFigure();
|
||||
|
||||
return path;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// DataGridView moderna con tema scuro
|
||||
/// </summary>
|
||||
public class ModernDataGridView : DataGridView
|
||||
{
|
||||
public ModernDataGridView()
|
||||
{
|
||||
// Configurazione base
|
||||
BackgroundColor = ModernTheme.Colors.PrimaryBackground;
|
||||
GridColor = ModernTheme.Colors.BorderPrimary;
|
||||
BorderStyle = BorderStyle.None;
|
||||
|
||||
// Colori delle celle
|
||||
DefaultCellStyle.BackColor = ModernTheme.Colors.GridRowEven;
|
||||
DefaultCellStyle.ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
DefaultCellStyle.SelectionBackColor = ModernTheme.Colors.GridSelected;
|
||||
DefaultCellStyle.SelectionForeColor = ModernTheme.Colors.TextPrimary;
|
||||
DefaultCellStyle.Font = ModernTheme.Fonts.RegularFont;
|
||||
|
||||
// Alternating row color
|
||||
AlternatingRowsDefaultCellStyle.BackColor = ModernTheme.Colors.GridRowOdd;
|
||||
AlternatingRowsDefaultCellStyle.ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
|
||||
// Header
|
||||
ColumnHeadersDefaultCellStyle.BackColor = ModernTheme.Colors.GridHeader;
|
||||
ColumnHeadersDefaultCellStyle.ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
ColumnHeadersDefaultCellStyle.Font = ModernTheme.Fonts.SubtitleFont;
|
||||
ColumnHeadersDefaultCellStyle.SelectionBackColor = ModernTheme.Colors.GridHeader;
|
||||
ColumnHeadersDefaultCellStyle.SelectionForeColor = ModernTheme.Colors.TextPrimary;
|
||||
ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
|
||||
ColumnHeadersHeight = 35;
|
||||
|
||||
// Row
|
||||
RowHeadersDefaultCellStyle.BackColor = ModernTheme.Colors.GridHeader;
|
||||
RowHeadersDefaultCellStyle.ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
RowHeadersDefaultCellStyle.SelectionBackColor = ModernTheme.Colors.GridHeader;
|
||||
RowHeadersDefaultCellStyle.SelectionForeColor = ModernTheme.Colors.TextPrimary;
|
||||
RowHeadersVisible = false;
|
||||
|
||||
// Altre impostazioni
|
||||
EnableHeadersVisualStyles = false;
|
||||
AllowUserToAddRows = false;
|
||||
AllowUserToDeleteRows = false;
|
||||
ReadOnly = true;
|
||||
SelectionMode = DataGridViewSelectionMode.FullRowSelect;
|
||||
MultiSelect = false;
|
||||
AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
|
||||
RowTemplate.Height = 30;
|
||||
|
||||
// Abilita il double buffering per evitare flickering
|
||||
DoubleBuffered = true;
|
||||
|
||||
// Eventi per l'hover effect
|
||||
CellMouseEnter += OnCellMouseEnterHandler;
|
||||
CellMouseLeave += OnCellMouseLeaveHandler;
|
||||
}
|
||||
|
||||
private void OnCellMouseEnterHandler(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (e.RowIndex >= 0)
|
||||
{
|
||||
Rows[e.RowIndex].DefaultCellStyle.BackColor = ModernTheme.Colors.GridHover;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnCellMouseLeaveHandler(object sender, DataGridViewCellEventArgs e)
|
||||
{
|
||||
if (e.RowIndex >= 0)
|
||||
{
|
||||
// Ripristina il colore originale in base all'indice della riga
|
||||
if (e.RowIndex % 2 == 0)
|
||||
Rows[e.RowIndex].DefaultCellStyle.BackColor = ModernTheme.Colors.GridRowEven;
|
||||
else
|
||||
Rows[e.RowIndex].DefaultCellStyle.BackColor = ModernTheme.Colors.GridRowOdd;
|
||||
}
|
||||
}
|
||||
|
||||
public void HighlightWinnerRows()
|
||||
{
|
||||
if (Columns.Contains("Risultato Reale"))
|
||||
{
|
||||
foreach (DataGridViewRow row in Rows)
|
||||
{
|
||||
if (row.Cells["Risultato Reale"].Value != null &&
|
||||
row.Cells["Risultato Reale"].Value.ToString() == "1")
|
||||
{
|
||||
row.DefaultCellStyle.BackColor = ModernTheme.Colors.StatusWin;
|
||||
}
|
||||
else if (row.Cells["Risultato Reale"].Value != null &&
|
||||
int.TryParse(row.Cells["Risultato Reale"].Value.ToString(), out int pos) && pos <= 3)
|
||||
{
|
||||
row.DefaultCellStyle.BackColor = ModernTheme.Colors.StatusPlace;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// DateTimePicker moderna con tema scuro
|
||||
/// Nota: Il controllo DateTimePicker di WinForms non supporta completamente il custom painting,
|
||||
/// quindi alcuni elementi potrebbero mantenere lo stile di sistema
|
||||
/// </summary>
|
||||
public class ModernDateTimePicker : DateTimePicker
|
||||
{
|
||||
public ModernDateTimePicker()
|
||||
{
|
||||
// Configurazione base
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
Format = DateTimePickerFormat.Custom;
|
||||
CustomFormat = "dd/MM/yyyy";
|
||||
|
||||
// Imposta i colori per il calendario
|
||||
CalendarMonthBackground = ModernTheme.Colors.TertiaryBackground;
|
||||
CalendarForeColor = ModernTheme.Colors.TextPrimary;
|
||||
CalendarTitleBackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
CalendarTitleForeColor = ModernTheme.Colors.TextPrimary;
|
||||
CalendarTrailingForeColor = ModernTheme.Colors.TextDisabled;
|
||||
|
||||
// Dimensioni
|
||||
Height = 30;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta il formato lungo (con ora)
|
||||
/// </summary>
|
||||
public void SetLongFormat()
|
||||
{
|
||||
CustomFormat = "dd/MM/yyyy HH:mm";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta il formato corto (solo data)
|
||||
/// </summary>
|
||||
public void SetShortFormat()
|
||||
{
|
||||
CustomFormat = "dd/MM/yyyy";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Label moderna con tema scuro e testo ben visibile
|
||||
/// </summary>
|
||||
public class ModernLabel : Label
|
||||
{
|
||||
public ModernLabel()
|
||||
{
|
||||
// Configurazione base per visibilità su sfondo scuro
|
||||
ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
BackColor = Color.Transparent;
|
||||
AutoSize = true;
|
||||
|
||||
// Abilita anti-aliasing per testo più leggibile
|
||||
SetStyle(ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.AllPaintingInWmPaint, true);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come titolo
|
||||
/// </summary>
|
||||
public void SetAsTitleLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.TitleFont;
|
||||
ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come sottotitolo
|
||||
/// </summary>
|
||||
public void SetAsSubtitleLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.SubtitleFont;
|
||||
ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come testo di stato
|
||||
/// </summary>
|
||||
public void SetAsStatusLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come testo di successo
|
||||
/// </summary>
|
||||
public void SetAsSuccessLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
ForeColor = ModernTheme.Colors.AccentSuccess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come testo di errore
|
||||
/// </summary>
|
||||
public void SetAsErrorLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
ForeColor = ModernTheme.Colors.AccentError;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Imposta lo stile del label come testo di warning
|
||||
/// </summary>
|
||||
public void SetAsWarningLabel()
|
||||
{
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
ForeColor = ModernTheme.Colors.AccentWarning;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// Panel moderno con tema scuro e bordi arrotondati
|
||||
/// </summary>
|
||||
public class ModernPanel : Panel
|
||||
{
|
||||
private int borderRadius = ModernTheme.BorderRadius.Medium;
|
||||
private Color borderColor = ModernTheme.Colors.BorderPrimary;
|
||||
private int borderWidth = 1;
|
||||
|
||||
public ModernPanel()
|
||||
{
|
||||
BackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
|
||||
// Abilita il double buffering
|
||||
SetStyle(ControlStyles.UserPaint |
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.ResizeRedraw, true);
|
||||
}
|
||||
|
||||
public int BorderRadius
|
||||
{
|
||||
get => borderRadius;
|
||||
set
|
||||
{
|
||||
borderRadius = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public Color BorderColor
|
||||
{
|
||||
get => borderColor;
|
||||
set
|
||||
{
|
||||
borderColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public int BorderWidth
|
||||
{
|
||||
get => borderWidth;
|
||||
set
|
||||
{
|
||||
borderWidth = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
// Disegna il background con bordi arrotondati
|
||||
using (GraphicsPath path = GetRoundedRectangle(ClientRectangle, borderRadius))
|
||||
{
|
||||
// Background
|
||||
using (SolidBrush brush = new SolidBrush(BackColor))
|
||||
{
|
||||
e.Graphics.FillPath(brush, path);
|
||||
}
|
||||
|
||||
// Bordo
|
||||
if (borderWidth > 0)
|
||||
{
|
||||
using (Pen pen = new Pen(borderColor, borderWidth))
|
||||
{
|
||||
e.Graphics.DrawPath(pen, path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private GraphicsPath GetRoundedRectangle(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
int diameter = radius * 2;
|
||||
|
||||
rect.Inflate(-borderWidth / 2, -borderWidth / 2);
|
||||
|
||||
path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
|
||||
path.CloseFigure();
|
||||
|
||||
return path;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// ProgressBar moderna con tema scuro e animazioni fluide
|
||||
/// </summary>
|
||||
public class ModernProgressBar : ProgressBar
|
||||
{
|
||||
public ModernProgressBar()
|
||||
{
|
||||
// Configurazione base
|
||||
SetStyle(ControlStyles.UserPaint |
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer, true);
|
||||
|
||||
Height = 6;
|
||||
BackColor = ModernTheme.Colors.TertiaryBackground;
|
||||
ForeColor = ModernTheme.Colors.AccentPrimary;
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
Rectangle rect = ClientRectangle;
|
||||
Graphics g = e.Graphics;
|
||||
|
||||
// Disegna il background
|
||||
using (SolidBrush brush = new SolidBrush(ModernTheme.Colors.TertiaryBackground))
|
||||
{
|
||||
g.FillRectangle(brush, rect);
|
||||
}
|
||||
|
||||
// Calcola la larghezza del progresso
|
||||
int progressWidth = (int)(rect.Width * ((double)Value / Maximum));
|
||||
|
||||
// Disegna la barra di progresso
|
||||
if (progressWidth > 0)
|
||||
{
|
||||
Rectangle progressRect = new Rectangle(rect.X, rect.Y, progressWidth, rect.Height);
|
||||
using (SolidBrush brush = new SolidBrush(ForeColor))
|
||||
{
|
||||
g.FillRectangle(brush, progressRect);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void SetProgressColor(Color color)
|
||||
{
|
||||
ForeColor = color;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// TabControl moderna con tema scuro
|
||||
/// </summary>
|
||||
public class ModernTabControl : TabControl
|
||||
{
|
||||
public ModernTabControl()
|
||||
{
|
||||
SetStyle(ControlStyles.UserPaint |
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer |
|
||||
ControlStyles.ResizeRedraw, true);
|
||||
|
||||
DrawMode = TabDrawMode.OwnerDrawFixed;
|
||||
SizeMode = TabSizeMode.Fixed;
|
||||
ItemSize = new Size(120, 40);
|
||||
Padding = new Point(20, 0);
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
e.Graphics.Clear(ModernTheme.Colors.PrimaryBackground);
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
// Disegna il background del tab panel
|
||||
Rectangle tabPanelRect = new Rectangle(0, ItemSize.Height, Width, Height - ItemSize.Height);
|
||||
using (SolidBrush brush = new SolidBrush(ModernTheme.Colors.SecondaryBackground))
|
||||
{
|
||||
e.Graphics.FillRectangle(brush, tabPanelRect);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnDrawItem(DrawItemEventArgs e)
|
||||
{
|
||||
Graphics g = e.Graphics;
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
// Get tab rectangle
|
||||
Rectangle tabRect = GetTabRect(e.Index);
|
||||
|
||||
bool isSelected = (e.Index == SelectedIndex);
|
||||
|
||||
// Disegna il background della tab
|
||||
Color backColor = isSelected ? ModernTheme.Colors.SecondaryBackground : ModernTheme.Colors.PrimaryBackground;
|
||||
using (SolidBrush brush = new SolidBrush(backColor))
|
||||
{
|
||||
g.FillRectangle(brush, tabRect);
|
||||
}
|
||||
|
||||
// Disegna la linea di selezione in alto
|
||||
if (isSelected)
|
||||
{
|
||||
Rectangle accentRect = new Rectangle(tabRect.X, tabRect.Y, tabRect.Width, 3);
|
||||
using (SolidBrush brush = new SolidBrush(ModernTheme.Colors.AccentPrimary))
|
||||
{
|
||||
g.FillRectangle(brush, accentRect);
|
||||
}
|
||||
}
|
||||
|
||||
// Disegna il testo della tab
|
||||
string tabText = TabPages[e.Index].Text;
|
||||
Color textColor = isSelected ? ModernTheme.Colors.TextPrimary : ModernTheme.Colors.TextSecondary;
|
||||
Font tabFont = isSelected ? ModernTheme.Fonts.SubtitleFont : ModernTheme.Fonts.RegularFont;
|
||||
|
||||
StringFormat sf = new StringFormat
|
||||
{
|
||||
Alignment = StringAlignment.Center,
|
||||
LineAlignment = StringAlignment.Center
|
||||
};
|
||||
|
||||
using (SolidBrush brush = new SolidBrush(textColor))
|
||||
{
|
||||
g.DrawString(tabText, tabFont, brush, tabRect, sf);
|
||||
}
|
||||
|
||||
// Disegna il bordo tra le tabs
|
||||
if (e.Index < TabCount - 1)
|
||||
{
|
||||
using (Pen pen = new Pen(ModernTheme.Colors.BorderPrimary, 1))
|
||||
{
|
||||
g.DrawLine(pen, tabRect.Right, tabRect.Top + 10, tabRect.Right, tabRect.Bottom - 10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnSelectedIndexChanged(EventArgs e)
|
||||
{
|
||||
base.OnSelectedIndexChanged(e);
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BettingPredictor.UI.Controls
|
||||
{
|
||||
/// <summary>
|
||||
/// TextBox moderno con tema scuro e bordi arrotondati
|
||||
/// </summary>
|
||||
public class ModernTextBox : TextBox
|
||||
{
|
||||
private Color borderColor = ModernTheme.Colors.BorderPrimary;
|
||||
private Color focusBorderColor = ModernTheme.Colors.BorderAccent;
|
||||
private bool isFocused = false;
|
||||
private int borderRadius = ModernTheme.BorderRadius.Medium;
|
||||
|
||||
public ModernTextBox()
|
||||
{
|
||||
// Configurazione base
|
||||
BorderStyle = BorderStyle.None;
|
||||
BackColor = ModernTheme.Colors.TertiaryBackground;
|
||||
ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
Font = ModernTheme.Fonts.RegularFont;
|
||||
Padding = new Padding(8, 8, 8, 8);
|
||||
|
||||
// Abilita il double buffering
|
||||
SetStyle(ControlStyles.UserPaint |
|
||||
ControlStyles.AllPaintingInWmPaint |
|
||||
ControlStyles.OptimizedDoubleBuffer, true);
|
||||
}
|
||||
|
||||
public Color BorderColor
|
||||
{
|
||||
get => borderColor;
|
||||
set
|
||||
{
|
||||
borderColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public Color FocusBorderColor
|
||||
{
|
||||
get => focusBorderColor;
|
||||
set
|
||||
{
|
||||
focusBorderColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public int BorderRadius
|
||||
{
|
||||
get => borderRadius;
|
||||
set
|
||||
{
|
||||
borderRadius = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnEnter(EventArgs e)
|
||||
{
|
||||
base.OnEnter(e);
|
||||
isFocused = true;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
protected override void OnLeave(EventArgs e)
|
||||
{
|
||||
base.OnLeave(e);
|
||||
isFocused = false;
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
protected override void OnReadOnlyChanged(EventArgs e)
|
||||
{
|
||||
base.OnReadOnlyChanged(e);
|
||||
// Cambia il colore del testo per i campi read-only
|
||||
if (ReadOnly)
|
||||
{
|
||||
ForeColor = ModernTheme.Colors.TextSecondary;
|
||||
BackColor = ModernTheme.Colors.SecondaryBackground;
|
||||
}
|
||||
else
|
||||
{
|
||||
ForeColor = ModernTheme.Colors.TextPrimary;
|
||||
BackColor = ModernTheme.Colors.TertiaryBackground;
|
||||
}
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
// Disegna il background
|
||||
using (GraphicsPath path = GetRoundedRectangle(ClientRectangle, borderRadius))
|
||||
{
|
||||
using (SolidBrush brush = new SolidBrush(BackColor))
|
||||
{
|
||||
e.Graphics.FillPath(brush, path);
|
||||
}
|
||||
|
||||
// Disegna il bordo
|
||||
Color currentBorderColor = isFocused ? focusBorderColor : borderColor;
|
||||
using (Pen pen = new Pen(currentBorderColor, 1.5f))
|
||||
{
|
||||
e.Graphics.DrawPath(pen, path);
|
||||
}
|
||||
}
|
||||
|
||||
// Disegna il testo
|
||||
if (!string.IsNullOrEmpty(Text))
|
||||
{
|
||||
TextRenderer.DrawText(e.Graphics, Text, Font,
|
||||
new Rectangle(8, 0, Width - 16, Height),
|
||||
ForeColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter);
|
||||
}
|
||||
}
|
||||
|
||||
private GraphicsPath GetRoundedRectangle(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
int diameter = radius * 2;
|
||||
|
||||
rect.Inflate(-1, -1);
|
||||
|
||||
path.AddArc(rect.X, rect.Y, diameter, diameter, 180, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Y, diameter, diameter, 270, 90);
|
||||
path.AddArc(rect.Right - diameter, rect.Bottom - diameter, diameter, diameter, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - diameter, diameter, diameter, 90, 90);
|
||||
path.CloseFigure();
|
||||
|
||||
return path;
|
||||
}
|
||||
}
|
||||
}
|
||||
74
HorseRacingPredictor/HorseRacingPredictor/UI/ModernTheme.cs
Normal file
74
HorseRacingPredictor/HorseRacingPredictor/UI/ModernTheme.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
using System.Drawing;
|
||||
|
||||
namespace BettingPredictor.UI
|
||||
{
|
||||
/// <summary>
|
||||
/// Gestione del tema scuro moderno per l'applicazione
|
||||
/// </summary>
|
||||
public static class ModernTheme
|
||||
{
|
||||
// Colori principali del tema scuro
|
||||
public static class Colors
|
||||
{
|
||||
// Background colors
|
||||
public static readonly Color PrimaryBackground = ColorTranslator.FromHtml("#1E1E1E");
|
||||
public static readonly Color SecondaryBackground = ColorTranslator.FromHtml("#252526");
|
||||
public static readonly Color TertiaryBackground = ColorTranslator.FromHtml("#2D2D30");
|
||||
public static readonly Color HoverBackground = ColorTranslator.FromHtml("#3E3E42");
|
||||
|
||||
// Accent colors
|
||||
public static readonly Color AccentPrimary = ColorTranslator.FromHtml("#007ACC");
|
||||
public static readonly Color AccentSecondary = ColorTranslator.FromHtml("#00A8E8");
|
||||
public static readonly Color AccentSuccess = ColorTranslator.FromHtml("#4EC9B0");
|
||||
public static readonly Color AccentWarning = ColorTranslator.FromHtml("#CE9178");
|
||||
public static readonly Color AccentError = ColorTranslator.FromHtml("#F48771");
|
||||
|
||||
// Text colors
|
||||
public static readonly Color TextPrimary = ColorTranslator.FromHtml("#FFFFFF");
|
||||
public static readonly Color TextSecondary = ColorTranslator.FromHtml("#CCCCCC");
|
||||
public static readonly Color TextDisabled = ColorTranslator.FromHtml("#808080");
|
||||
|
||||
// Border colors
|
||||
public static readonly Color BorderPrimary = ColorTranslator.FromHtml("#3F3F46");
|
||||
public static readonly Color BorderAccent = ColorTranslator.FromHtml("#007ACC");
|
||||
|
||||
// Grid colors
|
||||
public static readonly Color GridHeader = ColorTranslator.FromHtml("#2D2D30");
|
||||
public static readonly Color GridRowEven = ColorTranslator.FromHtml("#252526");
|
||||
public static readonly Color GridRowOdd = ColorTranslator.FromHtml("#1E1E1E");
|
||||
public static readonly Color GridSelected = ColorTranslator.FromHtml("#094771");
|
||||
public static readonly Color GridHover = ColorTranslator.FromHtml("#2A2D2E");
|
||||
|
||||
// Status colors
|
||||
public static readonly Color StatusWin = ColorTranslator.FromHtml("#4EC9B0");
|
||||
public static readonly Color StatusPlace = ColorTranslator.FromHtml("#CE9178");
|
||||
public static readonly Color StatusNormal = ColorTranslator.FromHtml("#3E3E42");
|
||||
}
|
||||
|
||||
// Font configurations
|
||||
public static class Fonts
|
||||
{
|
||||
public static readonly Font TitleFont = new Font("Segoe UI", 16F, FontStyle.Bold);
|
||||
public static readonly Font SubtitleFont = new Font("Segoe UI", 12F, FontStyle.Bold);
|
||||
public static readonly Font RegularFont = new Font("Segoe UI", 9.75F, FontStyle.Regular);
|
||||
public static readonly Font SmallFont = new Font("Segoe UI", 8.25F, FontStyle.Regular);
|
||||
public static readonly Font ButtonFont = new Font("Segoe UI", 9.75F, FontStyle.Regular);
|
||||
}
|
||||
|
||||
// Spacing and sizing
|
||||
public static class Spacing
|
||||
{
|
||||
public const int Small = 5;
|
||||
public const int Medium = 10;
|
||||
public const int Large = 15;
|
||||
public const int ExtraLarge = 20;
|
||||
}
|
||||
|
||||
public static class BorderRadius
|
||||
{
|
||||
public const int Small = 3;
|
||||
public const int Medium = 5;
|
||||
public const int Large = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user