mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
add light/dark theme with global persistence
- AppTheme.pas: новый файл, TAppTheme record + DarkTheme()/LightTheme() - FlatSlider: цвета через SetThemeColors вместо хардкода - SpectrumView: все цвета из TAppTheme (SetTheme) - SettingsForm: ApplyTheme(T) с рекурсивным обходом контролов - DeviceForm: SetTheme(T) — перекраска всех элементов включая TEdit - Settings: SaveTheme/LoadTheme в корневой секции preferences (не привязано к устройству) - MainForm: тема загружается при старте, сохраняется при изменении Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -72,6 +72,8 @@ type
|
||||
ShowWaterfall: Boolean; // True = draw waterfall on main form
|
||||
// --- Display FPS ---
|
||||
DisplayFPS: Integer; // spectrum/waterfall timer fps (1..100)
|
||||
// --- Theme ---
|
||||
LightTheme: Boolean; // False = dark (default), True = light
|
||||
// --- PA (Power Amplifier) settings ---
|
||||
PAMaxPower: Double; // максимальная выходная мощность, Вт (5..200)
|
||||
PABandCal: array[0..CFG_BAND_COUNT-1] of Double; // калибровка на диапазон 38.8..100.0
|
||||
@@ -128,6 +130,9 @@ type
|
||||
// CAT settings — не привязаны к MAC, хранятся в корне JSON (доступны до подключения)
|
||||
procedure SaveCATSettings(const G: TGlobalSettings);
|
||||
procedure LoadCATSettings(var G: TGlobalSettings);
|
||||
// Тема — глобальная настройка, не привязана к устройству
|
||||
procedure SaveTheme(ALightTheme: Boolean);
|
||||
function LoadTheme: Boolean;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@@ -413,6 +418,7 @@ begin
|
||||
G.ShowSpectrum := JB(GObj,'show_spectrum',True);
|
||||
G.ShowWaterfall := JB(GObj,'show_waterfall',True);
|
||||
G.DisplayFPS := JI(GObj,'display_fps',60);
|
||||
G.LightTheme := JB(GObj,'light_theme',False);
|
||||
// PA settings
|
||||
G.PAMaxPower := JD(GObj,'pa_max_power',100.0);
|
||||
for i := 0 to CFG_BAND_COUNT-1 do
|
||||
@@ -489,6 +495,7 @@ begin
|
||||
JW(O,'show_spectrum',G.ShowSpectrum);
|
||||
JW(O,'show_waterfall',G.ShowWaterfall);
|
||||
JW(O,'display_fps',G.DisplayFPS);
|
||||
JW(O,'light_theme',G.LightTheme);
|
||||
// PA settings
|
||||
JW(O,'pa_max_power',G.PAMaxPower);
|
||||
for i := 0 to CFG_BAND_COUNT-1 do
|
||||
@@ -621,4 +628,20 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TSettingsManager.SaveTheme(ALightTheme: Boolean);
|
||||
var O: TJSONObject;
|
||||
begin
|
||||
O := EnsureObj(FRoot, 'preferences');
|
||||
JW(O, 'light_theme', ALightTheme);
|
||||
end;
|
||||
|
||||
function TSettingsManager.LoadTheme: Boolean;
|
||||
var O: TJSONObject;
|
||||
begin
|
||||
Result := False;
|
||||
if FRoot.Find('preferences') = nil then Exit;
|
||||
O := EnsureObj(FRoot, 'preferences');
|
||||
Result := JB(O, 'light_theme', False);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user