146 lines
4.7 KiB
C++
146 lines
4.7 KiB
C++
/* -*- 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 "ColumnPeer.hxx"
|
|
#include <ColumnControlWindow.hxx>
|
|
#include <vcl/svapp.hxx>
|
|
#include <strings.hxx>
|
|
#include <FieldDescriptions.hxx>
|
|
|
|
namespace dbaui
|
|
{
|
|
using namespace ::com::sun::star::uno;
|
|
using namespace ::com::sun::star::beans;
|
|
using namespace ::com::sun::star::sdbc;
|
|
|
|
OColumnPeer::OColumnPeer(vcl::Window* _pParent,const Reference<XComponentContext>& _rxContext)
|
|
:m_pActFieldDescr(nullptr)
|
|
{
|
|
osl_atomic_increment( &m_refCount );
|
|
{
|
|
VclPtrInstance<OColumnControlTopLevel> pFieldControl(_pParent, _rxContext);
|
|
pFieldControl->SetComponentInterface(this);
|
|
pFieldControl->Show();
|
|
}
|
|
osl_atomic_decrement( &m_refCount );
|
|
}
|
|
|
|
void OColumnPeer::setEditWidth(sal_Int32 _nWidth)
|
|
{
|
|
SolarMutexGuard aGuard;
|
|
VclPtr<OColumnControlTopLevel> pFieldControl = GetAs<OColumnControlTopLevel>();
|
|
if ( pFieldControl )
|
|
pFieldControl->GetControl().setEditWidth(_nWidth);
|
|
}
|
|
|
|
void OColumnPeer::setColumn(const Reference< XPropertySet>& _xColumn)
|
|
{
|
|
SolarMutexGuard aGuard;
|
|
|
|
VclPtr<OColumnControlTopLevel> pFieldControl = GetAs<OColumnControlTopLevel>();
|
|
if ( !pFieldControl )
|
|
return;
|
|
|
|
OColumnControlWindow& rControl = pFieldControl->GetControl();
|
|
|
|
if ( m_pActFieldDescr )
|
|
{
|
|
delete m_pActFieldDescr;
|
|
m_pActFieldDescr = nullptr;
|
|
}
|
|
if ( _xColumn.is() )
|
|
{
|
|
sal_Int32 nType = 0;
|
|
sal_Int32 nScale = 0;
|
|
sal_Int32 nPrecision = 0;
|
|
bool bAutoIncrement = false;
|
|
OUString sTypeName;
|
|
|
|
try
|
|
{
|
|
// get the properties from the column
|
|
_xColumn->getPropertyValue(PROPERTY_TYPENAME) >>= sTypeName;
|
|
_xColumn->getPropertyValue(PROPERTY_TYPE) >>= nType;
|
|
_xColumn->getPropertyValue(PROPERTY_SCALE) >>= nScale;
|
|
_xColumn->getPropertyValue(PROPERTY_PRECISION) >>= nPrecision;
|
|
_xColumn->getPropertyValue(PROPERTY_ISAUTOINCREMENT) >>= bAutoIncrement;
|
|
}
|
|
catch(const Exception&)
|
|
{
|
|
}
|
|
|
|
m_pActFieldDescr = new OFieldDescription(_xColumn,true);
|
|
// search for type
|
|
bool bForce;
|
|
TOTypeInfoSP pTypeInfo = ::dbaui::getTypeInfoFromType(*rControl.getTypeInfo(),nType,sTypeName,u"x"_ustr,nPrecision,nScale,bAutoIncrement,bForce);
|
|
if ( !pTypeInfo )
|
|
pTypeInfo = rControl.getDefaultTyp();
|
|
|
|
m_pActFieldDescr->FillFromTypeInfo(pTypeInfo,true,false);
|
|
m_xColumn = _xColumn;
|
|
}
|
|
rControl.DisplayData(m_pActFieldDescr);
|
|
}
|
|
|
|
void OColumnPeer::setConnection(const Reference< XConnection>& _xCon)
|
|
{
|
|
SolarMutexGuard aGuard;
|
|
VclPtr<OColumnControlTopLevel> pFieldControl = GetAs<OColumnControlTopLevel>();
|
|
if ( pFieldControl )
|
|
pFieldControl->GetControl().setConnection(_xCon);
|
|
}
|
|
|
|
void OColumnPeer::setProperty( const OUString& _rPropertyName, const Any& Value)
|
|
{
|
|
SolarMutexGuard aGuard;
|
|
|
|
if (_rPropertyName == PROPERTY_COLUMN)
|
|
{
|
|
Reference<XPropertySet> xProp(Value,UNO_QUERY);
|
|
setColumn(xProp);
|
|
}
|
|
else if (_rPropertyName == PROPERTY_ACTIVE_CONNECTION)
|
|
{
|
|
Reference<XConnection> xCon(Value,UNO_QUERY);
|
|
setConnection(xCon);
|
|
}
|
|
else
|
|
VCLXWindow::setProperty(_rPropertyName,Value);
|
|
}
|
|
|
|
Any OColumnPeer::getProperty( const OUString& _rPropertyName )
|
|
{
|
|
Any aProp;
|
|
VclPtr<OColumnControlTopLevel> pFieldControl = GetAs<OColumnControlTopLevel>();
|
|
if (pFieldControl && _rPropertyName == PROPERTY_COLUMN)
|
|
{
|
|
aProp <<= m_xColumn;
|
|
}
|
|
else if (pFieldControl && _rPropertyName == PROPERTY_ACTIVE_CONNECTION)
|
|
{
|
|
aProp <<= pFieldControl->GetControl().getConnection();
|
|
}
|
|
else
|
|
aProp = VCLXWindow::getProperty(_rPropertyName);
|
|
return aProp;
|
|
}
|
|
|
|
} // namespace dbaui
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|