summaryrefslogtreecommitdiff
path: root/framework/source/services
diff options
context:
space:
mode:
authorRüdiger Timm <rt@openoffice.org>2004-11-26 13:33:19 +0000
committerRüdiger Timm <rt@openoffice.org>2004-11-26 13:33:19 +0000
commit891c7f492abd527e5b4ff1a5d904cd118d324a12 (patch)
tree0738082c2b1af59dc894fb2a8b2b7e41012e9bf9 /framework/source/services
parent1d9213687e8666ef9edeb82e5ee7eec0e7a39517 (diff)
INTEGRATION: CWS recovery04 (1.74.38); FILE MERGED
2004/10/20 13:08:36 as 1.74.38.4: #i27726# redesign progress implementation after resync 2004/10/19 06:24:19 hro 1.74.38.3: #i28480# Resolved merge conflicts 2004/10/15 02:51:56 hro 1.74.38.2: RESYNC: (1.74-1.77); FILE MERGED 2004/07/23 13:46:26 hro 1.74.38.1: #i20882# Merging from recovery03
Diffstat (limited to 'framework/source/services')
-rw-r--r--framework/source/services/frame.cxx140
1 files changed, 85 insertions, 55 deletions
diff --git a/framework/source/services/frame.cxx b/framework/source/services/frame.cxx
index fdfd3207f56f..1cdc8cf1f6d2 100644
--- a/framework/source/services/frame.cxx
+++ b/framework/source/services/frame.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: frame.cxx,v $
*
- * $Revision: 1.78 $
+ * $Revision: 1.79 $
*
- * last change: $Author: obo $ $Date: 2004-11-16 14:54:13 $
+ * last change: $Author: rt $ $Date: 2004-11-26 14:33:19 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -58,6 +58,7 @@
*
*
************************************************************************/
+
//_________________________________________________________________________________________________________________
// my own includes
//_________________________________________________________________________________________________________________
@@ -130,6 +131,10 @@
// interface includes
//_________________________________________________________________________________________________________________
+#ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
+#include <com/sun/star/lang/XInitialization.hpp>
+#endif
+
#ifndef _COM_SUN_STAR_TASK_XJOBEXECUTOR_HPP_
#include <com/sun/star/task/XJobExecutor.hpp>
#endif
@@ -396,11 +401,7 @@ DEFINE_INIT_SERVICE ( Frame,
//-------------------------------------------------------------------------------------------------------------
// Create an initial layout manager
// Create layout manager and connect it to the newly created frame
- css::uno::Reference< drafts::com::sun::star::frame::XLayoutManager > xLayoutManager( m_xFactory->createInstance(
- rtl::OUString::createFromAscii(
- "drafts.com.sun.star.frame.LayoutManager" )),
- css::uno::UNO_QUERY );
- m_xLayoutManager = xLayoutManager;
+ m_xLayoutManager = css::uno::Reference< dcss::frame::XLayoutManager >(m_xFactory->createInstance(SERVICENAME_LAYOUTMANAGER), css::uno::UNO_QUERY);
}
)
@@ -673,13 +674,10 @@ void SAL_CALL Frame::setActiveFrame( const css::uno::Reference< css::frame::XFra
void SAL_CALL Frame::initialize( const css::uno::Reference< css::awt::XWindow >& xWindow ) throw( css::uno::RuntimeException )
{
/* UNSAFE AREA --------------------------------------------------------------------------------------------- */
- // Check incoming parameter.
- LOG_ASSERT2( implcp_initialize( xWindow ), "Frame::initialize()", "Invalid parameter detected!" )
-
- // if window is initially visible, we will never get a windowShowing event
- Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
- if ( pWindow && pWindow->IsVisible() )
- m_bIsHidden = sal_False;
+ if (!xWindow.is())
+ throw css::uno::RuntimeException(
+ ::rtl::OUString::createFromAscii("Frame::initialize() called without a valid container window reference."),
+ static_cast< css::frame::XFrame* >(this));
/* SAFE AREA ----------------------------------------------------------------------------------------------- */
WriteGuard aWriteLock( m_aLock );
@@ -696,30 +694,51 @@ void SAL_CALL Frame::initialize( const css::uno::Reference< css::awt::XWindow >&
LOG_ASSERT2( m_xContainerWindow.is()==sal_True, "Frame::initialize()", "Leak detected! This state should never occure ..." )
m_xContainerWindow = xWindow;
- // Now we can use our indicator factory helper to support XStatusIndicatorFactory interface.
- // We have a valid parent window for it!
- // Initialize helper.
- if( m_xContainerWindow.is() == sal_True )
- {
- css::uno::Reference< css::frame::XFrame > xFrame( static_cast< ::cppu::OWeakObject* >( this ), css::uno::UNO_QUERY );
- StatusIndicatorFactory* pIndicatorFactoryHelper = new StatusIndicatorFactory( m_xFactory, xFrame, sal_False );
- m_xIndicatorFactoryHelper = css::uno::Reference< css::task::XStatusIndicatorFactory >( static_cast< ::cppu::OWeakObject* >( pIndicatorFactoryHelper ), css::uno::UNO_QUERY );
- }
+ // if window is initially visible, we will never get a windowShowing event
+ Window* pWindow = VCLUnoHelper::GetWindow(xWindow);
+ if (pWindow && pWindow->IsVisible())
+ m_bIsHidden = sal_False;
- // Provide container window to our layout manager implementation
- if ( m_xLayoutManager.is() )
- {
- m_xLayoutManager->attachFrame( this );
- addFrameActionListener( css::uno::Reference< css::frame::XFrameActionListener >( m_xLayoutManager, css::uno::UNO_QUERY ));
- css::uno::Reference< drafts::com::sun::star::ui::XDockingAreaAcceptor > xDockingAreaAcceptor( static_cast< ::cppu::OWeakObject *>( new DockingAreaDefaultAcceptor( this )), css::uno::UNO_QUERY );
- m_xLayoutManager->setDockingAreaAcceptor( xDockingAreaAcceptor );
- }
+ css::uno::Reference< css::lang::XMultiServiceFactory > xSMGR = m_xFactory;
+ css::uno::Reference< dcss::frame::XLayoutManager > xLayoutManager = m_xLayoutManager;
// Release lock ... because we call some impl methods, which are threadsafe by himself.
// If we hold this lock - we will produce our own deadlock!
aWriteLock.unlock();
/* UNSAFE AREA --------------------------------------------------------------------------------------------- */
+ if (xLayoutManager.is())
+ {
+ // Provide container window to our layout manager implementation
+ xLayoutManager->attachFrame(this);
+ addFrameActionListener(css::uno::Reference< css::frame::XFrameActionListener >(xLayoutManager, css::uno::UNO_QUERY));
+ DockingAreaDefaultAcceptor* pAcceptor = new DockingAreaDefaultAcceptor(this);
+ css::uno::Reference< dcss::ui::XDockingAreaAcceptor > xDockingAreaAcceptor( static_cast< ::cppu::OWeakObject* >(pAcceptor), css::uno::UNO_QUERY );
+ xLayoutManager->setDockingAreaAcceptor(xDockingAreaAcceptor);
+
+ // create the status bar ... but dont show it here!
+ xLayoutManager->lock();
+ xLayoutManager->createElement( DECLARE_ASCII( "private:resource/statusbar/statusbar" ));
+ xLayoutManager->unlock();
+ }
+
+ // create progress helper
+ css::uno::Reference< css::frame::XFrame > xThis (static_cast< css::frame::XFrame* >(this) , css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::task::XStatusIndicatorFactory > xIndicatorFactory(xSMGR->createInstance(IMPLEMENTATIONNAME_STATUSINDICATORFACTORY), css::uno::UNO_QUERY_THROW);
+ css::uno::Reference< css::lang::XInitialization > xIndicatorInit (xIndicatorFactory , css::uno::UNO_QUERY_THROW);
+ css::uno::Sequence< css::uno::Any > lArgs(1);
+ css::beans::NamedValue aArg;
+ aArg.Name = STATUSINDICATORFACTORY_PROPNAME_FRAME;
+ aArg.Value <<= xThis;
+ lArgs[0] <<= aArg;
+ xIndicatorInit->initialize(lArgs);
+
+ // SAFE -> ----------------------------------
+ aWriteLock.lock();
+ m_xIndicatorFactoryHelper = xIndicatorFactory;
+ aWriteLock.unlock();
+ // <- SAFE ----------------------------------
+
// Start listening for events after setting it on helper class ...
// So superflous messages are filtered to NULL :-)
implts_startWindowListening();
@@ -1919,13 +1938,6 @@ void SAL_CALL Frame::dispose() throw( css::uno::RuntimeException )
impl_checkMenuCloser();
- /*ATTENTION
- It's neccessary to release our StatusIndicatorFactory-helper at first!
- He share our container window as parent for any created status indicator objects ...
- and if we dispose this container window before we release this helper ...
- we will run into some trouble!
- */
- m_xIndicatorFactoryHelper = NULL;
impl_disposeContainerWindow( m_xContainerWindow );
/*ATTENTION
@@ -1948,6 +1960,7 @@ void SAL_CALL Frame::dispose() throw( css::uno::RuntimeException )
m_xDropTargetListener = NULL;
m_xDispatchRecorderSupplier = NULL;
m_xLayoutManager = NULL;
+ m_xIndicatorFactoryHelper = NULL;
// It's important to set default values here!
// If may be later somewhere change the disposed-behaviour of this implementation
@@ -2031,28 +2044,21 @@ css::uno::Reference< css::task::XStatusIndicator > SAL_CALL Frame::createStatusI
ReadGuard aReadLock( m_aLock );
// Make snapshot of neccessary member and define default return value.
- css::uno::Reference< css::task::XStatusIndicator > xIndicator ;
- css::uno::Reference< css::task::XStatusIndicatorSupplier > xSupplier ( m_xController, css::uno::UNO_QUERY );
- css::uno::Reference< css::task::XStatusIndicatorFactory > xFactory = m_xIndicatorFactoryHelper ;
+ css::uno::Reference< css::task::XStatusIndicator > xExternal(m_xIndicatorInterception.get(), css::uno::UNO_QUERY);
+ css::uno::Reference< css::task::XStatusIndicatorFactory > xFactory = m_xIndicatorFactoryHelper;
aReadLock.unlock();
/* UNSAFE AREA ----------------------------------------------------------------------------------------- */
- // If controller can create this status indicator ... use it for return.
- // Otherwise use our own indicator factory helper!
- if( xSupplier.is() == sal_True )
- {
- xIndicator = xSupplier->getStatusIndicator();
- }
- if(
- ( xIndicator.is() == sal_False ) &&
- ( xFactory.is() == sal_True )
- )
- {
- xIndicator = xFactory->createStatusIndicator();
- }
+ // Was set from outside to intercept any progress activities!
+ if (xExternal.is())
+ return xExternal;
+
+ // Or use our own factory as fallback, to create such progress.
+ if (xFactory.is())
+ return xFactory->createStatusIndicator();
- return xIndicator;
+ return css::uno::Reference< css::task::XStatusIndicator >();
}
/*-****************************************************************************************************//**
@@ -2620,6 +2626,14 @@ sal_Bool SAL_CALL Frame::convertFastPropertyValue( css::uno::Any&
css::uno::makeAny(m_xLayoutManager), aValue, aOldValue, aConvertedValue );
break;
+ case FRAME_PROPHANDLE_INDICATORINTERCEPTION:
+ {
+ css::uno::Reference< css::task::XStatusIndicator > xProgress(m_xIndicatorInterception.get(), css::uno::UNO_QUERY);
+ bReturn = PropHelper::willPropertyBeChanged(
+ css::uno::makeAny(xProgress), aValue, aOldValue, aConvertedValue );
+ }
+ break;
+
#ifdef ENABLE_WARNINGS
default : LOG_WARNING( "Frame::convertFastPropertyValue()", "Invalid handle detected!" )
break;
@@ -2672,6 +2686,14 @@ void SAL_CALL Frame::setFastPropertyValue_NoBroadcast( sal_Int32
aValue >>= m_xLayoutManager;
break;
+ case FRAME_PROPHANDLE_INDICATORINTERCEPTION :
+ {
+ css::uno::Reference< css::task::XStatusIndicator > xProgress;
+ aValue >>= xProgress;
+ m_xIndicatorInterception = xProgress;
+ }
+ break;
+
#ifdef ENABLE_WARNINGS
default :
LOG_WARNING( "Frame::setFastPropertyValue_NoBroadcast()", "Invalid handle detected!" )
@@ -2720,6 +2742,13 @@ void SAL_CALL Frame::getFastPropertyValue( css::uno::Any& aValue ,
aValue <<= m_xLayoutManager;
break;
+ case FRAME_PROPHANDLE_INDICATORINTERCEPTION :
+ {
+ css::uno::Reference< css::task::XStatusIndicator > xProgress(m_xIndicatorInterception.get(), css::uno::UNO_QUERY);
+ aValue = css::uno::makeAny(xProgress);
+ }
+ break;
+
#ifdef ENABLE_WARNINGS
default :
LOG_WARNING( "Frame::getFastPropertyValue()", "Invalid handle detected!" )
@@ -2828,6 +2857,7 @@ const css::uno::Sequence< css::beans::Property > Frame::impl_getStaticPropertyDe
static const css::beans::Property pPropertys[] =
{
css::beans::Property( FRAME_PROPNAME_DISPATCHRECORDERSUPPLIER, FRAME_PROPHANDLE_DISPATCHRECORDERSUPPLIER, ::getCppuType((const css::uno::Reference< css::frame::XDispatchRecorderSupplier >*)NULL) , css::beans::PropertyAttribute::TRANSIENT ),
+ css::beans::Property( FRAME_PROPNAME_INDICATORINTERCEPTION , FRAME_PROPHANDLE_INDICATORINTERCEPTION , ::getCppuType((const css::uno::Reference< css::task::XStatusIndicator >*)NULL) , css::beans::PropertyAttribute::TRANSIENT ),
css::beans::Property( FRAME_PROPNAME_ISHIDDEN , FRAME_PROPHANDLE_ISHIDDEN , ::getBooleanCppuType() , css::beans::PropertyAttribute::TRANSIENT | css::beans::PropertyAttribute::READONLY ),
css::beans::Property( FRAME_PROPNAME_LAYOUTMANAGER , FRAME_PROPHANDLE_LAYOUTMANAGER , ::getCppuType((const css::uno::Reference< drafts::com::sun::star::frame::XLayoutManager >*)NULL) , css::beans::PropertyAttribute::TRANSIENT ),
css::beans::Property( FRAME_PROPNAME_TITLE , FRAME_PROPHANDLE_TITLE , ::getCppuType((const ::rtl::OUString*)NULL) , css::beans::PropertyAttribute::TRANSIENT ),