1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sd.hxx" 26 27 #ifdef SD_DLLIMPLEMENTATION 28 #undef SD_DLLIMPLEMENTATION 29 #endif 30 #include <sfx2/docfile.hxx> 31 #include <tools/urlobj.hxx> 32 #include <unotools/pathoptions.hxx> 33 34 #include "sdpage.hxx" 35 #include "Outliner.hxx" 36 #include "res_bmp.hrc" 37 38 #include <vcl/svapp.hxx> 39 40 #include "dlgassim.hxx" 41 42 SdPageListControl::SdPageListControl( 43 ::Window* pParent, 44 const ResId& rResId ) 45 : SvTreeListBox(pParent, rResId) 46 { 47 // Tree-ListBox mit Linien versehen 48 SetStyle( GetStyle() | WB_TABSTOP | WB_BORDER | WB_HASLINES | 49 WB_HASBUTTONS | WB_HASLINESATROOT | 50 WB_HSCROLL | // #31562# 51 WB_HASBUTTONSATROOT ); 52 53 SetNodeDefaultImages (); 54 m_pCheckButton = new SvLBoxButtonData(this); 55 EnableCheckButton (m_pCheckButton); 56 57 SetCheckButtonHdl( LINK(this,SdPageListControl,CheckButtonClickHdl) ); 58 } 59 60 IMPL_LINK( SdPageListControl, CheckButtonClickHdl, SvLBoxButtonData *, EMPTYARG ) 61 { 62 SvLBoxTreeList* pTreeModel = GetModel(); 63 SvLBoxEntry* pEntry = pTreeModel->First(); 64 65 while( pEntry ) 66 { 67 if(pTreeModel->IsAtRootDepth(pEntry) && GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED ) 68 return 0; 69 pEntry = pTreeModel->Next( pEntry ); 70 } 71 72 pEntry = pTreeModel->First(); 73 SetCheckButtonState( pEntry, SV_BUTTON_CHECKED ); 74 75 return 0; 76 } 77 78 SdPageListControl::~SdPageListControl() 79 { 80 delete m_pCheckButton; 81 } 82 83 void SdPageListControl::Clear() 84 { 85 SvTreeListBox::Clear(); 86 } 87 88 SvLBoxEntry* SdPageListControl::InsertPage( const String& rPageName ) 89 { 90 SvLBoxEntry* pEntry = new SvLBoxEntry; 91 92 pEntry->AddItem( new SvLBoxButton( pEntry, SvLBoxButtonKind_enabledCheckbox, 93 0, m_pCheckButton)); 94 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! 95 pEntry->AddItem( new SvLBoxString( pEntry, 0, rPageName ) ); 96 97 GetModel()->Insert( pEntry ); 98 99 return pEntry; 100 } 101 102 void SdPageListControl::InsertTitle( SvLBoxEntry* pParent, const String& rTitle ) 103 { 104 SvLBoxEntry* pEntry = new SvLBoxEntry; 105 pEntry->AddItem( new SvLBoxString( pEntry, 0, String() ) ); 106 pEntry->AddItem( new SvLBoxContextBmp( pEntry, 0, Image(), Image(), 0)); // Sonst Puff! 107 pEntry->AddItem( new SvLBoxString( pEntry, 0, rTitle ) ); 108 GetModel()->Insert( pEntry,pParent ); 109 } 110 111 void SdPageListControl::Fill( SdDrawDocument* pDoc ) 112 { 113 Outliner* pOutliner = pDoc->GetInternalOutliner(); 114 115 sal_uInt16 nPage = 0; 116 const sal_uInt16 nMaxPages = pDoc->GetPageCount(); 117 while( nPage < nMaxPages ) 118 { 119 SdPage* pPage = (SdPage*) pDoc->GetPage( nPage ); 120 if( pPage->GetPageKind() == PK_STANDARD ) 121 { 122 SvLBoxEntry* pEntry = InsertPage( pPage->GetName() ); 123 SetCheckButtonState(pEntry, SvButtonState( SV_BUTTON_CHECKED ) ); 124 125 SdrTextObj* pTO = (SdrTextObj*)pPage->GetPresObj(PRESOBJ_TEXT); 126 if(!pTO) 127 { 128 // Ermittelt das SdrTextObject mit dem Layout Text dieser Seite 129 const sal_uLong nObjectCount = pPage->GetObjCount(); 130 for (sal_uLong nObject = 0; nObject < nObjectCount; nObject++) 131 { 132 SdrObject* pObject = pPage->GetObj(nObject); 133 if (pObject->GetObjInventor() == SdrInventor && pObject->GetObjIdentifier() == OBJ_OUTLINETEXT) 134 { 135 pTO = (SdrTextObj*)pObject; 136 break; 137 } 138 } 139 } 140 141 if (pTO && !pTO->IsEmptyPresObj()) 142 { 143 OutlinerParaObject* pOPO = pTO->GetOutlinerParaObject(); 144 if (pOPO) 145 { 146 pOutliner->Clear(); 147 pOutliner->SetText( *pOPO ); 148 149 sal_uLong nCount = pOutliner->GetParagraphCount(); 150 151 Paragraph* pPara = NULL; 152 153 for (sal_uLong nPara = 0; nPara < nCount; nPara++) 154 { 155 pPara = pOutliner->GetParagraph(nPara); 156 if(pPara && pOutliner->GetDepth( (sal_uInt16) nPara ) == 0 ) 157 { 158 String aParaText = pOutliner->GetText(pPara); 159 if(aParaText.Len() != 0) 160 InsertTitle( pEntry, aParaText ); 161 } 162 } 163 } 164 } 165 } 166 nPage++; 167 } 168 169 pOutliner->Clear(); 170 } 171 172 sal_uInt16 SdPageListControl::GetSelectedPage() 173 { 174 SvLBoxEntry* pSelEntry = GetCurEntry(); 175 sal_uInt16 nPage = 0; 176 177 if ( pSelEntry ) 178 { 179 SvLBoxTreeList* pTreeModel = GetModel(); 180 SvLBoxEntry* pEntry = pTreeModel->First(); 181 182 while( pEntry && pEntry != pSelEntry ) 183 { 184 if(pTreeModel->IsAtRootDepth(pEntry)) 185 nPage++; 186 pEntry = pTreeModel->Next( pEntry ); 187 } 188 189 if(!pTreeModel->IsAtRootDepth(pSelEntry)) 190 nPage--; 191 } 192 return nPage; 193 } 194 195 sal_Bool SdPageListControl::IsPageChecked( sal_uInt16 nPage ) 196 { 197 SvLBoxEntry* pEntry = GetModel()->GetEntry(nPage); 198 return pEntry?(sal_Bool)(GetCheckButtonState( pEntry ) == SV_BUTTON_CHECKED): sal_False; 199 } 200 201 void SdPageListControl::DataChanged( const DataChangedEvent& rDCEvt ) 202 { 203 SvTreeListBox::DataChanged( rDCEvt ); 204 } 205 206