diff options
Diffstat (limited to 'sd/source/ui/dlg/dlgassim.cxx')
-rwxr-xr-x | sd/source/ui/dlg/dlgassim.cxx | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/sd/source/ui/dlg/dlgassim.cxx b/sd/source/ui/dlg/dlgassim.cxx new file mode 100755 index 000000000000..f9dcf5046189 --- /dev/null +++ b/sd/source/ui/dlg/dlgassim.cxx @@ -0,0 +1,209 @@ +/************************************************************************* + * + * 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" + +#ifdef SD_DLLIMPLEMENTATION +#undef SD_DLLIMPLEMENTATION +#endif +#include <sfx2/docfile.hxx> +#include <tools/urlobj.hxx> +#include <unotools/pathoptions.hxx> + +#include "sdpage.hxx" +#include "Outliner.hxx" +#include "res_bmp.hrc" + +#include <vcl/svapp.hxx> + +#include "dlgassim.hxx" + +SdPageListControl::SdPageListControl( + ::Window* pParent, + const ResId& rResId ) + : SvTreeListBox(pParent, rResId) +{ + // Tree-ListBox mit Linien versehen + SetWindowBits( WinBits( WB_TABSTOP | WB_BORDER | WB_HASLINES | + WB_HASBUTTONS | WB_HASLINESATROOT | + WB_HSCROLL | // #31562# + WB_HASBUTTONSATROOT ) ); + + SetNodeDefaultImages (); + m_pCheckButton = new SvLBoxButtonData(this); + EnableCheckButton (m_pCheckButton); + + SetCheckButtonHdl( LINK(this,SdPageListControl,CheckButtonClickHdl) ); +} + +IMPL_LINK( SdPageListControl, CheckButtonClickHdl, SvLBoxButtonData *, EMPTYARG ) +{ + SvLBoxTreeList* pTreeModel = GetModel(); + SvLBoxEntry* pEntry = pTreeModel->First(); + + while( pEntry ) + { + if(pTreeModel->IsAtRootDepth(pEntry) && GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED ) + return 0; + pEntry = pTreeModel->Next( pEntry ); + } + + pEntry = pTreeModel->First(); + SetCheckButtonState( pEntry, SV_BUTTON_CHECKED ); + + return 0; +} + +SdPageListControl::~SdPageListControl() +{ + delete m_pCheckButton; +} + +void SdPageListControl::Clear() +{ + SvTreeListBox::Clear(); +} + +SvLBoxEntry* SdPageListControl::InsertPage( const String& rPageName ) +{ + SvLBoxEntry* pEntry = new SvLBoxEntry; + + pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, + 0, m_pCheckButton)); + pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! + pEntry->AddItem( new SvLBoxString( pEntry, 0, rPageName ) ); + + GetModel()->Insert( pEntry ); + + return pEntry; +} + +void SdPageListControl::InsertTitle( SvLBoxEntry* pParent, const String& rTitle ) +{ + SvLBoxEntry* pEntry = new SvLBoxEntry; + pEntry->AddItem( new SvLBoxString( pEntry, 0, String() ) ); + pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! + pEntry->AddItem( new SvLBoxString( pEntry, 0, rTitle ) ); + GetModel()->Insert( pEntry,pParent ); +} + +void SdPageListControl::Fill( SdDrawDocument* pDoc ) +{ + Outliner* pOutliner = pDoc->GetInternalOutliner(); + + USHORT nPage = 0; + const USHORT nMaxPages = pDoc->GetPageCount(); + while( nPage < nMaxPages ) + { + SdPage* pPage = (SdPage*) pDoc->GetPage( nPage ); + if( pPage->GetPageKind() == PK_STANDARD ) + { + SvLBoxEntry* pEntry = InsertPage( pPage->GetName() ); + SetCheckButtonState(pEntry, SvButtonState( SV_BUTTON_CHECKED ) ); + + SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TEXT); + if(!pTO) + { + // Ermittelt das SdrTextObject mit dem Layout Text dieser Seite + const ULONG nObjectCount = pPage->GetObjCount(); + for (ULONG nObject = 0; nObject < nObjectCount; nObject++) + { + SdrObject* pObject = pPage->GetObj(nObject); + if (pObject->GetObjInventor() == SdrInventor && pObject->GetObjIdentifier() == OBJ_OUTLINETEXT) + { + pTO = (SdrTextObj*)pObject; + break; + } + } + } + + if (pTO && !pTO->IsEmptyPresObj()) + { + OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject(); + if (pOPO) + { + pOutliner->Clear(); + pOutliner->SetText( *pOPO ); + + ULONG nCount = pOutliner->GetParagraphCount(); + + Paragraph* pPara = NULL; + + for (ULONG nPara = 0; nPara < nCount; nPara++) + { + pPara = pOutliner->GetParagraph(nPara); + if(pPara && pOutliner->GetDepth( (USHORT) nPara ) == 0 ) + { + String aParaText = pOutliner->GetText(pPara); + if(aParaText.Len() != 0) + InsertTitle( pEntry, aParaText ); + } + } + } + } + } + nPage++; + } + + pOutliner->Clear(); +} + +USHORT SdPageListControl::GetSelectedPage() +{ + SvLBoxEntry* pSelEntry = GetCurEntry(); + USHORT nPage = 0; + + if ( pSelEntry ) + { + SvLBoxTreeList* pTreeModel = GetModel(); + SvLBoxEntry* pEntry = pTreeModel->First(); + + while( pEntry && pEntry != pSelEntry ) + { + if(pTreeModel->IsAtRootDepth(pEntry)) + nPage++; + pEntry = pTreeModel->Next( pEntry ); + } + + if(!pTreeModel->IsAtRootDepth(pSelEntry)) + nPage--; + } + return nPage; +} + +BOOL SdPageListControl::IsPageChecked( USHORT nPage ) +{ + SvLBoxEntry* pEntry = GetModel()->GetEntry(nPage); + return pEntry?(BOOL)(GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED): FALSE; +} + +void SdPageListControl::DataChanged( const DataChangedEvent& rDCEvt ) +{ + SvTreeListBox::DataChanged( rDCEvt ); +} + |