2024-02-16 15:46:54 +01:00
|
|
|
#
|
|
|
|
/*
|
2025-03-29 10:48:38 +01:00
|
|
|
* Copyright (C) 2015, 2025
|
2024-02-16 15:46:54 +01:00
|
|
|
* Jan van Katwijk (J.vanKatwijk@gmail.com)
|
|
|
|
* Lazy Chair Computing
|
|
|
|
*
|
|
|
|
* This file is part of the Qt-DAB
|
|
|
|
*
|
|
|
|
* Qt-DAB is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* Qt-DAB is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with Qt-DAB; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
*/
|
|
|
|
#include <QSettings>
|
|
|
|
#include <QDebug>
|
|
|
|
#include <QStringList>
|
|
|
|
#include <QStringListModel>
|
|
|
|
#include <QColorDialog>
|
2025-01-27 19:41:03 +01:00
|
|
|
#include <QDir>
|
2024-02-16 15:46:54 +01:00
|
|
|
#include "dab-constants.h"
|
|
|
|
#include "config-handler.h"
|
|
|
|
#include "mapport.h"
|
|
|
|
#include "skin-handler.h"
|
|
|
|
#include "radio.h"
|
2024-03-04 14:45:33 +01:00
|
|
|
#include "position-handler.h"
|
2024-02-25 14:18:27 +01:00
|
|
|
#include "settingNames.h"
|
2024-11-09 10:53:40 +01:00
|
|
|
#include "settings-handler.h"
|
2024-03-13 19:45:53 +01:00
|
|
|
#include "audiosystem-selector.h"
|
|
|
|
|
|
|
|
#define AUDIOSELECT_BUTTON QString ("audioSelectButton")
|
|
|
|
#define FONT_BUTTON QString ("fontButton")
|
|
|
|
#define FONTCOLOR_BUTTON QString ("fontColorButton")
|
|
|
|
|
|
|
|
#define DEVICEWIDGET_BUTTON QString ("devicewidgetButton")
|
|
|
|
#define PORT_SELECTOR QString ("portSelector")
|
2024-11-24 13:08:32 +01:00
|
|
|
#define DLTEXT_BUTTON QString ("dlTextButton")
|
2024-03-13 19:45:53 +01:00
|
|
|
#define RESET_BUTTON QString ("resetButton")
|
|
|
|
#define SCHEDULE_BUTTON QString ("scheduleButton")
|
|
|
|
|
|
|
|
#define SNR_BUTTON QString ("snrButton")
|
|
|
|
#define SET_COORDINATES_BUTTON QString ("set_coordinatesButton")
|
|
|
|
#define LOAD_TABLE_BUTTON QString ("loadTableButton")
|
|
|
|
#define SKIN_BUTTON QString ("skinButton")
|
|
|
|
#define DUMP_BUTTON QString ("dumpButton")
|
2024-02-25 14:18:27 +01:00
|
|
|
|
2024-10-31 10:58:24 +01:00
|
|
|
#define PATH_BUTTON QString ("pathButton")
|
|
|
|
|
2024-11-10 12:45:48 +01:00
|
|
|
#define WHITE "#ffffff"
|
|
|
|
#define BLACK "#000000"
|
|
|
|
#define GREEN "#8ff0a4"
|
|
|
|
#define BLUE "#00ffff"
|
|
|
|
#define RED "#ff007f"
|
|
|
|
#define YELLOW "#f9f06b"
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
static struct {
|
|
|
|
QString decoderName;
|
|
|
|
int decoderKey;
|
|
|
|
} decoders [] = {
|
2024-11-24 13:08:32 +01:00
|
|
|
{"decoder_a", DECODER_1},
|
|
|
|
{"decoder_b", DECODER_2},
|
2025-08-31 20:55:36 +02:00
|
|
|
{"decoder_c", DECODER_3},
|
2024-02-16 15:46:54 +01:00
|
|
|
{"", 0}
|
|
|
|
};
|
|
|
|
|
2024-11-10 12:45:48 +01:00
|
|
|
static
|
|
|
|
int index_for_key (int key) {
|
|
|
|
for (int i = 0; decoders [i]. decoderKey != 0; i ++)
|
|
|
|
if (decoders [i]. decoderKey == key)
|
|
|
|
return i;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
configHandler::configHandler (RadioInterface *parent,
|
2024-02-25 14:18:27 +01:00
|
|
|
QSettings *settings):
|
|
|
|
myFrame (nullptr) {
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> myRadioInterface = parent;
|
|
|
|
this -> dabSettings = settings;
|
2024-02-25 14:18:27 +01:00
|
|
|
this -> setupUi (&myFrame);
|
2025-07-11 12:48:10 +02:00
|
|
|
setPositionAndSize (settings, &myFrame, CONFIG_HANDLER);
|
2024-02-25 14:18:27 +01:00
|
|
|
hide ();
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (&myFrame, &superFrame::frameClosed,
|
|
|
|
this, &configHandler::frameClosed);
|
2025-01-27 19:41:03 +01:00
|
|
|
connect (&myFrame, &superFrame::makePicture,
|
|
|
|
this, &configHandler::handle_mouseClicked);
|
2024-02-16 15:46:54 +01:00
|
|
|
// inits of checkboxes etc in the configuration widget,
|
|
|
|
// note that ONLY the GUI is set, values are not used
|
2024-11-09 10:53:40 +01:00
|
|
|
|
|
|
|
int x = value_i (dabSettings, CONFIG_HANDLER, MUTE_TIME_SETTING, 10);
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> muteTimeSetting -> setValue (x);
|
|
|
|
|
|
|
|
int fontSize =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_i (dabSettings, COLOR_SETTINGS, "fontSize", 10);
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> fontSizeSelector -> setValue (fontSize);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
x = value_i (dabSettings, CONFIG_HANDLER, SWITCH_VALUE_SETTING,
|
|
|
|
DEFAULT_SWITCHVALUE);
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> switchDelaySetting -> setValue (x);
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
x = value_i (dabSettings, CONFIG_HANDLER, SWITCH_STAY_SETTING,
|
|
|
|
10);
|
|
|
|
this -> switchStaySetting -> setValue (x);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
x = value_i ( dabSettings, CONFIG_HANDLER, SERVICE_ORDER_SETTING,
|
|
|
|
ALPHA_BASED);
|
2024-02-16 15:46:54 +01:00
|
|
|
if (x == ALPHA_BASED)
|
|
|
|
this -> orderAlfabetical -> setChecked (true);
|
|
|
|
else
|
|
|
|
if (x == ID_BASED)
|
|
|
|
this -> orderServiceIds -> setChecked (true);
|
|
|
|
else
|
|
|
|
this -> ordersubChannelIds -> setChecked (true);
|
|
|
|
serviceOrder = x;
|
|
|
|
|
|
|
|
// first row of checkboxes
|
2024-02-25 14:18:27 +01:00
|
|
|
// unused element
|
2024-11-09 10:53:40 +01:00
|
|
|
x = value_i (dabSettings, CONFIG_HANDLER, LOG_MODE, 1);
|
2024-10-14 13:12:03 +02:00
|
|
|
if (x != 0)
|
|
|
|
this -> logger_selector -> setChecked (true);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
2024-11-09 10:53:40 +01:00
|
|
|
bool b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
UTC_SELECTOR_SETTING, 0) == 1;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> utc_selector -> setChecked (b);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
ON_TOP_SETTING, 0) == 1;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> onTop -> setChecked (b);
|
|
|
|
//
|
|
|
|
// third row of checkboxes
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
CLOSE_DIRECT_SETTING, 0) != 0;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> closeDirect_selector -> setChecked (b);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
EPG_FLAG_SETTING, 0) != 0;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> epg_selector -> setChecked (b);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
LOCAL_BROWSER_SETTING, 1) != 0;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> localBrowserSelector -> setChecked (b);
|
|
|
|
//
|
2024-11-09 10:53:40 +01:00
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
// fifth row of checkboxes
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
2025-07-16 20:32:47 +02:00
|
|
|
SHOWALL_SETTING, 1) == 1;
|
2025-04-24 13:36:09 +02:00
|
|
|
this -> showAll_selector -> setChecked (b);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
SAVE_SLIDES_SETTING, 0) == 1;
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> saveSlides -> setChecked (b);
|
|
|
|
|
2024-11-09 10:53:40 +01:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
TRANSMITTER_NAMES_SETTING, 0) == 1;
|
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
S_CORRELATION_ORDER, 0) != 0;
|
2024-04-03 18:44:52 +02:00
|
|
|
this -> correlationSelector -> setChecked (b);
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER, AUDIOSERVICES_ONLY, 1);
|
2024-11-24 13:08:32 +01:00
|
|
|
this -> audioServices_only -> setChecked (b);
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER, AUTO_HTTP, 9) != 0;
|
2024-12-21 13:46:43 +01:00
|
|
|
this -> auto_http -> setChecked (b);
|
2025-01-02 09:41:23 +01:00
|
|
|
int c = value_i (dabSettings, CONFIG_HANDLER, "tiiCollisions", 0);
|
|
|
|
this -> tiiCollisions -> setValue (c);
|
2025-07-16 20:32:47 +02:00
|
|
|
b = value_i (dabSettings, CONFIG_HANDLER, TII_FILTER, 1) != 0;
|
2024-12-29 16:22:08 +01:00
|
|
|
this -> tiiFilter -> setChecked (b);
|
2024-12-21 13:46:43 +01:00
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
#ifndef __MSC_THREAD__
|
|
|
|
for (int i = 0; decoders [i]. decoderName != ""; i ++)
|
|
|
|
this -> decoderSelector -> addItem (decoders [i]. decoderName);
|
|
|
|
#else
|
|
|
|
this -> decoderSelector -> setEnabled (false);
|
|
|
|
#endif
|
2024-10-11 13:52:44 +02:00
|
|
|
|
2025-04-04 16:17:00 +02:00
|
|
|
int d = value_i (dabSettings, CONFIG_HANDLER,
|
2025-07-16 20:32:47 +02:00
|
|
|
SHOWALL_TII, 1);
|
2025-04-04 16:17:00 +02:00
|
|
|
this -> allTIISelector -> setChecked (d != 0);
|
|
|
|
|
2024-11-10 12:45:48 +01:00
|
|
|
int k = value_i (dabSettings, CONFIG_HANDLER,
|
2025-07-16 20:32:47 +02:00
|
|
|
DECODERS, DECODER_1);
|
2024-11-10 12:45:48 +01:00
|
|
|
decoderSelector -> setCurrentIndex (index_for_key (k));
|
2025-01-06 20:47:14 +01:00
|
|
|
|
2025-04-27 16:20:31 +02:00
|
|
|
int v = value_i (dabSettings, CONFIG_HANDLER, TII_DETECTOR_SETTING, 1);
|
2025-01-06 20:47:14 +01:00
|
|
|
this -> tiiSelector -> setChecked (v != 0);
|
2025-01-10 14:24:41 +01:00
|
|
|
if (v == 0) {
|
2025-01-06 20:47:14 +01:00
|
|
|
tiiCollisions -> setEnabled (false);
|
2025-01-10 14:24:41 +01:00
|
|
|
tiiThreshold_setter -> setMinimum (4);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
tiiThreshold_setter -> setMinimum (6);
|
|
|
|
|
|
|
|
v = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
TII_THRESHOLD, 12);
|
|
|
|
this -> tiiThreshold_setter -> setValue (v);
|
|
|
|
|
2024-10-11 13:52:44 +02:00
|
|
|
connect (tiiThreshold_setter, qOverload<int>(&QSpinBox::valueChanged),
|
2024-12-02 14:46:38 +01:00
|
|
|
myRadioInterface, &RadioInterface::handle_tiiThreshold);
|
2024-12-30 14:51:14 +01:00
|
|
|
connect (this, &configHandler::process_tiiCollisions,
|
|
|
|
myRadioInterface, &RadioInterface::handle_tiiCollisions);
|
|
|
|
connect (this, &configHandler::process_tiiFilter,
|
|
|
|
myRadioInterface, &RadioInterface::handle_tiiFilter);
|
2024-10-31 10:58:24 +01:00
|
|
|
connect (pathButton, &QPushButton::clicked,
|
|
|
|
this, &configHandler::handle_pathButton);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (auto_http, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-12-21 13:46:43 +01:00
|
|
|
connect (auto_http, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-12-21 13:46:43 +01:00
|
|
|
this, &configHandler::handle_auto_http);
|
2025-01-02 09:41:23 +01:00
|
|
|
connect (tiiCollisions, qOverload<int>(&QSpinBox::valueChanged),
|
2024-12-29 16:22:08 +01:00
|
|
|
this, &configHandler::handle_tiiCollisions);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (tiiFilter, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-12-29 16:22:08 +01:00
|
|
|
connect (tiiFilter, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-12-29 16:22:08 +01:00
|
|
|
this, &configHandler::handle_tiiFilter);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (tiiSelector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2025-01-06 20:47:14 +01:00
|
|
|
connect (tiiSelector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2025-01-06 20:47:14 +01:00
|
|
|
this, &configHandler::handle_tiiSelector);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-04-04 16:17:00 +02:00
|
|
|
connect (allTIISelector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
|
|
|
connect (allTIISelector, &QCheckBox::stateChanged,
|
|
|
|
#endif
|
|
|
|
this, &configHandler::handle_allTIISelector);
|
2025-01-06 20:47:14 +01:00
|
|
|
connect (this, &configHandler::process_tiiSelector,
|
|
|
|
myRadioInterface, &RadioInterface::process_tiiSelector);
|
2025-07-27 16:46:13 +02:00
|
|
|
connect (activeServices, &clickablelabel::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_activeServices);
|
2024-02-16 15:46:54 +01:00
|
|
|
set_Colors ();
|
|
|
|
}
|
|
|
|
|
|
|
|
configHandler::~configHandler () {
|
2025-07-20 19:25:14 +02:00
|
|
|
if (!myFrame. isHidden ())
|
|
|
|
storeWidgetPosition (dabSettings, &myFrame, CONFIG_HANDLER);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
2024-02-25 14:18:27 +01:00
|
|
|
void configHandler::show () {
|
|
|
|
myFrame. show ();
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::hide () {
|
|
|
|
myFrame. hide ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::isHidden () {
|
|
|
|
return myFrame. isHidden ();
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
void configHandler::setDeviceList (const QStringList &sl) {
|
|
|
|
for (auto &sle : sl)
|
|
|
|
deviceSelector -> addItem (sle);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::findDevice (const QString &dev) {
|
|
|
|
int k = deviceSelector -> findText (dev);
|
|
|
|
if (k != -1)
|
|
|
|
deviceSelector -> setCurrentIndex (k);
|
|
|
|
return k >= 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::connectDevices () {
|
2024-04-15 14:03:12 +02:00
|
|
|
connect (deviceSelector,
|
2024-10-07 19:35:30 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
|
|
|
|
&QComboBox::textActivated,
|
|
|
|
#else
|
2024-04-15 14:03:12 +02:00
|
|
|
qOverload<const QString &>(&QComboBox::activated),
|
2024-10-07 19:35:30 +02:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::doStart);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::disconnectDevices () {
|
2024-04-15 14:03:12 +02:00
|
|
|
disconnect (deviceSelector,
|
2024-10-07 19:35:30 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
|
|
|
|
qOverload<const QString &>(&QComboBox::textActivated),
|
|
|
|
#else
|
2024-04-15 14:03:12 +02:00
|
|
|
qOverload<const QString &>(&QComboBox::activated),
|
2024-10-07 19:35:30 +02:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::doStart);
|
2024-04-15 14:03:12 +02:00
|
|
|
disconnect (deviceSelector,
|
2024-10-07 19:35:30 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
|
|
|
|
qOverload<const QString &>(&QComboBox::textActivated),
|
|
|
|
#else
|
2024-04-15 14:03:12 +02:00
|
|
|
qOverload<const QString &>(&QComboBox::activated),
|
2024-10-07 19:35:30 +02:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::newDevice);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::reconnectDevices () {
|
2024-04-15 14:03:12 +02:00
|
|
|
connect (deviceSelector,
|
2024-10-07 19:35:30 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
|
|
|
|
qOverload<const QString &>(&QComboBox::textActivated),
|
|
|
|
#else
|
2024-04-15 14:03:12 +02:00
|
|
|
qOverload<const QString &>(&QComboBox::activated),
|
2024-10-07 19:35:30 +02:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::newDevice);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::set_connections () {
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (audioSelectButton, &smallPushButton::clicked,
|
|
|
|
this, &configHandler::handle_audioSelectButton);
|
|
|
|
connect (this, &configHandler::selectDecoder,
|
|
|
|
myRadioInterface, &RadioInterface::selectDecoder);
|
|
|
|
connect (this, &configHandler::set_transmitters_local,
|
|
|
|
myRadioInterface, &RadioInterface::set_transmitters_local);
|
|
|
|
|
|
|
|
connect (audioSelectButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_audioSelectButton);
|
|
|
|
connect (fontButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_fontButton);
|
|
|
|
connect (fontColorButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_fontColorButton );
|
|
|
|
connect (devicewidgetButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_devicewidgetButton);
|
|
|
|
connect (portSelector, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_portSelector);
|
|
|
|
connect (dlTextButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_dlTextButton);
|
|
|
|
connect (resetButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_resetButton);
|
|
|
|
connect (scheduleButton, &smallPushButton::rightClicked,
|
2024-09-04 09:46:23 +02:00
|
|
|
this, &configHandler::color_scheduleButton);
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (snrButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_snrButton);
|
|
|
|
connect (set_coordinatesButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_set_coordinatesButton);
|
|
|
|
connect (loadTableButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_loadTableButton);
|
|
|
|
connect (dumpButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_sourcedumpButton);
|
2024-10-31 10:58:24 +01:00
|
|
|
connect (pathButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_pathButton);
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (skinButton, &smallPushButton::rightClicked,
|
|
|
|
this, &configHandler::color_skinButton);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// real handlers
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (scheduleButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_scheduleButton);
|
|
|
|
connect (muteTimeSetting, qOverload<int>(&QSpinBox::valueChanged),
|
|
|
|
this, &configHandler::handle_muteTimeSetting);
|
|
|
|
connect (switchDelaySetting, qOverload<int>(&QSpinBox::valueChanged),
|
|
|
|
this, &configHandler::handle_switchDelaySetting);
|
2025-04-24 13:36:09 +02:00
|
|
|
connect (switchStaySetting, qOverload<int>(&QSpinBox::valueChanged),
|
|
|
|
this, &configHandler::handle_switchStaySetting);
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (orderAlfabetical, &QRadioButton::clicked,
|
|
|
|
this, &configHandler::handle_orderAlfabetical);
|
|
|
|
connect (orderServiceIds, &QRadioButton::clicked,
|
|
|
|
this, &configHandler::handle_orderServiceIds);
|
|
|
|
connect (ordersubChannelIds, &QRadioButton::clicked,
|
|
|
|
this, &configHandler::handle_ordersubChannelIds);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (fontButton, &QPushButton::clicked,
|
|
|
|
this, &configHandler::handle_fontSelect);
|
|
|
|
connect (fontColorButton, &QPushButton::clicked,
|
|
|
|
this, &configHandler::handle_fontColorSelect);
|
|
|
|
connect (fontSizeSelector, qOverload<int>(&QSpinBox::valueChanged),
|
|
|
|
this, &configHandler::handle_fontSizeSelect);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// Now the two rows with buttons
|
|
|
|
//
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (devicewidgetButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_devicewidgetButton);
|
|
|
|
connect (portSelector, &QPushButton::clicked,
|
|
|
|
this, &configHandler::handle_portSelector);
|
|
|
|
connect (dlTextButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_dlTextButton);
|
|
|
|
connect (resetButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_resetButton);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// second row
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (snrButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_snrButton);
|
|
|
|
connect (set_coordinatesButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_set_coordinatesButton );
|
|
|
|
connect (loadTableButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_loadTable);
|
2025-01-13 19:13:10 +01:00
|
|
|
loadTableButton -> setText ("refresh table");
|
2024-03-04 14:45:33 +01:00
|
|
|
// however, by default loadTable is disabled
|
2024-02-25 14:18:27 +01:00
|
|
|
loadTableButton -> setEnabled (false);
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (dumpButton, &QPushButton::clicked,
|
|
|
|
myRadioInterface, &RadioInterface::handle_sourcedumpButton);
|
|
|
|
connect (skinButton, &QPushButton::clicked,
|
|
|
|
this, &configHandler::handle_skinSelector);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// Now the checkboxes
|
|
|
|
// top line
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (audioServices_only, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-11-24 13:08:32 +01:00
|
|
|
connect (audioServices_only, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-11-24 13:08:32 +01:00
|
|
|
this, &configHandler::handle_audioServices_only);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (correlationSelector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-11-24 13:08:32 +01:00
|
|
|
connect (correlationSelector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-11-24 13:08:32 +01:00
|
|
|
myRadioInterface, &RadioInterface::handle_correlationSelector);
|
|
|
|
//
|
|
|
|
// second line
|
2024-11-09 10:53:40 +01:00
|
|
|
int upload = value_i (dabSettings, CONFIG_HANDLER,
|
|
|
|
"UPLOAD_ENABLED", 0);
|
2024-03-30 19:39:33 +01:00
|
|
|
if (upload != 0)
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (upload_selector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (upload_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_upload_selector);
|
2024-03-30 19:39:33 +01:00
|
|
|
else
|
|
|
|
upload_selector -> setEnabled (false);
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (logger_selector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (logger_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::handle_LoggerButton);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
2024-11-24 13:08:32 +01:00
|
|
|
// third line
|
2024-02-16 15:46:54 +01:00
|
|
|
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (utc_selector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (utc_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_utc_selector);
|
2024-02-25 14:18:27 +01:00
|
|
|
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (onTop, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (onTop, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_onTop);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
2024-11-24 13:08:32 +01:00
|
|
|
// fourthline
|
2024-02-16 15:46:54 +01:00
|
|
|
// here we expect the close without asking
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (epg_selector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (epg_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_epgSelector);
|
2025-03-05 16:34:15 +01:00
|
|
|
connect (localBrowserSelector,
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-03-05 16:34:15 +01:00
|
|
|
&QCheckBox::checkStateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#else
|
2025-03-05 16:34:15 +01:00
|
|
|
&QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_localBrowser);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (etiActivated_selector, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (etiActivated_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
myRadioInterface, &RadioInterface::handle_eti_activeSelector);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// fifh line
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-04-24 13:36:09 +02:00
|
|
|
connect (showAll_selector, &QCheckBox::checkStateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#else
|
2025-04-24 13:36:09 +02:00
|
|
|
connect (showAll_selector, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2025-04-24 13:36:09 +02:00
|
|
|
this, &configHandler::handle_showAll_Selector);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
2025-08-22 19:38:35 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0)
|
2025-01-18 19:28:38 +01:00
|
|
|
connect (saveSlides, &QCheckBox::checkStateChanged,
|
|
|
|
#else
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (saveSlides, &QCheckBox::stateChanged,
|
2025-01-18 19:28:38 +01:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_saveSlides);
|
2024-02-16 15:46:54 +01:00
|
|
|
//
|
|
|
|
// botton row
|
2024-04-15 14:03:12 +02:00
|
|
|
connect (decoderSelector,
|
2024-10-07 19:35:30 +02:00
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)
|
|
|
|
&QComboBox::textActivated,
|
|
|
|
#else
|
2024-04-15 14:03:12 +02:00
|
|
|
qOverload<const QString &>(&QComboBox::activated),
|
2024-10-07 19:35:30 +02:00
|
|
|
#endif
|
2024-04-14 12:47:14 +02:00
|
|
|
this, &configHandler::handle_decoderSelector);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
void configHandler::set_Colors () {
|
2024-03-13 19:45:53 +01:00
|
|
|
QString audioSelectButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
AUDIOSELECT_BUTTON + "_color", GREEN);
|
|
|
|
QString audioSelectButton_font =
|
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
|
|
|
AUDIOSELECT_BUTTON + "_font", BLACK);
|
2024-03-13 19:45:53 +01:00
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
QString fontButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
FONT_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString fontButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
FONT_BUTTON + "_color", WHITE);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString fontColorButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
FONTCOLOR_BUTTON + "_font", WHITE);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString fontColorButton_color =
|
2025-04-27 16:20:31 +02:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
FONTCOLOR_BUTTON + "_color", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString devicewidgetButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DEVICEWIDGET_BUTTON + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString devicewidgetButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DEVICEWIDGET_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString portSelector_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
PORT_SELECTOR + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString portSelector_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
PORT_SELECTOR + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString dlTextButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DLTEXT_BUTTON + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString dlTextButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DLTEXT_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString resetButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
RESET_BUTTON + "_color", RED);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString resetButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
RESET_BUTTON + "_font", WHITE);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString scheduleButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SCHEDULE_BUTTON + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString scheduleButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SCHEDULE_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString snrButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SNR_BUTTON + "_color", BLUE);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString snrButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SNR_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString set_coordinatesButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SET_COORDINATES_BUTTON + "_color", BLUE);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString set_coordinatesButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SET_COORDINATES_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString loadTableButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
LOAD_TABLE_BUTTON + "_color", RED);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString loadTableButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
LOAD_TABLE_BUTTON + "_font", WHITE);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString dumpButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DUMP_BUTTON + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString dumpButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
DUMP_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
2024-10-31 10:58:24 +01:00
|
|
|
QString pathButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
PATH_BUTTON + "_color", GREEN);
|
2024-10-31 10:58:24 +01:00
|
|
|
QString pathButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
PATH_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString skinButton_font =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SKIN_BUTTON + "_font", BLACK);
|
2024-02-16 15:46:54 +01:00
|
|
|
QString skinButton_color =
|
2024-11-09 10:53:40 +01:00
|
|
|
value_s (dabSettings, COLOR_SETTINGS,
|
2024-11-10 12:45:48 +01:00
|
|
|
SKIN_BUTTON + "_color", YELLOW);
|
2024-02-16 15:46:54 +01:00
|
|
|
|
|
|
|
QString temp = "QPushButton {background-color: %1; color: %2}";
|
|
|
|
|
2024-03-13 19:45:53 +01:00
|
|
|
this -> audioSelectButton ->
|
|
|
|
setStyleSheet (temp. arg (audioSelectButton_color,
|
|
|
|
audioSelectButton_font));
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> fontButton ->
|
|
|
|
setStyleSheet (temp. arg (fontButton_color,
|
|
|
|
fontButton_font));
|
|
|
|
|
|
|
|
this -> fontColorButton ->
|
|
|
|
setStyleSheet (temp. arg (fontColorButton_color,
|
|
|
|
fontColorButton_font));
|
|
|
|
|
|
|
|
this -> devicewidgetButton ->
|
|
|
|
setStyleSheet (temp. arg (devicewidgetButton_color,
|
|
|
|
devicewidgetButton_font));
|
|
|
|
|
|
|
|
this -> portSelector ->
|
|
|
|
setStyleSheet (temp. arg (portSelector_color,
|
|
|
|
portSelector_font));
|
|
|
|
|
|
|
|
this -> dlTextButton ->
|
|
|
|
setStyleSheet (temp. arg (dlTextButton_color,
|
|
|
|
dlTextButton_font));
|
|
|
|
|
|
|
|
this -> resetButton ->
|
|
|
|
setStyleSheet (temp. arg (resetButton_color,
|
|
|
|
resetButton_font));
|
|
|
|
|
|
|
|
this -> scheduleButton ->
|
|
|
|
setStyleSheet (temp. arg (scheduleButton_color,
|
|
|
|
scheduleButton_font));
|
|
|
|
|
|
|
|
this -> snrButton ->
|
|
|
|
setStyleSheet (temp. arg (snrButton_color,
|
|
|
|
snrButton_font));
|
|
|
|
|
|
|
|
this -> set_coordinatesButton ->
|
|
|
|
setStyleSheet (temp. arg (set_coordinatesButton_color,
|
|
|
|
set_coordinatesButton_font));
|
|
|
|
|
|
|
|
this -> loadTableButton ->
|
|
|
|
setStyleSheet (temp. arg (loadTableButton_color,
|
|
|
|
loadTableButton_font));
|
|
|
|
this -> dumpButton ->
|
|
|
|
setStyleSheet (temp. arg (dumpButton_color,
|
|
|
|
dumpButton_font));
|
2024-10-31 10:58:24 +01:00
|
|
|
this -> pathButton ->
|
|
|
|
setStyleSheet (temp. arg (pathButton_color,
|
|
|
|
pathButton_font));
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> skinButton ->
|
|
|
|
setStyleSheet (temp. arg (skinButton_color,
|
|
|
|
skinButton_font));
|
|
|
|
}
|
|
|
|
|
2024-03-13 19:45:53 +01:00
|
|
|
void configHandler::color_audioSelectButton () {
|
|
|
|
set_buttonColors (this -> audioSelectButton, AUDIOSELECT_BUTTON);
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
void configHandler::color_fontButton () {
|
|
|
|
set_buttonColors (this -> fontButton, FONT_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_fontColorButton () {
|
|
|
|
set_buttonColors (this -> fontColorButton, FONTCOLOR_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_devicewidgetButton () {
|
|
|
|
set_buttonColors (this -> devicewidgetButton, DEVICEWIDGET_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_portSelector () {
|
|
|
|
set_buttonColors (this -> portSelector, PORT_SELECTOR);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_dlTextButton () {
|
|
|
|
set_buttonColors (this -> dlTextButton, DLTEXT_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_resetButton () {
|
|
|
|
set_buttonColors (this -> resetButton, RESET_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_scheduleButton () {
|
|
|
|
set_buttonColors (this -> scheduleButton, SCHEDULE_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_snrButton () {
|
|
|
|
set_buttonColors (this -> snrButton, SNR_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_set_coordinatesButton () {
|
|
|
|
set_buttonColors (this -> set_coordinatesButton,
|
|
|
|
SET_COORDINATES_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_loadTableButton () {
|
|
|
|
set_buttonColors (this -> loadTableButton, LOAD_TABLE_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::color_sourcedumpButton () {
|
|
|
|
set_buttonColors (this -> dumpButton, DUMP_BUTTON);
|
|
|
|
}
|
|
|
|
|
2024-10-31 10:58:24 +01:00
|
|
|
void configHandler::color_pathButton () {
|
|
|
|
set_buttonColors (this -> pathButton, PATH_BUTTON);
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
void configHandler::color_skinButton () {
|
|
|
|
set_buttonColors (this -> skinButton, SKIN_BUTTON);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void configHandler::set_buttonColors (QPushButton *b,
|
|
|
|
const QString &buttonName) {
|
|
|
|
QColor baseColor;
|
|
|
|
QColor textColor;
|
|
|
|
QColor color;
|
|
|
|
|
|
|
|
color = QColorDialog::getColor (baseColor, nullptr, "baseColor");
|
|
|
|
if (!color. isValid ())
|
|
|
|
return;
|
|
|
|
baseColor = color;
|
|
|
|
color = QColorDialog::getColor (textColor, nullptr, "textColor");
|
|
|
|
if (!color. isValid ())
|
|
|
|
return;
|
|
|
|
textColor = color;
|
|
|
|
QString temp = "QPushButton {background-color: %1; color: %2}";
|
|
|
|
b -> setStyleSheet (temp. arg (baseColor. name (),
|
|
|
|
textColor. name ()));
|
|
|
|
|
|
|
|
QString buttonColor = buttonName + "_color";
|
|
|
|
QString buttonFont = buttonName + "_font";
|
2024-11-09 10:53:40 +01:00
|
|
|
QString baseColor_name = baseColor. name ();
|
|
|
|
QString textColor_name = textColor. name ();
|
|
|
|
store (dabSettings, COLOR_SETTINGS, buttonColor, baseColor_name);
|
|
|
|
store (dabSettings, COLOR_SETTINGS, buttonFont, textColor_name);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_muteTimeSetting (int newV) {
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, MUTE_TIME_SETTING, newV);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_switchDelaySetting (int newV) {
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, SWITCH_VALUE_SETTING, newV);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
void configHandler::handle_switchStaySetting (int newV) {
|
|
|
|
store (dabSettings, CONFIG_HANDLER, SWITCH_STAY_SETTING, newV);
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
void configHandler::handle_orderAlfabetical () {
|
|
|
|
set_serviceOrder (ALPHA_BASED);
|
|
|
|
serviceOrder = ALPHA_BASED;
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_orderServiceIds () {
|
|
|
|
set_serviceOrder (ID_BASED);
|
|
|
|
serviceOrder = ID_BASED;
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_ordersubChannelIds () {
|
|
|
|
set_serviceOrder (SUBCH_BASED);
|
|
|
|
serviceOrder = SUBCH_BASED;
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_portSelector () {
|
2025-04-27 16:20:31 +02:00
|
|
|
QString oldPort = value_s (dabSettings, MAP_HANDLING,
|
2024-11-09 10:53:40 +01:00
|
|
|
MAP_PORT_SETTING, "8080");
|
2024-02-25 14:18:27 +01:00
|
|
|
mapPortHandler theHandler (oldPort);
|
|
|
|
int portNumber = theHandler. QDialog::exec ();
|
2024-11-09 10:53:40 +01:00
|
|
|
if (portNumber != 0) {
|
|
|
|
QString ss = QString::number (portNumber);
|
2025-04-27 16:20:31 +02:00
|
|
|
store (dabSettings, MAP_HANDLING, MAP_PORT_SETTING, ss);
|
2024-11-09 10:53:40 +01:00
|
|
|
}
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_skinSelector () {
|
|
|
|
skinHandler theSkins;
|
|
|
|
int skinIndex = theSkins. QDialog::exec ();
|
|
|
|
QString skinName = theSkins. skins. at (skinIndex);
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, "SKIN_HANDLING", SKIN_SETTING, skinName);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_onTop (int d) {
|
|
|
|
bool onTop = false;
|
|
|
|
(void)d;
|
|
|
|
if (this -> onTop -> isChecked ())
|
|
|
|
onTop = true;
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, ON_TOP_SETTING, onTop ? 1 : 0);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_epgSelector (int x) {
|
|
|
|
(void)x;
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, EPG_FLAG_SETTING,
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> epg_selector -> isChecked () ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_localBrowser (int d) {
|
|
|
|
(void)d;
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, LOCAL_BROWSER_SETTING,
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> localBrowserSelector -> isChecked () ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
void configHandler::handle_showAll_Selector (int c) {
|
2024-02-16 15:46:54 +01:00
|
|
|
(void)c;
|
2025-07-16 20:32:47 +02:00
|
|
|
store (dabSettings, CONFIG_HANDLER, SHOWALL_SETTING,
|
2025-04-24 13:36:09 +02:00
|
|
|
this -> showAll_selector -> isChecked () ? 1 : 0);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_saveSlides (int x) {
|
|
|
|
(void)x;
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, SAVE_SLIDES_SETTING,
|
2024-02-16 15:46:54 +01:00
|
|
|
this -> saveSlides -> isChecked () ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_decoderSelector (const QString &s) {
|
|
|
|
int decoder = 0100;
|
|
|
|
for (int i = 0; decoders [i]. decoderName != ""; i ++)
|
|
|
|
if (decoders [i]. decoderName == s) {
|
|
|
|
decoder = decoders [i]. decoderKey;
|
|
|
|
selectDecoder (decoder);
|
2025-07-16 20:32:47 +02:00
|
|
|
store (dabSettings, CONFIG_HANDLER, DECODERS, decoder);
|
2024-11-10 12:45:48 +01:00
|
|
|
break;
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-03-04 14:45:33 +01:00
|
|
|
void configHandler::handle_upload_selector (int d) {
|
|
|
|
(void)d;
|
|
|
|
}
|
|
|
|
|
2024-02-25 14:18:27 +01:00
|
|
|
void configHandler::handle_utc_selector (int d) {
|
|
|
|
(void)d;
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, UTC_SELECTOR_SETTING,
|
|
|
|
utc_selector -> isChecked () ? 1 : 0);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
2024-02-25 14:18:27 +01:00
|
|
|
int configHandler::get_serviceOrder () {
|
|
|
|
return serviceOrder;
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
2024-03-04 14:45:33 +01:00
|
|
|
bool configHandler::upload_selector_active () {
|
|
|
|
return upload_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
bool configHandler::closeDirect_active () {
|
|
|
|
return closeDirect_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
bool configHandler::showAll_Selector_active () {
|
|
|
|
return showAll_selector -> isChecked ();
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
//column 2
|
|
|
|
bool configHandler::logger_active () {
|
|
|
|
return logger_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::utcSelector_active () {
|
|
|
|
return utc_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::epg_automatic_active () {
|
|
|
|
return epg_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::eti_active () {
|
|
|
|
return etiActivated_selector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::saveSliders_active () {
|
|
|
|
return saveSlides -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
bool configHandler::onTop_active () {
|
|
|
|
return onTop -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
bool configHandler::localBrowserSelector_active () {
|
|
|
|
return localBrowserSelector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline
|
|
|
|
void setButtonFont (QPushButton *b, QString text, int size) {
|
|
|
|
QFont font = b -> font ();
|
|
|
|
font. setPointSize (size);
|
|
|
|
b -> setFont (font);
|
|
|
|
b -> setText (text);
|
|
|
|
b -> update ();
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::mark_dumpButton (bool b) {
|
|
|
|
if (b)
|
|
|
|
setButtonFont (dumpButton, "writing", 12);
|
|
|
|
else
|
|
|
|
setButtonFont (dumpButton, "Raw dump", 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::mark_dlTextButton (bool b) {
|
|
|
|
if (b)
|
|
|
|
setButtonFont (dlTextButton, "writing", 12);
|
|
|
|
else
|
|
|
|
setButtonFont (dlTextButton, "dlText", 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::set_closeDirect (bool b) {
|
|
|
|
closeDirect_selector -> setChecked (b);
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::show_streamSelector (bool b) {
|
|
|
|
if (b)
|
|
|
|
streamoutSelector -> show ();
|
|
|
|
else
|
|
|
|
streamoutSelector -> hide ();
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::fill_streamTable (const QStringList &sl) {
|
2025-01-10 14:24:41 +01:00
|
|
|
for (int i = streamoutSelector -> count () - 1; i >= 0; i --)
|
|
|
|
streamoutSelector -> removeItem (i);
|
2024-02-16 15:46:54 +01:00
|
|
|
for (auto sle : sl)
|
|
|
|
streamoutSelector -> addItem (sle);
|
|
|
|
}
|
|
|
|
|
|
|
|
int configHandler::init_streamTable (const QString &s) {
|
|
|
|
int k =streamoutSelector -> findText (s);
|
|
|
|
if (k > 0)
|
|
|
|
streamoutSelector -> setCurrentIndex (k);
|
|
|
|
return k;
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::connect_streamTable () {
|
2024-04-14 12:47:14 +02:00
|
|
|
connect (streamoutSelector, qOverload<int>(&QComboBox::activated),
|
|
|
|
myRadioInterface, &RadioInterface::set_streamSelector);
|
2024-02-16 15:46:54 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
QString configHandler::currentStream () {
|
|
|
|
if (streamoutSelector -> count () == 0)
|
|
|
|
return "";
|
|
|
|
return streamoutSelector -> currentText ();
|
|
|
|
}
|
|
|
|
|
|
|
|
int configHandler::switchDelayValue () {
|
|
|
|
return switchDelaySetting -> value () * 1000;
|
|
|
|
}
|
|
|
|
|
2025-04-24 13:36:09 +02:00
|
|
|
int configHandler::switchStayValue () {
|
|
|
|
return switchStaySetting -> value () * 60000;
|
|
|
|
}
|
|
|
|
|
2024-02-16 15:46:54 +01:00
|
|
|
int configHandler::muteValue () {
|
|
|
|
return muteTimeSetting -> value ();
|
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::showLoad (float load) {
|
|
|
|
loadDisplay -> display (load);
|
|
|
|
}
|
|
|
|
|
2024-02-25 14:18:27 +01:00
|
|
|
void configHandler::enable_loadLib () {
|
|
|
|
loadTableButton -> setEnabled (true);
|
|
|
|
}
|
2024-03-13 19:45:53 +01:00
|
|
|
|
|
|
|
void configHandler::handle_audioSelectButton () {
|
|
|
|
audiosystemSelector the_selector (dabSettings);
|
|
|
|
(void)the_selector. QDialog::exec ();
|
|
|
|
}
|
|
|
|
|
2024-04-03 18:44:52 +02:00
|
|
|
bool configHandler::get_correlationSelector () {
|
|
|
|
return correlationSelector -> isChecked ();
|
|
|
|
}
|
|
|
|
|
2025-04-04 16:17:00 +02:00
|
|
|
bool configHandler::get_allTIISelector () {
|
2025-07-14 17:25:42 +02:00
|
|
|
return allTIISelector -> isChecked () ? true : false;
|
2025-04-04 16:17:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void configHandler::handle_allTIISelector (int d) {
|
|
|
|
(void)d;
|
2025-07-16 20:32:47 +02:00
|
|
|
store (dabSettings, CONFIG_HANDLER, SHOWALL_TII,
|
2025-04-04 16:17:00 +02:00
|
|
|
allTIISelector -> isChecked () ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
2024-10-11 13:52:44 +02:00
|
|
|
void configHandler::handle_tiiThreshold (int t) {
|
2024-11-09 10:53:40 +01:00
|
|
|
store (dabSettings, CONFIG_HANDLER, TII_THRESHOLD, t);
|
2024-10-11 13:52:44 +02:00
|
|
|
}
|
2024-04-03 18:44:52 +02:00
|
|
|
|
2024-10-31 10:58:24 +01:00
|
|
|
void configHandler::handle_pathButton () {
|
|
|
|
QString dir =
|
|
|
|
QFileDialog::getExistingDirectory (nullptr,
|
|
|
|
tr("Open Directory"),
|
|
|
|
QDir::homePath (),
|
|
|
|
QFileDialog::ShowDirsOnly
|
|
|
|
| QFileDialog::DontResolveSymlinks);
|
|
|
|
if (dir != "")
|
2025-01-27 19:41:03 +01:00
|
|
|
store (dabSettings, DAB_GENERAL, S_FILE_PATH, dir);
|
2024-10-31 10:58:24 +01:00
|
|
|
}
|
|
|
|
|
2024-11-24 13:08:32 +01:00
|
|
|
bool configHandler::get_audioServices_only () {
|
|
|
|
return audioServices_only -> isChecked ();
|
|
|
|
}
|
2024-12-21 13:46:43 +01:00
|
|
|
|
|
|
|
void configHandler::handle_auto_http (int state) {
|
|
|
|
uint8_t x = auto_http -> isChecked ();
|
|
|
|
(void)state;
|
|
|
|
store (dabSettings, CONFIG_HANDLER, "auto_http", x);
|
|
|
|
}
|
2024-12-27 12:39:00 +01:00
|
|
|
|
|
|
|
void configHandler::handle_audioServices_only (int state) {
|
|
|
|
uint8_t x = audioServices_only -> isChecked ();
|
|
|
|
(void)state;
|
|
|
|
store (dabSettings, CONFIG_HANDLER, "audioServices_only", x);
|
|
|
|
}
|
2024-12-29 16:22:08 +01:00
|
|
|
|
2025-01-02 09:41:23 +01:00
|
|
|
void configHandler::handle_tiiCollisions (int value) {
|
|
|
|
store (dabSettings, CONFIG_HANDLER, "tiiCollisions", value);
|
|
|
|
process_tiiCollisions (value);
|
2024-12-29 16:22:08 +01:00
|
|
|
}
|
|
|
|
|
2024-12-30 14:51:14 +01:00
|
|
|
void configHandler::handle_tiiFilter (int state) {
|
|
|
|
bool x = tiiFilter -> isChecked ();
|
|
|
|
(void)state;
|
2025-07-16 20:32:47 +02:00
|
|
|
store (dabSettings, CONFIG_HANDLER, TII_FILTER, x ? 1 : 0);
|
2024-12-30 14:51:14 +01:00
|
|
|
process_tiiFilter (x);
|
2024-12-29 16:22:08 +01:00
|
|
|
}
|
|
|
|
|
2025-01-06 20:47:14 +01:00
|
|
|
void configHandler::handle_tiiSelector (int state) {
|
|
|
|
bool x = tiiSelector -> isChecked ();
|
|
|
|
(void)state;
|
2025-04-27 16:20:31 +02:00
|
|
|
store (dabSettings, CONFIG_HANDLER, TII_DETECTOR_SETTING, x ? 1 : 0);
|
2025-01-06 20:47:14 +01:00
|
|
|
tiiCollisions -> setEnabled (x);
|
2025-01-10 14:24:41 +01:00
|
|
|
if (x)
|
|
|
|
tiiThreshold_setter -> setMinimum (6);
|
|
|
|
else
|
|
|
|
tiiThreshold_setter -> setMinimum (4);
|
2025-01-06 20:47:14 +01:00
|
|
|
process_tiiSelector (x);
|
|
|
|
}
|
|
|
|
|
2025-01-27 19:41:03 +01:00
|
|
|
void configHandler::handle_mouseClicked () {
|
|
|
|
QString tempPath = QDir::homePath () + "/Qt-DAB-files/";
|
|
|
|
tempPath =
|
|
|
|
value_s (dabSettings, "CONFIG_HANDLER", S_FILE_PATH, tempPath);
|
|
|
|
if (!tempPath. endsWith ('/'))
|
|
|
|
tempPath += '/';
|
|
|
|
QDir::fromNativeSeparators (tempPath);
|
|
|
|
QString fileName = tempPath + "config-handler.png";
|
|
|
|
fprintf (stderr, "file : %s\n", fileName. toLatin1 (). data ());
|
|
|
|
myFrame. grab (). save (fileName);
|
|
|
|
}
|
|
|
|
|
2025-07-25 21:02:40 +02:00
|
|
|
void configHandler::set_activeServices (int activeS) {
|
|
|
|
activeServices -> setText (QString::number (activeS));
|
|
|
|
}
|
|
|
|
|