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