143 lines
4.7 KiB
C#
143 lines
4.7 KiB
C#
|
using GtaVUsersInfo.Helpers;
|
|||
|
using Newtonsoft.Json;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Drawing;
|
|||
|
using System.IO;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace GtaVUsersInfo.Sources
|
|||
|
{
|
|||
|
[Serializable]
|
|||
|
public class FontSettings
|
|||
|
{
|
|||
|
public string FontFamily { get; set; }
|
|||
|
public float FontSize { get; set; }
|
|||
|
public FontStyle FontStyle { get; set; }
|
|||
|
public Color FontColor { get; set; }
|
|||
|
private static List<Control> DTControls { get; set; }
|
|||
|
|
|||
|
public FontSettings() { }
|
|||
|
|
|||
|
public FontSettings(Font font, Color color)
|
|||
|
{
|
|||
|
FontFamily = font.FontFamily.Name;
|
|||
|
FontSize = font.Size;
|
|||
|
FontStyle = font.Style;
|
|||
|
FontColor = color;
|
|||
|
}
|
|||
|
|
|||
|
public FontSettings(Font font, Color color, List<Control> controls)
|
|||
|
{
|
|||
|
FontFamily = font.FontFamily.Name;
|
|||
|
FontSize = font.Size;
|
|||
|
FontStyle = font.Style;
|
|||
|
FontColor = color;
|
|||
|
DTControls = controls;
|
|||
|
}
|
|||
|
|
|||
|
public void FontSettingsEdit(Font font)
|
|||
|
{
|
|||
|
FontFamily = font.FontFamily.Name;
|
|||
|
FontSize = font.Size;
|
|||
|
FontStyle = font.Style;
|
|||
|
}
|
|||
|
|
|||
|
public void FontSettingsEdit(Color color)
|
|||
|
{
|
|||
|
FontColor = color;
|
|||
|
}
|
|||
|
|
|||
|
public void FontSettingsEdit(List<Control> controls)
|
|||
|
{
|
|||
|
DTControls = controls;
|
|||
|
}
|
|||
|
|
|||
|
public static void ChangeFontInControls(Control parent, FontSettings fontSettings)
|
|||
|
{
|
|||
|
Font font = CreateFontFromSettings(fontSettings);
|
|||
|
Color color = fontSettings.FontColor;
|
|||
|
|
|||
|
foreach (Control control in parent.Controls)
|
|||
|
{
|
|||
|
if (DTControls.Contains(control))
|
|||
|
{
|
|||
|
continue;
|
|||
|
}
|
|||
|
|
|||
|
if (control.Parent is FlowLayoutPanel)
|
|||
|
{
|
|||
|
int newWidth = (int)(int.Parse(Resources.CarControlWidth) * (font.Size / 11));
|
|||
|
int newHeight = (int)(int.Parse(Resources.CarControlHeight) * (font.Size / 11));
|
|||
|
|
|||
|
control.Size = new Size(newWidth, newHeight);
|
|||
|
}
|
|||
|
|
|||
|
if (control is TextBox || control is Button)
|
|||
|
{
|
|||
|
control.Font = font;
|
|||
|
control.ForeColor = color;
|
|||
|
}
|
|||
|
else if (control is Label)
|
|||
|
{
|
|||
|
control.Font = font.Size >= 8 ? new Font(font.FontFamily, font.Size - 2) : new Font(font.FontFamily, 8);
|
|||
|
control.ForeColor = color;
|
|||
|
}
|
|||
|
else if (control is MenuStrip)
|
|||
|
{
|
|||
|
control.Font = font.Size >= 8 ? new Font(font.FontFamily, font.Size - 1) : new Font(font.FontFamily, 8);
|
|||
|
control.ForeColor = color;
|
|||
|
}
|
|||
|
if (control.HasChildren)
|
|||
|
{
|
|||
|
ChangeFontInControls(control, fontSettings);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static Font CreateFontFromSettings(FontSettings settings)
|
|||
|
{
|
|||
|
return new Font(settings.FontFamily, settings.FontSize, settings.FontStyle);
|
|||
|
}
|
|||
|
|
|||
|
public static void SaveFontSettings(FontSettings fontSettings)
|
|||
|
{
|
|||
|
string json = JsonConvert.SerializeObject(fontSettings, Formatting.Indented);
|
|||
|
|
|||
|
if (!Directory.Exists(Path.GetDirectoryName(Resources.fontSettingsJsonPath)))
|
|||
|
{
|
|||
|
Directory.CreateDirectory(Path.GetDirectoryName(Resources.fontSettingsJsonPath));
|
|||
|
}
|
|||
|
|
|||
|
File.WriteAllText(Resources.fontSettingsJsonPath, json);
|
|||
|
}
|
|||
|
|
|||
|
public static FontSettings LoadFontSettings()
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
string json = File.ReadAllText(Resources.fontSettingsJsonPath);
|
|||
|
return JsonConvert.DeserializeObject<FontSettings>(json);
|
|||
|
}
|
|||
|
catch (FileNotFoundException)
|
|||
|
{
|
|||
|
Console.WriteLine($"Файл со стилями не найден: {Resources.fontSettingsJsonPath}");
|
|||
|
return null;
|
|||
|
}
|
|||
|
catch (JsonException ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Ошибка при десериализации JSON стилей: {ex.Message}");
|
|||
|
return null;
|
|||
|
}
|
|||
|
catch (Exception ex)
|
|||
|
{
|
|||
|
Console.WriteLine($"Произошла неожиданная ошибка при открытии файла со стилями: {ex.Message}");
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|