SettingsEditor plugin

Добавление диалогового окна настроек в код в Studio

Версия: 1.4

Дата релиза: 17 апреля 2023

Список методов плагина

Шаблоны настроек задаются в контекстном меню Плагины -> Код -> Редактор -> Редактирование настроек

В диалоговом окне редатирования настроек доступен следующий функионал, показанные на скриншоте ниже:

  1. Кнопка добавления нового шаблона. По умолчанию отключена, разблокируется при вводе названия шаблона в текстовом поле слева.
  2. Кнопка удаления шаблона. По умолчанию отключена, разблокируется при выборе шаблона в списке 3.
  3. Список шаблонов.
  4. Таблица редактирования строк шаблона. Удалить настройку можно с помощью клавиши Delete, добавить новый - вввести значения в последней строке таблицы и нажать Enter.
  5. Master-detail в котором можно редактировать опции настроек (например указать список значений для выпадающего списка, задать значения по умолчанию и т.п.)
  6. Кнопка сохранения, которая разблокируется если в таблицу были внесены изменения.
  7. Пример результирующей формы настроек.
  8. Ввод настроек только первый раз, при повторном вызове set_settings для этой настройки, данные берутся первоначально введенные пользователем.
  9. Скачать файл настройки в формате JSON.

После настройки шаблонов, можно вызвать форму по названию шаблона в коде Studio, используя метод set_settings. При вызове метода открывается диалоговое окно, в котором пользователь вводит значения. При нажатии OK (если данные валидны) возвращается JSON-объект. Если данные не валидны, отобразится сообщение с ошибкой и пользователю придется скорректировать введенные значения. Если пользователь закроет окно не через кнопку OK - вернется JSON-объект с полем IsSettingsInput:false.

С помощью методов add_setting_from_file и add_setting_from_json можно программно добавить настройку из JSON. При этом структура JSON должна соответствовать следующей:


    {
        "Name": "Название шаблона",
        "IsDontAskAgain": false, // открывать окно ввода настроект только в первый, а после использовать введенные пользователем данные
        "Items": [
        {
            "Id": 1,
            "SettingsControl": "TextBox|TextArea|RadioButton|ComboBox|CheckBox|Slider|NumberBox",
            "PlaceHolder": "Визульное название для поля",
            "PropertyName": "Имя свойства в JSON-модели (без пробелов)",
            "IsRequired": false, // обязателен ли ввод поля
            "SettingsOptions": {
            "DefaultValue": null, // значение по умолчанию
            "ItemsSource": [ // для списковых полей (RadioButton|ComboBox)
            {
                "Text": "",
                "IsDefault": false
            },
            {
                "Text": "",
                "IsDefault": false
            }],
            "Min": 0.0, // ограничение для Slider
            "Max": 0.0 // ограничение для Slider
        },
        {
            "Id": 2,
            "SettingsControl": "TextBox",
            "PlaceHolder": "",
            "PropertyName": "",
            "IsRequired": false,
            "SettingsOptions": {
            "DefaultValue": null,
            "ItemsSource": [],
            "Min": 0.0,
            "Max": 0.0
        },
        // ...
        ]
    }

    

set_settings

Задать значения для настроек

set_settings(string settings_name)
settings_name Название шаблона настройки по которому будут заполняться настройки

Описание возврата: JSON строка с введенными данными в форме

Примеры использования
<?php
// инициализация
$xhe_host = '127.0.0.1:7010';
$relative_app_dir = '..\\..\\..\\';
require($relative_app_dir.'Templates/init.php');
include($relative_app_dir.'Templates/_for_tests_.php');

$bUTF8Ver = true;
$PHP_Use_Trought_Shell = true;

// рабочая папка
$script_folder = $debug->get_cur_script_folder();
// отсносительный путь
$app_dir = realpath($script_folder.$relative_app_dir);
// тестовые данные
$test = new _for_tests_($script_folder, $settingseditor);

// начало теста
$test->echo_header('set_settings');

//1
echo "1. Установить настройки пользователя\n";
$settings = $settingseditor->set_settings("User Info");
echo "Получена строка в формате JSON: \n";
echo $settings."\n";

// конец теста
echo "\n<hr><br>";

// выход
$app->quit();
?>
// связь с платформой
xhe_host = '127.0.0.1:7014'
_path = require('path')
relative_app_dir = '..\\..\\..\\'
echo = require(_path.join(relative_app_dir, 'Templates JS', 'init.js'))
_for_tests_ = require(_path.join(relative_app_dir, 'Templates JS', '_for_tests_.js'))

// рабочая папка
script_folder = debug.get_cur_script_folder()
// отсносительны йпуть
app_dir = _path.resolve(_path.join(script_folder, relative_app_dir))
// тестовые данные
test = new _for_tests_(script_folder, settingseditor)

// начало теста
test.echo_header('set_settings')

//1
echo("1. Установить настройки пользователя\n")
settings = settingseditor.set_settings("User Info")
echo("Получена строка в формате JSON: \n")
echo(`${settings}\n`)

// конец теста
echo('\n<hr><br>')

// выход
app.quit()
# дополнительные пути
import sys, os
relative_app_dir = '..\\..\\..\\'
sys.path.append(os.path.join(relative_app_dir, 'Templates PY'))

# связь с платофрмой
xhe_host = '127.0.0.1:7010'
from xweb_human_emulator import *
from _for_tests_ import _for_tests_

# рабочая папка
script_folder = debug.get_cur_script_folder()
# относительный путь
app_dir = os.path.abspath(os.path.join(script_folder, relative_app_dir))

# тестовые данные
test = _for_tests_(script_folder, settingseditor)

# начало теста
test.echo_header('set_settings')

#1
print("1. Установить настройки пользователя")
settings = settingseditor.set_settings("User Info")
print("Получена строка в формате JSON: ")
print(settings)

# конец теста
print('\n<hr><br>')

# выход
app.quit()

add_setting_from_file

Добавить настройку из JSON файла (если настройка существует, она заменяется на новую)

add_setting_from_file(string path)
path Путь к файлу

Описание возврата: Логический результат выполнения операции

Примеры использования
<?php
// инициализация
$xhe_host = '127.0.0.1:7010';
$relative_app_dir = '..\\..\\..\\';
require($relative_app_dir.'Templates/init.php');
include($relative_app_dir.'Templates/_for_tests_.php');

$bUTF8Ver = true;
$PHP_Use_Trought_Shell = true;

// рабочая папка
$script_folder = $debug->get_cur_script_folder();
// отсносительный путь
$app_dir = realpath($script_folder.$relative_app_dir);
// тестовые данные
$test = new _for_tests_($script_folder, $settingseditor);

// начало теста
$test->echo_header('add_setting_from_file');

$filepath = $test->get_test_file_full_path('test_file.json');

//1 Добавить новую настройку из файла
$result = $settingseditor->add_setting_from_file($filepath);

// конец теста
echo "\n<hr><br>";

// выход
$app->quit();
?>
// связь с платформой
xhe_host = '127.0.0.1:7014'
_path = require('path')
relative_app_dir = '..\\..\\..\\'
echo = require(_path.join(relative_app_dir, 'Templates JS', 'init.js'))
_for_tests_ = require(_path.join(relative_app_dir, 'Templates JS', '_for_tests_.js'))

// рабочая папка
script_folder = debug.get_cur_script_folder()
// отсносительны йпуть
app_dir = _path.resolve(_path.join(script_folder, relative_app_dir))
// тестовые данные
test = new _for_tests_(script_folder, settingseditor)

// начало теста
test.echo_header('add_setting_from_file')

filepath = test.get_test_file_full_path('test_file.json')

//1 Добавить новую настройку из файла
result = settingseditor.add_setting_from_file(filepath)

// конец теста
echo('\n<hr><br>')

// выход
app.quit()
# дополнительные пути
import sys, os
relative_app_dir = '..\\..\\..\\'
sys.path.append(os.path.join(relative_app_dir, 'Templates PY'))

# связь с платофрмой
xhe_host = '127.0.0.1:7010'
from xweb_human_emulator import *
from _for_tests_ import _for_tests_

# рабочая папка
script_folder = debug.get_cur_script_folder()
# относительный путь
app_dir = os.path.abspath(os.path.join(script_folder, relative_app_dir))

# тестовые данные
test = _for_tests_(script_folder, settingseditor)

# начало теста
test.echo_header('add_setting_from_file')

filepath = test.get_test_file_full_path('test_file.json')

#1 Добавить новую настройку из файла
result = settingseditor.add_setting_from_file(filepath)

# конец теста
print('\n<hr><br>')

# выход
app.quit()

add_setting_from_json

Добавить настройку из строки JSON

add_setting_from_json(string json)
json Строка JSON

Описание возврата: Логический результат выполнения операции

Примеры использования
<?php
// инициализация
$xhe_host = '127.0.0.1:7010';
$relative_app_dir = '..\\..\\..\\';
require($relative_app_dir.'Templates/init.php');
include($relative_app_dir.'Templates/_for_tests_.php');

$bUTF8Ver = true;
$PHP_Use_Trought_Shell = true;

// рабочая папка
$script_folder = $debug->get_cur_script_folder();
// отсносительный путь
$app_dir = realpath($script_folder.$relative_app_dir);
// тестовые данные
$test = new _for_tests_($script_folder, $settingseditor);

// начало теста
$test->echo_header('add_setting_from_json');

$xjson = '{
  "Name": "Test Setting",
  "Items": [
    {
      "Id": 1,
      "SettingsControl": "CheckBox",
      "PlaceHolder": "Получать уведомления?",
      "PropertyName": "ReceiveNotifications",
      "IsRequired": "false",
      "SettingsOptions": {
        "DefaultValue": "True"
      }
    }
  ]
}';
$result = $settingseditor->add_setting_from_json($xjson);

// конец теста
echo "\n<hr><br>";

// выход
$app->quit();
?>
// связь с платформой
xhe_host = '127.0.0.1:7014'
_path = require('path')
relative_app_dir = '..\\..\\..\\'
echo = require(_path.join(relative_app_dir, 'Templates JS', 'init.js'))
_for_tests_ = require(_path.join(relative_app_dir, 'Templates JS', '_for_tests_.js'))

// рабочая папка
script_folder = debug.get_cur_script_folder()
// отсносительны йпуть
app_dir = _path.resolve(_path.join(script_folder, relative_app_dir))
// тестовые данные
test = new _for_tests_(script_folder, settingseditor)

// начало теста
test.echo_header('add_setting_from_json')

xjson = `{
  "Name": "Test Setting",
  "Items": [
    {
      "Id": 1,
      "SettingsControl": "CheckBox",
      "PlaceHolder": "Получать уведомления?",
      "PropertyName": "ReceiveNotifications",
      "IsRequired": "false",
      "SettingsOptions": {
        "DefaultValue": "True"
      }
    }
  ]
}`
result = settingseditor.add_setting_from_json(xjson)

// конец теста
echo('\n<hr><br>')

// выход
app.quit()
# дополнительные пути
import sys, os
relative_app_dir = '..\\..\\..\\'
sys.path.append(os.path.join(relative_app_dir, 'Templates PY'))

# связь с платофрмой
xhe_host = '127.0.0.1:7010'
from xweb_human_emulator import *
from _for_tests_ import _for_tests_

# рабочая папка
script_folder = debug.get_cur_script_folder()
# относительный путь
app_dir = os.path.abspath(os.path.join(script_folder, relative_app_dir))

# тестовые данные
test = _for_tests_(script_folder, settingseditor)

# начало теста
test.echo_header('add_setting_from_json')

xjson = {
  "Name": "Test Setting",
  "Items": [
    {
      "Id": 1,
      "SettingsControl": "CheckBox",
      "PlaceHolder": "Получать уведомления?",
      "PropertyName": "ReceiveNotifications",
      "IsRequired": "false",
      "SettingsOptions": {
        "DefaultValue": "True"
      }
    }
  ]
}
result = settingseditor.add_setting_from_json(xjson)

# конец теста
print('\n<hr><br>')

# выход
app.quit()

is_exist

Проеряет существует ли шаблон настройки по указанному имени

is_exist(string settings_name)
settings_name Название шаблона настройки по которому будут заполняться настройки

Описание возврата: True - если настройка существует

Примеры использования
<?php
// инициализация
$xhe_host = '127.0.0.1:7010';
$relative_app_dir = '..\\..\\..\\';
require($relative_app_dir.'Templates/init.php');
include($relative_app_dir.'Templates/_for_tests_.php');

$bUTF8Ver = true;
$PHP_Use_Trought_Shell = true;

// рабочая папка
$script_folder = $debug->get_cur_script_folder();
// отсносительный путь
$app_dir = realpath($script_folder.$relative_app_dir);
// тестовые данные
$test = new _for_tests_($script_folder, $settingseditor);

// начало теста
$test->echo_header('is_exist');

//1
echo "1. Проверить, существует ли настройка\n";
$settings = $settingseditor->is_exist("User Info");

// конец теста
echo "\n<hr><br>";

// выход
$app->quit();
?>
// связь с платформой
xhe_host = '127.0.0.1:7014'
_path = require('path')
relative_app_dir = '..\\..\\..\\'
echo = require(_path.join(relative_app_dir, 'Templates JS', 'init.js'))
_for_tests_ = require(_path.join(relative_app_dir, 'Templates JS', '_for_tests_.js'))

// рабочая папка
script_folder = debug.get_cur_script_folder()
// отсносительны йпуть
app_dir = _path.resolve(_path.join(script_folder, relative_app_dir))
// тестовые данные
test = new _for_tests_(script_folder, settingseditor)

// начало теста
test.echo_header('is_exist')

//1
echo("1. Проверить, существует ли настройка\n")
settings = settingseditor.is_exist("User Info")

// конец теста
echo('\n<hr><br>')

// выход
app.quit()
# дополнительные пути
import sys, os
relative_app_dir = '..\\..\\..\\'
sys.path.append(os.path.join(relative_app_dir, 'Templates PY'))

# связь с платофрмой
xhe_host = '127.0.0.1:7010'
from xweb_human_emulator import *
from _for_tests_ import _for_tests_

# рабочая папка
script_folder = debug.get_cur_script_folder()
# относительный путь
app_dir = os.path.abspath(os.path.join(script_folder, relative_app_dir))

# тестовые данные
test = _for_tests_(script_folder, settingseditor)

# начало теста
test.echo_header('is_exist')

#1
print("1. Проверить, существует ли настройка")
settings = settingseditor.is_exist("User Info")

# конец теста
print('\n<hr><br>')

# выход
app.quit()