module ui.Tab;

import ui.Control;

class Tab : Control {
    import std.string: toStringz;

    protected uiTab * _tab;

    this() {
        _tab = uiNewTab();
        super(cast(uiControl *) _tab);
    }

    Tab append(string name, Control child) {
        import std.exception: enforce;
        enforce(child, "atempt to append a child which is null.");
        _children ~= child;
        child._parent = this;
        uiTabAppend(_tab, name.toStringz, child._control);
        return this;
    }

    Tab insertAt(string name, size_t before, Control child) {
        import std.exception: enforce;
        enforce(child, "atempt to insert a child which is null.");
        _children = _children[0..before] ~ child ~ _children[before..$];
        child._parent = this;
        uiTabInsertAt(_tab, name.toStringz, cast(int) before, child._control);
        return this;
    }
    
    Tab deleteByIndex(size_t index) {
        import std.algorithm: remove;
        _children[index]._parent = null;
        _children.remove(index);
        uiTabDelete(_tab, cast(int) index);
        return this;
    }

    size_t numPages() {
        return cast(size_t) uiTabNumPages(_tab);
    }

    bool margined(size_t page) {
        return cast(bool) uiTabMargined(_tab, cast(int) page);
    }

    Tab setMargined(size_t page, bool margined) {
        uiTabSetMargined(_tab, cast(int) page, cast(int) margined);
        return this;
    }
}