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

NameDescription
Setting Setting object
SettingsFile Settings object with file information