/* * settings.c * * Created on: 6 июл. 2022 г. * Author: alexander */ #include #include #include #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; }