    /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
    /*
     * This file is part of the LibreOffice project.
     *
     * This Source Code Form is subject to the terms of the Mozilla Public
     * License, v. 2.0. If a copy of the MPL was not distributed with this
     * file, You can obtain one at http://mozilla.org/MPL/2.0/.
     *
     * This file incorporates work covered by the following license notice:
     *
     *   Licensed to the Apache Software Foundation (ASF) under one or more
     *   contributor license agreements. See the NOTICE file distributed
     *   with this work for additional information regarding copyright
     *   ownership. The ASF licenses this file to you under the Apache
     *   License, Version 2.0 (the "License"); you may not use this file
     *   except in compliance with the License. You may obtain a copy of
     *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
     */

    #include "ColumnControl.hxx"
    #include "ColumnPeer.hxx"
    #include <stringconstants.hxx>
    #include <uiservices.hxx>
    #include <apitools.hxx>
    #include <com/sun/star/awt/PosSize.hpp>
    #include <dbu_reghelper.hxx>
    #include <comphelper/processfactory.hxx>

    extern "C" void createRegistryInfo_OColumnControl()
    {
        static ::dbaui::OMultiInstanceAutoRegistration< ::dbaui::OColumnControl> aAutoRegistration;
    }

    namespace dbaui
    {
    using namespace ::com::sun::star::uno;
    using namespace ::com::sun::star::awt;
    using namespace ::com::sun::star::beans;
    using namespace ::com::sun::star::lang;
    using namespace ::com::sun::star::sdbc;

    OColumnControl::OColumnControl(const Reference<XComponentContext>& rxContext)
        :UnoControl(), m_xContext(rxContext)
    {
    }

    IMPLEMENT_SERVICE_INFO_IMPLNAME_STATIC(OColumnControl, SERVICE_CONTROLDEFAULT)
    IMPLEMENT_SERVICE_INFO_SUPPORTS(OColumnControl)
    IMPLEMENT_SERVICE_INFO_GETSUPPORTED2_STATIC(OColumnControl, "com.sun.star.awt.UnoControl","com.sun.star.sdb.ColumnDescriptorControl")

    Reference< XInterface > OColumnControl::Create(const Reference< XMultiServiceFactory >& _rxORB)
    {
        return static_cast< XServiceInfo* >(new OColumnControl(comphelper::getComponentContext(_rxORB)));
    }

    OUString OColumnControl::GetComponentServiceName()
    {
        return OUString("com.sun.star.sdb.ColumnDescriptorControl");
    }

    void SAL_CALL OColumnControl::createPeer(const Reference< XToolkit >& /*rToolkit*/, const Reference< XWindowPeer >& rParentPeer)
    {
        ::osl::ClearableMutexGuard aGuard( GetMutex() );
        if ( !getPeer().is() )
        {
            mbCreatingPeer = true;

            vcl::Window* pParentWin = nullptr;
            if (rParentPeer.is())
            {
                VCLXWindow* pParent = VCLXWindow::GetImplementation(rParentPeer);
                if (pParent)
                    pParentWin = pParent->GetWindow().get();
            }

            OColumnPeer* pPeer = new OColumnPeer( pParentWin, m_xContext );
            OSL_ENSURE(pPeer != nullptr, "FmXGridControl::createPeer : imp_CreatePeer didn't return a peer !");
            setPeer( pPeer );

            UnoControlComponentInfos aComponentInfos(maComponentInfos);
            Reference< XGraphics > xGraphics( mxGraphics );
            Reference< XView >  xV(getPeer(), UNO_QUERY);
            Reference< XWindow >    xW(getPeer(), UNO_QUERY);

            aGuard.clear();

            updateFromModel();

            xV->setZoom( aComponentInfos.nZoomX, aComponentInfos.nZoomY );
            setPosSize( aComponentInfos.nX, aComponentInfos.nY, aComponentInfos.nWidth, aComponentInfos.nHeight, css::awt::PosSize::POSSIZE );

            Reference<XPropertySet> xProp(getModel(), UNO_QUERY);
            if ( xProp.is() )
            {
                Reference<XConnection> xCon(xProp->getPropertyValue(PROPERTY_ACTIVE_CONNECTION),UNO_QUERY);
                pPeer->setConnection(xCon);
                Reference<XPropertySet> xColumn(xProp->getPropertyValue(PROPERTY_COLUMN),UNO_QUERY);
                pPeer->setColumn(xColumn);
                sal_Int32 nWidth = 50;
                xProp->getPropertyValue(PROPERTY_EDIT_WIDTH) >>= nWidth;
                pPeer->setEditWidth(nWidth);
            }

            if (aComponentInfos.bVisible)
                xW->setVisible(true);

            if (!aComponentInfos.bEnable)
                xW->setEnable(false);

            if (maWindowListeners.getLength())
                xW->addWindowListener( &maWindowListeners );

            if (maFocusListeners.getLength())
                xW->addFocusListener( &maFocusListeners );

            if (maKeyListeners.getLength())
                xW->addKeyListener( &maKeyListeners );

            if (maMouseListeners.getLength())
                xW->addMouseListener( &maMouseListeners );

            if (maMouseMotionListeners.getLength())
                xW->addMouseMotionListener( &maMouseMotionListeners );

            if (maPaintListeners.getLength())
                xW->addPaintListener( &maPaintListeners );

            Reference< css::awt::XView >  xPeerView(getPeer(), UNO_QUERY);
            xPeerView->setZoom( maComponentInfos.nZoomX, maComponentInfos.nZoomY );
            xPeerView->setGraphics( xGraphics );

            mbCreatingPeer = false;
        }
    }

    }   // namespace dbaui

    /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

↑ V572 It is odd that the object which was created using 'new' operator is immediately cast to another type.