On Thursday, 5 March 2020 at 07:01:27 UTC, Виталий Фадеев wrote:
On Thursday, 5 March 2020 at 06:48:53 UTC, Виталий Фадеев wrote:
Searching for beauty code implementation.

Goal is: Create new object with "custom initializer".

"custom initializer" - is function, executed in _ctor, in object scope.

Main Goal is: "clean readable beauty code".

Like this and better:


class DataGrid : Base
{
    this()
    {
        super();

        CR!VBoxLayout({
            sizeWidthMode  = SIZE_MODE.PARENT;
            sizeHeightMode = SIZE_MODE.PARENT;

            CR!GridLayout({
                id             = "grid";
                sizeWidthMode  = SIZE_MODE.PARENT;
                sizeHeightMode = SIZE_MODE.FIXED;
                h              = 400;
            });

            CR!HCenterLayout({
                CR!(Pager!TextButton) ({
                   id = "pager";
                });
            });
        });
    }
}


class Base
{
    T CR( T, F )( F func )
    {
        auto c = new T();
        c.Apply( func );
        return c;
    }

    void Apply( F )( F func )
    {
        func();
    }
}

In code above created tree and configured nodes.

Trouble in code above is: "custom initializer" - executed in DataGrid context.

How to execute "custom initializer" in VBoxLayout context and keep readable beauty ?

Conceptual question.

How to implement next pseudo-code in D ?

        VBoxLayout
            sizeWidthMode  = SIZE_MODE.PARENT
            sizeHeightMode = SIZE_MODE.PARENT

            GridLayout
                id             = "grid"
                sizeWidthMode  = SIZE_MODE.PARENT
                sizeHeightMode = SIZE_MODE.FIXED
                h              = 400

            HCenterLayout
                Pager!TextButton
                   id = "pager"

Thank!
Now using like this:

        with ( CR!VBoxLayout )
        {
            sizeWidthMode  = SIZE_MODE.PARENT;
            sizeHeightMode = SIZE_MODE.PARENT;

            with ( CR!GridLayout )
            {
                id             = "grid";
                sizeWidthMode  = SIZE_MODE.PARENT;
                sizeHeightMode = SIZE_MODE.FIXED;
                h              = 400;
            }

            with ( CR!HCenterLayout )
            {
                with ( CR!( Pager!TextButton ) )
                {
                   id = "pager";
                }
            }
        }


Reply via email to