diff options
Diffstat (limited to 'sd/source/ui/dlg/navigatr.cxx')
-rw-r--r-- | sd/source/ui/dlg/navigatr.cxx | 330 |
1 files changed, 118 insertions, 212 deletions
diff --git a/sd/source/ui/dlg/navigatr.cxx b/sd/source/ui/dlg/navigatr.cxx index 225e5c78f15d..084fdaf2fc03 100644 --- a/sd/source/ui/dlg/navigatr.cxx +++ b/sd/source/ui/dlg/navigatr.cxx @@ -40,7 +40,6 @@ #include "pres.hxx" #include "navigatr.hxx" -#include "navigatr.hrc" #include "pgjump.hxx" #include "app.hrc" #include "strings.hrc" @@ -63,46 +62,35 @@ static const sal_uInt16 nShowAllShapesFilter=2; /** * SdNavigatorWin - FloatingWindow */ -SdNavigatorWin::SdNavigatorWin( - vcl::Window* pParent, - SfxBindings* pInBindings) - : vcl::Window( pParent, SdResId(FLT_NAVIGATOR) ) - , maToolbox ( VclPtr<ToolBox>::Create( this, SdResId( 1 ) ) ) - , maTlbObjects( VclPtr<SdPageObjsTLB>::Create( this, SdResId( TLB_OBJECTS ) ) ) - , maLbDocs ( VclPtr<ListBox>::Create( this, SdResId( LB_DOCS ) ) ) +SdNavigatorWin::SdNavigatorWin(vcl::Window* pParent, SfxBindings* pInBindings) + : PanelLayout(pParent, "NavigatorPanel", "modules/simpress/ui/navigatorpanel.ui", nullptr) , mbDocImported ( false ) // On changes of the DragType: adjust SelectionMode of TLB! , meDragType ( NAVIGATOR_DRAGTYPE_EMBEDDED ) , mpBindings ( pInBindings ) , mpNavigatorCtrlItem( nullptr ) , mpPageNameCtrlItem( nullptr ) - , maImageList ( SdResId( IL_NAVIGATR ) ) { - maTlbObjects->SetViewFrame( mpBindings->GetDispatcher()->GetFrame() ); + get(maToolbox, "toolbox"); + get(maTlbObjects, "tree"); + Size aSize(maTlbObjects->LogicToPixel(Size(97, 67), MapUnit::MapAppFont)); + maTlbObjects->set_height_request(aSize.Width()); + maTlbObjects->set_width_request(aSize.Height()); + get(maLbDocs, "documents"); - FreeResource(); + maTlbObjects->SetViewFrame( mpBindings->GetDispatcher()->GetFrame() ); maTlbObjects->SetAccessibleName(SD_RESSTR(STR_OBJECTS_TREE)); - ApplyImageList(); // load images *before* calculating sizes to get something useful !!! - - Size aTbxSize( maToolbox->CalcWindowSizePixel() ); - maToolbox->SetOutputSizePixel( aTbxSize ); maToolbox->SetSelectHdl( LINK( this, SdNavigatorWin, SelectToolboxHdl ) ); maToolbox->SetDropdownClickHdl( LINK(this, SdNavigatorWin, DropdownClickToolBoxHdl) ); - maToolbox->SetItemBits( TBI_DRAGTYPE, maToolbox->GetItemBits( TBI_DRAGTYPE ) | ToolBoxItemBits::DROPDOWNONLY ); + const sal_uInt16 nDragTypeId = maToolbox->GetItemId("dragmode"); + maToolbox->SetItemBits(nDragTypeId, maToolbox->GetItemBits(nDragTypeId) | ToolBoxItemBits::DROPDOWNONLY); // Shape filter drop down menu. - maToolbox->SetItemBits( - TBI_SHAPE_FILTER, - maToolbox->GetItemBits(TBI_SHAPE_FILTER) | ToolBoxItemBits::DROPDOWNONLY); - - // TreeListBox - // set position below toolbox - long nListboxYPos = maToolbox->GetPosPixel().Y() + maToolbox->GetSizePixel().Height() + 4; - maTlbObjects->setPosSizePixel( 0, nListboxYPos, 0, 0, PosSizeFlags::Y ); - maTlbObjects->SetDoubleClickHdl( LINK( this, SdNavigatorWin, ClickObjectHdl ) ); - maTlbObjects->SetSelectionMode( SelectionMode::Single ); + const sal_uInt16 nShapeId = maToolbox->GetItemId("shapes"); + maToolbox->SetItemBits(nShapeId, maToolbox->GetItemBits(nShapeId) | ToolBoxItemBits::DROPDOWNONLY); + // set focus to listbox, otherwise it is in the toolbox which is only useful // for keyboard navigation maTlbObjects->GrabFocus(); @@ -110,43 +98,12 @@ SdNavigatorWin::SdNavigatorWin( // DragTypeListBox maLbDocs->SetSelectHdl( LINK( this, SdNavigatorWin, SelectDocumentHdl ) ); - // set position below treelistbox - nListboxYPos = maTlbObjects->GetPosPixel().Y() + maTlbObjects->GetSizePixel().Height() + 4; - maLbDocs->setPosSizePixel( 0, nListboxYPos, 0, 0, PosSizeFlags::Y ); - - // assure that tool box is at least as wide as the tree list box - { - const Size aTlbSize( maTlbObjects->GetOutputSizePixel() ); - if ( aTlbSize.Width() > aTbxSize.Width() ) - { - maToolbox->setPosSizePixel( 0, 0, aTlbSize.Width(), 0, PosSizeFlags::Width ); - aTbxSize = maToolbox->GetOutputSizePixel(); - } - } - - // set min outputsize after all sizes are known - const long nFullHeight = nListboxYPos + maLbDocs->GetSizePixel().Height() + 4; - maSize = GetOutputSizePixel(); - if( maSize.Height() < nFullHeight ) - { - maSize.Height() = nFullHeight; - SetOutputSizePixel( maSize ); - } - maMinSize = maSize; - const long nMinWidth = 2*maToolbox->GetPosPixel().X() + aTbxSize.Width(); // never clip the toolbox - if( nMinWidth > maMinSize.Width() ) - maMinSize.Width() = nMinWidth; - maMinSize.Height() -= 40; - SfxDockingWindow* pDockingParent = dynamic_cast<SfxDockingWindow*>(GetParent()); - if (pDockingParent != nullptr) - pDockingParent->SetMinOutputSizePixel( maMinSize ); - } void SdNavigatorWin::SetUpdateRequestFunctor(const UpdateRequestFunctor& rUpdateRequest) { - mpNavigatorCtrlItem = new SdNavigatorControllerItem( SID_NAVIGATOR_STATE, this, mpBindings, rUpdateRequest); - mpPageNameCtrlItem = new SdPageNameControllerItem( SID_NAVIGATOR_PAGENAME, this, mpBindings); + mpNavigatorCtrlItem = new SdNavigatorControllerItem(SID_NAVIGATOR_STATE, this, mpBindings, rUpdateRequest); + mpPageNameCtrlItem = new SdPageNameControllerItem(SID_NAVIGATOR_PAGENAME, this, mpBindings); // InitTlb; is initiated over Slot if (rUpdateRequest) @@ -160,12 +117,12 @@ SdNavigatorWin::~SdNavigatorWin() void SdNavigatorWin::dispose() { - DELETEZ( mpNavigatorCtrlItem ); - DELETEZ( mpPageNameCtrlItem ); - maToolbox.disposeAndClear(); - maTlbObjects.disposeAndClear(); - maLbDocs.disposeAndClear(); - vcl::Window::dispose(); + DELETEZ(mpNavigatorCtrlItem); + DELETEZ(mpPageNameCtrlItem); + maToolbox.clear(); + maTlbObjects.clear(); + maLbDocs.clear(); + PanelLayout::dispose(); } //when object is marked , fresh the corresponding entry tree . @@ -206,10 +163,11 @@ void SdNavigatorWin::InitTreeLB( const SdDrawDocument* pDoc ) // Disable the shape filter drop down menu when there is a running slide // show. + const sal_uInt16 nShapeId = maToolbox->GetItemId("shapes"); if (pViewShell!=nullptr && sd::SlideShow::IsRunning( pViewShell->GetViewShellBase() )) - maToolbox->EnableItem(TBI_SHAPE_FILTER, false); + maToolbox->EnableItem(nShapeId, false); else - maToolbox->EnableItem(TBI_SHAPE_FILTER); + maToolbox->EnableItem(nShapeId); if( !maTlbObjects->IsEqualToDoc( pDoc ) ) { @@ -265,18 +223,19 @@ sd::DrawDocShell* SdNavigatorWin::GetDrawDocShell( const SdDrawDocument* pDoc ) IMPL_LINK_NOARG(SdNavigatorWin, SelectToolboxHdl, ToolBox *, void) { sal_uInt16 nId = maToolbox->GetCurItemId(); + const OUString sCommand = maToolbox->GetItemCommand(nId); PageJump ePage = PAGE_NONE; - if( nId == TBI_FIRST ) + if (sCommand == "first") ePage = PAGE_FIRST; - else if( nId == TBI_PREVIOUS ) + else if (sCommand == "previous") ePage = PAGE_PREVIOUS; - else if( nId == TBI_NEXT ) + else if (sCommand == "next") ePage = PAGE_NEXT; - else if( nId == TBI_LAST ) + else if (sCommand == "last") ePage = PAGE_LAST; - if( ePage != PAGE_NONE ) + if (ePage != PAGE_NONE) { SfxUInt16Item aItem( SID_NAVIGATOR_PAGE, (sal_uInt16)ePage ); mpBindings->GetDispatcher()->ExecuteList(SID_NAVIGATOR_PAGE, @@ -287,73 +246,68 @@ IMPL_LINK_NOARG(SdNavigatorWin, SelectToolboxHdl, ToolBox *, void) IMPL_LINK( SdNavigatorWin, DropdownClickToolBoxHdl, ToolBox*, pBox, void ) { sal_uInt16 nId = maToolbox->GetCurItemId(); + const OUString sCommand = maToolbox->GetItemCommand(nId); - switch( nId ) + if (sCommand == "dragmode") { - case TBI_DRAGTYPE: - { - // Popup menu is created depending if the document is saved or not - ScopedVclPtrInstance<PopupMenu> pMenu; - - static const char* aHIDs[] = - { - HID_SD_NAVIGATOR_MENU1, - HID_SD_NAVIGATOR_MENU2, - HID_SD_NAVIGATOR_MENU3, - nullptr - }; - - for (sal_uInt16 nID = NAVIGATOR_DRAGTYPE_URL; nID < NAVIGATOR_DRAGTYPE_COUNT; ++nID) - { - sal_uInt16 nRId = GetDragTypeSdResId( (NavigatorDragType)nID, false ); - if( nRId > 0 ) - { - DBG_ASSERT(aHIDs[nID-NAVIGATOR_DRAGTYPE_URL],"HelpId not added!"); - pMenu->InsertItem(nID, SD_RESSTR(nRId), MenuItemBits::RADIOCHECK); - pMenu->SetHelpId(nID, aHIDs[nID - NAVIGATOR_DRAGTYPE_URL]); - } + // Popup menu is created depending if the document is saved or not + ScopedVclPtrInstance<PopupMenu> pMenu; - } - NavDocInfo* pInfo = GetDocInfo(); + static const char* aHIDs[] = + { + HID_SD_NAVIGATOR_MENU1, + HID_SD_NAVIGATOR_MENU2, + HID_SD_NAVIGATOR_MENU3, + nullptr + }; - if( ( pInfo && !pInfo->HasName() ) || !maTlbObjects->IsLinkableSelected() ) + for (sal_uInt16 nID = NAVIGATOR_DRAGTYPE_URL; nID < NAVIGATOR_DRAGTYPE_COUNT; ++nID) + { + sal_uInt16 nRId = GetDragTypeSdResId( (NavigatorDragType)nID, false ); + if( nRId > 0 ) { - pMenu->EnableItem( NAVIGATOR_DRAGTYPE_LINK, false ); - pMenu->EnableItem( NAVIGATOR_DRAGTYPE_URL, false ); - meDragType = NAVIGATOR_DRAGTYPE_EMBEDDED; + DBG_ASSERT(aHIDs[nID-NAVIGATOR_DRAGTYPE_URL],"HelpId not added!"); + pMenu->InsertItem(nID, SD_RESSTR(nRId), MenuItemBits::RADIOCHECK); + pMenu->SetHelpId(nID, aHIDs[nID - NAVIGATOR_DRAGTYPE_URL]); } - pMenu->CheckItem( (sal_uInt16)meDragType ); - pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, MenuSelectHdl ) ); - - pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown ); - pBox->EndSelection(); } - break; + NavDocInfo* pInfo = GetDocInfo(); - case TBI_SHAPE_FILTER: + if( ( pInfo && !pInfo->HasName() ) || !maTlbObjects->IsLinkableSelected() ) { - ScopedVclPtrInstance<PopupMenu> pMenu; - - pMenu->InsertItem( - nShowNamedShapesFilter, - SD_RESSTR(STR_NAVIGATOR_SHOW_NAMED_SHAPES), - MenuItemBits::RADIOCHECK); - pMenu->InsertItem( - nShowAllShapesFilter, - SD_RESSTR(STR_NAVIGATOR_SHOW_ALL_SHAPES), - MenuItemBits::RADIOCHECK); - - if (maTlbObjects->GetShowAllShapes()) - pMenu->CheckItem(nShowAllShapesFilter); - else - pMenu->CheckItem(nShowNamedShapesFilter); - pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, ShapeFilterCallback ) ); - - pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown ); - pBox->EndSelection(); + pMenu->EnableItem( NAVIGATOR_DRAGTYPE_LINK, false ); + pMenu->EnableItem( NAVIGATOR_DRAGTYPE_URL, false ); + meDragType = NAVIGATOR_DRAGTYPE_EMBEDDED; } - break; + + pMenu->CheckItem( (sal_uInt16)meDragType ); + pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, MenuSelectHdl ) ); + + pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown ); + pBox->EndSelection(); + } + else if (sCommand == "shapes") + { + ScopedVclPtrInstance<PopupMenu> pMenu; + + pMenu->InsertItem( + nShowNamedShapesFilter, + SD_RESSTR(STR_NAVIGATOR_SHOW_NAMED_SHAPES), + MenuItemBits::RADIOCHECK); + pMenu->InsertItem( + nShowAllShapesFilter, + SD_RESSTR(STR_NAVIGATOR_SHOW_ALL_SHAPES), + MenuItemBits::RADIOCHECK); + + if (maTlbObjects->GetShowAllShapes()) + pMenu->CheckItem(nShowAllShapesFilter); + else + pMenu->CheckItem(nShowNamedShapesFilter); + pMenu->SetSelectHdl( LINK( this, SdNavigatorWin, ShapeFilterCallback ) ); + + pMenu->Execute( this, maToolbox->GetItemRect( nId ), PopupMenuFlags::ExecuteDown ); + pBox->EndSelection(); } } @@ -518,43 +472,6 @@ IMPL_LINK( SdNavigatorWin, ShapeFilterCallback, Menu *, pMenu, bool ) return false; } -void SdNavigatorWin::Resize() -{ - Size aWinSize( GetOutputSizePixel() ); - if( aWinSize.Height() >= maMinSize.Height() ) - //aWinSize.Width() >= maMinSize.Width() ) - { - Size aDiffSize; - aDiffSize.Width() = aWinSize.Width() - maSize.Width(); - aDiffSize.Height() = aWinSize.Height() - maSize.Height(); - - // change size of Toolbox - Size aObjSize( maToolbox->GetOutputSizePixel() ); - aObjSize.Width() += aDiffSize.Width(); - maToolbox->SetOutputSizePixel( aObjSize ); - - // change size of TreeLB - aObjSize = maTlbObjects->GetSizePixel(); - aObjSize.Width() += aDiffSize.Width(); - aObjSize.Height() = maLbDocs->GetPosPixel().Y() + aDiffSize.Height() - - maTlbObjects->GetPosPixel().Y() - 4; - maTlbObjects->SetSizePixel( aObjSize ); - - Point aPt( 0, aDiffSize.Height() ); - - // move other controls (DocumentLB) - maLbDocs->Hide(); - aObjSize = maLbDocs->GetOutputSizePixel(); - aObjSize.Width() += aDiffSize.Width(); - maLbDocs->SetPosPixel( maLbDocs->GetPosPixel() + aPt ); - maLbDocs->SetOutputSizePixel( aObjSize ); - maLbDocs->Show(); - - maSize = aWinSize; - } - Window::Resize(); -} - bool SdNavigatorWin::InsertFile(const OUString& rFileName) { INetURLObject aURL( rFileName ); @@ -703,11 +620,11 @@ sal_uInt16 SdNavigatorWin::GetDragTypeSdResId( NavigatorDragType eDT, bool bImag case NAVIGATOR_DRAGTYPE_NONE: return( bImage ? 0 : STR_NONE ); case NAVIGATOR_DRAGTYPE_URL: - return( bImage ? TBI_HYPERLINK : STR_DRAGTYPE_URL ); + return( bImage ? IMG_HYPERLINK : STR_DRAGTYPE_URL ); case NAVIGATOR_DRAGTYPE_EMBEDDED: - return( bImage ? TBI_EMBEDDED : STR_DRAGTYPE_EMBEDDED ); + return( bImage ? IMG_EMBEDDED : STR_DRAGTYPE_EMBEDDED ); case NAVIGATOR_DRAGTYPE_LINK: - return( bImage ? TBI_LINK : STR_DRAGTYPE_LINK ); + return( bImage ? IMG_LINK : STR_DRAGTYPE_LINK ); default: OSL_FAIL( "No resource for DragType available!" ); } return 0; @@ -798,26 +715,10 @@ void SdNavigatorWin::KeyInput( const KeyEvent& rKEvt ) } } -void SdNavigatorWin::DataChanged( const DataChangedEvent& rDCEvt ) -{ - if ( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) ) - ApplyImageList(); - - Window::DataChanged( rDCEvt ); -} - void SdNavigatorWin::SetDragImage() { - maToolbox->SetItemImage( TBI_DRAGTYPE, maToolbox->GetImageList().GetImage( GetDragTypeSdResId( meDragType, true ) ) ); -} - -void SdNavigatorWin::ApplyImageList() -{ - - maToolbox->SetImageList( maImageList ); - maToolbox->SetItemImage(TBI_SHAPE_FILTER, Image(BitmapEx(SdResId(BMP_GRAPHIC)))); - - SetDragImage(); + const sal_uInt16 nDragTypeId = maToolbox->GetItemId("dragmode"); + maToolbox->SetItemImage(nDragTypeId, Image(SdResId(GetDragTypeSdResId(meDragType, true)))); } /** @@ -846,39 +747,44 @@ void SdNavigatorControllerItem::StateChanged( sal_uInt16 nSId, NavDocInfo* pInfo = pNavigatorWin->GetDocInfo(); if( pInfo && pInfo->IsActive() ) { + sal_uInt16 nFirstId = pNavigatorWin->maToolbox->GetItemId("first"); + sal_uInt16 nPrevId = pNavigatorWin->maToolbox->GetItemId("previous"); + sal_uInt16 nLastId = pNavigatorWin->maToolbox->GetItemId("last"); + sal_uInt16 nNextId = pNavigatorWin->maToolbox->GetItemId("next"); + // First - if( nState & NavState::BtnFirstEnabled && - !pNavigatorWin->maToolbox->IsItemEnabled( TBI_FIRST ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_FIRST ); - if( nState & NavState::BtnFirstDisabled && - pNavigatorWin->maToolbox->IsItemEnabled( TBI_FIRST ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_FIRST, false ); + if (nState & NavState::BtnFirstEnabled && + !pNavigatorWin->maToolbox->IsItemEnabled(nFirstId)) + pNavigatorWin->maToolbox->EnableItem(nFirstId); + if (nState & NavState::BtnFirstDisabled && + pNavigatorWin->maToolbox->IsItemEnabled(nFirstId)) + pNavigatorWin->maToolbox->EnableItem(nFirstId, false); // Prev - if( nState & NavState::BtnPrevEnabled && - !pNavigatorWin->maToolbox->IsItemEnabled( TBI_PREVIOUS ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_PREVIOUS ); - if( nState & NavState::BtnPrevDisabled && - pNavigatorWin->maToolbox->IsItemEnabled( TBI_PREVIOUS ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_PREVIOUS, false ); + if (nState & NavState::BtnPrevEnabled && + !pNavigatorWin->maToolbox->IsItemEnabled(nPrevId)) + pNavigatorWin->maToolbox->EnableItem(nPrevId); + if (nState & NavState::BtnPrevDisabled && + pNavigatorWin->maToolbox->IsItemEnabled(nPrevId)) + pNavigatorWin->maToolbox->EnableItem(nPrevId, false); // Last - if( nState & NavState::BtnLastEnabled && - !pNavigatorWin->maToolbox->IsItemEnabled( TBI_LAST ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_LAST ); - if( nState & NavState::BtnLastDisabled && - pNavigatorWin->maToolbox->IsItemEnabled( TBI_LAST ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_LAST, false ); + if (nState & NavState::BtnLastEnabled && + !pNavigatorWin->maToolbox->IsItemEnabled(nLastId)) + pNavigatorWin->maToolbox->EnableItem(nLastId); + if (nState & NavState::BtnLastDisabled && + pNavigatorWin->maToolbox->IsItemEnabled(nLastId)) + pNavigatorWin->maToolbox->EnableItem(nLastId, false); // Next - if( nState & NavState::BtnNextEnabled && - !pNavigatorWin->maToolbox->IsItemEnabled( TBI_NEXT ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_NEXT ); - if( nState & NavState::BtnNextDisabled && - pNavigatorWin->maToolbox->IsItemEnabled( TBI_NEXT ) ) - pNavigatorWin->maToolbox->EnableItem( TBI_NEXT, false ); - - if( nState & NavState::TableUpdate ) + if (nState & NavState::BtnNextEnabled && + !pNavigatorWin->maToolbox->IsItemEnabled(nNextId)) + pNavigatorWin->maToolbox->EnableItem(nNextId); + if (nState & NavState::BtnNextDisabled && + pNavigatorWin->maToolbox->IsItemEnabled(nNextId)) + pNavigatorWin->maToolbox->EnableItem(nNextId, false); + + if (nState & NavState::TableUpdate) { // InitTlb; is initiated by Slot if (maUpdateRequest) |