411 lines
17 KiB
C
411 lines
17 KiB
C
/*
|
||
* settings.c
|
||
*
|
||
* Created on: 6 июл. 2022 г.
|
||
* Author: alexander
|
||
*/
|
||
|
||
#include <iup.h>
|
||
|
||
#include <stdlib.h>
|
||
#include <stdbool.h>
|
||
|
||
#include "xrandr.h"
|
||
#include <stdio.h>
|
||
|
||
#include "settings.h"
|
||
#include "arguments.h"
|
||
#include "node_settings.h"
|
||
|
||
void toggleActive(Ihandle *self, char *name)
|
||
{
|
||
IupSetInt(IupGetDialogChild(self, name), "ACTIVE", !IupGetInt(IupGetDialogChild(self, name), "ACTIVE"));
|
||
}
|
||
|
||
static int settingsClose(Ihandle *self)
|
||
{
|
||
resetChangeSettings();
|
||
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
||
IupHide(IupGetDialog(self));
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsSave(Ihandle *self)
|
||
{
|
||
saveChangeSettings();
|
||
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
||
IupHide(IupGetDialog(self));
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglAuthentication(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_AUTHENTICATION);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglCertIgnore(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_CERTIGNORE);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglThemes(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_THEMES);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglWallpaper(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_WALLPAPER);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglSound(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_SOUND);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglFonts(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_FONTS);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglEncryption(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_ENCRYPTION);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglCompression(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_COMPRESSION);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsUseSecurity(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_SECURITY);
|
||
toggleActive(self, "SECURITY_TLS");
|
||
toggleActive(self, "SECURITY_RDP");
|
||
toggleActive(self, "SECURITY_NLA");
|
||
toggleActive(self, "SECURITY_EXT");
|
||
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static void settingsChooseSecurity(Ihandle *self, int state)
|
||
{
|
||
if (state == 1)
|
||
{
|
||
int tool_index = IupGetInt(self, "TOOLINDEX");
|
||
switch (tool_index)
|
||
{
|
||
case 0:
|
||
{
|
||
changeValue(PARAMETER_SECURITY, VALUE_SECURITY_TLS);
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
changeValue(PARAMETER_SECURITY, VALUE_SECURITY_RDP);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
changeValue(PARAMETER_SECURITY, VALUE_SECURITY_NLA);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
changeValue(PARAMETER_SECURITY, VALUE_SECURITY_EXT);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
static int settingsUseBitsPerPixel(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_BITSPERPIXEL);
|
||
toggleActive(self, "BITSPERPIXEL_8");
|
||
toggleActive(self, "BITSPERPIXEL_16");
|
||
toggleActive(self, "BITSPERPIXEL_24");
|
||
toggleActive(self, "BITSPERPIXEL_32");
|
||
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static void settingsChooseBitsPerPixel(Ihandle *self, int state)
|
||
{
|
||
if (state == 1)
|
||
{
|
||
int tool_index = IupGetInt(self, "TOOLINDEX");
|
||
switch (tool_index)
|
||
{
|
||
case 0:
|
||
{
|
||
changeValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_8);
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
changeValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_16);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
changeValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_24);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
changeValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_32);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
static int settingsChooseMonitor(Ihandle *ih, char *text, int item, int state)
|
||
{
|
||
if (state == 1)
|
||
{
|
||
changeValue(PARAMETER_MONITORS, item - 1);
|
||
}
|
||
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglMultimonitor(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_MULTIMONITOR);
|
||
|
||
IupSetInt(IupGetDialogChild(self, "MONITORS"), "ACTIVE", !IupGetInt(IupGetDialogChild(self, "SETTINGS_TGL_MULTIMONITOR"), "VALUE"));
|
||
setParameter(PARAMETER_MONITORS, !IupGetInt(IupGetDialogChild(self, "SETTINGS_TGL_MULTIMONITOR"), "VALUE"));
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglFullscreen(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_FULLSCREEN);
|
||
toggleActive(self, "SETTINGS_TGL_MULTIMONITOR");
|
||
IupSetInt(IupGetDialogChild(self, "MONITORS"), "ACTIVE", !IupGetInt(IupGetDialogChild(self, "SETTINGS_TGL_MULTIMONITOR"), "VALUE") && IupGetInt(IupGetDialogChild(self, "SETTINGS_TGL_FULLSCREEN"), "VALUE"));
|
||
setParameter(PARAMETER_MONITORS, !IupGetInt(IupGetDialogChild(self, "SETTINGS_TGL_MULTIMONITOR"), "VALUE"));
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
/*
|
||
* Блок настроек
|
||
*/
|
||
static Ihandle* settingsBoxCheckbox()
|
||
{
|
||
Ihandle *tglAuthentication, *tglCertIgnore, *tglThemes, *tglWallpaper, *tglSound, *tglFonts, *tglEncryption, *tglCompression;
|
||
|
||
tglAuthentication = IupToggle("Аутентификация", NULL);
|
||
tglCertIgnore = IupToggle("Игнорировать сертификат", NULL);
|
||
tglThemes = IupToggle("Отключить темы", NULL);
|
||
tglWallpaper = IupToggle("Отключить обои", NULL);
|
||
|
||
tglSound = IupToggle("Поддержка звука", NULL);
|
||
tglFonts = IupToggle("Отключить прорисовку шрифтов", NULL);
|
||
tglEncryption = IupToggle("Отключить шифрование", NULL);
|
||
tglCompression = IupToggle("Сжатие данных", NULL);
|
||
|
||
IupSetInt(tglAuthentication, "VALUE", getSetParameter(PARAMETER_AUTHENTICATION));
|
||
IupSetInt(tglCertIgnore, "VALUE", getSetParameter(PARAMETER_CERTIGNORE));
|
||
IupSetInt(tglThemes, "VALUE", getSetParameter(PARAMETER_THEMES));
|
||
IupSetInt(tglWallpaper, "VALUE", getSetParameter(PARAMETER_WALLPAPER));
|
||
IupSetInt(tglSound, "VALUE", getSetParameter(PARAMETER_SOUND));
|
||
IupSetInt(tglFonts, "VALUE", getSetParameter(PARAMETER_FONTS));
|
||
IupSetInt(tglEncryption, "VALUE", getSetParameter(PARAMETER_ENCRYPTION));
|
||
IupSetInt(tglCompression, "VALUE", getSetParameter(PARAMETER_COMPRESSION));
|
||
|
||
return IupSetAttributes(
|
||
IupFrame(
|
||
IupVbox(
|
||
IupSetCallbacks(IupSetAttributes(tglAuthentication, "NAME=SETTINGS_TGL_AUTHENTICATION, TIP=\"Получить окно входа авторизации\""), "ACTION",
|
||
(Icallback) settingsTglAuthentication, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglCertIgnore, "NAME=SETTINGS_TGL_AUTHENTICATION, TIP=\"Игнорировать подтверждение принятия сертификата\""), "ACTION",
|
||
(Icallback) settingsTglCertIgnore, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglThemes, "NAME=SETTINGS_TGL_THEMES, TIP=\"Отключить поддержку тем оформления (улучшает скорость соединения)\""), "ACTION", (Icallback) settingsTglThemes,
|
||
NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglWallpaper, "NAME=SETTINGS_TGL_WALLPAPER, TIP=\"Отключить поддержку обои рабочего стола (улучшает скорость соединения)\""), "ACTION", (Icallback) settingsTglWallpaper,
|
||
NULL), IupSetCallbacks(IupSetAttributes(tglSound, "NAME=SETTINGS_TGL_SOUND, TIP=\"Включить поддержку звука с удаленного сервера\""), "ACTION", (Icallback) settingsTglSound,
|
||
NULL), IupSetCallbacks(IupSetAttributes(tglFonts, "NAME=SETTINGS_TGL_FONTS, TIP=\"Отключить прорисовку шрифтов (улучшает скорость соединения)\""), "ACTION", (Icallback) settingsTglFonts,
|
||
NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglEncryption, "NAME=SETTINGS_TGL_ENCRYPTION, TIP=\"Отключить шифрование данных\""), "ACTION",
|
||
(Icallback) settingsTglEncryption,
|
||
NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglCompression, "NAME=SETTINGS_TGL_COMPRESSION, TIP=\"Включить сжатие данных (улучшает скорость соединения)\""), "ACTION",
|
||
(Icallback) settingsTglCompression,
|
||
NULL),
|
||
NULL)), "TITLE=\"Общие\", MARGIN=10x10");
|
||
}
|
||
|
||
static Ihandle* settingsBoxSecurity()
|
||
{
|
||
Ihandle *tglSecurity;
|
||
Ihandle *tglTLS, *tglRDP, *tglNLA, *tglEXT;
|
||
Ihandle *grdSecurity;
|
||
|
||
tglSecurity = IupToggle("Использовать", NULL);
|
||
IupSetInt(tglSecurity, "VALUE", getSetParameter(PARAMETER_SECURITY));
|
||
IupSetAttribute(tglSecurity, "TIP", "Выбрать конкретный протокол передачи данных");
|
||
IupSetCallback(tglSecurity, "ACTION", (Icallback) settingsUseSecurity);
|
||
|
||
tglTLS = IupToggle("TLS", NULL);
|
||
IupSetInt(tglTLS, "VALUE", getSetValue(PARAMETER_SECURITY, VALUE_SECURITY_TLS));
|
||
IupSetInt(tglTLS, "ACTIVE", getSetParameter(PARAMETER_SECURITY));
|
||
tglRDP = IupToggle("RDP", NULL);
|
||
IupSetInt(tglRDP, "VALUE", getSetValue(PARAMETER_SECURITY, VALUE_SECURITY_RDP));
|
||
IupSetInt(tglRDP, "ACTIVE", getSetParameter(PARAMETER_SECURITY));
|
||
tglNLA = IupToggle("NLA", NULL);
|
||
IupSetInt(tglNLA, "VALUE", getSetValue(PARAMETER_SECURITY, VALUE_SECURITY_NLA));
|
||
IupSetInt(tglNLA, "ACTIVE", getSetParameter(PARAMETER_SECURITY));
|
||
tglEXT = IupToggle("EXT", NULL);
|
||
IupSetInt(tglEXT, "VALUE", getSetValue(PARAMETER_SECURITY, VALUE_SECURITY_EXT));
|
||
IupSetInt(tglEXT, "ACTIVE", getSetParameter(PARAMETER_SECURITY));
|
||
|
||
grdSecurity = IupRadio(
|
||
IupGridBox(
|
||
IupSetCallbacks(IupSetAttributes(tglTLS, "NAME=SECURITY_TLS, TOOLINDEX=0"), "ACTION", (Icallback) settingsChooseSecurity, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglRDP, "NAME=SECURITY_RDP, TOOLINDEX=1"), "ACTION", (Icallback) settingsChooseSecurity, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglNLA, "NAME=SECURITY_NLA, TOOLINDEX=2"), "ACTION", (Icallback) settingsChooseSecurity, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglEXT, "NAME=SECURITY_EXT, TOOLINDEX=3"), "ACTION", (Icallback) settingsChooseSecurity, NULL),
|
||
NULL));
|
||
|
||
return IupHbox(IupSetAttributes(IupFrame(IupVbox(tglSecurity, grdSecurity, NULL)), "TITLE=\"Протокол безопасности\", MARGIN=15x10"), NULL);
|
||
}
|
||
|
||
static Ihandle* settingsBoxBitsPerPixel()
|
||
{
|
||
Ihandle *tglBitsPerPixel;
|
||
Ihandle *tgl8, *tgl16, *tgl24, *tgl32;
|
||
Ihandle *grdBitsPerPixel;
|
||
|
||
tglBitsPerPixel = IupToggle("Использовать", NULL);
|
||
IupSetInt(tglBitsPerPixel, "VALUE", getSetParameter(PARAMETER_BITSPERPIXEL));
|
||
IupSetAttribute(tglBitsPerPixel, "TIP", "Выбрать конкретную глубину цвета (меньше глубина - выше скорость и хуже качество)");
|
||
IupSetCallback(tglBitsPerPixel, "ACTION", (Icallback) settingsUseBitsPerPixel);
|
||
|
||
tgl8 = IupToggle("8 бит", NULL);
|
||
IupSetInt(tgl8, "VALUE", getSetValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_8));
|
||
IupSetInt(tgl8, "ACTIVE", getSetParameter(PARAMETER_BITSPERPIXEL));
|
||
tgl16 = IupToggle("16 бит", NULL);
|
||
IupSetInt(tgl16, "VALUE", getSetValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_16));
|
||
IupSetInt(tgl16, "ACTIVE", getSetParameter(PARAMETER_BITSPERPIXEL));
|
||
tgl24 = IupToggle("24 бит", NULL);
|
||
IupSetInt(tgl24, "VALUE", getSetValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_24));
|
||
IupSetInt(tgl24, "ACTIVE", getSetParameter(PARAMETER_BITSPERPIXEL));
|
||
tgl32 = IupToggle("32 бит", NULL);
|
||
IupSetInt(tgl32, "VALUE", getSetValue(PARAMETER_BITSPERPIXEL, VALUES_BITSPERPIXEL_32));
|
||
IupSetInt(tgl32, "ACTIVE", getSetParameter(PARAMETER_BITSPERPIXEL));
|
||
|
||
grdBitsPerPixel = IupRadio(
|
||
IupGridBox(IupSetCallbacks(IupSetAttributes(tgl8, "NAME=BITSPERPIXEL_8, TOOLINDEX=0"), "ACTION", (Icallback) settingsChooseBitsPerPixel,
|
||
NULL), IupSetCallbacks(IupSetAttributes(tgl16, "NAME=BITSPERPIXEL_16, TOOLINDEX=1"), "ACTION", (Icallback) settingsChooseBitsPerPixel,
|
||
NULL), IupSetCallbacks(IupSetAttributes(tgl24, "NAME=BITSPERPIXEL_24, TOOLINDEX=2"), "ACTION", (Icallback) settingsChooseBitsPerPixel,
|
||
NULL), IupSetCallbacks(IupSetAttributes(tgl32, "NAME=BITSPERPIXEL_32, TOOLINDEX=3"), "ACTION", (Icallback) settingsChooseBitsPerPixel,
|
||
NULL),
|
||
NULL));
|
||
|
||
return IupHbox(IupSetAttributes(IupFrame(IupVbox(tglBitsPerPixel, grdBitsPerPixel, NULL)), "TITLE=\"Глубина цвета\", MARGIN=15x10"), NULL);
|
||
}
|
||
|
||
static Ihandle* settingsBoxMonitor()
|
||
{
|
||
Ihandle *tglFullscreen, *tglMultimonitor, *ddMonitor;
|
||
|
||
tglMultimonitor = IupToggle("Все мониторы", NULL);
|
||
tglFullscreen = IupToggle("На весь экран", NULL);
|
||
ddMonitor = IupList(NULL);
|
||
|
||
x_info *monitors = getXInfo();
|
||
char *allMonitorIndex = (char*) malloc(sizeof(char) * 3);
|
||
sprintf(allMonitorIndex, "%hu", monitors->count + 1);
|
||
size_t setValueIndex = 0;
|
||
|
||
for (short i = 0; i < monitors->count; ++i)
|
||
{
|
||
IupSetAttribute(ddMonitor, monitors->monitor[i].ptrIndexItem, monitors->monitor[i].ptrName);
|
||
if (getSetValue(PARAMETER_MONITORS, i))
|
||
setValueIndex = i + 1;
|
||
}
|
||
|
||
IupSetInt(ddMonitor, "VALUE", setValueIndex ? setValueIndex : 1);
|
||
IupSetInt(tglMultimonitor, "VALUE", getSetParameter(PARAMETER_MULTIMONITOR));
|
||
IupSetInt(tglFullscreen, "VALUE", getSetParameter(PARAMETER_FULLSCREEN));
|
||
|
||
IupSetInt(tglMultimonitor, "ACTIVE", getSetParameter(PARAMETER_FULLSCREEN));
|
||
IupSetInt(ddMonitor, "ACTIVE", getSetParameter(PARAMETER_FULLSCREEN) && !getSetParameter(PARAMETER_MULTIMONITOR));
|
||
|
||
free(monitors);
|
||
|
||
return IupSetAttributes(
|
||
IupFrame(
|
||
IupVbox(
|
||
IupSetCallbacks(IupSetAttributes(tglFullscreen, "NAME=SETTINGS_TGL_FULLSCREEN, EXPAND=YES, TIP=\"Выполнить подключение на весь экран\""), "ACTION",
|
||
(Icallback) settingsTglFullscreen, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglMultimonitor, "NAME=SETTINGS_TGL_MULTIMONITOR, TIP=\"Задействовать все подключенные мониторы\""), "ACTION",
|
||
(Icallback) settingsTglMultimonitor, NULL),
|
||
IupSetCallbacks(IupSetAttributes(ddMonitor, "NAME=MONITORS, DROPDOWN=YES, EXPAND=YES, TIP=\"Выбрать конкретный монитор для подключения\""), "ACTION",
|
||
(Icallback) settingsChooseMonitor, NULL),
|
||
NULL)), "TITLE=\"Монитор\", MARGIN=10x10, CGAP=5");
|
||
}
|
||
|
||
static Ihandle* settingsHorizontalBox()
|
||
{
|
||
return IupSetAttributes(
|
||
IupHbox(IupVbox(settingsBoxCheckbox(), settingsBoxMonitor(), NULL), settingsBoxSecurity(), settingsBoxBitsPerPixel(), NULL), "MARGIN=5x5");
|
||
}
|
||
|
||
/*
|
||
* Блок кнопок
|
||
*/
|
||
static Ihandle* settingsHorizontalBoxButtons()
|
||
{
|
||
Ihandle *btnSave, *btnClose;
|
||
|
||
btnSave = IupButton("Сохранить", NULL);
|
||
IupSetAttribute(btnSave, "NAME", "SETTIGS_BTN_SAVE");
|
||
IupSetAttribute(btnSave, "TIP", "Сохранить настройки");
|
||
IupSetAttribute(btnSave, "BGCOLOR", "0 179 0");
|
||
IupSetAttribute(btnSave, "FGCOLOR", "255 255 255");
|
||
|
||
btnClose = IupButton("Закрыть", NULL);
|
||
IupSetAttribute(btnClose, "NAME", "SETTIGS_BTN_CLOSE");
|
||
IupSetAttribute(btnClose, "TIP", "Отменить изменения");
|
||
IupSetAttribute(btnClose, "BGCOLOR", "204 0 0");
|
||
IupSetAttribute(btnClose, "FGCOLOR", "255 255 255");
|
||
|
||
IupSetHandle("btnClosePointer", btnClose);
|
||
|
||
return IupSetAttributes(
|
||
IupHbox(IupFill(), IupSetCallbacks(btnSave, "ACTION", (Icallback) settingsSave, NULL),
|
||
IupSetCallbacks(btnClose, "ACTION", (Icallback) settingsClose, NULL), IupFill(),
|
||
NULL), "ALIGNMENT=ACENTER:ACENTER, GAP=10, MARGIN=10x10");
|
||
}
|
||
|
||
int settingsMainWindow(Ihandle *self)
|
||
{
|
||
Ihandle *dlg;
|
||
Ihandle *vBoxMain;
|
||
|
||
vBoxMain = IupSetAttributes(IupVbox(settingsHorizontalBox(), settingsHorizontalBoxButtons(), NULL), "NMARGIN=2x2, ALIGNMENT=ACENTER");
|
||
|
||
dlg = IupDialog(vBoxMain);
|
||
IupSetAttribute(dlg, "TITLE", "Настройки");
|
||
IupSetCallback(
|
||
IupSetAttributes(dlg,
|
||
"ICON=icon, DIALOGFRAME=ON, SIMULATEMODAL=ON, DEFAULTESC=btnClosePointer, TOPMOST=YES, BRINGFRONT=YES, NAME=SETTINGS_MAIN_WINDOW"),
|
||
"CLOSE_CB", (Icallback) settingsClose);
|
||
|
||
IupShowXY(dlg, IUP_CURRENT, IUP_CURRENT);
|
||
|
||
return IUP_DEFAULT;
|
||
}
|