/* * settings.c * * Created on: 6 июл. 2022 г. * Author: alexander */ #include #include #include #include "monitor.h" #include #include "settings.h" #include "arguments.h" #include "node_settings.h" #include "about.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(); dbSaveMonitors(IupGetAttribute(IupGetDialogChild(self, "MONITORS"), "VALUESTRING")); 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 settingsTglDecorations(Ihandle *self) { changeParameter(PARAMETER_DECORATIONS); 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, *tglDecorations, *tglSound, *tglFonts, *tglEncryption, *tglCompression; tglAuthentication = IupToggle("Аутентификация", NULL); tglCertIgnore = IupToggle("Игнорировать сертификат", NULL); tglThemes = IupToggle("Отключить темы", NULL); tglWallpaper = IupToggle("Отключить обои", NULL); tglDecorations = 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(tglDecorations, "VALUE", getSetParameter(PARAMETER_DECORATIONS)); 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(tglDecorations, "NAME=SETTINGS_TGL_DECORATIONS, TIP=\"Отключить поддержку оформления окон (улучшает скорость соединения)\""), "ACTION", (Icallback) settingsTglDecorations, NULL), #ifdef IUP_WITH_SOUND_CHECKBOX IupSetCallbacks(IupSetAttributes(tglSound, "NAME=SETTINGS_TGL_SOUND, TIP=\"Включить поддержку звука с удаленного сервера\""), "ACTION", (Icallback) settingsTglSound, NULL), #endif 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); Monitors *monitors = loadMonitors(); for (size_t i = 0; i < monitors->size; ++i) { IupSetAttribute(ddMonitor, monitors->monitor[i]->data[0], monitors->monitor[i]->data[1]); if (monitors->monitor[i]->data[2][0] == '1') IupSetAttribute(ddMonitor, "VALUE", monitors->monitor[i]->data[0]); } freeMonitors(monitors); 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)); return IupSetAttributes( IupFrame( IupVbox( IupSetAttributes( 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), NULL ), "MARGIN=0x0, GAP=0x0"), IupSetCallbacks(IupSetAttributes(ddMonitor, "NAME=MONITORS, DROPDOWN=YES, EXPAND=YES, TIP=\"Выбрать конкретный монитор для подключения\""), "ACTION", (Icallback) settingsChooseMonitor, NULL), NULL) ), "TITLE=\"Монитор\", MARGIN=15x10, GAP=15x0"); } static Ihandle* settingsBoxAbout() { Ihandle *inputAbout, *formattag; inputAbout = IupText(NULL); formattag = IupUser(); IupSetAttribute(formattag, "FONTSIZE", "8"); IupSetAttribute(formattag, "ALIGNMENT", "CENTER"); IupSetAttribute(formattag, "SELECTION", "1,1:7,50"); IupSetAttribute(inputAbout, "ADDFORMATTAG_HANDLE", (char*)formattag); formattag = IupUser(); IupSetAttribute(formattag, "WEIGHT", "BOLD"); IupSetAttribute(formattag, "SELECTION", "1,1:1,20"); IupSetAttribute(inputAbout, "ADDFORMATTAG_HANDLE", (char*)formattag); formattag = IupUser(); IupSetAttribute(formattag, "FONTSIZE", "9"); IupSetAttribute(formattag, "SELECTION", "1,1:1,20"); IupSetAttribute(inputAbout, "ADDFORMATTAG_HANDLE", (char*)formattag); formattag = IupUser(); IupSetAttribute(formattag, "FGCOLOR", "0 0 255"); IupSetAttribute(formattag, "SELECTION", "5,1:5,100"); IupSetAttribute(inputAbout, "ADDFORMATTAG_HANDLE", (char*)formattag); formattag = IupUser(); IupSetAttribute(formattag, "WEIGHT", "BOLD"); IupSetAttribute(formattag, "SELECTION", "6,20:6,100"); IupSetAttribute(inputAbout, "ADDFORMATTAG_HANDLE", (char*)formattag); IupSetAttribute(inputAbout, "READONLY", "YES"); IupSetAttribute(inputAbout, "MULTILINE", "YES"); IupSetAttribute(inputAbout, "SIZE", "160"); IupSetAttribute(inputAbout, "VISIBLELINES", "6"); IupSetAttribute(inputAbout, "PADDING", "5"); IupSetAttribute(inputAbout, "FORMATTING", "YES"); IupSetAttribute(inputAbout, "EXPAND", "YES"); IupSetAttribute(inputAbout, "VALUE", getAbout()); return IupSetAttributes(IupFrame(IupHbox(inputAbout, NULL)), "TITLE=\"О программе\", MARGIN=5x5"); } static Ihandle* settingsHorizontalBox() { return IupSetAttributes( IupHbox( IupSetAttributes( IupVbox(settingsBoxCheckbox(), settingsBoxMonitor(), NULL), "NMARGIN=0x0" ), IupSetAttributes( IupVbox( IupSetAttributes(IupHbox(settingsBoxSecurity(), settingsBoxBitsPerPixel(), NULL), "GAP=10x0"), settingsBoxAbout(), NULL), "MARGIN=0x0"), NULL), "NMARGIN=10x0, NGAP=10x0" ); } /* * Блок кнопок */ static Ihandle* settingsHorizontalBoxButtons() { Ihandle *btnSave, *btnClose; btnSave = IupButton("Сохранить", NULL); IupSetAttribute(btnSave, "NAME", "SETTIGS_BTN_SAVE"); IupSetAttribute(btnSave, "TIP", "Сохранить настройки"); #ifdef IUP_WITH_COLOR_BUTTONS IupSetAttribute(btnSave, "BGCOLOR", "0 179 0"); IupSetAttribute(btnSave, "FGCOLOR", "255 255 255"); #endif btnClose = IupButton("Закрыть", NULL); IupSetAttribute(btnClose, "NAME", "SETTIGS_BTN_CLOSE"); IupSetAttribute(btnClose, "TIP", "Отменить изменения"); #ifdef IUP_WITH_COLOR_BUTTONS IupSetAttribute(btnClose, "BGCOLOR", "204 0 0"); IupSetAttribute(btnClose, "FGCOLOR", "255 255 255"); #endif 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; }