CGUIListItem* CGUIGridList_Impl::GetItem ( int iRow, int hColumn )
{
    try
    {
        CEGUI::MultiColumnList* pMultiColumnList = reinterpret_cast < CEGUI::MultiColumnList* > ( m_pWindow );
        if ( (uint)iRow >= pMultiColumnList->getRowCount() || (uint)GetColumnIndex( hColumn ) >= pMultiColumnList->getColumnCount() )
            return NULL;

        // Grab the item at the chosen row / column
        CEGUI::ListboxItem* pItem = reinterpret_cast < CEGUI::MultiColumnList* > ( m_pWindow ) -> getItemAtGridReference ( CEGUI::MCLGridRef ( iRow, GetColumnIndex ( hColumn ) ) );

        // If it exists, get the CGUIListItem by using the pool
        if ( pItem )
        {
            return GetListItem ( pItem );
        }
    }
    catch ( CEGUI::Exception )
    {}

    return NULL;
}
const char* CGUIGridList_Impl::GetItemText ( int iRow, int hColumn )
{
    try
    {
        CEGUI::MultiColumnList* pMultiColumnList = reinterpret_cast < CEGUI::MultiColumnList* > ( m_pWindow );
        if ( (uint)iRow >= pMultiColumnList->getRowCount() || (uint)GetColumnIndex( hColumn ) >= pMultiColumnList->getColumnCount() )
            return "";

        // Grab the item at the chosen row / column
        CEGUI::ListboxItem* pItem = reinterpret_cast < CEGUI::MultiColumnList* > ( m_pWindow ) -> getItemAtGridReference ( CEGUI::MCLGridRef ( iRow, GetColumnIndex ( hColumn ) ) );
        if ( pItem )
        {
            const char *szRet = pItem->getText().c_str ();

            if ( !m_bIgnoreTextSpacer )
            {
                unsigned char ucSpacerSize = (unsigned char)(strlen ( CGUIGRIDLIST_SPACER ));

                if ( GetColumnIndex ( hColumn ) == 0 ) {
                    // Make sure there is a spacer to skip
                    if ( strncmp ( szRet, CGUIGRIDLIST_SPACER, strlen ( CGUIGRIDLIST_SPACER ) ) == 0 )
                        szRet += ucSpacerSize;
                }
            }

            return szRet;
        }
    }
    catch ( CEGUI::Exception )
    {
        return "";
    }

    return "";
}
void
sge::cegui::toolbox::append_row(
    CEGUI::MultiColumnList &_list,
    sge::cegui::toolbox::row const &_mapper
)
{
    FCPPT_ASSERT_PRE(
        static_cast<
        sge::cegui::toolbox::row::size_type
        >(
            _list.getColumnCount()
        )
        ==
        _mapper.size()
    );

    FCPPT_ASSERT_PRE(
        !_mapper.empty()
    );

    CEGUI::uint const index(
        _list.addRow(
            new CEGUI::ListboxTextItem(
                _mapper[
                    0
                ],
                0,
                nullptr
            ),
            0
        )
    );

    for(
        sge::cegui::toolbox::row::size_type const cur
        :
        fcppt::make_int_range(
            fcppt::literal<
            sge::cegui::toolbox::row::size_type
            >(
                1u
            ),
            _mapper.size()
        )
    )
        _list.setItem(
            new CEGUI::ListboxTextItem(
                _mapper[
                    cur
                ],
                0,
                nullptr
            ),
            static_cast<
            CEGUI::uint
            >(
                cur
            ),
            index
        );
}