1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sd.hxx" 30 31 #ifdef SD_DLLIMPLEMENTATION 32 #undef SD_DLLIMPLEMENTATION 33 #endif 34 #include <sfx2/docfile.hxx> 35 #include <tools/urlobj.hxx> 36 #include <unotools/pathoptions.hxx> 37 38 #include "sdpage.hxx" 39 #include "Outliner.hxx" 40 #include "res_bmp.hrc" 41 42 #include <vcl/svapp.hxx> 43 44 #include "dlgassim.hxx" 45 46 SdPageListControl::SdPageListControl( 47 ::Window* pParent, 48 const ResId& rResId ) 49 : SvTreeListBox(pParent, rResId) 50 { 51 // Tree-ListBox mit Linien versehen 52 SetStyle( GetStyle() | WB_TABSTOP | WB_BORDER | WB_HASLINES | 53 WB_HASBUTTONS | WB_HASLINESATROOT | 54 WB_HSCROLL | // #31562# 55 WB_HASBUTTONSATROOT ); 56 57 SetNodeDefaultImages (); 58 m_pCheckButton = new SvLBoxButtonData(this); 59 EnableCheckButton (m_pCheckButton); 60 61 SetCheckButtonHdl( LINK(this,SdPageListControl,CheckButtonClickHdl) ); 62 } 63 64 IMPL_LINK( SdPageListControl, CheckButtonClickHdl, SvLBoxButtonData *, EMPTYARG ) 65 { 66 SvLBoxTreeList* pTreeModel = GetModel(); 67 SvLBoxEntry* pEntry = pTreeModel->First(); 68 69 while( pEntry ) 70 { 71 if(pTreeModel->IsAtRootDepth(pEntry) && GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED ) 72 return 0; 73 pEntry = pTreeModel->Next( pEntry ); 74 } 75 76 pEntry = pTreeModel->First(); 77 SetCheckButtonState( pEntry, SV_BUTTON_CHECKED ); 78 79 return 0; 80 } 81 82 SdPageListControl::~SdPageListControl() 83 { 84 delete m_pCheckButton; 85 } 86 87 void SdPageListControl::Clear() 88 { 89 SvTreeListBox::Clear(); 90 } 91 92 SvLBoxEntry* SdPageListControl::InsertPage( const String& rPageName ) 93 { 94 SvLBoxEntry* pEntry = new SvLBoxEntry; 95 96 pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 97 0, m_pCheckButton)); 98 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! 99 pEntry->AddItem( new SvLBoxString( pEntry, 0, rPageName ) ); 100 101 GetModel()->Insert( pEntry ); 102 103 return pEntry; 104 } 105 106 void SdPageListControl::InsertTitle( SvLBoxEntry* pParent, const String& rTitle ) 107 { 108 SvLBoxEntry* pEntry = new SvLBoxEntry; 109 pEntry->AddItem( new SvLBoxString( pEntry, 0, String() ) ); 110 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! 111 pEntry->AddItem( new SvLBoxString( pEntry, 0, rTitle ) ); 112 GetModel()->Insert( pEntry,pParent ); 113 } 114 115 void SdPageListControl::Fill( SdDrawDocument* pDoc ) 116 { 117 Outliner* pOutliner = pDoc->GetInternalOutliner(); 118 119 sal_uInt16 nPage = 0; 120 const sal_uInt16 nMaxPages = pDoc->GetPageCount(); 121 while( nPage < nMaxPages ) 122 { 123 SdPage* pPage = (SdPage*) pDoc->GetPage( nPage ); 124 if( pPage->GetPageKind() == PK_STANDARD ) 125 { 126 SvLBoxEntry* pEntry = InsertPage( pPage->GetName() ); 127 SetCheckButtonState(pEntry, SvButtonState( SV_BUTTON_CHECKED ) ); 128 129 SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TEXT); 130 if(!pTO) 131 { 132 // Ermittelt das SdrTextObject mit dem Layout Text dieser Seite 133 const sal_uLong nObjectCount = pPage->GetObjCount(); 134 for (sal_uLong nObject = 0; nObject < nObjectCount; nObject++) 135 { 136 SdrObject* pObject = pPage->GetObj(nObject); 137 if (pObject->GetObjInventor() == SdrInventor && pObject->GetObjIdentifier() == OBJ_OUTLINETEXT) 138 { 139 pTO = (SdrTextObj*)pObject; 140 break; 141 } 142 } 143 } 144 145 if (pTO && !pTO->IsEmptyPresObj()) 146 { 147 OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject(); 148 if (pOPO) 149 { 150 pOutliner->Clear(); 151 pOutliner->SetText( *pOPO ); 152 153 sal_uLong nCount = pOutliner->GetParagraphCount(); 154 155 Paragraph* pPara = NULL; 156 157 for (sal_uLong nPara = 0; nPara < nCount; nPara++) 158 { 159 pPara = pOutliner->GetParagraph(nPara); 160 if(pPara && pOutliner->GetDepth( (sal_uInt16) nPara ) == 0 ) 161 { 162 String aParaText = pOutliner->GetText(pPara); 163 if(aParaText.Len() != 0) 164 InsertTitle( pEntry, aParaText ); 165 } 166 } 167 } 168 } 169 } 170 nPage++; 171 } 172 173 pOutliner->Clear(); 174 } 175 176 sal_uInt16 SdPageListControl::GetSelectedPage() 177 { 178 SvLBoxEntry* pSelEntry = GetCurEntry(); 179 sal_uInt16 nPage = 0; 180 181 if ( pSelEntry ) 182 { 183 SvLBoxTreeList* pTreeModel = GetModel(); 184 SvLBoxEntry* pEntry = pTreeModel->First(); 185 186 while( pEntry && pEntry != pSelEntry ) 187 { 188 if(pTreeModel->IsAtRootDepth(pEntry)) 189 nPage++; 190 pEntry = pTreeModel->Next( pEntry ); 191 } 192 193 if(!pTreeModel->IsAtRootDepth(pSelEntry)) 194 nPage--; 195 } 196 return nPage; 197 } 198 199 sal_Bool SdPageListControl::IsPageChecked( sal_uInt16 nPage ) 200 { 201 SvLBoxEntry* pEntry = GetModel()->GetEntry(nPage); 202 return pEntry?(sal_Bool)(GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED): sal_False; 203 } 204 205 void SdPageListControl::DataChanged( const DataChangedEvent& rDCEvt ) 206 { 207 SvTreeListBox::DataChanged( rDCEvt ); 208 } 209 210