diff options
author | Christian Lippka <christian.lippka@sun.com> | 2010-06-14 14:16:31 +0200 |
---|---|---|
committer | Christian Lippka <christian.lippka@sun.com> | 2010-06-14 14:16:31 +0200 |
commit | 875cd07e2736fdf1fc75f956b4adc940143e196c (patch) | |
tree | ec8773f9691bc8206a7577c5ddcd401db2f47217 /sd/source | |
parent | c9772e900464ccfda881160634d2e86a86cb104c (diff) | |
parent | f3b2db1efb379596f0269e439a35b5575b616b2c (diff) |
cws impress191: rebase m81
Diffstat (limited to 'sd/source')
175 files changed, 4851 insertions, 3843 deletions
diff --git a/sd/source/core/cusshow.cxx b/sd/source/core/cusshow.cxx index 3dcab46dce32..b9f23daedd90 100644..100755 --- a/sd/source/core/cusshow.cxx +++ b/sd/source/core/cusshow.cxx @@ -124,3 +124,13 @@ void SdCustomShow::RemovePage( const SdPage* pPage ) } } +void SdCustomShow::SetName(const String& rName) +{ + aName = rName; +} + +String SdCustomShow::GetName() const +{ + return aName; +} + diff --git a/sd/source/core/drawdoc2.cxx b/sd/source/core/drawdoc2.cxx index 092549428a42..e12ee30552e7 100644..100755 --- a/sd/source/core/drawdoc2.cxx +++ b/sd/source/core/drawdoc2.cxx @@ -731,6 +731,10 @@ void SdDrawDocument::CreateFirstPages( SdDrawDocument* pRefDocument /* = 0 */ ) if( bClipboard ) pNotesMPage->SetLayoutName( pPage->GetLayoutName() ); + + if( !pRefPage && (meDocType != DOCUMENT_TYPE_DRAW) ) + pPage->SetAutoLayout( AUTOLAYOUT_TITLE, TRUE, TRUE ); + mpWorkStartupTimer = new Timer(); mpWorkStartupTimer->SetTimeoutHdl( LINK(this, SdDrawDocument, WorkStartupHdl) ); mpWorkStartupTimer->SetTimeout(2000); diff --git a/sd/source/core/glob.src b/sd/source/core/glob.src index e235ad266c3c..f1c7058ddf79 100644..100755 --- a/sd/source/core/glob.src +++ b/sd/source/core/glob.src @@ -130,7 +130,7 @@ String STR_PRESOBJ_TITLE }; String STR_PRESOBJ_OUTLINE { - Text [ en-US ] = "Click to add an outline" ; + Text [ en-US ] = "Click to add text" ; }; String STR_PRESOBJ_TEXT { diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx index c82c89b7a604..76450cf76760 100644..100755 --- a/sd/source/core/sdpage.cxx +++ b/sd/source/core/sdpage.cxx @@ -159,22 +159,68 @@ SdPage::~SdPage() delete mpItems; } +struct OrdNumSorter +{ + bool operator()( SdrObject* p1, SdrObject* p2 ) + { + return p1->GetOrdNum() < p2->GetOrdNum(); + } +}; + /** returns the nIndex'th object from the given PresObjKind, index starts with 1 */ -SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex ) +SdrObject* SdPage::GetPresObj(PresObjKind eObjKind, int nIndex, bool bFuzzySearch /* = false */ ) { - int nObjFound = 0; // index of the searched object + // first sort all matching shapes with z-order + std::vector< SdrObject* > aMatches; + SdrObject* pObj = 0; while( (pObj = maPresentationShapeList.getNextShape(pObj)) != 0 ) { SdAnimationInfo* pInfo = SdDrawDocument::GetShapeUserData(*pObj); - if( pInfo && (pInfo->mePresObjKind == eObjKind) ) + if( pInfo ) { - nObjFound++; // found one - if( nObjFound == nIndex ) - return pObj; + bool bFound = false; + if( pInfo->mePresObjKind == eObjKind ) + { + bFound = true; + } + else if( bFuzzySearch && (eObjKind == PRESOBJ_OUTLINE) ) + { + switch( pInfo->mePresObjKind ) + { + case PRESOBJ_GRAPHIC: + case PRESOBJ_OBJECT: + case PRESOBJ_CHART: + case PRESOBJ_ORGCHART: + case PRESOBJ_TABLE: + case PRESOBJ_CALC: + case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: + bFound = TRUE; + break; + default: + break; + } + } + if( bFound ) + { + aMatches.push_back( pObj ); + } } } + if( aMatches.size() > 1 ) + { + OrdNumSorter aSortHelper; + std::sort( aMatches.begin(), aMatches.end(), aSortHelper ); + } + + if( nIndex > 0 ) + nIndex--; + + if( (nIndex >= 0) && ( aMatches.size() > static_cast<unsigned int>(nIndex)) ) + return aMatches[nIndex]; + return 0; } @@ -273,6 +319,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec } break; + case PRESOBJ_MEDIA: case PRESOBJ_OBJECT: { pSdrObj = new SdrOle2Obj(); @@ -302,6 +349,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec } case PRESOBJ_TABLE: + case PRESOBJ_CALC: { pSdrObj = new SdrOle2Obj(); ( (SdrOle2Obj*) pSdrObj)->SetProgName( String( RTL_CONSTASCII_USTRINGPARAM( "StarCalc" ))); @@ -493,7 +541,7 @@ SdrObject* SdPage::CreatePresObj(PresObjKind eObjKind, BOOL bVertical, const Rec if ( eObjKind == PRESOBJ_OBJECT || eObjKind == PRESOBJ_CHART || eObjKind == PRESOBJ_ORGCHART || - eObjKind == PRESOBJ_TABLE || + eObjKind == PRESOBJ_CALC || eObjKind == PRESOBJ_GRAPHIC ) { SfxItemSet aSet( ((SdDrawDocument*) pModel)->GetPool() ); @@ -1085,24 +1133,24 @@ static const LayoutDescriptor& GetLayoutDescriptor( AutoLayout eLayout ) { LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_TEXT ), // AUTOLAYOUT_TITLE LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_ENUM - LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_CHART ), // AUTOLAYOUT_CHART + LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_CHART LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_2TEXT - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_CHART ), // AUTOLAYOUT_TEXTCHART - LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_ORGCHART ), // AUTOLAYOUT_ORG - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_GRAPHIC ), // AUTOLAYOUT_TEXTCLbIP - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_CHART, PRESOBJ_OUTLINE ), // AUTOLAYOUT_CHARTTEXT - LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_TABLE ), // AUTOLAYOUT_TAB - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_GRAPHIC, PRESOBJ_OUTLINE ), // AUTOLAYOUT_CLIPTEXT - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OBJECT ), // AUTOLAYOUT_TEXTOBJ + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTCHART + LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_ORG + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTCLbIP + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_CHARTTEXT + LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TAB + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_CLIPTEXT + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTOBJ LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OBJECT ), // AUTOLAYOUT_OBJ - LayoutDescriptor( 2, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OBJECT, PRESOBJ_OBJECT ), // AUTOLAYOUT_TEXT2OBJ - LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OBJECT, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTOBJ - LayoutDescriptor( 4, PRESOBJ_TITLE, PRESOBJ_OBJECT, PRESOBJ_OUTLINE ), // AUTOLAYOUT_OBJOVERTEXT - LayoutDescriptor( 3, PRESOBJ_TITLE, PRESOBJ_OBJECT, PRESOBJ_OBJECT, PRESOBJ_OUTLINE ), // AUTOLAYOUT_2OBJTEXT - LayoutDescriptor( 5, PRESOBJ_TITLE, PRESOBJ_OBJECT, PRESOBJ_OBJECT, PRESOBJ_OUTLINE ), // AUTOLAYOUT_2OBJOVERTEXT - LayoutDescriptor( 4, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OBJECT ), // AUTOLAYOUT_TEXTOVEROBJ - LayoutDescriptor( 6, PRESOBJ_TITLE, PRESOBJ_OBJECT, PRESOBJ_OBJECT, // AUTOLAYOUT_4OBJ - PRESOBJ_OBJECT, PRESOBJ_OBJECT ), + LayoutDescriptor( 2, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXT2OBJ + LayoutDescriptor( 1, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTOBJ + LayoutDescriptor( 4, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_OBJOVERTEXT + LayoutDescriptor( 3, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_2OBJTEXT + LayoutDescriptor( 5, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_2OBJOVERTEXT + LayoutDescriptor( 4, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), // AUTOLAYOUT_TEXTOVEROBJ + LayoutDescriptor( 6, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, // AUTOLAYOUT_4OBJ + PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ), LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_NONE ), // AUTOLAYOUT_ONLY_TITLE LayoutDescriptor( 0, PRESOBJ_NONE ), // AUTOLAYOUT_NONE LayoutDescriptor( 0, PRESOBJ_PAGE, PRESOBJ_NOTES ), // AUTOLAYOUT_NOTES @@ -1111,16 +1159,16 @@ static const LayoutDescriptor& GetLayoutDescriptor( AutoLayout eLayout ) LayoutDescriptor( 0 ), // AUTOLAYOUT_HANDOUT3 LayoutDescriptor( 0 ), // AUTOLAYOUT_HANDOUT4 LayoutDescriptor( 0 ), // AUTOLAYOUT_HANDOUT6 - LayoutDescriptor( 7, PRESOBJ_TITLE|VERTICAL, PRESOBJ_OUTLINE|VERTICAL, PRESOBJ_CHART ),// AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART + LayoutDescriptor( 7, PRESOBJ_TITLE|VERTICAL, PRESOBJ_OUTLINE|VERTICAL, PRESOBJ_OUTLINE ),// AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART LayoutDescriptor( 8, PRESOBJ_TITLE|VERTICAL, PRESOBJ_OUTLINE|VERTICAL ), // AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE LayoutDescriptor( 0, PRESOBJ_TITLE, PRESOBJ_OUTLINE|VERTICAL ), // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE - LayoutDescriptor( 9, PRESOBJ_TITLE, PRESOBJ_GRAPHIC, PRESOBJ_OUTLINE|VERTICAL ), // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART + LayoutDescriptor( 9, PRESOBJ_TITLE, PRESOBJ_OUTLINE|VERTICAL, PRESOBJ_OUTLINE|VERTICAL ), // AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART LayoutDescriptor( 0 ), // AUTOLAYOUT_HANDOUT9 LayoutDescriptor( 10, PRESOBJ_TEXT, PRESOBJ_NONE ), // AUTOLAYOUT_ONLY_TEXT - LayoutDescriptor( 6, PRESOBJ_TITLE, PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC, // AUTOLAYOUT_4CLIPART + LayoutDescriptor( 6, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, // AUTOLAYOUT_4CLIPART PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC ), - LayoutDescriptor( 11, PRESOBJ_TITLE, PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC, // AUTOLAYOUT_6CLIPART - PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC, PRESOBJ_GRAPHIC ) + LayoutDescriptor( 11, PRESOBJ_TITLE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, // AUTOLAYOUT_6CLIPART + PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE, PRESOBJ_OUTLINE ) }; if( (eLayout < AUTOLAYOUT__START) || (eLayout >= AUTOLAYOUT__END) ) @@ -1339,7 +1387,7 @@ static void CalcAutoLayoutRectangles( SdPage& rPage, int nLayout, Rectangle* rRe } -void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescriptor, std::vector< SdrObject* >& rShapes, bool bInit ) +void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescriptor, std::vector< SdrObject* >& rShapes, bool bInit, bool bSwitchLayout ) { int i; @@ -1354,16 +1402,20 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto for( i = 0; (i < PRESOBJ_MAX) && (rDescriptor.meKind[i] != PRESOBJ_NONE); i++ ) { PresObjKind eKind = rDescriptor.meKind[i]; - SdrObject* pObj = rPage.GetPresObj( eKind, PresObjIndex[eKind] ); - if( pObj ) + SdrObject* pObj = 0; + while( (pObj = rPage.GetPresObj( eKind, PresObjIndex[eKind], true )) != 0 ) { PresObjIndex[eKind]++; // on next search for eKind, find next shape with same eKind - rShapes[i] = pObj; + + if( !bSwitchLayout || !pObj->IsEmptyPresObj() ) + { + rShapes[i] = pObj; + break; + } } - else - { + + if( !pObj ) bMissing = true; - } } if( bMissing && bInit ) @@ -1403,8 +1455,16 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto case PRESOBJ_TITLE: bFound = eSdrObjKind == OBJ_TITLETEXT; break; + case PRESOBJ_TABLE: + bFound = eSdrObjKind == OBJ_TABLE; + break; + case PRESOBJ_MEDIA: + bFound = eSdrObjKind == OBJ_MEDIA; + break; case PRESOBJ_OUTLINE: - bFound = (eSdrObjKind == OBJ_OUTLINETEXT) || ((eSdrObjKind == OBJ_TEXT) && bPresStyle); + bFound = (eSdrObjKind == OBJ_OUTLINETEXT) || + ((eSdrObjKind == OBJ_TEXT) && bPresStyle) || + (eSdrObjKind == OBJ_TABLE) || (eSdrObjKind == OBJ_MEDIA) || (eSdrObjKind == OBJ_GRAF) || (eSdrObjKind == OBJ_OLE2); break; case PRESOBJ_GRAPHIC: bFound = eSdrObjKind == OBJ_GRAF; @@ -1446,7 +1506,7 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto } break; case PRESOBJ_CHART: - case PRESOBJ_TABLE: + case PRESOBJ_CALC: if( eSdrObjKind == OBJ_OLE2 ) { SdrOle2Obj* pOle2 = dynamic_cast< SdrOle2Obj* >( pObj ); @@ -1456,7 +1516,7 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto ((eKind == PRESOBJ_CHART) && ( pOle2->GetProgName().EqualsAscii( "StarChart" ) || pOle2->IsChart() ) ) || - ((eKind == PRESOBJ_TABLE) && + ((eKind == PRESOBJ_CALC) && ( pOle2->GetProgName().EqualsAscii( "StarCalc" ) || pOle2->IsCalc() ) ) ) { bFound = true; @@ -1464,6 +1524,10 @@ void findAutoLayoutShapesImpl( SdPage& rPage, const LayoutDescriptor& rDescripto } break; } + else if( eSdrObjKind == OBJ_TABLE ) + { + bFound = true; + } break; case PRESOBJ_PAGE: case PRESOBJ_HANDOUT: @@ -1488,6 +1552,8 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, BOOL bInit, BOOL bCreate ) { sd::ScopeLockGuard aGuard( maLockAutoLayoutArrangement ); + const bool bSwitchLayout = eLayout != GetAutoLayout(); + sd::UndoManager* pUndoManager = pModel ? static_cast<SdDrawDocument*>(pModel)->GetUndoManager() : 0; const bool bUndo = pUndoManager && pUndoManager->isInListAction() && IsInserted(); @@ -1510,7 +1576,7 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, BOOL bInit, BOOL bCreate ) std::vector< SdrObject* > aLayoutShapes(PRESOBJ_MAX, 0); - findAutoLayoutShapesImpl( *this, aDescriptor, aLayoutShapes, bInit ); + findAutoLayoutShapesImpl( *this, aDescriptor, aLayoutShapes, bInit, bSwitchLayout ); int i; @@ -1544,6 +1610,7 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, BOOL bInit, BOOL bCreate ) if( !bUndo ) SdrObject::Free( pObj ); } +/* #i108541# keep non empty pres obj as pres obj even if they are not part of the current layout else { if( bUndo ) @@ -1555,6 +1622,7 @@ void SdPage::SetAutoLayout(AutoLayout eLayout, BOOL bInit, BOOL bCreate ) maPresentationShapeList.removeShape( *pObj ); pObj->SetUserCall(0); } +*/ } pObj = pNext; } @@ -2048,7 +2116,7 @@ SdrObject* convertPresentationObjectImpl( SdPage& rPage, SdrObject* pSourceObj, const bool bUndo = pUndoManager && pUndoManager->isInListAction() && rPage.IsInserted(); SdrObject* pNewObj = pSourceObj; - if((eObjKind == PRESOBJ_OUTLINE) && (pSourceObj->GetObjIdentifier() != OBJ_OUTLINETEXT) ) + if((eObjKind == PRESOBJ_OUTLINE) && (pSourceObj->GetObjIdentifier() == OBJ_TEXT) ) { pNewObj = rPage.CreatePresObj(PRESOBJ_OUTLINE, bVertical, aRect); @@ -2107,7 +2175,7 @@ SdrObject* convertPresentationObjectImpl( SdPage& rPage, SdrObject* pSourceObj, SdrObject::Free( pSourceObj ); } } - else if((eObjKind == PRESOBJ_TEXT) && (pSourceObj->GetObjIdentifier() != OBJ_TEXT) ) + else if((eObjKind == PRESOBJ_TEXT) && (pSourceObj->GetObjIdentifier() == OBJ_OUTLINETEXT) ) { // is there an outline shape we can use to replace empty subtitle shape? pNewObj = rPage.CreatePresObj(PRESOBJ_TEXT, bVertical, aRect); @@ -2194,10 +2262,10 @@ SdrObject* SdPage::InsertAutoLayoutShape( SdrObject* pObj, PresObjKind eObjKind, pUndoManager->AddUndoAction( new UndoObjectUserCall( *pObj ) ); } - if ( pObj->ISA(SdrGrafObj) && !pObj->IsEmptyPresObj() ) - ( (SdrGrafObj*) pObj)->AdjustToMaxRect( aRect, FALSE ); - else - pObj->SetLogicRect(aRect); +// if ( pObj->ISA(SdrGrafObj) && !pObj->IsEmptyPresObj() ) + ( /*(SdrGrafObj*)*/ pObj)->AdjustToMaxRect( aRect ); +// else +// SetLogicRect( pObj, aRect ); pObj->SetUserCall(this); @@ -2214,7 +2282,7 @@ SdrObject* SdPage::InsertAutoLayoutShape( SdrObject* pObj, PresObjKind eObjKind, pTextObject->SetMergedItem(SdrTextHorzAdjustItem( bVertical ? SDRTEXTHORZADJUST_RIGHT : SDRTEXTHORZADJUST_BLOCK )); } - if( !mbMaster ) + if( !mbMaster && (pTextObject->GetObjIdentifier() != OBJ_TABLE) ) { if ( pTextObject->IsAutoGrowHeight() ) { @@ -2277,6 +2345,9 @@ SdrObject* SdPage::InsertAutoLayoutShape( SdrObject* pObj, PresObjKind eObjKind, } } + if ( pObj && ( pObj->IsEmptyPresObj() || !pObj->ISA(SdrGrafObj) ) ) + pObj->AdjustToMaxRect( aRect ); + return pObj; } @@ -2656,7 +2727,7 @@ String SdPage::GetPresObjText(PresObjKind eObjKind) const { aString = String ( SdResId( STR_PRESOBJ_ORGCHART ) ); } - else if (eObjKind == PRESOBJ_TABLE) + else if (eObjKind == PRESOBJ_CALC) { aString = String ( SdResId( STR_PRESOBJ_TABLE ) ); } diff --git a/sd/source/core/shapelist.cxx b/sd/source/core/shapelist.cxx index daefe45c3cb1..f9f923f77270 100644..100755 --- a/sd/source/core/shapelist.cxx +++ b/sd/source/core/shapelist.cxx @@ -84,6 +84,44 @@ SdrObject* ShapeList::removeShape( SdrObject& rObject ) return 0; } +void ShapeList::replaceShape( SdrObject& rOldObject, SdrObject& rNewObject ) +{ + if( &rOldObject == &rNewObject ) + return; + + ListImpl::iterator aIter( std::find( maShapeList.begin(), maShapeList.end(), &rNewObject ) ); + if( aIter != maShapeList.end() ) + { + bool bIterErased = aIter == maIter; + (*aIter)->RemoveObjectUser(*this); + aIter = maShapeList.erase( aIter ); + + if( bIterErased ) + maIter = aIter; + } + + aIter = std::find( maShapeList.begin(), maShapeList.end(), &rOldObject ); + if( aIter != maShapeList.end() ) + { + bool bIterErased = aIter == maIter; + + ListImpl::iterator iNew( maShapeList.insert( aIter, &rNewObject ) ); + + (*aIter)->RemoveObjectUser(*this); + aIter = maShapeList.erase( aIter ); + + rNewObject.AddObjectUser( *this ); + + if( bIterErased ) + maIter = iNew; + } + else + { + DBG_ERROR("sd::ShapeList::replaceShape(), given shape not part of list!"); + addShape( rNewObject ); + } +} + /** removes all shapes from this list NOTE: iterators will become invalid */ void ShapeList::clear() diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index 59d5b5e0b98a..6a5ce08bc912 100644..100755 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -2431,7 +2431,7 @@ SdrObject* ImplSdPPTImport::ApplyTextObj( PPTTextObj* pTextObj, SdrTextObj* pObj case PPT_PLACEHOLDER_MEDIACLIP : case PPT_PLACEHOLDER_OBJECT : ePresObjKind = PRESOBJ_OBJECT; break; case PPT_PLACEHOLDER_GRAPH : ePresObjKind = PRESOBJ_CHART; break; - case PPT_PLACEHOLDER_TABLE : ePresObjKind = PRESOBJ_TABLE; break; + case PPT_PLACEHOLDER_TABLE : ePresObjKind = PRESOBJ_CALC; break; case PPT_PLACEHOLDER_CLIPART : ePresObjKind = PRESOBJ_GRAPHIC; break; case PPT_PLACEHOLDER_ORGANISZATIONCHART : ePresObjKind = PRESOBJ_ORGCHART; break; } diff --git a/sd/source/ui/accessibility/AccessibleTaskPane.cxx b/sd/source/ui/accessibility/AccessibleTaskPane.cxx deleted file mode 100644 index c2a2dafef296..000000000000 --- a/sd/source/ui/accessibility/AccessibleTaskPane.cxx +++ /dev/null @@ -1,94 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "AccessibleTaskPane.hxx" - -#include "AccessibleTreeNode.hxx" - -#include "taskpane/ToolPanel.hxx" -#include "taskpane/ControlContainer.hxx" -#include "taskpane/TitledControl.hxx" -#include <com/sun/star/accessibility/AccessibleRole.hpp> - -#include <vos/mutex.hxx> -#include <vcl/svapp.hxx> - -using namespace ::rtl; -using namespace ::com::sun::star; -using namespace ::com::sun::star::accessibility; -using namespace ::com::sun::star::uno; - -namespace accessibility { - -AccessibleTaskPane::AccessibleTaskPane ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> & rxParent, - const OUString& rsName, - const OUString& rsDescription, - ::sd::toolpanel::ToolPanel& rTaskPane) - : AccessibleTreeNode( - rxParent, - rTaskPane, - rsName, - rsDescription, - AccessibleRole::PANEL) -{ -} - - - - -AccessibleTaskPane::~AccessibleTaskPane (void) -{ -} - - - - -//===== XServiceInfo ======================================================== - -OUString SAL_CALL - AccessibleTaskPane::getImplementationName (void) - throw (RuntimeException) -{ - return OUString(RTL_CONSTASCII_USTRINGPARAM("AccessibleTaskPane")); -} - - - - -void AccessibleTaskPane::UpdateStateSet (void) -{ - // The task pane itself can not be focused. - UpdateState(AccessibleStateType::FOCUSED, false); -} - - -} // end of namespace accessibility diff --git a/sd/source/ui/accessibility/AccessibleTreeNode.cxx b/sd/source/ui/accessibility/AccessibleTreeNode.cxx index ad8d8facf9da..5c7462581d0b 100644..100755 --- a/sd/source/ui/accessibility/AccessibleTreeNode.cxx +++ b/sd/source/ui/accessibility/AccessibleTreeNode.cxx @@ -714,6 +714,7 @@ IMPL_LINK(AccessibleTreeNode, WindowEventListener, VclWindowEvent*, pEvent) case VCLEVENT_WINDOW_GETFOCUS: case VCLEVENT_WINDOW_LOSEFOCUS: UpdateStateSet(); + break; } return 1; } diff --git a/sd/source/ui/accessibility/makefile.mk b/sd/source/ui/accessibility/makefile.mk index d5eb47b06149..25d79aa7f8da 100755 --- a/sd/source/ui/accessibility/makefile.mk +++ b/sd/source/ui/accessibility/makefile.mk @@ -56,7 +56,6 @@ SLOFILES = \ $(SLO)$/AccessibleScrollPanel.obj \ $(SLO)$/AccessibleSlideSorterView.obj \ $(SLO)$/AccessibleSlideSorterObject.obj \ - $(SLO)$/AccessibleTaskPane.obj \ $(SLO)$/AccessibleTreeNode.obj \ $(SLO)$/SdShapeTypes.obj diff --git a/sd/source/ui/app/makefile.mk b/sd/source/ui/app/makefile.mk index d64d9b672f7e..d64d9b672f7e 100644..100755 --- a/sd/source/ui/app/makefile.mk +++ b/sd/source/ui/app/makefile.mk diff --git a/sd/source/ui/app/menuids2_tmpl.src b/sd/source/ui/app/menuids2_tmpl.src index 54b9ed6ba44c..21d906bfedf0 100644..100755 --- a/sd/source/ui/app/menuids2_tmpl.src +++ b/sd/source/ui/app/menuids2_tmpl.src @@ -983,40 +983,5 @@ Text [ en-US ] = "Pre~view Mode" ; \ }; -#define MN_MULTI_PANE_GUI \ - MenuItem\ - {\ - Identifier = SID_MULTI_PANE_GUI ; \ - HelpID = SID_MULTI_PANE_GUI ; \ - Text = "Multi Pane GUI" ; \ - SubMenu = Menu \ - {\ - ItemList =\ - {\ - MenuItem\ - {\ - Identifier = SID_TOOLPANEL ; \ - HelpID = SID_TOOLPANEL ; \ - Check = TRUE ; \ - Text = "Tool Panel" ; \ - };\ - MenuItem\ - {\ - Identifier = SID_SLIDE_BROWSER ; \ - HelpID = SID_SLIDE_BROWSER ; \ - Check = TRUE ; \ - Text = "Slide Browser" ; \ - };\ - MenuItem\ - {\ - Identifier = SID_NOTES_WINDOW ; \ - HelpID = SID_NOTES_WINDOW ; \ - Check = TRUE ; \ - Text = "Notes Window" ; \ - };\ - };\ - };\ - }; - #endif // _MENUIDS2_SRC diff --git a/sd/source/ui/app/res_bmp.src b/sd/source/ui/app/res_bmp.src index bc6858f66ea5..0901e53df0ed 100644..100755 --- a/sd/source/ui/app/res_bmp.src +++ b/sd/source/ui/app/res_bmp.src @@ -30,274 +30,236 @@ #include "glob.hrc" #include "res_bmp.hrc" -Bitmap BMP_FOIL_00 +// preview bitmaps for layouts +Bitmap BMP_LAYOUT_EMPTY { - File = "foil00.bmp" ; + File = "layout_empty.png"; }; -Bitmap BMP_FOIL_00_H +Bitmap BMP_LAYOUT_EMPTY_H { - File = "foil00_h.bmp" ; + File = "layout_empty_h.png"; }; -Bitmap BMP_FOIL_01 +Bitmap BMP_LAYOUT_HEAD01 { - File = "foil01.bmp" ; + File = "layout_head01.png"; }; -Bitmap BMP_FOIL_01_H +Bitmap BMP_LAYOUT_HEAD01_H { - File = "foil01_h.bmp" ; + File = "layout_head01_h.png"; }; -Bitmap BMP_FOIL_02 +Bitmap BMP_LAYOUT_HEAD02 { - File = "foil02.bmp" ; + File = "layout_head02.png"; }; -Bitmap BMP_FOIL_02_H +Bitmap BMP_LAYOUT_HEAD02_H { - File = "foil02_h.bmp" ; + File = "layout_head02_h.png"; }; -Bitmap BMP_FOIL_03 +Bitmap BMP_LAYOUT_HEAD02A { - File = "foil03.bmp" ; + File = "layout_head02a.png"; }; -Bitmap BMP_FOIL_03_H +Bitmap BMP_LAYOUT_HEAD02A_H { - File = "foil03_h.bmp" ; + File = "layout_head02a_h.png"; }; -Bitmap BMP_FOIL_04 +Bitmap BMP_LAYOUT_HEAD02B { - File = "foil04.bmp" ; + File = "layout_head02b.png"; }; -Bitmap BMP_FOIL_04_H +Bitmap BMP_LAYOUT_HEAD02B_H { - File = "foil04_h.bmp" ; + File = "layout_head02b_h.png"; }; -Bitmap BMP_FOIL_05 +Bitmap BMP_LAYOUT_HEAD03 { - File = "foil05.bmp" ; + File = "layout_head03.png"; }; -Bitmap BMP_FOIL_06 +Bitmap BMP_LAYOUT_HEAD03_H { - File = "foil06.bmp" ; + File = "layout_head03_h.png"; }; -Bitmap BMP_FOIL_06_H +Bitmap BMP_LAYOUT_HEAD03A { - File = "foil06_h.bmp" ; + File = "layout_head03a.png"; }; -Bitmap BMP_FOIL_07 +Bitmap BMP_LAYOUT_HEAD03A_H { - File = "foil07.bmp" ; + File = "layout_head03a_h.png"; }; -Bitmap BMP_FOIL_07_H +Bitmap BMP_LAYOUT_HEAD03B { - File = "foil07_h.bmp" ; + File = "layout_head03b.png"; }; -Bitmap BMP_FOIL_08 +Bitmap BMP_LAYOUT_HEAD03B_H { - File = "foil08.bmp" ; + File = "layout_head03b_h.png"; }; -Bitmap BMP_FOIL_08_H +Bitmap BMP_LAYOUT_HEAD03C { - File = "foil08_h.bmp" ; + File = "layout_head03c.png"; }; -Bitmap BMP_FOIL_09 +Bitmap BMP_LAYOUT_HEAD03C_H { - File = "foil09.bmp" ; + File = "layout_head03c_h.png"; }; -Bitmap BMP_FOIL_09_H +Bitmap BMP_LAYOUT_HEAD04 { - File = "foil09_h.bmp" ; + File = "layout_head04.png"; }; -Bitmap BMP_FOIL_10 +Bitmap BMP_LAYOUT_HEAD04_H { - File = "foil10.bmp" ; + File = "layout_head04_h.png"; }; -Bitmap BMP_FOIL_10_H +Bitmap BMP_LAYOUT_HEAD06 { - File = "foil10_h.bmp" ; + File = "layout_head06.png"; }; -Bitmap BMP_FOIL_11 +Bitmap BMP_LAYOUT_HEAD06_H { - File = "foil11.bmp" ; + File = "layout_head06_h.png"; }; -Bitmap BMP_FOIL_11_H +Bitmap BMP_LAYOUT_TEXTONLY { - File = "foil11_h.bmp" ; + File = "layout_textonly.png"; }; -Bitmap BMP_FOIL_12 +Bitmap BMP_LAYOUT_TEXTONLY_H { - File = "foil12.bmp" ; + File = "layout_textonly_h.png"; }; -Bitmap BMP_FOIL_12_H +Bitmap BMP_LAYOUT_VERTICAL01 { - File = "foil12_h.bmp" ; + File = "layout_vertical01.png"; }; -Bitmap BMP_FOIL_13 +Bitmap BMP_LAYOUT_VERTICAL01_H { - File = "foil13.bmp" ; + File = "layout_vertical01_h.png"; }; -Bitmap BMP_FOIL_13_H +Bitmap BMP_LAYOUT_VERTICAL02 { - File = "foil13_h.bmp" ; + File = "layout_vertical02.png"; }; -Bitmap BMP_FOIL_14 +Bitmap BMP_LAYOUT_VERTICAL02_H { - File = "foil14.bmp" ; + File = "layout_vertical02_h.png"; }; -Bitmap BMP_FOIL_14_H -{ - File = "foil14_h.bmp" ; -}; -Bitmap BMP_FOIL_15 -{ - File = "foil15.bmp" ; -}; -Bitmap BMP_FOIL_15_H -{ - File = "foil15_h.bmp" ; -}; -Bitmap BMP_FOIL_16 -{ - File = "foil16.bmp" ; -}; -Bitmap BMP_FOIL_16_H -{ - File = "foil16_h.bmp" ; -}; -Bitmap BMP_FOIL_17 -{ - File = "foil17.bmp" ; -}; -Bitmap BMP_FOIL_17_H -{ - File = "foil17_h.bmp" ; -}; -Bitmap BMP_FOIL_18 -{ - File = "foil18.bmp" ; -}; -Bitmap BMP_FOIL_18_H -{ - File = "foil18_h.bmp" ; -}; -Bitmap BMP_FOIL_19 -{ - File = "foil19.bmp" ; -}; -Bitmap BMP_FOIL_19_H -{ - File = "foil19_h.bmp" ; -}; -Bitmap BMP_FOIL_20 + +Bitmap BMP_FOILH_01 { - File = "foil20.bmp" ; + File = "foilh01.png"; }; -Bitmap BMP_FOIL_20_H +Bitmap BMP_FOILH_01_H { - File = "foil20_h.bmp" ; + File = "foilh01_h.png"; }; -Bitmap BMP_FOIL_21 +Bitmap BMP_FOILH_02 { - File = "foil21.bmp" ; + File = "foilh02.png"; }; -Bitmap BMP_FOIL_21_H +Bitmap BMP_FOILH_02_H { - File = "foil21_h.bmp" ; + File = "foilh02_h.png"; }; -Bitmap BMP_FOIL_22 +Bitmap BMP_FOILH_03 { - File = "foil22.bmp" ; + File = "foilh03.png"; }; -Bitmap BMP_FOIL_22_H +Bitmap BMP_FOILH_03_H { - File = "foil22_h.bmp" ; + File = "foilh03_h.png"; }; -Bitmap BMP_FOIL_23 +Bitmap BMP_FOILH_04 { - File = "foil23.bmp" ; + File = "foilh04.png"; }; -Bitmap BMP_FOIL_23_H +Bitmap BMP_FOILH_04_H { - File = "foil23_h.bmp" ; + File = "foilh04_h.png"; }; -Bitmap BMP_FOIL_24 +Bitmap BMP_FOILH_06 { - File = "foil24.bmp" ; + File = "foilh06.png"; }; -Bitmap BMP_FOIL_24_H +Bitmap BMP_FOILH_06_H { - File = "foil24_h.bmp" ; + File = "foilh06_h.png"; }; -Bitmap BMP_FOIL_25 +Bitmap BMP_FOILH_09 { - File = "foil25.bmp" ; + File = "foilh09.png"; }; -Bitmap BMP_FOIL_25_H +Bitmap BMP_FOILH_09_H { - File = "foil25_h.bmp" ; + File = "foilh09_h.png"; }; -Bitmap BMP_FOIL_26 + + +Bitmap BMP_PLACEHOLDER_CHART_SMALL { - File = "foil26.bmp" ; + File = "placeholder_chart_small.png"; }; -Bitmap BMP_FOIL_26_H +Bitmap BMP_PLACEHOLDER_CHART_SMALL_HOVER { - File = "foil26_h.bmp" ; + File = "placeholder_chart_small_hover.png"; }; -Bitmap BMP_FOIL_27 +Bitmap BMP_PLACEHOLDER_IMAGE_SMALL { - File = "foil27.bmp" ; + File = "placeholder_image_small.png"; }; -Bitmap BMP_FOIL_27_H +Bitmap BMP_PLACEHOLDER_IMAGE_SMALL_HOVER { - File = "foil27_h.bmp" ; + File = "placeholder_image_small_hover.png"; }; -Bitmap BMP_FOILH_01 +Bitmap BMP_PLACEHOLDER_MOVIE_SMALL { - File = "foilh01.bmp" ; + File = "placeholder_movie_small.png"; }; -Bitmap BMP_FOILH_01_H +Bitmap BMP_PLACEHOLDER_MOVIE_SMALL_HOVER { - File = "foilh01_h.bmp" ; + File = "placeholder_movie_small_hover.png"; }; -Bitmap BMP_FOILH_02 +Bitmap BMP_PLACEHOLDER_TABLE_SMALL { - File = "foilh02.bmp" ; + File = "placeholder_table_small.png"; }; -Bitmap BMP_FOILH_02_H +Bitmap BMP_PLACEHOLDER_TABLE_SMALL_HOVER { - File = "foilh02_h.bmp" ; + File = "placeholder_table_small_hover.png"; }; -Bitmap BMP_FOILH_03 + +Bitmap BMP_PLACEHOLDER_CHART_LARGE { - File = "foilh03.bmp" ; + File = "placeholder_chart_large.png"; }; -Bitmap BMP_FOILH_03_H +Bitmap BMP_PLACEHOLDER_CHART_LARGE_HOVER { - File = "foilh03_h.bmp" ; + File = "placeholder_chart_large_hover.png"; }; -Bitmap BMP_FOILH_04 +Bitmap BMP_PLACEHOLDER_IMAGE_LARGE { - File = "foilh04.bmp" ; + File = "placeholder_image_large.png"; }; -Bitmap BMP_FOILH_04_H +Bitmap BMP_PLACEHOLDER_IMAGE_LARGE_HOVER { - File = "foilh04_h.bmp" ; + File = "placeholder_image_large_hover.png"; }; -Bitmap BMP_FOILH_06 +Bitmap BMP_PLACEHOLDER_MOVIE_LARGE { - File = "foilh06.bmp" ; + File = "placeholder_movie_large.png"; }; -Bitmap BMP_FOILH_06_H +Bitmap BMP_PLACEHOLDER_MOVIE_LARGE_HOVER { - File = "foilh06_h.bmp" ; + File = "placeholder_movie_large_hover.png"; }; -Bitmap BMP_FOILH_09 +Bitmap BMP_PLACEHOLDER_TABLE_LARGE { - File = "foilh09.bmp" ; + File = "placeholder_table_large.png"; }; -Bitmap BMP_FOILH_09_H +Bitmap BMP_PLACEHOLDER_TABLE_LARGE_HOVER { - File = "foilh09_h.bmp" ; + File = "placeholder_table_large_hover.png"; }; + Bitmap BMP_FOILN_01 { File = "foiln01.bmp" ; @@ -306,10 +268,6 @@ Bitmap BMP_FOILN_01_H { File = "foiln01_h.bmp" ; }; -Bitmap BMP_FOIL_NONE -{ - File = "foilnone.bmp" ; -}; Bitmap BMP_PAGE { File = "page.bmp" ; @@ -519,30 +477,6 @@ Bitmap BMP_WAIT_ICON // ---------------------------------------- -Bitmap BMP_CLOSE_DOC -{ - File = "closedoc.bmp"; -}; -Bitmap BMP_CLOSE_DOC_H -{ - File = "closedochc.bmp"; -}; -Bitmap BMP_TRIANGLE_RIGHT -{ - File = "triangle_right.bmp"; -}; -Bitmap BMP_TRIANGLE_RIGHT_H -{ - File = "triangle_right_hc.bmp"; -}; -Bitmap BMP_TRIANGLE_DOWN -{ - File = "triangle_down.bmp"; -}; -Bitmap BMP_TRIANGLE_DOWN_H -{ - File = "triangle_down_hc.bmp"; -}; Bitmap BMP_FADE_EFFECT_INDICATOR { File = "fade_effect_indicator.bmp"; diff --git a/sd/source/ui/app/sddll1.cxx b/sd/source/ui/app/sddll1.cxx index 30aea6cba7b1..53a2b4e9b1e9 100644..100755 --- a/sd/source/ui/app/sddll1.cxx +++ b/sd/source/ui/app/sddll1.cxx @@ -48,12 +48,8 @@ #include "GraphicViewShellBase.hxx" #include "DrawDocShell.hxx" #include "GraphicDocShell.hxx" -#ifndef SD_SLIDEBROWSER_SLIDE_SORTER_VIEW_SHELL_HXX #include "SlideSorterViewShell.hxx" -#endif -#ifndef SD_SLIDEBROWSER_TASK_PANE_VIEW_SHELL_HXX -#include "TaskPaneViewShell.hxx" -#endif +#include "taskpane/ToolPanelViewShell.hxx" #include "FactoryIds.hxx" #include "sdmod.hxx" #include "app.hrc" @@ -131,8 +127,8 @@ void SdDLL::RegisterInterfaces() // View shells for the side panes. ::sd::slidesorter::SlideSorterViewShell::RegisterInterface (pMod); - ::sd::toolpanel::TaskPaneViewShell::RegisterInterface(pMod); - // Tell the task pane view shell to register the interfaces of its + ::sd::toolpanel::ToolPanelViewShell::RegisterInterface(pMod); + // Tell the tool panel view shell to register the interfaces of its // controls. - ::sd::toolpanel::TaskPaneViewShell::RegisterControls(); + ::sd::toolpanel::ToolPanelViewShell::RegisterControls(); } diff --git a/sd/source/ui/app/sddll2.cxx b/sd/source/ui/app/sddll2.cxx index 50143367944a..3b576c8c668b 100644..100755 --- a/sd/source/ui/app/sddll2.cxx +++ b/sd/source/ui/app/sddll2.cxx @@ -57,10 +57,10 @@ #include <svx/f3dchild.hxx> #include <svx/grafctrl.hxx> #include <svx/tbxcustomshapes.hxx> -#include <svx/fontworkgallery.hxx> #include <svx/lboxctrl.hxx> #include <svx/clipboardctl.hxx> -#include <svx/extrusioncontrols.hxx> +#include <svx/extrusioncolorcontrol.hxx> +#include <svx/fontworkgallery.hxx> #include <svx/tbxcolor.hxx> #include <avmedia/mediaplayer.hxx> #include <avmedia/mediatoolbox.hxx> @@ -76,10 +76,7 @@ #include "AnimationChildWindow.hxx" #include "animobjs.hxx" #include "NavigatorChildWindow.hxx" -#ifndef SD_LAZER_DIALOG_CHILD_WINDOW_HXX #include "LayerDialogChildWindow.hxx" -#endif -//#include "3dchld.hxx" #include "app.hrc" #include "SpellDialogChildWindow.hxx" #include "DrawViewShell.hxx" @@ -121,10 +118,6 @@ void SdDLL::RegisterControllers() SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_FLOWCHART, pMod ); SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_CALLOUT, pMod ); SvxTbxCtlCustomShapes::RegisterControl( SID_DRAWTBX_CS_STAR, pMod ); -// SdTbxCtlDiaEffect::RegisterControl(0, pMod); -// SdTbxCtlDiaSpeed::RegisterControl(0, pMod); -// SdTbxCtlDiaAuto::RegisterControl(0, pMod); -// SdTbxCtlDiaTime::RegisterControl(0, pMod); SdTbxCtlDiaPages::RegisterControl( SID_PAGES_PER_ROW, pMod ); SdTbxCtlGlueEscDir::RegisterControl( SID_GLUE_ESCDIR, pMod ); @@ -133,15 +126,7 @@ void SdDLL::RegisterControllers() ::sd::NavigatorChildWindow::RegisterChildWindowContext( (sal_uInt16) ::sd::DrawViewShell::GetInterfaceId(), pMod ); ::sd::NavigatorChildWindow::RegisterChildWindowContext( (sal_uInt16) ::sd::GraphicViewShell::GetInterfaceId(), pMod ); ::sd::LayerDialogChildWindow::RegisterChildWindow(0, pMod); - //Sd3DChildWindow::RegisterChildWindow(0, pMod); -/* - SvxChildWinCustomShapesBasic::RegisterChildWindow( 0, pMod ); - SvxChildWinCustomShapesSymbol::RegisterChildWindow( 0, pMod ); - SvxChildWinCustomShapesArrow::RegisterChildWindow( 0, pMod ); - SvxChildWinCustomShapesFlowChart::RegisterChildWindow( 0, pMod ); - SvxChildWinCustomShapesCallout::RegisterChildWindow( 0, pMod ); - SvxChildWinCustomShapesStar::RegisterChildWindow( 0, pMod ); -*/ + Svx3DChildWindow::RegisterChildWindow(0, pMod); SvxFontWorkChildWindow::RegisterChildWindow(0, pMod); SvxColorChildWindow::RegisterChildWindow(0, pMod, SFX_CHILDWIN_TASK); @@ -155,7 +140,7 @@ void SdDLL::RegisterControllers() ::avmedia::MediaPlayer::RegisterChildWindow(0, pMod); ::sd::LeftPaneImpressChildWindow::RegisterChildWindow(0, pMod); ::sd::LeftPaneDrawChildWindow::RegisterChildWindow(0, pMod); - ::sd::RightPaneChildWindow::RegisterChildWindow(0, pMod); + ::sd::ToolPanelChildWindow::RegisterChildWindow(0, pMod); SvxFillToolBoxControl::RegisterControl(0, pMod); SvxLineStyleToolBoxControl::RegisterControl(0, pMod); @@ -210,15 +195,9 @@ void SdDLL::RegisterControllers() SvxClipBoardControl::RegisterControl( SID_PASTE, pMod ); - svx::ExtrusionDepthControl::RegisterControl( SID_EXTRUSION_DEPTH_FLOATER, pMod ); - svx::ExtrusionDirectionControl::RegisterControl( SID_EXTRUSION_DIRECTION_FLOATER, pMod ); - svx::ExtrusionLightingControl::RegisterControl( SID_EXTRUSION_LIGHTING_FLOATER, pMod ); - svx::ExtrusionSurfaceControl::RegisterControl( SID_EXTRUSION_SURFACE_FLOATER, pMod ); svx::ExtrusionColorControl::RegisterControl( SID_EXTRUSION_3D_COLOR, pMod ); - svx::FontWorkShapeTypeControl::RegisterControl( SID_FONTWORK_SHAPE_TYPE, pMod ); - svx::FontWorkAlignmentControl::RegisterControl( SID_FONTWORK_ALIGNMENT_FLOATER, pMod ); - svx::FontWorkCharacterSpacingControl::RegisterControl( SID_FONTWORK_CHARACTER_SPACING_FLOATER, pMod ); + ::avmedia::MediaToolBoxControl::RegisterControl( SID_AVMEDIA_TOOLBOX, pMod ); XmlSecStatusBarControl::RegisterControl( SID_SIGNATURE, pMod ); SdTemplateControl::RegisterControl( SID_STATUS_LAYOUT, pMod ); @@ -227,4 +206,7 @@ void SdDLL::RegisterControllers() SvxFrameLineColorToolBoxControl::RegisterControl(SID_FRAME_LINECOLOR, pMod ); SvxFrameToolBoxControl::RegisterControl(SID_ATTR_BORDER, pMod ); SvxSubToolBoxControl::RegisterControl(SID_OPTIMIZE_TABLE, pMod); + +// SdLayoutControl::RegisterControl( SID_ASSIGN_LAYOUT, pMod ); +// SdLayoutControl::RegisterControl( SID_INSERTPAGE, pMod ); } diff --git a/sd/source/ui/app/sdmod1.cxx b/sd/source/ui/app/sdmod1.cxx index 743b7a35610d..3c1abc0c7d22 100644..100755 --- a/sd/source/ui/app/sdmod1.cxx +++ b/sd/source/ui/app/sdmod1.cxx @@ -68,7 +68,6 @@ #include "sdresid.hxx" #include "OutlineViewShell.hxx" #include "ViewShellBase.hxx" -#include "TaskPaneViewShell.hxx" #ifndef SD_FRAMW_VIEW_HXX #include "FrameView.hxx" #endif diff --git a/sd/source/ui/app/strings.src b/sd/source/ui/app/strings.src index 3066355ef95e..e992e7016f04 100644..100755 --- a/sd/source/ui/app/strings.src +++ b/sd/source/ui/app/strings.src @@ -166,6 +166,7 @@ String STR_HANDOUT_MODE { Text [ en-US ] = "Handout" ; }; + String STR_AUTOLAYOUT_NONE { Text [ en-US ] = "Blank Slide" ; @@ -182,77 +183,41 @@ String STR_AUTOLAYOUT_TITLE { Text [ en-US ] = "Title Slide" ; }; -String STR_AUTOLAYOUT_OBJ -{ - Text [ en-US ] = "Title, Object" ; -}; -String STR_AUTOLAYOUT_ENUM -{ - Text [ en-US ] = "Title, Text" ; -}; -String STR_AUTOLAYOUT_CHART -{ - Text [ en-US ] = "Title, Chart" ; -}; -String STR_AUTOLAYOUT_TAB -{ - Text [ en-US ] = "Title, Spreadsheet" ; -}; -String STR_AUTOLAYOUT_CLIPTEXT -{ - Text [ en-US ] = "Title, Clipart, Text" ; -}; -String STR_AUTOLAYOUT_2TEXT -{ - Text [ en-US ] = "Title, 2 Text Blocks" ; -}; -String STR_AUTOLAYOUT_TEXTCHART -{ - Text [ en-US ] = "Title, Text, Chart" ; -}; -String STR_AUTOLAYOUT_TEXTCLIP +String STR_AUTOLAYOUT_CONTENT { - Text [ en-US ] = "Title, Text, Clipart" ; + Text [ en-US ] = "Title, Content" ; }; -String STR_AUTOLAYOUT_CHARTTEXT +String STR_AUTOLAYOUT_2CONTENT { - Text [ en-US ] = "Title, Chart, Text" ; + Text [ en-US ] = "Title and 2 Content" ; }; -String STR_AUTOLAYOUT_TEXTOBJ +String STR_AUTOLAYOUT_CONTENT_2CONTENT { - Text [ en-US ] = "Title, Text, Object" ; + Text [ en-US ] = "Title, Content and 2 Content" ; }; -String STR_AUTOLAYOUT_TEXT2OBJ +String STR_AUTOLAYOUT_2CONTENT_CONTENT { - Text [ en-US ] = "Title, Text, 2 Objects" ; + Text [ en-US ] = "Title, 2 Content and Content" ; }; -String STR_AUTOLAYOUT_OBJTEXT +String STR_AUTOLAYOUT_CONTENT_OVER_2CONTENT { - Text [ en-US ] = "Title, Object, Text" ; + Text [ en-US ] = "Title, Content over 2 Content" ; }; -String STR_AUTOLAYOUT_OBJOVERTEXT +String STR_AUTOLAYOUT_2CONTENT_OVER_CONTENT { - Text [ en-US ] = "Title, Object Above Text" ; + Text [ en-US ] = "Title, 2 Content over Content" ; }; -String STR_AUTOLAYOUT_2OBJTEXT +String STR_AUTOLAYOUT_CONTENT_OVER_CONTENT { - Text [ en-US ] = "Title, 2 Objects, Text" ; + Text [ en-US ] = "Title, Content over Content" ; }; -String STR_AUTOLAYOUT_2OBJOVERTEXT +String STR_AUTOLAYOUT_4CONTENT { - Text [ en-US ] = "Title, 2 Objects Above Text" ; + Text [ en-US ] = "Title, 4 Content" ; }; -String STR_AUTOLAYOUT_TEXTOVEROBJ +String STR_AUTOLAYOUT_6CONTENT { - Text [ en-US ] = "Title, Text Above Object" ; -}; -String STR_AUTOLAYOUT_4OBJ -{ - Text [ en-US ] = "Title, 4 Objects" ; -}; -String STR_AUTOLAYOUT_4CLIPART -{ - Text [ en-US ] = "Title, 4 Cliparts" ; + Text [ en-US ] = "Title, 6 Content" ; }; String STR_AL_TITLE_VERT_OUTLINE { @@ -270,10 +235,6 @@ String STR_AL_VERT_TITLE_VERT_OUTLINE { Text [ en-US ] = "Vertical Title, Vertical Text" ; }; -String STR_AUTOLAYOUT_6CLIPART -{ - Text [ en-US ] = "Title, 6 Cliparts" ; -}; String STR_AUTOLAYOUT_HANDOUT1 { @@ -1250,6 +1211,14 @@ String DLG_TABLEDESIGNPANE { Text [ en-US ] = "Table Designs"; }; +String STR_CUSTOMANIMATIONPANE +{ + Text [ en-US ] = "Custom Animation"; +}; +String STR_SLIDE_TRANSITION_PANE +{ + Text [ en-US ] = "Slide Transition"; +}; String STR_NAVIGATOR_SHOW_NAMED_SHAPES { Text [ en-US ] = "Named shapes"; @@ -1270,3 +1239,27 @@ String RID_ANNOTATIONS_START { Text [ en-US ] = "Comments"; }; +String STR_RESET_LAYOUT +{ + Text[ en-US ] = "Reset Slide Layout"; +}; + +String STR_INSERT_TABLE +{ + Text [ en-US ] = "Insert Table"; +}; + +String STR_INSERT_CHART +{ + Text [ en-US ] = "Insert Chart"; +}; + +String STR_INSERT_PICTURE +{ + Text [ en-US ] = "Insert Picture"; +}; + +String STR_INSERT_MOVIE +{ + Text [ en-US ] = "Insert Movie"; +}; diff --git a/sd/source/ui/controller/makefile.mk b/sd/source/ui/controller/makefile.mk new file mode 100755 index 000000000000..4e37fbd5ea88 --- /dev/null +++ b/sd/source/ui/controller/makefile.mk @@ -0,0 +1,54 @@ +#************************************************************************* +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# Copyright 2008 by Sun Microsystems, Inc. +# +# OpenOffice.org - a multi-platform office productivity suite +# +# $RCSfile: makefile.mk,v $ +# +# $Revision: 1.21 $ +# +# This file is part of OpenOffice.org. +# +# OpenOffice.org is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License version 3 +# only, as published by the Free Software Foundation. +# +# OpenOffice.org is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License version 3 for more details +# (a copy is included in the LICENSE file that accompanied this code). +# +# You should have received a copy of the GNU Lesser General Public License +# version 3 along with OpenOffice.org. If not, see +# <http://www.openoffice.org/license.html> +# for a copy of the LGPLv3 License. +# +#************************************************************************* + + +PRJ=..$/..$/.. + +PROJECTPCH=sd +PROJECTPCHSOURCE=$(PRJ)$/util$/sd +PRJNAME=sd +TARGET=controller +ENABLE_EXCEPTIONS=TRUE +AUTOSEG=true + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +# --- Files -------------------------------------------------------- + +SLOFILES = \ + $(SLO)$/slidelayoutcontroller.obj + +# --- Tagets ------------------------------------------------------- + +.INCLUDE : target.mk diff --git a/sd/source/ui/controller/slidelayoutcontroller.cxx b/sd/source/ui/controller/slidelayoutcontroller.cxx new file mode 100644 index 000000000000..489f6e489386 --- /dev/null +++ b/sd/source/ui/controller/slidelayoutcontroller.cxx @@ -0,0 +1,419 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/text/WritingMode.hpp> +#include <com/sun/star/frame/status/FontHeight.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/drawing/DrawViewMode.hpp> + +#include <memory> +#include <boost/scoped_ptr.hpp> + +#include <vos/mutex.hxx> + +#include <vcl/svapp.hxx> +#include <vcl/toolbox.hxx> + +#include <svl/languageoptions.hxx> + +#include <svtools/ctrltool.hxx> +#include <svtools/ctrlbox.hxx> +#include <svtools/toolbarmenu.hxx> +#include <svtools/valueset.hxx> + +#include <toolkit/helper/vclunohelper.hxx> + +#include <sfx2/imagemgr.hxx> + +#include "app.hrc" +#include "glob.hrc" +#include "strings.hrc" +#include "res_bmp.hrc" +#include "sdresid.hxx" +#include "pres.hxx" +#include "slidelayoutcontroller.hxx" + +using rtl::OUString; + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::text; +using namespace ::com::sun::star::frame; +using namespace ::com::sun::star::drawing; +using namespace ::com::sun::star::beans; + +namespace sd +{ + +extern ::rtl::OUString ImplRetrieveLabelFromCommand( const Reference< XFrame >& xFrame, const OUString& aCmdURL ); + +// ----------------------------------------------------------------------- + +class LayoutToolbarMenu : public svtools::ToolbarMenu +{ +public: + LayoutToolbarMenu( SlideLayoutController& rController, const Reference< XFrame >& xFrame, ::Window* pParent, const bool bInsertPage ); + virtual ~LayoutToolbarMenu(); + +protected: + DECL_LINK( SelectHdl, void * ); + +private: + SlideLayoutController& mrController; + Reference< XFrame > mxFrame; + bool mbInsertPage; + ValueSet* mpLayoutSet1; + ValueSet* mpLayoutSet2; +}; + +// ----------------------------------------------------------------------- + +struct snewfoil_value_info +{ + USHORT mnBmpResId; + USHORT mnHCBmpResId; + USHORT mnStrResId; + WritingMode meWritingMode; + AutoLayout maAutoLayout; +}; + +static snewfoil_value_info notes[] = +{ + {BMP_FOILN_01, BMP_FOILN_01_H, STR_AUTOLAYOUT_NOTES, WritingMode_LR_TB, + AUTOLAYOUT_NOTES}, + {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE}, +}; + +static snewfoil_value_info handout[] = +{ + {BMP_FOILH_01, BMP_FOILH_01_H, STR_AUTOLAYOUT_HANDOUT1, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT1}, + {BMP_FOILH_02, BMP_FOILH_02_H, STR_AUTOLAYOUT_HANDOUT2, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT2}, + {BMP_FOILH_03, BMP_FOILH_03_H, STR_AUTOLAYOUT_HANDOUT3, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT3}, + {BMP_FOILH_04, BMP_FOILH_04_H, STR_AUTOLAYOUT_HANDOUT4, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT4}, + {BMP_FOILH_06, BMP_FOILH_06_H, STR_AUTOLAYOUT_HANDOUT6, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT6}, + {BMP_FOILH_09, BMP_FOILH_09_H, STR_AUTOLAYOUT_HANDOUT9, WritingMode_LR_TB, + AUTOLAYOUT_HANDOUT9}, + {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE}, +}; + +static snewfoil_value_info standard[] = +{ + {BMP_LAYOUT_EMPTY, BMP_LAYOUT_EMPTY_H, STR_AUTOLAYOUT_NONE, WritingMode_LR_TB, AUTOLAYOUT_NONE}, + {BMP_LAYOUT_HEAD03, BMP_LAYOUT_HEAD03_H, STR_AUTOLAYOUT_TITLE, WritingMode_LR_TB, AUTOLAYOUT_TITLE}, + {BMP_LAYOUT_HEAD02, BMP_LAYOUT_HEAD02_H, STR_AUTOLAYOUT_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_ENUM}, + {BMP_LAYOUT_HEAD02A, BMP_LAYOUT_HEAD02A_H, STR_AUTOLAYOUT_2CONTENT, WritingMode_LR_TB, AUTOLAYOUT_2TEXT}, + {BMP_LAYOUT_HEAD01, BMP_LAYOUT_HEAD01_H, STR_AUTOLAYOUT_ONLY_TITLE, WritingMode_LR_TB, AUTOLAYOUT_ONLY_TITLE}, + {BMP_LAYOUT_TEXTONLY, BMP_LAYOUT_TEXTONLY_H, STR_AUTOLAYOUT_ONLY_TEXT, WritingMode_LR_TB, AUTOLAYOUT_ONLY_TEXT}, + {BMP_LAYOUT_HEAD03B, BMP_LAYOUT_HEAD03B_H, STR_AUTOLAYOUT_2CONTENT_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_2OBJTEXT}, + {BMP_LAYOUT_HEAD03C, BMP_LAYOUT_HEAD03C_H, STR_AUTOLAYOUT_CONTENT_2CONTENT, WritingMode_LR_TB, AUTOLAYOUT_TEXT2OBJ}, + {BMP_LAYOUT_HEAD03A, BMP_LAYOUT_HEAD03A_H, STR_AUTOLAYOUT_2CONTENT_OVER_CONTENT,WritingMode_LR_TB, AUTOLAYOUT_2OBJOVERTEXT}, + {BMP_LAYOUT_HEAD02B, BMP_LAYOUT_HEAD02B_H, STR_AUTOLAYOUT_CONTENT_OVER_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_OBJOVERTEXT}, + {BMP_LAYOUT_HEAD04, BMP_LAYOUT_HEAD04_H, STR_AUTOLAYOUT_4CONTENT, WritingMode_LR_TB, AUTOLAYOUT_4OBJ}, + {BMP_LAYOUT_HEAD06, BMP_LAYOUT_HEAD06_H, STR_AUTOLAYOUT_6CONTENT, WritingMode_LR_TB, AUTOLAYOUT_6CLIPART}, + {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE} +}; + +static snewfoil_value_info v_standard[] = +{ + // vertical + {BMP_LAYOUT_VERTICAL02, BMP_LAYOUT_VERTICAL02_H, STR_AL_VERT_TITLE_TEXT_CHART, WritingMode_TB_RL,AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART}, + {BMP_LAYOUT_VERTICAL01, BMP_LAYOUT_VERTICAL01_H, STR_AL_VERT_TITLE_VERT_OUTLINE, WritingMode_TB_RL, AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE}, + {BMP_LAYOUT_HEAD02, BMP_LAYOUT_HEAD02_H, STR_AL_TITLE_VERT_OUTLINE, WritingMode_TB_RL, AUTOLAYOUT_TITLE_VERTICAL_OUTLINE}, + {BMP_LAYOUT_HEAD02A, BMP_LAYOUT_HEAD02A_H, STR_AL_TITLE_VERT_OUTLINE_CLIPART, WritingMode_TB_RL, AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART}, + {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE} +}; + +// ----------------------------------------------------------------------- + +static void fillLayoutValueSet( ValueSet* pValue, snewfoil_value_info* pInfo, const bool bHighContrast ) +{ + Size aLayoutItemSize; + for( ; pInfo->mnBmpResId; pInfo++ ) + { + String aText( SdResId( pInfo->mnStrResId ) ); + BitmapEx aBmp( SdResId( (bHighContrast ? pInfo->mnHCBmpResId : pInfo->mnBmpResId) ) ); + + pValue->InsertItem( static_cast<USHORT>(pInfo->maAutoLayout)+1, aBmp, aText ); + + aLayoutItemSize.Width() = std::max( aLayoutItemSize.Width(), aBmp.GetSizePixel().Width() ); + aLayoutItemSize.Height() = std::max( aLayoutItemSize.Height(), aBmp.GetSizePixel().Height() ); + } + + aLayoutItemSize = pValue->CalcItemSizePixel( aLayoutItemSize ); + pValue->SetSizePixel( pValue->CalcWindowSizePixel( aLayoutItemSize ) ); +} + +// ----------------------------------------------------------------------- + +LayoutToolbarMenu::LayoutToolbarMenu( SlideLayoutController& rController, const Reference< XFrame >& xFrame, ::Window* pParent, const bool bInsertPage ) +: svtools::ToolbarMenu(xFrame, pParent, WB_CLIPCHILDREN ) +, mrController( rController ) +, mxFrame(xFrame) +, mbInsertPage( bInsertPage ) +, mpLayoutSet1( 0 ) +, mpLayoutSet2( 0 ) +{ + DrawViewMode eMode = DrawViewMode_DRAW; + + // find out which view is running + if( xFrame.is() ) try + { + Reference< XPropertySet > xControllerSet( xFrame->getController(), UNO_QUERY_THROW ); + xControllerSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "DrawViewMode" ) ) ) >>= eMode; + } + catch( Exception& e ) + { + (void)e; + OSL_ASSERT(false); + } + + const sal_Int32 LAYOUT_BORDER_PIX = 7; + + String aTitle1( SdResId( STR_GLUE_ESCDIR_HORZ ) ); + String aTitle2( SdResId( STR_GLUE_ESCDIR_VERT ) ); + + const bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); + SvtLanguageOptions aLanguageOptions; + const bool bVerticalEnabled = aLanguageOptions.IsVerticalTextEnabled(); + + SetSelectHdl( LINK( this, LayoutToolbarMenu, SelectHdl ) ); + + mpLayoutSet1 = createEmptyValueSetControl(); + mpLayoutSet1->SetSelectHdl( LINK( this, LayoutToolbarMenu, SelectHdl ) ); + + snewfoil_value_info* pInfo = 0; + sal_Int16 nColCount = 4; + switch( eMode ) + { + case DrawViewMode_DRAW: pInfo = &standard[0]; break; + case DrawViewMode_HANDOUT: pInfo = &handout[0]; nColCount = 2; break; + case DrawViewMode_NOTES: pInfo = ¬es[0]; nColCount = 1; break; + default: break; + } + + mpLayoutSet1->SetColCount( nColCount ); + + fillLayoutValueSet( mpLayoutSet1, pInfo, bHighContrast ); + + Size aSize( mpLayoutSet1->GetOutputSizePixel() ); + aSize.Width() += (mpLayoutSet1->GetColCount() + 1) * LAYOUT_BORDER_PIX; + aSize.Height() += (mpLayoutSet1->GetLineCount() +1) * LAYOUT_BORDER_PIX; + mpLayoutSet1->SetOutputSizePixel( aSize ); + + if( bVerticalEnabled && (eMode == DrawViewMode_DRAW) ) + appendEntry( -1, aTitle1 ); + appendEntry( 0, mpLayoutSet1 ); + + if( bVerticalEnabled && (eMode == DrawViewMode_DRAW) ) + { + mpLayoutSet2 = new ValueSet( this, WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NOBORDER | WB_NO_DIRECTSELECT ); + // mpLayoutSet2->SetHelpId( HID_VALUESET_EXTRUSION_LIGHTING ); + + mpLayoutSet2->SetSelectHdl( LINK( this, LayoutToolbarMenu, SelectHdl ) ); + mpLayoutSet2->SetColCount( 4 ); + mpLayoutSet2->EnableFullItemMode( FALSE ); + mpLayoutSet2->SetColor( GetControlBackground() ); + + fillLayoutValueSet( mpLayoutSet2, &v_standard[0], bHighContrast ); + + aSize = mpLayoutSet2->GetOutputSizePixel(); + aSize.Width() += (mpLayoutSet2->GetColCount() + 1) * LAYOUT_BORDER_PIX; + aSize.Height() += (mpLayoutSet2->GetLineCount() + 1) * LAYOUT_BORDER_PIX; + mpLayoutSet2->SetOutputSizePixel( aSize ); + + appendEntry( -1, aTitle2 ); + appendEntry( 1, mpLayoutSet2 ); + } + + if( eMode == DrawViewMode_DRAW ) + { + appendSeparator(); + + OUString sSlotStr; + Image aSlotImage; + if( mxFrame.is() ) + { + if( bInsertPage ) + sSlotStr = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DuplicatePage" ) ); + else + sSlotStr = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:Undo" ) ); + aSlotImage = ::GetImage( mxFrame, sSlotStr, FALSE, FALSE ); + + String sSlotTitle; + if( bInsertPage ) + sSlotTitle = ImplRetrieveLabelFromCommand( mxFrame, sSlotStr ); + else + sSlotTitle = String( SdResId( STR_RESET_LAYOUT ) ); + appendEntry( 2, sSlotTitle, aSlotImage); + } + } + + SetOutputSizePixel( getMenuSize() ); +} + +// ----------------------------------------------------------------------- + +LayoutToolbarMenu::~LayoutToolbarMenu() +{ +} + +// ----------------------------------------------------------------------- + +IMPL_LINK( LayoutToolbarMenu, SelectHdl, void *, pControl ) +{ + if ( IsInPopupMode() ) + EndPopupMode(); + + Sequence< PropertyValue > aArgs; + + AutoLayout eLayout = AUTOLAYOUT__END; + + OUString sCommandURL( mrController.getCommandURL() ); + + if( pControl == mpLayoutSet1 ) + { + eLayout = static_cast< AutoLayout >(mpLayoutSet1->GetSelectItemId()-1); + } + else if( pControl == mpLayoutSet2 ) + { + eLayout = static_cast< AutoLayout >(mpLayoutSet2->GetSelectItemId()-1); + } + + if( eLayout != AUTOLAYOUT__END ) + { + aArgs = Sequence< PropertyValue >(1); + aArgs[0].Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "WhatLayout" ) ); + aArgs[0].Value <<= (sal_Int32)eLayout; + } + else if( mbInsertPage ) + { + sCommandURL = OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:DuplicatePage" ) ); + } + + mrController.dispatchCommand( sCommandURL, aArgs ); + + return 0; +} + +// ==================================================================== + +OUString SlideLayoutController_getImplementationName() +{ + return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.sd.SlideLayoutController" )); +} + +// -------------------------------------------------------------------- + +Sequence< OUString > SlideLayoutController_getSupportedServiceNames() throw( RuntimeException ) +{ + Sequence< OUString > aSNS( 1 ); + aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" )); + return aSNS; +} + +// -------------------------------------------------------------------- + +Reference< XInterface > SAL_CALL SlideLayoutController_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) +{ + return *new SlideLayoutController( rSMgr, OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:AssignLayout" )), false ); +} + +// -------------------------------------------------------------------- + +OUString InsertSlideController_getImplementationName() +{ + return OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.sd.InsertSlideController" )); +} + +// -------------------------------------------------------------------- + +Sequence< OUString > InsertSlideController_getSupportedServiceNames() throw( RuntimeException ) +{ + Sequence< OUString > aSNS( 1 ); + aSNS.getArray()[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ToolbarController" )); + return aSNS; +} + +// -------------------------------------------------------------------- + +Reference< XInterface > SAL_CALL InsertSlideController_createInstance( const Reference< XMultiServiceFactory >& rSMgr ) throw( RuntimeException ) +{ + return *new SlideLayoutController( rSMgr, OUString( RTL_CONSTASCII_USTRINGPARAM( ".uno:InsertPage" )), true ); +} + +//======================================================================== +// class SlideLayoutController +//======================================================================== + +SlideLayoutController::SlideLayoutController( const Reference< lang::XMultiServiceFactory >& rServiceManager, const rtl::OUString& sCommandURL, bool bInsertPage ) +: svt::PopupWindowController( rServiceManager, Reference< frame::XFrame >(), sCommandURL ) +, mbInsertPage( bInsertPage ) +{ +} + +// -------------------------------------------------------------------- + +::Window* SlideLayoutController::createPopupWindow( ::Window* pParent ) +{ + return new sd::LayoutToolbarMenu( *this, m_xFrame, pParent, mbInsertPage ); +} + +// -------------------------------------------------------------------- +// XServiceInfo +// -------------------------------------------------------------------- + +OUString SAL_CALL SlideLayoutController::getImplementationName() throw( RuntimeException ) +{ + if( mbInsertPage ) + return InsertSlideController_getImplementationName(); + else + return SlideLayoutController_getImplementationName(); +} + +// -------------------------------------------------------------------- + +Sequence< OUString > SAL_CALL SlideLayoutController::getSupportedServiceNames( ) throw( RuntimeException ) +{ + if( mbInsertPage ) + return InsertSlideController_getSupportedServiceNames(); + else + return SlideLayoutController_getSupportedServiceNames(); +} + +} diff --git a/sd/source/ui/inc/ToolPanelChildWindow.hxx b/sd/source/ui/controller/slidelayoutcontroller.hxx index 721c9baee3ac..5e76d3ad74c7 100644 --- a/sd/source/ui/inc/ToolPanelChildWindow.hxx +++ b/sd/source/ui/controller/slidelayoutcontroller.hxx @@ -25,31 +25,30 @@ * ************************************************************************/ -#ifndef SD_TOOL_PANEL_CHILD_WINDOW_HXX -#define SD_TOOL_PANEL_CHILD_WINDOW_HXX +#ifndef __SD_SLIDELAYOUTCONTROLLER_HXX_ +#define __SD_SLIDELAYOUTCONTROLLER_HXX_ -#include <sfx2/childwin.hxx> +#include <svtools/popupwindowcontroller.hxx> -#define TOOLPANEL_CHILD_WINDOW() ( \ - static_cast< ::sd::toolpanel::ToolPanelChildWindow*>( \ - SfxViewFrame::Current()->GetChildWindow( \ - ::sd::toolpanel::ToolPanelChildWindow::GetChildWindowId() \ - )->GetWindow())) - - -namespace sd { namespace toolpanel { +namespace sd +{ -class ToolPanelChildWindow - : public SfxChildWindow +class SlideLayoutController : public svt::PopupWindowController { public: - ToolPanelChildWindow (::Window*, USHORT, SfxBindings*, SfxChildWinInfo*); - virtual ~ToolPanelChildWindow (void); + SlideLayoutController( const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory >& rServiceManager, const rtl::OUString& sCommandURL, bool bInsertPage ); - SFX_DECL_CHILDWINDOW (ToolPanelChildWindow); -}; + virtual ::Window* createPopupWindow( ::Window* pParent ); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); + using svt::PopupWindowController::createPopupWindow; +private: + bool mbInsertPage; +}; -} } // end of namespaces ::sd::toolpanel +} -#endif +#endif // __SD_SLIDELAYOUTCONTROLLER_HXX_ diff --git a/sd/source/ui/dlg/PaneChildWindows.cxx b/sd/source/ui/dlg/PaneChildWindows.cxx index ca8ee8724037..6a6d515822f8 100644..100755 --- a/sd/source/ui/dlg/PaneChildWindows.cxx +++ b/sd/source/ui/dlg/PaneChildWindows.cxx @@ -29,28 +29,26 @@ #include "precompiled_sd.hxx" #include "PaneChildWindows.hxx" #include "PaneDockingWindow.hrc" +#include "PaneDockingWindow.hxx" +#include "ViewShellBase.hxx" +#include "framework/FrameworkHelper.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "app.hrc" #include "strings.hrc" #include "sdresid.hxx" + #include <sfx2/app.hxx> #include <sfx2/dockwin.hxx> #include <sfx2/bindings.hxx> #include <sfx2/dispatch.hxx> - -namespace sd -{ - SFX_IMPL_DOCKINGWINDOW(LeftPaneImpressChildWindow, SID_LEFT_PANE_IMPRESS) - SFX_IMPL_DOCKINGWINDOW(LeftPaneDrawChildWindow, SID_LEFT_PANE_DRAW) - SFX_IMPL_DOCKINGWINDOW(RightPaneChildWindow, SID_RIGHT_PANE) -} - - -#include "PaneDockingWindow.hxx" -#include "ViewShellBase.hxx" -#include "framework/FrameworkHelper.hxx" +#include <tools/diagnose_ex.h> namespace sd { +SFX_IMPL_DOCKINGWINDOW(LeftPaneImpressChildWindow, SID_LEFT_PANE_IMPRESS) +SFX_IMPL_DOCKINGWINDOW(LeftPaneDrawChildWindow, SID_LEFT_PANE_DRAW) +SFX_IMPL_DOCKINGWINDOW( ToolPanelChildWindow, SID_TASKPANE) + //===== PaneChildWindow ======================================================= PaneChildWindow::PaneChildWindow ( @@ -58,8 +56,8 @@ PaneChildWindow::PaneChildWindow ( USHORT nId, SfxBindings* pBindings, SfxChildWinInfo* pInfo, - const ResId& rResId, - const ::rtl::OUString& rsTitle, + const USHORT nDockWinTitleResId, + const USHORT nTitleBarResId, SfxChildAlignment eAlignment) : SfxChildWindow (pParentWindow, nId) { @@ -67,9 +65,8 @@ PaneChildWindow::PaneChildWindow ( pBindings, this, pParentWindow, - rResId, - framework::FrameworkHelper::msLeftImpressPaneURL, - rsTitle); + SdResId( nDockWinTitleResId ), + String( SdResId( nTitleBarResId ) ) ); eChildAlignment = eAlignment; static_cast<SfxDockingWindow*>(pWindow)->Initialize(pInfo); SetHideNotDelete(TRUE); @@ -112,8 +109,8 @@ LeftPaneImpressChildWindow::LeftPaneImpressChildWindow ( nId, pBindings, pInfo, - SdResId(FLT_LEFT_PANE_IMPRESS_DOCKING_WINDOW), - String(SdResId(STR_LEFT_PANE_IMPRESS_TITLE)), + FLT_LEFT_PANE_IMPRESS_DOCKING_WINDOW, + STR_LEFT_PANE_IMPRESS_TITLE, SFX_ALIGN_LEFT) { } @@ -133,8 +130,8 @@ LeftPaneDrawChildWindow::LeftPaneDrawChildWindow ( nId, pBindings, pInfo, - SdResId(FLT_LEFT_PANE_DRAW_DOCKING_WINDOW), - String(SdResId(STR_LEFT_PANE_DRAW_TITLE)), + FLT_LEFT_PANE_DRAW_DOCKING_WINDOW, + STR_LEFT_PANE_DRAW_TITLE, SFX_ALIGN_LEFT) { } @@ -142,23 +139,40 @@ LeftPaneDrawChildWindow::LeftPaneDrawChildWindow ( -//===== RightPaneChildWindow ================================================== - -RightPaneChildWindow::RightPaneChildWindow ( - ::Window* pParentWindow, - USHORT nId, - SfxBindings* pBindings, - SfxChildWinInfo* pInfo) - : PaneChildWindow( - pParentWindow, - nId, - pBindings, - pInfo, - SdResId(FLT_RIGHT_PANE_DOCKING_WINDOW), - String(SdResId(STR_RIGHT_PANE_TITLE)), - SFX_ALIGN_RIGHT) +//====================================================================================================================== +//= ToolPanelChildWindow +//====================================================================================================================== +//---------------------------------------------------------------------------------------------------------------------- +ToolPanelChildWindow::ToolPanelChildWindow( ::Window* i_pParentWindow, USHORT i_nId, SfxBindings* i_pBindings, + SfxChildWinInfo* i_pChildWindowInfo ) + :PaneChildWindow( i_pParentWindow, i_nId, i_pBindings, i_pChildWindowInfo, + FLT_TOOL_PANEL_DOCKING_WINDOW, STR_RIGHT_PANE_TITLE, SFX_ALIGN_RIGHT ) { } +//---------------------------------------------------------------------------------------------------------------------- +void ToolPanelChildWindow::ActivateToolPanel( const ::rtl::OUString& i_rPanelURL ) +{ + SfxDockingWindow* pDockingWindow = dynamic_cast< SfxDockingWindow* >( GetWindow() ); + ViewShellBase* pViewShellBase = ViewShellBase::GetViewShellBase( pDockingWindow->GetBindings().GetDispatcher()->GetFrame() ); + ENSURE_OR_RETURN_VOID( pViewShellBase != NULL, "ToolPanelChildWindow::ActivateToolPanel: no view shell access!" ); + + const ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper( framework::FrameworkHelper::Instance( *pViewShellBase ) ); + + if ( i_rPanelURL.indexOf( framework::FrameworkHelper::msTaskPanelURLPrefix ) == 0 ) + { + // it's one of our standard panels known to the drawing framework + pFrameworkHelper->RequestTaskPanel( i_rPanelURL ); + } + else + { + // TODO: it would be nice if the drawing framework were able to handle non-standard panels, installed by + // extensions, too. As long as this is not the case, we need to take the direct way ... + ::boost::shared_ptr< ViewShell > pViewShell = pFrameworkHelper->GetViewShell( framework::FrameworkHelper::msRightPaneURL ); + toolpanel::ToolPanelViewShell* pToolPanelViewShell = dynamic_cast< toolpanel::ToolPanelViewShell* >( pViewShell.get() ); + ENSURE_OR_RETURN_VOID( pToolPanelViewShell != NULL, "ToolPanelChildWindow::ActivateToolPanel: no tool panel view shell access!" ); + pToolPanelViewShell->ActivatePanel( i_rPanelURL ); + } +} } // end of namespace ::sd diff --git a/sd/source/ui/dlg/PaneDockingWindow.cxx b/sd/source/ui/dlg/PaneDockingWindow.cxx index c0dcd76f0fae..c1dedd5d8293 100644..100755 --- a/sd/source/ui/dlg/PaneDockingWindow.cxx +++ b/sd/source/ui/dlg/PaneDockingWindow.cxx @@ -41,299 +41,26 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; +using ::sfx2::TitledDockingWindow; namespace sd { -PaneDockingWindow::PaneDockingWindow ( - SfxBindings *_pBindings, - SfxChildWindow *pChildWindow, - ::Window* pParent, - const ResId& rResId, - const ::rtl::OUString& rsPaneURL, - const ::rtl::OUString& rsTitle) - : SfxDockingWindow ( - _pBindings, - pChildWindow, - pParent, - rResId - ), - msPaneURL(rsPaneURL), - msTitle(rsTitle), - mpTitleToolBox(), - maBorder (3,1,3,3), - mnChildWindowId(pChildWindow->GetType()), - mpContentWindow(new ::Window(this)), - mbIsLayoutPending(false) +PaneDockingWindow::PaneDockingWindow( + SfxBindings *_pBindings, SfxChildWindow *pChildWindow, ::Window* pParent, + const ResId& rResId, const ::rtl::OUString& rsTitle ) + :TitledDockingWindow( _pBindings, pChildWindow, pParent, rResId ) { - SetBackground (Wallpaper()); - - InitializeTitleToolBox(); - - // Tell the system window about the new docking window so that it can be - // reached via the keyboard. - SystemWindow* pSystemWindow = GetSystemWindow(); - if (pSystemWindow != NULL) - pSystemWindow->GetTaskPaneList()->AddWindow(this); - - mpContentWindow->Show(); + SetTitle( rsTitle ); } - - - PaneDockingWindow::~PaneDockingWindow (void) { - // Tell the next system window that the docking window is no longer - // available. - SystemWindow* pSystemWindow = GetSystemWindow(); - if (pSystemWindow != NULL) - pSystemWindow->GetTaskPaneList()->RemoveWindow(this); - mpTitleToolBox.reset(); -} - - - - -void PaneDockingWindow::SetTitle (const String& rsTitle) -{ - msTitle = rsTitle; - Invalidate(); -} - - - - -void PaneDockingWindow::Resize (void) -{ - SfxDockingWindow::Resize(); - mbIsLayoutPending = true; -} - - - - -void PaneDockingWindow::Layout (void) -{ - mbIsLayoutPending = false; - - Size aWindowSize (GetOutputSizePixel()); - Size aToolBoxSize (0,0); - int nTitleBarHeight (GetSettings().GetStyleSettings().GetTitleHeight()); - - // Place the title tool box. - if (mpTitleToolBox.get() != NULL) - { - if (IsFloatingMode()) - mpTitleToolBox->HideItem (1); - else - mpTitleToolBox->ShowItem (1); - - aToolBoxSize = mpTitleToolBox->CalcWindowSizePixel(); - if (aToolBoxSize.Height() > nTitleBarHeight) - nTitleBarHeight = aToolBoxSize.Height(); - mpTitleToolBox->SetPosSizePixel ( - Point(aWindowSize.Width()-aToolBoxSize.Width(), - (nTitleBarHeight-aToolBoxSize.Height())/2), - aToolBoxSize); - } - - // Place the content window. - if (nTitleBarHeight < aToolBoxSize.Height()) - nTitleBarHeight = aToolBoxSize.Height(); - aWindowSize.Height() -= nTitleBarHeight; - mpContentWindow->SetPosSizePixel( - Point(maBorder.Left(),nTitleBarHeight+maBorder.Top()), - Size (aWindowSize.Width()-maBorder.Left()-maBorder.Right(), - aWindowSize.Height()-maBorder.Top()-maBorder.Bottom())); -} - - - - -void PaneDockingWindow::Paint (const Rectangle& rRectangle) -{ - if (mbIsLayoutPending) - Layout(); - - SfxDockingWindow::Paint (rRectangle); - int nTitleBarHeight (GetSettings().GetStyleSettings().GetTitleHeight()); - Size aToolBoxSize = mpTitleToolBox->CalcWindowSizePixel(); - if (aToolBoxSize.Height() > nTitleBarHeight) - nTitleBarHeight = aToolBoxSize.Height(); - Color aOriginalLineColor (GetLineColor()); - Color aOriginalFillColor (GetFillColor()); - SetFillColor (GetSettings().GetStyleSettings().GetDialogColor()); - SetLineColor (); - - // Make font bold. - const Font& rOriginalFont (GetFont()); - Font aFont (rOriginalFont); - aFont.SetWeight (WEIGHT_BOLD); - SetFont (aFont); - - // Set border values. - Size aWindowSize (GetOutputSizePixel()); - int nOuterLeft = 0; - int nInnerLeft = nOuterLeft + maBorder.Left() - 1; - int nOuterRight = aWindowSize.Width() - 1; - int nInnerRight = nOuterRight - maBorder.Right() + 1; - int nInnerTop = nTitleBarHeight + maBorder.Top() - 1; - int nOuterBottom = aWindowSize.Height() - 1; - int nInnerBottom = nOuterBottom - maBorder.Bottom() + 1; - - // Paint title bar background. - Rectangle aTitleBarBox (Rectangle( - nOuterLeft, - 0, - nOuterRight, - nInnerTop-1)); - DrawRect (aTitleBarBox); - - if (nInnerLeft > nOuterLeft) - DrawRect ( - Rectangle (nOuterLeft, nInnerTop, nInnerLeft, nInnerBottom)); - if (nOuterRight > nInnerRight) - DrawRect ( - Rectangle (nInnerRight, nInnerTop, nOuterRight, nInnerBottom)); - if (nInnerBottom < nOuterBottom) - DrawRect ( - Rectangle (nOuterLeft, nInnerBottom, nOuterRight, nOuterBottom)); - - // Paint bevel border. - SetFillColor (); - SetLineColor (GetSettings().GetStyleSettings().GetShadowColor()); - if (maBorder.Top() > 0) - DrawLine ( - Point(nInnerLeft,nInnerTop), - Point(nInnerLeft,nInnerBottom)); - if (maBorder.Left() > 0) - DrawLine ( - Point(nInnerLeft,nInnerTop), - Point(nInnerRight,nInnerTop)); - SetLineColor (GetSettings().GetStyleSettings().GetLightColor()); - if (maBorder.Bottom() > 0) - DrawLine ( - Point(nInnerRight,nInnerBottom), - Point(nInnerLeft,nInnerBottom)); - if (maBorder.Right() > 0) - DrawLine ( - Point(nInnerRight,nInnerBottom), - Point(nInnerRight,nInnerTop)); - - // Paint title bar text. - SetLineColor (GetSettings().GetStyleSettings().GetActiveTextColor()); - SetFillColor (); - aTitleBarBox.Left() += 3; - DrawText (aTitleBarBox, msTitle, - TEXT_DRAW_LEFT - | TEXT_DRAW_VCENTER - | TEXT_DRAW_MULTILINE - | TEXT_DRAW_WORDBREAK); - - // Restore original values of the output device. - SetFont (rOriginalFont); - SetFillColor (aOriginalFillColor); } - - - -void PaneDockingWindow::InitializeTitleToolBox (void) -{ - if (mpTitleToolBox.get() == NULL) - { - // Initialize the title tool box. - mpTitleToolBox.reset (new ToolBox(this)); - mpTitleToolBox->SetSelectHdl ( - LINK(this, PaneDockingWindow, ToolboxSelectHandler)); - mpTitleToolBox->SetOutStyle (TOOLBOX_STYLE_FLAT); - mpTitleToolBox->SetBackground (Wallpaper ( - GetSettings().GetStyleSettings().GetDialogColor())); - mpTitleToolBox->Show(); - } - else - mpTitleToolBox->Clear(); - - // Get the closer bitmap and set it as right most button. - Bitmap aBitmap (SdResId (BMP_CLOSE_DOC)); - Bitmap aBitmapHC (SdResId (BMP_CLOSE_DOC_H)); - Image aImage = Image (aBitmap, Color (COL_LIGHTMAGENTA)); - Image aImageHC = Image (aBitmapHC, Color (BMP_COLOR_HIGHCONTRAST)); - mpTitleToolBox->InsertItem (1, - GetSettings().GetStyleSettings().GetHighContrastMode() - ? aImageHC - : aImage); - mpTitleToolBox->ShowItem (1); -} - - - - -USHORT PaneDockingWindow::AddMenu ( - const String& rsMenuName, - ULONG nHelpId, - const Link& rCallback) -{ - // Add the menu before the closer button. - USHORT nItemCount (mpTitleToolBox->GetItemCount()); - USHORT nItemId (nItemCount+1); - mpTitleToolBox->InsertItem ( - nItemId, - rsMenuName, - TIB_DROPDOWNONLY, - nItemCount>0 ? nItemCount-1 : (USHORT)-1); - mpTitleToolBox->SetHelpId( nItemId, nHelpId ); - mpTitleToolBox->SetClickHdl (rCallback); - mpTitleToolBox->SetDropdownClickHdl (rCallback); - - // The tool box has likely changed its size. The title bar has to be - // resized. - Resize(); - Invalidate(); - - return nItemCount+1; -} - - - - -IMPL_LINK(PaneDockingWindow, ToolboxSelectHandler, ToolBox*, pToolBox) -{ - USHORT nId = pToolBox->GetCurItemId(); - - if (nId == 1) - { - EndTracking(); - SfxBoolItem aVisibility (mnChildWindowId, FALSE); - GetBindings().GetDispatcher()->Execute ( - mnChildWindowId, - SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, - &aVisibility, - NULL); - } - - return 0; -} - - - - -long PaneDockingWindow::Notify( NotifyEvent& rNEvt ) -{ - return SfxDockingWindow::Notify (rNEvt); -} - - - - void PaneDockingWindow::StateChanged( StateChangedType nType ) { switch (nType) { - case STATE_CHANGE_INITSHOW: - Resize(); - break; - case STATE_CHANGE_VISIBLE: // The visibility of the docking window has changed. Tell the // ConfigurationController so that it can activate or deactivate @@ -351,61 +78,4 @@ void PaneDockingWindow::StateChanged( StateChangedType nType ) SfxDockingWindow::StateChanged (nType); } - - - -void PaneDockingWindow::DataChanged (const DataChangedEvent& rEvent) -{ - SfxDockingWindow::DataChanged (rEvent); - - switch (rEvent.GetType()) - { - case DATACHANGED_SETTINGS: - if ((rEvent.GetFlags() & SETTINGS_STYLE) == 0) - break; - // else fall through. - case DATACHANGED_FONTS: - case DATACHANGED_FONTSUBSTITUTION: - { - const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings(); - - // Font. - Font aFont = rStyleSettings.GetAppFont(); - if (IsControlFont()) - aFont.Merge(GetControlFont()); - SetZoomedPointFont(aFont); - - // Color. - Color aColor; - if (IsControlForeground()) - aColor = GetControlForeground(); - else - aColor = rStyleSettings.GetButtonTextColor(); - SetTextColor(aColor); - SetTextFillColor(); - - Resize(); - Invalidate(); - } - break; - } -} - - - - -::Window* PaneDockingWindow::GetContentWindow (void) -{ - return mpContentWindow.get(); -} - - - - -::boost::shared_ptr<ToolBox> PaneDockingWindow::GetTitleToolBox (void) const -{ - return mpTitleToolBox; -} - - } // end of namespace ::sd diff --git a/sd/source/ui/dlg/PaneDockingWindow.src b/sd/source/ui/dlg/PaneDockingWindow.src index 0359f9f18182..23b0d19ac79b 100644..100755 --- a/sd/source/ui/dlg/PaneDockingWindow.src +++ b/sd/source/ui/dlg/PaneDockingWindow.src @@ -59,7 +59,7 @@ DockingWindow FLT_LEFT_PANE_DRAW_DOCKING_WINDOW Text [ en-US ] = "Page Pane" ; }; -DockingWindow FLT_RIGHT_PANE_DOCKING_WINDOW +DockingWindow FLT_TOOL_PANEL_DOCKING_WINDOW { // HelpID = SID_EFFECT_WIN ; Border = TRUE ; diff --git a/sd/source/ui/dlg/PaneShells.cxx b/sd/source/ui/dlg/PaneShells.cxx index 2e8032926846..bb1023482ea0 100644..100755 --- a/sd/source/ui/dlg/PaneShells.cxx +++ b/sd/source/ui/dlg/PaneShells.cxx @@ -109,36 +109,30 @@ LeftDrawPaneShell::~LeftDrawPaneShell (void) -//===== RightPaneShell ======================================================== +//===== ToolPanelPaneShell ======================================================== #undef ShellClass -#define ShellClass RightPaneShell +#define ShellClass ToolPanelPaneShell -SFX_SLOTMAP(RightPaneShell) +SFX_SLOTMAP( ToolPanelPaneShell ) { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; -SFX_IMPL_INTERFACE(RightPaneShell, SfxShell, SdResId(STR_RIGHT_PANE_SHELL)) +SFX_IMPL_INTERFACE( ToolPanelPaneShell, SfxShell, SdResId( STR_TOOL_PANEL_SHELL ) ) { - SFX_CHILDWINDOW_REGISTRATION( - ::sd::RightPaneChildWindow::GetChildWindowId()); + SFX_CHILDWINDOW_REGISTRATION( ::sd::ToolPanelChildWindow::GetChildWindowId() ); } -TYPEINIT1(RightPaneShell, SfxShell); - +TYPEINIT1( ToolPanelPaneShell, SfxShell ); - -RightPaneShell::RightPaneShell (void) - : SfxShell() +ToolPanelPaneShell::ToolPanelPaneShell() + :SfxShell() { - SetName(rtl::OUString::createFromAscii("RightPane")); + SetName( ::rtl::OUString::createFromAscii( "ToolPanel" ) ); } - - - -RightPaneShell::~RightPaneShell (void) +ToolPanelPaneShell::~ToolPanelPaneShell(void) { } diff --git a/sd/source/ui/dlg/custsdlg.cxx b/sd/source/ui/dlg/custsdlg.cxx index 2a04f56d2a61..b8c92dee3a6e 100644..100755 --- a/sd/source/ui/dlg/custsdlg.cxx +++ b/sd/source/ui/dlg/custsdlg.cxx @@ -42,7 +42,6 @@ #include "sdpage.hxx" #include "cusshow.hxx" #include "app.hxx" -#include "optsitem.hxx" #include <vcl/msgbox.hxx> diff --git a/sd/source/ui/dlg/makefile.mk b/sd/source/ui/dlg/makefile.mk index 84e5781873f2..ef763dc87f5f 100644..100755 --- a/sd/source/ui/dlg/makefile.mk +++ b/sd/source/ui/dlg/makefile.mk @@ -72,7 +72,6 @@ SRC1FILES =\ PaneDockingWindow.src \ layeroptionsdlg.src - SLOFILES = \ $(SLO)$/inspagob.obj \ $(SLO)$/ins_paste.obj \ diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index 9dbf8e22629c..e6fa5df0de04 100644..100755 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -56,6 +56,7 @@ #include <com/sun/star/embed/XEmbedPersist.hpp> #include <svtools/embedtransfer.hxx> +#include <tools/diagnose_ex.h> #include <ViewShell.hxx> using namespace com::sun::star; @@ -1268,7 +1269,7 @@ sal_Int8 SdPageObjsTLB::ExecuteDrop( const ExecuteDropEvent& rEvt ) } catch (com::sun::star::uno::Exception&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } if (nRet == DND_ACTION_NONE) diff --git a/sd/source/ui/framework/configuration/ConfigurationController.cxx b/sd/source/ui/framework/configuration/ConfigurationController.cxx index 68bf55bb7495..a33bfdcda268 100644..100755 --- a/sd/source/ui/framework/configuration/ConfigurationController.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationController.cxx @@ -56,7 +56,7 @@ using rtl::OUString; using ::sd::framework::FrameworkHelper; #undef VERBOSE -#define VERBOSE 3 +//#define VERBOSE 3 namespace sd { namespace framework { diff --git a/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx b/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx index e708909ee928..ff167f07520a 100644..100755 --- a/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationControllerBroadcaster.cxx @@ -31,6 +31,7 @@ #include <com/sun/star/lang/IllegalArgumentException.hpp> #include <com/sun/star/lang/DisposedException.hpp> #include <tools/debug.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -123,8 +124,7 @@ void ConfigurationControllerBroadcaster::NotifyListeners ( } catch(RuntimeException&) { - DBG_ASSERT(false, - "ConfigurationController: caught exception while notifying listeners"); + DBG_UNHANDLED_EXCEPTION(); } } } @@ -212,8 +212,7 @@ void ConfigurationControllerBroadcaster::DisposeAndClear (void) } catch (RuntimeException&) { - DBG_ASSERT(false, - "ConfigurationController: caught exception while notifying dispose"); + DBG_UNHANDLED_EXCEPTION(); } } else diff --git a/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx b/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx index bb5aab8a05d3..93ff7ee54e00 100644..100755 --- a/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx @@ -32,6 +32,7 @@ #include "ResourceFactoryManager.hxx" #include "framework/FrameworkHelper.hxx" #include <com/sun/star/lang/DisposedException.hpp> +#include <tools/diagnose_ex.h> #include <algorithm> #include <boost/bind.hpp> @@ -168,7 +169,7 @@ void ConfigurationControllerResourceManager::ActivateResource ( } catch(Exception&) { - OSL_ENSURE(false, "caught exception while activating resource"); + DBG_UNHANDLED_EXCEPTION(); } if (xResource.is()) @@ -197,7 +198,7 @@ void ConfigurationControllerResourceManager::ActivateResource ( } catch (RuntimeException&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } } @@ -257,7 +258,7 @@ void ConfigurationControllerResourceManager::DeactivateResource ( } catch (RuntimeException&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } #if defined VERBOSE && VERBOSE>=1 diff --git a/sd/source/ui/framework/configuration/ConfigurationTracer.cxx b/sd/source/ui/framework/configuration/ConfigurationTracer.cxx index 63e45f8bb110..498f0670542e 100644..100755 --- a/sd/source/ui/framework/configuration/ConfigurationTracer.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationTracer.cxx @@ -41,16 +41,16 @@ void ConfigurationTracer::TraceConfiguration ( const char* pMessage) { #ifdef DEBUG - OSL_TRACE("%s at %p {\n", pMessage, rxConfiguration.get()); + OSL_TRACE("%s at %p {", pMessage, rxConfiguration.get()); if (rxConfiguration.is()) { TraceBoundResources(rxConfiguration, NULL, 0); } else { - OSL_TRACE(" empty\n"); + OSL_TRACE(" empty"); } - OSL_TRACE("}\n"); + OSL_TRACE("}"); #else (void)rxConfiguration; (void)pMessage; @@ -74,7 +74,7 @@ void ConfigurationTracer::TraceBoundResources ( ::rtl::OUString sLine (aResourceList[nIndex]->getResourceURL()); for (int i=0; i<nIndentation; ++i) sLine = sIndentation + sLine; - OSL_TRACE("%s\n", OUStringToOString(sLine, RTL_TEXTENCODING_UTF8).getStr()); + OSL_TRACE("%s", OUStringToOString(sLine, RTL_TEXTENCODING_UTF8).getStr()); TraceBoundResources(rxConfiguration, aResourceList[nIndex], nIndentation+1); } #else diff --git a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx index 5db5cb436739..aa8aca5a5ffd 100644..100755 --- a/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx +++ b/sd/source/ui/framework/configuration/ConfigurationUpdater.cxx @@ -35,6 +35,7 @@ #include "framework/FrameworkHelper.hxx" #include <comphelper/scopeguard.hxx> +#include <tools/diagnose_ex.h> #include <boost/bind.hpp> @@ -46,7 +47,7 @@ using ::rtl::OUString; using ::std::vector; #undef VERBOSE -#define VERBOSE 2 +//#define VERBOSE 2 namespace { static const sal_Int32 snShortTimeout (100); @@ -128,7 +129,7 @@ void ConfigurationUpdater::RequestUpdate ( if (IsUpdatePossible()) { #if defined VERBOSE && VERBOSE>=1 - OSL_TRACE("UpdateConfiguration start\n"); + OSL_TRACE("UpdateConfiguration start"); #endif // Call UpdateConfiguration while that is possible and while someone @@ -146,7 +147,7 @@ void ConfigurationUpdater::RequestUpdate ( { mbUpdatePending = true; #if defined VERBOSE && VERBOSE>=1 - OSL_TRACE("scheduling update for later\n"); + OSL_TRACE("scheduling update for later"); #endif } } @@ -185,7 +186,7 @@ bool ConfigurationUpdater::IsUpdatePossible (void) void ConfigurationUpdater::UpdateConfiguration (void) { #if defined VERBOSE && VERBOSE>=1 - OSL_TRACE("UpdateConfiguration update\n"); + OSL_TRACE("UpdateConfiguration update"); #endif SetUpdateBeingProcessed(true); comphelper::ScopeGuard aScopeGuard ( @@ -200,7 +201,7 @@ void ConfigurationUpdater::UpdateConfiguration (void) if (aClassifier.Partition()) { #if defined VERBOSE && VERBOSE>=2 - OSL_TRACE("ConfigurationUpdater::UpdateConfiguration(\n"); + OSL_TRACE("ConfigurationUpdater::UpdateConfiguration("); ConfigurationTracer::TraceConfiguration( mxRequestedConfiguration, "requested configuration"); ConfigurationTracer::TraceConfiguration( @@ -232,7 +233,7 @@ void ConfigurationUpdater::UpdateConfiguration (void) else { #if defined VERBOSE && VERBOSE>0 - OSL_TRACE("nothing to do\n"); + OSL_TRACE("nothing to do"); #if defined VERBOSE && VERBOSE>=2 ConfigurationTracer::TraceConfiguration( mxRequestedConfiguration, "requested configuration"); @@ -244,8 +245,7 @@ void ConfigurationUpdater::UpdateConfiguration (void) } catch (RuntimeException e) { - OSL_TRACE("caught exception while updating the current configuration"); - DBG_ASSERT(false, "caught exception while updating the current configuration"); + DBG_UNHANDLED_EXCEPTION(); } #if defined VERBOSE && VERBOSE>0 @@ -310,11 +310,11 @@ void ConfigurationUpdater::UpdateCore (const ConfigurationClassifier& rClassifie { #if defined VERBOSE && VERBOSE>=2 rClassifier.TraceResourceIdVector( - "requested but not current resources:\n", rClassifier.GetC1minusC2()); + "requested but not current resources:", rClassifier.GetC1minusC2()); rClassifier.TraceResourceIdVector( - "current but not requested resources:\n", rClassifier.GetC2minusC1()); + "current but not requested resources:", rClassifier.GetC2minusC1()); rClassifier.TraceResourceIdVector( - "requested and current resources:\n", rClassifier.GetC1andC2()); + "requested and current resources:", rClassifier.GetC1andC2()); #endif // Updating of the sub controllers is done in two steps. In the @@ -325,11 +325,11 @@ void ConfigurationUpdater::UpdateCore (const ConfigurationClassifier& rClassifie mpResourceManager->ActivateResources(rClassifier.GetC1minusC2(), mxCurrentConfiguration); #if defined VERBOSE && VERBOSE>=2 - OSL_TRACE("ConfigurationController::UpdateConfiguration)\n"); + OSL_TRACE("ConfigurationController::UpdateConfiguration)"); ConfigurationTracer::TraceConfiguration( - mxRequestedConfiguration, "requested configuration\n"); + mxRequestedConfiguration, "requested configuration"); ConfigurationTracer::TraceConfiguration( - mxCurrentConfiguration, "current configuration\n"); + mxCurrentConfiguration, "current configuration"); #endif // Deactivate pure anchors that have no child. @@ -340,7 +340,7 @@ void ConfigurationUpdater::UpdateCore (const ConfigurationClassifier& rClassifie } catch(RuntimeException) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } } @@ -401,7 +401,7 @@ void ConfigurationUpdater::CheckPureAnchors ( if (bDeactiveCurrentResource) { #if defined VERBOSE && VERBOSE>=2 - OSL_TRACE("deactiving pure anchor %s because it has no children\n", + OSL_TRACE("deactiving pure anchor %s because it has no children", OUStringToOString( FrameworkHelper::ResourceIdToString(xResourceId), RTL_TEXTENCODING_UTF8).getStr()); @@ -458,14 +458,14 @@ void ConfigurationUpdater::SetUpdateBeingProcessed (bool bValue) IMPL_LINK(ConfigurationUpdater, TimeoutHandler, Timer*, EMPTYARG) { - OSL_TRACE("configuration update timer\n"); + OSL_TRACE("configuration update timer"); if ( ! mbUpdateBeingProcessed && mxCurrentConfiguration.is() && mxRequestedConfiguration.is()) { if ( ! AreConfigurationsEquivalent(mxCurrentConfiguration, mxRequestedConfiguration)) { - OSL_TRACE("configurations differ, requesting update\n"); + OSL_TRACE("configurations differ, requesting update"); RequestUpdate(mxRequestedConfiguration); } } diff --git a/sd/source/ui/framework/factories/BasicPaneFactory.cxx b/sd/source/ui/framework/factories/BasicPaneFactory.cxx index 969844f7650d..d6f60506c62f 100644..100755 --- a/sd/source/ui/framework/factories/BasicPaneFactory.cxx +++ b/sd/source/ui/framework/factories/BasicPaneFactory.cxx @@ -44,6 +44,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; using ::rtl::OUString; @@ -270,7 +271,7 @@ void SAL_CALL BasicPaneFactory::initialize (const Sequence<Any>& aArguments) Reference<XResource> SAL_CALL BasicPaneFactory::createResource ( const Reference<XResourceId>& rxPaneId) - throw (RuntimeException) + throw (RuntimeException, IllegalArgumentException, WrappedTargetException) { ThrowIfDisposed(); @@ -528,8 +529,8 @@ Reference<XResource> BasicPaneFactory::CreateChildWindowPane ( break; case RightPaneId: - pShell.reset(new RightPaneShell()); - nChildWindowId = ::sd::RightPaneChildWindow::GetChildWindowId(); + pShell.reset(new ToolPanelPaneShell()); + nChildWindowId = ::sd::ToolPanelChildWindow::GetChildWindowId(); break; default: diff --git a/sd/source/ui/framework/factories/BasicPaneFactory.hxx b/sd/source/ui/framework/factories/BasicPaneFactory.hxx index 1f442656d1d9..bceeae60003a 100644..100755 --- a/sd/source/ui/framework/factories/BasicPaneFactory.hxx +++ b/sd/source/ui/framework/factories/BasicPaneFactory.hxx @@ -99,7 +99,7 @@ public: virtual css::uno::Reference<css::drawing::framework::XResource> SAL_CALL createResource ( const css::uno::Reference<css::drawing::framework::XResourceId>& rxPaneId) - throw (css::uno::RuntimeException); + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); virtual void SAL_CALL releaseResource ( diff --git a/sd/source/ui/framework/factories/BasicToolBarFactory.cxx b/sd/source/ui/framework/factories/BasicToolBarFactory.cxx index 4645b0462399..d353cfc58c1f 100644..100755 --- a/sd/source/ui/framework/factories/BasicToolBarFactory.cxx +++ b/sd/source/ui/framework/factories/BasicToolBarFactory.cxx @@ -38,6 +38,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; namespace sd { namespace framework { @@ -191,7 +192,7 @@ void SAL_CALL BasicToolBarFactory::disposing ( Reference<XResource> SAL_CALL BasicToolBarFactory::createResource ( const Reference<XResourceId>& rxToolBarId) - throw (RuntimeException) + throw (RuntimeException, IllegalArgumentException, WrappedTargetException) { ThrowIfDisposed(); diff --git a/sd/source/ui/framework/factories/BasicToolBarFactory.hxx b/sd/source/ui/framework/factories/BasicToolBarFactory.hxx index c305c334bf0f..686de897c179 100644..100755 --- a/sd/source/ui/framework/factories/BasicToolBarFactory.hxx +++ b/sd/source/ui/framework/factories/BasicToolBarFactory.hxx @@ -80,7 +80,7 @@ public: createResource ( const css::uno::Reference< css::drawing::framework::XResourceId>& rxToolBarId) - throw (css::uno::RuntimeException); + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); virtual void SAL_CALL releaseResource ( diff --git a/sd/source/ui/framework/factories/BasicViewFactory.cxx b/sd/source/ui/framework/factories/BasicViewFactory.cxx index 4f0137ea6530..1320df5c827b 100644..100755 --- a/sd/source/ui/framework/factories/BasicViewFactory.cxx +++ b/sd/source/ui/framework/factories/BasicViewFactory.cxx @@ -42,7 +42,7 @@ #include "DrawViewShell.hxx" #include "GraphicViewShell.hxx" #include "OutlineViewShell.hxx" -#include "TaskPaneViewShell.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "PresentationViewShell.hxx" #include "SlideSorterViewShell.hxx" #include "FrameView.hxx" @@ -55,6 +55,7 @@ using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; using ::rtl::OUString; @@ -189,7 +190,7 @@ void SAL_CALL BasicViewFactory::disposing (void) Reference<XResource> SAL_CALL BasicViewFactory::createResource ( const Reference<XResourceId>& rxViewId) - throw(RuntimeException) + throw(RuntimeException, IllegalArgumentException, WrappedTargetException) { Reference<XResource> xView; const bool bIsCenterPane ( @@ -372,7 +373,7 @@ void SAL_CALL BasicViewFactory::initialize (const Sequence<Any>& aArguments) pDescriptor->mpViewShell, rxViewId, rxPane->getWindow()); - pDescriptor->mxView = Reference<XResource>(pDescriptor->mpWrapper); + pDescriptor->mxView.set( pDescriptor->mpWrapper->queryInterface( XResource::static_type() ), UNO_QUERY_THROW ); } return pDescriptor; @@ -449,7 +450,7 @@ void SAL_CALL BasicViewFactory::initialize (const Sequence<Any>& aArguments) else if (rsViewURL.equals(FrameworkHelper::msTaskPaneURL)) { pViewShell.reset( - new ::sd::toolpanel::TaskPaneViewShell ( + new ::sd::toolpanel::ToolPanelViewShell( &rFrame, *mpBase, &rWindow, diff --git a/sd/source/ui/framework/factories/BasicViewFactory.hxx b/sd/source/ui/framework/factories/BasicViewFactory.hxx index cc9218af26cc..e5bb43551a24 100644..100755 --- a/sd/source/ui/framework/factories/BasicViewFactory.hxx +++ b/sd/source/ui/framework/factories/BasicViewFactory.hxx @@ -96,7 +96,7 @@ public: virtual css::uno::Reference<css::drawing::framework::XResource> SAL_CALL createResource ( const css::uno::Reference<css::drawing::framework::XResourceId>& rxViewId) - throw(css::uno::RuntimeException); + throw(css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); virtual void SAL_CALL releaseResource ( const css::uno::Reference<css::drawing::framework::XResource>& xView) diff --git a/sd/source/ui/framework/factories/ChildWindowPane.cxx b/sd/source/ui/framework/factories/ChildWindowPane.cxx index 290c84c3ec75..5e4e6df987f0 100644..100755 --- a/sd/source/ui/framework/factories/ChildWindowPane.cxx +++ b/sd/source/ui/framework/factories/ChildWindowPane.cxx @@ -191,7 +191,7 @@ void SAL_CALL ChildWindowPane::disposing (void) break; // At last, we have access to the window and its UNO wrapper. - mpWindow = pDockingWindow->GetContentWindow(); + mpWindow = &pDockingWindow->GetContentWindow(); mxWindow = VCLUnoHelper::GetInterface(mpWindow); // Register as window listener to be informed when the child window diff --git a/sd/source/ui/framework/factories/PresentationFactory.cxx b/sd/source/ui/framework/factories/PresentationFactory.cxx index 6ede6e439e02..6f22f1484627 100644..100755 --- a/sd/source/ui/framework/factories/PresentationFactory.cxx +++ b/sd/source/ui/framework/factories/PresentationFactory.cxx @@ -34,10 +34,12 @@ #include "ViewShellBase.hxx" #include <com/sun/star/drawing/framework/XControllerManager.hpp> #include <cppuhelper/compbase1.hxx> +#include <tools/diagnose_ex.h> #include "slideshow.hxx" using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; using ::rtl::OUString; @@ -154,7 +156,7 @@ PresentationFactory::PresentationFactory ( } catch (RuntimeException&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } } @@ -180,7 +182,7 @@ void SAL_CALL PresentationFactory::disposing (void) Reference<XResource> SAL_CALL PresentationFactory::createResource ( const Reference<XResourceId>& rxViewId) - throw (RuntimeException) + throw (RuntimeException, IllegalArgumentException, WrappedTargetException) { ThrowIfDisposed(); @@ -308,7 +310,7 @@ void SAL_CALL PresentationFactoryProvider::initialize( } catch (RuntimeException&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } } } diff --git a/sd/source/ui/framework/factories/TaskPanelFactory.cxx b/sd/source/ui/framework/factories/TaskPanelFactory.cxx index 8942833d2483..1cd156817afc 100644..100755 --- a/sd/source/ui/framework/factories/TaskPanelFactory.cxx +++ b/sd/source/ui/framework/factories/TaskPanelFactory.cxx @@ -27,18 +27,19 @@ #include "precompiled_sd.hxx" #include "TaskPanelFactory.hxx" -#include "TaskPaneViewShell.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "DrawController.hxx" #include "framework/FrameworkHelper.hxx" #include <cppuhelper/compbase1.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; using namespace ::com::sun::star::drawing::framework; using ::rtl::OUString; using ::sd::framework::FrameworkHelper; -using ::sd::toolpanel::TaskPaneViewShell; namespace sd { namespace framework { @@ -85,14 +86,11 @@ class TaskPanelResource { public: TaskPanelResource ( - const Reference<XResourceId>& rxResourceId, - const TaskPaneViewShell::PanelId ePaneId); + const Reference<XResourceId>& rxResourceId ); virtual ~TaskPanelResource (); virtual void SAL_CALL disposing (); - TaskPaneViewShell::PanelId GetPaneId () const; - // XResource virtual Reference<XResourceId> SAL_CALL getResourceId (void) @@ -103,7 +101,6 @@ public: private: const Reference<XResourceId> mxResourceId; - const TaskPaneViewShell::PanelId mePaneId; }; } // end of anonymous namespace. @@ -185,9 +182,27 @@ void SAL_CALL TaskPanelFactory::initialize( //===== XResourceController =================================================== +namespace +{ + void lcl_collectResourceURLs( const Reference< XResourceId >& i_rResourceId, ::std::vector< ::rtl::OUString >& o_rResourceURLs ) + { + ENSURE_OR_RETURN_VOID( i_rResourceId.is(), "illegal resource ID" ); + o_rResourceURLs.resize(0); + + Reference< XResourceId > xResourceId( i_rResourceId ); + ::rtl::OUString sResourceURL = xResourceId->getResourceURL(); + while ( sResourceURL.getLength() > 0 ) + { + o_rResourceURLs.push_back( sResourceURL ); + xResourceId = xResourceId->getAnchor(); + sResourceURL = xResourceId->getResourceURL(); + } + } +} + Reference<XResource> SAL_CALL TaskPanelFactory::createResource ( const Reference<XResourceId>& rxResourceId) - throw (RuntimeException) + throw (RuntimeException, IllegalArgumentException, WrappedTargetException) { Reference<XResource> xResource; @@ -196,45 +211,26 @@ Reference<XResource> SAL_CALL TaskPanelFactory::createResource ( OUString sResourceURL (rxResourceId->getResourceURL()); - if (sResourceURL.match(FrameworkHelper::msTaskPanelURLPrefix)) + if ( sResourceURL.match( FrameworkHelper::msTaskPanelURLPrefix ) ) { - TaskPaneViewShell::PanelId ePaneId (TaskPaneViewShell::PID_UNKNOWN); + toolpanel::PanelId ePanelId( toolpanel::GetStandardPanelId( sResourceURL ) ); - if (sResourceURL.equals(FrameworkHelper::msMasterPagesTaskPanelURL)) + if ( ( ePanelId != toolpanel::PID_UNKNOWN ) && ( mpViewShellBase != NULL ) ) { - ePaneId = TaskPaneViewShell::PID_MASTER_PAGES; - } - else if (sResourceURL.equals(FrameworkHelper::msLayoutTaskPanelURL)) - { - ePaneId = TaskPaneViewShell::PID_LAYOUT; - } - else if (sResourceURL.equals(FrameworkHelper::msTableDesignPanelURL)) - { - ePaneId = TaskPaneViewShell::PID_TABLE_DESIGN; - } - else if (sResourceURL.equals(FrameworkHelper::msCustomAnimationTaskPanelURL)) - { - ePaneId = TaskPaneViewShell::PID_CUSTOM_ANIMATION; - } - else if (sResourceURL.equals(FrameworkHelper::msSlideTransitionTaskPanelURL)) - { - ePaneId = TaskPaneViewShell::PID_SLIDE_TRANSITION; - } + ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( *mpViewShellBase ) ); - if (ePaneId!=TaskPaneViewShell::PID_UNKNOWN && mpViewShellBase!=NULL) - { - toolpanel::TaskPaneViewShell* pTaskPane - = dynamic_cast<toolpanel::TaskPaneViewShell*>( - FrameworkHelper::Instance(*mpViewShellBase) - ->GetViewShell(FrameworkHelper::msRightPaneURL).get()); - if (pTaskPane != NULL) - { - xResource = new TaskPanelResource( - rxResourceId, - ePaneId); - pTaskPane->ShowPanel(ePaneId); - pTaskPane->ExpandPanel(ePaneId); - } + // assume that the top-level anchor is the URL of the pane + ::std::vector< ::rtl::OUString > aResourceURLs; + lcl_collectResourceURLs( rxResourceId, aResourceURLs ); + + const ::rtl::OUString sPaneURL = aResourceURLs[ aResourceURLs.size() - 1 ]; + const ::boost::shared_ptr< ViewShell > pPaneViewShell( pFrameworkHelper->GetViewShell( sPaneURL ) ); + + toolpanel::ToolPanelViewShell* pToolPanel = dynamic_cast< toolpanel::ToolPanelViewShell* >( pPaneViewShell.get() ); + if ( pToolPanel != NULL ) + xResource = new TaskPanelResource( rxResourceId ); + + OSL_POSTCOND( xResource.is(), "TaskPanelFactory::createResource: did not find the given resource!" ); } } @@ -248,16 +244,37 @@ void SAL_CALL TaskPanelFactory::releaseResource ( const Reference<XResource>& rxResource) throw (RuntimeException) { - toolpanel::TaskPaneViewShell* pTaskPane - = dynamic_cast<toolpanel::TaskPaneViewShell*>( - FrameworkHelper::Instance(*mpViewShellBase) - ->GetViewShell(FrameworkHelper::msRightPaneURL).get()); + ENSURE_OR_RETURN_VOID( rxResource.is(), "illegal resource" ); + const Reference< XResourceId > xResourceId( rxResource->getResourceId(), UNO_SET_THROW ); + + // assume that the top-level anchor is the URL of the pane + ::std::vector< ::rtl::OUString > aResourceURLs; + lcl_collectResourceURLs( xResourceId, aResourceURLs ); - rtl::Reference<TaskPanelResource> pResource = dynamic_cast<TaskPanelResource*>( - rxResource.get()); + OSL_ENSURE( !aResourceURLs.empty(), "TaskPanelFactory::releaseResource: illegal resource/URL!" ); + if ( !aResourceURLs.empty() ) + { + const ::rtl::OUString sPaneURL = aResourceURLs[ aResourceURLs.size() - 1 ]; + ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( *mpViewShellBase ) ); + const ::boost::shared_ptr< ViewShell > pPaneViewShell( pFrameworkHelper->GetViewShell( sPaneURL ) ); + if ( pPaneViewShell != NULL ) + { + const ::rtl::OUString sPanelResourceURL( xResourceId->getResourceURL() ); + const toolpanel::PanelId ePanelId( toolpanel::GetStandardPanelId( sPanelResourceURL ) ); + toolpanel::ToolPanelViewShell* pToolPanel = dynamic_cast< toolpanel::ToolPanelViewShell* >( pPaneViewShell.get() ); - if (pTaskPane != NULL && pResource.is()) - pTaskPane->CollapsePanel(pResource->GetPaneId()); + if ( ( ePanelId != toolpanel::PID_UNKNOWN ) + && ( pToolPanel != NULL ) + ) + { + pToolPanel->DeactivatePanel( sPanelResourceURL ); + } + else + { + OSL_ENSURE( false, "TaskPanelFactory::releaseResource: don't know what to do with this resource!" ); + } + } + } Reference<XComponent> xComponent (rxResource, UNO_QUERY); if (xComponent.is()) @@ -289,11 +306,9 @@ void TaskPanelFactory::ThrowIfDisposed (void) const namespace { TaskPanelResource::TaskPanelResource ( - const Reference<XResourceId>& rxResourceId, - const TaskPaneViewShell::PanelId ePaneId) + const Reference<XResourceId>& rxResourceId) : TaskPanelResourceInterfaceBase(m_aMutex), - mxResourceId(rxResourceId), - mePaneId(ePaneId) + mxResourceId(rxResourceId) { } @@ -314,14 +329,6 @@ void SAL_CALL TaskPanelResource::disposing () -TaskPaneViewShell::PanelId TaskPanelResource::GetPaneId () const -{ - return mePaneId; -} - - - - Reference<XResourceId> SAL_CALL TaskPanelResource::getResourceId () throw (css::uno::RuntimeException) { diff --git a/sd/source/ui/framework/factories/TaskPanelFactory.hxx b/sd/source/ui/framework/factories/TaskPanelFactory.hxx index 1130a106a56c..1ab2fa783a4a 100644..100755 --- a/sd/source/ui/framework/factories/TaskPanelFactory.hxx +++ b/sd/source/ui/framework/factories/TaskPanelFactory.hxx @@ -80,7 +80,7 @@ public: SAL_CALL createResource ( const css::uno::Reference< css::drawing::framework::XResourceId>& rxResourcesId) - throw (css::uno::RuntimeException); + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); virtual void SAL_CALL releaseResource ( const css::uno::Reference< diff --git a/sd/source/ui/framework/factories/ViewShellWrapper.cxx b/sd/source/ui/framework/factories/ViewShellWrapper.cxx index 0a3aeccade7c..a1c0bd525c9e 100644..100755 --- a/sd/source/ui/framework/factories/ViewShellWrapper.cxx +++ b/sd/source/ui/framework/factories/ViewShellWrapper.cxx @@ -29,22 +29,32 @@ #include "framework/ViewShellWrapper.hxx" #include "framework/Pane.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "ViewShell.hxx" #include "Window.hxx" #include <com/sun/star/drawing/framework/XPane.hpp> +#include <com/sun/star/lang/DisposedException.hpp> #include <rtl/uuid.h> #include <toolkit/helper/vclunohelper.hxx> +#include <comphelper/sequence.hxx> +#include <cppuhelper/typeprovider.hxx> #include <vcl/svapp.hxx> #include <vos/mutex.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; +using ::com::sun::star::awt::XWindow; +using ::com::sun::star::rendering::XCanvas; +using ::com::sun::star::lang::DisposedException; + using ::rtl::OUString; +using ::sd::toolpanel::ToolPanelViewShell; namespace sd { namespace framework { @@ -79,6 +89,8 @@ ViewShellWrapper::~ViewShellWrapper (void) void SAL_CALL ViewShellWrapper::disposing (void) { + ::osl::MutexGuard aGuard( maMutex ); + OSL_TRACE("disposing ViewShellWrapper %x", this); Reference<awt::XWindow> xWindow (mxWindow); if (xWindow.is()) @@ -101,14 +113,6 @@ void SAL_CALL ViewShellWrapper::disposing (void) -bool ViewShellWrapper::IsUnique (void) -{ - return m_refCount==1; -} - - - - //----- XResource ------------------------------------------------------------- Reference<XResourceId> SAL_CALL ViewShellWrapper::getResourceId (void) @@ -177,7 +181,7 @@ const Sequence<sal_Int8>& ViewShellWrapper::getUnoTunnelId (void) static Sequence<sal_Int8>* pSequence = NULL; if (pSequence == NULL) { - const ::vos::OGuard aSolarGuard (Application::GetSolarMutex()); + const ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); if (pSequence == NULL) { static ::com::sun::star::uno::Sequence<sal_Int8> aSequence (16); diff --git a/sd/source/ui/framework/module/ImpressModule.cxx b/sd/source/ui/framework/module/ImpressModule.cxx index 050429b3f289..a5856bc3ebc9 100644..100755 --- a/sd/source/ui/framework/module/ImpressModule.cxx +++ b/sd/source/ui/framework/module/ImpressModule.cxx @@ -33,7 +33,7 @@ #include "ViewTabBarModule.hxx" #include "CenterViewFocusModule.hxx" #include "SlideSorterModule.hxx" -#include "TaskPaneModule.hxx" +#include "ToolPanelModule.hxx" #include "ToolBarModule.hxx" #include "ShellStackGuard.hxx" @@ -54,7 +54,7 @@ void ImpressModule::Initialize (Reference<frame::XController>& rxController) new SlideSorterModule( rxController, FrameworkHelper::msLeftImpressPaneURL); - TaskPaneModule::Initialize(rxController); + ToolPanelModule::Initialize(rxController); new ToolBarModule(rxController); new ShellStackGuard(rxController); } diff --git a/sd/source/ui/framework/module/ModuleController.cxx b/sd/source/ui/framework/module/ModuleController.cxx index b90ebe851f0e..e910a8df7496 100644..100755 --- a/sd/source/ui/framework/module/ModuleController.cxx +++ b/sd/source/ui/framework/module/ModuleController.cxx @@ -35,6 +35,8 @@ #include <boost/bind.hpp> #include <hash_map> +#include <tools/diagnose_ex.h> + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; @@ -168,7 +170,7 @@ void ModuleController::LoadFactories (const Reference<XComponentContext>& rxCont } catch (Exception&) { - OSL_TRACE("ERROR in ModuleController::LoadFactories"); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/sd/source/ui/framework/module/PresentationModule.cxx b/sd/source/ui/framework/module/PresentationModule.cxx index e28432a25d93..6a5ba5dc5e7f 100644..100755 --- a/sd/source/ui/framework/module/PresentationModule.cxx +++ b/sd/source/ui/framework/module/PresentationModule.cxx @@ -31,7 +31,6 @@ #include "CenterViewFocusModule.hxx" #include "SlideSorterModule.hxx" -#include "TaskPaneModule.hxx" using namespace ::com::sun::star; using namespace ::com::sun::star::uno; diff --git a/sd/source/ui/framework/module/TaskPaneModule.cxx b/sd/source/ui/framework/module/ToolPanelModule.cxx index 03e2277bdcd3..888fa68ad708 100644 --- a/sd/source/ui/framework/module/TaskPaneModule.cxx +++ b/sd/source/ui/framework/module/ToolPanelModule.cxx @@ -2,10 +2,13 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2000, 2010 Oracle and/or its affiliates. + * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * + * $RCSfile: ToolPanelModule.cxx,v $ + * $Revision: 1.4 $ + * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -27,7 +30,7 @@ #include "precompiled_sd.hxx" -#include "TaskPaneModule.hxx" +#include "ToolPanelModule.hxx" #include "ReadOnlyModeObserver.hxx" #include "framework/FrameworkHelper.hxx" @@ -54,7 +57,7 @@ typedef ::cppu::WeakComponentImplHelper1 < > LocalReadOnlyModeObserverInterfaceBase; /** This local class enables or disables the ResourceManager of a - TaskPaneModule. It connects to a ReadOnlyModeObserver and is called + ToolPanelModule. It connects to a ReadOnlyModeObserver and is called when the state of the .uno:EditDoc command changes. When either the ResourceManager or the ReadOnlyModeObserver are disposed then the LocalReadOnlyModeObserver disposes itself. The link @@ -138,9 +141,9 @@ private: -//===== TaskPaneModule ==================================================== +//===== ToolPanelModule ==================================================== -void TaskPaneModule::Initialize (const Reference<frame::XController>& rxController) +void ToolPanelModule::Initialize (const Reference<frame::XController>& rxController) { ::rtl::Reference<ResourceManager> pResourceManager ( new ResourceManager( diff --git a/sd/source/ui/framework/module/TaskPaneModule.hxx b/sd/source/ui/framework/module/ToolPanelModule.hxx index 3495e4c93a73..7d728e60e93d 100644 --- a/sd/source/ui/framework/module/TaskPaneModule.hxx +++ b/sd/source/ui/framework/module/ToolPanelModule.hxx @@ -1,5 +1,4 @@ /************************************************************************* - * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. @@ -23,10 +22,10 @@ * <http://www.openoffice.org/license.html> * for a copy of the LGPLv3 License. * - ************************************************************************/ +************************************************************************/ -#ifndef SD_FRAMEWORK_TASK_PANE_MODULE_HXX -#define SD_FRAMEWORK_TASK_PANE_MODULE_HXX +#ifndef SD_FRAMEWORK_TOOL_PANEL_MODULE_HXX +#define SD_FRAMEWORK_TOOL_PANEL_MODULE_HXX #include "ResourceManager.hxx" @@ -38,7 +37,7 @@ class ReadOnlyModeObserver; /** This module is responsible for showing the task pane. */ -class TaskPaneModule +class ToolPanelModule { public: static void Initialize ( diff --git a/sd/source/ui/framework/module/makefile.mk b/sd/source/ui/framework/module/makefile.mk index 56c864a7df53..bec9b1a04075 100644..100755 --- a/sd/source/ui/framework/module/makefile.mk +++ b/sd/source/ui/framework/module/makefile.mk @@ -52,7 +52,7 @@ SLOFILES = \ $(SLO)$/ResourceManager.obj \ $(SLO)$/ShellStackGuard.obj \ $(SLO)$/SlideSorterModule.obj \ - $(SLO)$/TaskPaneModule.obj \ + $(SLO)$/ToolPanelModule.obj \ $(SLO)$/ToolBarModule.obj \ $(SLO)$/ViewTabBarModule.obj diff --git a/sd/source/ui/framework/tools/FrameworkHelper.cxx b/sd/source/ui/framework/tools/FrameworkHelper.cxx index 25790e736473..8c63a6871483 100644..100755 --- a/sd/source/ui/framework/tools/FrameworkHelper.cxx +++ b/sd/source/ui/framework/tools/FrameworkHelper.cxx @@ -52,6 +52,7 @@ #include "vcl/svapp.hxx" #include <osl/doublecheckedlocking.h> #include <osl/getglobalmutex.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -218,7 +219,7 @@ const OUString FrameworkHelper::msViewTabBarURL( // Task panel URLs. const ::rtl::OUString FrameworkHelper::msTaskPanelURLPrefix( - OUString::createFromAscii("private:resource/taskpanel/")); + OUString::createFromAscii("private:resource/toolpanel/DrawingFramework/")); const ::rtl::OUString FrameworkHelper::msMasterPagesTaskPanelURL( msTaskPanelURLPrefix + OUString::createFromAscii("MasterPages")); const ::rtl::OUString FrameworkHelper::msLayoutTaskPanelURL( @@ -252,6 +253,46 @@ const OUString FrameworkHelper::msModuleControllerService( const OUString FrameworkHelper::msConfigurationControllerService( OUString::createFromAscii("com.sun.star.drawing.framework.ConfigurationController")); +//----- helper ---------------------------------------------------------------- +namespace +{ + static ::boost::shared_ptr< ViewShell > lcl_getViewShell( const Reference< XResource >& i_rViewShellWrapper ) + { + ::boost::shared_ptr< ViewShell > pViewShell; + if ( !i_rViewShellWrapper.is() ) + return pViewShell; + + try + { + Reference<lang::XUnoTunnel> xViewTunnel( i_rViewShellWrapper, UNO_QUERY_THROW ); + pViewShell = reinterpret_cast< ViewShellWrapper* >( + xViewTunnel->getSomething( ViewShellWrapper::getUnoTunnelId() ) )->GetViewShell(); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + return pViewShell; + } + Reference< XResource > lcl_getFirstViewInPane( const Reference< XConfigurationController >& i_rConfigController, + const Reference< XResourceId >& i_rPaneId ) + { + try + { + Reference< XConfiguration > xConfiguration( i_rConfigController->getRequestedConfiguration(), UNO_SET_THROW ); + Sequence< Reference< XResourceId > > aViewIds( xConfiguration->getResources( + i_rPaneId, FrameworkHelper::msViewURLPrefix, AnchorBindingMode_DIRECT ) ); + if ( aViewIds.getLength() > 0 ) + return i_rConfigController->getResource( aViewIds[0] ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + return NULL; + } +} + //----- FrameworkHelper::ViewURLMap ------------------------------------------- @@ -438,8 +479,11 @@ bool FrameworkHelper::IsValid (void) ::boost::shared_ptr<ViewShell> FrameworkHelper::GetViewShell (const OUString& rsPaneURL) { - Reference<XResourceId> xPaneId (CreateResourceId(rsPaneURL)); - return GetViewShell(GetView(xPaneId)); + if ( !mxConfigurationController.is() ) + return ::boost::shared_ptr<ViewShell>(); + + Reference<XResourceId> xPaneId( CreateResourceId( rsPaneURL ) ); + return lcl_getViewShell( lcl_getFirstViewInPane( mxConfigurationController, xPaneId ) ); } @@ -447,22 +491,7 @@ bool FrameworkHelper::IsValid (void) ::boost::shared_ptr<ViewShell> FrameworkHelper::GetViewShell (const Reference<XView>& rxView) { - ::boost::shared_ptr<ViewShell> pViewShell; - - try - { - Reference<lang::XUnoTunnel> xViewTunnel (rxView, UNO_QUERY); - if (xViewTunnel.is()) - { - pViewShell = reinterpret_cast<ViewShellWrapper*>(xViewTunnel->getSomething( - ViewShellWrapper::getUnoTunnelId()))->GetViewShell(); - } - } - catch (RuntimeException&) - { - } - - return pViewShell; + return lcl_getViewShell( rxView.get() ); } @@ -479,21 +508,11 @@ Reference<XView> FrameworkHelper::GetView (const Reference<XResourceId>& rxPaneO { if (rxPaneOrViewId->getResourceURL().match(msViewURLPrefix)) { - xView = Reference<XView>( - mxConfigurationController->getResource(rxPaneOrViewId), UNO_QUERY); + xView.set( mxConfigurationController->getResource( rxPaneOrViewId ), UNO_QUERY ); } else { - Reference<XConfiguration> xConfiguration ( - mxConfigurationController->getRequestedConfiguration()); - if (xConfiguration.is()) - { - Sequence<Reference<XResourceId> > aViewIds (xConfiguration->getResources( - rxPaneOrViewId, msViewURLPrefix, AnchorBindingMode_DIRECT)); - if (aViewIds.getLength() >= 1) - xView = Reference<XView>( - mxConfigurationController->getResource(aViewIds[0]), UNO_QUERY); - } + xView.set( lcl_getFirstViewInPane( mxConfigurationController, rxPaneOrViewId ), UNO_QUERY ); } } catch (lang::DisposedException&) @@ -501,7 +520,8 @@ Reference<XView> FrameworkHelper::GetView (const Reference<XResourceId>& rxPaneO Dispose(); } catch (RuntimeException&) - {} + { + } return xView; } @@ -717,7 +737,7 @@ void FrameworkHelper::HandleModeChangeSlot ( } catch (RuntimeException&) { - OSL_TRACE("HandleModeChangeSlot: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } @@ -800,7 +820,7 @@ void FrameworkHelper::WaitForEvent (const OUString& rsEventType) const if( (osl_getGlobalTimer() - nStartTime) > 60000 ) { - DBG_ERROR("FrameworkHelper::WaitForEvent(), no event since a minute? giving up!"); + DBG_ERROR("FrameworkHelper::WaitForEvent(), no event for a minute? giving up!"); break; } } @@ -852,7 +872,7 @@ void FrameworkHelper::UpdateConfiguration (void) } catch (RuntimeException&) { - DBG_ASSERT(false, "FrameworkHelper::UpdateConfiguration: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } } @@ -1053,7 +1073,7 @@ CallbackCaller::CallbackCaller ( } catch (RuntimeException&) { - DBG_ASSERT(false,"ConfigurationUpdateGuard: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } @@ -1080,7 +1100,7 @@ void CallbackCaller::disposing (void) } catch (RuntimeException&) { - DBG_ASSERT(false,"~ConfigurationUpdateGuard: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx index 931ff3a10cb8..2db29c725718 100644..100755 --- a/sd/source/ui/func/fuinsert.cxx +++ b/sd/source/ui/func/fuinsert.cxx @@ -93,6 +93,7 @@ #include "sdgrffilter.hxx" #include "sdxfer.hxx" #include <vcl/svapp.hxx> +#include "undo/undoobjects.hxx" using namespace com::sun::star; @@ -143,34 +144,15 @@ void FuInsertGraphic::DoExecute( SfxRequest& ) if( mpViewShell && mpViewShell->ISA(DrawViewShell)) { sal_Int8 nAction = DND_ACTION_COPY; - SdrGrafObj* pEmptyGrafObj = NULL; - - if ( mpView->AreObjectsMarked() ) - { - /********************************************************** - * Is an empty graphic object available? - **********************************************************/ - const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); - - if (rMarkList.GetMarkCount() == 1) - { - SdrMark* pMark = rMarkList.GetMark(0); - SdrObject* pObj = pMark->GetMarkedSdrObj(); - - if (pObj->GetObjInventor() == SdrInventor && - pObj->GetObjIdentifier() == OBJ_GRAF) - { - nAction = DND_ACTION_LINK; - pEmptyGrafObj = (SdrGrafObj*) pObj; - } - } - } + SdrObject* pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_GRAPHIC ); + if( pPickObj ) + nAction = DND_ACTION_LINK; Point aPos; Rectangle aRect(aPos, mpWindow->GetOutputSizePixel() ); aPos = aRect.Center(); aPos = mpWindow->PixelToLogic(aPos); - SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pEmptyGrafObj, NULL); + SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pPickObj, NULL); if(pGrafObj && aDlg.IsAsLink()) { @@ -299,6 +281,10 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) nSlotId == SID_INSERT_DIAGRAM || nSlotId == SID_INSERT_MATH ) { + PresObjKind ePresObjKind = (nSlotId == SID_INSERT_DIAGRAM) ? PRESOBJ_CHART : PRESOBJ_OBJECT; + + SdrObject* pPickObj = mpView->GetEmptyPresentationObject( ePresObjKind ); + /********************************************************************** * Diagramm oder StarCalc-Tabelle einfuegen **********************************************************************/ @@ -317,42 +303,78 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) if ( xObj.is() ) { sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; - awt::Size aSz; - try + + MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) ); + + Rectangle aRect; + if( pPickObj ) { - aSz = xObj->getVisualAreaSize( nAspect ); + aRect = pPickObj->GetLogicRect(); + + awt::Size aSz; + aSz.Width = aRect.GetWidth(); + aSz.Height = aRect.GetHeight(); + xObj->setVisualAreaSize( nAspect, aSz ); } - catch ( embed::NoVisualAreaSizeException& ) + else { - // the default size will be set later + awt::Size aSz; + try + { + aSz = xObj->getVisualAreaSize( nAspect ); + } + catch ( embed::NoVisualAreaSizeException& ) + { + // the default size will be set later + } + + Size aSize( aSz.Width, aSz.Height ); + + if (aSize.Height() == 0 || aSize.Width() == 0) + { + // Rechteck mit ausgewogenem Kantenverhaeltnis + aSize.Width() = 14100; + aSize.Height() = 10000; + Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aUnit ); + aSz.Width = aTmp.Width(); + aSz.Height = aTmp.Height(); + xObj->setVisualAreaSize( nAspect, aSz ); + } + else + { + aSize = OutputDevice::LogicToLogic(aSize, aUnit, MAP_100TH_MM); + } + + Point aPos; + Rectangle aWinRect(aPos, mpWindow->GetOutputSizePixel() ); + aPos = aWinRect.Center(); + aPos = mpWindow->PixelToLogic(aPos); + aPos.X() -= aSize.Width() / 2; + aPos.Y() -= aSize.Height() / 2; + aRect = Rectangle(aPos, aSize); } - Size aSize( aSz.Width, aSz.Height ); + SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aObjName, aRect ); + SdrPageView* pPV = mpView->GetSdrPageView(); - MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) ); - if (aSize.Height() == 0 || aSize.Width() == 0) + // if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj + if( pPickObj ) { - // Rechteck mit ausgewogenem Kantenverhaeltnis - aSize.Width() = 14100; - aSize.Height() = 10000; - Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aUnit ); - aSz.Width = aTmp.Width(); - aSz.Height = aTmp.Height(); - xObj->setVisualAreaSize( nAspect, aSz ); + SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); + if(pPage && pPage->IsPresObj(pPickObj)) + { + pPage->InsertPresObj( pOleObj, ePresObjKind ); + pOleObj->SetUserCall(pPickObj->GetUserCall()); + } } + + bool bRet = true; + if( pPickObj ) + mpView->ReplaceObjectAtView(pPickObj, *pPV, pOleObj, TRUE ); else - aSize = OutputDevice::LogicToLogic(aSize, aUnit, MAP_100TH_MM); - - Point aPos; - Rectangle aWinRect(aPos, mpWindow->GetOutputSizePixel() ); - aPos = aWinRect.Center(); - aPos = mpWindow->PixelToLogic(aPos); - aPos.X() -= aSize.Width() / 2; - aPos.Y() -= aSize.Height() / 2; - Rectangle aRect (aPos, aSize); - SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aObjName, aRect ); - SdrPageView* pPV = mpView->GetSdrPageView(); - if( mpView->InsertObjectAtView(pOleObj, *pPV, SDRINSERT_SETDEFLAYER) ) + bRet = mpView->InsertObjectAtView(pOleObj, *pPV, SDRINSERT_SETDEFLAYER); + + if( bRet ) { if (nSlotId == SID_INSERT_DIAGRAM) { @@ -369,10 +391,11 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq ) //HMHmpView->HideMarkHdl(); pOleObj->SetLogicRect(aRect); - Size aTmp = OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aUnit ); - aSz.Width = aTmp.Width(); - aSz.Height = aTmp.Height(); - xObj->setVisualAreaSize( nAspect, aSz ); + Size aTmp( OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aUnit ) ); + awt::Size aVisualSize; + aVisualSize.Width = aTmp.Width(); + aVisualSize.Height = aTmp.Height(); + xObj->setVisualAreaSize( nAspect, aVisualSize ); mpViewShell->ActivateObject(pOleObj, SVVERB_SHOW); if (nSlotId == SID_INSERT_DIAGRAM) diff --git a/sd/source/ui/func/smarttag.cxx b/sd/source/ui/func/smarttag.cxx index 4246b11a5af8..a8b6c0647237 100644..100755 --- a/sd/source/ui/func/smarttag.cxx +++ b/sd/source/ui/func/smarttag.cxx @@ -172,6 +172,12 @@ void SmartTagSet::add( const SmartTagReference& xTag ) { maSet.insert( xTag ); mrView.InvalidateAllWin(); + + if( xTag == mxMouseOverTag ) + mxMouseOverTag.clear(); + + if( xTag == mxSelectedTag ) + mxSelectedTag.clear(); } // -------------------------------------------------------------------- @@ -182,6 +188,12 @@ void SmartTagSet::remove( const SmartTagReference& xTag ) if( aIter != maSet.end() ) maSet.erase( aIter ); mrView.InvalidateAllWin(); + + if( xTag == mxMouseOverTag ) + mxMouseOverTag.clear(); + + if( xTag == mxSelectedTag ) + mxSelectedTag.clear(); } // -------------------------------------------------------------------- @@ -193,6 +205,8 @@ void SmartTagSet::Dispose() for( std::set< SmartTagReference >::iterator aIter( aSet.begin() ); aIter != aSet.end(); ) (*aIter++)->Dispose(); mrView.InvalidateAllWin(); + mxMouseOverTag.clear(); + mxSelectedTag.clear(); } // -------------------------------------------------------------------- diff --git a/sd/source/ui/inc/AccessibleTaskPane.hxx b/sd/source/ui/inc/AccessibleTaskPane.hxx deleted file mode 100644 index 913609ecec87..000000000000 --- a/sd/source/ui/inc/AccessibleTaskPane.hxx +++ /dev/null @@ -1,70 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SD_ACCESSIBILITY_ACCESSIBLE_TASK_PANE_HXX -#define SD_ACCESSIBILITY_ACCESSIBLE_TASK_PANE_HXX - -#include "AccessibleTreeNode.hxx" - -namespace sd { namespace toolpanel { -class ToolPanel; -} } - - -namespace accessibility { - -/** Make the task pane as implemented by sd::toolpanel::ToolPanel - accessible. - This derived class exists in order to disable the FOCUSED state. -*/ -class AccessibleTaskPane - : public AccessibleTreeNode -{ -public: - AccessibleTaskPane ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> & rxParent, - const ::rtl::OUString& rsName, - const ::rtl::OUString& rsDescription, - ::sd::toolpanel::ToolPanel& rTaskPane); - ~AccessibleTaskPane (void); - - //===== XServiceInfo ==================================================== - - /** Returns an identifier for the implementation of this object. - */ - virtual ::rtl::OUString SAL_CALL - getImplementationName (void) - throw (::com::sun::star::uno::RuntimeException); - -protected: - virtual void UpdateStateSet (void); -}; - -} // end of namespace accessibility - -#endif diff --git a/sd/source/ui/inc/DrawController.hxx b/sd/source/ui/inc/DrawController.hxx index 5afda083abbc..d2f56501f492 100644..100755 --- a/sd/source/ui/inc/DrawController.hxx +++ b/sd/source/ui/inc/DrawController.hxx @@ -104,7 +104,8 @@ public: PROPERTY_ACTIVE_LAYER = 5, PROPERTY_ZOOMTYPE = 6, PROPERTY_ZOOMVALUE = 7, - PROPERTY_VIEWOFFSET = 8 + PROPERTY_VIEWOFFSET = 8, + PROPERTY_DRAWVIEWMODE = 9 }; /** Create a new DrawController object for the given ViewShellBase. diff --git a/sd/source/ui/inc/DrawSubController.hxx b/sd/source/ui/inc/DrawSubController.hxx index 11816fa45902..22d3afb5dd4a 100644..100755 --- a/sd/source/ui/inc/DrawSubController.hxx +++ b/sd/source/ui/inc/DrawSubController.hxx @@ -29,12 +29,27 @@ #define SD_DRAW_SUB_CONTROLLER_HXX #include <com/sun/star/drawing/XDrawSubController.hpp> -#include <cppuhelper/compbase1.hxx> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <cppuhelper/compbase2.hxx> + +namespace sd { + + class DrawSubControllerInterfaceBase : public ::cppu::WeakComponentImplHelper2< + ::com::sun::star::drawing::XDrawSubController, + ::com::sun::star::lang::XServiceInfo > + { + public: + DrawSubControllerInterfaceBase( ::osl::Mutex& aMutex ) + : ::cppu::WeakComponentImplHelper2< + ::com::sun::star::drawing::XDrawSubController, + ::com::sun::star::lang::XServiceInfo >( aMutex ) {} + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException) = 0; + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException) = 0; + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException) = 0; + }; -namespace { - typedef ::cppu::WeakComponentImplHelper1 < - ::com::sun::star::drawing::XDrawSubController - > DrawSubControllerInterfaceBase; } diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx index e48d3cef142b..51b8479dae1e 100644..100755 --- a/sd/source/ui/inc/DrawViewShell.hxx +++ b/sd/source/ui/inc/DrawViewShell.hxx @@ -57,6 +57,7 @@ class LayerTabBar; class Ruler; class SdUnoDrawView; class AnnotationManager; +class ViewOverlayManager; #define CHECK_RANGE(nMin, nValue, nMax) ((nValue >= nMin) && (nValue <= nMax)) @@ -496,6 +497,7 @@ private: using ViewShell::Notify; ::std::auto_ptr< AnnotationManager > mpAnnotationManager; + ::std::auto_ptr< ViewOverlayManager > mpViewOverlayManager; }; diff --git a/sd/source/ui/inc/PaneChildWindows.hxx b/sd/source/ui/inc/PaneChildWindows.hxx index 9995ed4b00c8..9ba0a1f03720 100644..100755 --- a/sd/source/ui/inc/PaneChildWindows.hxx +++ b/sd/source/ui/inc/PaneChildWindows.hxx @@ -29,6 +29,7 @@ #define SD_PANE_CHILD_WINDOWS_HXX #include <sfx2/childwin.hxx> +#include <sfx2/taskpane.hxx> namespace sd { @@ -41,8 +42,8 @@ public: USHORT nId, SfxBindings* pBindings, SfxChildWinInfo* pInfo, - const ResId& rResId, - const ::rtl::OUString& rsTitle, + const USHORT nDockWinTitleResId, + const USHORT nTitleBarResId, SfxChildAlignment eAlignment); virtual ~PaneChildWindow (void); }; @@ -74,16 +75,24 @@ public: -class RightPaneChildWindow - : public PaneChildWindow +//====================================================================================================================== +//= ToolPanelChildWindow +//====================================================================================================================== +class ToolPanelChildWindow :public PaneChildWindow + ,public ::sfx2::ITaskPaneToolPanelAccess { public: - RightPaneChildWindow (::Window*, USHORT, SfxBindings*, SfxChildWinInfo*); - - SFX_DECL_CHILDWINDOW(RightPaneChildWindow); -}; + ToolPanelChildWindow( + ::Window* i_pParentWindow, + USHORT i_nId, + SfxBindings* i_pBindings, + SfxChildWinInfo* i_pChildWindowInfo ); + SFX_DECL_CHILDWINDOW( ToolPanelChildWindow ); + // ::sfx2::ITaskPaneToolPanelAccess + virtual void ActivateToolPanel( const ::rtl::OUString& i_rPanelURL ); +}; } // end of namespace ::sd diff --git a/sd/source/ui/inc/PaneDockingWindow.hrc b/sd/source/ui/inc/PaneDockingWindow.hrc index e8e4a1fba597..eb7c23c075ec 100644..100755 --- a/sd/source/ui/inc/PaneDockingWindow.hrc +++ b/sd/source/ui/inc/PaneDockingWindow.hrc @@ -25,6 +25,6 @@ * ************************************************************************/ -#define FLT_LEFT_PANE_IMPRESS_DOCKING_WINDOW 792 -#define FLT_LEFT_PANE_DRAW_DOCKING_WINDOW 793 -#define FLT_RIGHT_PANE_DOCKING_WINDOW 794 +#define FLT_LEFT_PANE_IMPRESS_DOCKING_WINDOW 792 +#define FLT_LEFT_PANE_DRAW_DOCKING_WINDOW 793 +#define FLT_TOOL_PANEL_DOCKING_WINDOW 794 diff --git a/sd/source/ui/inc/PaneDockingWindow.hxx b/sd/source/ui/inc/PaneDockingWindow.hxx index 03e6cf96c0f0..1874df10dd53 100644..100755 --- a/sd/source/ui/inc/PaneDockingWindow.hxx +++ b/sd/source/ui/inc/PaneDockingWindow.hxx @@ -28,7 +28,7 @@ #ifndef SD_PANE_DOCKING_WINDOW_HXX #define SD_PANE_DOCKING_WINDOW_HXX -#include <sfx2/dockwin.hxx> +#include <sfx2/titledockwin.hxx> #include <sfx2/viewfrm.hxx> #include <boost/scoped_ptr.hpp> @@ -38,15 +38,10 @@ class ToolBox; namespace sd { -class PaneDockingWindow - : public SfxDockingWindow + class PaneDockingWindow : public ::sfx2::TitledDockingWindow { public: - /** Create a new docking window that will be displayed in the specified - pane. - The constructor will determine the ViewShellBase via the given - bindings and tell its PaneManager about the new window. It will ask - the PaneManager for a window title. + /** Create a new docking window. @param pBindings Used, among others, to determine the ViewShellBase and PaneManager that manage the new docking window. @@ -57,89 +52,19 @@ public: The parent window of the new docking window. @param rResId The resource is used to determine initial size and attributes. - @param ePane - The pane in which to show the docking window. + @param rsTitle + the initial title */ PaneDockingWindow ( SfxBindings *pBindings, SfxChildWindow *pChildWindow, ::Window* pParent, const ResId& rResId, - const ::rtl::OUString& rsPaneURL, const ::rtl::OUString& rsTitle); virtual ~PaneDockingWindow (void); - virtual void Paint (const Rectangle& rRectangle); - virtual void Resize (void); - - virtual long Notify( NotifyEvent& rNEvt ); virtual void StateChanged( StateChangedType nType ); - virtual void DataChanged( const DataChangedEvent& rDCEvt ); - - /** Initializing the title tool box either creates a new title tool box - or clears all items from an existing one. A closer is added as only - item. - */ - void InitializeTitleToolBox (void); - - /** Add a top down menu to the title bar or rather the top-level menu - entry. The given callback is called when the menu is clicked and it - is the task of the callback to show the menu. - @return - The id of the new menu is returned. It can be compared by the - callback to the value of GetCurItemId() when called at the given - tool box. - */ - USHORT AddMenu (const String& rsMenuName, ULONG nHelpId, const Link& rCallback); - - /** Set the title of the docking window to the given string. Use this - method when the title is not yet known at the time of construction - or can not be passed to the constructor. - */ - void SetTitle (const String& rsTitle); - - ::Window* GetContentWindow (void); - - ::boost::shared_ptr<ToolBox> GetTitleToolBox (void) const; - -private: - /** The pane which is represented by the docking window. - */ - ::rtl::OUString msPaneURL; - - /** Title that is shown at the top of the docking window. - */ - ::rtl::OUString msTitle; - - /** The tool box that is displayed in the window title area contains - menus and the closer button. - */ - ::boost::shared_ptr<ToolBox> mpTitleToolBox; - - /** The border that is painted arround the inner window. The bevel - shadow lines are part of the border, so where the border is 0 no - such line is painted. - */ - SvBorder maBorder; - - sal_uInt16 mnChildWindowId; - - ::boost::scoped_ptr< ::Window> mpContentWindow; - - /** Remember that a layout is pending, i.e. Resize() has been called - since the last Paint(). - */ - bool mbIsLayoutPending; - - DECL_LINK(ToolboxSelectHandler, ToolBox*); - - /** This does the actual placing and sizing of the title bar and the - content window after the size of the docking window has changed. - This method is called from withing the Paint() method when since its - last invocation the size of the docking window has changed. - */ - void Layout (void); }; } // end of namespace ::sd diff --git a/sd/source/ui/inc/PaneShells.hxx b/sd/source/ui/inc/PaneShells.hxx index c34d2ba632d8..de410c2565bf 100644..100755 --- a/sd/source/ui/inc/PaneShells.hxx +++ b/sd/source/ui/inc/PaneShells.hxx @@ -75,15 +75,14 @@ public: /** Shell that displays the right pane for both Impress and Draw. The shell does not do anything else and has especially no slots. */ -class RightPaneShell - : public SfxShell +class ToolPanelPaneShell : public SfxShell { public: TYPEINFO(); - SFX_DECL_INTERFACE(SD_IF_SDRIGHTPANESHELL) + SFX_DECL_INTERFACE( SD_IF_SDTOOLPANELPANESHELL ) - RightPaneShell (void); - virtual ~RightPaneShell (void); + ToolPanelPaneShell(); + virtual ~ToolPanelPaneShell(); }; } // end of namespace sd diff --git a/sd/source/ui/inc/SdUnoDrawView.hxx b/sd/source/ui/inc/SdUnoDrawView.hxx index afd03acd256f..d29ca3b09d32 100644..100755 --- a/sd/source/ui/inc/SdUnoDrawView.hxx +++ b/sd/source/ui/inc/SdUnoDrawView.hxx @@ -106,6 +106,11 @@ public: css::lang::WrappedTargetException, css::uno::RuntimeException); + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); + protected: sal_Bool getMasterPageMode(void) const throw(); void setMasterPageMode(sal_Bool MasterPageMode_) throw(); @@ -133,6 +138,8 @@ protected: void SetZoomType( sal_Int16 nType ); + ::com::sun::star::uno::Any getDrawViewMode() const; + private: DrawController& mrController; DrawViewShell& mrDrawViewShell; diff --git a/sd/source/ui/inc/SdUnoOutlineView.hxx b/sd/source/ui/inc/SdUnoOutlineView.hxx index a8c97b2e2610..d2a4d4bfd39d 100644..100755 --- a/sd/source/ui/inc/SdUnoOutlineView.hxx +++ b/sd/source/ui/inc/SdUnoOutlineView.hxx @@ -111,6 +111,11 @@ public: disposing (const ::com::sun::star::lang::EventObject& rEventObject) throw (::com::sun::star::uno::RuntimeException); + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); + private: DrawController& mrController; OutlineViewShell& mrOutlineViewShell; diff --git a/sd/source/ui/inc/SdUnoPresView.hxx b/sd/source/ui/inc/SdUnoPresView.hxx deleted file mode 100644 index 8edf171f60cc..000000000000 --- a/sd/source/ui/inc/SdUnoPresView.hxx +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SD_UNO_PRES_VIEW_HXX -#define SD_UNO_PRES_VIEW_HXX - -#include "SdUnoDrawView.hxx" - -namespace sd { - -/** The sub controller for the slide show (or preview?) It formerly reduced - the property set inherited from SdUnoDrawView to just 'CurrentPage'. - Now that we have to always support the whole set, we can as well try to - do that as best as we can. Therefore the inherited functionality is - provided as is. -*/ -class SdUnoPresView - : public SdUnoDrawView -{ -public: - SdUnoPresView ( - DrawController& rController, - DrawViewShell& rViewShell, - View& rView) throw(); - virtual ~SdUnoPresView (void) throw(); -}; - -} // end of namespace sd - -#endif diff --git a/sd/source/ui/inc/SdUnoSlideView.hxx b/sd/source/ui/inc/SdUnoSlideView.hxx index e468d416bf56..6005704ec895 100644..100755 --- a/sd/source/ui/inc/SdUnoSlideView.hxx +++ b/sd/source/ui/inc/SdUnoSlideView.hxx @@ -109,6 +109,11 @@ public: css::lang::WrappedTargetException, css::uno::RuntimeException); + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException); + private: DrawController& mrController; slidesorter::SlideSorter& mrSlideSorter; diff --git a/sd/source/ui/inc/ToolPanelChildWindow.hrc b/sd/source/ui/inc/ToolPanelChildWindow.hrc deleted file mode 100644 index 61dca11d21cc..000000000000 --- a/sd/source/ui/inc/ToolPanelChildWindow.hrc +++ /dev/null @@ -1,30 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#define FLT_WIN_TOOLPANEL 788 - -#define TOOLPANEL 1 diff --git a/sd/source/ui/inc/View.hxx b/sd/source/ui/inc/View.hxx index a0d7bf179886..2b6c1a8abb77 100644..100755 --- a/sd/source/ui/inc/View.hxx +++ b/sd/source/ui/inc/View.hxx @@ -208,6 +208,7 @@ public: void SetMarkedPointsSmoothPossible( bool bSet ) { bSetMarkedPointsSmoothPossible = bSet; } void SetMarkedSegmentsKindPossible( bool bSet ) { bSetMarkedSegmentsKindPossible = bSet; } + SdrObject* GetEmptyPresentationObject( PresObjKind eKind ); protected: DECL_LINK( OnParagraphInsertedHdl, ::Outliner * ); DECL_LINK( OnParagraphRemovingHdl, ::Outliner * ); diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx index 64bc5cbc02b7..64bc5cbc02b7 100644..100755 --- a/sd/source/ui/inc/ViewShell.hxx +++ b/sd/source/ui/inc/ViewShell.hxx diff --git a/sd/source/ui/inc/ViewShellBase.hxx b/sd/source/ui/inc/ViewShellBase.hxx index 5e1acbe2a6ac..bda748559399 100644..100755 --- a/sd/source/ui/inc/ViewShellBase.hxx +++ b/sd/source/ui/inc/ViewShellBase.hxx @@ -28,6 +28,8 @@ #ifndef SD_VIEW_SHELL_BASE_HXX #define SD_VIEW_SHELL_BASE_HXX +#include <com/sun/star/frame/XFrame.hpp> + #include "ViewShell.hxx" #include "glob.hxx" diff --git a/sd/source/ui/inc/ViewShellImplementation.hxx b/sd/source/ui/inc/ViewShellImplementation.hxx index 466e4e578cc2..f4f07b5549dd 100644..100755 --- a/sd/source/ui/inc/ViewShellImplementation.hxx +++ b/sd/source/ui/inc/ViewShellImplementation.hxx @@ -124,9 +124,7 @@ public: @param pPage If a NULL pointer is given then this call is ignored. */ - void AssignLayout ( - SdPage* pPage, - AutoLayout aLayout); + void AssignLayout ( SfxRequest& rRequest, PageKind ePageKind ); /** Determine the view id of the view shell. This corresponds to the view id stored in the SfxViewFrame class. diff --git a/sd/source/ui/inc/framework/FrameworkHelper.hxx b/sd/source/ui/inc/framework/FrameworkHelper.hxx index a25839b3e637..a25839b3e637 100644..100755 --- a/sd/source/ui/inc/framework/FrameworkHelper.hxx +++ b/sd/source/ui/inc/framework/FrameworkHelper.hxx diff --git a/sd/source/ui/inc/framework/PresentationFactory.hxx b/sd/source/ui/inc/framework/PresentationFactory.hxx index 4f35813a7205..a607542f2df0 100644..100755 --- a/sd/source/ui/inc/framework/PresentationFactory.hxx +++ b/sd/source/ui/inc/framework/PresentationFactory.hxx @@ -82,7 +82,7 @@ public: SAL_CALL createResource ( const css::uno::Reference< css::drawing::framework::XResourceId>& rxViewId) - throw(css::uno::RuntimeException); + throw (css::uno::RuntimeException, css::lang::IllegalArgumentException, css::lang::WrappedTargetException); virtual void SAL_CALL releaseResource ( const css::uno::Reference<css::drawing::framework::XResource>& xView) diff --git a/sd/source/ui/inc/framework/ViewShellWrapper.hxx b/sd/source/ui/inc/framework/ViewShellWrapper.hxx index 96846e5c08d7..12483f462d5e 100644..100755 --- a/sd/source/ui/inc/framework/ViewShellWrapper.hxx +++ b/sd/source/ui/inc/framework/ViewShellWrapper.hxx @@ -35,17 +35,17 @@ #include <com/sun/star/lang/XUnoTunnel.hpp> #include <osl/mutex.hxx> #include <cppuhelper/compbase4.hxx> +#include <cppuhelper/implbase1.hxx> #include <boost/shared_ptr.hpp> namespace { -typedef ::cppu::WeakComponentImplHelper4 < - ::com::sun::star::drawing::framework::XView, - ::com::sun::star::lang::XUnoTunnel, - ::com::sun::star::awt::XWindowListener, - ::com::sun::star::drawing::framework::XRelocatableResource - > ViewShellWrapperInterfaceBase; +typedef ::cppu::WeakComponentImplHelper4 < ::com::sun::star::lang::XUnoTunnel + , ::com::sun::star::awt::XWindowListener + , ::com::sun::star::drawing::framework::XRelocatableResource + , ::com::sun::star::drawing::framework::XView + > ViewShellWrapperInterfaceBase; } // end of anonymous namespace. @@ -57,9 +57,8 @@ namespace sd { namespace framework { Most importantly it provides a tunnel to the ViewShell implementation. Then it forwards size changes of the pane window to the view shell. */ -class ViewShellWrapper - : private sd::MutexOwner, - public ViewShellWrapperInterfaceBase +class ViewShellWrapper :private sd::MutexOwner + ,public ViewShellWrapperInterfaceBase { public: /** Create a new ViewShellWrapper object that wraps the given ViewShell @@ -90,23 +89,11 @@ public: */ ::boost::shared_ptr<ViewShell> GetViewShell (void); - /** Returns whether there is exactly one reference to the called - ViewShellWrapper object (the number of references to the wrapped - ViewShell object is not taken into account). This method is - typically used by the owner of a ViewShellWrapper object to verify - that, at the end of the ViewShellWrapper object's lifetime, the - owner holds the last reference and by releasing it will destroy the - object. - */ - bool IsUnique (void); - - // XUnoTunnel virtual sal_Int64 SAL_CALL getSomething (const com::sun::star::uno::Sequence<sal_Int8>& rId) throw (com::sun::star::uno::RuntimeException); - // XResource virtual ::com::sun::star::uno::Reference<com::sun::star::drawing::framework::XResourceId> @@ -151,10 +138,9 @@ public: throw (com::sun::star::uno::RuntimeException); private: - ::boost::shared_ptr<ViewShell> mpViewShell; - const ::com::sun::star::uno::Reference< - com::sun::star::drawing::framework::XResourceId> mxViewId; - ::com::sun::star::uno::Reference<com::sun::star::awt::XWindow> mxWindow; + ::boost::shared_ptr< ViewShell > mpViewShell; + const ::com::sun::star::uno::Reference< com::sun::star::drawing::framework::XResourceId > mxViewId; + ::com::sun::star::uno::Reference<com::sun::star::awt::XWindow > mxWindow; }; } } // end of namespace sd::framework diff --git a/sd/source/ui/inc/res_bmp.hrc b/sd/source/ui/inc/res_bmp.hrc index 9572d9da6960..1602dc698f3f 100644..100755 --- a/sd/source/ui/inc/res_bmp.hrc +++ b/sd/source/ui/inc/res_bmp.hrc @@ -67,36 +67,6 @@ #define RID_GRAFFILTERS RID_APP_START+29 #define RID_GRAFFILTERS_TBX RID_APP_START+30 -#define BMP_FOIL_00 RID_APP_START+10 -#define BMP_FOIL_01 RID_APP_START+11 -#define BMP_FOIL_02 RID_APP_START+12 -#define BMP_FOIL_03 RID_APP_START+13 -#define BMP_FOIL_04 RID_APP_START+14 -#define BMP_FOIL_05 RID_APP_START+15 -#define BMP_FOIL_06 RID_APP_START+16 -#define BMP_FOIL_07 RID_APP_START+17 -#define BMP_FOIL_08 RID_APP_START+18 -#define BMP_FOIL_09 RID_APP_START+19 -#define BMP_FOIL_10 RID_APP_START+20 -#define BMP_FOIL_11 RID_APP_START+21 -#define BMP_FOIL_12 RID_APP_START+22 -#define BMP_FOIL_13 RID_APP_START+23 -#define BMP_FOIL_14 RID_APP_START+24 -#define BMP_FOIL_15 RID_APP_START+25 -#define BMP_FOIL_16 RID_APP_START+26 -#define BMP_FOIL_17 RID_APP_START+27 -#define BMP_FOIL_18 RID_APP_START+28 -#define BMP_FOIL_19 RID_APP_START+29 -#define BMP_FOIL_20 RID_APP_START+30 -#define BMP_FOILH_01 RID_APP_START+31 -#define BMP_FOILH_02 RID_APP_START+32 -#define BMP_FOILH_03 RID_APP_START+33 -#define BMP_FOILH_04 RID_APP_START+34 -#define BMP_FOILH_06 RID_APP_START+35 -#define BMP_FOILH_09 RID_APP_START+36 -#define BMP_FOILN_01 RID_APP_START+40 -#define BMP_FOIL_25 RID_APP_START+41 - // Bitmaps fuer Tree-ListBox im Effekte-TabDialog #define BMP_PAGE RID_APP_START+42 #define BMP_PAGEOBJS RID_APP_START+43 @@ -111,8 +81,6 @@ #define BMP_COLLAPSE RID_APP_START+52 #define BMP_GRAPHIC RID_APP_START+53 -#define BMP_FOIL_26 RID_APP_START+54 - // Bimaps fuer ValueSet im EffekteWindow #define BMP_EFFECT_NONE RID_APP_START+105 #define BMP_TEXTEFFECT_DISCARD_FROM_T RID_APP_START+106 @@ -170,38 +138,6 @@ #define BMP_EFFECT_UNCOVER_TO_B RID_APP_START+171 #define BMP_EFFECT_UNCOVER_TO_LL RID_APP_START+172 -#define BMP_FOIL_00_H RID_SD_START+182 -#define BMP_FOIL_01_H RID_SD_START+183 -#define BMP_FOIL_02_H RID_SD_START+184 -#define BMP_FOIL_03_H RID_SD_START+185 -#define BMP_FOIL_04_H RID_SD_START+186 -#define BMP_FOIL_05_H RID_SD_START+187 -#define BMP_FOIL_06_H RID_SD_START+188 -#define BMP_FOIL_07_H RID_SD_START+189 -#define BMP_FOIL_08_H RID_SD_START+190 -#define BMP_FOIL_09_H RID_SD_START+191 -#define BMP_FOIL_10_H RID_SD_START+192 -#define BMP_FOIL_11_H RID_SD_START+193 -#define BMP_FOIL_12_H RID_SD_START+194 -#define BMP_FOIL_13_H RID_SD_START+195 -#define BMP_FOIL_14_H RID_SD_START+196 -#define BMP_FOIL_15_H RID_SD_START+197 -#define BMP_FOIL_16_H RID_SD_START+198 -#define BMP_FOIL_17_H RID_SD_START+199 -#define BMP_FOIL_18_H RID_SD_START+200 -#define BMP_FOIL_19_H RID_SD_START+201 -#define BMP_FOIL_20_H RID_SD_START+202 -#define BMP_FOIL_21_H RID_SD_START+203 -#define BMP_FOIL_22_H RID_SD_START+204 -#define BMP_FOIL_23_H RID_SD_START+205 -#define BMP_FOIL_24_H RID_SD_START+206 -#define BMP_FOILH_01_H RID_SD_START+207 -#define BMP_FOILH_02_H RID_SD_START+208 -#define BMP_FOILH_03_H RID_SD_START+209 -#define BMP_FOILH_04_H RID_SD_START+210 -#define BMP_FOILH_06_H RID_SD_START+211 -#define BMP_FOILN_01_H RID_SD_START+212 - #define BMP_PAGE_H RID_SD_START+213 #define BMP_PAGEOBJS_H RID_SD_START+214 #define BMP_OBJECTS_H RID_SD_START+215 @@ -219,24 +155,78 @@ #define BMP_GROUP_H RID_SD_START+226 #define BMP_WAIT_ICON_H RID_SD_START+229 -#define BMP_CLOSE_DOC RID_SD_START+325 -#define BMP_CLOSE_DOC_H RID_SD_START+326 -#define BMP_TRIANGLE_RIGHT RID_SD_START+327 -#define BMP_TRIANGLE_RIGHT_H RID_SD_START+328 -#define BMP_TRIANGLE_DOWN RID_SD_START+329 -#define BMP_TRIANGLE_DOWN_H RID_SD_START+330 #define BMP_FADE_EFFECT_INDICATOR RID_SD_START+331 #define BMP_FADE_EFFECT_INDICATOR_H RID_SD_START+332 -#define BMP_FOILH_09_H RID_SD_START+333 -#define BMP_FOIL_25_H RID_SD_START+334 -#define BMP_FOIL_26_H RID_SD_START+335 -#define BMP_FOIL_27 RID_SD_START+336 -#define BMP_FOIL_27_H RID_SD_START+337 - #define BMP_COMMENTS_INDICATOR RID_SD_START+338 #define BMP_COMMENTS_INDICATOR_H RID_SD_START+339 +#define BMP_LAYOUT_EMPTY RID_SD_START+340 +#define BMP_LAYOUT_EMPTY_H RID_SD_START+341 +#define BMP_LAYOUT_HEAD01 RID_SD_START+342 +#define BMP_LAYOUT_HEAD01_H RID_SD_START+343 +#define BMP_LAYOUT_HEAD02 RID_SD_START+344 +#define BMP_LAYOUT_HEAD02_H RID_SD_START+345 +#define BMP_LAYOUT_HEAD02A RID_SD_START+346 +#define BMP_LAYOUT_HEAD02A_H RID_SD_START+347 +#define BMP_LAYOUT_HEAD02B RID_SD_START+348 +#define BMP_LAYOUT_HEAD02B_H RID_SD_START+349 +#define BMP_LAYOUT_HEAD03 RID_SD_START+350 +#define BMP_LAYOUT_HEAD03_H RID_SD_START+351 +#define BMP_LAYOUT_HEAD03A RID_SD_START+352 +#define BMP_LAYOUT_HEAD03A_H RID_SD_START+353 +#define BMP_LAYOUT_HEAD03B RID_SD_START+354 +#define BMP_LAYOUT_HEAD03B_H RID_SD_START+355 +#define BMP_LAYOUT_HEAD03C RID_SD_START+356 +#define BMP_LAYOUT_HEAD03C_H RID_SD_START+357 +#define BMP_LAYOUT_HEAD04 RID_SD_START+358 +#define BMP_LAYOUT_HEAD04_H RID_SD_START+359 +#define BMP_LAYOUT_HEAD06 RID_SD_START+360 +#define BMP_LAYOUT_HEAD06_H RID_SD_START+361 +#define BMP_LAYOUT_TEXTONLY RID_SD_START+362 +#define BMP_LAYOUT_TEXTONLY_H RID_SD_START+363 +#define BMP_LAYOUT_VERTICAL01 RID_SD_START+364 +#define BMP_LAYOUT_VERTICAL01_H RID_SD_START+365 +#define BMP_LAYOUT_VERTICAL02 RID_SD_START+366 +#define BMP_LAYOUT_VERTICAL02_H RID_SD_START+367 + +#define BMP_FOILH_01 RID_SD_START+388 +#define BMP_FOILH_01_H RID_SD_START+389 +#define BMP_FOILH_02 RID_SD_START+390 +#define BMP_FOILH_02_H RID_SD_START+391 +#define BMP_FOILH_03 RID_SD_START+392 +#define BMP_FOILH_03_H RID_SD_START+393 +#define BMP_FOILH_04 RID_SD_START+394 +#define BMP_FOILH_04_H RID_SD_START+395 +#define BMP_FOILH_06 RID_SD_START+396 +#define BMP_FOILH_06_H RID_SD_START+397 +#define BMP_FOILH_09 RID_SD_START+398 +#define BMP_FOILH_09_H RID_SD_START+399 + +#define BMP_FOILN_01 RID_SD_START+400 +#define BMP_FOILN_01_H RID_SD_START+401 + +#define BMP_PLACEHOLDER_SMALL_START (RID_SD_START+402) // these ids must stay in order! +#define BMP_PLACEHOLDER_TABLE_SMALL (RID_SD_START+402) +#define BMP_PLACEHOLDER_CHART_SMALL (RID_SD_START+403) +#define BMP_PLACEHOLDER_IMAGE_SMALL (RID_SD_START+404) +#define BMP_PLACEHOLDER_MOVIE_SMALL (RID_SD_START+405) +#define BMP_PLACEHOLDER_TABLE_SMALL_HOVER (RID_SD_START+406) +#define BMP_PLACEHOLDER_CHART_SMALL_HOVER (RID_SD_START+407) +#define BMP_PLACEHOLDER_IMAGE_SMALL_HOVER (RID_SD_START+408) +#define BMP_PLACEHOLDER_MOVIE_SMALL_HOVER (RID_SD_START+409) +#define BMP_PLACEHOLDER_SMALL_END (RID_SD_START+410) +#define BMP_PLACEHOLDER_LARGE_START (RID_SD_START+410) +#define BMP_PLACEHOLDER_TABLE_LARGE (RID_SD_START+410) +#define BMP_PLACEHOLDER_CHART_LARGE (RID_SD_START+411) +#define BMP_PLACEHOLDER_IMAGE_LARGE (RID_SD_START+412) +#define BMP_PLACEHOLDER_MOVIE_LARGE (RID_SD_START+413) +#define BMP_PLACEHOLDER_TABLE_LARGE_HOVER (RID_SD_START+414) +#define BMP_PLACEHOLDER_CHART_LARGE_HOVER (RID_SD_START+415) +#define BMP_PLACEHOLDER_IMAGE_LARGE_HOVER (RID_SD_START+416) +#define BMP_PLACEHOLDER_MOVIE_LARGE_HOVER (RID_SD_START+417) +#define BMP_PLACEHOLDER_LARGE_END (RID_SD_START+418) // until here! + // ----------------------------------------------------------------------------- #define IMG_PIPETTE_H RID_APP_START+21 diff --git a/sd/source/ui/inc/smarttag.hxx b/sd/source/ui/inc/smarttag.hxx index 88faf5db8db8..15544c2b5221 100644..100755 --- a/sd/source/ui/inc/smarttag.hxx +++ b/sd/source/ui/inc/smarttag.hxx @@ -163,6 +163,7 @@ private: ::sd::View& mrView; SmartTagReference mxSelectedTag; + SmartTagReference mxMouseOverTag; }; /** a derivation from this handle is the visual representation for a smart tag. diff --git a/sd/source/ui/inc/strings.hrc b/sd/source/ui/inc/strings.hrc index ea7a06969d84..d9dc93a1ef20 100644..100755 --- a/sd/source/ui/inc/strings.hrc +++ b/sd/source/ui/inc/strings.hrc @@ -168,26 +168,20 @@ #define STR_DRAW_MEDIA_TOOLBOX RID_DRAW_MEDIA_TOOLBOX // IDs fuer Praesentationsfolien -#define STR_AUTOLAYOUT_NONE (RID_APP_START+210) -#define STR_AUTOLAYOUT_ONLY_TITLE (RID_APP_START+211) -#define STR_AUTOLAYOUT_TITLE (RID_APP_START+212) -#define STR_AUTOLAYOUT_OBJ (RID_APP_START+213) -#define STR_AUTOLAYOUT_ENUM (RID_APP_START+214) -#define STR_AUTOLAYOUT_CHART (RID_APP_START+215) -#define STR_AUTOLAYOUT_TAB (RID_APP_START+217) -#define STR_AUTOLAYOUT_CLIPTEXT (RID_APP_START+218) -#define STR_AUTOLAYOUT_2TEXT (RID_APP_START+219) -#define STR_AUTOLAYOUT_TEXTCHART (RID_APP_START+220) -#define STR_AUTOLAYOUT_TEXTCLIP (RID_APP_START+221) -#define STR_AUTOLAYOUT_CHARTTEXT (RID_APP_START+222) -#define STR_AUTOLAYOUT_TEXTOBJ (RID_APP_START+223) -#define STR_AUTOLAYOUT_TEXT2OBJ (RID_APP_START+224) -#define STR_AUTOLAYOUT_OBJTEXT (RID_APP_START+225) -#define STR_AUTOLAYOUT_OBJOVERTEXT (RID_APP_START+226) -#define STR_AUTOLAYOUT_2OBJTEXT (RID_APP_START+227) -#define STR_AUTOLAYOUT_2OBJOVERTEXT (RID_APP_START+228) -#define STR_AUTOLAYOUT_TEXTOVEROBJ (RID_APP_START+229) -#define STR_AUTOLAYOUT_4OBJ (RID_APP_START+230) +#define STR_AUTOLAYOUT_NONE (RID_APP_START+210) +#define STR_AUTOLAYOUT_ONLY_TITLE (RID_APP_START+211) +#define STR_AUTOLAYOUT_ONLY_TEXT (RID_APP_START+212) +#define STR_AUTOLAYOUT_TITLE (RID_APP_START+213) +#define STR_AUTOLAYOUT_CONTENT (RID_APP_START+214) +#define STR_AUTOLAYOUT_2CONTENT (RID_APP_START+215) +#define STR_AUTOLAYOUT_CONTENT_2CONTENT (RID_APP_START+217) +#define STR_AUTOLAYOUT_2CONTENT_CONTENT (RID_APP_START+218) +#define STR_AUTOLAYOUT_CONTENT_OVER_2CONTENT (RID_APP_START+219) +#define STR_AUTOLAYOUT_2CONTENT_OVER_CONTENT (RID_APP_START+220) +#define STR_AUTOLAYOUT_CONTENT_OVER_CONTENT (RID_APP_START+221) +#define STR_AUTOLAYOUT_4CONTENT (RID_APP_START+222) +#define STR_AUTOLAYOUT_6CONTENT (RID_APP_START+223) + #define STR_AUTOLAYOUT_HANDOUT1 (RID_APP_START+231) #define STR_AUTOLAYOUT_HANDOUT2 (RID_APP_START+232) #define STR_AUTOLAYOUT_HANDOUT3 (RID_APP_START+233) @@ -195,13 +189,9 @@ #define STR_AUTOLAYOUT_HANDOUT6 (RID_APP_START+235) #define STR_AUTOLAYOUT_NOTES (RID_APP_START+236) #define STR_AUTOLAYOUT_HANDOUT9 (RID_APP_START+237) -#define STR_AUTOLAYOUT_ONLY_TEXT (RID_APP_START+238) -#define STR_AUTOLAYOUT_4CLIPART (RID_APP_START+239) #define STR_TRANSFORM (RID_APP_START+240) -#define STR_AUTOLAYOUT_6CLIPART (RID_APP_START+241) - #define STR_EXPORT_HTML_NAME (RID_APP_START+244) #define STR_EXPORT_HTML_FILTER (RID_APP_START+245) #define STR_EXPORT_DIALOG_TITLE (RID_APP_START+261) @@ -512,6 +502,12 @@ #define STR_NAVIGATOR_SHOW_ALL_SHAPES (RID_APP_START+719) #define STR_NAVIGATOR_SHAPE_BASE_NAME (RID_APP_START+720) +#define STR_RESET_LAYOUT (RID_APP_START+721) +#define STR_INSERT_TABLE (RID_APP_START+722) +#define STR_INSERT_CHART (RID_APP_START+723) +#define STR_INSERT_PICTURE (RID_APP_START+724) +#define STR_INSERT_MOVIE (RID_APP_START+725) + /****************************************************************************** * The ids in glob.hrc start at RID_APP_START+750! ******************************************************************************/ diff --git a/sd/source/ui/inc/taskpane/ControlContainer.hxx b/sd/source/ui/inc/taskpane/ControlContainer.hxx index b4087da5b51b..9c1652f05887 100644..100755 --- a/sd/source/ui/inc/taskpane/ControlContainer.hxx +++ b/sd/source/ui/inc/taskpane/ControlContainer.hxx @@ -28,7 +28,6 @@ #ifndef SD_TOOLPANEL_CONTROL_CONTAINER_HXX #define SD_TOOLPANEL_CONTROL_CONTAINER_HXX -#include "TitleBar.hxx" #include <osl/mutex.hxx> #include <vector> diff --git a/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx b/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx index 7a85120e1ad6..5aad9fa29f78 100644..100755 --- a/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx +++ b/sd/source/ui/inc/taskpane/ILayoutableWindow.hxx @@ -48,7 +48,7 @@ public: /** This interface has to be implemented by windows that want to be - layouted by a ToolPanel, SubToolPanel, or ScrollablePanel object. + layouted by a SubToolPanel or ScrollablePanel object. */ class ILayoutableWindow { diff --git a/sd/source/ui/inc/taskpane/PanelId.hxx b/sd/source/ui/inc/taskpane/PanelId.hxx new file mode 100644 index 000000000000..565745f97140 --- /dev/null +++ b/sd/source/ui/inc/taskpane/PanelId.hxx @@ -0,0 +1,62 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * +************************************************************************/ + +#ifndef SD_UI_TASKPANE_PANELID_HXX +#define SD_UI_TASKPANE_PANELID_HXX + +namespace rtl +{ + class OUString; +} + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + //================================================================================================================== + //= PanelId + //================================================================================================================== + /** List of top level panels that can be shown in the task pane. + */ + enum PanelId + { + PID_MASTER_PAGES = 0, + PID_LAYOUT = 1, + PID_TABLE_DESIGN = 2, + PID_CUSTOM_ANIMATION = 3, + PID_SLIDE_TRANSITION = 4, + + PID_UNKNOWN = 5 + }; + + PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL ); + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... + +#endif // SD_UI_TASKPANE_PANELID_HXX diff --git a/sd/source/ui/inc/taskpane/ScrollPanel.hxx b/sd/source/ui/inc/taskpane/ScrollPanel.hxx index 019e06d9dd44..b3620255f913 100644..100755 --- a/sd/source/ui/inc/taskpane/ScrollPanel.hxx +++ b/sd/source/ui/inc/taskpane/ScrollPanel.hxx @@ -60,6 +60,10 @@ public: parent. This will usually be a child window. */ ScrollPanel (TreeNode* pParent); + /** Create a new scroll panel which itself is the root of a TreeNode hierarchy + parent. This will usually be a child window. + */ + ScrollPanel (::Window& i_rParentWindow); virtual ~ScrollPanel (void); /** Add a control to the sub panel. An title bar is added above the @@ -171,6 +175,10 @@ private: */ sal_Int32 LayoutChildren (void); + /** ctor-impl + */ + void Construct(); + Size SetupScrollBars (const Size& rRequiresSize); sal_Int32 SetupVerticalScrollBar (bool bShow, sal_Int32 nRange); sal_Int32 SetupHorizontalScrollBar (bool bShow, sal_Int32 nRange); diff --git a/sd/source/ui/inc/taskpane/SlideSorterCacheDisplay.hxx b/sd/source/ui/inc/taskpane/SlideSorterCacheDisplay.hxx index 7d5c4c996bc1..933a25f4067d 100644..100755 --- a/sd/source/ui/inc/taskpane/SlideSorterCacheDisplay.hxx +++ b/sd/source/ui/inc/taskpane/SlideSorterCacheDisplay.hxx @@ -54,7 +54,6 @@ class Window; namespace sd { namespace toolpanel { -class ControlFactory; class TreeNode; /** This panel demonstrates how to create a panel for the task pane. @@ -71,8 +70,6 @@ public: virtual void Paint (const Rectangle& rBoundingBox); virtual void Resize (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (const SdDrawDocument* pDocument); - static SlideSorterCacheDisplay* Instance (const SdDrawDocument* pDocument); void SetPageCount (sal_Int32 nPageCount); diff --git a/sd/source/ui/inc/taskpane/SubToolPanel.hxx b/sd/source/ui/inc/taskpane/SubToolPanel.hxx index 9524cdddf748..94a73bc70996 100644..100755 --- a/sd/source/ui/inc/taskpane/SubToolPanel.hxx +++ b/sd/source/ui/inc/taskpane/SubToolPanel.hxx @@ -40,8 +40,6 @@ class Window; namespace sd { namespace toolpanel { -class ToolPanel; - /** The sub tool panel is in function similar to the tool panel. It differes in two points. First, it is a control that can be used as element in a tool panel and thus is actually a nested tool @@ -67,6 +65,7 @@ public: parent. This will usually be a child window. */ SubToolPanel (TreeNode* pParent); + SubToolPanel (Window& i_rParentWindow); virtual ~SubToolPanel (void); /** Add a control to the sub panel. diff --git a/sd/source/ui/inc/taskpane/TaskPaneControlFactory.hxx b/sd/source/ui/inc/taskpane/TaskPaneControlFactory.hxx index 483488b665ac..c86c496a770d 100644..100755 --- a/sd/source/ui/inc/taskpane/TaskPaneControlFactory.hxx +++ b/sd/source/ui/inc/taskpane/TaskPaneControlFactory.hxx @@ -58,37 +58,34 @@ public: ControlFactory (void); virtual ~ControlFactory (void); - /** Derived classes should overload InternalCreateControl(), not this - method. + /** creates a tree node which acts as root of an own tree + + Derived classes should overload InternalCreateControl. */ - ::std::auto_ptr<TreeNode> CreateControl (TreeNode* pTreeNode); + ::std::auto_ptr<TreeNode> CreateControl( ::Window& i_rParent ); protected: - /** This is the internal hook for derived classes to overload in order - to provide a new control instance. - */ - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) = 0; + virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) = 0; }; -/** A simple helper class that realizes a ControlFactory that provides its - newly created controls with one additional argument (additional to the - parent TreeNode). +/** A simple helper class that realizes a ControlFactory that is able to create root controls, providing + the to-be-created control with an additional parameter. */ template<class ControlType, class ArgumentType> -class ControlFactoryWithArgs1 +class RootControlFactoryWithArg : public ControlFactory { public: - ControlFactoryWithArgs1 (ArgumentType& rArgument) + RootControlFactoryWithArg (ArgumentType& rArgument) : mrArgument(rArgument) {} protected: - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) + virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) { - return new ControlType(pTreeNode, mrArgument); + return new ControlType( i_rParent, mrArgument ); } private: diff --git a/sd/source/ui/inc/taskpane/TaskPaneTreeNode.hxx b/sd/source/ui/inc/taskpane/TaskPaneTreeNode.hxx index 250e73124854..0dbec3b292c3 100644..100755 --- a/sd/source/ui/inc/taskpane/TaskPaneTreeNode.hxx +++ b/sd/source/ui/inc/taskpane/TaskPaneTreeNode.hxx @@ -53,9 +53,9 @@ enum TreeNodeStateChangeEventId { /** Base class for all members of the object hierarchy that makes up the - tool panel. There are usually at least three levels. At the top level - is the ToolPanel with one instance: the root of the tree. At the - middle level there are SubToolPanels and Window/Control objects. At the + tool panel. In the task pane, there are multiple hierarchies of such nodes, + with every panel having an own tree. The pane node is the root of the tree, below + that there are SubToolPanels and Window/Control objects. At the lowest level there are only Window or Control objects. This class provides the means of communication between objects on @@ -94,14 +94,6 @@ public: */ virtual sal_Int32 GetMinimumWidth (void); - /** Give each node access to the object bar manager of the tool panel. - - At least the root node has to overwrite this method since the - default implementation simply returns the object bar manager of the - parent. - */ - virtual ObjectBarManager* GetObjectBarManager (void); - /** The default implementaion always returns <FALSE/> */ virtual bool IsResizable (void); @@ -151,7 +143,7 @@ public: ControlContainer& GetControlContainer (void); /** Give each node access to a shell manage. This usually is the shell - manager of the TaskPaneViewShell. + manager of the ToolPanelViewShell. At least the root node has to overwrite this method since the default implementation simply returns the shell manager of its diff --git a/sd/source/ui/inc/taskpane/TitleBar.hxx b/sd/source/ui/inc/taskpane/TitleBar.hxx index b10adcef07e0..995117516529 100644..100755 --- a/sd/source/ui/inc/taskpane/TitleBar.hxx +++ b/sd/source/ui/inc/taskpane/TitleBar.hxx @@ -41,22 +41,13 @@ class VirtualDevice; namespace sd { namespace toolpanel { -/** The title bar above a control in a tool panel or sub tool panel. - The way the title bar is displayed depends on the TitleBarType - given to the constructor. TBT_CONTROL_TITLE and - TBT_SUB_CONTROL_HEADLINE both show a expansion indicator in front of - the title string that shows whether the associated control is - visible (expanded) or not. - A title bar with TBT_WINDOW_TITLE is typically used only once as the - title bar of the whole task pane. - - <p>The title bar shows three kinds of indicators: 1) Expansion is +/** The title bar above a control in a sub tool panel. + + <p>The title bar shows two kinds of indicators: 1) Expansion is displayed by two sets of two bitmaps, a triangle pointing to the right resp. a minus in a square indicates that the control is collapsed, a triangle pointing down resp. a plus in a square stands for an expanded - control. 2) Keyboard focus is indicated by a dotted rectangle. 3) An - underlined title string is a mouse over indicator for a - selectable/expandable control.</p> + control. 2) Keyboard focus is indicated by a dotted rectangle. */ class TitleBar : public ::Window, @@ -64,10 +55,8 @@ class TitleBar { public: enum TitleBarType { - TBT_WINDOW_TITLE, - TBT_CONTROL_TITLE, TBT_SUB_CONTROL_HEADLINE - }; + }; /** Create a new title bar whose content, the given title string, will be formatted according to the given type. @@ -90,8 +79,8 @@ public: virtual bool Expand (bool bFlag = true); virtual bool IsExpanded (void) const; virtual void SetEnabledState(bool bFlag); - - void SetFocus (bool bFlag); + virtual void GetFocus (void); + virtual void LoseFocus (void); virtual void MouseMove(const MouseEvent& rEvent); /** Empty implementation prevents forwarding to docking window. @@ -115,17 +104,10 @@ private: String msTitle; bool mbExpanded; bool mbFocused; - bool mbMouseOver; // Size of the bounding box that encloses the title string. - Size maStringBox; ::std::auto_ptr<VirtualDevice> mpDevice; bool mbIsExpandable; - /** Set the mbMouseOver flag to the given value and paint the - title bar accordingly. - */ - void SetMouseOver (bool bFlag); - /** Return whether this TitleBar object has an expansion indicator bitmap. It is safe to call GetExpansionIndicator() when this method returns <FALSE/> but unnecessary. @@ -159,8 +141,6 @@ private: const Rectangle& rTextBox, int nTitleBarWidth); - void PaintWindowTitleBar (void); - void PaintPanelControlTitle (void); void PaintSubPanelHeadLineBar (void); void PaintBackground (const Rectangle& rTextBox); @@ -168,12 +148,6 @@ private: /// Paint a focus indicator that encloses the given rectangle. void PaintFocusIndicator (const Rectangle& rIndicatorBox); - /** Paint a mouse over indicator. If the mouse is over the title - bar than the text enclosed by the given rectangle is - underlined. - */ - void PaintMouseOverIndicator (const Rectangle& rIndicatorBox); - Rectangle PaintExpansionIndicator (const Rectangle& rTextBox); void PaintText (const Rectangle& rTextBox); diff --git a/sd/source/ui/inc/taskpane/TitledControl.hxx b/sd/source/ui/inc/taskpane/TitledControl.hxx index a5a319ca5219..0aa63344fcd5 100644..100755 --- a/sd/source/ui/inc/taskpane/TitledControl.hxx +++ b/sd/source/ui/inc/taskpane/TitledControl.hxx @@ -45,7 +45,6 @@ class Window; namespace sd { namespace toolpanel { class ControlContainer; -class ControlFactory; /** This wrapper adds a title bar to a control. Both title bar and control are child windows. @@ -80,13 +79,6 @@ public: const ClickHandler& rClickHandler, TitleBar::TitleBarType eType); - TitledControl ( - TreeNode* pParent, - ::std::auto_ptr<ControlFactory> pControlFactory, - const String& rTitle, - const ClickHandler& rClickHandler, - TitleBar::TitleBarType eType); - virtual ~TitledControl (void); @@ -98,7 +90,6 @@ public: virtual void Resize (void); virtual void GetFocus (void); - virtual void LoseFocus (void); virtual void KeyInput (const KeyEvent& rEvent); // void Select (bool bExpansionState); @@ -108,8 +99,8 @@ public: the control has not yet been created and the given flag is <TRUE/> then the control is created. */ - TreeNode* GetControl (bool bCreate=true); - const TreeNode* GetConstControl (bool bCreate=true) const; + TreeNode* GetControl (void); + const TreeNode* GetConstControl () const; const String& GetTitle (void) const; @@ -156,15 +147,8 @@ private: String msTitle; bool mbVisible; void* mpUserData; - ::std::auto_ptr<ControlFactory> mpControlFactory; ::std::auto_ptr<ClickHandler> mpClickHandler; - /** Remember whether to toggle (true) the expansion state when the title - bar is clicked on. When set to false then the control is always - expanded. - */ - bool mbExpansionModeIsToggle; - /// Do not use! Assignment operator is not supported. const TitledControl& operator= ( const TitledControl& aDescriptor); diff --git a/sd/source/ui/inc/taskpane/ToolPanel.hxx b/sd/source/ui/inc/taskpane/ToolPanel.hxx deleted file mode 100644 index f2c573a21c06..000000000000 --- a/sd/source/ui/inc/taskpane/ToolPanel.hxx +++ /dev/null @@ -1,125 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef SD_TOOL_PANEL_HXX -#define SD_TOOL_PANEL_HXX - -#include "taskpane/TaskPaneTreeNode.hxx" -#include "taskpane/TitledControl.hxx" -#include <vcl/ctrl.hxx> - -#include <vector> -#include <memory> - -class Window; - -namespace sd { namespace toolpanel { - -class TaskPaneViewShell; -class ControlFactory; - -/** This control is basically a layout manager for the vertical - stacking of controls. At any one time there is exactly one of - them visible. For the others only their title bar is shown. - - <p>Each control is independant of both other controls and the tool - panel itself. To be usable by the tool panel they only have to be - derived from the vcl Window class.</p> -*/ -class ToolPanel - : public Control, - public TreeNode -{ -public: - /** Create a new tool panel with the given window as its parent. - This will usually be a child window. - */ - ToolPanel ( - ::Window* pParentWindow, - TaskPaneViewShell& rViewShell); - - virtual ~ToolPanel (void); - - /** Append the given control to the end of the list of controls that are - managed by the tool panel. - @param pControlFactory - Factory that provides the control on demand, typically when it - is expanded the first time. - @param rTitle - The string that is displayed in the title bar above the control. - @param nHelpId - The help id is set at the title bar not the actual control. - @param rClickHandler - The click handler typically expands a control when the user has - clicked on its title. - */ - sal_uInt32 AddControl ( - ::std::auto_ptr<ControlFactory> pControlFactory, - const String& rTitle, - ULONG nHelpId, - const TitledControl::ClickHandler& rClickHandler); - - virtual void Resize (void); - - virtual Size GetPreferredSize (void); - virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeight); - virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); - virtual bool IsResizable (void); - virtual ::Window* GetWindow (void); - - virtual void RequestResize (void); - - virtual TaskPaneShellManager* GetShellManager (void); - - virtual ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& rxParent); - - using Window::GetWindow; - -protected: - /** Initiate a rearrangement of the controls. - */ - void ListHasChanged (void); - -private: - TaskPaneViewShell& mrViewShell; - - /// Guard against recursive calls or Rearrange(). - bool mbRearrangeActive; - - /** Calculate position, size, and visibility of the controls. - Call this method after the list of controls has changed. - */ - void Rearrange (void); -}; - - - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/inc/TaskPaneViewShell.hxx b/sd/source/ui/inc/taskpane/ToolPanelViewShell.hxx index d9f432029dc2..5bd0cd877803 100644 --- a/sd/source/ui/inc/TaskPaneViewShell.hxx +++ b/sd/source/ui/inc/taskpane/ToolPanelViewShell.hxx @@ -2,10 +2,13 @@ * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright 2000, 2010 Oracle and/or its affiliates. + * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite * + * $RCSfile: ToolPanelViewShell.hxx,v $ + * $Revision: 1.12 $ + * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify @@ -25,30 +28,36 @@ * ************************************************************************/ -#ifndef SD_TOOLPANEL_TASK_PANE_VIEW_SHELL_HXX -#define SD_TOOLPANEL_TASK_PANE_VIEW_SHELL_HXX +#ifndef SD_TOOL_PANEL_VIEW_SHELL_HXX +#define SD_TOOL_PANEL_VIEW_SHELL_HXX #include "ViewShell.hxx" #include "glob.hxx" +#include "taskpane/PanelId.hxx" #include "framework/FrameworkHelper.hxx" #include <vcl/button.hxx> #include <sfx2/shell.hxx> #include <sfx2/viewfac.hxx> #include <sfx2/dockwin.hxx> -#include <memory> #include <boost/shared_ptr.hpp> +#include <boost/scoped_ptr.hpp> class PopupMenu; -namespace sd { namespace toolpanel { +namespace com { namespace sun { namespace star { namespace ui { + class XUIElement; +} } } } + +namespace sd { +class PaneDockingWindow; +namespace toolpanel { class TaskPaneShellManager; class TitleToolBox; class TitleBar; class TitledControl; -class ToolPanel; - +class ToolPanelViewShell_Impl; /** The tool panel is a view shell for some very specific reasons: - It fits better into the concept of panes being docking windows whose content, a view shell, can be exchanged on runtime. @@ -58,34 +67,19 @@ class ToolPanel; If interpreted as object bars this can be handled by the ObjectBarManager of the ViewShell. */ -class TaskPaneViewShell +class ToolPanelViewShell : public ViewShell { public: TYPEINFO(); - SFX_DECL_INTERFACE(SD_IF_SDTASKPANEVIEWSHELL) + SFX_DECL_INTERFACE(SD_IF_SDTOOLPANELSHELL) - /** List of top level panels that can be shown in the task pane. - */ - enum PanelId - { - PID__START = 0, - PID_UNKNOWN = PID__START, - PID_MASTER_PAGES, - PID_LAYOUT, - PID_TABLE_DESIGN, - PID_ANIMATION_SCHEMES, - PID_CUSTOM_ANIMATION, - PID_SLIDE_TRANSITION, - PID__END = PID_SLIDE_TRANSITION - }; - - TaskPaneViewShell ( + ToolPanelViewShell ( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, FrameView* pFrameView); - virtual ~TaskPaneViewShell (void); + virtual ~ToolPanelViewShell (void); /** Register the SFX interfaces so that (some of) the controls can be pushed as SFX shells on the shell stack and process slot calls and @@ -108,37 +102,22 @@ public: TaskPaneShellManager& GetSubShellManager (void) const; - /** Called when a mouse button has been pressed but not yet - released, this handler is used to show the popup menu of the - title bar. + /** deactivates the given panel, bypassing the configuration controller. Only valid for tool panels which are + not under the drawing framework's control. */ - DECL_LINK(ToolboxClickHandler, ToolBox*); - DECL_LINK(MenuSelectHandler, Menu*); + void ActivatePanel( const ::rtl::OUString& i_rPanelResourceURL ); - /** Make the specified panel visible and expand it. - @param nId - The id of the panel that is to be made visible. + /** deactivates the given panel, bypassing the configuration controller */ - void ShowPanel (const PanelId nId); + void DeactivatePanel( const ::rtl::OUString& i_rPanelResourceURL ); - /** Hide and collapse the specified panel. - @param nId - The id of the panel that is to hide. - */ - void HidePanel (const PanelId nId); - - /** Expand the specified panel. Its visibility state is not modified. - @param nId - The id of the panel that is to expand. - */ - void ExpandPanel (const PanelId nId); - - /** Collapse the specified panel. Its visibility state is not - modified. - @param nId - The id of the panel that is to collapse. + /** Return a pointer to the docking window that is the parent or a + predecessor of the content window. + @return + When the view shell is not placed in a docking window, e.g. when + shown in the center pane, then <NULL?> is returned. */ - void CollapsePanel (const PanelId nId); + DockingWindow* GetDockingWindow (void); virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible> @@ -150,13 +129,19 @@ public: */ virtual bool RelocateToParentWindow (::Window* pParentWindow); -private: - class Implementation; - ::std::auto_ptr<Implementation> mpImpl; + /// returns <TRUE/> if and only if the given window is the panel anchor window of our ToolPanelDeck + bool IsPanelAnchorWindow( const ::Window& i_rWindow ) const; - ::std::auto_ptr<ToolPanel> mpTaskPane; + /** creates an XUIElement for the given standard panel + */ + ::com::sun::star::uno::Reference< ::com::sun::star::ui::XUIElement > + CreatePanelUIElement( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rDocFrame, + const ::rtl::OUString& i_rPanelResourceURL + ); - bool mbIsInitialized; +private: + ::boost::scoped_ptr< ToolPanelViewShell_Impl > mpImpl; ::boost::shared_ptr<TaskPaneShellManager> mpSubShellManager; @@ -165,10 +150,9 @@ private: */ USHORT mnMenuId; - /** Create a popup menu. it contains three sections, one for + /** Create a popup menu. it contains two sections, one for docking or un-docking the tool panel, one for toggling the - visibility state of the tool panel items, and one for bringing - up a customization dialog. + visibility state of the tool panel items. @param bIsDocking According to this flag one of the lock/unlock entries is made disabled. @@ -176,22 +160,6 @@ private: ::std::auto_ptr<PopupMenu> CreatePopupMenu (bool bIsDocking); - /** Make sure that as long as there is at least one visible - control there is exactly one expanded control. - If the currently expanded control is being hidden then try to - expand the control after the hidden one or if that does not - exist expand the one before. - */ - void EnsureExpandedControl (TitledControl* pHiddenControl); - - /** Return a pointer to the docking window that is the parent or a - predecessor of the content window. - @return - When the view shell is not placed in a docking window, e.g. when - shown in the center pane, then <NULL?> is returned. - */ - DockingWindow* GetDockingWindow (void); - /** Initialize the task pane view shell if that has not yet been done before. If mbIsInitialized is already set to <TRUE/> then this method returns immediately. @@ -202,25 +170,6 @@ private: -/** This functor makes visible a panel in the task pane. It can be used - with the FrameworkHelper to make a panel visible after an asynchonous - update of the configuration, e.g. after switching to another view. -*/ -class PanelActivation -{ -public: - /** Create a new object that, when its operator() method is called, will - make the specified panel visible in the task pane that belongs to - the application window specified by the given ViewShellBase. - */ - PanelActivation (ViewShellBase& rBase, TaskPaneViewShell::PanelId nPanelId); - void operator() (bool); -private: - ViewShellBase& mrBase; - TaskPaneViewShell::PanelId mnPanelId; -}; - - } } // end of namespace ::sd::toolpanel #endif diff --git a/sd/source/ui/inc/view/viewoverlaymanager.hxx b/sd/source/ui/inc/view/viewoverlaymanager.hxx new file mode 100755 index 000000000000..0693d1faea7a --- /dev/null +++ b/sd/source/ui/inc/view/viewoverlaymanager.hxx @@ -0,0 +1,76 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SD_VIEWOVERLAYMANAGER_HXX +#define _SD_VIEWOVERLAYMANAGER_HXX + +#include <vcl/image.hxx> +#include <svl/lstner.hxx> +#include "EventMultiplexer.hxx" +#include "ViewShellBase.hxx" +#include "res_bmp.hrc" + +namespace sd +{ + +typedef std::vector< rtl::Reference< SmartTag > > ViewTagVector; + +class ViewOverlayManager : public SfxListener +{ +public: + ViewOverlayManager( ViewShellBase& rViewShellBase ); + virtual ~ViewOverlayManager(); + + void onZoomChanged(); + void UpdateTags(); + + DECL_LINK(EventMultiplexerListener, tools::EventMultiplexerEvent*); + DECL_LINK(UpdateTagsHdl, void *); + + bool CreateTags(); + bool DisposeTags(); + + virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); + + static BitmapEx maLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START]; + static BitmapEx maSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START]; + +private: + void UpdateImages(); + + ViewShellBase& mrBase; + ULONG mnUpdateTagsEvent; + + ViewTagVector maTagVector; +}; + +} + +#endif // _SD_VIEWOVERLAYMANAGER_HXX diff --git a/sd/source/ui/slideshow/PaneHider.cxx b/sd/source/ui/slideshow/PaneHider.cxx index f0032b27d1a0..2841891f31ce 100644..100755 --- a/sd/source/ui/slideshow/PaneHider.cxx +++ b/sd/source/ui/slideshow/PaneHider.cxx @@ -42,6 +42,8 @@ #include <com/sun/star/drawing/framework/XConfiguration.hpp> #include <com/sun/star/lang/DisposedException.hpp> +#include <tools/diagnose_ex.h> + using namespace ::com::sun::star::uno; using namespace ::com::sun::star::drawing::framework; using ::sd::framework::FrameworkHelper; @@ -88,7 +90,7 @@ PaneHider::PaneHider (const ViewShell& rViewShell, SlideshowImpl* pSlideShow) } catch (RuntimeException&) { - DBG_ASSERT(false, "caught exception in PaneHider constructor"); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx b/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx index 8ed681e3ddfc..dcda73d38dba 100644..100755 --- a/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsFocusManager.cxx @@ -317,7 +317,7 @@ void FocusManager::SetFocusToToolBox (void) { PaneDockingWindow* pPaneDockingWindow = dynamic_cast<PaneDockingWindow*>(pDockingWindow); if (pPaneDockingWindow != NULL) - pPaneDockingWindow->GetTitleToolBox()->GrabFocus(); + pPaneDockingWindow->GetToolBox().GrabFocus(); } } } diff --git a/sd/source/ui/slidesorter/controller/SlsListener.cxx b/sd/source/ui/slidesorter/controller/SlsListener.cxx index 04a1821cd6d8..94b3b4afe717 100644..100755 --- a/sd/source/ui/slidesorter/controller/SlsListener.cxx +++ b/sd/source/ui/slidesorter/controller/SlsListener.cxx @@ -49,6 +49,7 @@ #include <com/sun/star/frame/FrameActionEvent.hpp> #include <com/sun/star/frame/FrameAction.hpp> #include <sfx2/viewfrm.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star::accessibility; @@ -228,8 +229,7 @@ void Listener::ConnectToController (void) } catch (beans::UnknownPropertyException aEvent) { - OSL_TRACE ("caught exception in SlideSorterController::SetupListeners: %s", - ::rtl::OUStringToOString(aEvent.Message, RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } try { @@ -237,8 +237,7 @@ void Listener::ConnectToController (void) } catch (beans::UnknownPropertyException aEvent) { - OSL_TRACE ("caught exception in SlideSorterController::SetupListeners: %s", - ::rtl::OUStringToOString(aEvent.Message, RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } } @@ -286,9 +285,7 @@ void Listener::DisconnectFromController (void) } catch (beans::UnknownPropertyException aEvent) { - OSL_TRACE ("caught exception in destructor of SlideSorterController: %s", - ::rtl::OUStringToOString(aEvent.Message, - RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } mbListeningToController = false; @@ -488,9 +485,7 @@ void SAL_CALL Listener::propertyChange ( } catch (beans::UnknownPropertyException aEvent) { - OSL_TRACE ("caught exception while accessing the page number of a slide: %s", - ::rtl::OUStringToOString(aEvent.Message, - RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } catch (lang::DisposedException&) { diff --git a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx index c566c5bbc7fe..f1b4cb6c39be 100644..100755 --- a/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSelectionManager.cxx @@ -290,6 +290,7 @@ void SelectionManager::SelectionHasChanged (const bool bMakeSelectionVisible) pViewShell->Invalidate(SID_HIDE_SLIDE); pViewShell->Invalidate(SID_DELETE_PAGE); pViewShell->Invalidate(SID_DELETE_MASTER_PAGE); + pViewShell->Invalidate(SID_ASSIGN_LAYOUT); // StatusBar pViewShell->Invalidate (SID_STATUS_PAGE); diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx index 126a599c21d3..85d07f0e74df 100644..100755 --- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx +++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx @@ -65,7 +65,6 @@ #include "ViewShellBase.hxx" #include "ViewShellImplementation.hxx" #include "sdattr.hxx" -#include "TaskPaneViewShell.hxx" #include "FrameView.hxx" #include "zoomlist.hxx" #include "sdpage.hxx" @@ -239,12 +238,7 @@ void SlotManager::FuTemporary (SfxRequest& rRequest) case SID_ASSIGN_LAYOUT: { - SFX_REQUEST_ARG (rRequest, pWhatPage, SfxUInt32Item, ID_VAL_WHATPAGE, FALSE); - SFX_REQUEST_ARG (rRequest, pWhatLayout, SfxUInt32Item, ID_VAL_WHATLAYOUT, FALSE); - pShell->mpImpl->AssignLayout( - pDocument->GetSdPage((USHORT)pWhatPage->GetValue(), - mrSlideSorter.GetModel().GetPageType()), - (AutoLayout)pWhatLayout->GetValue()); + pShell->mpImpl->AssignLayout( rRequest, mrSlideSorter.GetModel().GetPageType() ); rRequest.Done (); } break; diff --git a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx index be298856c066..b149320cf0f2 100644..100755 --- a/sd/source/ui/slidesorter/model/SlideSorterModel.cxx +++ b/sd/source/ui/slidesorter/model/SlideSorterModel.cxx @@ -50,6 +50,8 @@ #include "sdpage.hxx" #include "FrameView.hxx" +#include <tools/diagnose_ex.h> + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -225,13 +227,9 @@ sal_Int32 SlideSorterModel::GetIndex (const Reference<drawing::XDrawPage>& rxSli return nNumber; } } - catch (beans::UnknownPropertyException&) - { - OSL_ASSERT(false); - } - catch (lang::DisposedException&) + catch (uno::Exception&) { - OSL_ASSERT(false); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx b/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx index 8f259e2a8c0f..32098abb523f 100644..100755 --- a/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx +++ b/sd/source/ui/slidesorter/view/SlsPageObjectViewObjectContact.cxx @@ -61,6 +61,7 @@ #include <boost/shared_ptr.hpp> #include <com/sun/star/uno/Exception.hpp> #include <vcl/svapp.hxx> +#include <tools/diagnose_ex.h> using namespace ::sdr::contact; using namespace ::sd::slidesorter::model; @@ -1166,7 +1167,7 @@ BitmapEx PageObjectViewObjectContact::GetPreview ( } catch (const ::com::sun::star::uno::Exception&) { - OSL_TRACE("PageObjectViewObjectContact::GetPreview: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } return aBitmap; diff --git a/sd/source/ui/table/TableDesignPane.cxx b/sd/source/ui/table/TableDesignPane.cxx index 678fdf6ccda7..cdba12e9887e 100644..100755 --- a/sd/source/ui/table/TableDesignPane.cxx +++ b/sd/source/ui/table/TableDesignPane.cxx @@ -343,7 +343,9 @@ void TableDesignPane::onSelectionChanged() } Reference< XShapeDescriptor > xDesc( aSel, UNO_QUERY ); - if( xDesc.is() && xDesc->getShapeType().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.drawing.TableShape" ) ) ) + if( xDesc.is() && + ( xDesc->getShapeType().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.drawing.TableShape" ) ) || + xDesc->getShapeType().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "com.sun.star.presentation.TableShape" ) ) ) ) { xNewSelection = Reference< XPropertySet >::query( xDesc ); } @@ -389,7 +391,7 @@ void TableDesignPane::updateLayout() mxControls[nId]->SetPaintTransparent(TRUE); mxControls[nId]->SetBackground(); } - aValueSetSize = Size( aPaneSize.Width() - 2 * aOffset.X(), nStylesHeight - mxControls[FL_TABLE_STYLES]->GetSizePixel().Height() - mnOrgOffsetY[FL_TABLE_STYLES] ); + aValueSetSize = Size( pValueSet->GetSizePixel().Width(), nStylesHeight - mxControls[FL_TABLE_STYLES]->GetSizePixel().Height() - mnOrgOffsetY[FL_TABLE_STYLES] ); } else { diff --git a/sd/source/ui/table/tablefunction.cxx b/sd/source/ui/table/tablefunction.cxx index 9d3de5904f43..b30e259e049a 100644..100755 --- a/sd/source/ui/table/tablefunction.cxx +++ b/sd/source/ui/table/tablefunction.cxx @@ -70,6 +70,7 @@ #include "Window.hxx" #include "drawview.hxx" #include "sdresid.hxx" +#include "undo/undoobjects.hxx" using ::rtl::OUString; using namespace ::sd; @@ -147,21 +148,48 @@ void DrawViewShell::FuTable(SfxRequest& rReq) nRows = pDlg->getRows(); } - Size aSize( 14100, 200 ); + Rectangle aRect; - Point aPos; - Rectangle aWinRect(aPos, GetActiveWindow()->GetOutputSizePixel() ); - aPos = aWinRect.Center(); - aPos = GetActiveWindow()->PixelToLogic(aPos); - aPos.X() -= aSize.Width() / 2; - aPos.Y() -= aSize.Height() / 2; - Rectangle aRect (aPos, aSize); + SdrObject* pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_TABLE ); + if( pPickObj ) + { + aRect = pPickObj->GetLogicRect(); + aRect.setHeight( 200 ); + } + else + { + Size aSize( 14100, 200 ); + + Point aPos; + Rectangle aWinRect(aPos, GetActiveWindow()->GetOutputSizePixel() ); + aPos = aWinRect.Center(); + aPos = GetActiveWindow()->PixelToLogic(aPos); + aPos.X() -= aSize.Width() / 2; + aPos.Y() -= aSize.Height() / 2; + aRect = Rectangle(aPos, aSize); + } ::sdr::table::SdrTableObj* pObj = new ::sdr::table::SdrTableObj( GetDoc(), aRect, nColumns, nRows ); pObj->NbcSetStyleSheet( GetDoc()->GetDefaultStyleSheet(), sal_True ); apply_table_style( pObj, GetDoc(), sTableStyle ); SdrPageView* pPV = mpView->GetSdrPageView(); - mpView->InsertObjectAtView(pObj, *pPV, SDRINSERT_SETDEFLAYER); + + // if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj + if( pPickObj ) + { + SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); + if(pPage && pPage->IsPresObj(pPickObj)) + { + pObj->SetUserCall( pPickObj->GetUserCall() ); + pPage->InsertPresObj( pObj, PRESOBJ_TABLE ); + } + } + + if( pPickObj ) + mpView->ReplaceObjectAtView(pPickObj, *pPV, pObj, TRUE ); + else + mpView->InsertObjectAtView(pObj, *pPV, SDRINSERT_SETDEFLAYER); + Invalidate(SID_DRAWTBX_INSERT); rReq.Ignore(); break; diff --git a/sd/source/ui/toolpanel/LayoutMenu.cxx b/sd/source/ui/toolpanel/LayoutMenu.cxx index a2bb1d0cbbac..7e0fd41ffb89 100644..100755 --- a/sd/source/ui/toolpanel/LayoutMenu.cxx +++ b/sd/source/ui/toolpanel/LayoutMenu.cxx @@ -47,6 +47,7 @@ #include "controller/SlideSorterController.hxx" #include "controller/SlsPageSelector.hxx" #include "taskpane/TaskPaneControlFactory.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "taskpane/ScrollPanel.hxx" #include "tools/SlotStateListener.hxx" #include "EventMultiplexer.hxx" @@ -84,40 +85,32 @@ using ::sd::framework::FrameworkHelper; namespace sd { namespace toolpanel { -/** This factory class stores references to ViewShellBase and DrawDocShell - and passes them to new LayoutMenu objects. -*/ -class LayoutMenuFactory +class LayoutMenuRootFactory : public ControlFactory { public: - LayoutMenuFactory (ViewShellBase& rBase, DrawDocShell& rDocShell) - : mrBase(rBase), - mrDocShell(rDocShell) - {} + LayoutMenuRootFactory (ToolPanelViewShell& i_rPanelViewShell) + :mrPanelViewShell(i_rPanelViewShell) + { + } protected: - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) + virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) { - ScrollPanel* pScrollPanel = new ScrollPanel (pTreeNode); + ScrollPanel* pScrollPanel = new ScrollPanel (i_rParent); ::std::auto_ptr<TreeNode> pMenu ( new LayoutMenu ( pScrollPanel, - mrDocShell, - mrBase, - false)); + mrPanelViewShell)); pScrollPanel->AddControl(pMenu); return pScrollPanel; } private: - ViewShellBase& mrBase; - DrawDocShell& mrDocShell; + ToolPanelViewShell& mrPanelViewShell; }; - - SFX_IMPL_INTERFACE(LayoutMenu, SfxShell, SdResId(STR_TASKPANELAYOUTMENU)) { @@ -161,83 +154,50 @@ static snewfoil_value_info handout[] = static snewfoil_value_info standard[] = { - {BMP_FOIL_20, BMP_FOIL_20_H, STR_AUTOLAYOUT_NONE, WritingMode_LR_TB, - AUTOLAYOUT_NONE}, - {BMP_FOIL_00, BMP_FOIL_00_H, STR_AUTOLAYOUT_TITLE, WritingMode_LR_TB, - AUTOLAYOUT_TITLE}, - {BMP_FOIL_01, BMP_FOIL_01_H, STR_AUTOLAYOUT_ENUM, WritingMode_LR_TB, - AUTOLAYOUT_ENUM}, - {BMP_FOIL_03, BMP_FOIL_03_H, STR_AUTOLAYOUT_2TEXT, WritingMode_LR_TB, - AUTOLAYOUT_2TEXT}, - {BMP_FOIL_19, BMP_FOIL_19_H, STR_AUTOLAYOUT_ONLY_TITLE, WritingMode_LR_TB, - AUTOLAYOUT_ONLY_TITLE}, - {BMP_FOIL_25, BMP_FOIL_25_H, STR_AUTOLAYOUT_ONLY_TEXT, WritingMode_LR_TB, - AUTOLAYOUT_ONLY_TEXT}, - {BMP_FOIL_11, BMP_FOIL_11_H, STR_AUTOLAYOUT_OBJ, WritingMode_LR_TB, - AUTOLAYOUT_OBJ}, - {BMP_FOIL_02, BMP_FOIL_02_H, STR_AUTOLAYOUT_CHART, WritingMode_LR_TB, - AUTOLAYOUT_CHART}, - {BMP_FOIL_08, BMP_FOIL_08_H, STR_AUTOLAYOUT_TAB, WritingMode_LR_TB, - AUTOLAYOUT_TAB}, - {BMP_FOIL_09, BMP_FOIL_09_H, STR_AUTOLAYOUT_CLIPTEXT, WritingMode_LR_TB, - AUTOLAYOUT_CLIPTEXT}, - {BMP_FOIL_04, BMP_FOIL_04_H, STR_AUTOLAYOUT_TEXTCHART, WritingMode_LR_TB, - AUTOLAYOUT_TEXTCHART}, - {BMP_FOIL_06, BMP_FOIL_06_H, STR_AUTOLAYOUT_TEXTCLIP, WritingMode_LR_TB, - AUTOLAYOUT_TEXTCLIP}, - {BMP_FOIL_07, BMP_FOIL_07_H, STR_AUTOLAYOUT_CHARTTEXT, WritingMode_LR_TB, - AUTOLAYOUT_CHARTTEXT}, - {BMP_FOIL_10, BMP_FOIL_10_H, STR_AUTOLAYOUT_TEXTOBJ, WritingMode_LR_TB, - AUTOLAYOUT_TEXTOBJ}, - {BMP_FOIL_12, BMP_FOIL_12_H, STR_AUTOLAYOUT_TEXT2OBJ, WritingMode_LR_TB, - AUTOLAYOUT_TEXT2OBJ}, - {BMP_FOIL_13, BMP_FOIL_13_H, STR_AUTOLAYOUT_OBJTEXT, WritingMode_LR_TB, - AUTOLAYOUT_OBJTEXT}, - {BMP_FOIL_14, BMP_FOIL_14_H, STR_AUTOLAYOUT_OBJOVERTEXT, WritingMode_LR_TB, - AUTOLAYOUT_OBJOVERTEXT}, - {BMP_FOIL_15, BMP_FOIL_15_H, STR_AUTOLAYOUT_2OBJTEXT, WritingMode_LR_TB, - AUTOLAYOUT_2OBJTEXT}, - {BMP_FOIL_16, BMP_FOIL_16_H, STR_AUTOLAYOUT_2OBJOVERTEXT, - WritingMode_LR_TB, AUTOLAYOUT_2OBJOVERTEXT}, - {BMP_FOIL_17, BMP_FOIL_17_H, STR_AUTOLAYOUT_TEXTOVEROBJ, WritingMode_LR_TB, - AUTOLAYOUT_TEXTOVEROBJ}, - {BMP_FOIL_18, BMP_FOIL_18_H, STR_AUTOLAYOUT_4OBJ, WritingMode_LR_TB, - AUTOLAYOUT_4OBJ}, - {BMP_FOIL_26, BMP_FOIL_26_H, STR_AUTOLAYOUT_4CLIPART, WritingMode_LR_TB, AUTOLAYOUT_4CLIPART}, - {BMP_FOIL_27, BMP_FOIL_27_H, STR_AUTOLAYOUT_6CLIPART, WritingMode_LR_TB, AUTOLAYOUT_6CLIPART}, + {BMP_LAYOUT_EMPTY, BMP_LAYOUT_EMPTY_H, STR_AUTOLAYOUT_NONE, WritingMode_LR_TB, AUTOLAYOUT_NONE}, + {BMP_LAYOUT_HEAD03, BMP_LAYOUT_HEAD03_H, STR_AUTOLAYOUT_TITLE, WritingMode_LR_TB, AUTOLAYOUT_TITLE}, + {BMP_LAYOUT_HEAD02, BMP_LAYOUT_HEAD02_H, STR_AUTOLAYOUT_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_ENUM}, + {BMP_LAYOUT_HEAD02A, BMP_LAYOUT_HEAD02A_H, STR_AUTOLAYOUT_2CONTENT, WritingMode_LR_TB, AUTOLAYOUT_2TEXT}, + {BMP_LAYOUT_HEAD01, BMP_LAYOUT_HEAD01_H, STR_AUTOLAYOUT_ONLY_TITLE, WritingMode_LR_TB, AUTOLAYOUT_ONLY_TITLE}, + {BMP_LAYOUT_TEXTONLY, BMP_LAYOUT_TEXTONLY_H, STR_AUTOLAYOUT_ONLY_TEXT, WritingMode_LR_TB, AUTOLAYOUT_ONLY_TEXT}, + {BMP_LAYOUT_HEAD03B, BMP_LAYOUT_HEAD03B_H, STR_AUTOLAYOUT_2CONTENT_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_2OBJTEXT}, + {BMP_LAYOUT_HEAD03C, BMP_LAYOUT_HEAD03C_H, STR_AUTOLAYOUT_CONTENT_2CONTENT, WritingMode_LR_TB, AUTOLAYOUT_TEXT2OBJ}, + {BMP_LAYOUT_HEAD03A, BMP_LAYOUT_HEAD03A_H, STR_AUTOLAYOUT_2CONTENT_OVER_CONTENT,WritingMode_LR_TB, AUTOLAYOUT_2OBJOVERTEXT}, + {BMP_LAYOUT_HEAD02B, BMP_LAYOUT_HEAD02B_H, STR_AUTOLAYOUT_CONTENT_OVER_CONTENT, WritingMode_LR_TB, AUTOLAYOUT_OBJOVERTEXT}, + {BMP_LAYOUT_HEAD04, BMP_LAYOUT_HEAD04_H, STR_AUTOLAYOUT_4CONTENT, WritingMode_LR_TB, AUTOLAYOUT_4OBJ}, + {BMP_LAYOUT_HEAD06, BMP_LAYOUT_HEAD06_H, STR_AUTOLAYOUT_6CONTENT, WritingMode_LR_TB, AUTOLAYOUT_6CLIPART}, // vertical - {BMP_FOIL_21, BMP_FOIL_21_H, STR_AL_VERT_TITLE_TEXT_CHART, - WritingMode_TB_RL, AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART}, - {BMP_FOIL_22, BMP_FOIL_22_H, STR_AL_VERT_TITLE_VERT_OUTLINE, - WritingMode_TB_RL, AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE}, - {BMP_FOIL_23, BMP_FOIL_23_H, STR_AL_TITLE_VERT_OUTLINE, WritingMode_TB_RL, - AUTOLAYOUT_TITLE_VERTICAL_OUTLINE}, - {BMP_FOIL_24, BMP_FOIL_24_H, STR_AL_TITLE_VERT_OUTLINE_CLIPART, - WritingMode_TB_RL, AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART}, - + {BMP_LAYOUT_VERTICAL02, BMP_LAYOUT_VERTICAL02_H, STR_AL_VERT_TITLE_TEXT_CHART, WritingMode_TB_RL,AUTOLAYOUT_VERTICAL_TITLE_TEXT_CHART}, + {BMP_LAYOUT_VERTICAL01, BMP_LAYOUT_VERTICAL01_H, STR_AL_VERT_TITLE_VERT_OUTLINE, WritingMode_TB_RL, AUTOLAYOUT_VERTICAL_TITLE_VERTICAL_OUTLINE}, + {BMP_LAYOUT_HEAD02, BMP_LAYOUT_HEAD02_H, STR_AL_TITLE_VERT_OUTLINE, WritingMode_TB_RL, AUTOLAYOUT_TITLE_VERTICAL_OUTLINE}, + {BMP_LAYOUT_HEAD02A, BMP_LAYOUT_HEAD02A_H, STR_AL_TITLE_VERT_OUTLINE_CLIPART, WritingMode_TB_RL, AUTOLAYOUT_TITLE_VERTICAL_OUTLINE_CLIPART}, {0, 0, 0, WritingMode_LR_TB, AUTOLAYOUT_NONE} }; - - - -LayoutMenu::LayoutMenu ( - TreeNode* pParent, - DrawDocShell& rDocumentShell, - ViewShellBase& rViewShellBase, - bool bUseOwnScrollBar) +LayoutMenu::LayoutMenu( TreeNode* pParent, ToolPanelViewShell& i_rPanelViewShell ) : ValueSet (pParent->GetWindow()), TreeNode(pParent), DragSourceHelper(this), DropTargetHelper(this), - mrBase (rViewShellBase), - mbUseOwnScrollBar (bUseOwnScrollBar), + mrBase( i_rPanelViewShell.GetViewShellBase() ), + mpShellManager (&i_rPanelViewShell.GetSubShellManager()), + mbUseOwnScrollBar( false ), mnPreferredColumnCount(3), mxListener(NULL), mbSelectionUpdatePending(true), mbIsMainViewChangePending(false) { + implConstruct( *mrBase.GetDocument()->GetDocSh() ); +} + + +void LayoutMenu::implConstruct( DrawDocShell& rDocumentShell ) +{ + OSL_ENSURE( mrBase.GetDocument()->GetDocSh() == &rDocumentShell, + "LayoutMenu::implConstruct: hmm?" ); + // if this fires, then my assumption that the rDocumentShell parameter to our first ctor is superfluous ... + SetStyle ( ( GetStyle() & ~(WB_ITEMBORDER) ) | WB_TABSTOP @@ -276,7 +236,6 @@ LayoutMenu::LayoutMenu ( - LayoutMenu::~LayoutMenu (void) { // Tell the shell factory that this object is no longer available. @@ -296,10 +255,9 @@ LayoutMenu::~LayoutMenu (void) ::std::auto_ptr<ControlFactory> LayoutMenu::CreateControlFactory ( - ViewShellBase& rBase, - DrawDocShell& rDocShell) + ToolPanelViewShell& i_rPanelViewShell ) { - return ::std::auto_ptr<ControlFactory>(new LayoutMenuFactory(rBase, rDocShell)); + return ::std::auto_ptr<ControlFactory>(new LayoutMenuRootFactory(i_rPanelViewShell)); } @@ -631,6 +589,13 @@ void LayoutMenu::InsertPageWithLayout (AutoLayout aLayout) +TaskPaneShellManager* LayoutMenu::GetShellManager() +{ + if ( mpShellManager ) + return mpShellManager; + return TreeNode::GetShellManager(); +} + void LayoutMenu::InvalidateContent (void) { // The number of items may have changed. Request a resize so that the @@ -732,7 +697,8 @@ void LayoutMenu::AssignLayoutToSelectedSlides (AutoLayout aLayout) // There is a slide sorter visible so get the list of selected pages from it. pPageSelection = pSlideSorter->GetPageSelection(); } - else + + if( (pSlideSorter == NULL) || (pPageSelection.get() == 0) || pPageSelection->empty() ) { // No valid slide sorter available. Ask the main view shell for // its current page. diff --git a/sd/source/ui/toolpanel/LayoutMenu.hxx b/sd/source/ui/toolpanel/LayoutMenu.hxx index bd121403c2d3..86e01e9f803b 100644..100755 --- a/sd/source/ui/toolpanel/LayoutMenu.hxx +++ b/sd/source/ui/toolpanel/LayoutMenu.hxx @@ -60,6 +60,7 @@ class EventMultiplexerEvent; namespace sd { namespace toolpanel { class ControlFactory; +class ToolPanelViewShell; class LayoutMenu @@ -76,28 +77,18 @@ public: /** Create a new layout menu. Depending on the given flag it displays its own scroll bar or lets a surrounding window handle that. - @param rDocumentShell - Used to determine writing direction. - @param rViewShellBase - Gives access to the view shell at whose active page the - layout will be set. - @param bUseOwnScrollBar - When <TRUE/> then we will show our own scroll bar when not - all icons can be displayed in the visible window area. - When <FALSE/> then rely on an outer scroll bar. In this - case we will set the height of the window so that all - icons are visible. + @param i_pParent + the parent node in the control tree + @param i_rPanelViewShell + the view shell of the task pane. */ LayoutMenu ( - TreeNode* pParent, - DrawDocShell& rDocumentShell, - ViewShellBase& rViewShellBase, - bool bUseOwnScrollBar); + TreeNode* i_pParent, + ToolPanelViewShell& i_rPanelViewShell); virtual ~LayoutMenu (void); static std::auto_ptr<ControlFactory> CreateControlFactory ( - ViewShellBase& rBase, - DrawDocShell& rDocShell); + ToolPanelViewShell& i_rPanelViewShell ); /** Return the name of the currently selected layout. */ @@ -140,6 +131,9 @@ public: enum MasterMode { MM_NORMAL, MM_MASTER, MM_UNKNOWN }; void UpdateEnabledState (const MasterMode eMode); + // TreeNode overridables + virtual TaskPaneShellManager* GetShellManager (void); + /** Call this method when the set of displayed layouts is not up-to-date anymore. It will re-assemple this set according to the current settings. @@ -168,6 +162,8 @@ public: private: ViewShellBase& mrBase; + TaskPaneShellManager* mpShellManager; + /** Do we use our own scroll bar or is viewport handling done by our parent? */ @@ -231,6 +227,9 @@ private: */ void UpdateSelection (void); + // internal ctor + void implConstruct( DrawDocShell& rDocumentShell ); + /** When clicked then set the current page of the view in the center pane. */ DECL_LINK(ClickHandler, ValueSet*); diff --git a/sd/source/ui/toolpanel/LayoutableWindow.hxx b/sd/source/ui/toolpanel/LayoutableWindow.hxx deleted file mode 100644 index ed4e1ec77959..000000000000 --- a/sd/source/ui/toolpanel/LayoutableWindow.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX -#define SD_TOOLPANEL_I_LAYOUTABLE_WINDOW_HXX - -#include <vcl/gen.hxx> - -class Window; - -namespace sd { namespace toolpanel { - - -/** This interface has to be implemented by windows that want to be - layouted by a ToolPanel, SubToolPanel, or ScrollablePanel object. -*/ -class LayoutableWindow -{ -public: - /** Return the preferred size without constraints on either the - height or the width. - The size the window will later be set to may but does not have - to be equal to this size. - */ - virtual Size GetPreferredSize (void) = 0; - - /** Return the preferred width with the constraint, that the - window will be set to the given height. - The width the window will later be set to may but does not have - to be equal to this width. - */ - virtual int GetPreferredWidth (int nHeight) = 0; - - /** Return the preferred height with the constraint, that the - window will be set to the given width. - The height the window will later be set to may but does not have - to be equal to this height. - */ - virtual int GetPreferredHeight (int nWidth) = 0; - - /** Return wether the window is generally resizable. When used by - a VerticalLayouter then the width will always be resized and - the return value of this method determines whether the height - may be modified as well. - */ - virtual bool IsResizable (void) = 0; - - /** Return the window so that its size and position can be set. - */ - virtual ::Window& GetWindow (void) = 0; -}; - -} } // end of namespace ::sd::toolpanel - -#endif diff --git a/sd/source/ui/toolpanel/MethodGuard.hxx b/sd/source/ui/toolpanel/MethodGuard.hxx new file mode 100644 index 000000000000..45b81367c8de --- /dev/null +++ b/sd/source/ui/toolpanel/MethodGuard.hxx @@ -0,0 +1,67 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SD_METHODGUARD_HXX +#define SD_METHODGUARD_HXX + +#include <osl/mutex.hxx> + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + //================================================================================================================== + //= MethodGuard + //================================================================================================================== + template < class COMPONENT > + class MethodGuard + { + public: + MethodGuard( COMPONENT& i_rComponent ) + :m_aGuard( i_rComponent.getMutex() ) + { + i_rComponent.checkDisposed(); + } + + ~MethodGuard() + { + } + + inline void clear() + { + m_aGuard.clear(); + } + + private: + ::osl::ClearableMutexGuard m_aGuard; + }; + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... + +#endif // SD_METHODGUARD_HXX diff --git a/sd/source/ui/toolpanel/ScrollPanel.cxx b/sd/source/ui/toolpanel/ScrollPanel.cxx index cff065777235..cae08c76ca39 100644..100755 --- a/sd/source/ui/toolpanel/ScrollPanel.cxx +++ b/sd/source/ui/toolpanel/ScrollPanel.cxx @@ -56,6 +56,30 @@ ScrollPanel::ScrollPanel ( mnVerticalGap(3), mnHorizontalBorder(2) { + Construct(); +} + +ScrollPanel::ScrollPanel ( + ::Window& i_rParentWindow) + : Control (&i_rParentWindow, WB_DIALOGCONTROL), + TreeNode(NULL), + maScrollWindow(this, WB_DIALOGCONTROL), + maVerticalScrollBar(this, WB_VERT), + maHorizontalScrollBar(this, WB_HORZ), + maScrollBarFiller(this), + maScrollWindowFiller(&maScrollWindow), + mbIsRearrangePending(true), + mbIsLayoutPending(true), + mnChildrenWidth(0), + mnVerticalBorder(2), + mnVerticalGap(3), + mnHorizontalBorder(2) +{ + Construct(); +} + +void ScrollPanel::Construct() +{ SetAccessibleName ( ::rtl::OUString::createFromAscii("Sub Task Panel")); mpControlContainer->SetMultiSelection (true); @@ -95,7 +119,7 @@ ScrollPanel::~ScrollPanel (void) // control instead of pNode directly. TitledControl* pTitledControl = static_cast<TitledControl*>(pNode); if (pTitledControl != NULL) - pControl = pTitledControl->GetControl(false); + pControl = pTitledControl->GetControl(); // Remove this object as listener from the control. if (pControl != NULL && pControl->GetWindow()!=NULL) diff --git a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx index 3cef1ca6ee88..a032b6ef02f0 100644..100755 --- a/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx +++ b/sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx @@ -71,38 +71,6 @@ namespace sd { namespace toolpanel { ::std::map<const SdDrawDocument*, SlideSorterCacheDisplay*> SlideSorterCacheDisplay::maDisplays; -/** This factory class is used to create instances of TestPanel. It can be - extended so that its constructor stores arguments that later are passed - to new TestPanel objects. -*/ -class SlideSorterCacheDisplayFactory - : public ControlFactory -{ -public: - SlideSorterCacheDisplayFactory (const SdDrawDocument* pDocument) - : mpDocument(pDocument) - { - } - -protected: - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) - { - SlideSorterCacheDisplay* pDisplay = SlideSorterCacheDisplay::Instance(mpDocument); - pDisplay->SetParentWindow(pTreeNode->GetWindow()); - pDisplay->SetParentNode(pTreeNode); - return pDisplay; - } - -private: - const SdDrawDocument* mpDocument; -}; - - - - - - - SlideSorterCacheDisplay::SlideSorterCacheDisplay (const SdDrawDocument* pDocument) : TreeNode(NULL), mpWindow(NULL), @@ -137,15 +105,6 @@ void SlideSorterCacheDisplay::SetParentWindow (::Window* pParentWindow) -std::auto_ptr<ControlFactory> SlideSorterCacheDisplay::CreateControlFactory ( - const SdDrawDocument* pDocument) -{ - return std::auto_ptr<ControlFactory>(new SlideSorterCacheDisplayFactory(pDocument)); -} - - - - void SlideSorterCacheDisplay::Paint (const Rectangle& rBoundingBox) { if (maCellSize.Width()>0 && maCellSize.Height()>0 && mpWindow!=NULL) diff --git a/sd/source/ui/toolpanel/SubToolPanel.cxx b/sd/source/ui/toolpanel/SubToolPanel.cxx index 31c29f4f1c08..f554d44e8f18 100644..100755 --- a/sd/source/ui/toolpanel/SubToolPanel.cxx +++ b/sd/source/ui/toolpanel/SubToolPanel.cxx @@ -70,6 +70,35 @@ SubToolPanel::SubToolPanel ( +SubToolPanel::SubToolPanel ( + Window& i_rParentWindow) + : Control (&i_rParentWindow, WB_DIALOGCONTROL), + TreeNode(NULL), + maWindowFiller(this), + mbIsRearrangePending(true), + mbIsLayoutPending(true), + mnChildrenWidth(0), + mnVerticalBorder(0), + mnVerticalGap(3), + mnHorizontalBorder(2) +{ + SetAccessibleName ( + ::rtl::OUString::createFromAscii("Sub Task Panel")); + mpControlContainer->SetMultiSelection (true); + + SetBorderStyle (WINDOW_BORDER_NORMAL); + SetMapMode (MapMode(MAP_PIXEL)); + + // To reduce flickering during repaints make the container windows + // transparent and rely on their children to paint the whole area. + SetBackground(Wallpaper()); + maWindowFiller.SetBackground( + Application::GetSettings().GetStyleSettings().GetWindowColor()); +} + + + + SubToolPanel::~SubToolPanel (void) { sal_uInt32 nCount = mpControlContainer->GetControlCount(); diff --git a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx b/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx index c1651d62010b..4ad610df7f7f 100644..100755 --- a/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx +++ b/sd/source/ui/toolpanel/TaskPaneControlFactory.cxx @@ -48,13 +48,10 @@ ControlFactory::~ControlFactory (void) -::std::auto_ptr<TreeNode> ControlFactory::CreateControl (TreeNode* pTreeNode) +::std::auto_ptr<TreeNode> ControlFactory::CreateControl( ::Window& i_rParent ) { - // Create a new control by using the protected virtual hook. - TreeNode* pNewNode = InternalCreateControl(pTreeNode); - - return ::std::auto_ptr<TreeNode>(pNewNode); + TreeNode* pNewNode = InternalCreateControl( i_rParent ); + return ::std::auto_ptr<TreeNode>( pNewNode ); } - } } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx b/sd/source/ui/toolpanel/TaskPaneShellManager.cxx index 5a4875340840..52054c43fe8b 100644..100755 --- a/sd/source/ui/toolpanel/TaskPaneShellManager.cxx +++ b/sd/source/ui/toolpanel/TaskPaneShellManager.cxx @@ -31,7 +31,7 @@ #include "TaskPaneShellManager.hxx" #include "ViewShellManager.hxx" -#include <osl/diagnose.h> +#include <tools/diagnose_ex.h> #include <vcl/window.hxx> #include <algorithm> @@ -111,6 +111,21 @@ void TaskPaneShellManager::AddSubShell ( +void TaskPaneShellManager::RemoveSubShell (const ShellId i_nShellId) +{ + SubShells::iterator pos = maSubShells.find( i_nShellId ); + ENSURE_OR_RETURN_VOID( pos != maSubShells.end(), "no shell for this ID" ); + if ( pos->second.mpWindow != NULL ) + { + pos->second.mpWindow->RemoveEventListener( LINK( this, TaskPaneShellManager, WindowCallback ) ); + } + mpViewShellManager->DeactivateSubShell( mrViewShell, pos->first ); + maSubShells.erase( pos ); +} + + + + void TaskPaneShellManager::RemoveSubShell (const SfxShell* pShell) { if (pShell != NULL) diff --git a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx b/sd/source/ui/toolpanel/TaskPaneShellManager.hxx index 2c2e49b98c48..92e7b6b83b8d 100644..100755 --- a/sd/source/ui/toolpanel/TaskPaneShellManager.hxx +++ b/sd/source/ui/toolpanel/TaskPaneShellManager.hxx @@ -46,7 +46,7 @@ namespace sd { namespace toolpanel { /** The TaskPaneShellManager implements the ViewShellManager::ShellFactory interface. However, it does not create or delete shells. It only gives the ViewShellManager access to the sub shells of the - TaskPaneViewShell. Life time control of the sub shells is managed by + ToolPanelViewShell. Life time control of the sub shells is managed by the sub shells themselves. */ class TaskPaneShellManager @@ -86,6 +86,11 @@ public: NULL when this shell is requested. */ void RemoveSubShell (const SfxShell* pShell); + /** removes the shell given by its ID from the set of sub shells managed by the + TaskPaneShellManager. Subsequent calls to CreateShell() will return + NULL when this shell is requested. + */ + void RemoveSubShell (const ShellId i_nShellId); /** Move the given sub-shell to the top of the local shell stack. Furthermore move the view shell whose sub-shells this class manages diff --git a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx b/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx index 152f576bd5bc..f70e643636d5 100644..100755 --- a/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx +++ b/sd/source/ui/toolpanel/TaskPaneTreeNode.cxx @@ -122,17 +122,6 @@ sal_Int32 TreeNode::GetMinimumWidth (void) -ObjectBarManager* TreeNode::GetObjectBarManager (void) -{ - if (mpParent != NULL) - return mpParent->GetObjectBarManager(); - else - return NULL; -} - - - - bool TreeNode::IsResizable (void) { return false; diff --git a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx b/sd/source/ui/toolpanel/TaskPaneViewShell.cxx deleted file mode 100644 index d80beba7cd10..000000000000 --- a/sd/source/ui/toolpanel/TaskPaneViewShell.cxx +++ /dev/null @@ -1,889 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "TaskPaneViewShell.hxx" - -#include "TaskPaneShellManager.hxx" -#include "ToolPanelChildWindow.hrc" -#include "ToolPanelChildWindow.hxx" -#include "taskpane/SlideSorterCacheDisplay.hxx" -#include "taskpane/ToolPanel.hxx" -#include "taskpane/TitledControl.hxx" -#include "LayoutMenu.hxx" -#include "TaskPaneFocusManager.hxx" -#include "taskpane/SubToolPanel.hxx" -#include "taskpane/ScrollPanel.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include "controls/MasterPagesPanel.hxx" -#include "controls/MasterPagesSelector.hxx" -#include "controls/TableDesignPanel.hxx" -#include "controls/CustomAnimationPanel.hxx" -#include "controls/SlideTransitionPanel.hxx" -#include "controls/AnimationSchemesPanel.hxx" -#include "TitleToolBox.hxx" -#include "taskpane/ControlContainer.hxx" -#include "FrameView.hxx" -#include "Window.hxx" -#include "PaneDockingWindow.hxx" -#include "AccessibleTaskPane.hxx" -#include "DrawSubController.hxx" -#include "sdmod.hxx" -#include "app.hrc" -#include "glob.hrc" -#include "res_bmp.hrc" -#include "helpids.h" -#include "strings.hrc" -#include "sdresid.hxx" -#include "framework/FrameworkHelper.hxx" -#include <com/sun/star/drawing/framework/XResourceId.hpp> -#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp> -#include <com/sun/star/drawing/XDrawSubController.hpp> - -#include <svx/dlgctrl.hxx> -#include <sfx2/bindings.hxx> -#include <sfx2/dispatch.hxx> -#include <sfx2/viewfrm.hxx> -#include <sfx2/msg.hxx> -#include <sfx2/objface.hxx> -#include <svx/colrctrl.hxx> -#include <svx/xtable.hxx> -#include <vcl/dockwin.hxx> -#include "sdtreelb.hxx" -#include "DrawViewShell.hxx" -#include "drawdoc.hxx" -#include "ViewShellBase.hxx" -#include <svx/ruler.hxx> -#include <vcl/svapp.hxx> - -//#define SHOW_TEST_PANEL -#ifdef SHOW_TEST_PANEL -#include "TestPanel.hxx" -#endif -//#define SHOW_COLOR_MENU -#ifdef SHOW_COLOR_MENU -#include "TestMenu.hxx" -#endif - -#include <vector> -#include <boost/shared_ptr.hpp> - -using namespace ::sd::toolpanel; - -#define TaskPaneViewShell -#include "sdslots.hxx" - - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; -using ::sd::framework::FrameworkHelper; - -namespace sd { namespace toolpanel { - -SFX_IMPL_INTERFACE(TaskPaneViewShell, SfxShell, SdResId(STR_TASKPANEVIEWSHELL)) -{ -} - - -TYPEINIT1(TaskPaneViewShell, ViewShell); - - -/** Inner implementation class of TaskPaneViewShell. -*/ -class TaskPaneViewShell::Implementation -{ -public: - static const sal_uInt32 mnInvalidId = 0xffffffff; - - Implementation (void); - ~Implementation (void); - - /** Here the panels are created that are shown in the task pane. - */ - void Setup (ToolPanel* pToolPanel, ViewShellBase& rBase); - - /** Make a new panel known to the translation table that translates - between internal indices as returned by - ControlContainer::AddControl() and public indices defined by - TaskPaneViewShell::PanelId. - */ - void AddPanel (sal_uInt32 nInternalId, PanelId nPublicId); - - /** Return the public id for the given internal one. - @return - When the given public id is not known then PID_UNKNOWN is - returned. - */ - PanelId GetPublicId (sal_uInt32 nInternalId) const; - - /** Return the internal id for the given public one. - @return - When the given public id is not known then mnInvalidId is - returned. - */ - sal_uInt32 GetInternalId (PanelId nPublicId) const; - -private: - /** This map translates between internal indices returned by - ControlContainer::AddControl() and public indices defined by - TaskPaneViewShell::PanelId. - */ - typedef ::std::vector<PanelId> InternalIdToPanelIdMap; - InternalIdToPanelIdMap maIndexMap; -}; - - - - -namespace { - -enum MenuId { - MID_UNLOCK_TASK_PANEL = 1, - MID_LOCK_TASK_PANEL = 2, - MID_CUSTOMIZE = 3, - MID_FIRST_CONTROL = 4 -}; - -/** This control is used for extracting the title string from the resource - of some dialogs that are displayed in the task pane. With this the - actual controls can be created on demand. This class only loads (a part - of) their resource. -*/ -class DummyControl : public Control -{ -public: - DummyControl (::Window* pParent, const ResId& rResId) - : Control(pParent,rResId) - { - FreeResource(); - } -}; - -class ResourceActivationClickHandler -{ -public: - ResourceActivationClickHandler ( - const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper, - const Reference<drawing::framework::XResourceId>& rxResourceId, - ControlContainer& rControlContainer); - void operator () (TitledControl& rTitledControl); - -private: - ::boost::shared_ptr<FrameworkHelper> mpFrameworkHelper; - Reference<drawing::framework::XResourceId> mxResourceId; - ControlContainer& mrControlContainer; -}; - -} // end of anonymouse namespace - - - - - -void TaskPaneViewShell::Implementation::Setup ( - ToolPanel* pToolPanel, - ViewShellBase& rBase) -{ - SdDrawDocument* pDocument = rBase.GetDocument(); - sal_uInt32 nId; - sal_uInt32 nIdOfControlToExpand; - - ::boost::shared_ptr<FrameworkHelper> pFrameworkHelper (FrameworkHelper::Instance(rBase)); - Reference<drawing::framework::XResourceId> xTaskPaneId (pFrameworkHelper->CreateResourceId( - FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL)); - - // The master page controls. - nId = pToolPanel->AddControl ( - controls::MasterPagesPanel::CreateControlFactory(rBase), - SdResId(STR_TASKPANEL_MASTER_PAGE_TITLE), - HID_SD_SLIDE_DESIGNS, - ResourceActivationClickHandler( - pFrameworkHelper, - pFrameworkHelper->CreateResourceId( - FrameworkHelper::msMasterPagesTaskPanelURL, xTaskPaneId), - pToolPanel->GetControlContainer())); - AddPanel (nId, PID_MASTER_PAGES); - - // Layout Menu. - nId = pToolPanel->AddControl ( - LayoutMenu::CreateControlFactory(rBase, *pDocument->GetDocSh()), - SdResId(STR_TASKPANEL_LAYOUT_MENU_TITLE), - HID_SD_SLIDE_LAYOUTS, - ResourceActivationClickHandler( - pFrameworkHelper, - pFrameworkHelper->CreateResourceId( - FrameworkHelper::msLayoutTaskPanelURL, xTaskPaneId), - pToolPanel->GetControlContainer())); - AddPanel (nId, PID_LAYOUT); - nIdOfControlToExpand = nId; - - { - DummyControl aControl (pToolPanel, SdResId(DLG_TABLEDESIGNPANE)); - - // TableDesignPanel - nId = pToolPanel->AddControl ( - controls::TableDesignPanel::CreateControlFactory(rBase), - aControl.GetText(), - HID_SD_TABLE_DESIGN, - ResourceActivationClickHandler( - pFrameworkHelper, - pFrameworkHelper->CreateResourceId( - FrameworkHelper::msTableDesignPanelURL, xTaskPaneId), - pToolPanel->GetControlContainer())); - AddPanel (nId, PID_TABLE_DESIGN); - } - - { - DummyControl aControl (pToolPanel, SdResId(RID_CUSTOMANIMATION_START+0)); - - // CustomAnimationPanel - nId = pToolPanel->AddControl ( - controls::CustomAnimationPanel::CreateControlFactory(rBase), - aControl.GetText(), - HID_SD_CUSTOM_ANIMATIONS, - ResourceActivationClickHandler( - pFrameworkHelper, - pFrameworkHelper->CreateResourceId( - FrameworkHelper::msCustomAnimationTaskPanelURL, xTaskPaneId), - pToolPanel->GetControlContainer())); - AddPanel (nId, PID_CUSTOM_ANIMATION); - } - - // SlideTransitionPanel - { - DummyControl aControl (pToolPanel, SdResId(RID_CUSTOMANIMATION_START+3)); - - nId = pToolPanel->AddControl ( - controls::SlideTransitionPanel::CreateControlFactory(rBase), - aControl.GetText(), - HID_SD_SLIDE_TRANSITIONS, - ResourceActivationClickHandler( - pFrameworkHelper, - pFrameworkHelper->CreateResourceId( - FrameworkHelper::msSlideTransitionTaskPanelURL, xTaskPaneId), - pToolPanel->GetControlContainer())); - AddPanel (nId, PID_SLIDE_TRANSITION); - } - -#ifdef SHOW_COLOR_MENU - // Test Menu. - pToolPanel->AddControl ( - ColorMenu::CreateControlFactory(), - String::CreateFromAscii ("Color Test Menu"), - 0); -#endif - -#ifdef SHOW_TEST_PANEL - // Test Panel. - pToolPanel->AddControl ( - TestPanel::CreateControlFactory(), - String::CreateFromAscii ("Test Panel"), - 0); -#endif - -#ifdef USE_SLIDE_SORTER_CACHE_DISPLAY - pToolPanel->AddControl ( - SlideSorterCacheDisplay::CreateControlFactory(pDocument), - String::CreateFromAscii("Slide Sorter Cache Status"), - 0); -#endif - - // Expand the layout menu. - pToolPanel->GetControlContainer().SetExpansionState ( - nIdOfControlToExpand, - ControlContainer::ES_EXPAND); - - pToolPanel->GetWindow()->Show(); -} - - - - -void TaskPaneViewShell::Initialize (void) -{ - if ( ! mbIsInitialized) - { - mbIsInitialized = true; - mpImpl->Setup (mpTaskPane.get(), GetViewShellBase()); - } -} - - - - -TaskPaneViewShell::TaskPaneViewShell ( - SfxViewFrame* pFrame, - ViewShellBase& rViewShellBase, - ::Window* pParentWindow, - FrameView* pFrameViewArgument) - : ViewShell (pFrame, pParentWindow, rViewShellBase), - mpImpl(NULL), - mpTaskPane(NULL), - mbIsInitialized(false), - mpSubShellManager(), - mnMenuId(0) -{ - meShellType = ST_TASK_PANE; - - mpImpl.reset (new Implementation()); - - mpContentWindow->SetCenterAllowed (false); - pParentWindow->SetStyle(pParentWindow->GetStyle() | WB_DIALOGCONTROL); - - mpTaskPane = ::std::auto_ptr<ToolPanel>(new ToolPanel ( - mpContentWindow.get(), *this)); - - GetParentWindow()->SetBackground(Wallpaper()); - mpContentWindow->SetBackground(Wallpaper()); - - GetParentWindow()->SetHelpId(HID_SD_TASK_PANE); - - PaneDockingWindow* pDockingWindow = dynamic_cast<PaneDockingWindow*>(GetDockingWindow()); - if (pDockingWindow != NULL) - { - pDockingWindow->InitializeTitleToolBox(); - mnMenuId = pDockingWindow->AddMenu ( - String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_TITLE)), - HID_SD_TASK_PANE_VIEW_MENU, - LINK(this, TaskPaneViewShell, ToolboxClickHandler)); - } - - // Tell the focus manager that we want to pass the focus to our - // child. - FocusManager::Instance().RegisterDownLink(pParentWindow, mpTaskPane.get()); - - SetPool (&GetDoc()->GetPool()); - - if (pFrameViewArgument != NULL) - mpFrameView = pFrameViewArgument; - else - mpFrameView = new FrameView(GetDoc()); - GetFrameView()->Connect(); - - // Hide or delete unused controls that we have inherited from the - // ViewShell base class. - mpHorizontalScrollBar.reset(); - mpVerticalScrollBar.reset(); - mpScrollBarBox.reset(); - mpHorizontalRuler.reset(); - mpVerticalRuler.reset(); - - SetName (String (RTL_CONSTASCII_USTRINGPARAM("TaskPaneViewShell"))); - - // For accessibility we have to shortly hide the content window. This - // triggers the construction of a new accessibility object for the new - // view shell. (One is created earlier while the construtor of the base - // class is executed. At that time the correct accessibility object can - // not be constructed.) - if (mpContentWindow.get() !=NULL) - { - mpContentWindow->Hide(); - mpContentWindow->Show(); - } - - // Register the shell manager as factory at the ViewShellManager. - mpSubShellManager.reset (new TaskPaneShellManager( - GetViewShellBase().GetViewShellManager(), - *this)); - GetViewShellBase().GetViewShellManager()->AddSubShellFactory(this, mpSubShellManager); -} - - - - -TaskPaneViewShell::~TaskPaneViewShell (void) -{ - GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(this, mpSubShellManager); -} - - - -// static -void TaskPaneViewShell::RegisterControls (void) -{ - SfxModule* pModule = SD_MOD(); - controls::MasterPagesSelector::RegisterInterface (pModule); - LayoutMenu::RegisterInterface (pModule); -} - - - - -void TaskPaneViewShell::ArrangeGUIElements (void) -{ - ViewShell::ArrangeGUIElements(); - - Point aOrigin (maViewPos); - Size aSize (maViewSize); - - Initialize(); - - // Place the task pane. - if (mpTaskPane.get() != NULL) - mpTaskPane->SetPosSizePixel (Point(0,0), aSize); -} - - - - -void TaskPaneViewShell::GetFocus (void) -{ - Invalidate (); -} - - - - -void TaskPaneViewShell::LoseFocus (void) -{ - Invalidate (); -} - - - - -void TaskPaneViewShell::KeyInput (const KeyEvent& rEvent) -{ - KeyCode nCode = rEvent.GetKeyCode(); - if (nCode == KEY_RETURN) - { - mpTaskPane->GrabFocus(); - } - else - ViewShell::KeyInput (rEvent, NULL); -} - - - - -IMPL_LINK(TaskPaneViewShell, ToolboxClickHandler, ToolBox*, pToolBox) -{ - if (pToolBox->GetCurItemId() == mnMenuId) - { - pToolBox->EndSelection(); - - DockingWindow* pDockingWindow = GetDockingWindow(); - ::std::auto_ptr<PopupMenu> pMenu = CreatePopupMenu ( - pDockingWindow!=NULL && !pDockingWindow->IsFloatingMode()); - pMenu->SetSelectHdl ( - LINK(this, TaskPaneViewShell, MenuSelectHandler)); - - // pass toolbox button rect so the menu can stay open on button up - Rectangle aRect = pToolBox->GetItemRect(mnMenuId); - aRect.SetPos(pToolBox->GetPosPixel() ); - pMenu->Execute (pDockingWindow, aRect, POPUPMENU_EXECUTE_DOWN); - } - - return 0; -} - - - - -IMPL_LINK(TaskPaneViewShell, MenuSelectHandler, Menu*, pMenu) -{ - if (pMenu) - { - pMenu->Deactivate(); - switch (pMenu->GetCurItemId()) - { - case MID_UNLOCK_TASK_PANEL: - { - DockingWindow* pDockingWindow = GetDockingWindow(); - if (pDockingWindow != NULL) - pDockingWindow->SetFloatingMode (TRUE); - } - break; - - case MID_LOCK_TASK_PANEL: - { - DockingWindow* pDockingWindow = GetDockingWindow(); - if (pDockingWindow != NULL) - pDockingWindow->SetFloatingMode (FALSE); - } - break; - - case MID_CUSTOMIZE: - DBG_ASSERT (0, "Customization not yet implemented"); - break; - - default: - { - sal_uInt32 nIndex (pMenu->GetUserValue(pMenu->GetCurItemId())); - mpTaskPane->GetControlContainer().SetVisibilityState ( - nIndex, - ControlContainer::VS_TOGGLE); - // mpTaskPane->Resize(); - // mpTaskPane->Invalidate(); - } - break; - } - } - - return 0; -} - - - - -::std::auto_ptr<PopupMenu> TaskPaneViewShell::CreatePopupMenu ( - bool bIsDocking) -{ - ::std::auto_ptr<PopupMenu> pMenu (new PopupMenu ()); - FloatingWindow* pFloat = static_cast<FloatingWindow*>(pMenu->GetWindow()); - if (pFloat != NULL) - { - pFloat->SetPopupModeFlags ( - pFloat->GetPopupModeFlags() - | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE); - } - - // warning free code changes: - // FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE is 0x10000, so cast to USHORT is 0 - // so why was this used anyway? - pMenu->SetMenuFlags ( - pMenu->GetMenuFlags() /* | (USHORT)FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE */ ); - - // Add one entry for every tool panel element to individually make - // them visible or hide them. - USHORT nIndex = MID_FIRST_CONTROL; - sal_uInt32 nControlIndex; - ControlContainer& rContainer (mpTaskPane->GetControlContainer()); - for (nControlIndex=0; - nControlIndex<rContainer.GetControlCount(); - nControlIndex=rContainer.GetNextIndex(nControlIndex,true,false)) - { - TreeNode* pChild = rContainer.GetControl(nControlIndex); - TitledControl* pControl - = static_cast<TitledControl*>(pChild->GetWindow()); - pMenu->InsertItem (nIndex, - pControl->GetTitle(), - MIB_CHECKABLE); - pMenu->SetUserValue (nIndex, nControlIndex); - if (pControl->IsVisible()) - pMenu->CheckItem (nIndex, TRUE); - nIndex++; - } - - pMenu->InsertSeparator (); - - // Add entry for docking or un-docking the tool panel. - if (bIsDocking) - pMenu->InsertItem ( - MID_UNLOCK_TASK_PANEL, - String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_UNLOCK))); - else - pMenu->InsertItem ( - MID_LOCK_TASK_PANEL, - String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_LOCK))); - pMenu->RemoveDisabledEntries (FALSE, FALSE); - - return pMenu; -} - - - - -SdPage* TaskPaneViewShell::GetActualPage (void) -{ - return NULL; -} - -SdPage* TaskPaneViewShell::getCurrentPage(void) const -{ - return NULL; -} - - - -void TaskPaneViewShell::Execute (SfxRequest& ) -{ -} - - - - -void TaskPaneViewShell::GetState (SfxItemSet& rItemSet) -{ - (void)rItemSet; -} - - - - -TaskPaneShellManager& TaskPaneViewShell::GetSubShellManager (void) const -{ - return *mpSubShellManager.get(); -} - - - - -DockingWindow* TaskPaneViewShell::GetDockingWindow (void) -{ - ::Window* pParentWindow = GetParentWindow(); - DockingWindow* pDockingWindow = NULL; - while (pParentWindow!=NULL && pDockingWindow==NULL) - { - pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow); - pParentWindow = pParentWindow->GetParent(); - } - return pDockingWindow; -} - - - - -void TaskPaneViewShell::ShowPanel (const PanelId nPublicId) -{ - Initialize(); - sal_uInt32 nId (mpImpl->GetInternalId(nPublicId)); - if (nId != Implementation::mnInvalidId) - { - mpTaskPane->GetControlContainer().SetVisibilityState ( - nId, - ControlContainer::VS_SHOW); - } -} - - - - -void TaskPaneViewShell::HidePanel (const PanelId nPublicId) -{ - Initialize(); - sal_uInt32 nId (mpImpl->GetInternalId(nPublicId)); - if (nId != Implementation::mnInvalidId) - { - mpTaskPane->GetControlContainer().SetVisibilityState ( - nId, - ControlContainer::VS_HIDE); - } -} - - - - -void TaskPaneViewShell::ExpandPanel (const PanelId nPublicId) -{ - Initialize(); - sal_uInt32 nId (mpImpl->GetInternalId(nPublicId)); - if (nId != Implementation::mnInvalidId) - { - mpTaskPane->GetControlContainer().SetExpansionState ( - nId, - ControlContainer::ES_EXPAND); - } -} - - - - -void TaskPaneViewShell::CollapsePanel (const PanelId nPublicId) -{ - Initialize(); - sal_uInt32 nId (mpImpl->GetInternalId(nPublicId)); - if (nId != Implementation::mnInvalidId) - { - mpTaskPane->GetControlContainer().SetExpansionState ( - nId, - ControlContainer::ES_COLLAPSE); - } -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> - TaskPaneViewShell::CreateAccessibleDocumentView (::sd::Window* pWindow) -{ - ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> xAccessible; - - if (mpTaskPane.get()!=NULL && pWindow!=NULL) - { - // We have to call CreateAccessible directly so that we can specify - // the correct accessible parent. - ::Window* pParentWindow = pWindow->GetAccessibleParentWindow(); - if (pParentWindow != NULL) - xAccessible = mpTaskPane->CreateAccessibleObject( - pParentWindow->GetAccessible()); - } - - return xAccessible; -} - - - - -Reference<drawing::XDrawSubController> TaskPaneViewShell::CreateSubController (void) -{ - // This view shell is not designed to be the main view shell and thus - // does not support a UNO sub controller. - return Reference<drawing::XDrawSubController>(); -} - - - - -bool TaskPaneViewShell::RelocateToParentWindow (::Window* pParentWindow) -{ - ::Window* pOldParentWindow = GetParentWindow(); - FocusManager::Instance().RemoveLinks(pOldParentWindow, mpTaskPane.get()); - FocusManager::Instance().RemoveLinks(mpTaskPane.get(), pOldParentWindow); - - ViewShell::RelocateToParentWindow(pParentWindow); - - PaneDockingWindow* pDockingWindow = dynamic_cast<PaneDockingWindow*>(GetDockingWindow()); - if (pDockingWindow != NULL) - { - pDockingWindow->InitializeTitleToolBox(); - mnMenuId = pDockingWindow->AddMenu ( - String(SdResId(STR_TASKPANEL_MASTER_PAGE_MENU_TITLE)), - HID_SD_TASK_PANE_VIEW_MENU, - LINK(this, TaskPaneViewShell, ToolboxClickHandler)); - } - FocusManager::Instance().RegisterDownLink(pParentWindow, mpTaskPane.get()); - - Resize(); - - return true; -} - - - - -//===== TaskPaneViewShell::Implementation ===================================== - -TaskPaneViewShell::Implementation::Implementation (void) - : maIndexMap( - (InternalIdToPanelIdMap::size_type)PID__END, - PID_UNKNOWN) -{ -} - - - - -TaskPaneViewShell::Implementation::~Implementation (void) -{ -} - - - - -void TaskPaneViewShell::Implementation::AddPanel ( - sal_uInt32 nInternalId, - PanelId nPublicId) -{ - maIndexMap[nInternalId] = nPublicId; -} - - - - -TaskPaneViewShell::PanelId - TaskPaneViewShell::Implementation::GetPublicId ( - sal_uInt32 nInternalId) const -{ - if (nInternalId < maIndexMap.size()) - return maIndexMap[nInternalId]; - else - return PID_UNKNOWN; -} - - - - -sal_uInt32 - TaskPaneViewShell::Implementation::GetInternalId ( - TaskPaneViewShell::PanelId nPublicId) const -{ - sal_uInt32 nId = mnInvalidId; - for (sal_uInt32 nI=0; nI<maIndexMap.size(); nI++) - if (maIndexMap[nI] == nPublicId) - { - nId = nI; - break; - } - - return nId; -} - - - - -//===== PanelActivation ======================================================= - -PanelActivation::PanelActivation (ViewShellBase& rBase, TaskPaneViewShell::PanelId nPanelId) - : mrBase(rBase), - mnPanelId(nPanelId) -{ -} - -void PanelActivation::operator() (bool) -{ - toolpanel::TaskPaneViewShell* pTaskPane - = dynamic_cast<toolpanel::TaskPaneViewShell*>( - framework::FrameworkHelper::Instance(mrBase) - ->GetViewShell(framework::FrameworkHelper::msRightPaneURL).get()); - if (pTaskPane != NULL) - pTaskPane->ShowPanel(mnPanelId); -} - - - - -//===== ResourceActivationClickHandler ======================================== - -ResourceActivationClickHandler::ResourceActivationClickHandler ( - const ::boost::shared_ptr<FrameworkHelper>& rpFrameworkHelper, - const Reference<drawing::framework::XResourceId>& rxResourceId, - ControlContainer& rControlContainer) - : mpFrameworkHelper(rpFrameworkHelper), - mxResourceId(rxResourceId), - mrControlContainer(rControlContainer) -{ -} - - - - -void ResourceActivationClickHandler::operator () (TitledControl& rTitledControl) -{ - mrControlContainer.SetExpansionState ( - &rTitledControl, - ControlContainer::ES_EXPAND); - mpFrameworkHelper->GetConfigurationController()->requestResourceActivation( - mxResourceId, drawing::framework::ResourceActivationMode_REPLACE); -} - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/TestMenu.cxx b/sd/source/ui/toolpanel/TestMenu.cxx index 7bfb6adebe8d..54c865f12728 100644..100755 --- a/sd/source/ui/toolpanel/TestMenu.cxx +++ b/sd/source/ui/toolpanel/TestMenu.cxx @@ -45,16 +45,16 @@ class ColorMenuFactory : public ControlFactory { protected: - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) + virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) { - return new ColorMenu (pTreeNode); + return new ColorMenu (&i_rParent); } }; -ColorMenu::ColorMenu (TreeNode* pParent) - : Window (pParent->GetWindow()), - TreeNode(pParent), +ColorMenu::ColorMenu (::Window* i_pParent) + : Window (i_pParent), + TreeNode(NULL), maSet (this), mnPreferredColumnCount(2) { @@ -71,7 +71,7 @@ ColorMenu::ColorMenu (TreeNode* pParent) Fill (); maSet.Show(); - pParent->RequestResize(); + i_pParent->Resize(); } diff --git a/sd/source/ui/toolpanel/TestMenu.hxx b/sd/source/ui/toolpanel/TestMenu.hxx index 37ac6542970d..2b5dfe2e2e57 100644..100755 --- a/sd/source/ui/toolpanel/TestMenu.hxx +++ b/sd/source/ui/toolpanel/TestMenu.hxx @@ -47,7 +47,7 @@ class ColorMenu public TreeNode { public: - ColorMenu (TreeNode* pParent); + ColorMenu (::Window* i_pParent); virtual ~ColorMenu (void); static ::std::auto_ptr<ControlFactory> CreateControlFactory (void); diff --git a/sd/source/ui/toolpanel/TestPanel.cxx b/sd/source/ui/toolpanel/TestPanel.cxx index e2786e23a0c5..f0b6951cefc4 100644..100755 --- a/sd/source/ui/toolpanel/TestPanel.cxx +++ b/sd/source/ui/toolpanel/TestPanel.cxx @@ -45,9 +45,9 @@ class TestPanelFactory : public ControlFactory { protected: - virtual TreeNode* InternalCreateControl (TreeNode* pTreeNode) + virtual TreeNode* InternalCreateControl( ::Window& i_rParent ) { - return new TestPanel (pTreeNode); + return new TestPanel (i_rParent); } }; @@ -109,8 +109,8 @@ private: }; -TestPanel::TestPanel (TreeNode* pParent) - : SubToolPanel (pParent) +TestPanel::TestPanel (::Window& i_rParent) + : SubToolPanel (i_rParent) { // Create a scrollable panel with two list boxes. ScrollPanel* pScrollPanel = new ScrollPanel (this); diff --git a/sd/source/ui/toolpanel/TestPanel.hxx b/sd/source/ui/toolpanel/TestPanel.hxx index f883cc08c1e1..af1b97d0f885 100644..100755 --- a/sd/source/ui/toolpanel/TestPanel.hxx +++ b/sd/source/ui/toolpanel/TestPanel.hxx @@ -42,7 +42,7 @@ class TestPanel : public SubToolPanel { public: - TestPanel (TreeNode* pParent); + TestPanel (::Window& i_rParent); virtual ~TestPanel (void); static std::auto_ptr<ControlFactory> CreateControlFactory (void); diff --git a/sd/source/ui/toolpanel/TitleBar.cxx b/sd/source/ui/toolpanel/TitleBar.cxx index e0b48a6cf57b..de49b7a6abb5 100644..100755 --- a/sd/source/ui/toolpanel/TitleBar.cxx +++ b/sd/source/ui/toolpanel/TitleBar.cxx @@ -60,13 +60,12 @@ namespace sd { namespace toolpanel { const int TitleBar::snIndentationWidth = 16; TitleBar::TitleBar ( ::Window* pParent, const String& rsTitle, TitleBarType eType, bool bIsExpandable) -: ::Window (pParent) +: ::Window (pParent, WB_TABSTOP) , TreeNode(this) , meType(eType) , msTitle(rsTitle) , mbExpanded(false) , mbFocused(false) -, mbMouseOver(false) , mpDevice(new VirtualDevice (*this)) , mbIsExpandable (bIsExpandable) { @@ -77,10 +76,6 @@ TitleBar::TitleBar ( ::Window* pParent, const String& rsTitle, TitleBarType eTyp // Change the mouse pointer shape so that it acts as a mouse over effect. switch (meType) { - case TBT_WINDOW_TITLE: - break; - - case TBT_CONTROL_TITLE: case TBT_SUB_CONTROL_HEADLINE: if (mbIsExpandable) SetPointer (POINTER_REFHAND); @@ -170,14 +165,6 @@ void TitleBar::Paint (const Rectangle& rBoundingBox) switch (meType) { - case TBT_WINDOW_TITLE: - PaintWindowTitleBar (); - break; - - case TBT_CONTROL_TITLE: - PaintPanelControlTitle (); - break; - case TBT_SUB_CONTROL_HEADLINE: PaintSubPanelHeadLineBar (); break; @@ -223,22 +210,21 @@ void TitleBar::SetEnabledState(bool bFlag) } -void TitleBar::SetFocus (bool bFlag) + + +void TitleBar::GetFocus() { - mbFocused = bFlag; - Invalidate (); + mbFocused = true; + Invalidate(); } -void TitleBar::SetMouseOver (bool bFlag) +void TitleBar::LoseFocus() { - if (bFlag != mbMouseOver) - { - mbMouseOver = bFlag; - // Invalidate(); - } + mbFocused = false; + Invalidate(); } @@ -251,15 +237,9 @@ bool TitleBar::HasExpansionIndicator (void) const { switch (meType) { - case TBT_CONTROL_TITLE: case TBT_SUB_CONTROL_HEADLINE: bHasExpansionIndicator = true; break; - - default: - case TBT_WINDOW_TITLE: - // bHasExpansionIndicator remains false - break; } } return bHasExpansionIndicator; @@ -277,21 +257,6 @@ Image TitleBar::GetExpansionIndicator (void) const USHORT nResourceId = 0; switch (meType) { - case TBT_CONTROL_TITLE: - if (mbExpanded) - if (bHighContrastMode) - nResourceId = BMP_TRIANGLE_DOWN_H; - else - nResourceId = BMP_TRIANGLE_DOWN; - else - if (bHighContrastMode) - nResourceId = BMP_TRIANGLE_RIGHT_H; - else - nResourceId = BMP_TRIANGLE_RIGHT; - - aIndicator = IconCache::Instance().GetIcon(nResourceId); - break; - case TBT_SUB_CONTROL_HEADLINE: if (mbExpanded) if (bHighContrastMode) @@ -306,11 +271,6 @@ Image TitleBar::GetExpansionIndicator (void) const aIndicator = IconCache::Instance().GetIcon(nResourceId); break; - - default: - case TBT_WINDOW_TITLE: - // aIndicator remains empty Image. - break; } } @@ -320,35 +280,6 @@ Image TitleBar::GetExpansionIndicator (void) const -void TitleBar::PaintPanelControlTitle (void) -{ - int nWidth (GetOutputSizePixel().Width()); - Rectangle aTextBox (CalculateTextBoundingBox (nWidth, true)); - PaintBackground(CalculateTitleBarBox(aTextBox, nWidth)); - Rectangle aFocusBox (PaintExpansionIndicator (aTextBox)); - PaintText (aTextBox); - aFocusBox.Union (aTextBox); - aFocusBox.Left() += 2; - PaintFocusIndicator (aFocusBox); - PaintMouseOverIndicator (aTextBox); -} - - - - -void TitleBar::PaintWindowTitleBar (void) -{ - Rectangle aTextBox (CalculateTextBoundingBox ( - GetOutputSizePixel().Width(), - true)); - - PaintText (aTextBox); - PaintFocusIndicator (aTextBox); -} - - - - void TitleBar::PaintSubPanelHeadLineBar (void) { int nWidth (GetOutputSizePixel().Width()); @@ -369,7 +300,6 @@ void TitleBar::PaintSubPanelHeadLineBar (void) aFocusBox.Left() -= 2; aFocusBox.Right() += 1; PaintFocusIndicator (aFocusBox); - PaintMouseOverIndicator (aTextBox); } @@ -406,21 +336,6 @@ void TitleBar::PaintFocusIndicator (const Rectangle& rTextBox) -void TitleBar::PaintMouseOverIndicator (const Rectangle& rTextBox) -{ - if (mbMouseOver) - { - Rectangle aBox (rTextBox); - // Show the line below the focus rectangle (which is painted - // after and over the mouse over indicator.) - // aBox.Bottom() += 2; - // DrawLine (aBox.BottomLeft(), aBox.BottomRight()); - } -} - - - - Rectangle TitleBar::PaintExpansionIndicator (const Rectangle& rTextBox) { Rectangle aExpansionIndicatorArea; @@ -482,29 +397,6 @@ void TitleBar::PaintBackground (const Rectangle& rTitleBarBox) switch (meType) { - case TBT_CONTROL_TITLE: - { - mpDevice->SetFillColor ( - GetSettings().GetStyleSettings().GetDialogColor()); - mpDevice->DrawRect(rTitleBarBox); - - mpDevice->SetFillColor(); - mpDevice->SetLineColor ( - GetSettings().GetStyleSettings().GetLightColor()); - mpDevice->DrawLine( - rTitleBarBox.TopLeft(),rTitleBarBox.TopRight()); - mpDevice->DrawLine( - rTitleBarBox.TopLeft(),rTitleBarBox.BottomLeft()); - - mpDevice->SetLineColor ( - GetSettings().GetStyleSettings().GetShadowColor()); - mpDevice-> DrawLine( - rTitleBarBox.BottomLeft(), rTitleBarBox.BottomRight()); - mpDevice->DrawLine( - rTitleBarBox.TopRight(), rTitleBarBox.BottomRight()); - } - break; - case TBT_SUB_CONTROL_HEADLINE: { Color aColor (GetSettings().GetStyleSettings().GetDialogColor()); @@ -534,10 +426,6 @@ void TitleBar::PaintBackground (const Rectangle& rTitleBarBox) Point(rTitleBarBox.Right(), rTitleBarBox.Bottom())); } break; - - default: - case TBT_WINDOW_TITLE: - break; } } @@ -588,16 +476,6 @@ Rectangle TitleBar::CalculateTitleBarBox ( switch (meType) { - case TBT_WINDOW_TITLE: - aTitleBarBox.Bottom() += aTitleBarBox.Top(); - aTitleBarBox.Top() = 0; - break; - - case TBT_CONTROL_TITLE: - aTitleBarBox.Bottom() += aTitleBarBox.Top(); - aTitleBarBox.Top() = 0; - break; - case TBT_SUB_CONTROL_HEADLINE: aTitleBarBox.Top() -= 3; aTitleBarBox.Bottom() += 3; @@ -614,15 +492,8 @@ Rectangle TitleBar::CalculateTitleBarBox ( -void TitleBar::MouseMove (const MouseEvent& rEvent) +void TitleBar::MouseMove (const MouseEvent& ) { - Point aRelativePosition = rEvent.GetPosPixel() - GetPosPixel(); - Size aSize = GetSizePixel(); - SetMouseOver ( - aRelativePosition.X() >= 0 - && aRelativePosition.Y() >= 0 - && aRelativePosition.X() < aSize.Width() - && aRelativePosition.Y() < aSize.Height()); } diff --git a/sd/source/ui/toolpanel/TitleToolBox.cxx b/sd/source/ui/toolpanel/TitleToolBox.cxx index 57cbac3fe132..403e826ee27a 100644..100755 --- a/sd/source/ui/toolpanel/TitleToolBox.cxx +++ b/sd/source/ui/toolpanel/TitleToolBox.cxx @@ -42,18 +42,6 @@ namespace sd { namespace toolpanel { TitleToolBox::TitleToolBox (::Window* pParent, WinBits nStyle ) : ToolBox( pParent, nStyle ) { - lastSize = -1; - - Bitmap aBitmap (SdResId (BMP_CLOSE_DOC)); - Bitmap aBitmapHC (SdResId (BMP_CLOSE_DOC_H)); - Bitmap aTriangleRight (SdResId (BMP_TRIANGLE_RIGHT)); - Bitmap aTriangleDown (SdResId (BMP_TRIANGLE_DOWN)); - - maImage = Image (aBitmap, Color (COL_LIGHTMAGENTA)); - maImageHC = Image (aBitmapHC, Color (BMP_COLOR_HIGHCONTRAST)); - maTriangleRight = Image (aTriangleRight, Color (COL_LIGHTMAGENTA)); - maTriangleDown = Image (aTriangleDown, Color (COL_LIGHTMAGENTA)); - SetOutStyle (TOOLBOX_STYLE_FLAT); SetBackground (Wallpaper ( GetSettings().GetStyleSettings().GetDialogColor())); @@ -62,43 +50,6 @@ TitleToolBox::TitleToolBox (::Window* pParent, WinBits nStyle ) -void TitleToolBox::AddItem (ToolBoxId aId) -{ - switch (aId) - { - case TBID_PANEL_MENU: - InsertItem (TBID_PANEL_MENU, - String::CreateFromAscii ("Panel"), - TIB_DROPDOWN); - break; - - case TBID_DOCUMENT_CLOSE: - InsertItem (TBID_DOCUMENT_CLOSE, - GetSettings().GetStyleSettings().GetHighContrastMode() - ? maImageHC : maImage, 0 ); - break; - - case TBID_TRIANGLE_RIGHT: - InsertItem (TBID_TRIANGLE_RIGHT, - maTriangleRight, 0); - break; - - case TBID_TRIANGLE_DOWN: - InsertItem (TBID_TRIANGLE_DOWN, - maTriangleDown, 0); - break; - - case TBID_TEST: - InsertItem (TBID_TEST, - String::CreateFromAscii ("Test"), - TIB_DROPDOWN); - break; - } -} - - - - void TitleToolBox::DataChanged (const DataChangedEvent& rDCEvt) { Window::DataChanged (rDCEvt); diff --git a/sd/source/ui/toolpanel/TitleToolBox.hxx b/sd/source/ui/toolpanel/TitleToolBox.hxx index 9433706579df..db2c971c3539 100644..100755 --- a/sd/source/ui/toolpanel/TitleToolBox.hxx +++ b/sd/source/ui/toolpanel/TitleToolBox.hxx @@ -42,27 +42,9 @@ class TitleToolBox : public ToolBox { public: - enum ToolBoxId { - TBID_DOCUMENT_CLOSE = 1, - TBID_PANEL_MENU = 2, - TBID_TRIANGLE_RIGHT = 3, - TBID_TRIANGLE_DOWN = 4, - TBID_TEST - }; - TitleToolBox (::Window* pParent, WinBits nStyle = 0); - void AddItem (ToolBoxId aId); - void DataChanged (const DataChangedEvent& rDCEvt); - -private: - Image maImage; - Image maImageHC; - Image maTriangleRight; - Image maTriangleDown; - - long lastSize; }; } } // end of namespace ::sd::toolbox diff --git a/sd/source/ui/toolpanel/TitledControl.cxx b/sd/source/ui/toolpanel/TitledControl.cxx index 7930bb4cd7f1..4843102feb48 100644..100755 --- a/sd/source/ui/toolpanel/TitledControl.cxx +++ b/sd/source/ui/toolpanel/TitledControl.cxx @@ -52,53 +52,15 @@ TitledControl::TitledControl ( msTitle(rTitle), mbVisible(true), mpUserData(NULL), - mpControlFactory(NULL), - mpClickHandler(new ClickHandler(rClickHandler)), - mbExpansionModeIsToggle(eType!=TitleBar::TBT_CONTROL_TITLE) -{ - if (pControl.get() != NULL) - { - mpControlContainer->AddControl (::std::auto_ptr<TreeNode> ( - new TitleBar (this, rTitle, eType, pControl->IsExpandable()))); - pControl->SetParentNode (this); - } - mpControlContainer->AddControl (pControl); - - FocusManager::Instance().RegisterDownLink(this, GetControl()->GetWindow()); - FocusManager::Instance().RegisterUpLink(GetControl()->GetWindow(), this); - - SetBackground (Wallpaper()); - - GetTitleBar()->GetWindow()->Show (); - GetTitleBar()->GetWindow()->AddEventListener ( - LINK(this,TitledControl,WindowEventListener)); - - UpdateStates (); -} - - - - -TitledControl::TitledControl ( - TreeNode* pParent, - ::std::auto_ptr<ControlFactory> pControlFactory, - const String& rTitle, - const ClickHandler& rClickHandler, - TitleBar::TitleBarType eType) - : ::Window (pParent->GetWindow(), WB_TABSTOP), - TreeNode(pParent), - msTitle (rTitle), - mbVisible (true), - mpUserData (NULL), - mpControlFactory(pControlFactory), - mpClickHandler(new ClickHandler(rClickHandler)), - mbExpansionModeIsToggle(eType!=TitleBar::TBT_CONTROL_TITLE) + mpClickHandler(new ClickHandler(rClickHandler)) { mpControlContainer->AddControl (::std::auto_ptr<TreeNode> ( - new TitleBar (this, rTitle, eType, true))); + new TitleBar (this, rTitle, eType, pControl->IsExpandable()))); + pControl->SetParentNode (this); + mpControlContainer->AddControl (pControl); - // The second control is created on demand, i.e. when GetControl(true) - // is called the first time. + FocusManager::Instance().RegisterDownLink( GetTitleBar()->GetWindow(), GetControl()->GetWindow() ); + FocusManager::Instance().RegisterUpLink( GetControl()->GetWindow(), GetTitleBar()->GetWindow() ); SetBackground (Wallpaper()); @@ -124,7 +86,7 @@ TitledControl::~TitledControl (void) Size TitledControl::GetPreferredSize (void) { Size aPreferredSize; - if (GetControl(false) != NULL) + if (GetControl() != NULL) { aPreferredSize = GetControl()->GetPreferredSize(); if ( ! IsExpanded()) @@ -146,7 +108,7 @@ Size TitledControl::GetPreferredSize (void) sal_Int32 TitledControl::GetPreferredWidth (sal_Int32 nHeight) { int nPreferredWidth = 0; - if (GetControl(false) != NULL) + if (GetControl() != NULL) nPreferredWidth = GetControl()->GetPreferredWidth( nHeight - GetTitleBar()->GetWindow()->GetSizePixel().Height()); else @@ -163,7 +125,7 @@ sal_Int32 TitledControl::GetPreferredWidth (sal_Int32 nHeight) sal_Int32 TitledControl::GetPreferredHeight (sal_Int32 nWidth) { int nPreferredHeight = 0; - if (IsExpanded() && GetControl(false)!=NULL) + if (IsExpanded() && GetControl()!=NULL) nPreferredHeight = GetControl()->GetPreferredHeight(nWidth); nPreferredHeight += GetTitleBar()->GetPreferredHeight(nWidth); @@ -201,7 +163,7 @@ void TitledControl::Resize (void) Size (aWindowSize.Width(), nTitleBarHeight)); - TreeNode* pControl = GetControl(false); + TreeNode* pControl = GetControl(); if (pControl != NULL && pControl->GetWindow() != NULL && pControl->GetWindow()->IsVisible()) @@ -219,17 +181,7 @@ void TitledControl::GetFocus (void) { ::Window::GetFocus(); if (GetTitleBar() != NULL) - GetTitleBar()->SetFocus (true); -} - - - - -void TitledControl::LoseFocus (void) -{ - ::Window::LoseFocus(); - if (GetTitleBar() != NULL) - GetTitleBar()->SetFocus (false); + GetTitleBar()->GrabFocus(); } @@ -258,7 +210,7 @@ void TitledControl::KeyInput (const KeyEvent& rEvent) if ( ! FocusManager::Instance().TransferFocus(this,nCode)) { // When already expanded then put focus on first child. - TreeNode* pControl = GetControl(false); + TreeNode* pControl = GetControl(); if (pControl!=NULL && IsExpanded()) if (pControl->GetWindow() != NULL) pControl->GetWindow()->GrabFocus(); @@ -296,7 +248,7 @@ bool TitledControl::Expand (bool bExpanded) // Get the control. Use the bExpanded parameter as argument to // indicate that a control is created via its factory only when it // is to be expanded. When it is collapsed this is not necessary. - TreeNode* pControl = GetControl(bExpanded); + TreeNode* pControl = GetControl(); if (pControl != NULL && GetControl()->IsExpanded() != bExpanded) { @@ -314,7 +266,7 @@ bool TitledControl::Expand (bool bExpanded) bool TitledControl::IsExpandable (void) const { - const TreeNode* pControl = GetConstControl(false); + const TreeNode* pControl = GetConstControl(); if (pControl != NULL) return pControl->IsExpandable(); else @@ -328,7 +280,7 @@ bool TitledControl::IsExpandable (void) const bool TitledControl::IsExpanded (void) const { - const TreeNode* pControl = GetConstControl(false); + const TreeNode* pControl = GetConstControl(); if (pControl != NULL) return pControl->IsExpanded(); else @@ -402,7 +354,7 @@ void TitledControl::UpdateStates (void) else GetWindow()->Hide(); - TreeNode* pControl = GetControl(false); + TreeNode* pControl = GetControl(); if (pControl!=NULL && pControl->GetWindow() != NULL) { if (IsVisible() && IsExpanded()) @@ -435,33 +387,17 @@ IMPL_LINK(TitledControl, WindowEventListener, -TreeNode* TitledControl::GetControl (bool bCreate) +TreeNode* TitledControl::GetControl (void) { - TreeNode* pNode = mpControlContainer->GetControl(1); - if (pNode==NULL && mpControlFactory.get()!=NULL && bCreate) - { - // We have to create the control with the factory object. - ::std::auto_ptr<TreeNode> pControl (mpControlFactory->CreateControl(this));//GetParentNode())); - if (pControl.get() != NULL) - { - pControl->SetParentNode(this); - mpControlContainer->AddControl(pControl); - - pNode = mpControlContainer->GetControl(1); - FocusManager::Instance().RegisterDownLink(this, pNode->GetWindow()); - FocusManager::Instance().RegisterUpLink(pNode->GetWindow(), this); - } - } - - return pNode; + return mpControlContainer->GetControl(1); } -const TreeNode* TitledControl::GetConstControl (bool bCreate) const +const TreeNode* TitledControl::GetConstControl () const { - return const_cast<TitledControl*>(this)->GetControl(bCreate); + return const_cast<TitledControl*>(this)->GetControl(); } diff --git a/sd/source/ui/toolpanel/ToolPanel.cxx b/sd/source/ui/toolpanel/ToolPanel.cxx index 89ab9397d4ee..6dbcae52547a 100644..100755 --- a/sd/source/ui/toolpanel/ToolPanel.cxx +++ b/sd/source/ui/toolpanel/ToolPanel.cxx @@ -1,5 +1,4 @@ /************************************************************************* - * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. @@ -25,265 +24,90 @@ * ************************************************************************/ -// MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" -#include "taskpane/ToolPanel.hxx" - -#include "TaskPaneFocusManager.hxx" -#include "taskpane/TitleBar.hxx" -#include "taskpane/TitledControl.hxx" -#include "taskpane/ControlContainer.hxx" -#include "TaskPaneViewShell.hxx" -#include "taskpane/TaskPaneControlFactory.hxx" -#include "AccessibleTaskPane.hxx" - -#include "strings.hrc" -#include "sdresid.hxx" -#include <vcl/decoview.hxx> -#include <vcl/menu.hxx> -#include <vcl/svapp.hxx> - -namespace sd { namespace toolpanel { - - -/** Use WB_DIALOGCONTROL as argument for the Control constructor to - let VCL handle focus traveling. In addition the control - descriptors have to use WB_TABSTOP. -*/ -ToolPanel::ToolPanel ( - Window* pParentWindow, - TaskPaneViewShell& rViewShell) - : Control (pParentWindow, WB_DIALOGCONTROL), - TreeNode (NULL), - mrViewShell(rViewShell), - mbRearrangeActive(false) -{ - SetBackground (Wallpaper ()); -} - - - - -ToolPanel::~ToolPanel (void) -{ -} - +#include "ToolPanel.hxx" +#include "MethodGuard.hxx" +#include <taskpane/TaskPaneTreeNode.hxx> +/** === begin UNO includes === **/ +#include <com/sun/star/lang/DisposedException.hpp> +/** === end UNO includes === **/ +#include <vcl/window.hxx> -sal_uInt32 ToolPanel::AddControl ( - ::std::auto_ptr<ControlFactory> pControlFactory, - const String& rTitle, - ULONG nHelpId, - const TitledControl::ClickHandler& rClickHandler) +//...................................................................................................................... +namespace sd { namespace toolpanel { - TitledControl* pTitledControl = new TitledControl ( - this, - pControlFactory, - rTitle, - rClickHandler, - TitleBar::TBT_CONTROL_TITLE); - ::std::auto_ptr<TreeNode> pChild (pTitledControl); - - // Get the (grand) parent window which is focus-wise our parent. - Window* pParent = GetParent(); - if (pParent != NULL) - pParent = pParent->GetParent(); - - FocusManager& rFocusManager (FocusManager::Instance()); - int nControlCount (mpControlContainer->GetControlCount()); - - // Add a link up from every control to the parent. A down link is added - // only for the first control so that when entering the sub tool panel - // the focus is set to the first control. - if (pParent != NULL) +//...................................................................................................................... + + /** === begin UNO using === **/ + using ::com::sun::star::uno::Reference; + using ::com::sun::star::uno::XInterface; + using ::com::sun::star::uno::UNO_QUERY; + using ::com::sun::star::uno::UNO_QUERY_THROW; + using ::com::sun::star::uno::UNO_SET_THROW; + using ::com::sun::star::uno::Exception; + using ::com::sun::star::uno::RuntimeException; + using ::com::sun::star::uno::Any; + using ::com::sun::star::uno::makeAny; + using ::com::sun::star::uno::Sequence; + using ::com::sun::star::uno::Type; + using ::com::sun::star::lang::DisposedException; + using ::com::sun::star::awt::XWindow; + using ::com::sun::star::accessibility::XAccessible; + /** === end UNO using === **/ + + typedef MethodGuard< ToolPanel > ToolPanelGuard; + + //================================================================================================================== + //= ToolPanel + //================================================================================================================== + //------------------------------------------------------------------------------------------------------------------ + ToolPanel::ToolPanel( ::std::auto_ptr< TreeNode >& i_rControl ) + :ToolPanel_Base( m_aMutex ) + ,m_pControl( i_rControl ) { - if (nControlCount == 1) - rFocusManager.RegisterDownLink(pParent, pChild->GetWindow()); - rFocusManager.RegisterUpLink(pChild->GetWindow(), pParent); } - // Replace the old links for cycling between first and last child by - // current ones. - if (nControlCount > 0) + //------------------------------------------------------------------------------------------------------------------ + ToolPanel::~ToolPanel() { - ::Window* pFirst = mpControlContainer->GetControl(0)->GetWindow(); - ::Window* pLast = mpControlContainer->GetControl(nControlCount-1)->GetWindow(); - rFocusManager.RemoveLinks(pFirst,pLast); - rFocusManager.RemoveLinks(pLast,pFirst); - - rFocusManager.RegisterLink(pFirst,pChild->GetWindow(), KEY_UP); - rFocusManager.RegisterLink(pChild->GetWindow(),pFirst, KEY_DOWN); } - pTitledControl->GetWindow()->SetHelpId(nHelpId); - - return mpControlContainer->AddControl (pChild); -} - - - - -void ToolPanel::ListHasChanged (void) -{ - mpControlContainer->ListHasChanged (); - Rearrange (); -} - - - - -void ToolPanel::Resize (void) -{ - Control::Resize(); - Rearrange (); -} - - - - -void ToolPanel::RequestResize (void) -{ - Invalidate(); - Rearrange (); -} - - - - -/** Subtract the space for the title bars from the available space and - give the remaining space to the active control. -*/ -void ToolPanel::Rearrange (void) -{ - // Prevent recursive calls. - if ( ! mbRearrangeActive && mpControlContainer->GetVisibleControlCount()>0) + //------------------------------------------------------------------------------------------------------------------ + void ToolPanel::checkDisposed() { - mbRearrangeActive = true; - - SetBackground (Wallpaper ()); - - // Make the area that is covered by the children a little bit - // smaller so that a frame is visible arround them. - Rectangle aAvailableArea (Point(0,0), GetOutputSizePixel()); - - int nWidth = aAvailableArea.GetWidth(); - sal_uInt32 nControlCount (mpControlContainer->GetControlCount()); - sal_uInt32 nActiveControlIndex ( - mpControlContainer->GetActiveControlIndex()); + if ( m_pControl.get() == NULL ) + throw DisposedException( ::rtl::OUString(), *this ); + } - // Place title bars of controls above the active control and thereby - // determine the top of the active control. - sal_uInt32 nIndex; - for (nIndex=mpControlContainer->GetFirstIndex(); - nIndex<nActiveControlIndex; - nIndex=mpControlContainer->GetNextIndex(nIndex)) - { - TreeNode* pChild = mpControlContainer->GetControl(nIndex); - if (pChild != NULL) - { - sal_uInt32 nHeight = pChild->GetPreferredHeight (nWidth); - pChild->GetWindow()->SetPosSizePixel ( - aAvailableArea.TopLeft(), - Size(nWidth, nHeight)); - aAvailableArea.Top() += nHeight; - } - } + //------------------------------------------------------------------------------------------------------------------ + Reference< XWindow > SAL_CALL ToolPanel::getWindow() throw (RuntimeException) + { + ToolPanelGuard aGuard( *this ); + return Reference< XWindow >( m_pControl->GetWindow()->GetComponentInterface(), UNO_QUERY_THROW ); + } - // Place title bars of controls below the active control and thereby - // determine the bottom of the active control. - for (nIndex=mpControlContainer->GetLastIndex(); - nIndex<nControlCount && nIndex!=nActiveControlIndex; - nIndex=mpControlContainer->GetPreviousIndex(nIndex)) + //------------------------------------------------------------------------------------------------------------------ + Reference< XAccessible > SAL_CALL ToolPanel::createAccessible( const Reference< XAccessible >& i_rParentAccessible ) throw (RuntimeException) + { + ToolPanelGuard aGuard( *this ); + Reference< XAccessible > xAccessible( m_pControl->GetWindow()->GetAccessible( FALSE ) ); + if ( !xAccessible.is() ) { - TreeNode* pChild = mpControlContainer->GetControl(nIndex); - if (pChild != NULL) - { - sal_uInt32 nHeight = pChild->GetPreferredHeight (nWidth); - pChild->GetWindow()->SetPosSizePixel ( - Point(aAvailableArea.Left(), - aAvailableArea.Bottom()-nHeight+1), - Size(nWidth, nHeight)); - aAvailableArea.Bottom() -= nHeight; - } + xAccessible.set( m_pControl->CreateAccessibleObject( i_rParentAccessible ) ); + m_pControl->GetWindow()->SetAccessible( xAccessible ); } - - // Finally place the active control. - TreeNode* pChild = mpControlContainer->GetControl(nActiveControlIndex); - if (pChild != NULL) - pChild->GetWindow()->SetPosSizePixel ( - aAvailableArea.TopLeft(), - aAvailableArea.GetSize()); - - mbRearrangeActive = false; + return xAccessible; } - else - SetBackground ( - Application::GetSettings().GetStyleSettings().GetDialogColor()); -} - - - - -Size ToolPanel::GetPreferredSize (void) -{ - return Size(300,300); -} - - - - -sal_Int32 ToolPanel::GetPreferredWidth (sal_Int32 ) -{ - return 300; -} - - - - -sal_Int32 ToolPanel::GetPreferredHeight (sal_Int32 ) -{ - return 300; -} + //------------------------------------------------------------------------------------------------------------------ + void SAL_CALL ToolPanel::disposing() + { + m_pControl.reset(); + } - - -bool ToolPanel::IsResizable (void) -{ - return true; -} - - - - -::Window* ToolPanel::GetWindow (void) -{ - return this; -} - - - - -TaskPaneShellManager* ToolPanel::GetShellManager (void) -{ - return &mrViewShell.GetSubShellManager(); -} - - - - -::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible> ToolPanel::CreateAccessibleObject ( - const ::com::sun::star::uno::Reference< - ::com::sun::star::accessibility::XAccessible>& rxParent) -{ - return new ::accessibility::AccessibleTaskPane ( - rxParent, - String(SdResId(STR_RIGHT_PANE_TITLE)), - String(SdResId(STR_RIGHT_PANE_TITLE)), - *this); -} - -} } // end of namespace ::sd::toolpanel +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanel.hxx b/sd/source/ui/toolpanel/ToolPanel.hxx new file mode 100644 index 000000000000..2fe4a64c71be --- /dev/null +++ b/sd/source/ui/toolpanel/ToolPanel.hxx @@ -0,0 +1,80 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SD_TOOLPANEL_HXX +#define SD_TOOLPANEL_HXX + +/** === begin UNO includes === **/ +#include <com/sun/star/ui/XToolPanel.hpp> +/** === end UNO includes === **/ + +#include <cppuhelper/basemutex.hxx> +#include <cppuhelper/compbase1.hxx> + +#include <memory> + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + class TreeNode; + + //================================================================================================================== + //= ToolPanel + //================================================================================================================== + typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XToolPanel + > ToolPanel_Base; + class ToolPanel :public ::cppu::BaseMutex + ,public ToolPanel_Base + { + public: + ToolPanel( + ::std::auto_ptr< TreeNode >& i_rControl + ); + + // XToolPanel + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > SAL_CALL getWindow() throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > SAL_CALL createAccessible( const ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible >& ParentAccessible ) throw (::com::sun::star::uno::RuntimeException); + + // OComponentHelper + virtual void SAL_CALL disposing(); + + ::osl::Mutex& getMutex() { return m_aMutex; } + void checkDisposed(); + + protected: + ~ToolPanel(); + + private: + ::std::auto_ptr< TreeNode > m_pControl; + }; + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... + +#endif // SD_TOOLPANEL_HXX diff --git a/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx b/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx deleted file mode 100644 index 1db383091bff..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelChildWindow.cxx +++ /dev/null @@ -1,68 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "ToolPanelChildWindow.hxx" -#include "ToolPanelDockingWindow.hxx" - -#include "sdresid.hxx" -#include "app.hrc" -#include "sfx2/app.hxx" - - -namespace sd { namespace toolpanel { - - - -ToolPanelChildWindow::ToolPanelChildWindow ( - ::Window* pParentWindow, - USHORT nId, - SfxBindings* pBindings, - SfxChildWinInfo* pInfo) - : SfxChildWindow (pParentWindow, nId) -{ - pWindow = new ToolPanelDockingWindow (pBindings, this, pParentWindow); - eChildAlignment = SFX_ALIGN_RIGHT; - static_cast<SfxDockingWindow*>(pWindow)->Initialize (pInfo); - // SetHideNotDelete (TRUE); -}; - - - - -ToolPanelChildWindow::~ToolPanelChildWindow() -{} - - -SFX_IMPL_DOCKINGWINDOW(ToolPanelChildWindow, SID_TOOLPANEL) - - - - -} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/ToolPanelChildWindow.src b/sd/source/ui/toolpanel/ToolPanelChildWindow.src deleted file mode 100644 index 079f9608f616..000000000000 --- a/sd/source/ui/toolpanel/ToolPanelChildWindow.src +++ /dev/null @@ -1,52 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#include "app.hrc" -#include "ToolPanelChildWindow.hrc" - -DockingWindow FLT_WIN_TOOLPANEL -{ - HelpID = SID_TOOLPANEL ; - Border = TRUE ; - Hide = FALSE ; - SVLook = TRUE ; - Sizeable = TRUE ; - Moveable = TRUE ; - Closeable = TRUE ; - Zoomable = TRUE ; - Dockable = TRUE ; - EnableResizing = TRUE ; - Size = MAP_APPFONT ( 140 , 120 ) ; - Text = "Tool Panel" ; - - Control TOOLPANEL - { - Pos = MAP_APPFONT ( 0 , 0 ) ; - Size = MAP_APPFONT ( 69, 150 ) ; - Border = FALSE; - }; -}; diff --git a/sd/source/ui/toolpanel/ToolPanelFactory.cxx b/sd/source/ui/toolpanel/ToolPanelFactory.cxx new file mode 100644 index 000000000000..db4602c991d0 --- /dev/null +++ b/sd/source/ui/toolpanel/ToolPanelFactory.cxx @@ -0,0 +1,255 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "precompiled_sd.hxx" + +#include "taskpane/ToolPanelViewShell.hxx" +#include "framework/FrameworkHelper.hxx" +#include "PaneChildWindows.hxx" +#include "ViewShellBase.hxx" +#include "app.hrc" + +/** === begin UNO includes === **/ +#include <com/sun/star/ui/XUIElementFactory.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XInitialization.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/frame/XFrame.hpp> +#include <com/sun/star/awt/XWindow.hpp> +/** === end UNO includes === **/ + +#include <sfx2/frame.hxx> +#include <vcl/svapp.hxx> +#include <vos/mutex.hxx> +#include <sfx2/viewfrm.hxx> +#include <cppuhelper/implbase3.hxx> +#include <comphelper/namedvaluecollection.hxx> +#include <toolkit/helper/vclunohelper.hxx> + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + /** === begin UNO using === **/ + using ::com::sun::star::uno::Reference; + using ::com::sun::star::uno::XInterface; + using ::com::sun::star::uno::UNO_QUERY; + using ::com::sun::star::uno::UNO_QUERY_THROW; + using ::com::sun::star::uno::UNO_SET_THROW; + using ::com::sun::star::uno::Exception; + using ::com::sun::star::uno::RuntimeException; + using ::com::sun::star::uno::Any; + using ::com::sun::star::uno::makeAny; + using ::com::sun::star::uno::Sequence; + using ::com::sun::star::uno::Type; + using ::com::sun::star::uno::XComponentContext; + using ::com::sun::star::ui::XUIElementFactory; + using ::com::sun::star::ui::XUIElement; + using ::com::sun::star::beans::PropertyValue; + using ::com::sun::star::container::NoSuchElementException; + using ::com::sun::star::lang::IllegalArgumentException; + using ::com::sun::star::lang::XServiceInfo; + using ::com::sun::star::lang::XInitialization; + using ::com::sun::star::frame::XFrame; + using ::com::sun::star::awt::XWindow; + /** === end UNO using === **/ + + //================================================================================================================== + //= ToolPanelFactory + //================================================================================================================== + typedef ::cppu::WeakImplHelper3 < XUIElementFactory + , XServiceInfo + , XInitialization + > ToolPanelFactory_Base; + class ToolPanelFactory : public ToolPanelFactory_Base + { + public: + ToolPanelFactory( const Reference< XComponentContext >& i_rContext ); + + // XUIElementFactory + virtual Reference< XUIElement > SAL_CALL createUIElement( const ::rtl::OUString& ResourceURL, const Sequence< PropertyValue >& Args ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException); + virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException); + virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException); + + // XInitialization + virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException); + + protected: + virtual ~ToolPanelFactory(); + + private: + const Reference< XComponentContext > m_xContext; + }; + + //------------------------------------------------------------------------------------------------------------------ + Reference< XInterface > SAL_CALL ToolPanelFactory_createInstance( const Reference< XComponentContext >& i_rContext ) + { + return Reference< XInterface >( *new ToolPanelFactory( i_rContext ) ); + } + + //------------------------------------------------------------------------------------------------------------------ + ::rtl::OUString ToolPanelFactory_getImplementationName() throw(RuntimeException) + { + return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.drawing.ToolPanelFactory" ) ); + } + + //------------------------------------------------------------------------------------------------------------------ + Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory_getSupportedServiceNames (void) + throw (RuntimeException) + { + const ::rtl::OUString sServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.DefaultToolPanelFactory" ) ); + return Sequence< ::rtl::OUString >( &sServiceName, 1 ); + } + + //------------------------------------------------------------------------------------------------------------------ + ToolPanelFactory::ToolPanelFactory( const Reference< XComponentContext >& i_rContext ) + :m_xContext( i_rContext ) + { + } + + //------------------------------------------------------------------------------------------------------------------ + ToolPanelFactory::~ToolPanelFactory() + { + } + + //------------------------------------------------------------------------------------------------------------------ + Reference< XUIElement > SAL_CALL ToolPanelFactory::createUIElement( const ::rtl::OUString& i_rResourceURL, const Sequence< PropertyValue >& i_rArgs ) throw (NoSuchElementException, IllegalArgumentException, RuntimeException) + { + ::vos::OGuard aSolarGuard( Application::GetSolarMutex() ); + + const PanelId ePanelId( toolpanel::GetStandardPanelId( i_rResourceURL ) ); + if ( ePanelId == PID_UNKNOWN ) + throw NoSuchElementException( i_rResourceURL, *this ); + + const ::comphelper::NamedValueCollection aArgs( i_rArgs ); + const Reference< XFrame > xDocFrame( aArgs.getOrDefault( "Frame", Reference< XFrame >() ) ); + const Reference< XWindow > xParentWindow( aArgs.getOrDefault( "ParentWindow", Reference< XWindow >() ) ); + if ( !xDocFrame.is() || !xParentWindow.is() ) + throw IllegalArgumentException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "For creating a standard tool panel, a Frame and a Parent window are needed." ) ), + *this, + 2 + ); + + // look up the Sfx(View)Frame for the given XFrame + SfxViewFrame* pViewFrame = NULL; + for ( SfxFrame* pFrame = SfxFrame::GetFirst(); + pFrame != NULL; + pFrame = SfxFrame::GetNext( *pFrame ) + ) + { + if ( pFrame->GetFrameInterface() == xDocFrame ) + { + pViewFrame = pFrame->GetCurrentViewFrame(); + break; + } + } + + if ( !pViewFrame || !pViewFrame->HasChildWindow( SID_TASKPANE ) ) + throw IllegalArgumentException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Illegal frame." ) ), + *this, + 2 + ); + + // retrieve the task pane + ToolPanelChildWindow* pToolPanelWindow( dynamic_cast< ToolPanelChildWindow* >( pViewFrame->GetChildWindow( SID_TASKPANE ) ) ); + if ( !pToolPanelWindow ) + throw IllegalArgumentException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No Impress document, or no Impress Task Pane." ) ), + *this, + 2 + ); + + // retrieve the ViewShellBase, and the view shell of the task pane + ViewShellBase* pViewShellBase = dynamic_cast< ViewShellBase* >( pViewFrame->GetViewShell() ); + ::boost::shared_ptr< framework::FrameworkHelper > pFrameworkHelper; + if ( pViewShellBase ) + pFrameworkHelper = framework::FrameworkHelper::Instance( *pViewShellBase ); + ::boost::shared_ptr< ViewShell > pViewShell; + if ( pFrameworkHelper.get() ) + pViewShell = pFrameworkHelper->GetViewShell( framework::FrameworkHelper::msRightPaneURL ); + ToolPanelViewShell* pToolPanelShell = dynamic_cast< ToolPanelViewShell* >( pViewShell.get() ); + + if ( !pToolPanelShell ) + throw IllegalArgumentException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Wrong document type." ) ), + *this, + 2 + ); + + ::Window* pParentWindow = VCLUnoHelper::GetWindow( xParentWindow ); + if ( !pParentWindow || !pToolPanelShell->IsPanelAnchorWindow( *pParentWindow ) ) + throw IllegalArgumentException( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported parent window." ) ), + *this, + 2 + ); + + return pToolPanelShell->CreatePanelUIElement( xDocFrame, i_rResourceURL ); + } + + //------------------------------------------------------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ToolPanelFactory::getImplementationName( ) throw (RuntimeException) + { + return ToolPanelFactory_getImplementationName(); + } + + //------------------------------------------------------------------------------------------------------------------ + ::sal_Bool SAL_CALL ToolPanelFactory::supportsService( const ::rtl::OUString& i_rServiceName ) throw (RuntimeException) + { + const Sequence< ::rtl::OUString > aSupported( getSupportedServiceNames() ); + for ( const ::rtl::OUString* pSupported = aSupported.getConstArray(); + pSupported != aSupported.getConstArray() + aSupported.getLength(); + ++pSupported + ) + if ( *pSupported == i_rServiceName ) + return sal_True; + + return sal_False; + } + + //------------------------------------------------------------------------------------------------------------------ + Sequence< ::rtl::OUString > SAL_CALL ToolPanelFactory::getSupportedServiceNames( ) throw (RuntimeException) + { + return ToolPanelFactory_getSupportedServiceNames(); + } + + //------------------------------------------------------------------------------------------------------------------ + void SAL_CALL ToolPanelFactory::initialize( const Sequence< Any >& i_rArguments ) throw (Exception, RuntimeException) + { + ::comphelper::NamedValueCollection aArgs( i_rArguments ); + (void)aArgs; + // TODO + } + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.cxx b/sd/source/ui/toolpanel/ToolPanelUIElement.cxx new file mode 100644 index 000000000000..e81f683bcfa7 --- /dev/null +++ b/sd/source/ui/toolpanel/ToolPanelUIElement.cxx @@ -0,0 +1,134 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include "precompiled_sd.hxx" + +#include "ToolPanelUIElement.hxx" +#include "MethodGuard.hxx" + +/** === begin UNO includes === **/ +#include <com/sun/star/ui/UIElementType.hpp> +#include <com/sun/star/lang/XComponent.hpp> +/** === end UNO includes === **/ + +#include <tools/diagnose_ex.h> + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + /** === begin UNO using === **/ + using ::com::sun::star::uno::Reference; + using ::com::sun::star::uno::XInterface; + using ::com::sun::star::uno::UNO_QUERY; + using ::com::sun::star::uno::UNO_QUERY_THROW; + using ::com::sun::star::uno::UNO_SET_THROW; + using ::com::sun::star::uno::Exception; + using ::com::sun::star::uno::RuntimeException; + using ::com::sun::star::uno::Any; + using ::com::sun::star::uno::makeAny; + using ::com::sun::star::uno::Sequence; + using ::com::sun::star::uno::Type; + using ::com::sun::star::frame::XFrame; + using ::com::sun::star::lang::XComponent; + using ::com::sun::star::ui::XToolPanel; + using ::com::sun::star::lang::DisposedException; + /** === end UNO using === **/ + namespace UIElementType = ::com::sun::star::ui::UIElementType; + + typedef MethodGuard< ToolPanelUIElement > UIElementMethodGuard; + + //================================================================================================================== + //= ToolPanelUIElement + //================================================================================================================== + //------------------------------------------------------------------------------------------------------------------ + ToolPanelUIElement::ToolPanelUIElement( const Reference< XFrame >& i_rFrame, const ::rtl::OUString& i_rResourceURL, + const Reference< XToolPanel >& i_rToolPanel ) + :ToolPanelUIElement_Base( m_aMutex ) + ,m_xFrame( i_rFrame ) + ,m_sResourceURL( i_rResourceURL ) + ,m_xToolPanel( i_rToolPanel ) + { + } + + //------------------------------------------------------------------------------------------------------------------ + ToolPanelUIElement::~ToolPanelUIElement() + { + } + + //------------------------------------------------------------------------------------------------------------------ + void ToolPanelUIElement::checkDisposed() + { + if ( !m_xToolPanel.is() ) + throw DisposedException( ::rtl::OUString(), *this ); + } + + //------------------------------------------------------------------------------------------------------------------ + Reference< XFrame > SAL_CALL ToolPanelUIElement::getFrame() throw (RuntimeException) + { + UIElementMethodGuard aGuard( *this ); + return m_xFrame; + } + + //------------------------------------------------------------------------------------------------------------------ + ::rtl::OUString SAL_CALL ToolPanelUIElement::getResourceURL() throw (RuntimeException) + { + UIElementMethodGuard aGuard( *this ); + return m_sResourceURL; + } + + //------------------------------------------------------------------------------------------------------------------ + ::sal_Int16 SAL_CALL ToolPanelUIElement::getType() throw (RuntimeException) + { + UIElementMethodGuard aGuard( *this ); + return UIElementType::TOOLPANEL; + } + + //------------------------------------------------------------------------------------------------------------------ + Reference< XInterface > SAL_CALL ToolPanelUIElement::getRealInterface( ) throw (RuntimeException) + { + UIElementMethodGuard aGuard( *this ); + return m_xToolPanel.get(); + } + + //------------------------------------------------------------------------------------------------------------------ + void SAL_CALL ToolPanelUIElement::disposing() + { + try + { + Reference< XComponent > xPanelComponent( m_xToolPanel, UNO_QUERY_THROW ); + xPanelComponent->dispose(); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... diff --git a/sd/source/ui/toolpanel/ToolPanelUIElement.hxx b/sd/source/ui/toolpanel/ToolPanelUIElement.hxx new file mode 100644 index 000000000000..0a74b7bd449e --- /dev/null +++ b/sd/source/ui/toolpanel/ToolPanelUIElement.hxx @@ -0,0 +1,87 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef SD_TOOLPANELUIELEMENT_HXX +#define SD_TOOLPANELUIELEMENT_HXX + +/** === begin UNO includes === **/ +#include <com/sun/star/ui/XUIElement.hpp> +#include <com/sun/star/ui/XToolPanel.hpp> +/** === end UNO includes === **/ + +#include <cppuhelper/compbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <memory> + +//...................................................................................................................... +namespace sd { namespace toolpanel +{ +//...................................................................................................................... + + class TreeNode; + + //================================================================================================================== + //= ToolPanelUIElement + //================================================================================================================== + typedef ::cppu::WeakComponentImplHelper1 < ::com::sun::star::ui::XUIElement + > ToolPanelUIElement_Base; + class ToolPanelUIElement :public ::cppu::BaseMutex + ,public ToolPanelUIElement_Base + { + public: + ToolPanelUIElement( + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& i_rFrame, + const ::rtl::OUString& i_rResourceURL, + const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel >& i_rToolPanel + ); + + // XUIElement + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > SAL_CALL getFrame() throw (::com::sun::star::uno::RuntimeException); + virtual ::rtl::OUString SAL_CALL getResourceURL() throw (::com::sun::star::uno::RuntimeException); + virtual ::sal_Int16 SAL_CALL getType() throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL getRealInterface( ) throw (::com::sun::star::uno::RuntimeException); + + void checkDisposed(); + ::osl::Mutex& getMutex() { return m_aMutex; } + + protected: + virtual ~ToolPanelUIElement(); + + // OComponentHelper + virtual void SAL_CALL disposing(); + + private: + const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xFrame; + const ::rtl::OUString m_sResourceURL; + const ::com::sun::star::uno::Reference< ::com::sun::star::ui::XToolPanel > m_xToolPanel; + }; + +//...................................................................................................................... +} } // namespace sd::toolpanel +//...................................................................................................................... + +#endif // SD_TOOLPANELUIELEMENT_HXX diff --git a/sd/source/ui/toolpanel/ToolPanelViewShell.cxx b/sd/source/ui/toolpanel/ToolPanelViewShell.cxx new file mode 100755 index 000000000000..c62faf29ca50 --- /dev/null +++ b/sd/source/ui/toolpanel/ToolPanelViewShell.cxx @@ -0,0 +1,900 @@ +/************************************************************************* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * +************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#include "taskpane/ToolPanelViewShell.hxx" + +#include "TaskPaneShellManager.hxx" +#include "TaskPaneFocusManager.hxx" +#include "taskpane/TaskPaneControlFactory.hxx" +#include "controls/MasterPagesPanel.hxx" +#include "LayoutMenu.hxx" +#include "DrawDocShell.hxx" +#include "controls/TableDesignPanel.hxx" +#include "controls/CustomAnimationPanel.hxx" +#include "controls/SlideTransitionPanel.hxx" +#include "controls/MasterPagesSelector.hxx" +#include "ToolPanel.hxx" +#include "ToolPanelUIElement.hxx" +#include "PaneDockingWindow.hxx" +#include "FrameView.hxx" +#include "Window.hxx" +#include "sdmod.hxx" +#include "app.hrc" +#include "glob.hrc" +#include "res_bmp.hrc" +#include "helpids.h" +#include "strings.hrc" +#include "sdresid.hxx" +#include "framework/FrameworkHelper.hxx" + +/** === begin UNO includes === **/ +#include <com/sun/star/drawing/framework/XResourceId.hpp> +#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp> +#include <com/sun/star/drawing/framework/AnchorBindingMode.hpp> +#include <com/sun/star/drawing/framework/ResourceActivationMode.hpp> +#include <com/sun/star/drawing/XDrawSubController.hpp> +/** === end UNO includes === **/ + +#include <svtools/toolpanel/toolpanel.hxx> +#include <svtools/toolpanel/toolpaneldeck.hxx> +#include <svx/dlgctrl.hxx> +#include <sfx2/taskpane.hxx> +#include <sfx2/imagemgr.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/dispatch.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/msg.hxx> +#include <sfx2/objface.hxx> +#include <svx/colrctrl.hxx> +#include <svx/xtable.hxx> +#include <vcl/dockwin.hxx> +#include "sdtreelb.hxx" +#include "DrawViewShell.hxx" +#include "drawdoc.hxx" +#include "ViewShellBase.hxx" +#include <svx/ruler.hxx> +#include <vcl/svapp.hxx> +#include <vcl/toolbox.hxx> +#include <tools/diagnose_ex.h> +#include <unotools/confignode.hxx> +#include <comphelper/processfactory.hxx> +#include <comphelper/componentcontext.hxx> +#include <cppuhelper/implbase1.hxx> +#include <cppuhelper/basemutex.hxx> + +#include <vector> + +using namespace ::sd::toolpanel; + +#define ToolPanelViewShell +#include "sdslots.hxx" + +/** === begin UNO using === **/ +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::XInterface; +using ::com::sun::star::uno::UNO_QUERY; +using ::com::sun::star::uno::UNO_QUERY_THROW; +using ::com::sun::star::uno::UNO_SET_THROW; +using ::com::sun::star::uno::Exception; +using ::com::sun::star::uno::RuntimeException; +using ::com::sun::star::uno::Any; +using ::com::sun::star::uno::makeAny; +using ::com::sun::star::uno::Sequence; +using ::com::sun::star::uno::Type; +using ::com::sun::star::accessibility::XAccessible; +using ::com::sun::star::drawing::XDrawSubController; +using ::com::sun::star::frame::XFrame; +using ::com::sun::star::drawing::framework::XResourceId; +using ::com::sun::star::drawing::framework::XConfigurationChangeListener; +using ::com::sun::star::drawing::framework::ConfigurationChangeEvent; +using ::com::sun::star::lang::EventObject; +using ::com::sun::star::lang::DisposedException; +using ::com::sun::star::drawing::framework::XConfigurationControllerBroadcaster; +using ::com::sun::star::drawing::framework::XConfigurationController; +using ::com::sun::star::drawing::framework::XConfiguration; +using ::com::sun::star::drawing::framework::AnchorBindingMode_DIRECT; +using ::com::sun::star::ui::XUIElement; +using ::com::sun::star::ui::XToolPanel; +using ::com::sun::star::drawing::framework::ResourceActivationMode_REPLACE; +/** === end UNO using === **/ + +using ::sd::framework::FrameworkHelper; + +namespace sd { namespace toolpanel { + +// ===================================================================================================================== +// = misc helper +// ===================================================================================================================== +// --------------------------------------------------------------------------------------------------------------------- +PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL, const bool i_bIgnoreUnknown ) +{ + PanelId ePanelId( PID_UNKNOWN ); + + if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msMasterPagesTaskPanelURL ) ) + { + ePanelId = PID_MASTER_PAGES; + } + else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msLayoutTaskPanelURL ) ) + { + ePanelId = PID_LAYOUT; + } + else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msTableDesignPanelURL ) ) + { + ePanelId = PID_TABLE_DESIGN; + } + else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msCustomAnimationTaskPanelURL ) ) + { + ePanelId = PID_CUSTOM_ANIMATION; + } + else if ( i_rTaskPanelResourceURL.equals( FrameworkHelper::msSlideTransitionTaskPanelURL ) ) + { + ePanelId = PID_SLIDE_TRANSITION; + } + else + { + OSL_ENSURE( i_bIgnoreUnknown, "GetStandardPanelId: cannot translate the given resource URL!" ); + (void)i_bIgnoreUnknown; + } + + return ePanelId; +} + +// --------------------------------------------------------------------------------------------------------------------- +PanelId GetStandardPanelId( const ::rtl::OUString& i_rTaskPanelResourceURL ) +{ + return GetStandardPanelId( i_rTaskPanelResourceURL, false ); +} + +// ===================================================================================================================== +// = ConfigurationListener - declaration +// ===================================================================================================================== +typedef ::cppu::WeakImplHelper1 < XConfigurationChangeListener + > ConfigurationListener_Base; + +class ConfigurationListener :public ::cppu::BaseMutex + ,public ConfigurationListener_Base +{ +public: + ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl ); + + // XConfigurationChangeListener + virtual void SAL_CALL notifyConfigurationChange( const ConfigurationChangeEvent& aEvent ) throw (RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing( const EventObject& Source ) throw (RuntimeException); + + // XComponent equivalents (not available per UNO interface) + void dispose(); + +protected: + ~ConfigurationListener(); + + void impl_checkDisposed_throw() + { + if ( !m_pShellImpl ) + throw DisposedException( ::rtl::OUString(), *this ); + } + +private: + ToolPanelViewShell_Impl* m_pShellImpl; +}; + +// ===================================================================================================================== +// = ToolPanelViewShell_Impl - declaration +// ===================================================================================================================== +/** Inner implementation class of ToolPanelViewShell. +*/ +class ToolPanelViewShell_Impl :public ::boost::noncopyable + ,public ::svt::IToolPanelDeckListener + ,public ::sfx2::IToolPanelCompare +{ +public: + static const size_t mnInvalidId = static_cast< size_t >( -1 ); + + ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent ); + ~ToolPanelViewShell_Impl(); + + ToolPanelViewShell& GetAntiImpl() { return m_rPanelViewShell; } + + /** Here the panels are created that are shown in the task pane. + */ + void Setup(); + + /** clean up the instance + */ + void Cleanup(); + + /** activates the panel which has the given resource URL + */ + void ActivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ); + + /** de-activates the panel given by its resource URL, bypassing the configuration controller + + If the panel is not active currently, nothing happens. + */ + void DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ); + + /** provides access to the the VCL window of the panel deck + */ + ::sfx2::ModuleTaskPane& GetTaskPane() { return *m_pTaskPane; } + const ::sfx2::ModuleTaskPane& GetTaskPane() const { return *m_pTaskPane; } + + ::svt::ToolPanelDeck& GetToolPanelDeck() { return GetTaskPane().GetPanelDeck(); } + const ::svt::ToolPanelDeck& GetToolPanelDeck() const { return GetTaskPane().GetPanelDeck(); } + + Reference< XAccessible > + CreateAccessible( ::sd::Window& i_rWindow ); + + void ConnectToDockingWindow(); + +private: + // IToolPanelDeckListener overridables + virtual void PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ); + virtual void PanelRemoved( const size_t i_nPosition ); + virtual void ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ); + virtual void LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ); + virtual void Dying(); + + // IToolPanelCompare overridables + virtual short compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const; + +private: + struct InitialPanel + { + ::rtl::OUString sPanelResourceURL; + bool bActivateDirectly; + InitialPanel() + :sPanelResourceURL() + ,bActivateDirectly( true ) + { + } + }; + InitialPanel impl_determineInitialPanel(); + ::rtl::OUString impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel ); + +private: + ToolPanelViewShell& m_rPanelViewShell; + ::boost::scoped_ptr< ::sfx2::ModuleTaskPane > m_pTaskPane; + ::std::auto_ptr< ::sfx2::TaskPaneController > m_pTaskPaneController; + ::rtl::Reference< ConfigurationListener > m_pConfigListener; + bool m_bInitialized; +}; + +// ===================================================================================================================== +// = ConfigurationListener - implementation +// ===================================================================================================================== +// --------------------------------------------------------------------------------------------------------------------- +ConfigurationListener::ConfigurationListener( ToolPanelViewShell_Impl& i_rShellImpl ) + :m_pShellImpl( &i_rShellImpl ) +{ + ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( i_rShellImpl.GetAntiImpl().GetViewShellBase() ) ); + Reference< XConfigurationControllerBroadcaster > xBroadcaster; + if ( pFrameworkHelper.get() ) + xBroadcaster.set( pFrameworkHelper->GetConfigurationController().get() ); + ENSURE_OR_THROW( pFrameworkHelper.get(), "no access to the config controller" ); + + osl_incrementInterlockedCount( &m_refCount ); + { + xBroadcaster->addConfigurationChangeListener( this, ::rtl::OUString(), Any() ); + } + osl_decrementInterlockedCount( &m_refCount ); +} + +// --------------------------------------------------------------------------------------------------------------------- +ConfigurationListener::~ConfigurationListener() +{ +} + +// --------------------------------------------------------------------------------------------------------------------- +void SAL_CALL ConfigurationListener::notifyConfigurationChange( const ConfigurationChangeEvent& i_rEvent ) throw (RuntimeException) +{ + ::osl::MutexGuard aGuard( m_aMutex ); + impl_checkDisposed_throw(); + + // is this an event we're interested in? + if ( i_rEvent.Type != FrameworkHelper::msResourceActivationEvent ) + return; + + // is this a resource we're interested in? Must be anchored in the task pane ... + Reference< XResourceId > xAnchorId; + if ( i_rEvent.ResourceId.is() ) + xAnchorId = i_rEvent.ResourceId->getAnchor(); + if ( !xAnchorId.is() ) + return; + const ::rtl::OUString sAnchorURL( xAnchorId->getResourceURL() ); + if ( sAnchorURL != FrameworkHelper::msTaskPaneURL ) + return; + + m_pShellImpl->ActivatePanelByResource( i_rEvent.ResourceId->getResourceURL() ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void SAL_CALL ConfigurationListener::disposing( const EventObject& i_rEvent ) throw (RuntimeException) +{ + (void)i_rEvent; + { + ::osl::MutexGuard aGuard( m_aMutex ); + impl_checkDisposed_throw(); + } + + dispose(); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ConfigurationListener::dispose() +{ + ::osl::MutexGuard aGuard( m_aMutex ); + m_pShellImpl = NULL; +} + +// ===================================================================================================================== +// = ToolPanelViewShell +// ===================================================================================================================== +// --------------------------------------------------------------------------------------------------------------------- +SFX_IMPL_INTERFACE(ToolPanelViewShell, SfxShell, SdResId(STR_TASKPANEVIEWSHELL)) +{ +} + +// --------------------------------------------------------------------------------------------------------------------- +TYPEINIT1(ToolPanelViewShell, ViewShell); + +// --------------------------------------------------------------------------------------------------------------------- +ToolPanelViewShell_Impl::InitialPanel ToolPanelViewShell_Impl::impl_determineInitialPanel() +{ + InitialPanel aPanelToActivate; + if ( GetAntiImpl().GetViewShellBase().GetDocShell()->GetDocumentType() == DOCUMENT_TYPE_DRAW ) + // for Draw, rely on SFX's default handling, which is to activate the previously active panel + return aPanelToActivate; + + // Default to Layout panel, but check whether the requested configuration already contains a tool panel, in this case, + // use that one. + aPanelToActivate.sPanelResourceURL = FrameworkHelper::msLayoutTaskPanelURL; + aPanelToActivate.bActivateDirectly = false; + try + { + ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( m_rPanelViewShell.GetViewShellBase() ) ); + const Reference< XResourceId > xToolPanelId( pFrameworkHelper->CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ) ); + Reference< XConfigurationController > xCC( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW ); + Reference< XConfiguration > xConfiguration( xCC->getRequestedConfiguration(), UNO_QUERY_THROW ); + Sequence< Reference< XResourceId > > aViewIds( xConfiguration->getResources( + FrameworkHelper::CreateResourceId( FrameworkHelper::msTaskPaneURL, FrameworkHelper::msRightPaneURL ), + FrameworkHelper::msTaskPanelURLPrefix, AnchorBindingMode_DIRECT ) ); + + if ( aViewIds.getLength() > 0 ) + { + const ::rtl::OUString sResourceURL( aViewIds[0]->getResourceURL() ); + PanelId nRequestedPanel = GetStandardPanelId( sResourceURL ); + if ( nRequestedPanel != PID_UNKNOWN ) + { + aPanelToActivate.sPanelResourceURL = sResourceURL; + aPanelToActivate.bActivateDirectly = true; + } + } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + return aPanelToActivate; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::Setup() +{ + if ( m_bInitialized ) + return; + m_bInitialized = true; + + // initially activate a panel + const InitialPanel aInitialPanel = impl_determineInitialPanel(); + if ( aInitialPanel.sPanelResourceURL.getLength() ) + { + if ( aInitialPanel.bActivateDirectly ) + { + ActivatePanelByResource( aInitialPanel.sPanelResourceURL ); + } + else + { + ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) ); + pFrameworkHelper->RequestTaskPanel( aInitialPanel.sPanelResourceURL ); + } + } + + // listen at the configuration + m_pConfigListener.set( new ConfigurationListener( *this ) ); + + m_pTaskPane->Show(); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::Cleanup() +{ + if ( m_bInitialized ) + { + if ( m_pConfigListener.is() ) + m_pConfigListener->dispose(); + } + GetToolPanelDeck().RemoveListener( *this ); + m_pTaskPaneController.reset(); + m_pTaskPane.reset(); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::ActivatePanelByResource( const ::rtl::OUString& i_rResourceURL ) +{ + // determine position of the requested panel + ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rResourceURL ); + OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::ActivatePanelByResource: illegal panel resource, or illegal panel deck setup!" ); + if ( !!aPanelPos ) + GetToolPanelDeck().ActivatePanel( *aPanelPos ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::DeactivatePanelByResource( const ::rtl::OUString& i_rPanelResourceURL ) +{ + // determine position of the requested panel + ::boost::optional< size_t > aPanelPos = GetTaskPane().GetPanelPos( i_rPanelResourceURL ); + OSL_ENSURE( !!aPanelPos, "ToolPanelViewShell_Impl::DeactivatePanelByResource: illegal panel resource, or illegal panel deck setup!" ); + if ( !!aPanelPos ) + { + if ( GetToolPanelDeck().GetActivePanel() == *aPanelPos ) + GetToolPanelDeck().ActivatePanel( ::boost::optional< size_t >() ); + } +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::Initialize() +{ + mpImpl->Setup(); +} + +// --------------------------------------------------------------------------------------------------------------------- +ToolPanelViewShell::ToolPanelViewShell( SfxViewFrame* pFrame, ViewShellBase& rViewShellBase, ::Window* pParentWindow, + FrameView* pFrameViewArgument ) + :ViewShell(pFrame, pParentWindow, rViewShellBase) + ,mpImpl( new ToolPanelViewShell_Impl( *this, *mpContentWindow.get() ) ) + ,mpSubShellManager() + ,mnMenuId(0) +{ + meShellType = ST_TASK_PANE; + + mpContentWindow->SetCenterAllowed( false ); + pParentWindow->SetStyle( pParentWindow->GetStyle() | WB_DIALOGCONTROL ); + + GetParentWindow()->SetBackground( Wallpaper() ); + mpContentWindow->SetBackground( Wallpaper() ); + + GetParentWindow()->SetHelpId(HID_SD_TASK_PANE); + + mpImpl->ConnectToDockingWindow(); + + SetPool( &GetDoc()->GetPool() ); + + if ( pFrameViewArgument ) + mpFrameView = pFrameViewArgument; + else + mpFrameView = new FrameView( GetDoc() ); + GetFrameView()->Connect(); + + // Hide or delete unused controls that we have inherited from the + // ViewShell base class. + mpHorizontalScrollBar.reset(); + mpVerticalScrollBar.reset(); + mpScrollBarBox.reset(); + mpHorizontalRuler.reset(); + mpVerticalRuler.reset(); + + SetName( String( RTL_CONSTASCII_USTRINGPARAM( "ToolPanelViewShell" ) ) ); + + // For accessibility we have to shortly hide the content window. This + // triggers the construction of a new accessibility object for the new + // view shell. (One is created earlier while the construtor of the base + // class is executed. At that time the correct accessibility object can + // not be constructed.) + if ( mpContentWindow.get() ) + { + mpContentWindow->Hide(); + mpContentWindow->Show(); + } + + // Register the shell manager as factory at the ViewShellManager. + mpSubShellManager.reset( new TaskPaneShellManager( + GetViewShellBase().GetViewShellManager(), + *this + ) ); + GetViewShellBase().GetViewShellManager()->AddSubShellFactory( this, mpSubShellManager ); +} + +// --------------------------------------------------------------------------------------------------------------------- +ToolPanelViewShell::~ToolPanelViewShell() +{ + mpImpl->Cleanup(); + + // reset our impl before destroying the panel deck, to ensure the hidden panels are properly + // disposed/destroyed, too + mpImpl.reset(); + GetViewShellBase().GetViewShellManager()->RemoveSubShellFactory(this, mpSubShellManager); +} + +// --------------------------------------------------------------------------------------------------------------------- +// static +void ToolPanelViewShell::RegisterControls() +{ + SfxModule* pModule = SD_MOD(); + controls::MasterPagesSelector::RegisterInterface( pModule ); + LayoutMenu::RegisterInterface( pModule ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::ArrangeGUIElements() +{ + ViewShell::ArrangeGUIElements(); + + Initialize(); + + mpImpl->GetTaskPane().SetPosSizePixel( Point(), maViewSize ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::GetFocus() +{ + Invalidate(); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::LoseFocus() +{ + Invalidate(); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::KeyInput( const KeyEvent& i_rKeyEvent ) +{ + const KeyCode nCode = i_rKeyEvent.GetKeyCode(); + if ( nCode == KEY_RETURN ) + { + if ( !mpImpl->GetTaskPane().HasChildPathFocus() ) + mpImpl->GetTaskPane().GrabFocus(); + } + else + ViewShell::KeyInput( i_rKeyEvent, NULL ); +} + +// --------------------------------------------------------------------------------------------------------------------- +SdPage* ToolPanelViewShell::GetActualPage() +{ + return NULL; +} + +// --------------------------------------------------------------------------------------------------------------------- +SdPage* ToolPanelViewShell::getCurrentPage() const +{ + return NULL; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::Execute( SfxRequest& ) +{ + OSL_ENSURE( false, "ToolPanelViewShell::Execute: not to be called! (right?)" ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::GetState( SfxItemSet& ) +{ + OSL_ENSURE( false, "ToolPanelViewShell::GetState: not to be called! (right?)" ); +} + +// --------------------------------------------------------------------------------------------------------------------- +TaskPaneShellManager& ToolPanelViewShell::GetSubShellManager() const +{ + return *mpSubShellManager.get(); +} + +// --------------------------------------------------------------------------------------------------------------------- +DockingWindow* ToolPanelViewShell::GetDockingWindow() +{ + ::Window* pParentWindow = GetParentWindow(); + DockingWindow* pDockingWindow = NULL; + while (pParentWindow!=NULL && pDockingWindow==NULL) + { + pDockingWindow = dynamic_cast<DockingWindow*>(pParentWindow); + pParentWindow = pParentWindow->GetParent(); + } + return pDockingWindow; +} + +// --------------------------------------------------------------------------------------------------------------------- +Reference< XAccessible > ToolPanelViewShell::CreateAccessibleDocumentView( ::sd::Window* i_pWindow ) +{ + ENSURE_OR_RETURN( i_pWindow, "ToolPanelViewShell::CreateAccessibleDocumentView: illegal window!", NULL ); + return mpImpl->CreateAccessible( *i_pWindow ); +} + +// --------------------------------------------------------------------------------------------------------------------- +Reference< XDrawSubController > ToolPanelViewShell::CreateSubController() +{ + // This view shell is not designed to be the main view shell and thus + // does not support a UNO sub controller. + return Reference< XDrawSubController >(); +} + +// --------------------------------------------------------------------------------------------------------------------- +bool ToolPanelViewShell::RelocateToParentWindow( ::Window* pParentWindow ) +{ + ::Window* pOldParentWindow = GetParentWindow(); + FocusManager::Instance().RemoveLinks( pOldParentWindow, &mpImpl->GetTaskPane() ); + FocusManager::Instance().RemoveLinks( &mpImpl->GetTaskPane(), pOldParentWindow ); + + PaneDockingWindow* pDockingWindow = dynamic_cast< PaneDockingWindow* >( GetDockingWindow() ); + if ( pDockingWindow != NULL ) + { + pDockingWindow->SetEndDockingHdl( Link() ); + } + + ViewShell::RelocateToParentWindow(pParentWindow); + + mpImpl->ConnectToDockingWindow(); + + Resize(); + + return true; +} + +//--------------------------------------------------------------------------------------------------------------------- +bool ToolPanelViewShell::IsPanelAnchorWindow( const ::Window& i_rWindow ) const +{ + return &mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() == &i_rWindow; +} + +//--------------------------------------------------------------------------------------------------------------------- +namespace +{ + typedef std::auto_ptr< ControlFactory > (*ControlFactoryFactory)( ToolPanelViewShell& i_rToolPanelShell ); + + struct PanelFactory + { + ControlFactoryFactory pFactory; + ULONG nHelpID; + PanelFactory( const ControlFactoryFactory i_pFactory, const ULONG i_nHelpID ) + :pFactory( i_pFactory ) + ,nHelpID( i_nHelpID ) + { + } + }; + + const PanelFactory lcl_describePanel( const PanelId i_ePanelId ) + { + switch ( i_ePanelId ) + { + case PID_MASTER_PAGES: + return PanelFactory( &controls::MasterPagesPanel::CreateControlFactory, HID_SD_SLIDE_DESIGNS ); + case PID_LAYOUT: + return PanelFactory( &LayoutMenu::CreateControlFactory, HID_SD_SLIDE_LAYOUTS ); + case PID_TABLE_DESIGN: + return PanelFactory( &controls::TableDesignPanel::CreateControlFactory, HID_SD_TABLE_DESIGN ); + case PID_CUSTOM_ANIMATION: + return PanelFactory( &controls::CustomAnimationPanel::CreateControlFactory, HID_SD_CUSTOM_ANIMATIONS ); + case PID_SLIDE_TRANSITION: + return PanelFactory( &controls::SlideTransitionPanel::CreateControlFactory, HID_SD_SLIDE_TRANSITIONS ); + default: + break; + } + throw RuntimeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "illegal panel ID" ) ), NULL ); + } +} + +//--------------------------------------------------------------------------------------------------------------------- +Reference< XUIElement > ToolPanelViewShell::CreatePanelUIElement( const Reference< XFrame >& i_rDocFrame, const ::rtl::OUString& i_rPanelResourceURL ) +{ + const PanelId ePanelId( GetStandardPanelId( i_rPanelResourceURL ) ); + ENSURE_OR_RETURN( ePanelId != PID_UNKNOWN, "ToolPanelViewShell::CreatePanelUIElement: illegal panel URL!", NULL ); + + // a TreeNode which will resemble the panel + const PanelFactory aPanelFactory( lcl_describePanel( ePanelId ) ); + ::std::auto_ptr< ControlFactory > pControlFactory( (*aPanelFactory.pFactory)( *this ) ); + ::std::auto_ptr< TreeNode > pNode( pControlFactory->CreateControl( mpImpl->GetToolPanelDeck().GetPanelWindowAnchor() ) ); + ENSURE_OR_THROW( ( pNode.get() != NULL ) && ( pNode->GetWindow() != NULL ), + "illegal node returned by the control factory" ); + pNode->GetWindow()->SetHelpId( aPanelFactory.nHelpID ); + + // create an XToolPanel + Reference< XToolPanel > xPanel( new ToolPanel( pNode ) ); + + // create an XUIElement providing this panel + const Reference< XUIElement > xUIElement( new ToolPanelUIElement( i_rDocFrame, i_rPanelResourceURL, xPanel ) ); + + return xUIElement; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::ActivatePanel( const ::rtl::OUString& i_rPanelResourceURL ) +{ + OSL_ENSURE( i_rPanelResourceURL.indexOf( FrameworkHelper::msTaskPanelURLPrefix ) < 0, + "ToolPanelViewShell::ActivatePanel: for drawing-framework-controller panels, please use FrameworkHelper::RequestTaskPanel!" ); + mpImpl->ActivatePanelByResource( i_rPanelResourceURL ); +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell::DeactivatePanel( const ::rtl::OUString& i_rPanelResourceURL ) +{ + mpImpl->DeactivatePanelByResource( i_rPanelResourceURL ); +} + +// ===================================================================================================================== +// = ToolPanelViewShell_Impl - implementation +// ===================================================================================================================== +// --------------------------------------------------------------------------------------------------------------------- +ToolPanelViewShell_Impl::ToolPanelViewShell_Impl( ToolPanelViewShell& i_rPanelViewShell, ::Window& i_rPanelDeckParent ) + :m_rPanelViewShell( i_rPanelViewShell ) + ,m_pTaskPane( new ::sfx2::ModuleTaskPane( i_rPanelDeckParent, i_rPanelViewShell.GetViewShellBase().GetViewFrame()->GetFrame().GetFrameInterface(), *this ) ) + ,m_bInitialized( false ) +{ + const String sPaneTitle( SdResId( STR_RIGHT_PANE_TITLE ) ); + GetToolPanelDeck().SetAccessibleName( sPaneTitle ); + GetToolPanelDeck().SetAccessibleDescription( sPaneTitle ); + + GetToolPanelDeck().AddListener( *this ); +} + +// --------------------------------------------------------------------------------------------------------------------- +ToolPanelViewShell_Impl::~ToolPanelViewShell_Impl() +{ +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::PanelInserted( const ::svt::PToolPanel& i_pPanel, const size_t i_nPosition ) +{ + // not interested in + (void)i_pPanel; + (void)i_nPosition; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::PanelRemoved( const size_t i_nPosition ) +{ + // not interested in + (void)i_nPosition; +} + +// --------------------------------------------------------------------------------------------------------------------- +::rtl::OUString ToolPanelViewShell_Impl::impl_getPanelURL( const ::boost::optional< size_t >& i_rPanel ) +{ + ::rtl::OUString sPanelURL; + if ( !!i_rPanel ) + { + sPanelURL = GetTaskPane().GetPanelResourceURL( *i_rPanel ); + const PanelId ePanelId( GetStandardPanelId( sPanelURL, true ) ); + if ( ePanelId == PID_UNKNOWN ) + sPanelURL = ::rtl::OUString(); + } + return sPanelURL; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::ActivePanelChanged( const ::boost::optional< size_t >& i_rOldActive, const ::boost::optional< size_t >& i_rNewActive ) +{ + // update the configuration controller, since this change in the active panel might have been triggered by means other + // than the drawing framework, so it does not yet know about it. + + const ::rtl::OUString sOldPanelURL( impl_getPanelURL( i_rOldActive ) ); + const ::rtl::OUString sNewPanelURL( impl_getPanelURL( i_rNewActive ) ); + + const ::boost::shared_ptr< FrameworkHelper > pFrameworkHelper( FrameworkHelper::Instance( GetAntiImpl().GetViewShellBase() ) ); + if ( sNewPanelURL.getLength() ) + { + // activate the resource belonging to the new panel. This will automatically de-activate the previously active + // panel resource (since ResourceActivationMode_REPLACE is used) + pFrameworkHelper->RequestTaskPanel( sNewPanelURL ); + } + else if ( sOldPanelURL.getLength() ) + { + // there is no new active panel, or it is not one of our standard panels, i.e. it is not covered by the + // resource framework. => Deactivate the old resource. + try + { + Reference< XConfigurationController > xConfigController( pFrameworkHelper->GetConfigurationController(), UNO_QUERY_THROW ); + xConfigController->requestResourceDeactivation( + pFrameworkHelper->CreateResourceId( + sOldPanelURL, + FrameworkHelper::msTaskPaneURL, + FrameworkHelper::msRightPaneURL + ) + ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::LayouterChanged( const ::svt::PDeckLayouter& i_rNewLayouter ) +{ + // not interested in + (void)i_rNewLayouter; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::Dying() +{ + // not interested in +} + +// --------------------------------------------------------------------------------------------------------------------- +short ToolPanelViewShell_Impl::compareToolPanelsURLs( const ::rtl::OUString& i_rLHS, const ::rtl::OUString& i_rRHS ) const +{ + const PanelId eLHS( GetStandardPanelId( i_rLHS, true ) ); + const PanelId eRHS( GetStandardPanelId( i_rRHS, true ) ); + if ( eLHS < eRHS ) + return -1; + if ( eLHS == eRHS ) + return 0; + return 1; +} + +// --------------------------------------------------------------------------------------------------------------------- +void ToolPanelViewShell_Impl::ConnectToDockingWindow() +{ + m_pTaskPaneController.reset(); + DockingWindow* pDockingWindow( GetAntiImpl().GetDockingWindow() ); + if ( pDockingWindow ) + { + PaneDockingWindow* pPaneDockingWindow = dynamic_cast< PaneDockingWindow* >( pDockingWindow ); + OSL_ENSURE( pPaneDockingWindow, "ToolPanelViewShell_Impl::ConnectToDockingWindow: unsupported docking window type!" ); + if ( pPaneDockingWindow != NULL ) + m_pTaskPaneController.reset( new ::sfx2::TaskPaneController( GetTaskPane(), *pPaneDockingWindow ) ); + } + + // Tell the focus manager that we want to pass the focus to our + // child. + FocusManager::Instance().RegisterDownLink( GetAntiImpl().GetParentWindow(), &GetTaskPane() ); +} + +// --------------------------------------------------------------------------------------------------------------------- +Reference< XAccessible > ToolPanelViewShell_Impl::CreateAccessible( ::sd::Window& i_rWindow ) +{ + Reference< XAccessible > xAccessible( GetToolPanelDeck().GetAccessible( FALSE ) ); + if ( !xAccessible.is() ) + { + // determine the XAccessible which is the parent of the to-be-created object + ::Window* pAccessibleParent = i_rWindow.GetAccessibleParentWindow(); + OSL_ENSURE( pAccessibleParent, "ToolPanelViewShell_Impl::CreateAccessible: illegal accessible parent provided by the sd::Window!" ); + GetToolPanelDeck().SetAccessibleParentWindow( pAccessibleParent ); + + xAccessible = GetToolPanelDeck().GetAccessible( TRUE ); + ENSURE_OR_RETURN( xAccessible.is(), "ToolPanelViewShell_Impl::CreateAccessible: illegal ToolPanelDeck accessible!", NULL ); + OSL_ENSURE( xAccessible->getAccessibleContext().is() + && xAccessible->getAccessibleContext()->getAccessibleParent() == pAccessibleParent->GetAccessible(), + "ToolPanelViewShell_Impl::CreateAccessible: illegal parenthood!" ); + } + return xAccessible; +} + +} } // end of namespace ::sd::toolpanel diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx index 9767efe87c48..e7edf109cffd 100644..100755 --- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx +++ b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx @@ -31,6 +31,7 @@ #include "CustomAnimationPanel.hxx" #include "taskpane/TaskPaneControlFactory.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "strings.hrc" #include "sdresid.hxx" @@ -44,10 +45,11 @@ namespace sd namespace toolpanel { namespace controls { -CustomAnimationPanel::CustomAnimationPanel(TreeNode* pParent, ViewShellBase& rBase) - : SubToolPanel (pParent) +CustomAnimationPanel::CustomAnimationPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell) + :SubToolPanel( i_rParentWindow ) + ,m_pPanelViewShell( &i_rPanelViewShell ) { - mpWrappedControl = createCustomAnimationPanel( pParent->GetWindow(), rBase ); + mpWrappedControl = createCustomAnimationPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() ); mpWrappedControl->Show(); } @@ -56,10 +58,17 @@ CustomAnimationPanel::~CustomAnimationPanel() delete mpWrappedControl; } -std::auto_ptr<ControlFactory> CustomAnimationPanel::CreateControlFactory (ViewShellBase& rBase) +std::auto_ptr< ControlFactory > CustomAnimationPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) { - return std::auto_ptr<ControlFactory>( - new ControlFactoryWithArgs1<CustomAnimationPanel,ViewShellBase>(rBase)); + return std::auto_ptr< ControlFactory >( + new RootControlFactoryWithArg< CustomAnimationPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); +} + +TaskPaneShellManager* CustomAnimationPanel::GetShellManager() +{ + if ( m_pPanelViewShell ) + return &m_pPanelViewShell->GetSubShellManager(); + return SubToolPanel::GetShellManager(); } Size CustomAnimationPanel::GetPreferredSize() diff --git a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx index 734965e5264b..864ba637b94d 100644..100755 --- a/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx +++ b/sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx @@ -37,6 +37,7 @@ class ViewShellBase; namespace sd { namespace toolpanel { class TreeNode; class ControlFactory; +class ToolPanelViewShell; } } namespace sd { namespace toolpanel { namespace controls { @@ -46,12 +47,16 @@ class CustomAnimationPanel { public: CustomAnimationPanel ( - TreeNode* pParent, - ViewShellBase& rBase); + Window& i_rParentWindow, + ToolPanelViewShell& i_rPanelViewShell); virtual ~CustomAnimationPanel (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase); + static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rPanelViewShell); + // TreeNode overridables + virtual TaskPaneShellManager* GetShellManager(); + + // ILayoutableWindow overridables virtual Size GetPreferredSize (void); virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); @@ -68,6 +73,7 @@ public: private: Size maPreferredSize; ::Window* mpWrappedControl; + ToolPanelViewShell* m_pPanelViewShell; }; } } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx index 2e121098194a..b9040e72283f 100644..100755 --- a/sd/source/ui/toolpanel/controls/DocumentHelper.cxx +++ b/sd/source/ui/toolpanel/controls/DocumentHelper.cxx @@ -44,6 +44,8 @@ #include <com/sun/star/container/XIndexAccess.hpp> #include "stlpool.hxx" #include <svx/xfillit0.hxx> +#include <tools/diagnose_ex.h> + using namespace ::com::sun::star; namespace sd { namespace toolpanel { namespace controls { @@ -245,9 +247,7 @@ SdPage* DocumentHelper::AddMasterPage ( catch (uno::Exception& rException) { pClonedMasterPage = NULL; - OSL_TRACE("caught exception while adding master page: %s", - ::rtl::OUStringToOString(rException.Message, - RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } catch (::std::exception rException) { diff --git a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx b/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx index 6b9ff09bbed3..9a5eefb6d925 100644..100755 --- a/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx +++ b/sd/source/ui/toolpanel/controls/MasterPageContainerProviders.cxx @@ -40,6 +40,7 @@ #include <vcl/image.hxx> #include <vcl/pngread.hxx> #include <com/sun/star/embed/ElementModes.hpp> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -291,7 +292,7 @@ SdPage* TemplatePageObjectProvider::operator() (SdDrawDocument* pContainerDocume } catch (uno::RuntimeException) { - OSL_TRACE ("caught exception while loading page from template file"); + DBG_UNHANDLED_EXCEPTION(); pPage = NULL; } diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx index b897e1514862..8dab51e93a58 100644..100755 --- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx +++ b/sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx @@ -33,6 +33,7 @@ #include "CurrentMasterPagesSelector.hxx" #include "RecentMasterPagesSelector.hxx" #include "AllMasterPagesSelector.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "taskpane/TaskPaneControlFactory.hxx" #include "taskpane/TitledControl.hxx" #include "../TaskPaneShellManager.hxx" @@ -48,8 +49,14 @@ namespace sd { namespace toolpanel { namespace controls { -MasterPagesPanel::MasterPagesPanel (TreeNode* pParent, ViewShellBase& rBase) - : ScrollPanel (pParent) +MasterPagesPanel::MasterPagesPanel (::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell) + :ScrollPanel (i_rParentWindow) + ,m_pPanelViewShell( &i_rPanelViewShell ) +{ + impl_construct( m_pPanelViewShell->GetViewShellBase() ); +} + +void MasterPagesPanel::impl_construct( ViewShellBase& rBase ) { SdDrawDocument* pDocument = rBase.GetDocument(); ::std::auto_ptr<controls::MasterPagesSelector> pSelector; @@ -118,18 +125,33 @@ MasterPagesPanel::MasterPagesPanel (TreeNode* pParent, ViewShellBase& rBase) MasterPagesPanel::~MasterPagesPanel (void) { + TaskPaneShellManager* pShellManager( GetShellManager() ); + OSL_ENSURE( pShellManager, "MasterPagesPanel::~MasterPagesPanel: no shell manager anymore - cannot remove sub shells!" ); + if ( pShellManager ) + { + pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_CURRENT ); + pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_RECENT ); + pShellManager->RemoveSubShell( HID_SD_TASK_PANE_PREVIEW_ALL ); + } } -std::auto_ptr<ControlFactory> MasterPagesPanel::CreateControlFactory (ViewShellBase& rBase) +TaskPaneShellManager* MasterPagesPanel::GetShellManager() { - return std::auto_ptr<ControlFactory>( - new ControlFactoryWithArgs1<MasterPagesPanel,ViewShellBase>(rBase)); + if ( m_pPanelViewShell ) + return &m_pPanelViewShell->GetSubShellManager(); + return TreeNode::GetShellManager(); } +std::auto_ptr< ControlFactory > MasterPagesPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) +{ + return std::auto_ptr< ControlFactory >( + new RootControlFactoryWithArg< MasterPagesPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); +} + } } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx b/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx index 1c6d75ea8dcb..932007802ebf 100644..100755 --- a/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx +++ b/sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx @@ -37,6 +37,7 @@ class ViewShellBase; namespace sd { namespace toolpanel { class ControlFactory; class TreeNode; +class ToolPanelViewShell; } } namespace sd { namespace toolpanel { namespace controls { @@ -50,11 +51,20 @@ class MasterPagesPanel { public: MasterPagesPanel ( - TreeNode* pParent, - ViewShellBase& rBase); + ::Window& i_rParentWindow, + ToolPanelViewShell& i_rPanelViewShell); virtual ~MasterPagesPanel (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase); + // TreeNode overridables + virtual TaskPaneShellManager* GetShellManager (void); + + static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); + +private: + void impl_construct( ViewShellBase& rBase ); + +private: + ToolPanelViewShell* m_pPanelViewShell; }; } } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx index 2cb0f58a029b..4ad67b876983 100644..100755 --- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx +++ b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx @@ -30,6 +30,7 @@ #include "SlideTransitionPanel.hxx" #include "taskpane/TaskPaneControlFactory.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "strings.hrc" #include "sdresid.hxx" @@ -45,11 +46,12 @@ namespace toolpanel { namespace controls { -SlideTransitionPanel::SlideTransitionPanel(TreeNode* pParent, ViewShellBase& rBase) - : SubToolPanel (pParent), - maPreferredSize( 100, 200 ) +SlideTransitionPanel::SlideTransitionPanel(Window& i_rParentWindow, ToolPanelViewShell& i_rToolPanelShell) + :SubToolPanel( i_rParentWindow ) + ,maPreferredSize( 100, 200 ) + ,m_pPanelViewShell( &i_rToolPanelShell ) { - mpWrappedControl = createSlideTransitionPanel( pParent->GetWindow(), rBase ); + mpWrappedControl = createSlideTransitionPanel( &i_rParentWindow, i_rToolPanelShell.GetViewShellBase() ); mpWrappedControl->Show(); } @@ -58,10 +60,17 @@ SlideTransitionPanel::~SlideTransitionPanel() delete mpWrappedControl; } -std::auto_ptr<ControlFactory> SlideTransitionPanel::CreateControlFactory (ViewShellBase& rBase) +std::auto_ptr< ControlFactory > SlideTransitionPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) { - return std::auto_ptr<ControlFactory>( - new ControlFactoryWithArgs1<SlideTransitionPanel,ViewShellBase>(rBase)); + return std::auto_ptr< ControlFactory >( + new RootControlFactoryWithArg< SlideTransitionPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); +} + +TaskPaneShellManager* SlideTransitionPanel::GetShellManager() +{ + if ( m_pPanelViewShell ) + return &m_pPanelViewShell->GetSubShellManager(); + return SubToolPanel::GetShellManager(); } Size SlideTransitionPanel::GetPreferredSize() diff --git a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx index 478f69091f63..f62cb918806b 100644..100755 --- a/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx +++ b/sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx @@ -36,6 +36,7 @@ class ViewShellBase; namespace sd { namespace toolpanel { class ControlFactory; class TreeNode; +class ToolPanelViewShell; } } namespace sd { namespace toolpanel { namespace controls { @@ -45,12 +46,16 @@ class SlideTransitionPanel { public: SlideTransitionPanel ( - TreeNode* pParent, - ViewShellBase& rBase); + Window& i_rParentWindow, + ToolPanelViewShell& i_rToolPanelShell); virtual ~SlideTransitionPanel (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase); + static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); + // TreeNode overridables + virtual TaskPaneShellManager* GetShellManager(); + + // ILayoutableWindow overridables virtual Size GetPreferredSize (void); virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); @@ -68,6 +73,7 @@ public: private: Size maPreferredSize; ::Window* mpWrappedControl; + ToolPanelViewShell* m_pPanelViewShell; }; } } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx index ce242d557ee7..d6507a25c11f 100644..100755 --- a/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx +++ b/sd/source/ui/toolpanel/controls/TableDesignPanel.cxx @@ -31,6 +31,7 @@ #include "TableDesignPanel.hxx" #include "taskpane/TaskPaneControlFactory.hxx" +#include "taskpane/ToolPanelViewShell.hxx" #include "strings.hrc" #include "sdresid.hxx" @@ -44,10 +45,11 @@ namespace sd namespace toolpanel { namespace controls { -TableDesignPanel::TableDesignPanel(TreeNode* pParent, ViewShellBase& rBase) - : SubToolPanel (pParent) +TableDesignPanel::TableDesignPanel( ::Window& i_rParentWindow, ToolPanelViewShell& i_rPanelViewShell ) + :SubToolPanel( i_rParentWindow ) + ,m_pPanelViewShell( &i_rPanelViewShell ) { - mpWrappedControl = createTableDesignPanel( pParent->GetWindow(), rBase ); + mpWrappedControl = createTableDesignPanel( &i_rParentWindow, i_rPanelViewShell.GetViewShellBase() ); mpWrappedControl->Show(); } @@ -56,10 +58,17 @@ TableDesignPanel::~TableDesignPanel() delete mpWrappedControl; } -std::auto_ptr<ControlFactory> TableDesignPanel::CreateControlFactory (ViewShellBase& rBase) +std::auto_ptr< ControlFactory > TableDesignPanel::CreateControlFactory( ToolPanelViewShell& i_rToolPanelShell ) { - return std::auto_ptr<ControlFactory>( - new ControlFactoryWithArgs1<TableDesignPanel,ViewShellBase>(rBase)); + return std::auto_ptr< ControlFactory >( + new RootControlFactoryWithArg< TableDesignPanel, ToolPanelViewShell >( i_rToolPanelShell ) ); +} + +TaskPaneShellManager* TableDesignPanel::GetShellManager() +{ + if ( m_pPanelViewShell ) + return &m_pPanelViewShell->GetSubShellManager(); + return SubToolPanel::GetShellManager(); } Size TableDesignPanel::GetPreferredSize() diff --git a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx b/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx index aae06e37ad14..a3620df2ef68 100644..100755 --- a/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx +++ b/sd/source/ui/toolpanel/controls/TableDesignPanel.hxx @@ -37,6 +37,7 @@ class ViewShellBase; namespace sd { namespace toolpanel { class TreeNode; class ControlFactory; +class ToolPanelViewShell; } } namespace sd { namespace toolpanel { namespace controls { @@ -46,12 +47,16 @@ class TableDesignPanel { public: TableDesignPanel ( - TreeNode* pParent, - ViewShellBase& rBase); + ::Window& i_rParentWindow, + ToolPanelViewShell& i_rPanelViewShell); virtual ~TableDesignPanel (void); - static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase); + static std::auto_ptr<ControlFactory> CreateControlFactory (ToolPanelViewShell& i_rToolPanelShell); + // TreeNode overridables + virtual TaskPaneShellManager* GetShellManager(); + + // ILayoutableWindow overridables virtual Size GetPreferredSize (void); virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh); virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth); @@ -68,6 +73,7 @@ public: private: Size maPreferredSize; ::Window* mpWrappedControl; + ToolPanelViewShell* m_pPanelViewShell; }; } } } // end of namespace ::sd::toolpanel::controls diff --git a/sd/source/ui/toolpanel/makefile.mk b/sd/source/ui/toolpanel/makefile.mk index 08a966fe4061..4d83b8a85a70 100644..100755 --- a/sd/source/ui/toolpanel/makefile.mk +++ b/sd/source/ui/toolpanel/makefile.mk @@ -50,12 +50,14 @@ SLOFILES = \ $(SLO)$/TitleBar.obj \ $(SLO)$/TitleToolBox.obj \ $(SLO)$/TitledControl.obj \ - $(SLO)$/ToolPanel.obj \ $(SLO)$/TaskPaneControlFactory.obj \ $(SLO)$/TaskPaneFocusManager.obj \ $(SLO)$/TaskPaneShellManager.obj \ $(SLO)$/TaskPaneTreeNode.obj \ - $(SLO)$/TaskPaneViewShell.obj \ + $(SLO)$/ToolPanel.obj \ + $(SLO)$/ToolPanelViewShell.obj \ + $(SLO)$/ToolPanelFactory.obj \ + $(SLO)$/ToolPanelUIElement.obj \ \ $(SLO)$/EmptyWindow.obj \ $(SLO)$/LayoutMenu.obj \ diff --git a/sd/source/ui/tools/ConfigurationAccess.cxx b/sd/source/ui/tools/ConfigurationAccess.cxx index 94ada78461ec..bf4fbc6e6ebe 100644..100755 --- a/sd/source/ui/tools/ConfigurationAccess.cxx +++ b/sd/source/ui/tools/ConfigurationAccess.cxx @@ -33,6 +33,7 @@ #include <com/sun/star/container/XHierarchicalNameAccess.hpp> #include <com/sun/star/util/XChangesBatch.hpp> #include <comphelper/processfactory.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -113,11 +114,9 @@ void ConfigurationAccess::Initialize ( sAccessService, aCreationArguments); } - catch (Exception& rException) + catch (Exception&) { - OSL_TRACE ("caught exception while opening configuration: %s", - ::rtl::OUStringToOString(rException.Message, - RTL_TEXTENCODING_UTF8).getStr()); + DBG_UNHANDLED_EXCEPTION(); } } diff --git a/sd/source/ui/tools/PreviewRenderer.cxx b/sd/source/ui/tools/PreviewRenderer.cxx index b791454bd10a..c416e689efcf 100644..100755 --- a/sd/source/ui/tools/PreviewRenderer.cxx +++ b/sd/source/ui/tools/PreviewRenderer.cxx @@ -42,6 +42,7 @@ #include <editeng/editstat.hxx> #include <tools/link.hxx> #include <vcl/svapp.hxx> +#include <tools/diagnose_ex.h> namespace sd { @@ -131,7 +132,7 @@ Image PreviewRenderer::RenderPage ( } catch (const com::sun::star::uno::Exception&) { - OSL_TRACE("PreviewRenderer::RenderPage: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } @@ -193,7 +194,7 @@ Image PreviewRenderer::RenderSubstitution ( } catch (const com::sun::star::uno::Exception&) { - OSL_TRACE("PreviewRenderer::RenderPage: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } return aPreview; @@ -302,7 +303,7 @@ void PreviewRenderer::PaintPage (const SdPage* pPage) } catch (const ::com::sun::star::uno::Exception&) { - OSL_TRACE("PreviewRenderer::PaintPage: caught exception"); + DBG_UNHANDLED_EXCEPTION(); } // Restore the previous online spelling and redlining states. diff --git a/sd/source/ui/unoidl/DrawController.cxx b/sd/source/ui/unoidl/DrawController.cxx index acd57f18d85c..b0eac4990c50 100644..100755 --- a/sd/source/ui/unoidl/DrawController.cxx +++ b/sd/source/ui/unoidl/DrawController.cxx @@ -29,6 +29,7 @@ #include "precompiled_sd.hxx" #include "DrawController.hxx" +#include "DrawDocShell.hxx" #include "DrawSubController.hxx" #include "sdpage.hxx" @@ -54,6 +55,7 @@ #include <svx/fmshell.hxx> #include <vos/mutex.hxx> #include <vcl/svapp.hxx> +#include <boost/shared_ptr.hpp> using namespace ::std; using ::rtl::OUString; @@ -164,6 +166,16 @@ void SAL_CALL DrawController::dispose (void) { mbDisposing = true; + boost::shared_ptr<ViewShell> pViewShell = mpBase->GetMainViewShell(); + if ( pViewShell ) + { + pViewShell->DeactivateCurrentFunction(); + DrawDocShell* pDocShell = pViewShell->GetDocSh(); + if ( pDocShell != NULL ) + pDocShell->SetDocShellFunction(0); + } + pViewShell.reset(); + // When the controller has not been detached from its view // shell, i.e. mpViewShell is not NULL, then tell PaneManager // and ViewShellManager to clear the shell stack. @@ -699,6 +711,11 @@ void DrawController::FillPropertyTable ( PROPERTY_VIEWOFFSET, ::getCppuType((const ::com::sun::star::awt::Point*)0), beans::PropertyAttribute::BOUND )); + rProperties.push_back( + beans::Property( OUString( RTL_CONSTASCII_USTRINGPARAM("DrawViewMode") ), + PROPERTY_DRAWVIEWMODE, + ::getCppuType((const ::com::sun::star::awt::Point*)0), + beans::PropertyAttribute::BOUND|beans::PropertyAttribute::READONLY|beans::PropertyAttribute::MAYBEVOID )); } @@ -928,3 +945,4 @@ void DrawController::ThrowIfDisposed (void) const } // end of namespace sd + diff --git a/sd/source/ui/unoidl/SdUnoDrawView.cxx b/sd/source/ui/unoidl/SdUnoDrawView.cxx index 5a497231158d..8594d4e0ebf9 100644..100755 --- a/sd/source/ui/unoidl/SdUnoDrawView.cxx +++ b/sd/source/ui/unoidl/SdUnoDrawView.cxx @@ -38,21 +38,27 @@ #include "unomodel.hxx" #include "unopage.hxx" #include "Window.hxx" +#include "pres.hxx" #include <cppuhelper/proptypehlp.hxx> +#include <comphelper/serviceinfohelper.hxx> #include <sfx2/dispatch.hxx> #include <sfx2/viewfrm.hxx> #include <svx/svdpagv.hxx> #include <svx/unoshape.hxx> #include <svx/unoshcol.hxx> #include <svx/zoomitem.hxx> +#include <com/sun/star/drawing/DrawViewMode.hpp> #include <com/sun/star/drawing/XLayerManager.hpp> #include <com/sun/star/view/DocumentZoomType.hpp> #include <vector> +using rtl::OUString; + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::drawing; namespace sd { @@ -416,7 +422,6 @@ void SdUnoDrawView::setFastPropertyValue ( SetViewOffset( aOffset ); } break; - default: throw beans::UnknownPropertyException(); } @@ -460,6 +465,10 @@ Any SAL_CALL SdUnoDrawView::getFastPropertyValue ( aValue <<= GetViewOffset(); break; + case DrawController::PROPERTY_DRAWVIEWMODE: + aValue = getDrawViewMode(); + break; + default: throw beans::UnknownPropertyException(); } @@ -601,5 +610,35 @@ SdXImpressDocument* SdUnoDrawView::GetModel (void) const throw() return NULL; } +Any SdUnoDrawView::getDrawViewMode() const +{ + Any aRet; + switch( mrDrawViewShell.GetPageKind() ) + { + case PK_NOTES: aRet <<= DrawViewMode_NOTES; break; + case PK_HANDOUT: aRet <<= DrawViewMode_HANDOUT; break; + case PK_STANDARD: aRet <<= DrawViewMode_DRAW; break; + } + return aRet; +} + +// XServiceInfo +OUString SAL_CALL SdUnoDrawView::getImplementationName( ) throw (RuntimeException) +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.sd.SdUnoDrawView") ); +} + +sal_Bool SAL_CALL SdUnoDrawView::supportsService( const OUString& ServiceName ) throw (RuntimeException) +{ + return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() ); +} + +Sequence< OUString > SAL_CALL SdUnoDrawView::getSupportedServiceNames( ) throw (RuntimeException) +{ + OUString aSN( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.DrawingDocumentDrawView") ); + uno::Sequence< OUString > aSeq( &aSN, 1 ); + return aSeq; +} } // end of namespace sd + diff --git a/sd/source/ui/unoidl/SdUnoOutlineView.cxx b/sd/source/ui/unoidl/SdUnoOutlineView.cxx index 5804765d633c..ff3e5dd501fb 100644..100755 --- a/sd/source/ui/unoidl/SdUnoOutlineView.cxx +++ b/sd/source/ui/unoidl/SdUnoOutlineView.cxx @@ -28,6 +28,8 @@ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" +#include <comphelper/serviceinfohelper.hxx> + #include "SdUnoOutlineView.hxx" #include "DrawController.hxx" @@ -237,6 +239,8 @@ Any SAL_CALL SdUnoOutlineView::getFastPropertyValue ( aValue <<= pPage->getUnoPage(); } break; + case DrawController::PROPERTY_VIEWOFFSET: + break; default: throw beans::UnknownPropertyException(); @@ -246,6 +250,22 @@ Any SAL_CALL SdUnoOutlineView::getFastPropertyValue ( } +// XServiceInfo +OUString SAL_CALL SdUnoOutlineView::getImplementationName( ) throw (RuntimeException) +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.sd.SdUnoOutlineView") ); +} +sal_Bool SAL_CALL SdUnoOutlineView::supportsService( const OUString& ServiceName ) throw (RuntimeException) +{ + return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() ); +} + +Sequence< OUString > SAL_CALL SdUnoOutlineView::getSupportedServiceNames( ) throw (RuntimeException) +{ + OUString aSN( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.OutlineView") ); + uno::Sequence< OUString > aSeq( &aSN, 1 ); + return aSeq; +} } // end of namespace sd diff --git a/sd/source/ui/unoidl/SdUnoPresView.cxx b/sd/source/ui/unoidl/SdUnoPresView.cxx deleted file mode 100644 index dcd5001ace38..000000000000 --- a/sd/source/ui/unoidl/SdUnoPresView.cxx +++ /dev/null @@ -1,54 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "SdUnoPresView.hxx" - - -namespace sd { - - -SdUnoPresView::SdUnoPresView ( - DrawController& rController, - DrawViewShell& rViewShell, - View& rView) throw() - : SdUnoDrawView (rController, rViewShell, rView) -{ -} - - - - -SdUnoPresView::~SdUnoPresView (void) throw() -{ -} - - - -} // end of namespace sd diff --git a/sd/source/ui/unoidl/SdUnoSlideView.cxx b/sd/source/ui/unoidl/SdUnoSlideView.cxx index 34121dc5ac4b..a6502711ee72 100644..100755 --- a/sd/source/ui/unoidl/SdUnoSlideView.cxx +++ b/sd/source/ui/unoidl/SdUnoSlideView.cxx @@ -27,6 +27,9 @@ #include "precompiled_sd.hxx" +#include <comphelper/serviceinfohelper.hxx> + +#include "DrawController.hxx" #include "SdUnoSlideView.hxx" #include "SlideSorter.hxx" @@ -39,6 +42,8 @@ #include "sdpage.hxx" #include <com/sun/star/beans/XPropertySet.hpp> +using ::rtl::OUString; + using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -202,10 +207,30 @@ Any SAL_CALL SdUnoSlideView::getFastPropertyValue ( { (void)nHandle; - throw beans::UnknownPropertyException(); + if( nHandle != DrawController::PROPERTY_VIEWOFFSET ) + throw beans::UnknownPropertyException(); + + return Any(); +} + + +// XServiceInfo +OUString SAL_CALL SdUnoSlideView::getImplementationName( ) throw (RuntimeException) +{ + return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.sd.SdUnoSlideView") ); } +sal_Bool SAL_CALL SdUnoSlideView::supportsService( const OUString& ServiceName ) throw (RuntimeException) +{ + return comphelper::ServiceInfoHelper::supportsService( ServiceName, getSupportedServiceNames() ); +} +Sequence< OUString > SAL_CALL SdUnoSlideView::getSupportedServiceNames( ) throw (RuntimeException) +{ + OUString aSN( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.SlidesView") ); + uno::Sequence< OUString > aSeq( &aSN, 1 ); + return aSeq; +} /* diff --git a/sd/source/ui/unoidl/facreg.cxx b/sd/source/ui/unoidl/facreg.cxx index b8dcba6beecd..1ac245ad00d4 100644..100755 --- a/sd/source/ui/unoidl/facreg.cxx +++ b/sd/source/ui/unoidl/facreg.cxx @@ -72,6 +72,14 @@ namespace sd extern uno::Reference< uno::XInterface > SAL_CALL RandomNode_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory ); extern OUString RandomNode__getImplementationName() throw( uno::RuntimeException ); extern uno::Sequence< OUString > SAL_CALL RandomNode_getSupportedServiceNames() throw( uno::RuntimeException ); + +extern uno::Reference< uno::XInterface > SAL_CALL SlideLayoutController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory ); +extern OUString SlideLayoutController_getImplementationName() throw( uno::RuntimeException ); +extern uno::Sequence< OUString > SlideLayoutController_getSupportedServiceNames() throw( uno::RuntimeException ); + +extern uno::Reference< uno::XInterface > SAL_CALL InsertSlideController_createInstance( const uno::Reference< lang::XMultiServiceFactory > & _rxFactory ); +extern OUString InsertSlideController_getImplementationName() throw( uno::RuntimeException ); +extern uno::Sequence< OUString > InsertSlideController_getSupportedServiceNames() throw( uno::RuntimeException ); } namespace sd { namespace framework { @@ -142,6 +150,17 @@ extern uno::Sequence<OUString> SAL_CALL PresentationFactoryProvider_getSupported } } +namespace sd { namespace toolpanel { + +extern uno::Reference<uno::XInterface> SAL_CALL ToolPanelFactory_createInstance( + const uno::Reference<uno::XComponentContext>& rxContext) + throw(uno::Exception); +extern OUString ToolPanelFactory_getImplementationName(void) throw (uno::RuntimeException); +extern uno::Sequence<OUString> SAL_CALL ToolPanelFactory_getSupportedServiceNames (void) + throw (uno::RuntimeException); + +} } + namespace sd { namespace presenter { extern uno::Reference<uno::XInterface> SAL_CALL SlideRenderer_createInstance( const uno::Reference<uno::XComponentContext>& rxContext) @@ -199,6 +218,7 @@ using namespace ::sd; using namespace ::sd::framework; using namespace ::sd::presenter; using namespace ::sd::slidesorter; +using namespace ::sd::toolpanel; @@ -222,6 +242,7 @@ enum FactoryId BasicToolBarFactoryFactoryId, BasicViewFactoryFactoryId, TaskPanelFactoryFactoryId, + ToolPanelFactoryFactoryId, ResourceIdFactoryId, PresentationFactoryProviderFactoryId, SlideRendererFactoryId, @@ -229,7 +250,9 @@ enum FactoryId PresenterTextViewServiceFactoryId, PresenterHelperServiceFactoryId, PresenterPreviewCacheFactoryId, - SlideSorterServiceFactoryId + SlideSorterServiceFactoryId, + SlideLayoutControllerFactoryId, + InsertSlideControllerFactoryId, }; typedef ::std::hash_map<OUString, FactoryId, comphelper::UStringHash, comphelper::UStringEqual> FactoryMap; @@ -253,6 +276,7 @@ static ::boost::shared_ptr<FactoryMap> spFactoryMap; (*spFactoryMap)[BasicToolBarFactory_getImplementationName()] = BasicToolBarFactoryFactoryId; (*spFactoryMap)[BasicViewFactory_getImplementationName()] = BasicViewFactoryFactoryId; (*spFactoryMap)[TaskPanelFactory_getImplementationName()] = TaskPanelFactoryFactoryId; + (*spFactoryMap)[ToolPanelFactory_getImplementationName()] = ToolPanelFactoryFactoryId; (*spFactoryMap)[ResourceId_getImplementationName()] = ResourceIdFactoryId; (*spFactoryMap)[PresentationFactoryProvider_getImplementationName()] = PresentationFactoryProviderFactoryId; (*spFactoryMap)[SlideRenderer_getImplementationName()] = SlideRendererFactoryId; @@ -261,6 +285,8 @@ static ::boost::shared_ptr<FactoryMap> spFactoryMap; (*spFactoryMap)[PresenterHelperService_getImplementationName()] = PresenterHelperServiceFactoryId; (*spFactoryMap)[PresenterPreviewCache_getImplementationName()] = PresenterPreviewCacheFactoryId; (*spFactoryMap)[SlideSorterService_getImplementationName()] = SlideSorterServiceFactoryId; + (*spFactoryMap)[SlideLayoutController_getImplementationName()] = SlideLayoutControllerFactoryId; + (*spFactoryMap)[InsertSlideController_getImplementationName()] = InsertSlideControllerFactoryId; } return spFactoryMap; }; @@ -335,6 +361,10 @@ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( sd::framework::TaskPanelFactory_getSupportedServiceNames()); writeInfo( pKey, + sd::toolpanel::ToolPanelFactory_getImplementationName(), + sd::toolpanel::ToolPanelFactory_getSupportedServiceNames()); + writeInfo( + pKey, sd::framework::ResourceId_getImplementationName(), sd::framework::ResourceId_getSupportedServiceNames()); writeInfo( @@ -365,6 +395,14 @@ SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( pKey, sd::slidesorter::SlideSorterService_getImplementationName(), sd::slidesorter::SlideSorterService_getSupportedServiceNames()); + writeInfo( + pKey, + sd::SlideLayoutController_getImplementationName(), + sd::SlideLayoutController_getSupportedServiceNames()); + writeInfo( + pKey, + sd::InsertSlideController_getImplementationName(), + sd::InsertSlideController_getSupportedServiceNames()); } catch (registry::InvalidRegistryException &) { @@ -484,6 +522,13 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( sd::framework::TaskPanelFactory_getSupportedServiceNames()); break; + case ToolPanelFactoryFactoryId: + xComponentFactory = ::cppu::createSingleComponentFactory( + sd::toolpanel::ToolPanelFactory_createInstance, + sd::toolpanel::ToolPanelFactory_getImplementationName(), + sd::toolpanel::ToolPanelFactory_getSupportedServiceNames()); + break; + case ResourceIdFactoryId: xComponentFactory = ::cppu::createSingleComponentFactory( sd::framework::ResourceId_createInstance, @@ -540,6 +585,20 @@ SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( sd::slidesorter::SlideSorterService_getSupportedServiceNames()); break; + case SlideLayoutControllerFactoryId: + xFactory = ::cppu::createSingleFactory( + xMSF, + sd::SlideLayoutController_getImplementationName(), + sd::SlideLayoutController_createInstance, + sd::SlideLayoutController_getSupportedServiceNames()); + break; + + case InsertSlideControllerFactoryId: + xFactory = ::cppu::createSingleFactory( + xMSF, + sd::InsertSlideController_getImplementationName(), + sd::InsertSlideController_createInstance, + sd::InsertSlideController_getSupportedServiceNames()); default: break; } diff --git a/sd/source/ui/unoidl/makefile.mk b/sd/source/ui/unoidl/makefile.mk index b3e71df86740..66d80e1a529a 100644..100755 --- a/sd/source/ui/unoidl/makefile.mk +++ b/sd/source/ui/unoidl/makefile.mk @@ -50,7 +50,6 @@ NOOPTFILES= $(SLO)$/unowcntr.obj SLO1FILES = \ $(SLO)$/DrawController.obj \ - $(SLO)$/SdUnoPresView.obj\ $(SLO)$/SdUnoSlideView.obj\ $(SLO)$/SdUnoOutlineView.obj\ $(SLO)$/SdUnoDrawView.obj \ diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index 5b0594ba58b0..e11f76a64baa 100644..100755 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -1071,10 +1071,14 @@ uno::Reference< uno::XInterface > SAL_CALL SdXImpressDocument::createInstance( c { nType = OBJ_OLE2; } - else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + else if( aType.EqualsAscii( "CalcShape", 26, 9 ) ) { nType = OBJ_OLE2; } + else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + { + nType = OBJ_TABLE; + } else if( aType.EqualsAscii( "OrgChartShape", 26, 13 ) ) { nType = OBJ_OLE2; @@ -1103,9 +1107,9 @@ uno::Reference< uno::XInterface > SAL_CALL SdXImpressDocument::createInstance( c { nType = OBJ_TEXT; } - else if( aType.EqualsAscii( "TableShape", 26, 10 ) ) + else if( aType.EqualsAscii( "MediaShape", 26, 10 ) ) { - nType = OBJ_TABLE; + nType = OBJ_MEDIA; } else { @@ -1156,7 +1160,7 @@ uno::Sequence< OUString > SAL_CALL SdXImpressDocument::getAvailableServiceNames( const uno::Sequence< OUString > aSNS_ORG( SvxFmMSFactory::getAvailableServiceNames() ); - uno::Sequence< OUString > aSNS( mbImpressDoc ? (34) : (19) ); + uno::Sequence< OUString > aSNS( mbImpressDoc ? (36) : (19) ); sal_uInt16 i(0); @@ -1199,6 +1203,8 @@ uno::Sequence< OUString > SAL_CALL SdXImpressDocument::getAvailableServiceNames( aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.HeaderShape")); aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.SlideNumberShape")); aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.DateTimeShape")); + aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.CalcShape")); + aSNS[i++] = OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.MediaShape")); } else { diff --git a/sd/source/ui/unoidl/unopage.cxx b/sd/source/ui/unoidl/unopage.cxx index 69d961d7237a..0a7469d22373 100644..100755 --- a/sd/source/ui/unoidl/unopage.cxx +++ b/sd/source/ui/unoidl/unopage.cxx @@ -403,7 +403,7 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap String aType( xShape->getShapeType() ); const String aPrefix( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.") ); - if(aType.CompareTo( aPrefix, aPrefix.Len() ) != 0) + if( aType.CompareTo( aPrefix, aPrefix.Len() ) != 0 ) { SdrObject* pObj = SvxFmDrawPage::_CreateSdrObject( xShape ); if( pObj && ( (pObj->GetObjInventor() != SdrInventor) || (pObj->GetObjIdentifier() != OBJ_PAGE) ) ) @@ -439,6 +439,10 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap { eObjKind = PRESOBJ_CHART; } + else if( aType.EqualsAscii( "CalcShape" ) ) + { + eObjKind = PRESOBJ_CALC; + } else if( aType.EqualsAscii( "TableShape" ) ) { eObjKind = PRESOBJ_TABLE; @@ -486,6 +490,10 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap { eObjKind = PRESOBJ_DATETIME; } + else if( aType.EqualsAscii( "MediaShape" ) ) + { + eObjKind = PRESOBJ_MEDIA; + } Rectangle aRect( eObjKind == PRESOBJ_TITLE ? GetPage()->GetTitleRect() : GetPage()->GetLayoutRect() ); @@ -495,7 +503,22 @@ SdrObject * SdGenericDrawPage::_CreateSdrObject( const Reference< drawing::XShap const awt::Size aSize( aRect.GetWidth(), aRect.GetHeight() ); xShape->setSize( aSize ); - SdrObject *pPresObj = GetPage()->CreatePresObj( eObjKind, FALSE, aRect, sal_True ); + SdrObject *pPresObj = 0; + if( (eObjKind == PRESOBJ_TABLE) || (eObjKind == PRESOBJ_MEDIA) ) + { + pPresObj = SvxFmDrawPage::_CreateSdrObject( xShape ); + if( pPresObj ) + { + SdDrawDocument* pDoc = (SdDrawDocument*)GetPage()->GetModel(); + if( pDoc ) + pPresObj->NbcSetStyleSheet( pDoc->GetDefaultStyleSheet(), sal_True ); + GetPage()->InsertPresObj( pPresObj, eObjKind ); + } + } + else + { + pPresObj = GetPage()->CreatePresObj( eObjKind, FALSE, aRect, sal_True ); + } if( pPresObj ) pPresObj->SetUserCall( GetPage() ); @@ -1380,9 +1403,15 @@ Reference< drawing::XShape > SdGenericDrawPage::_CreateShape( SdrObject *pObj ) case PRESOBJ_ORGCHART: aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("OrgChartShape") ); break; + case PRESOBJ_CALC: + aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("CalcShape") ); + break; case PRESOBJ_TABLE: aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("TableShape") ); break; + case PRESOBJ_MEDIA: + aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("MediaShape") ); + break; case PRESOBJ_PAGE: aShapeType += String( RTL_CONSTASCII_USTRINGPARAM("PageShape") ); break; diff --git a/sd/source/ui/view/GraphicViewShellBase.cxx b/sd/source/ui/view/GraphicViewShellBase.cxx index 38409bb2376e..759103760bfe 100644..100755 --- a/sd/source/ui/view/GraphicViewShellBase.cxx +++ b/sd/source/ui/view/GraphicViewShellBase.cxx @@ -100,18 +100,18 @@ void GraphicViewShellBase::Execute (SfxRequest& rRequest) switch (nSlotId) { - case SID_RIGHT_PANE: case SID_NOTES_WINDOW: case SID_SLIDE_SORTER_MULTI_PANE_GUI: case SID_DIAMODE: case SID_OUTLINEMODE: case SID_NOTESMODE: case SID_HANDOUTMODE: - case SID_TASK_PANE: + case SID_SHOW_TOOL_PANEL: // Prevent some Impress-only slots from being executed. rRequest.Cancel(); break; + case SID_TASKPANE: case SID_SWITCH_SHELL: case SID_LEFT_PANE_DRAW: case SID_LEFT_PANE_IMPRESS: diff --git a/sd/source/ui/view/Outliner.cxx b/sd/source/ui/view/Outliner.cxx index 5314f6dbe768..fd07d966ad47 100644..100755 --- a/sd/source/ui/view/Outliner.cxx +++ b/sd/source/ui/view/Outliner.cxx @@ -57,6 +57,8 @@ #include <vcl/metric.hxx> #include <sfx2/viewfrm.hxx> #include <svtools/langtab.hxx> +#include <tools/diagnose_ex.h> + #include "strings.hrc" #include "sdstring.hrc" #include "eetext.hxx" @@ -566,7 +568,8 @@ bool Outliner::StartSearchAndReplace (const SvxSearchItem* pSearchItem) void Outliner::Initialize (bool bDirectionIsForward) { - bool bOldDirectionIsForward = mbDirectionIsForward; + const bool bIsAtEnd (maObjectIterator == ::sd::outliner::OutlinerContainer(this).end()); + const bool bOldDirectionIsForward = mbDirectionIsForward; mbDirectionIsForward = bDirectionIsForward; if (maObjectIterator == ::sd::outliner::Iterator()) @@ -601,10 +604,19 @@ void Outliner::Initialize (bool bDirectionIsForward) { // Requested iteration direction has changed. Turn arround the iterator. maObjectIterator.Reverse(); - // The iterator has pointed to the object one ahead/before the current - // one. Now move it to the one before/ahead the current one. - ++maObjectIterator; - ++maObjectIterator; + if (bIsAtEnd) + { + // The iterator has pointed to end(), which after the search + // direction is reversed, becomes begin(). + maObjectIterator = ::sd::outliner::OutlinerContainer(this).begin(); + } + else + { + // The iterator has pointed to the object one ahead/before the current + // one. Now move it to the one before/ahead the current one. + ++maObjectIterator; + ++maObjectIterator; + } mbMatchMayExist = true; } @@ -974,7 +986,7 @@ void Outliner::ProvideNextTextObject (void) } catch (::com::sun::star::uno::Exception e) { - OSL_TRACE ("Outliner %p: caught exception while ending text edit mode", this); + DBG_UNHANDLED_EXCEPTION(); } SetUpdateMode(FALSE); OutlinerView* pOutlinerView = mpImpl->GetOutlinerView(); diff --git a/sd/source/ui/view/ToolBarManager.cxx b/sd/source/ui/view/ToolBarManager.cxx index 4919a9fe2bbb..4919a9fe2bbb 100644..100755 --- a/sd/source/ui/view/ToolBarManager.cxx +++ b/sd/source/ui/view/ToolBarManager.cxx diff --git a/sd/source/ui/view/ViewShellBase.cxx b/sd/source/ui/view/ViewShellBase.cxx index 6640d2455c20..14da3ea1a526 100644 --- a/sd/source/ui/view/ViewShellBase.cxx +++ b/sd/source/ui/view/ViewShellBase.cxx @@ -64,9 +64,9 @@ #include "OutlineViewShell.hxx" #include "SlideSorterViewShell.hxx" #include "PresentationViewShell.hxx" -#include "TaskPaneViewShell.hxx" #include "FormShellManager.hxx" #include "ToolBarManager.hxx" +#include "taskpane/PanelId.hxx" #include "Window.hxx" #include "framework/ConfigurationController.hxx" #include "DocumentRenderer.hxx" @@ -91,6 +91,7 @@ #include <svl/whiter.hxx> #include <comphelper/processfactory.hxx> #include <vcl/msgbox.hxx> +#include <tools/diagnose_ex.h> #include "fubullet.hxx" @@ -808,7 +809,7 @@ void ViewShellBase::Execute (SfxRequest& rRequest) framework::FrameworkHelper::msSlideSorterURL); break; - case SID_RIGHT_PANE: + case SID_TASKPANE: mpImpl->SetPaneVisibility( rRequest, framework::FrameworkHelper::msRightPaneURL, @@ -829,7 +830,7 @@ void ViewShellBase::Execute (SfxRequest& rRequest) // The full screen mode is not supported. Ignore the request. break; - case SID_TASK_PANE: + case SID_SHOW_TOOL_PANEL: mpImpl->ProcessTaskPaneSlot(rRequest); break; @@ -1257,7 +1258,7 @@ CustomHandleManager& ViewShellBase::getCustomHandleManager() const return *mpImpl->mpCustomHandleManager.get(); } -::rtl::OUString ViewShellBase::RetrieveLabelFromCommand( const ::rtl::OUString& aCmdURL ) const +::rtl::OUString ImplRetrieveLabelFromCommand( const Reference< XFrame >& xFrame, const ::rtl::OUString& aCmdURL ) { ::rtl::OUString aLabel; @@ -1266,7 +1267,7 @@ CustomHandleManager& ViewShellBase::getCustomHandleManager() const Reference< XMultiServiceFactory > xServiceManager( ::comphelper::getProcessServiceFactory(), UNO_QUERY_THROW ); Reference< XModuleManager > xModuleManager( xServiceManager->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.frame.ModuleManager") ) ), UNO_QUERY_THROW ); - Reference< XInterface > xIfac( GetMainViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(), UNO_QUERY_THROW ); + Reference< XInterface > xIfac( xFrame, UNO_QUERY_THROW ); ::rtl::OUString aModuleIdentifier( xModuleManager->identify( xIfac ) ); @@ -1298,6 +1299,12 @@ CustomHandleManager& ViewShellBase::getCustomHandleManager() const return aLabel; } +::rtl::OUString ViewShellBase::RetrieveLabelFromCommand( const ::rtl::OUString& aCmdURL ) const +{ + Reference< XFrame > xFrame( GetMainViewShell()->GetViewFrame()->GetFrame().GetFrameInterface(), UNO_QUERY ); + return ImplRetrieveLabelFromCommand( xFrame, aCmdURL ); +} + //===== ViewShellBase::Implementation ========================================= @@ -1487,9 +1494,9 @@ void ViewShellBase::Implementation::SetPaneVisibility ( xConfigurationController->requestResourceDeactivation( xPaneId); } - catch (RuntimeException&) + catch (const Exception &) { - DBG_ASSERT(false, "ViewShellBase::Implementation::SetPaneVisibility(): caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } @@ -1534,7 +1541,7 @@ void ViewShellBase::Implementation::GetSlotState (SfxItemSet& rSet) xContext, FrameworkHelper::msLeftDrawPaneURL); break; - case SID_RIGHT_PANE: + case SID_TASKPANE: xResourceId = ResourceId::create( xContext, FrameworkHelper::msRightPaneURL); break; @@ -1625,7 +1632,7 @@ void ViewShellBase::Implementation::GetSlotState (SfxItemSet& rSet) } catch (RuntimeException&) { - DBG_ASSERT(false, "ViewShellBase::Implementation::GetSlotState(): caught exception"); + DBG_UNHANDLED_EXCEPTION(); } } @@ -1638,8 +1645,8 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) // Set the visibility state of the toolpanel and one of its top // level panels. BOOL bShowToolPanel = TRUE; - toolpanel::TaskPaneViewShell::PanelId nPanelId ( - toolpanel::TaskPaneViewShell::PID_UNKNOWN); + toolpanel::PanelId nPanelId ( + toolpanel::PID_UNKNOWN); bool bPanelIdGiven = false; // Extract the given arguments. @@ -1660,7 +1667,7 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) if (pPanelId != NULL) { nPanelId = static_cast< - toolpanel::TaskPaneViewShell::PanelId>( + toolpanel::PanelId>( pPanelId->GetValue()); bPanelIdGiven = true; } @@ -1670,7 +1677,7 @@ void ViewShellBase::Implementation::ProcessTaskPaneSlot (SfxRequest& rRequest) // Ignore the request for some combinations of panels and view // shell types. if (bPanelIdGiven - && ! (nPanelId==toolpanel::TaskPaneViewShell::PID_LAYOUT + && ! (nPanelId==toolpanel::PID_LAYOUT && mrBase.GetMainViewShell()!=NULL && mrBase.GetMainViewShell()->GetShellType()==ViewShell::ST_OUTLINE)) { diff --git a/sd/source/ui/view/ViewShellImplementation.cxx b/sd/source/ui/view/ViewShellImplementation.cxx index 8193ae3004d2..926d579e93e9 100644..100755 --- a/sd/source/ui/view/ViewShellImplementation.cxx +++ b/sd/source/ui/view/ViewShellImplementation.cxx @@ -47,11 +47,11 @@ #include "DrawController.hxx" #include "FactoryIds.hxx" #include "slideshow.hxx" -#include "TaskPaneViewShell.hxx" #include "ViewShellBase.hxx" #include "FrameView.hxx" #include "DrawViewShell.hxx" #include "ViewShellHint.hxx" +#include "taskpane/PanelId.hxx" #include "framework/FrameworkHelper.hxx" #include <sfx2/bindings.hxx> @@ -195,12 +195,12 @@ void ViewShell::Implementation::ProcessModifyPageSlot ( // Make the layout menu visible in the tool pane. SfxBoolItem aMakeToolPaneVisible (ID_VAL_ISVISIBLE, TRUE); SfxUInt32Item aPanelId (ID_VAL_PANEL_INDEX, - ::sd::toolpanel::TaskPaneViewShell::PID_LAYOUT); + ::sd::toolpanel::PID_LAYOUT); SfxViewFrame* pFrame = mrViewShell.GetViewFrame(); if (pFrame!=NULL && pFrame->GetDispatcher()!=NULL) { pFrame->GetDispatcher()->Execute ( - SID_TASK_PANE, + SID_SHOW_TOOL_PANEL, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aMakeToolPaneVisible, &aPanelId, @@ -319,30 +319,53 @@ void ViewShell::Implementation::ProcessModifyPageSlot ( rRequest.Done (); } +void ViewShell::Implementation::AssignLayout ( SfxRequest& rRequest, PageKind ePageKind ) +{ + const SfxUInt32Item* pWhatPage = static_cast< const SfxUInt32Item* > ( rRequest.GetArg( ID_VAL_WHATPAGE, FALSE, TYPE(SfxUInt32Item) ) ); + const SfxUInt32Item* pWhatLayout = static_cast< const SfxUInt32Item* > ( rRequest.GetArg( ID_VAL_WHATLAYOUT, FALSE, TYPE(SfxUInt32Item) ) ); + + SdDrawDocument* pDocument = mrViewShell.GetDoc(); + if( !pDocument ) + return; + + SdPage* pPage = 0; + if( pWhatPage ) + { + pPage = pDocument->GetSdPage(static_cast<USHORT>(pWhatPage->GetValue()), ePageKind); + } + if( pPage == 0 ) + pPage = mrViewShell.getCurrentPage(); + if( pPage ) + { + AutoLayout eLayout = pPage->GetAutoLayout(); -void ViewShell::Implementation::AssignLayout ( - SdPage* pPage, - AutoLayout aLayout) -{ - // Transform the given request into the four argument form that is - // understood by ProcessModifyPageSlot(). - SdrLayerAdmin& rLayerAdmin (mrViewShell.GetViewShellBase().GetDocument()->GetLayerAdmin()); - BYTE aBackground (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), FALSE)); - BYTE aBackgroundObject (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), FALSE)); - SetOfByte aVisibleLayers (pPage->TRG_GetMasterPageVisibleLayers()); - SfxRequest aRequest (mrViewShell.GetViewShellBase().GetViewFrame(), SID_MODIFYPAGE); - aRequest.AppendItem(SfxStringItem (ID_VAL_PAGENAME, pPage->GetName())); - aRequest.AppendItem(SfxUInt32Item (ID_VAL_WHATLAYOUT, aLayout)); - aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEBACK, aVisibleLayers.IsSet(aBackground))); - aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEOBJ, aVisibleLayers.IsSet(aBackgroundObject))); - - // Forward the call with the new arguments. - ProcessModifyPageSlot ( - aRequest, - pPage, - pPage->GetPageKind()); + if( pWhatLayout ) + eLayout = static_cast< AutoLayout >( pWhatLayout->GetValue() ); + + // Transform the given request into the four argument form that is + // understood by ProcessModifyPageSlot(). + SdrLayerAdmin& rLayerAdmin (mrViewShell.GetViewShellBase().GetDocument()->GetLayerAdmin()); + BYTE aBackground (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRND)), FALSE)); + BYTE aBackgroundObject (rLayerAdmin.GetLayerID(String(SdResId(STR_LAYER_BCKGRNDOBJ)), FALSE)); + + SetOfByte aVisibleLayers; + + if( pPage->GetPageKind() == PK_HANDOUT ) + aVisibleLayers.SetAll(); + else + aVisibleLayers = pPage->TRG_GetMasterPageVisibleLayers(); + + SfxRequest aRequest (mrViewShell.GetViewShellBase().GetViewFrame(), SID_MODIFYPAGE); + aRequest.AppendItem(SfxStringItem (ID_VAL_PAGENAME, pPage->GetName())); + aRequest.AppendItem(SfxUInt32Item (ID_VAL_WHATLAYOUT, eLayout)); + aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEBACK, aVisibleLayers.IsSet(aBackground))); + aRequest.AppendItem(SfxBoolItem(ID_VAL_ISPAGEOBJ, aVisibleLayers.IsSet(aBackgroundObject))); + + // Forward the call with the new arguments. + ProcessModifyPageSlot( aRequest, pPage, pPage->GetPageKind()); + } } diff --git a/sd/source/ui/view/ViewShellManager.cxx b/sd/source/ui/view/ViewShellManager.cxx index 3ea4ef7a96f3..059e0fde06fb 100755 --- a/sd/source/ui/view/ViewShellManager.cxx +++ b/sd/source/ui/view/ViewShellManager.cxx @@ -42,7 +42,7 @@ #include <hash_map> #undef VERBOSE -#define VERBOSE 2 +//#define VERBOSE 2 namespace sd { diff --git a/sd/source/ui/view/ViewTabBar.cxx b/sd/source/ui/view/ViewTabBar.cxx index 280252a61621..a12412bf7f7d 100644..100755 --- a/sd/source/ui/view/ViewTabBar.cxx +++ b/sd/source/ui/view/ViewTabBar.cxx @@ -54,6 +54,7 @@ #include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/lang/DisposedException.hpp> #include <comphelper/processfactory.hxx> +#include <tools/diagnose_ex.h> using namespace ::com::sun::star; using namespace ::com::sun::star::uno; @@ -472,7 +473,7 @@ bool ViewTabBar::ActivatePage (void) } catch (RuntimeException&) { - DBG_ASSERT(false,"ViewTabBar::ActivatePage(): caught exception"); + DBG_UNHANDLED_EXCEPTION(); } return false; diff --git a/sd/source/ui/view/drawview.cxx b/sd/source/ui/view/drawview.cxx index 81e69f36300c..b32cd1fe023a 100644..100755 --- a/sd/source/ui/view/drawview.cxx +++ b/sd/source/ui/view/drawview.cxx @@ -1,4 +1,4 @@ -/************************************************************************* + /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -578,6 +578,8 @@ void DrawView::HideSdrPage() void DrawView::DeleteMarked() { + OSL_TRACE( "DrawView::DeleteMarked() - enter" ); + sd::UndoManager* pUndoManager = mpDoc->GetUndoManager(); DBG_ASSERT( pUndoManager, "sd::DrawView::DeleteMarked(), ui action without undo manager!?" ); @@ -590,33 +592,60 @@ void DrawView::DeleteMarked() } SdPage* pPage = 0; + bool bResetLayout = false; - const SdrMarkList& rList = GetMarkedObjectList(); - ULONG nMarkCount = rList.GetMarkCount(); - for (ULONG nMark = 0; nMark < nMarkCount; nMark++) + const ULONG nMarkCount = GetMarkedObjectList().GetMarkCount(); + if( nMarkCount ) { - SdrObject* pObj = rList.GetMark(nMark)->GetMarkedSdrObj(); - if( pObj && !pObj->IsEmptyPresObj() && pObj->GetUserCall() ) + SdrMarkList aList( GetMarkedObjectList() ); + for (ULONG nMark = 0; nMark < nMarkCount; nMark++) { - pPage = dynamic_cast< SdPage* >( pObj->GetPage() ); - PresObjKind ePresObjKind; - if( pPage && ((ePresObjKind = pPage->GetPresObjKind(pObj)) != PRESOBJ_NONE)) + SdrObject* pObj = aList.GetMark(nMark)->GetMarkedSdrObj(); + if( pObj && !pObj->IsEmptyPresObj() && pObj->GetUserCall() ) { - SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj ); - bool bVertical = pTextObj && pTextObj->IsVerticalWriting(); - Rectangle aRect( pObj->GetLogicRect() ); - pPage->InsertAutoLayoutShape( 0, ePresObjKind, bVertical, aRect, true ); + pPage = static_cast< SdPage* >( pObj->GetPage() ); + PresObjKind ePresObjKind; + if( pPage && ((ePresObjKind = pPage->GetPresObjKind(pObj)) != PRESOBJ_NONE)) + { + switch( ePresObjKind ) + { + case PRESOBJ_GRAPHIC: + case PRESOBJ_OBJECT: + case PRESOBJ_CHART: + case PRESOBJ_ORGCHART: + case PRESOBJ_TABLE: + case PRESOBJ_CALC: + case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: + ePresObjKind = PRESOBJ_OUTLINE; + break; + default: + break; + } + SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj ); + bool bVertical = pTextObj && pTextObj->IsVerticalWriting(); + Rectangle aRect( pObj->GetLogicRect() ); + SdrObject* pNewObj = pPage->InsertAutoLayoutShape( 0, ePresObjKind, bVertical, aRect, true ); + + pPage->SetObjectOrdNum( pNewObj->GetOrdNum(), pObj->GetOrdNum() ); + + bResetLayout = true; + + OSL_TRACE( "DrawView::InsertAutoLayoutShape() - InsertAutoLayoutShape" ); + } } } } ::sd::View::DeleteMarked(); - if( pPage ) + if( pPage && bResetLayout ) pPage->SetAutoLayout( pPage->GetAutoLayout() ); if( pUndoManager ) pUndoManager->LeaveListAction(); + + OSL_TRACE( "DrawView::InsertAutoLayoutShape() - leave" ); } } // end of namespace sd diff --git a/sd/source/ui/view/drtxtob.cxx b/sd/source/ui/view/drtxtob.cxx index bcff1c573b14..8b88be3682e3 100644..100755 --- a/sd/source/ui/view/drtxtob.cxx +++ b/sd/source/ui/view/drtxtob.cxx @@ -32,6 +32,14 @@ #include <svx/svxids.hrc> +#include <i18npool/mslangid.hxx> +#include <editeng/ulspitem.hxx> +#include <editeng/lspcitem.hxx> +#include <editeng/adjitem.hxx> +#include <editeng/editview.hxx> +#include <editeng/editeng.hxx> +#include <editeng/outliner.hxx> +#include <editeng/unolingu.hxx> #include <editeng/ulspitem.hxx> #include <editeng/lspcitem.hxx> #include <editeng/adjitem.hxx> @@ -39,6 +47,7 @@ #include <sfx2/app.hxx> #include <svl/whiter.hxx> #include <svl/itempool.hxx> +#include <svl/stritem.hxx> #include <svl/style.hxx> #include <svl/languageoptions.hxx> #include <sfx2/tplpitem.hxx> @@ -71,6 +80,8 @@ using namespace sd; +using namespace ::com::sun::star; + #define TextObjectBar #include "sdslots.hxx" @@ -371,6 +382,26 @@ void TextObjectBar::GetAttrState( SfxItemSet& rSet ) } break; + case SID_THES: + { + EditView & rEditView = mpView->GetTextEditOutlinerView()->GetEditView();; + String aStatusVal; + LanguageType nLang = LANGUAGE_NONE; + bool bIsLookUpWord = GetStatusValueForThesaurusFromContext( aStatusVal, nLang, rEditView ); + rSet.Put( SfxStringItem( SID_THES, aStatusVal ) ); + + // disable "Thesaurus" context menu entry if there is nothing to look up + lang::Locale aLocale( SvxCreateLocale( nLang ) ); + uno::Reference< linguistic2::XThesaurus > xThes( LinguMgr::GetThesaurus() ); + if (!bIsLookUpWord || + !xThes.is() || nLang == LANGUAGE_NONE || !xThes->hasLocale( aLocale )) + rSet.DisableItem( SID_THES ); + + //! avoid puting the same item as SfxBoolItem at the end of this function + nSlotId = 0; + } + break; + default: break; } diff --git a/sd/source/ui/view/drtxtob1.cxx b/sd/source/ui/view/drtxtob1.cxx index 4ca26501fedb..4a6d83e376e7 100644..100755 --- a/sd/source/ui/view/drtxtob1.cxx +++ b/sd/source/ui/view/drtxtob1.cxx @@ -30,8 +30,12 @@ #include "TextObjectBar.hxx" + #include <svx/svxids.hrc> +#include <editeng/editview.hxx> +#include <editeng/editeng.hxx> +#include <editeng/unolingu.hxx> #include <editeng/outliner.hxx> #include <editeng/ulspitem.hxx> #include <editeng/lspcitem.hxx> @@ -331,6 +335,16 @@ void TextObjectBar::Execute( SfxRequest &rReq ) } break; + case SID_THES: + { + String aReplaceText; + SFX_REQUEST_ARG( rReq, pItem2, SfxStringItem, SID_THES, sal_False ); + if (pItem2) + aReplaceText = pItem2->GetValue(); + if (aReplaceText.Len() > 0) + ReplaceTextWithSynonym( pOLV->GetEditView(), aReplaceText ); + } + break; default: { diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx index 55ba07c3fa23..55479228f918 100644..100755 --- a/sd/source/ui/view/drviews1.cxx +++ b/sd/source/ui/view/drviews1.cxx @@ -68,6 +68,8 @@ #include <svx/dialogs.hrc> +#include "view/viewoverlaymanager.hxx" + #include "glob.hrc" #include "app.hrc" #include "res_bmp.hrc" @@ -314,6 +316,7 @@ void DrawViewShell::SetZoom( long nZoom ) ViewShell::SetZoom( nZoom ); GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); + mpViewOverlayManager->onZoomChanged(); } /************************************************************************* @@ -327,6 +330,7 @@ void DrawViewShell::SetZoomRect( const Rectangle& rZoomRect ) ViewShell::SetZoomRect( rZoomRect ); GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOM ); GetViewFrame()->GetBindings().Invalidate( SID_ATTR_ZOOMSLIDER ); + mpViewOverlayManager->onZoomChanged(); } /************************************************************************* @@ -1240,6 +1244,7 @@ BOOL DrawViewShell::SwitchPage(USHORT nSelectedPage) rBindings.Invalidate(SID_STATUS_PAGE, TRUE, FALSE); rBindings.Invalidate(SID_DELETE_MASTER_PAGE, TRUE, FALSE); rBindings.Invalidate(SID_DELETE_PAGE, TRUE, FALSE); + rBindings.Invalidate(SID_ASSIGN_LAYOUT,TRUE,FALSE); UpdatePreview( mpActualPage ); mpDrawView->AdjustMarkHdl(); diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx index aa1a0f53c15a..2e33ab909f00 100644..100755 --- a/sd/source/ui/view/drviews2.cxx +++ b/sd/source/ui/view/drviews2.cxx @@ -425,18 +425,12 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq) case SID_ASSIGN_LAYOUT: { - if (mePageKind==PK_STANDARD - || mePageKind==PK_NOTES - || (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE)) + if (mePageKind==PK_STANDARD || mePageKind==PK_NOTES || (mePageKind==PK_HANDOUT && meEditMode==EM_MASTERPAGE)) { if ( mpDrawView->IsTextEdit() ) mpDrawView->SdrEndTextEdit(); - SFX_REQUEST_ARG (rReq, pWhatPage, SfxUInt32Item, ID_VAL_WHATPAGE, FALSE); - SFX_REQUEST_ARG (rReq, pWhatLayout, SfxUInt32Item, ID_VAL_WHATLAYOUT, FALSE); - ::sd::ViewShell::mpImpl->AssignLayout ( - GetDoc()->GetSdPage((USHORT)pWhatPage->GetValue(), mePageKind), - (AutoLayout)pWhatLayout->GetValue()); + ::sd::ViewShell::mpImpl->AssignLayout(rReq, mePageKind); } Cancel(); rReq.Done (); diff --git a/sd/source/ui/view/drviews3.cxx b/sd/source/ui/view/drviews3.cxx index 852e56096a76..28f8d909031b 100644..100755 --- a/sd/source/ui/view/drviews3.cxx +++ b/sd/source/ui/view/drviews3.cxx @@ -90,6 +90,7 @@ #include "DrawDocShell.hxx" #include "sdabstdlg.hxx" #include <sfx2/ipclient.hxx> +#include <tools/diagnose_ex.h> #include "ViewShellBase.hxx" #include "FormShellManager.hxx" #include "LayerTabBar.hxx" @@ -413,7 +414,7 @@ void DrawViewShell::ExecCtrl(SfxRequest& rReq) } catch (RuntimeException&) { - DBG_ASSERT(false, "caught exception while handline SID_RELOAD"); + DBG_UNHANDLED_EXCEPTION(); } // We have to return immediately to avoid accessing this object. diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx index 4dd3c61556e1..c4c6b20f8ca8 100644..100755 --- a/sd/source/ui/view/drviews6.cxx +++ b/sd/source/ui/view/drviews6.cxx @@ -81,7 +81,6 @@ #include "FrameView.hxx" #include "Window.hxx" #include "DrawDocShell.hxx" -#include "TaskPaneViewShell.hxx" #include "framework/FrameworkHelper.hxx" namespace sd { diff --git a/sd/source/ui/view/drviews7.cxx b/sd/source/ui/view/drviews7.cxx index e0cb78095bd0..e853d3944ce0 100644..100755 --- a/sd/source/ui/view/drviews7.cxx +++ b/sd/source/ui/view/drviews7.cxx @@ -294,6 +294,26 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet ) GetMenuStateSel(rSet); + if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT)) + { + bool bDisable = true; + if( pPageView ) + { + SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() ); + + if( pPage ) + { + rSet.Put( SfxUInt32Item( SID_ASSIGN_LAYOUT, static_cast< sal_uInt32 >(pPage->GetAutoLayout()) ) ); + bDisable = false; + } + } + + if(bDisable) + { + rSet.DisableItem(SID_EXPAND_PAGE); + } + } + if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_EXPAND_PAGE)) { bool bDisable = true; @@ -342,6 +362,26 @@ void DrawViewShell::GetMenuState( SfxItemSet &rSet ) } } + if (SFX_ITEM_AVAILABLE == rSet.GetItemState(SID_ASSIGN_LAYOUT)) + { + bool bDisable = true; + if( pPageView ) + { + SdPage* pPage = dynamic_cast< SdPage* >( pPageView->GetPage() ); + + if( pPage && !pPage->IsMasterPage() ) + { + rSet.Put( SfxUInt32Item(SID_ASSIGN_LAYOUT, pPage->GetAutoLayout()) ); + bDisable = false; + } + } + + if(bDisable) + { + rSet.DisableItem(SID_ASSIGN_LAYOUT); + } + } + // Starten der Praesentation moeglich? if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_PRESENTATION ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REHEARSE_TIMINGS ) ) diff --git a/sd/source/ui/view/drviews8.cxx b/sd/source/ui/view/drviews8.cxx index 54cd0c792c94..54cd0c792c94 100644..100755 --- a/sd/source/ui/view/drviews8.cxx +++ b/sd/source/ui/view/drviews8.cxx diff --git a/sd/source/ui/view/drviewsa.cxx b/sd/source/ui/view/drviewsa.cxx index 4d30831f4e2a..ad42a9251878 100644..100755 --- a/sd/source/ui/view/drviewsa.cxx +++ b/sd/source/ui/view/drviewsa.cxx @@ -62,6 +62,7 @@ #include <svtools/cliplistener.hxx> #include <svx/float3d.hxx> +#include "view/viewoverlaymanager.hxx" #include "app.hrc" #include "helpids.h" #include "strings.hrc" @@ -171,7 +172,8 @@ DrawViewShell::DrawViewShell( SfxViewFrame* pFrame, ::Window* pParentWindow, con DrawViewShell::~DrawViewShell() { - mpAnnotationManager.release(); + mpAnnotationManager.reset(); + mpViewOverlayManager.reset(); OSL_ASSERT (GetViewShell()!=NULL); @@ -416,6 +418,7 @@ void DrawViewShell::Construct(DrawDocShell* pDocSh, PageKind eInitialPageKind) } mpAnnotationManager.reset( new AnnotationManager( GetViewShellBase() ) ); + mpViewOverlayManager.reset( new ViewOverlayManager( GetViewShellBase() ) ); } diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx index 1a667b28f6d4..6f6f49fdc93c 100644..100755 --- a/sd/source/ui/view/drviewse.cxx +++ b/sd/source/ui/view/drviewse.cxx @@ -31,7 +31,8 @@ #include <com/sun/star/presentation/XPresentation2.hpp> #include <com/sun/star/form/FormButtonType.hpp> #include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/i18n/TransliterationModules.hdl> +#include <com/sun/star/i18n/TransliterationModules.hpp> +#include <com/sun/star/i18n/TransliterationModulesExtra.hpp> #include <comphelper/processfactory.hxx> @@ -1401,6 +1402,9 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) } break; + case SID_TRANSLITERATE_SENTENCE_CASE: + case SID_TRANSLITERATE_TITLE_CASE: + case SID_TRANSLITERATE_TOGGLE_CASE: case SID_TRANSLITERATE_UPPER: case SID_TRANSLITERATE_LOWER: case SID_TRANSLITERATE_HALFWIDTH: @@ -1416,6 +1420,15 @@ void DrawViewShell::FuSupport(SfxRequest& rReq) switch( nSId ) { + case SID_TRANSLITERATE_SENTENCE_CASE: + nType = TransliterationModulesExtra::SENTENCE_CASE; + break; + case SID_TRANSLITERATE_TITLE_CASE: + nType = TransliterationModulesExtra::TITLE_CASE; + break; + case SID_TRANSLITERATE_TOGGLE_CASE: + nType = TransliterationModulesExtra::TOGGLE_CASE; + break; case SID_TRANSLITERATE_UPPER: nType = TransliterationModules_LOWERCASE_UPPERCASE; break; diff --git a/sd/source/ui/view/drviewsf.cxx b/sd/source/ui/view/drviewsf.cxx index 0a5f743bb738..ac6b46f3018b 100644..100755 --- a/sd/source/ui/view/drviewsf.cxx +++ b/sd/source/ui/view/drviewsf.cxx @@ -250,6 +250,9 @@ void DrawViewShell::GetCtrlState(SfxItemSet &rSet) GetViewFrame()->GetBindings().SetVisibleState( SID_TRANSLITERATE_KATAGANA, sal_True ); } + rSet.DisableItem( SID_TRANSLITERATE_SENTENCE_CASE ); + rSet.DisableItem( SID_TRANSLITERATE_TITLE_CASE ); + rSet.DisableItem( SID_TRANSLITERATE_TOGGLE_CASE ); rSet.DisableItem( SID_TRANSLITERATE_UPPER ); rSet.DisableItem( SID_TRANSLITERATE_LOWER ); rSet.DisableItem( SID_TRANSLITERATE_HALFWIDTH ); diff --git a/sd/source/ui/view/drvwshrg.cxx b/sd/source/ui/view/drvwshrg.cxx index a8b2d0814c3e..76590dd45003 100644..100755 --- a/sd/source/ui/view/drvwshrg.cxx +++ b/sd/source/ui/view/drvwshrg.cxx @@ -106,6 +106,7 @@ SFX_IMPL_INTERFACE(GraphicViewShell, SfxShell, SdResId(STR_DRAWVIEWSHELL)) //SOH { SFX_POPUPMENU_REGISTRATION( SdResId(RID_DRAW_TEXTOBJ_INSIDE_POPUP) ); SFX_CHILDWINDOW_CONTEXT_REGISTRATION( SID_NAVIGATOR ); + SFX_CHILDWINDOW_REGISTRATION( SID_TASKPANE ); SFX_CHILDWINDOW_REGISTRATION( SfxTemplateDialogWrapper::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( SvxFontWorkChildWindow::GetChildWindowId() ); SFX_CHILDWINDOW_REGISTRATION( SvxColorChildWindow::GetChildWindowId() ); diff --git a/sd/source/ui/view/makefile.mk b/sd/source/ui/view/makefile.mk index 3b3bca4ff3d5..2cc2a96d46a2 100644 --- a/sd/source/ui/view/makefile.mk +++ b/sd/source/ui/view/makefile.mk @@ -53,6 +53,7 @@ SLOFILES = \ $(SLO)$/sdview2.obj \ $(SLO)$/sdview3.obj \ $(SLO)$/sdview4.obj \ + $(SLO)$/sdview5.obj \ $(SLO)$/viewshel.obj \ $(SLO)$/viewshe2.obj \ $(SLO)$/viewshe3.obj \ @@ -113,7 +114,8 @@ SLOFILES = \ $(SLO)$/ViewShellManager.obj \ $(SLO)$/ViewShellHint.obj \ $(SLO)$/ViewTabBar.obj \ - $(SLO)$/WindowUpdater.obj + $(SLO)$/WindowUpdater.obj \ + $(SLO)$/viewoverlaymanager.obj # --- Tagets ------------------------------------------------------- diff --git a/sd/source/ui/view/outlnvs2.cxx b/sd/source/ui/view/outlnvs2.cxx index 2acf143ff0b3..2acf143ff0b3 100644..100755 --- a/sd/source/ui/view/outlnvs2.cxx +++ b/sd/source/ui/view/outlnvs2.cxx diff --git a/sd/source/ui/view/outlnvsh.cxx b/sd/source/ui/view/outlnvsh.cxx index 1467e6c24bd0..bbdcf35a4e34 100644..100755 --- a/sd/source/ui/view/outlnvsh.cxx +++ b/sd/source/ui/view/outlnvsh.cxx @@ -59,7 +59,8 @@ #include <svx/svdorect.hxx> #include <sot/formats.hxx> #include <com/sun/star/linguistic2/XThesaurus.hpp> -#include <com/sun/star/i18n/TransliterationModules.hdl> +#include <com/sun/star/i18n/TransliterationModules.hpp> +#include <com/sun/star/i18n/TransliterationModulesExtra.hpp> #include <editeng/unolingu.hxx> #include <comphelper/processfactory.hxx> #include <editeng/outlobj.hxx> @@ -528,6 +529,9 @@ void OutlineViewShell::FuSupport(SfxRequest &rReq) std::auto_ptr< OutlineViewModelChangeGuard > aGuard; if( pOlView && ( + (nSlot == SID_TRANSLITERATE_SENTENCE_CASE) || + (nSlot == SID_TRANSLITERATE_TITLE_CASE) || + (nSlot == SID_TRANSLITERATE_TOGGLE_CASE) || (nSlot == SID_TRANSLITERATE_UPPER) || (nSlot == SID_TRANSLITERATE_LOWER) || (nSlot == SID_TRANSLITERATE_HALFWIDTH) || @@ -661,6 +665,9 @@ void OutlineViewShell::FuSupport(SfxRequest &rReq) } break; + case SID_TRANSLITERATE_SENTENCE_CASE: + case SID_TRANSLITERATE_TITLE_CASE: + case SID_TRANSLITERATE_TOGGLE_CASE: case SID_TRANSLITERATE_UPPER: case SID_TRANSLITERATE_LOWER: case SID_TRANSLITERATE_HALFWIDTH: @@ -676,6 +683,15 @@ void OutlineViewShell::FuSupport(SfxRequest &rReq) switch( nSlot ) { + case SID_TRANSLITERATE_SENTENCE_CASE: + nType = TransliterationModulesExtra::SENTENCE_CASE; + break; + case SID_TRANSLITERATE_TITLE_CASE: + nType = TransliterationModulesExtra::TITLE_CASE; + break; + case SID_TRANSLITERATE_TOGGLE_CASE: + nType = TransliterationModulesExtra::TOGGLE_CASE; + break; case SID_TRANSLITERATE_UPPER: nType = TransliterationModules_LOWERCASE_UPPERCASE; break; @@ -988,7 +1004,7 @@ void OutlineViewShell::GetMenuState( SfxItemSet &rSet ) GetDoc()->SetChanged(TRUE); } - // Da šberladen, muss hier der Status gesetzt werden + // Da �berladen, muss hier der Status gesetzt werden if( !GetDocSh()->IsModified() ) { rSet.DisableItem( SID_SAVEDOC ); diff --git a/sd/source/ui/view/sdview4.cxx b/sd/source/ui/view/sdview4.cxx index 44e5127bfb25..a980496cecf3 100644..100755 --- a/sd/source/ui/view/sdview4.cxx +++ b/sd/source/ui/view/sdview4.cxx @@ -114,11 +114,25 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction, if( mnAction == DND_ACTION_LINK && pPickObj && pPV ) { - if( pPickObj->ISA( SdrGrafObj ) ) + const bool bIsGraphic = pPickObj->ISA( SdrGrafObj ); + if( bIsGraphic || pObj->IsEmptyPresObj() ) { - // Das Objekt wird mit der Bitmap gefuellt - pNewGrafObj = (SdrGrafObj*) pPickObj->Clone(); - pNewGrafObj->SetGraphic(rGraphic); + if( IsUndoEnabled() ) + BegUndo(String(SdResId(STR_INSERTGRAPHIC))); + + SdPage* pPage = (SdPage*) pPickObj->GetPage(); + + if( bIsGraphic ) + { + // Das Objekt wird mit der Bitmap gefuellt + pNewGrafObj = (SdrGrafObj*) pPickObj->Clone(); + pNewGrafObj->SetGraphic(rGraphic); + } + else + { + pNewGrafObj = new SdrGrafObj( rGraphic, pPickObj->GetLogicRect() ); + pNewGrafObj->SetEmptyPresObj(TRUE); + } if ( pNewGrafObj->IsEmptyPresObj() ) { @@ -128,28 +142,11 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction, pNewGrafObj->SetEmptyPresObj(FALSE); } - const bool bUndo = IsUndoEnabled(); - if( bUndo ) - BegUndo(String(SdResId(STR_UNDO_DRAGDROP))); - - SdPage* pPage = (SdPage*) pPickObj->GetPage(); - - if (pPage && pPage->GetPresObjKind(pPickObj) == PRESOBJ_GRAPHIC) + if (pPage && pPage->IsPresObj(pPickObj)) { // Neues PresObj in die Liste eintragen + pPage->InsertPresObj( pNewGrafObj, PRESOBJ_GRAPHIC ); pNewGrafObj->SetUserCall(pPickObj->GetUserCall()); - if( bUndo ) - { - AddUndo( new sd::UndoObjectPresentationKind( *pPickObj ) ); - AddUndo( new sd::UndoObjectPresentationKind( *pNewGrafObj ) ); - } - pPage->RemovePresObj(pPickObj); - pPage->InsertPresObj(pNewGrafObj, PRESOBJ_GRAPHIC); - - if( !bUndo ) - { - SdrObject::Free( pPickObj ); - } } if (pImageMap) @@ -157,7 +154,7 @@ SdrGrafObj* View::InsertGraphic( const Graphic& rGraphic, sal_Int8& rAction, ReplaceObjectAtView(pPickObj, *pPV, pNewGrafObj); // maybe ReplaceObjectAtView - if( bUndo ) + if( IsUndoEnabled() ) EndUndo(); } else if (pPickObj->IsClosedObj() && !pPickObj->ISA(SdrOle2Obj)) @@ -295,7 +292,7 @@ SdrMediaObj* View::InsertMediaURL( const rtl::OUString& rMediaURL, sal_Int8& rAc SdrMediaObj* pNewMediaObj = NULL; SdrPageView* pPV = GetSdrPageView(); - SdrObject* pPickObj = NULL; + SdrObject* pPickObj = GetEmptyPresentationObject( PRESOBJ_MEDIA ); if(pPV && this->ISA(::sd::slidesorter::view::SlideSorterView )) { @@ -320,10 +317,37 @@ SdrMediaObj* View::InsertMediaURL( const rtl::OUString& rMediaURL, sal_Int8& rAc } else if( pPV ) { - pNewMediaObj = new SdrMediaObj( Rectangle( rPos, rSize ) ); + Rectangle aRect( rPos, rSize ); + if( pPickObj ) + aRect = pPickObj->GetLogicRect(); + - if( pPV && InsertObjectAtView( pNewMediaObj, *pPV, SDRINSERT_SETDEFLAYER ) ) - pNewMediaObj->setURL( rMediaURL ); + pNewMediaObj = new SdrMediaObj( aRect ); + + bool bIsPres = false; + if( pPickObj ) + { + SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); + bIsPres = pPage && pPage->IsPresObj(pPickObj); + if( bIsPres ) + { + pPage->InsertPresObj( pNewMediaObj, PRESOBJ_MEDIA ); + } + } + + if( pPickObj ) + ReplaceObjectAtView(pPickObj, *pPV, pNewMediaObj); + else + InsertObjectAtView( pNewMediaObj, *pPV, SDRINSERT_SETDEFLAYER ); + + pNewMediaObj->setURL( rMediaURL ); + + if( pPickObj ) + { + pNewMediaObj->AdjustToMaxRect( pPickObj->GetLogicRect() ); + if( bIsPres ) + pNewMediaObj->SetUserCall(pPickObj->GetUserCall()); + } } rAction = mnAction; diff --git a/sd/source/ui/view/sdview5.cxx b/sd/source/ui/view/sdview5.cxx new file mode 100755 index 000000000000..156544c235ab --- /dev/null +++ b/sd/source/ui/view/sdview5.cxx @@ -0,0 +1,114 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#include "sdpage.hxx" +#include "View.hxx" +#include "pres.hxx" + +namespace sd { + +static bool implIsMultiPresObj( PresObjKind eKind ) +{ + switch( eKind ) + { + case PRESOBJ_OUTLINE: + case PRESOBJ_GRAPHIC: + case PRESOBJ_OBJECT: + case PRESOBJ_CHART: + case PRESOBJ_ORGCHART: + case PRESOBJ_TABLE: + case PRESOBJ_IMAGE: + case PRESOBJ_MEDIA: + return true; + default: + return false; + } +} + +SdrObject* View::GetEmptyPresentationObject( PresObjKind eKind ) +{ + SdrObject* pEmptyObj = 0; + + SdrPageView* pPV = GetSdrPageView(); + if( pPV ) + { + SdPage* pPage = static_cast< SdPage* >( pPV->GetPage() ); + if( pPage ) + { + // first try selected shape + if ( AreObjectsMarked() ) + { + /********************************************************** + * Is an empty graphic object available? + **********************************************************/ + const SdrMarkList& rMarkList = GetMarkedObjectList(); + + if (rMarkList.GetMarkCount() == 1) + { + SdrMark* pMark = rMarkList.GetMark(0); + SdrObject* pObj = pMark->GetMarkedSdrObj(); + + if( pObj->IsEmptyPresObj() && implIsMultiPresObj( pPage->GetPresObjKind(pObj) ) ) + pEmptyObj = pObj; + } + } + + // try to find empty pres obj of same type + if( !pEmptyObj ) + { + int nIndex = 1; + do + { + pEmptyObj = pPage->GetPresObj(eKind, nIndex++ ); + } + while( (pEmptyObj != 0) && (!pEmptyObj->IsEmptyPresObj()) ); + } + + // last try to find empty pres obj of multiple type + if( !pEmptyObj ) + { + const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList(); + + for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); iter++ ) + { + if( (*iter)->IsEmptyPresObj() && implIsMultiPresObj(pPage->GetPresObjKind(*iter)) ) + { + pEmptyObj = (*iter); + break; + } + } + } + } + } + + return pEmptyObj; +} + +} diff --git a/sd/source/ui/view/sdwindow.cxx b/sd/source/ui/view/sdwindow.cxx index 7cae5d452a1b..5ae673b8769f 100644..100755 --- a/sd/source/ui/view/sdwindow.cxx +++ b/sd/source/ui/view/sdwindow.cxx @@ -36,7 +36,6 @@ #include <svx/svxids.hrc> #include <editeng/outliner.hxx> - #include <editeng/editview.hxx> #include "app.hrc" diff --git a/sd/source/ui/view/viewoverlaymanager.cxx b/sd/source/ui/view/viewoverlaymanager.cxx new file mode 100755 index 000000000000..ab165eea600b --- /dev/null +++ b/sd/source/ui/view/viewoverlaymanager.cxx @@ -0,0 +1,609 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: $ + * $Revision: $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" + +#include "sddll.hxx" + +#include <com/sun/star/frame/XFrame.hpp> +#include <sfx2/imagemgr.hxx> +#include <sfx2/viewfrm.hxx> +#include <sfx2/bindings.hxx> +#include <sfx2/app.hxx> +#include <sfx2/request.hxx> +#include <sfx2/dispatch.hxx> + +#include <tools/rcid.h> + +#include <vcl/help.hxx> +#include <vcl/imagerepository.hxx> + +#include <svx/sdrpagewindow.hxx> +#include <svx/sdrpaintwindow.hxx> +#include <svx/sdr/overlay/overlayanimatedbitmapex.hxx> +#include <svx/sdr/overlay/overlaybitmapex.hxx> +#include <svx/sdr/overlay/overlaymanager.hxx> +#include <svx/svxids.hrc> + +#include "view/viewoverlaymanager.hxx" + +#include "res_bmp.hrc" +#include "DrawDocShell.hxx" +#include "DrawViewShell.hxx" +#include "DrawController.hxx" +#include "glob.hrc" +#include "strings.hrc" +#include "sdresid.hxx" +#include "EventMultiplexer.hxx" +#include "ViewShellManager.hxx" +#include "helpids.h" +#include "sdpage.hxx" +#include "drawdoc.hxx" +#include "smarttag.hxx" + +using ::rtl::OUString; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::frame; + +namespace sd { + +class ImageButtonHdl; + +// -------------------------------------------------------------------- + +BitmapEx ViewOverlayManager::maSmallButtonImages[BMP_PLACEHOLDER_SMALL_END - BMP_PLACEHOLDER_SMALL_START]; +BitmapEx ViewOverlayManager::maLargeButtonImages[BMP_PLACEHOLDER_LARGE_END - BMP_PLACEHOLDER_LARGE_START]; + +static USHORT gButtonSlots[] = { SID_INSERT_TABLE, SID_INSERT_DIAGRAM, SID_INSERT_GRAPHIC, SID_INSERT_AVMEDIA }; +static USHORT gButtonToolTips[] = { STR_INSERT_TABLE, STR_INSERT_CHART, STR_INSERT_PICTURE, STR_INSERT_MOVIE }; + +// -------------------------------------------------------------------- + +static BitmapEx loadImageResource( USHORT nId ) +{ + SdResId aResId( nId ); + aResId.SetRT( RSC_BITMAP ); + + return BitmapEx( aResId ); +} + +// -------------------------------------------------------------------- + +const sal_uInt32 SMART_TAG_HDL_NUM = SAL_MAX_UINT32; + +class ChangePlaceholderTag : public SmartTag +{ + friend class ImageButtonHdl; +public: + ChangePlaceholderTag( ViewOverlayManager& rManager, ::sd::View& rView, SdrObject& rPlaceholderObj ); + virtual ~ChangePlaceholderTag(); + + /** returns true if the SmartTag handled the event. */ + virtual bool MouseButtonDown( const MouseEvent&, SmartHdl& ); + + /** returns true if the SmartTag consumes this event. */ + virtual bool KeyInput( const KeyEvent& rKEvt ); + + BitmapEx createOverlayImage( int nHighlight = -1 ); + +protected: + virtual void addCustomHandles( SdrHdlList& rHandlerList ); + virtual void disposing(); + virtual void select(); + virtual void deselect(); + +private: + ViewOverlayManager& mrManager; + SdrObjectWeakRef mxPlaceholderObj; +}; + +class ImageButtonHdl : public SmartHdl +{ +public: + ImageButtonHdl( const SmartTagReference& xTag, /* USHORT nSID, const Image& rImage, const Image& rImageMO, */ const Point& rPnt ); + virtual ~ImageButtonHdl(); + virtual void CreateB2dIAObject(); + virtual BOOL IsFocusHdl() const; + virtual Pointer GetPointer() const; + virtual bool isMarkable() const; + + virtual void onMouseEnter(const MouseEvent& rMEvt); + virtual void onMouseLeave(); + + int getHighlightId() const { return mnHighlightId; } + + void HideTip(); + +private: + rtl::Reference< ChangePlaceholderTag > mxTag; + + int mnHighlightId; + Size maImageSize; + ULONG mnTip; +}; + +// -------------------------------------------------------------------- + +ImageButtonHdl::ImageButtonHdl( const SmartTagReference& xTag /*, USHORT nSID, const Image& rImage, const Image& rImageMO*/, const Point& rPnt ) +: SmartHdl( xTag, rPnt ) +, mxTag( dynamic_cast< ChangePlaceholderTag* >( xTag.get() ) ) +, mnHighlightId( -1 ) +, maImageSize( 42, 42 ) +, mnTip( 0 ) +{ +} + +// -------------------------------------------------------------------- + +ImageButtonHdl::~ImageButtonHdl() +{ + HideTip(); +} + +// -------------------------------------------------------------------- + +void ImageButtonHdl::HideTip() +{ + if( mnTip ) + { + Help::HideTip( mnTip ); + mnTip = 0; + } +} + +// -------------------------------------------------------------------- + +extern ::rtl::OUString ImplRetrieveLabelFromCommand( const Reference< XFrame >& xFrame, const OUString& aCmdURL ); + +void ImageButtonHdl::onMouseEnter(const MouseEvent& rMEvt) +{ + int nHighlightId = 0; + + if( pHdlList && pHdlList->GetView()) + { + OutputDevice* pDev = pHdlList->GetView()->GetFirstOutputDevice(); + if( pDev == 0 ) + pDev = Application::GetDefaultDevice(); + + Point aMDPos( rMEvt.GetPosPixel() ); + aMDPos -= pDev->LogicToPixel( GetPos() ); + + nHighlightId += aMDPos.X() > maImageSize.Width() ? 1 : 0; + nHighlightId += aMDPos.Y() > maImageSize.Height() ? 2 : 0; + + if( mnHighlightId != nHighlightId ) + { + HideTip(); + + mnHighlightId = nHighlightId; + + if( pHdlList ) + { + SdResId aResId( gButtonToolTips[mnHighlightId] ); + aResId.SetRT( RSC_STRING ); + + String aHelpText( aResId ); + Rectangle aScreenRect( pDev->LogicToPixel( GetPos() ), maImageSize ); + mnTip = Help::ShowTip( static_cast< ::Window* >( pHdlList->GetView()->GetFirstOutputDevice() ), aScreenRect, aHelpText, 0 ) ; + } + Touch(); + } + } +} + +// -------------------------------------------------------------------- + +void ImageButtonHdl::onMouseLeave() +{ + mnHighlightId = -1; + HideTip(); + Touch(); +} + +// -------------------------------------------------------------------- + +void ImageButtonHdl::CreateB2dIAObject() +{ + // first throw away old one + GetRidOfIAObject(); + + const Point aTagPos( GetPos() ); + basegfx::B2DPoint aPosition( aTagPos.X(), aTagPos.Y() ); + + BitmapEx aBitmapEx( mxTag->createOverlayImage( mnHighlightId ) ); // maImageMO.GetBitmapEx() : maImage.GetBitmapEx() ); + maImageSize = aBitmapEx.GetSizePixel(); + maImageSize.Width() >>= 1; + maImageSize.Height() >>= 1; + + if(pHdlList) + { + SdrMarkView* pView = pHdlList->GetView(); + + if(pView && !pView->areMarkHandlesHidden()) + { + SdrPageView* pPageView = pView->GetSdrPageView(); + + if(pPageView) + { + for(sal_uInt32 b = 0; b < pPageView->PageWindowCount(); b++) + { + const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(b); + + SdrPaintWindow& rPaintWindow = rPageWindow.GetPaintWindow(); + if(rPaintWindow.OutputToWindow() && rPageWindow.GetOverlayManager() ) + { + ::sdr::overlay::OverlayObject* pOverlayObject = 0; + + pOverlayObject = new ::sdr::overlay::OverlayBitmapEx( aPosition, aBitmapEx, 0, 0 ); + rPageWindow.GetOverlayManager()->add(*pOverlayObject); + maOverlayGroup.append(*pOverlayObject); + } + } + } + } + } +} + +// -------------------------------------------------------------------- + +BOOL ImageButtonHdl::IsFocusHdl() const +{ + return false; +} + +// -------------------------------------------------------------------- + +bool ImageButtonHdl::isMarkable() const +{ + return false; +} + +// -------------------------------------------------------------------- + +Pointer ImageButtonHdl::GetPointer() const +{ + return Pointer( POINTER_ARROW ); +} + +// ==================================================================== + +ChangePlaceholderTag::ChangePlaceholderTag( ViewOverlayManager& rManager, ::sd::View& rView, SdrObject& rPlaceholderObj ) +: SmartTag( rView ) +, mrManager( rManager ) +, mxPlaceholderObj( &rPlaceholderObj ) +{ +} + +// -------------------------------------------------------------------- + +ChangePlaceholderTag::~ChangePlaceholderTag() +{ +} + +// -------------------------------------------------------------------- + +/** returns true if the ChangePlaceholderTag handled the event. */ +bool ChangePlaceholderTag::MouseButtonDown( const MouseEvent& /*rMEvt*/, SmartHdl& rHdl ) +{ + int nHighlightId = static_cast< ImageButtonHdl& >(rHdl).getHighlightId(); + if( nHighlightId >= 0 ) + { + USHORT nSID = gButtonSlots[nHighlightId]; + + if( mxPlaceholderObj.get() ) + { + // mark placeholder if it is not currently marked (or if also others are marked) + if( !mrView.IsObjMarked( mxPlaceholderObj.get() ) || (mrView.GetMarkedObjectList().GetMarkCount() != 1) ) + { + SdrPageView* pPV = mrView.GetSdrPageView(); + mrView.UnmarkAllObj(pPV ); + mrView.MarkObj(mxPlaceholderObj.get(), pPV, FALSE); + } + } + + mrView.GetViewShell()->GetViewFrame()->GetDispatcher()->Execute( nSID, SFX_CALLMODE_ASYNCHRON); + } + return false; +} + +// -------------------------------------------------------------------- + +/** returns true if the SmartTag consumes this event. */ +bool ChangePlaceholderTag::KeyInput( const KeyEvent& rKEvt ) +{ + USHORT nCode = rKEvt.GetKeyCode().GetCode(); + switch( nCode ) + { + case KEY_DOWN: + case KEY_UP: + case KEY_LEFT: + case KEY_RIGHT: + case KEY_ESCAPE: + case KEY_TAB: + case KEY_RETURN: + case KEY_SPACE: + default: + return false; + } +} + +// -------------------------------------------------------------------- + +BitmapEx ChangePlaceholderTag::createOverlayImage( int nHighlight ) +{ + BitmapEx aRet; + if( mxPlaceholderObj.is() ) + { + SdrObject* pPlaceholder = mxPlaceholderObj.get(); + SmartTagReference xThis( this ); + const Rectangle& rSnapRect = pPlaceholder->GetSnapRect(); + const Point aPoint; + + OutputDevice* pDev = mrView.GetFirstOutputDevice(); + if( pDev == 0 ) + pDev = Application::GetDefaultDevice(); + + Size aShapeSizePix = pDev->LogicToPixel(rSnapRect.GetSize()); + long nShapeSizePix = std::min(aShapeSizePix.Width(),aShapeSizePix.Height()); + + BitmapEx* pImages = (nShapeSizePix > 250) ? &ViewOverlayManager::maLargeButtonImages[0] : &ViewOverlayManager::maSmallButtonImages[0]; + + Size aSize( pImages->GetSizePixel() ); + + aRet.SetSizePixel( Size( aSize.Width() << 1, aSize.Height() << 1 ) ); + + const Rectangle aRectSrc( Point( 0, 0 ), aSize ); + + aRet = pImages[(nHighlight == 0) ? 4 : 0]; + aRet.Expand( aSize.Width(), aSize.Height(), NULL, TRUE ); + + aRet.CopyPixel( Rectangle( Point( aSize.Width(), 0 ), aSize ), aRectSrc, &pImages[(nHighlight == 1) ? 5 : 1] ); + aRet.CopyPixel( Rectangle( Point( 0, aSize.Height() ), aSize ), aRectSrc, &pImages[(nHighlight == 2) ? 6 : 2] ); + aRet.CopyPixel( Rectangle( Point( aSize.Width(), aSize.Height() ), aSize ), aRectSrc, &pImages[(nHighlight == 3) ? 7 : 3] ); + } + + return aRet; +} + +void ChangePlaceholderTag::addCustomHandles( SdrHdlList& rHandlerList ) +{ + if( mxPlaceholderObj.is() ) + { + SdrObject* pPlaceholder = mxPlaceholderObj.get(); + SmartTagReference xThis( this ); + const Rectangle& rSnapRect = pPlaceholder->GetSnapRect(); + const Point aPoint; + + OutputDevice* pDev = mrView.GetFirstOutputDevice(); + if( pDev == 0 ) + pDev = Application::GetDefaultDevice(); + + Size aShapeSizePix = pDev->LogicToPixel(rSnapRect.GetSize()); + long nShapeSizePix = std::min(aShapeSizePix.Width(),aShapeSizePix.Height()); + if( 50 > nShapeSizePix ) + return; + + BitmapEx* pImages = (nShapeSizePix > 250) ? &ViewOverlayManager::maLargeButtonImages[0] : &ViewOverlayManager::maSmallButtonImages[0]; + + Size aButtonSize( pDev->PixelToLogic(pImages[0].GetSizePixel()) ); + + const int nColumns = 2; + const int nRows = 2; + + long all_width = nColumns * aButtonSize.Width(); + long all_height = nRows * aButtonSize.Height(); + + Point aPos( rSnapRect.Center() ); + aPos.X() -= all_width >> 1; + aPos.Y() -= all_height >> 1; + + ImageButtonHdl* pHdl = new ImageButtonHdl( xThis, aPoint ); + pHdl->SetObjHdlNum( SMART_TAG_HDL_NUM ); + pHdl->SetPageView( mrView.GetSdrPageView() ); + + pHdl->SetPos( aPos ); + + rHandlerList.AddHdl( pHdl ); + } +} + +// -------------------------------------------------------------------- + +void ChangePlaceholderTag::disposing() +{ + SmartTag::disposing(); +} + +// -------------------------------------------------------------------- + +void ChangePlaceholderTag::select() +{ + SmartTag::select(); +} + +// -------------------------------------------------------------------- + +void ChangePlaceholderTag::deselect() +{ + SmartTag::deselect(); +} + +// -------------------------------------------------------------------- + +ViewOverlayManager::ViewOverlayManager( ViewShellBase& rViewShellBase ) +: mrBase( rViewShellBase ) +, mnUpdateTagsEvent( 0 ) +{ + Link aLink( LINK(this,ViewOverlayManager,EventMultiplexerListener) ); + mrBase.GetEventMultiplexer()->AddEventListener(aLink, tools::EventMultiplexerEvent::EID_CURRENT_PAGE + | tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED + | tools::EventMultiplexerEvent::EID_VIEW_ADDED + | tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT + | tools::EventMultiplexerEvent::EID_END_TEXT_EDIT ); + + StartListening( *mrBase.GetDocShell() ); +} + +// -------------------------------------------------------------------- + +ViewOverlayManager::~ViewOverlayManager() +{ + Link aLink( LINK(this,ViewOverlayManager,EventMultiplexerListener) ); + mrBase.GetEventMultiplexer()->RemoveEventListener( aLink ); + + if( mnUpdateTagsEvent ) + { + Application::RemoveUserEvent( mnUpdateTagsEvent ); + mnUpdateTagsEvent = 0; + } + + DisposeTags(); +} + +// -------------------------------------------------------------------- + +void ViewOverlayManager::UpdateImages() +{ + for( sal_uInt16 i = 0; i < (BMP_PLACEHOLDER_SMALL_END-BMP_PLACEHOLDER_SMALL_START); i++ ) + { + maSmallButtonImages[i] = loadImageResource( BMP_PLACEHOLDER_SMALL_START + i ); + maLargeButtonImages[i] = loadImageResource( BMP_PLACEHOLDER_LARGE_START + i ); + } +} + +// -------------------------------------------------------------------- + +void ViewOverlayManager::Notify(SfxBroadcaster&, const SfxHint& rHint) +{ + const SfxSimpleHint* pSimpleHint = dynamic_cast<const SfxSimpleHint*>(&rHint); + if (pSimpleHint != NULL) + { + if (pSimpleHint->GetId() == SFX_HINT_DOCCHANGED) + { + UpdateTags(); + } + } +} + +void ViewOverlayManager::onZoomChanged() +{ + if( !maTagVector.empty() ) + { + UpdateTags(); + } +} + +void ViewOverlayManager::UpdateTags() +{ + if( !mnUpdateTagsEvent ) + mnUpdateTagsEvent = Application::PostUserEvent( LINK( this, ViewOverlayManager, UpdateTagsHdl ) ); +} + +IMPL_LINK(ViewOverlayManager,UpdateTagsHdl, void *, EMPTYARG) +{ + OSL_TRACE("ViewOverlayManager::UpdateTagsHdl"); + + mnUpdateTagsEvent = 0; + bool bChanges = DisposeTags(); + bChanges |= CreateTags(); + + if( bChanges && mrBase.GetDrawView() ) + static_cast< ::sd::View* >( mrBase.GetDrawView() )->updateHandles(); + return 0; +} + +bool ViewOverlayManager::CreateTags() +{ + bool bChanges = false; + + SdPage* pPage = mrBase.GetMainViewShell()->getCurrentPage(); + + if( pPage ) + { + if( !maSmallButtonImages[0] ) + UpdateImages(); + + const std::list< SdrObject* >& rShapes = pPage->GetPresentationShapeList().getList(); + + for( std::list< SdrObject* >::const_iterator iter( rShapes.begin() ); iter != rShapes.end(); iter++ ) + { + if( (*iter)->IsEmptyPresObj() && ((*iter)->GetObjIdentifier() == OBJ_OUTLINETEXT) && (mrBase.GetDrawView()->GetTextEditObject() != (*iter)) ) + { + rtl::Reference< SmartTag > xTag( new ChangePlaceholderTag( *this, *mrBase.GetMainViewShell()->GetView(), *(*iter) ) ); + maTagVector.push_back(xTag); + bChanges = true; + } + } + } + + return bChanges; +} + +// -------------------------------------------------------------------- + +bool ViewOverlayManager::DisposeTags() +{ + if( !maTagVector.empty() ) + { + ViewTagVector vec; + vec.swap( maTagVector ); + + ViewTagVector::iterator iter = vec.begin(); + do + { + (*iter++)->Dispose(); + } + while( iter != vec.end() ); + return true; + } + + return false; +} + +// -------------------------------------------------------------------- + +IMPL_LINK(ViewOverlayManager,EventMultiplexerListener, + tools::EventMultiplexerEvent*,pEvent) +{ + switch (pEvent->meEventId) + { + case tools::EventMultiplexerEvent::EID_MAIN_VIEW_ADDED: + case tools::EventMultiplexerEvent::EID_VIEW_ADDED: + case tools::EventMultiplexerEvent::EID_BEGIN_TEXT_EDIT: + case tools::EventMultiplexerEvent::EID_END_TEXT_EDIT: + case tools::EventMultiplexerEvent::EID_CURRENT_PAGE: + UpdateTags(); + break; + } + return 0; +} + +} diff --git a/sd/source/ui/view/viewshe3.cxx b/sd/source/ui/view/viewshe3.cxx index 4ec163d813ca..8bfdefd240da 100644..100755 --- a/sd/source/ui/view/viewshe3.cxx +++ b/sd/source/ui/view/viewshe3.cxx @@ -69,7 +69,6 @@ #endif #include "DrawViewShell.hxx" #include "OutlineViewShell.hxx" -#include "TaskPaneViewShell.hxx" #include "drawview.hxx" #include "sdattr.hxx" @@ -80,6 +79,7 @@ #include "Window.hxx" #include "DrawDocShell.hxx" #include "FrameView.hxx" +#include "framework/FrameworkHelper.hxx" #include "optsitem.hxx" #include "sdresid.hxx" @@ -246,6 +246,7 @@ SdPage* ViewShell::CreateOrDuplicatePage ( const SfxItemSet* pArgs = rRequest.GetArgs(); if (! pArgs) { +/* // Make the layout menu visible in the tool pane. const ViewShellBase& rBase (GetViewShellBase()); if (rBase.GetMainViewShell()!=NULL @@ -253,8 +254,9 @@ SdPage* ViewShell::CreateOrDuplicatePage ( && rBase.GetMainViewShell()->GetShellType()!=ViewShell::ST_DRAW) { framework::FrameworkHelper::Instance(GetViewShellBase())->RequestTaskPanel( - framework::FrameworkHelper::msLayoutTaskPanelURL); + framework::FrameworkHelper::msLayoutTaskPanelURL); } +*/ // AutoLayouts muessen fertig sein pDocument->StopWorkStartupDelay(); @@ -263,23 +265,31 @@ SdPage* ViewShell::CreateOrDuplicatePage ( if (pTemplatePage != NULL) { eStandardLayout = pTemplatePage->GetAutoLayout(); + if( eStandardLayout == AUTOLAYOUT_TITLE ) + eStandardLayout = AUTOLAYOUT_ENUM; + SdPage* pNotesTemplatePage = static_cast<SdPage*>(pDocument->GetPage(pTemplatePage->GetPageNum()+1)); if (pNotesTemplatePage != NULL) eNotesLayout = pNotesTemplatePage->GetAutoLayout(); } } - else if (pArgs->Count () != 4) + else if (pArgs->Count() == 1) { - Cancel(); - - if(HasCurrentFunction(SID_BEZIER_EDIT) ) - GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); - - StarBASIC::FatalError (SbERR_WRONG_ARGS); - rRequest.Ignore (); - return NULL; + pDocument->StopWorkStartupDelay(); + SFX_REQUEST_ARG (rRequest, pLayout, SfxUInt32Item, ID_VAL_WHATLAYOUT, FALSE); + if( pLayout ) + { + if (ePageKind == PK_NOTES) + { + eNotesLayout = (AutoLayout) pLayout->GetValue (); + } + else + { + eStandardLayout = (AutoLayout) pLayout->GetValue (); + } + } } - else + else if (pArgs->Count() == 4) { // AutoLayouts muessen fertig sein pDocument->StopWorkStartupDelay(); @@ -317,6 +327,17 @@ SdPage* ViewShell::CreateOrDuplicatePage ( return NULL; } } + else + { + Cancel(); + + if(HasCurrentFunction(SID_BEZIER_EDIT) ) + GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON); + + StarBASIC::FatalError (SbERR_WRONG_ARGS); + rRequest.Ignore (); + return NULL; + } // 2. Create a new page or duplicate an existing one. View* pDrView = GetView(); diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx index 578026018b9f..578026018b9f 100644..100755 --- a/sd/source/ui/view/viewshel.cxx +++ b/sd/source/ui/view/viewshel.cxx |