Skip to content

Commit 1aa43b2

Browse files
committed
upd
1 parent b06eae4 commit 1aa43b2

17 files changed

+1350
-1129
lines changed

README.md

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ ESP8266, ESP32
3636
> Подключение в проект библиотеки FastLED версии старше [3.7.8](https://github.com/GyverLibs/Settings/issues/35#issuecomment-2691839527) ломает вебсервер! Ждём фиксов со стороны ESP или FastLED
3737
3838
### Зависимости
39-
- [GTL](https://github.com/GyverLibs/GTL) v1.2.1+
40-
- [GyverDB](https://github.com/GyverLibs/GyverDB) v1.2.3+
39+
- [GTL](https://github.com/GyverLibs/GTL) v1.3.0+
40+
- [GyverDB](https://github.com/GyverLibs/GyverDB) v1.3.0+
4141
- [StringUtils](https://github.com/GyverLibs/StringUtils) v1.4.30+
42-
- [GyverHTTP](https://github.com/GyverLibs/GyverHTTP) v1.0.23+
43-
- [BSON](https://github.com/GyverLibs/BSON) v2.0.5+
42+
- [GyverHTTP](https://github.com/GyverLibs/GyverHTTP) v1.0.26+
43+
- [BSON](https://github.com/GyverLibs/BSON) v2.1.0+
4444
- [Stamp](https://github.com/GyverLibs/Stamp) v1.4.0+
45-
- [Table](https://github.com/GyverLibs/Table) v1.1.0+
45+
- [Table](https://github.com/GyverLibs/Table) v1.2.0+
4646
- [StreamIO](https://github.com/GyverLibs/StreamIO) v1.0.5+
4747

4848
> [!TIP]
@@ -135,10 +135,6 @@ ESP8266, ESP32
135135
- Добавлен минимум и максимум в Number
136136
- Мелкие исправления и улучшения
137137

138-
## Благодарочки
139-
- Александр Инфинити - материальная поддержка проекта, идеи
140-
- TontonMacout - идеи, десктопное приложение
141-
142138
## Баги и обратная связь
143139
При нахождении багов создавайте **Issue**, а лучше сразу пишите на почту [[email protected]](mailto:[email protected])
144140
Библиотека открыта для доработки и ваших **Pull Request**'ов!

docs/1.main.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,9 @@ void endGroup();
171171
bool beginMenu(Text title);
172172
void endMenu();
173173
174+
// true, если в вебморде было открыто текущее меню
175+
bool enterMenu();
176+
174177
// горизонтальная группа виджетов [DivType::Line | DivType::Block]
175178
bool beginRow(Text title = Text(), DivType divtype = DivType::Default);
176179
void endRow();
@@ -322,6 +325,11 @@ bool Time(Text label = "", uint32_t* value = nullptr);
322325
bool DateTime(size_t id, Text label = "", uint32_t* value = nullptr, float zone_hours = NAN);
323326
bool DateTime(Text label = "", uint32_t* value = nullptr, float zone_hours = NAN);
324327
328+
// ================= SPINNER =================
329+
// сипннер [результат - число], подключаемая переменная - любой тип
330+
bool Spinner(size_t id, Text label = "", float min = 0, float max = 100, float step = 1, AnyPtr value = nullptr);
331+
bool Spinner(Text label = "", float min = 0, float max = 100, float step = 1, AnyPtr value = nullptr);
332+
325333
// ================= SLIDER =================
326334
// слайдер [результат - число], подключаемая переменная - любой тип
327335
bool Slider(size_t id, Text label = "", float min = 0, float max = 100, float step = 1, Text unit = Text(), AnyPtr value = nullptr, uint32_t color = SETS_DEFAULT_COLOR);
@@ -332,12 +340,17 @@ bool Slider(Text label, float min, float max, float step, Text unit, AnyPtr valu
332340
// двойной слайдер [результат - число], подключаемая переменная - любой тип
333341
bool Slider2(size_t id_min, size_t id_max, Text label = "", float min = 0, float max = 100, float step = 1, Text unit = Text(), AnyPtr value_min = nullptr, AnyPtr value_max = nullptr, uint32_t color = SETS_DEFAULT_COLOR);
334342
bool Slider2(size_t id_min, size_t id_max, Text label, float min, float max, float step, Text unit, AnyPtr value_min, AnyPtr value_max, Colors color);
343+
bool Slider2(Text label = "", float min = 0, float max = 100, float step = 1, Text unit = Text(), AnyPtr value_min = nullptr, AnyPtr value_max = nullptr, uint32_t color = SETS_DEFAULT_COLOR);
344+
bool Slider2(Text label, float min, float max, float step, Text unit, AnyPtr value_min, AnyPtr value_max, Colors color);
335345
336346
// ================= SELECT =================
337347
// опции разделяются ; или \n [результат - индекс (число)]
338348
bool Select(size_t id, Text label, Text options, AnyPtr value = nullptr);
339349
bool Select(Text label, Text options, AnyPtr value = nullptr);
340350
351+
// опции разделяются ; или \n [результат - строка]
352+
bool SelectText(Text label, Text options);
353+
341354
// ================= TABS =================
342355
// опции разделяются ; или \n [результат - индекс (число)]
343356
bool Tabs(size_t id, Text tabs, AnyPtr value = nullptr);

docs/2.start.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
Библиотека доступна в менеджере библиотек Arduino и PlatformIO
33

44
### Зависимости
5-
- [GTL](https://github.com/GyverLibs/GTL) v1.2.1+
6-
- [GyverDB](https://github.com/GyverLibs/GyverDB) v1.2.3+
5+
- [GTL](https://github.com/GyverLibs/GTL) v1.3.0+
6+
- [GyverDB](https://github.com/GyverLibs/GyverDB) v1.3.0+
77
- [StringUtils](https://github.com/GyverLibs/StringUtils) v1.4.30+
8-
- [GyverHTTP](https://github.com/GyverLibs/GyverHTTP) v1.0.23+
9-
- [BSON](https://github.com/GyverLibs/BSON) v2.0.5+
8+
- [GyverHTTP](https://github.com/GyverLibs/GyverHTTP) v1.0.26+
9+
- [BSON](https://github.com/GyverLibs/BSON) v2.1.0+
1010
- [Stamp](https://github.com/GyverLibs/Stamp) v1.4.0+
11-
- [Table](https://github.com/GyverLibs/Table) v1.1.0+
11+
- [Table](https://github.com/GyverLibs/Table) v1.2.0+
1212
- [StreamIO](https://github.com/GyverLibs/StreamIO) v1.0.5+
1313

1414
> [!TIP]

docs/4.widgets.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,9 @@ b.Input("", nullptr, R"(^\d+$)", "Только цифры");
228228
### Time
229229
Принимает и отправляет время в секундах с начала суток независимо от часового пояса.
230230

231+
### Spinner
232+
Как Number, но с кнопками + и -, увеличивают значение на заданный шаг.
233+
231234
### Slider
232235
Слайдер для ввода значений, при движении отправляет значения с указанным в настройках вебморды периодом. Строка результата кликабельная, можно задать значение вручную - подчиняется настройкам min/max/step.
233236

@@ -245,6 +248,21 @@ b.Input("", nullptr, R"(^\d+$)", "Только цифры");
245248
> [!TIP]
246249
> Список опций (в том числе в группе) может заканчиваться `;` - пустая опция добавлена не будет. Это позволяет удобно "собирать" список опций, прибавляя к строке опций `"опция;"` (сразу с разделителем на конце), например `"опция;опция;опция;"`
247250
251+
### SelectText
252+
То же самое что Select, но является просто выбором из списка, не хранит выбранный пункт - просто отправляет его. Прочитать можно в `b.build.value` - `if (b.SelectText("", "foo;bar;option")) Serial.println(b.build.value);`.
253+
254+
Например вот так можно сделать выбор файла и открытие при выборе:
255+
256+
```cpp
257+
if (b.SelectText("Select file", sett.fs.listDir())) {
258+
File f = sett.fs.openRead(b.build.value.c_str());
259+
Serial.print("File ");
260+
Serial.print(b.build.value);
261+
Serial.print(" size ");
262+
Serial.println(f.size());
263+
}
264+
```
265+
248266
### Tabs
249267
Вкладки, принимает и отправляет индекс вкладки (начиная с 0). Имена вкладок передаются в виде строки с разделителем `;`: `"tab 1;tab 2;my tab"`. Если вкладок слишком много - их можно перемещать пальцем и курсором. Вернёт `true` при клике по вкладке. Далее в программе можно строить билдер по условиям или в `switch` исходя из значения вкладки.
250268

docs/5.containers.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,26 @@ void build(sets::Builder& b) {
5454
}
5555
```
5656

57+
Когда пользователь входит в меню - вызывается билдер, для того чтобы можно было например обновить некоторые поля внутри этого меню. Для опроса события входа используется `b.enterMenu()`:
58+
59+
```cpp
60+
{
61+
sets::Menu m(b, "menu 1");
62+
if (b.enterMenu()) Serial.println("menu 1");
63+
// b.Input();
64+
}
65+
{
66+
sets::Menu m(b, "menu 2");
67+
if (b.enterMenu()) Serial.println("menu 2");
68+
// b.Input();
69+
{
70+
sets::Menu m(b, "menu 2.1");
71+
if (b.enterMenu()) Serial.println("menu 2.1");
72+
// b.Input();
73+
}
74+
}
75+
```
76+
5777
### Строка
5878
Можно располагать виджеты горизонтально в строку, у них может быть общее название. Вне группы строка получит белый фон. Если у виджета задано название - он будет пытаться растянуться на всю ширину, если нет - то не будет. Частый вариант использования - первый виджет с названием, остальные мелкие без:
5979

docs/7.other.md

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,28 @@ void loop() {
5757
Serial.println(sett.rtc.toString());
5858
}
5959
}
60-
```
60+
```
61+
62+
## Другой вебсервер
63+
Можно поднять библиотеку на любом вебсервере, для этого нужно наследоваться от `sets::SettingsBase` и реализовать нужные методы по аналогии со стандартными `SettingsGyver`, `SettingsESP` и проч.
64+
65+
Самый простой вариант - сделать класс на базе `SettingsT` - он использует вебсервер `GyverHTTP` на базе любого указанного стороннего сервера и клиента:
66+
67+
```cpp
68+
#include "SettingsT.h"
69+
70+
class MySettings : public SettingsT<MyServer, MyClient> {
71+
public:
72+
using SettingsT<MyServer, MyClient>::SettingsT;
73+
74+
private:
75+
String getMac() override {
76+
// mac адрес для приложения поиска Settings Discover (необязательно)
77+
}
78+
int getRSSI() override {
79+
// качество связи в % (необязательно)
80+
}
81+
};
82+
```
83+
84+
где `MyServer` и `MyClient` - класс сервера и клиента для вашей реализации связи, например классы от Ethernet модуля.

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Settings
2-
version=1.3.2
2+
version=1.3.3
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Simple UI webface builder for esp8266/esp32

src/SettingsAsync.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,16 @@ class SettingsAsync : public sets::SettingsBase {
142142
sets::DnsWrapper _dns;
143143
File _file;
144144

145+
String getMac() override {
146+
return WiFi.macAddress();
147+
}
148+
int getRSSI() override {
149+
return constrain(2 * (WiFi.RSSI() + 100), 0, 100);
150+
}
151+
IPAddress getIP() override {
152+
return WiFi.localIP();
153+
}
154+
145155
void answer(uint8_t *data, size_t len) override {
146156
if (_response) _response->write(data, len);
147157
}

src/SettingsESP.h

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
#include <WebServer.h>
1111
#endif
1212

13-
#include "./core/SettingsBase.h"
1413
#include "./core/DnsWrapper.h"
14+
#include "./core/SettingsBase.h"
1515
#include "./core/ota.h"
1616
#include "./web/settings.h"
1717

@@ -149,6 +149,16 @@ class SettingsESP : public sets::SettingsBase {
149149
File _file;
150150
bool _first = true;
151151

152+
String getMac() override {
153+
return WiFi.macAddress();
154+
}
155+
int getRSSI() override {
156+
return constrain(2 * (WiFi.RSSI() + 100), 0, 100);
157+
}
158+
IPAddress getIP() override {
159+
return WiFi.localIP();
160+
}
161+
152162
void answer(uint8_t* data, size_t len) override {
153163
if (_first) {
154164
_first = false;

src/SettingsGyver.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,15 @@
66
class SettingsGyver : public SettingsT<WiFiServer, WiFiClient> {
77
public:
88
using SettingsT<WiFiServer, WiFiClient>::SettingsT;
9+
10+
private:
11+
String getMac() override {
12+
return WiFi.macAddress();
13+
}
14+
int getRSSI() override {
15+
return constrain(2 * (WiFi.RSSI() + 100), 0, 100);
16+
}
17+
IPAddress getIP() override {
18+
return WiFi.localIP();
19+
}
920
};

0 commit comments

Comments
 (0)