GUI-FreeRDP/settings.c

411 lines
17 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* 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;
}