203 lines
6.7 KiB
C
203 lines
6.7 KiB
C
/*
|
||
* settings.c
|
||
*
|
||
* Created on: 6 июл. 2022 г.
|
||
* Author: alexander
|
||
*/
|
||
|
||
#include <iup.h>
|
||
|
||
#include <stdlib.h>
|
||
#include <stdbool.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 settingsTglMultimonitor(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_MULTIMONITOR);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglFullscreen(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_FULLSCREEN);
|
||
return IUP_DEFAULT;
|
||
}
|
||
|
||
static int settingsTglAuthentication(Ihandle *self)
|
||
{
|
||
changeParameter(PARAMETER_AUTHENTICATION);
|
||
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 Ihandle* settingsBoxCheckbox()
|
||
{
|
||
Ihandle *tglMultimonitor, *tglFullscreen, *tglAuthentication;
|
||
|
||
tglMultimonitor = IupToggle("Несколько мониторов", NULL);
|
||
tglFullscreen = IupToggle("На весь экран", NULL);
|
||
tglAuthentication = IupToggle("Аутентификация", NULL);
|
||
|
||
IupSetInt(tglMultimonitor, "VALUE", getSetParameter(PARAMETER_MULTIMONITOR));
|
||
IupSetInt(tglFullscreen, "VALUE", getSetParameter(PARAMETER_FULLSCREEN));
|
||
IupSetInt(tglAuthentication, "VALUE", getSetParameter(PARAMETER_AUTHENTICATION));
|
||
|
||
return IupHbox(IupSetAttributes(IupFrame(IupVbox(
|
||
IupSetCallbacks(IupSetAttributes(tglMultimonitor, "NAME=SETTINGS_TGL_MULTIMONITOR"), "ACTION",
|
||
(Icallback) settingsTglMultimonitor, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglFullscreen, "NAME=SETTINGS_TGL_FULLSCREEN"), "ACTION",
|
||
(Icallback) settingsTglFullscreen, NULL),
|
||
IupSetCallbacks(IupSetAttributes(tglAuthentication, "NAME=SETTINGS_TGL_AUTHENTICATION"), "ACTION",
|
||
(Icallback) settingsTglAuthentication, NULL),
|
||
NULL)), "TITLE=\"Общие\""), NULL);
|
||
}
|
||
|
||
static Ihandle* settingsBoxSecurity()
|
||
{
|
||
Ihandle *tglSecurity;
|
||
Ihandle *tglTLS, *tglRDP, *tglNLA, *tglEXT;
|
||
Ihandle *grdSecurity;
|
||
|
||
tglSecurity = IupToggle("Использовать", NULL);
|
||
IupSetInt(tglSecurity, "VALUE", getSetParameter(PARAMETER_SECURITY));
|
||
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* settingsHorizontalBox()
|
||
{
|
||
return IupSetAttributes(IupHbox(settingsBoxCheckbox(), settingsBoxSecurity(), NULL), "MARGIN=5x5");
|
||
}
|
||
|
||
/*
|
||
* Блок кнопок
|
||
*/
|
||
static Ihandle* settingsHorizontalBoxButtons()
|
||
{
|
||
Ihandle *btnSave, *btnClose;
|
||
|
||
btnSave = IupButton("Сохранить", NULL);
|
||
IupSetAttribute(btnSave, "NAME", "SETTIGS_BTN_SAVE");
|
||
IupSetAttribute(btnSave, "TIP", "Сохранить настройки");
|
||
|
||
btnClose = IupButton("Закрыть", NULL);
|
||
IupSetAttribute(btnClose, "NAME", "SETTIGS_BTN_CLOSE");
|
||
IupSetAttribute(btnClose, "TIP", "Отменить изменения");
|
||
|
||
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;
|
||
}
|