if ( m_xMultiplexer.is() )
{ // to all other paint, focus, etc.
m_xMultiplexer->disposeAndClear();
m_xMultiplexer.clear();
}
// set the service manager to disposed
WeakComponentImplHelper::dispose();
// release context and peer
m_xContext.clear(); if ( m_xPeer.is() )
{ if ( m_xGraphicsPeer.is() )
{
removePaintListener( this );
removeWindowListener( this );
m_xGraphicsPeer.clear();
}
// use method "BaseControl::getWindowDescriptor()" to change window attributes!
WindowDescriptor aDescriptor = impl_getWindowDescriptor( xParentPeer );
if ( m_bVisible )
{
aDescriptor.WindowAttributes |= WindowAttribute::SHOW;
}
// very slow under remote conditions! // create the window on the server
Reference< XToolkit > xLocalToolkit = xToolkit; if ( !xLocalToolkit.is() )
{ // but first create well known toolkit, if it not exist
xLocalToolkit.set( Toolkit::create(m_xComponentContext), UNO_QUERY_THROW );
}
m_xPeer = xLocalToolkit->createWindow( aDescriptor );
m_xPeerWindow.set( m_xPeer, UNO_QUERY );
if ( !m_xPeerWindow.is() ) return;
if ( m_xMultiplexer.is() )
{
m_xMultiplexer->setPeer( m_xPeerWindow );
}
// create new reference to xgraphics for painting on a peer // and add a paint listener
Reference< XDevice > xDevice( m_xPeerWindow, UNO_QUERY );
if ( xDevice.is() )
{
m_xGraphicsPeer = xDevice->createGraphics();
}
if ( m_xGraphicsPeer.is() )
{
addPaintListener( this );
addWindowListener( this );
}
void SAL_CALL BaseControl::setPosSize( sal_Int32 nX ,
sal_Int32 nY ,
sal_Int32 nWidth ,
sal_Int32 nHeight ,
sal_Int16 nFlags )
{ // - change size and position of window and save the values
// Ready for multithreading
MutexGuard aGuard( m_aMutex );
void SAL_CALL BaseControl::draw( sal_Int32 nX ,
sal_Int32 nY )
{ // Ready for multithreading
MutexGuard aGuard( m_aMutex );
// - paint to a view // - use the method "paint()" // - see also "windowPaint()"
impl_paint( nX, nY, m_xGraphicsView );
}
// XView
sal_Bool SAL_CALL BaseControl::setGraphics( const Reference< XGraphics >& xDevice )
{ // - set the graphics for a view // - in this class exist 2 graphics-member ... one for peer[_xGraphicsPeer] and one for view[_xGraphicsView] // - they are used by "windowPaint() and draw()", forwarded to "paint ()" bool bReturn = false; if ( xDevice.is() )
{ // Ready for multithreading
MutexGuard aGuard( m_aMutex );
// - release ALL references // - it must be !!! if ( m_xGraphicsPeer.is() )
{
removePaintListener( this );
removeWindowListener( this );
m_xGraphicsPeer.clear();
}
if ( m_xGraphicsView.is() )
{
m_xGraphicsView.clear();
}
}
// - repaint the peer // - use the method "paint ()" for painting on a peer and a print device !!! // - see also "draw ()"
impl_paint( 0, 0, m_xGraphicsPeer );
}
WindowDescriptor BaseControl::impl_getWindowDescriptor( const Reference< XWindowPeer >& xParentPeer )
{ // - used from "createPeer()" to set the values of a css::awt::WindowDescriptor !!! // - if you will change the descriptor-values, you must override this virtual function // - the caller must release the memory for this dynamical descriptor !!!
void BaseControl::impl_paint( sal_Int32 /*nX*/ ,
sal_Int32 /*nY*/ , const Reference< XGraphics >& /*xGraphics*/ )
{ // - one paint method for peer AND view !!! // (see also => "windowPaint()" and "draw()") // - not used in this implementation, but it's not necessary to make it pure virtual !!!
}
// protected method
void BaseControl::impl_recalcLayout( const WindowEvent& /*aEvent*/ )
{ // We need as virtual function to support automatically resizing of derived controls! // But we make it not pure virtual because it's not necessary for all derived classes!
}
// private method
OMRCListenerMultiplexerHelper* BaseControl::impl_getMultiplexer()
{ if ( !m_xMultiplexer.is() )
{
m_xMultiplexer = new OMRCListenerMultiplexerHelper( static_cast<XWindow*>(this), m_xPeerWindow );
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.