Module beamui.core.settings
Settings container, loader and saver.
Uses JSON by default, can be written/read to/from this format.
Map here is ordered, and can be indexed by number.
Has a lot of methods for convenient storing/accessing of settings.
Example
// create an empty setting
auto s = new Setting;
assert(s .isNull);
// now it returns only default values
assert(s .str is null);
assert(s .integer == 0);
assert(s .integerDef(25) == 25);
assert(s .boolean == false);
assert(s .strMap is null);
// and so on.
// let's make a settings tree
Setting p = s .add("properties");
Setting pos = p .add("position");
Setting font = p .add("font");
pos .add("x") .integer = 100;
pos .add("y") .integer = 50;
font .add("size") .integer = 15;
font .add("style") .str = "italic";
assert(s["properties"]["position"][0] .integer == 100);
// you can add a whole array
Setting arr = s .add("values");
arr .intArray = [0, 1, 4, 9, 16, 25];
assert(arr .length == 6);
assert(arr[4] .integer == 16);
// indexing never returns null - rather it returns a special dummy setting, which cannot be modified
assert(s[4] .isset == false);
s["key"] .integer = 50;
assert(s["key"] .integerDef(1) == 1);
// second `add` replaces existing item
Setting prev = pos["x"];
pos .add("x") .integer = 300;
assert(prev !is pos["x"]);
// but when you need just to change the value or the type, use indexing
pos["x"] .integer = 200;
// initialize an item with default value
pos .setup("z") .integer = 100;
// which does nothing if item is already present
pos .setup("x") .integer = 100;
assert(pos["x"] .integer == 200);
Import line
import beamui .core .settings;
Classes
Name | Description |
---|---|
Setting
|
Setting object |
SettingsFile
|
Settings object with file information |