| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sd.hxx" |
| |
| #include "LayerTabBar.hxx" |
| #include <svx/svdlayer.hxx> |
| #include <svx/svdpagv.hxx> |
| #include <vcl/msgbox.hxx> |
| #include <sfx2/dispatch.hxx> |
| |
| |
| #include "sdattr.hxx" |
| #include "app.hxx" |
| #include "helpids.h" |
| #include "app.hrc" |
| #include "glob.hrc" |
| #include "strings.hrc" |
| #include "res_bmp.hrc" |
| #include "DrawViewShell.hxx" |
| #include "Window.hxx" |
| #include "View.hxx" |
| #include "drawdoc.hxx" |
| #include "sdresid.hxx" |
| #include "DrawDocShell.hxx" |
| #include "drawview.hxx" |
| #include "undolayer.hxx" |
| |
| |
| namespace sd { |
| |
| #define SWITCH_TIMEOUT 20 |
| |
| |
| /************************************************************************* |
| |* |
| |* Standard-Konstruktor |
| |* |
| \************************************************************************/ |
| |
| LayerTabBar::LayerTabBar(DrawViewShell* pViewSh, Window* pParent) |
| : TabBar( pParent, WinBits( WB_BORDER | WB_3DLOOK | WB_SCROLL | WB_SIZEABLE ) ), |
| DropTargetHelper( this ), |
| pDrViewSh(pViewSh) |
| { |
| EnableEditMode(); |
| SetSizePixel(Size(0, 0)); |
| SetMaxPageWidth( 150 ); |
| SetHelpId( HID_SD_TABBAR_LAYERS ); |
| } |
| |
| |
| LayerTabBar::LayerTabBar ( |
| DrawViewShell* pViewSh, |
| Window* pParent, |
| const ResId& rResId) |
| : TabBar (pParent, rResId.GetWinBits()), |
| DropTargetHelper( this ), |
| pDrViewSh(pViewSh) |
| { |
| EnableEditMode(); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Destruktor |
| |* |
| \************************************************************************/ |
| |
| LayerTabBar::~LayerTabBar() |
| { |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::Select() |
| { |
| SfxDispatcher* pDispatcher = pDrViewSh->GetViewFrame()->GetDispatcher(); |
| pDispatcher->Execute(SID_SWITCHLAYER, SFX_CALLMODE_ASYNCHRON); |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::MouseButtonDown(const MouseEvent& rMEvt) |
| { |
| sal_Bool bSetPageID=sal_False; |
| |
| if (rMEvt.IsLeft() && !rMEvt.IsMod1() && !rMEvt.IsMod2()) |
| { |
| Point aPosPixel = rMEvt.GetPosPixel(); |
| sal_uInt16 aLayerId = GetPageId( PixelToLogic(aPosPixel) ); |
| |
| if (aLayerId == 0) |
| { |
| SfxDispatcher* pDispatcher = pDrViewSh->GetViewFrame()->GetDispatcher(); |
| pDispatcher->Execute(SID_INSERTLAYER, SFX_CALLMODE_SYNCHRON); |
| |
| bSetPageID=sal_True; |
| } |
| else if (rMEvt.IsShift()) |
| { |
| // Toggle zw. Layer sichtbar / unsichtbar |
| String aName(GetPageText(aLayerId)); |
| SdrPageView* pPV = pDrViewSh->GetView()->GetSdrPageView(); |
| sal_Bool bVisible = pPV->IsLayerVisible(aName); |
| pPV->SetLayerVisible(aName, !bVisible); |
| pDrViewSh->ResetActualLayer(); |
| } |
| } |
| |
| // If you insert a new layer you must not call TabBar::MouseButtonDown(rMEvt); |
| // because you want to activate the new layer |
| if( !bSetPageID ) |
| TabBar::MouseButtonDown(rMEvt); |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::DoubleClick() |
| { |
| if (GetCurPageId() != 0) |
| { |
| SfxDispatcher* pDispatcher = pDrViewSh->GetViewFrame()->GetDispatcher(); |
| pDispatcher->Execute( SID_MODIFYLAYER, SFX_CALLMODE_SYNCHRON ); |
| } |
| } |
| |
| |
| /************************************************************************* |
| |* |
| |* AcceptDrop-Event |
| |* |
| \************************************************************************/ |
| |
| sal_Int8 LayerTabBar::AcceptDrop( const AcceptDropEvent& rEvt ) |
| { |
| sal_Int8 nRet = DND_ACTION_NONE; |
| |
| if( rEvt.mbLeaving ) |
| EndSwitchPage(); |
| |
| if( !pDrViewSh->GetDocSh()->IsReadOnly() ) |
| { |
| sal_uInt16 nPageId = SDRPAGE_NOTFOUND; |
| Point aPos( PixelToLogic( rEvt.maPosPixel ) ); |
| sal_uInt16 nLayerId = pDrViewSh->GetView()->GetDoc()->GetLayerAdmin().GetLayerID( GetPageText( GetPageId( aPos ) ), sal_False ); |
| |
| nRet = pDrViewSh->AcceptDrop( rEvt, *this, NULL, nPageId, nLayerId ); |
| |
| SwitchPage( aPos ); |
| } |
| |
| return nRet; |
| } |
| |
| /************************************************************************* |
| |* |
| |* ExecuteDrop-Event |
| |* |
| \************************************************************************/ |
| |
| sal_Int8 LayerTabBar::ExecuteDrop( const ExecuteDropEvent& rEvt ) |
| { |
| sal_uInt16 nPageId = SDRPAGE_NOTFOUND; |
| sal_uInt16 nLayerId = pDrViewSh->GetView()->GetDoc()->GetLayerAdmin().GetLayerID( GetPageText( GetPageId( PixelToLogic( rEvt.maPosPixel ) ) ), sal_False ); |
| sal_Int8 nRet = pDrViewSh->ExecuteDrop( rEvt, *this, NULL, nPageId, nLayerId ); |
| |
| EndSwitchPage(); |
| |
| return nRet; |
| |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::Command(const CommandEvent& rCEvt) |
| { |
| if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU ) |
| { |
| SfxDispatcher* pDispatcher = pDrViewSh->GetViewFrame()->GetDispatcher(); |
| pDispatcher->ExecutePopup(SdResId(RID_LAYERTAB_POPUP)); |
| } |
| } |
| |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| long LayerTabBar::StartRenaming() |
| { |
| sal_Bool bOK = sal_True; |
| String aLayerName = GetPageText( GetEditPageId() ); |
| String aLayoutLayer ( SdResId(STR_LAYER_LAYOUT) ); |
| String aControlsLayer ( SdResId(STR_LAYER_CONTROLS) ); |
| String aMeasureLinesLayer ( SdResId(STR_LAYER_MEASURELINES) ); |
| String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) ); |
| String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) ); |
| |
| if ( aLayerName == aLayoutLayer || aLayerName == aControlsLayer || |
| aLayerName == aMeasureLinesLayer || |
| aLayerName == aBackgroundLayer || aLayerName == aBackgroundObjLayer ) |
| { |
| // Diese Namen duerfen nicht veraendert werden |
| bOK = sal_False; |
| } |
| else |
| { |
| ::sd::View* pView = pDrViewSh->GetView(); |
| |
| if ( pView->IsTextEdit() ) |
| { |
| pView->SdrEndTextEdit(); |
| } |
| } |
| |
| return(bOK); |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| long LayerTabBar::AllowRenaming() |
| { |
| sal_Bool bOK = sal_True; |
| |
| // Ueberpruefung auf schon vorhandene Namen |
| ::sd::View* pView = pDrViewSh->GetView(); |
| SdDrawDocument* pDoc = pView->GetDoc(); |
| String aLayerName = pView->GetActiveLayer(); |
| SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); |
| String aNewName( GetEditText() ); |
| |
| if ( aNewName.Len() == 0 || |
| (rLayerAdmin.GetLayer( aNewName, sal_False ) && aLayerName != aNewName) ) |
| { |
| // Name ist schon vorhanden |
| WarningBox aWarningBox( &pDrViewSh->GetViewFrame()->GetWindow(), WinBits( WB_OK ), |
| String(SdResId( STR_WARN_NAME_DUPLICATE ) ) ); |
| aWarningBox.Execute(); |
| bOK = sal_False; |
| } |
| |
| if (bOK) |
| { |
| String aLayoutLayer ( SdResId(STR_LAYER_LAYOUT) ); |
| String aControlsLayer ( SdResId(STR_LAYER_CONTROLS) ); |
| String aMeasureLinesLayer ( SdResId(STR_LAYER_MEASURELINES) ); |
| String aBackgroundLayer( SdResId(STR_LAYER_BCKGRND) ); |
| String aBackgroundObjLayer( SdResId(STR_LAYER_BCKGRNDOBJ) ); |
| |
| if ( aNewName == aLayoutLayer || aNewName == aControlsLayer || |
| aNewName == aMeasureLinesLayer || |
| aNewName == aBackgroundLayer || aNewName == aBackgroundObjLayer ) |
| { |
| // Diese Namen duerfen nicht vergeben werden |
| bOK = sal_False; |
| } |
| } |
| |
| return(bOK); |
| } |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::EndRenaming() |
| { |
| if( !IsEditModeCanceled() ) |
| { |
| ::sd::View* pView = pDrViewSh->GetView(); |
| DrawView* pDrView = PTR_CAST( DrawView, pView ); |
| |
| SdDrawDocument* pDoc = pView->GetDoc(); |
| String aLayerName = pView->GetActiveLayer(); |
| SdrLayerAdmin& rLayerAdmin = pDoc->GetLayerAdmin(); |
| SdrLayer* pLayer = rLayerAdmin.GetLayer(aLayerName, sal_False); |
| |
| if (pLayer) |
| { |
| String aNewName( GetEditText() ); |
| |
| DBG_ASSERT( pDrView, "Rename layer undo action is only working with a SdDrawView" ); |
| if( pDrView ) |
| { |
| ::svl::IUndoManager* pManager = pDoc->GetDocSh()->GetUndoManager(); |
| SdLayerModifyUndoAction* pAction = new SdLayerModifyUndoAction( |
| pDoc, |
| pLayer, |
| aLayerName, |
| pLayer->GetTitle(), |
| pLayer->GetDescription(), |
| pDrView->IsLayerVisible(aLayerName), |
| pDrView->IsLayerLocked(aLayerName), |
| pDrView->IsLayerPrintable(aLayerName), |
| aNewName, |
| pLayer->GetTitle(), |
| pLayer->GetDescription(), |
| pDrView->IsLayerVisible(aLayerName), |
| pDrView->IsLayerLocked(aLayerName), |
| pDrView->IsLayerPrintable(aLayerName) |
| ); |
| pManager->AddUndoAction( pAction ); |
| } |
| |
| // Zuerst View benachrichtigen, da innerhalb von SetName() schon |
| // ResetActualLayer() gerufen wird und an der View der Layer dann |
| // schon bekannt sein muss. |
| pView->SetActiveLayer(aNewName); |
| pLayer->SetName(aNewName); |
| pDoc->SetChanged(sal_True); |
| } |
| } |
| } |
| |
| |
| /************************************************************************* |
| |* |
| \************************************************************************/ |
| |
| void LayerTabBar::ActivatePage() |
| { |
| if ( /*IsInSwitching*/ 1 && pDrViewSh!=NULL) |
| { |
| |
| SfxDispatcher* pDispatcher = pDrViewSh->GetViewFrame()->GetDispatcher(); |
| pDispatcher->Execute(SID_SWITCHLAYER, SFX_CALLMODE_ASYNCHRON); |
| } |
| } |
| |
| |
| |
| |
| void LayerTabBar::SendActivatePageEvent (void) |
| { |
| CallEventListeners (VCLEVENT_TABBAR_PAGEACTIVATED, |
| reinterpret_cast<void*>(GetCurPageId())); |
| } |
| |
| |
| |
| |
| void LayerTabBar::SendDeactivatePageEvent (void) |
| { |
| CallEventListeners (VCLEVENT_TABBAR_PAGEDEACTIVATED, |
| reinterpret_cast<void*>(GetCurPageId())); |
| } |
| |
| } // end of namespace sd |