Добавлена возможность использования мультипараметров
This commit is contained in:
parent
3b6a0a433a
commit
5a6aef9424
60
arguments.c
60
arguments.c
|
@ -8,51 +8,51 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "arguments.h"
|
#include "arguments.h"
|
||||||
#include "node_settings.h"
|
#include "node_settings.h"
|
||||||
|
#include "concat.h"
|
||||||
|
|
||||||
void settingsLoad()
|
void settingsLoad()
|
||||||
{
|
{
|
||||||
settingsAddKey(PARAMETER_XFREERDP, "xfreerdp", false, true);
|
addParameterKey(PARAMETER_XFREERDP, "xfreerdp", true, true);
|
||||||
settingsAddKey(PARAMETER_SERVER, "/v:", true, true);
|
addParameterKey(PARAMETER_SERVER, "/v:", true, true);
|
||||||
settingsAddKey(PARAMETER_USERNAME, "/u:", true, true);
|
addParameterKey(PARAMETER_USERNAME, "/u:", true, true);
|
||||||
settingsAddKey(PARAMETER_PASSWORD, "/p:", true, true);
|
addParameterKey(PARAMETER_PASSWORD, "/p:", true, true);
|
||||||
settingsAddKey(PARAMETER_MULTIMONITOR, "/multimon", false, true);
|
addParameterKey(PARAMETER_MULTIMONITOR, "/multimon", true, true);
|
||||||
settingsAddKey(PARAMETER_FULLSCREEN, "/f", false, true);
|
addParameterKey(PARAMETER_FULLSCREEN, "/f", true, true);
|
||||||
settingsAddKey(PARAMETER_AUTHENTICATION, "-authentication", false, true);
|
addParameterKey(PARAMETER_AUTHENTICATION, "-authentication", true, true);
|
||||||
settingsAddKey(PARAMETER_SECURITY, "/sec:", false, true);
|
addParameterKey(PARAMETER_SECURITY, "/sec:", true, true);
|
||||||
|
addParameterValue(PARAMETER_SECURITY, VALUE_SECURITY_TLS, "tls", true);
|
||||||
// settingsAddKey(PARAMETER_SECURITY_TLS, "-authentication", false, true);
|
addParameterValue(PARAMETER_SECURITY, VALUE_SECURITY_RDP, "rdp", false);
|
||||||
// settingsAddKey(PARAMETER_SECURITY_RDP, "-authentication", false, true);
|
addParameterValue(PARAMETER_SECURITY, VALUE_SECURITY_NLA, "nla", false);
|
||||||
// settingsAddKey(PARAMETER_SECURITY_NLA, "-authentication", false, true);
|
addParameterValue(PARAMETER_SECURITY, VALUE_SECURITY_EXT, "ext", false);
|
||||||
// settingsAddKey(PARAMETER_SECURITY_EXT, "-authentication", false, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Arguments *buildArguments()
|
void settingsFree()
|
||||||
{
|
{
|
||||||
Arguments *args = (Arguments *)malloc(sizeof(Arguments));
|
freeSettings();
|
||||||
args->argc = settings.countEnable;
|
}
|
||||||
args->argv = (char **)malloc(sizeof(char *) * settings.countEnable);
|
|
||||||
Node *head = settings.next;
|
|
||||||
|
|
||||||
for (size_t i = 0; i < settings.countEnable; head = head->next)
|
void buildArguments(Arguments *args)
|
||||||
|
{
|
||||||
|
args->argc = 0;
|
||||||
|
args->argv = (char **)malloc(sizeof(char *) * settings.countParameterSet);
|
||||||
|
|
||||||
|
for (NodeParameter *head = settings.parameter; head; head = head->next)
|
||||||
{
|
{
|
||||||
if (head->enable)
|
if (head->set)
|
||||||
{
|
{
|
||||||
if (head->data->isValue)
|
if (head->value)
|
||||||
{
|
args->argv[(args->argc)++] = concat(head->key, getSetNodeValue(head)->current);
|
||||||
args->argv[i++] = head->data->fullArgument;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
args->argv[(args->argc)++] = concat(head->key, NULL);
|
||||||
args->argv[i++] = head->data->key;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return args;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeArguments(Arguments *args)
|
void freeArguments(Arguments *args)
|
||||||
{
|
{
|
||||||
|
for (int i = 0; i < args->argc; ++i)
|
||||||
|
{
|
||||||
|
free(args->argv[i]);
|
||||||
|
}
|
||||||
free(args->argv);
|
free(args->argv);
|
||||||
free(args);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,8 +14,10 @@ typedef struct
|
||||||
char **argv;
|
char **argv;
|
||||||
} Arguments;
|
} Arguments;
|
||||||
|
|
||||||
|
void buildArguments(Arguments *args);
|
||||||
|
void freeArguments(Arguments *args);
|
||||||
|
|
||||||
void settingsLoad();
|
void settingsLoad();
|
||||||
Arguments *buildArguments();
|
void settingsFree();
|
||||||
void freeArguments();
|
|
||||||
|
|
||||||
#endif /* ARGUMENTS_H_ */
|
#endif /* ARGUMENTS_H_ */
|
||||||
|
|
6
concat.c
6
concat.c
|
@ -16,7 +16,7 @@ char* concat(char *s1, char *s2)
|
||||||
size_t len1 = s1 ? strlen(s1) : 0;
|
size_t len1 = s1 ? strlen(s1) : 0;
|
||||||
size_t len2 = s2 ? strlen(s2) : 0;
|
size_t len2 = s2 ? strlen(s2) : 0;
|
||||||
|
|
||||||
char *result = malloc(len1 + len2 + 1);
|
char *result = (char *)malloc(sizeof(char) * (len1 + len2 + 1));
|
||||||
|
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
|
@ -26,11 +26,11 @@ char* concat(char *s1, char *s2)
|
||||||
|
|
||||||
if (s1)
|
if (s1)
|
||||||
{
|
{
|
||||||
memcpy(result, s1, len1);
|
strcpy(result, s1);
|
||||||
}
|
}
|
||||||
if (s2)
|
if (s2)
|
||||||
{
|
{
|
||||||
memcpy(result + len1, s2, len2 + 1);
|
strcpy(result + len1, s2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
16
gui.c
16
gui.c
|
@ -22,18 +22,18 @@ static int guiExit(Ihandle *self)
|
||||||
|
|
||||||
static int guiConnect(Ihandle *self)
|
static int guiConnect(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsSetValue(PARAMETER_SERVER, IupGetAttribute(IupGetDialogChild(self, "SERVER"), "LINEVALUE"));
|
setParameterValue(PARAMETER_SERVER, VALUE_SERVER, IupGetAttribute(IupGetDialogChild(self, "SERVER"), "LINEVALUE"));
|
||||||
settingsSetValue(PARAMETER_USERNAME, IupGetAttribute(IupGetDialogChild(self, "USER"), "LINEVALUE"));
|
setParameterValue(PARAMETER_USERNAME, VALUE_USERNAME, IupGetAttribute(IupGetDialogChild(self, "USER"), "LINEVALUE"));
|
||||||
settingsSetValue(PARAMETER_PASSWORD, IupGetAttribute(IupGetDialogChild(self, "PASSWORD"), "LINEVALUE"));
|
setParameterValue(PARAMETER_PASSWORD, VALUE_PASSWORD, IupGetAttribute(IupGetDialogChild(self, "PASSWORD"), "LINEVALUE"));
|
||||||
|
|
||||||
Arguments *args = buildArguments();
|
Arguments args;
|
||||||
for (int i = 0; i < args->argc; ++i)
|
buildArguments(&args);
|
||||||
|
for (int i = 0; i < args.argc; ++i)
|
||||||
{
|
{
|
||||||
printf("%s\n", args->argv[i]);
|
printf("%s\n", args.argv[i]);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
freeArguments(&args);
|
||||||
freeArguments(args);
|
|
||||||
|
|
||||||
return IUP_DEFAULT;
|
return IUP_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
3
main.c
3
main.c
|
@ -1,8 +1,9 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "node_settings.h"
|
|
||||||
#include "arguments.h"
|
#include "arguments.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
settingsLoad();
|
settingsLoad();
|
||||||
|
|
554
node_settings.c
554
node_settings.c
|
@ -7,40 +7,91 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "node_settings.h"
|
#include "node_settings.h"
|
||||||
#include "concat.h"
|
#include "concat.h"
|
||||||
|
|
||||||
HeadNode settings = {0, 0, NULL};
|
NodeHead settings =
|
||||||
|
{ NULL, 0 };
|
||||||
|
|
||||||
static Node* settingsCreateNode()
|
static NodeValue* newNodeValue(Value name, char *current, bool set)
|
||||||
{
|
{
|
||||||
Node *node = (Node*) malloc(sizeof(Node));
|
NodeValue *node = (NodeValue*) malloc(sizeof(NodeValue));
|
||||||
node->parameter = PARAMETER_NULL;
|
node->name = name;
|
||||||
|
node->set = set;
|
||||||
|
node->change = false;
|
||||||
node->next = NULL;
|
node->next = NULL;
|
||||||
node->data = (SettingsData*)malloc(sizeof(SettingsData));
|
|
||||||
node->data->key = NULL;
|
node->current = (char*) malloc(sizeof(char) * strlen(current));
|
||||||
node->data->value = NULL;
|
strcpy(node->current, current);
|
||||||
node->data->fullArgument = NULL;
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static void freeNodeValue(NodeValue *node)
|
||||||
* Если передан параметр PARAMETER_NULL, то возвращается последний действующий узел.
|
|
||||||
* Если возврат NULL, то ни одного узла не существует.
|
|
||||||
* Если передан параметр отличный от PARAMETER_NULL, то ищется существующий узел с этим параметром.
|
|
||||||
* Если возврат NULL, то узла с таким параметром не найдено.
|
|
||||||
*/
|
|
||||||
Node *settingsGetNode(SettingsParameters parameter)
|
|
||||||
{
|
{
|
||||||
if (!settings.countAll)
|
if (node)
|
||||||
{
|
{
|
||||||
return NULL;
|
free(node->current);
|
||||||
|
free(node);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Node *head = settings.next;
|
static void freeAllNodeValue(NodeValue *node)
|
||||||
|
{
|
||||||
|
NodeValue *next = NULL;
|
||||||
|
for (NodeValue *head = node; head; head = next)
|
||||||
|
{
|
||||||
|
next = head->next;
|
||||||
|
freeNodeValue(head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (parameter == PARAMETER_NULL)
|
static NodeParameter* newNodeParameter(Parameter name, char *key, bool set, bool singleValue)
|
||||||
|
{
|
||||||
|
NodeParameter *node = (NodeParameter*) malloc(sizeof(NodeParameter));
|
||||||
|
node->name = name;
|
||||||
|
node->set = set;
|
||||||
|
node->change = false;
|
||||||
|
node->value = NULL;
|
||||||
|
node->countValue = 0;
|
||||||
|
node->singleValue = singleValue;
|
||||||
|
node->next = NULL;
|
||||||
|
|
||||||
|
node->key = (char*) malloc(sizeof(char) * strlen(key));
|
||||||
|
strcpy(node->key, key);
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void freeNodeParameter(NodeParameter *node)
|
||||||
|
{
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
freeAllNodeValue(node->value);
|
||||||
|
free(node->key);
|
||||||
|
free(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void freeAllNodeParameter(NodeParameter *node)
|
||||||
|
{
|
||||||
|
NodeParameter *next = NULL;
|
||||||
|
for (NodeParameter *head = node; head; head = next)
|
||||||
|
{
|
||||||
|
next = head->next;
|
||||||
|
freeNodeParameter(head);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
static NodeParameter* getLastNodeParameter()
|
||||||
|
{
|
||||||
|
NodeParameter *head = settings.parameter;
|
||||||
|
|
||||||
|
if (head)
|
||||||
{
|
{
|
||||||
while (head->next)
|
while (head->next)
|
||||||
{
|
{
|
||||||
|
@ -49,9 +100,14 @@ Node *settingsGetNode(SettingsParameters parameter)
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; head; head = head->next)
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NodeParameter* getNodeParameter(Parameter name)
|
||||||
|
{
|
||||||
|
for (NodeParameter *head = settings.parameter; head; head = head->next)
|
||||||
{
|
{
|
||||||
if (head->parameter == parameter)
|
if (head->name == name)
|
||||||
{
|
{
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
@ -60,206 +116,318 @@ Node *settingsGetNode(SettingsParameters parameter)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void settingsAddKey(SettingsParameters parameter, char *key, bool isValue, bool enable)
|
void addParameterKey(Parameter name, char *key, bool set, bool singleValue)
|
||||||
{
|
{
|
||||||
Node *newNode = settingsCreateNode();
|
if (!settings.parameter)
|
||||||
newNode->parameter = parameter;
|
|
||||||
newNode->enable = enable;
|
|
||||||
newNode->change = false;
|
|
||||||
|
|
||||||
SettingsData *data = newNode->data;
|
|
||||||
data->isValue = isValue;
|
|
||||||
size_t len = strlen(key);
|
|
||||||
|
|
||||||
data->key = (char *) malloc(sizeof(char) * (len + 1));
|
|
||||||
memcpy(data->key, key, len);
|
|
||||||
|
|
||||||
Node *lastNode = settingsGetNode(PARAMETER_NULL);
|
|
||||||
if (lastNode)
|
|
||||||
{
|
{
|
||||||
lastNode->next = newNode;
|
settings.parameter = newNodeParameter(name, key, set, singleValue);
|
||||||
}
|
++settings.countParameter;
|
||||||
else
|
if (set)
|
||||||
{
|
|
||||||
settings.next = newNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enable)
|
|
||||||
{
|
|
||||||
++settings.countEnable;
|
|
||||||
}
|
|
||||||
++settings.countAll;
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsSetValue(SettingsParameters parameter, char *value)
|
|
||||||
{
|
|
||||||
Node *currentNode = settingsGetNode(parameter);
|
|
||||||
if (!currentNode || !currentNode->data->isValue)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strlen(value))
|
|
||||||
{
|
|
||||||
settingsSetEnable(parameter, false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
settingsSetEnable(parameter, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
SettingsData *data = currentNode->data;
|
|
||||||
if (data->value)
|
|
||||||
{
|
|
||||||
free(data->value);
|
|
||||||
}
|
|
||||||
if (data->fullArgument)
|
|
||||||
{
|
|
||||||
free(data->fullArgument);
|
|
||||||
}
|
|
||||||
size_t len = strlen(value);
|
|
||||||
|
|
||||||
data->value = (char *) malloc(sizeof(char) * (len + 1));
|
|
||||||
memcpy(data->value, value, len);
|
|
||||||
data->fullArgument = concat(data->key, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsSetEnable(SettingsParameters parameter, bool enable)
|
|
||||||
{
|
|
||||||
Node *currentNode = settingsGetNode(parameter);
|
|
||||||
if (!currentNode)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (currentNode->enable && !enable)
|
|
||||||
{
|
|
||||||
--settings.countEnable;
|
|
||||||
}
|
|
||||||
else if (!currentNode->enable && enable)
|
|
||||||
{
|
|
||||||
++settings.countEnable;
|
|
||||||
}
|
|
||||||
currentNode->enable = enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsToggleEnable(SettingsParameters parameter)
|
|
||||||
{
|
|
||||||
Node *currentNode = settingsGetNode(parameter);
|
|
||||||
if (!currentNode)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (currentNode->enable)
|
|
||||||
{
|
|
||||||
--settings.countEnable;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++settings.countEnable;
|
|
||||||
}
|
|
||||||
currentNode->enable = !currentNode->enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsToggleChange(SettingsParameters parameter)
|
|
||||||
{
|
|
||||||
Node *currentNode = settingsGetNode(parameter);
|
|
||||||
if (!currentNode)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
currentNode->change = !currentNode->change;
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsResetChange()
|
|
||||||
{
|
|
||||||
if (!settings.countAll)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Node *head = settings.next; head; head = head->next)
|
|
||||||
{
|
|
||||||
if (head->change)
|
|
||||||
{
|
{
|
||||||
head->change = false;
|
++settings.countParameterSet;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeParameter *node = getNodeParameter(name);
|
||||||
|
|
||||||
|
if (node)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s \"%s\" %s", "Параметр", key, "уже существует!\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node = getLastNodeParameter();
|
||||||
|
node->next = newNodeParameter(name, key, set, singleValue);
|
||||||
|
++settings.countParameter;
|
||||||
|
if (set)
|
||||||
|
{
|
||||||
|
++settings.countParameterSet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void settingsSaveSettings()
|
static NodeValue* getLastNodeValue(NodeParameter *node)
|
||||||
{
|
{
|
||||||
if (!settings.countAll)
|
NodeValue *head = node->value;
|
||||||
|
|
||||||
|
if (head)
|
||||||
{
|
{
|
||||||
|
while (head->next)
|
||||||
|
{
|
||||||
|
head = head->next;
|
||||||
|
}
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NodeValue* getNodeValue(NodeParameter *node, Value name)
|
||||||
|
{
|
||||||
|
for (NodeValue *head = node->value; head; head = head->next)
|
||||||
|
{
|
||||||
|
if (head->name == name)
|
||||||
|
{
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void addParameterValue(Parameter pName, Value vName, char *current, bool set)
|
||||||
|
{
|
||||||
|
NodeParameter *nodeParameter = getNodeParameter(pName);
|
||||||
|
|
||||||
|
if (!nodeParameter)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s \"%s\" %s", "Параметр для значения", current, "не существует!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Node *head = settings.next; head; head = head->next)
|
if (!nodeParameter->value)
|
||||||
{
|
{
|
||||||
if (head->change)
|
nodeParameter->value = newNodeValue(vName, current, set);
|
||||||
|
++nodeParameter->countValue;
|
||||||
|
if (set)
|
||||||
{
|
{
|
||||||
head->change = false;
|
++nodeParameter->countValueSet;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (head->enable)
|
NodeValue *nodeValue = getNodeValue(nodeParameter, vName);
|
||||||
{
|
|
||||||
--settings.countEnable;
|
if (nodeValue)
|
||||||
}
|
{
|
||||||
else
|
fprintf(stderr, "%s \"%s\" %s", "Значение", current, "уже существует!\n");
|
||||||
{
|
}
|
||||||
++settings.countEnable;
|
else
|
||||||
}
|
{
|
||||||
head->enable = !head->enable;
|
nodeValue = getLastNodeValue(nodeParameter);
|
||||||
|
nodeValue->next = newNodeValue(vName, current, set);
|
||||||
|
++nodeParameter->countValue;
|
||||||
|
if (set)
|
||||||
|
{
|
||||||
|
++nodeParameter->countValueSet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool settingsGetEnable(SettingsParameters parameter)
|
void freeSettings()
|
||||||
{
|
{
|
||||||
Node *currentNode = settingsGetNode(parameter);
|
if (settings.parameter)
|
||||||
if (!currentNode)
|
{
|
||||||
|
freeAllNodeParameter(settings.parameter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
NodeValue* getSetNodeValue(NodeParameter *node)
|
||||||
|
{
|
||||||
|
for (NodeValue *head = node->value; head; head = head->next)
|
||||||
|
{
|
||||||
|
if (head->set)
|
||||||
|
{
|
||||||
|
return head;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void setParameterValue(Parameter pName, Value vName, char *current)
|
||||||
|
{
|
||||||
|
NodeParameter *nodeParameter = getNodeParameter(pName);
|
||||||
|
|
||||||
|
if (!nodeParameter)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "%s \"%s\" %s", "Параметр для значения", current, "не существует!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t length = strlen(current);
|
||||||
|
|
||||||
|
if (!length)
|
||||||
|
{
|
||||||
|
if (nodeParameter->set)
|
||||||
|
{
|
||||||
|
nodeParameter->set = false;
|
||||||
|
--settings.countParameterSet;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!nodeParameter->set)
|
||||||
|
{
|
||||||
|
nodeParameter->set = true;
|
||||||
|
++settings.countParameterSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!nodeParameter->value)
|
||||||
|
{
|
||||||
|
nodeParameter->value = newNodeValue(vName, current, true);
|
||||||
|
++nodeParameter->countValue;
|
||||||
|
++nodeParameter->countValueSet;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
NodeValue *nodeValue = getNodeValue(nodeParameter, vName);
|
||||||
|
|
||||||
|
if (nodeValue)
|
||||||
|
{
|
||||||
|
free(nodeValue->current);
|
||||||
|
nodeValue->current = (char*) malloc(sizeof(char) * length);
|
||||||
|
strcpy(nodeValue->current, current);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nodeValue = getLastNodeValue(nodeParameter);
|
||||||
|
nodeValue->next = newNodeValue(vName, current, true);
|
||||||
|
++nodeParameter->countValue;
|
||||||
|
++nodeParameter->countValueSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
changeValue(pName, vName);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void changeParameter(Parameter name)
|
||||||
|
{
|
||||||
|
NodeParameter *node = getNodeParameter(name);
|
||||||
|
node->change = !node->change;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void changeValue(Parameter pName, Value vName)
|
||||||
|
{
|
||||||
|
NodeParameter *pNode = getNodeParameter(pName);
|
||||||
|
for (NodeValue *head = pNode->value; head; head = head->next)
|
||||||
|
{
|
||||||
|
if (pNode->singleValue)
|
||||||
|
{
|
||||||
|
head->change = head->name == vName && !head->set;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// ДОРАБОТАТЬ НА ИСПОЛЬЗОВАНИЕ МНОГИХ ПАРАМЕТРОВ
|
||||||
|
head->change = head->name == vName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveChangeSingleValueSettings(NodeParameter *node)
|
||||||
|
{
|
||||||
|
NodeValue *nChange = NULL;
|
||||||
|
NodeValue *nSet = NULL;
|
||||||
|
|
||||||
|
for (NodeValue *head = node->value; head; head = head->next)
|
||||||
|
{
|
||||||
|
if (head->change)
|
||||||
|
{
|
||||||
|
nChange = head;
|
||||||
|
}
|
||||||
|
if (head->set)
|
||||||
|
{
|
||||||
|
nSet = head;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nChange)
|
||||||
|
{
|
||||||
|
nChange->change = false;
|
||||||
|
nChange->set = true;
|
||||||
|
nSet->set = false;
|
||||||
|
++node->countValueSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveChangeValueSettings(NodeParameter *node)
|
||||||
|
{
|
||||||
|
for (NodeValue *head = node->value; head; head = head->next)
|
||||||
|
{
|
||||||
|
if (head->change)
|
||||||
|
{
|
||||||
|
head->change = false;
|
||||||
|
head->set = !head->set;
|
||||||
|
}
|
||||||
|
if (head->set)
|
||||||
|
{
|
||||||
|
++node->countValueSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveChangeSettings()
|
||||||
|
{
|
||||||
|
settings.countParameterSet = 0;
|
||||||
|
|
||||||
|
for (NodeParameter *pHead = settings.parameter; pHead; pHead = pHead->next)
|
||||||
|
{
|
||||||
|
if (pHead->change)
|
||||||
|
{
|
||||||
|
pHead->change = false;
|
||||||
|
pHead->set = !pHead->set;
|
||||||
|
}
|
||||||
|
if (pHead->set)
|
||||||
|
{
|
||||||
|
++settings.countParameterSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
pHead->countValueSet = 0;
|
||||||
|
|
||||||
|
if (pHead->singleValue)
|
||||||
|
saveChangeSingleValueSettings(pHead);
|
||||||
|
else
|
||||||
|
saveChangeValueSettings(pHead);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void resetChangeSettings()
|
||||||
|
{
|
||||||
|
for (NodeParameter *pHead = settings.parameter; pHead; pHead = pHead->next)
|
||||||
|
{
|
||||||
|
pHead->change = false;
|
||||||
|
|
||||||
|
for (NodeValue *vHead = pHead->value; vHead; vHead = vHead->next)
|
||||||
|
{
|
||||||
|
vHead->change = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getSetParameter(Parameter name)
|
||||||
|
{
|
||||||
|
NodeParameter *node = getNodeParameter(name);
|
||||||
|
if (!node)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return currentNode->enable;
|
return node->set;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void settingsFreeData(SettingsData *data)
|
bool getSetValue(Parameter pName, Value vName)
|
||||||
{
|
{
|
||||||
if (data->key)
|
NodeParameter *pNode = getNodeParameter(pName);
|
||||||
|
if (!pNode)
|
||||||
{
|
{
|
||||||
free(data->key);
|
return false;
|
||||||
}
|
}
|
||||||
if (data->value)
|
|
||||||
|
for (NodeValue *vNode = pNode->value; vNode; vNode = vNode->next)
|
||||||
{
|
{
|
||||||
free(data->value);
|
if (vNode->name == vName)
|
||||||
|
{
|
||||||
|
return vNode->set;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (data->fullArgument)
|
|
||||||
{
|
return false;
|
||||||
free(data->fullArgument);
|
|
||||||
}
|
|
||||||
free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void settingsFree()
|
|
||||||
{
|
|
||||||
if (!settings.countAll)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Node *head = settings.next;
|
|
||||||
Node *current = NULL;
|
|
||||||
|
|
||||||
while (head->next)
|
|
||||||
{
|
|
||||||
current = head->next;
|
|
||||||
settingsFreeData(head->data);
|
|
||||||
free(head);
|
|
||||||
head = current;
|
|
||||||
}
|
|
||||||
|
|
||||||
settingsFreeData(head->data);
|
|
||||||
free(head);
|
|
||||||
|
|
||||||
settings.next = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,58 +10,52 @@
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef enum
|
#include "parameter.h"
|
||||||
{
|
#include "value.h"
|
||||||
PARAMETER_NULL,
|
|
||||||
PARAMETER_XFREERDP,
|
|
||||||
PARAMETER_USERNAME,
|
|
||||||
PARAMETER_SERVER,
|
|
||||||
PARAMETER_PASSWORD,
|
|
||||||
PARAMETER_MULTIMONITOR,
|
|
||||||
PARAMETER_FULLSCREEN,
|
|
||||||
PARAMETER_AUTHENTICATION,
|
|
||||||
PARAMETER_SECURITY
|
|
||||||
} SettingsParameters;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct NodeValue
|
||||||
{
|
{
|
||||||
char *key;
|
Value name;
|
||||||
char *value;
|
bool set;
|
||||||
char *fullArgument;
|
|
||||||
bool isValue;
|
|
||||||
} SettingsData;
|
|
||||||
|
|
||||||
typedef struct Node
|
|
||||||
{
|
|
||||||
SettingsParameters parameter;
|
|
||||||
bool change;
|
bool change;
|
||||||
bool enable;
|
char *current;
|
||||||
SettingsData *data;
|
struct NodeValue *next;
|
||||||
struct Node *next;
|
} NodeValue;
|
||||||
} Node;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct NodeParameter
|
||||||
{
|
{
|
||||||
size_t countAll;
|
Parameter name;
|
||||||
size_t countEnable;
|
bool set;
|
||||||
struct Node *next;
|
bool change;
|
||||||
} HeadNode;
|
char *key;
|
||||||
|
NodeValue *value;
|
||||||
|
bool singleValue;
|
||||||
|
size_t countValue;
|
||||||
|
size_t countValueSet;
|
||||||
|
struct NodeParameter *next;
|
||||||
|
} NodeParameter;
|
||||||
|
|
||||||
extern HeadNode settings;
|
typedef struct NodeHead
|
||||||
|
{
|
||||||
|
NodeParameter *parameter;
|
||||||
|
size_t countParameter;
|
||||||
|
size_t countParameterSet;
|
||||||
|
} NodeHead;
|
||||||
|
|
||||||
/*
|
extern NodeHead settings;
|
||||||
* Работа с Node
|
|
||||||
*/
|
|
||||||
|
|
||||||
Node *settingsGetNode(SettingsParameters parameter);
|
void addParameterKey(Parameter name, char *key, bool set, bool singleValue);
|
||||||
void settingsAddKey(SettingsParameters parameter, char *key, bool isValue, bool enable);
|
void addParameterValue(Parameter pName, Value vName, char *current, bool set);
|
||||||
void settingsSetValue(SettingsParameters parameter, char *value);
|
void freeSettings();
|
||||||
void settingsSetEnable(SettingsParameters parameter, bool enable);
|
|
||||||
void settingsToggleEnable(SettingsParameters parameter);
|
NodeValue *getSetNodeValue(NodeParameter *node);
|
||||||
void settingsToggleChange(SettingsParameters parameter);
|
bool getSetParameter(Parameter name);
|
||||||
bool settingsGetEnable(SettingsParameters parameter);
|
bool getSetValue(Parameter pName, Value vName);
|
||||||
void settingsFree();
|
void changeParameter(Parameter name);
|
||||||
void settingsSaveSettings();
|
void changeValue(Parameter pName, Value vName);
|
||||||
void settingsResetChange();
|
void saveChangeSettings();
|
||||||
|
void resetChangeSettings();
|
||||||
|
|
||||||
|
void setParameterValue(Parameter pName, Value vName, char *current);
|
||||||
|
|
||||||
#endif /* SETTINGS_H_ */
|
#endif /* SETTINGS_H_ */
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* parameters.h
|
||||||
|
*
|
||||||
|
* Created on: 7 июл. 2022 г.
|
||||||
|
* Author: alexander
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PARAMETERS_H_
|
||||||
|
#define PARAMETERS_H_
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
PARAMETER_XFREERDP,
|
||||||
|
PARAMETER_SERVER,
|
||||||
|
PARAMETER_USERNAME,
|
||||||
|
PARAMETER_PASSWORD,
|
||||||
|
PARAMETER_MULTIMONITOR,
|
||||||
|
PARAMETER_FULLSCREEN,
|
||||||
|
PARAMETER_AUTHENTICATION,
|
||||||
|
PARAMETER_SECURITY
|
||||||
|
} Parameter;
|
||||||
|
|
||||||
|
#endif /* PARAMETERS_H_ */
|
168
settings.c
168
settings.c
|
@ -14,9 +14,15 @@
|
||||||
#include "arguments.h"
|
#include "arguments.h"
|
||||||
#include "node_settings.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)
|
static int settingsClose(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsResetChange();
|
resetChangeSettings();
|
||||||
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
||||||
IupHide(IupGetDialog(self));
|
IupHide(IupGetDialog(self));
|
||||||
return IUP_DEFAULT;
|
return IUP_DEFAULT;
|
||||||
|
@ -24,7 +30,7 @@ static int settingsClose(Ihandle *self)
|
||||||
|
|
||||||
static int settingsSave(Ihandle *self)
|
static int settingsSave(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsSaveSettings();
|
saveChangeSettings();
|
||||||
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
IupSetAttribute(IupGetDialog(self), "SIMULATEMODAL", "OFF");
|
||||||
IupHide(IupGetDialog(self));
|
IupHide(IupGetDialog(self));
|
||||||
return IUP_DEFAULT;
|
return IUP_DEFAULT;
|
||||||
|
@ -32,112 +38,131 @@ static int settingsSave(Ihandle *self)
|
||||||
|
|
||||||
static int settingsTglMultimonitor(Ihandle *self)
|
static int settingsTglMultimonitor(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsToggleChange(PARAMETER_MULTIMONITOR);
|
changeParameter(PARAMETER_MULTIMONITOR);
|
||||||
return IUP_DEFAULT;
|
return IUP_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int settingsTglFullscreen(Ihandle *self)
|
static int settingsTglFullscreen(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsToggleChange(PARAMETER_FULLSCREEN);
|
changeParameter(PARAMETER_FULLSCREEN);
|
||||||
return IUP_DEFAULT;
|
return IUP_DEFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int settingsTglAuthentication(Ihandle *self)
|
static int settingsTglAuthentication(Ihandle *self)
|
||||||
{
|
{
|
||||||
settingsToggleChange(PARAMETER_AUTHENTICATION);
|
changeParameter(PARAMETER_AUTHENTICATION);
|
||||||
return IUP_DEFAULT;
|
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* getFrmCheckbox()
|
static Ihandle* settingsBoxCheckbox()
|
||||||
{
|
{
|
||||||
Ihandle *tglMultimonitor, *tglFullscreen, *tglAuthentication;
|
Ihandle *tglMultimonitor, *tglFullscreen, *tglAuthentication;
|
||||||
|
|
||||||
tglMultimonitor = IupToggle("Мультиэкран", NULL);
|
tglMultimonitor = IupToggle("Несколько мониторов", NULL);
|
||||||
tglFullscreen = IupToggle("На весь экран", NULL);
|
tglFullscreen = IupToggle("На весь экран", NULL);
|
||||||
tglAuthentication = IupToggle("Аутентификация", NULL);
|
tglAuthentication = IupToggle("Аутентификация", NULL);
|
||||||
|
|
||||||
IupSetInt(tglMultimonitor, "VALUE", settingsGetEnable(PARAMETER_MULTIMONITOR));
|
IupSetInt(tglMultimonitor, "VALUE", getSetParameter(PARAMETER_MULTIMONITOR));
|
||||||
IupSetInt(tglFullscreen, "VALUE", settingsGetEnable(PARAMETER_FULLSCREEN));
|
IupSetInt(tglFullscreen, "VALUE", getSetParameter(PARAMETER_FULLSCREEN));
|
||||||
IupSetInt(tglAuthentication, "VALUE", settingsGetEnable(PARAMETER_AUTHENTICATION));
|
IupSetInt(tglAuthentication, "VALUE", getSetParameter(PARAMETER_AUTHENTICATION));
|
||||||
|
|
||||||
return IupVbox(
|
return IupHbox(IupSetAttributes(IupFrame(IupVbox(
|
||||||
IupSetCallbacks(IupSetAttributes(tglMultimonitor, "NAME=SETTINGS_TGL_MULTIMONITOR"), "ACTION",
|
IupSetCallbacks(IupSetAttributes(tglMultimonitor, "NAME=SETTINGS_TGL_MULTIMONITOR"), "ACTION",
|
||||||
(Icallback) settingsTglMultimonitor, NULL),
|
(Icallback) settingsTglMultimonitor, NULL),
|
||||||
IupSetCallbacks(IupSetAttributes(tglFullscreen, "NAME=SETTINGS_TGL_FULLSCREEN"), "ACTION",
|
IupSetCallbacks(IupSetAttributes(tglFullscreen, "NAME=SETTINGS_TGL_FULLSCREEN"), "ACTION",
|
||||||
(Icallback) settingsTglFullscreen, NULL),
|
(Icallback) settingsTglFullscreen, NULL),
|
||||||
IupSetCallbacks(IupSetAttributes(tglAuthentication, "NAME=SETTINGS_TGL_AUTHENTICATION"), "ACTION",
|
IupSetCallbacks(IupSetAttributes(tglAuthentication, "NAME=SETTINGS_TGL_AUTHENTICATION"), "ACTION",
|
||||||
(Icallback) settingsTglAuthentication, NULL),
|
(Icallback) settingsTglAuthentication, NULL),
|
||||||
NULL);
|
NULL)), "TITLE=\"Общие\""), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void tool_action_cb(Ihandle *self, int state)
|
static Ihandle* settingsBoxSecurity()
|
||||||
//{
|
|
||||||
// if (state == 1)
|
|
||||||
// {
|
|
||||||
// int tool_index = IupGetInt(self, "TOOLINDEX");
|
|
||||||
// switch (tool_index)
|
|
||||||
// {
|
|
||||||
// case 0:
|
|
||||||
// {
|
|
||||||
// settingsSetValue(PARAMETER_SECURITY, "tls");
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case 1:
|
|
||||||
// {
|
|
||||||
// settingsSetValue(PARAMETER_SECURITY, "rdp");
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case 2:
|
|
||||||
// {
|
|
||||||
// settingsSetValue(PARAMETER_SECURITY, "nla");
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// case 3:
|
|
||||||
// {
|
|
||||||
// settingsSetValue(PARAMETER_SECURITY, "ext");
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//static Ihandle* getFrmSecurity()
|
|
||||||
//{
|
|
||||||
// Ihandle *frmSettings;
|
|
||||||
// Ihandle *grdSecurity;
|
|
||||||
//
|
|
||||||
// grdSecurity = IupGridBox(
|
|
||||||
// IupSetCallbacks(IupSetAttributes(IupToggle(NULL, NULL), "TITLE=TLS, TOOLINDEX=0, VALUE=ON"), "ACTION", (Icallback)tool_action_cb, NULL),
|
|
||||||
// IupSetCallbacks(IupSetAttributes(IupToggle(NULL, NULL), "TITLE=RDP, TOOLINDEX=1"), "ACTION", (Icallback)tool_action_cb, NULL),
|
|
||||||
// IupSetCallbacks(IupSetAttributes(IupToggle(NULL, NULL), "TITLE=NLA, TOOLINDEX=2"), "ACTION", (Icallback)tool_action_cb, NULL),
|
|
||||||
// IupSetCallbacks(IupSetAttributes(IupToggle(NULL, NULL), "TITLE=EXT, TOOLINDEX=3"), "ACTION", (Icallback)tool_action_cb, NULL),
|
|
||||||
// NULL);
|
|
||||||
//
|
|
||||||
//// tglTLS = IupToggle("TLS", NULL);
|
|
||||||
//// tglRDP = IupToggle("RDP", NULL);
|
|
||||||
//// tglNLA = IupToggle("NLA", NULL);
|
|
||||||
//// tglEXT = IupToggle("EXT", NULL);
|
|
||||||
//
|
|
||||||
// frmSettings = IupSetAttributes(IupFrame(IupSetAttributes(getFrmCheckbox(), "MARGIN=3x2, GAP=2, ALIGNMENT=ALEFT")), "TITLE=\"Настройки\"");
|
|
||||||
//
|
|
||||||
// return frmSettings;
|
|
||||||
//}
|
|
||||||
|
|
||||||
static Ihandle* getHorBoxSettings()
|
|
||||||
{
|
{
|
||||||
Ihandle *frmSettings;
|
Ihandle *tglSecurity;
|
||||||
|
Ihandle *tglTLS, *tglRDP, *tglNLA, *tglEXT;
|
||||||
|
Ihandle *grdSecurity;
|
||||||
|
|
||||||
frmSettings = IupSetAttributes(IupFrame(IupSetAttributes(getFrmCheckbox(), "MARGIN=3x2, GAP=2, ALIGNMENT=ALEFT")), "TITLE=\"Настройки\"");
|
tglSecurity = IupToggle("Использовать", NULL);
|
||||||
return IupHbox(frmSettings, 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* getHorBoxButtons()
|
static Ihandle* settingsHorizontalBoxButtons()
|
||||||
{
|
{
|
||||||
Ihandle *btnSave, *btnClose;
|
Ihandle *btnSave, *btnClose;
|
||||||
|
|
||||||
|
@ -147,6 +172,7 @@ static Ihandle* getHorBoxButtons()
|
||||||
|
|
||||||
btnClose = IupButton("Закрыть", NULL);
|
btnClose = IupButton("Закрыть", NULL);
|
||||||
IupSetAttribute(btnClose, "NAME", "SETTIGS_BTN_CLOSE");
|
IupSetAttribute(btnClose, "NAME", "SETTIGS_BTN_CLOSE");
|
||||||
|
IupSetAttribute(btnClose, "TIP", "Отменить изменения");
|
||||||
|
|
||||||
IupSetHandle("btnClosePointer", btnClose);
|
IupSetHandle("btnClosePointer", btnClose);
|
||||||
|
|
||||||
|
@ -161,7 +187,7 @@ int settingsMainWindow(Ihandle *self)
|
||||||
Ihandle *dlg;
|
Ihandle *dlg;
|
||||||
Ihandle *vBoxMain;
|
Ihandle *vBoxMain;
|
||||||
|
|
||||||
vBoxMain = IupSetAttributes(IupVbox(getHorBoxSettings(), getHorBoxButtons(), NULL), "NMARGIN=2x2, ALIGNMENT=ACENTER");
|
vBoxMain = IupSetAttributes(IupVbox(settingsHorizontalBox(), settingsHorizontalBoxButtons(), NULL), "NMARGIN=2x2, ALIGNMENT=ACENTER");
|
||||||
|
|
||||||
dlg = IupDialog(vBoxMain);
|
dlg = IupDialog(vBoxMain);
|
||||||
IupSetAttribute(dlg, "TITLE", "Настройки");
|
IupSetAttribute(dlg, "TITLE", "Настройки");
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* value.h
|
||||||
|
*
|
||||||
|
* Created on: 8 июл. 2022 г.
|
||||||
|
* Author: alexander
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VALUE_H_
|
||||||
|
#define VALUE_H_
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
VALUE_SERVER, VALUE_USERNAME, VALUE_PASSWORD, VALUE_SECURITY_TLS, VALUE_SECURITY_RDP, VALUE_SECURITY_NLA, VALUE_SECURITY_EXT,
|
||||||
|
} Value;
|
||||||
|
|
||||||
|
#endif /* VALUE_H_ */
|
Loading…
Reference in New Issue