office-gobmx/sd/source/ui/dlg/dlgassim.cxx
2010-06-14 18:49:32 +02:00

209 lines
6.5 KiB
C++
Executable file

/*************************************************************************
*
* 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 );
}