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 31 32 #include "eetext.hxx" 33 34 #include <svx/dialogs.hrc> 35 #include <editeng/flstitem.hxx> 36 #include <svx/drawitem.hxx> 37 #include <svl/style.hxx> 38 #include <svx/tabline.hxx> 39 #include <editeng/bulitem.hxx> 40 #include <editeng/eeitem.hxx> 41 #include <editeng/brshitem.hxx> 42 #include <vcl/graph.hxx> 43 #include <editeng/lrspitem.hxx> 44 #include <editeng/numitem.hxx> 45 #include <svl/cjkoptions.hxx> 46 47 #include "DrawDocShell.hxx" 48 #include "glob.hrc" 49 #include "sdresid.hxx" 50 #include "prltempl.hxx" 51 #include "prltempl.hrc" 52 #include "enumdlg.hrc" 53 //#include "enumdlg.hxx" 54 #include "bulmaper.hxx" 55 #include <svl/intitem.hxx> 56 #include <svx/svxgrahicitem.hxx> 57 #include <svx/flagsdef.hxx> 58 #include "drawdoc.hxx" 59 #define IS_OUTLINE(x) (x >= PO_OUTLINE_1 && x <= PO_OUTLINE_9) 60 61 /************************************************************************* 62 |* 63 |* Konstruktor des Tab-Dialogs: Fuegt die Seiten zum Dialog hinzu 64 |* 65 \************************************************************************/ 66 67 SdPresLayoutTemplateDlg::SdPresLayoutTemplateDlg( SfxObjectShell* pDocSh, 68 Window* pParent, 69 SdResId DlgId, 70 SfxStyleSheetBase& rStyleBase, 71 PresentationObjects _ePO, 72 SfxStyleSheetBasePool* pSSPool ) : 73 SfxTabDialog ( pParent, DlgId ), 74 mpDocShell ( pDocSh ), 75 ePO ( _ePO ), 76 aInputSet ( *rStyleBase.GetItemSet().GetPool(), SID_PARAM_NUM_PRESET, SID_PARAM_CUR_NUM_LEVEL ), 77 pOutSet ( NULL ), 78 pOrgSet ( &rStyleBase.GetItemSet() ) 79 { 80 if( IS_OUTLINE(ePO)) 81 { 82 // Leider sind die Itemsets unserer Stylesheets nicht discret.. 83 const sal_uInt16* pPtr = pOrgSet->GetRanges(); 84 sal_uInt16 p1, p2; 85 while( *pPtr ) 86 { 87 p1 = pPtr[0]; 88 p2 = pPtr[1]; 89 90 // erstmal das ganze discret machen 91 while(pPtr[2] && (pPtr[2] - p2 == 1)) 92 { 93 p2 = pPtr[3]; 94 pPtr += 2; 95 } 96 aInputSet.MergeRange( p1, p2 ); 97 pPtr += 2; 98 } 99 100 aInputSet.Put( rStyleBase.GetItemSet() ); 101 102 // need parent-relationship 103 const SfxItemSet* pParentItemSet = rStyleBase.GetItemSet().GetParent();; 104 if( pParentItemSet ) 105 aInputSet.SetParent( pParentItemSet ); 106 107 pOutSet = new SfxItemSet( rStyleBase.GetItemSet() ); 108 pOutSet->ClearItem(); 109 110 const SfxPoolItem *pItem = NULL; 111 112 // Fals in diesem Stylesheet kein Bullet Item ist, holen wir uns 113 // das aus dem 'Outline 1' Stylesheet. 114 if( SFX_ITEM_SET != aInputSet.GetItemState(EE_PARA_NUMBULLET, sal_False, &pItem )) 115 { 116 String aStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE))); 117 aStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) ); 118 SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( aStyleName, SD_STYLE_FAMILY_PSEUDO); 119 120 if(pFirstStyleSheet) 121 if( SFX_ITEM_SET == pFirstStyleSheet->GetItemSet().GetItemState(EE_PARA_NUMBULLET, sal_False, &pItem) ) 122 aInputSet.Put( *pItem ); 123 } 124 125 // gewaehlte Ebene im Dialog vorselektieren 126 aInputSet.Put( SfxUInt16Item( SID_PARAM_CUR_NUM_LEVEL, 1<<GetOutlineLevel())); 127 128 SetInputSet( &aInputSet ); 129 } 130 else 131 SetInputSet( pOrgSet ); 132 133 FreeResource(); 134 135 SvxColorTableItem aColorTableItem(*( (const SvxColorTableItem*) 136 ( mpDocShell->GetItem( SID_COLOR_TABLE ) ) ) ); 137 SvxGradientListItem aGradientListItem(*( (const SvxGradientListItem*) 138 ( mpDocShell->GetItem( SID_GRADIENT_LIST ) ) ) ); 139 SvxBitmapListItem aBitmapListItem(*( (const SvxBitmapListItem*) 140 ( mpDocShell->GetItem( SID_BITMAP_LIST ) ) ) ); 141 SvxHatchListItem aHatchListItem(*( (const SvxHatchListItem*) 142 ( mpDocShell->GetItem( SID_HATCH_LIST ) ) ) ); 143 SvxDashListItem aDashListItem(*( (const SvxDashListItem*) 144 ( mpDocShell->GetItem( SID_DASH_LIST ) ) ) ); 145 SvxLineEndListItem aLineEndListItem(*( (const SvxLineEndListItem*) 146 ( mpDocShell->GetItem( SID_LINEEND_LIST ) ) ) ); 147 148 pColorTab = aColorTableItem.GetColorTable(); 149 pDashList = aDashListItem.GetDashList(); 150 pLineEndList = aLineEndListItem.GetLineEndList(); 151 pGradientList = aGradientListItem.GetGradientList(); 152 pHatchingList = aHatchListItem.GetHatchList(); 153 pBitmapList = aBitmapListItem.GetBitmapList(); 154 155 switch( DlgId.GetId() ) 156 { 157 case TAB_PRES_LAYOUT_TEMPLATE: 158 { 159 AddTabPage( RID_SVXPAGE_LINE); 160 AddTabPage( RID_SVXPAGE_AREA); 161 AddTabPage( RID_SVXPAGE_SHADOW); 162 AddTabPage( RID_SVXPAGE_TRANSPARENCE); 163 AddTabPage( RID_SVXPAGE_CHAR_NAME ); 164 AddTabPage( RID_SVXPAGE_CHAR_EFFECTS ); 165 AddTabPage( RID_SVXPAGE_STD_PARAGRAPH ); 166 AddTabPage( RID_SVXPAGE_TEXTATTR ); 167 AddTabPage( RID_SVXPAGE_PICK_BULLET ); 168 AddTabPage( RID_SVXPAGE_PICK_SINGLE_NUM ); 169 AddTabPage( RID_SVXPAGE_PICK_BMP ); 170 AddTabPage( RID_SVXPAGE_NUM_OPTIONS ); 171 AddTabPage( RID_SVXPAGE_TABULATOR ); 172 } 173 break; 174 175 case TAB_PRES_LAYOUT_TEMPLATE_BACKGROUND: // background 176 AddTabPage( RID_SVXPAGE_AREA); 177 break; 178 } 179 180 // #112490# the tabpages Alignment, Tabs and Asian Typography are very 181 // usefull, except for the background style 182 if( DlgId.GetId() != TAB_PRES_LAYOUT_TEMPLATE_BACKGROUND ) 183 { 184 SvtCJKOptions aCJKOptions; 185 if( aCJKOptions.IsAsianTypographyEnabled() ) 186 AddTabPage( RID_SVXPAGE_PARA_ASIAN ); 187 else 188 RemoveTabPage( RID_SVXPAGE_PARA_ASIAN ); 189 190 AddTabPage( RID_SVXPAGE_ALIGN_PARAGRAPH ); 191 } 192 193 // Titel setzen und 194 // entsprechende Seiten zum Dialog hinzufuegen 195 String aTitle; 196 197 switch( ePO ) 198 { 199 case PO_TITLE: 200 aTitle = String(SdResId( STR_PSEUDOSHEET_TITLE )); 201 break; 202 203 case PO_SUBTITLE: 204 aTitle = String(SdResId( STR_PSEUDOSHEET_SUBTITLE )); 205 break; 206 207 case PO_BACKGROUND: 208 aTitle = String(SdResId( STR_PSEUDOSHEET_BACKGROUND )); 209 break; 210 211 case PO_BACKGROUNDOBJECTS: 212 aTitle = String(SdResId( STR_PSEUDOSHEET_BACKGROUNDOBJECTS )); 213 break; 214 215 case PO_OUTLINE_1: 216 case PO_OUTLINE_2: 217 case PO_OUTLINE_3: 218 case PO_OUTLINE_4: 219 case PO_OUTLINE_5: 220 case PO_OUTLINE_6: 221 case PO_OUTLINE_7: 222 case PO_OUTLINE_8: 223 case PO_OUTLINE_9: 224 aTitle = String(SdResId( STR_PSEUDOSHEET_OUTLINE )); 225 aTitle.Append( sal_Unicode(' ') ); 226 aTitle.Append( UniString::CreateFromInt32( ePO - PO_OUTLINE_1 + 1 ) ); 227 break; 228 229 case PO_NOTES: 230 aTitle = String(SdResId( STR_PSEUDOSHEET_NOTES )); 231 break; 232 } 233 SetText( aTitle ); 234 235 nDlgType = 1; // Vorlagen-Dialog 236 nPageType = 0; 237 nPos = 0; 238 239 nColorTableState = CT_NONE; 240 nBitmapListState = CT_NONE; 241 nGradientListState = CT_NONE; 242 nHatchingListState = CT_NONE; 243 } 244 245 // ----------------------------------------------------------------------- 246 247 SdPresLayoutTemplateDlg::~SdPresLayoutTemplateDlg() 248 { 249 delete pOutSet; 250 } 251 252 // ----------------------------------------------------------------------- 253 254 void SdPresLayoutTemplateDlg::PageCreated( sal_uInt16 nId, SfxTabPage &rPage ) 255 { SfxAllItemSet aSet(*(aInputSet.GetPool())); 256 switch( nId ) 257 { 258 case RID_SVXPAGE_LINE: 259 { 260 aSet.Put (SvxColorTableItem(pColorTab,SID_COLOR_TABLE)); 261 aSet.Put (SvxDashListItem(pDashList,SID_DASH_LIST)); 262 aSet.Put (SvxLineEndListItem(pLineEndList,SID_LINEEND_LIST)); 263 aSet.Put (SfxUInt16Item(SID_DLG_TYPE,nDlgType)); 264 265 rPage.PageCreated(aSet); 266 } 267 break; 268 269 case RID_SVXPAGE_AREA: 270 { 271 aSet.Put (SvxColorTableItem(pColorTab,SID_COLOR_TABLE)); 272 aSet.Put (SvxGradientListItem(pGradientList,SID_GRADIENT_LIST)); 273 aSet.Put (SvxHatchListItem(pHatchingList,SID_HATCH_LIST)); 274 aSet.Put (SvxBitmapListItem(pBitmapList,SID_BITMAP_LIST)); 275 aSet.Put (SfxUInt16Item(SID_PAGE_TYPE,nPageType)); 276 aSet.Put (SfxUInt16Item(SID_DLG_TYPE,nDlgType)); 277 aSet.Put (SfxUInt16Item(SID_TABPAGE_POS,nPos)); 278 rPage.PageCreated(aSet); 279 280 } 281 break; 282 283 case RID_SVXPAGE_SHADOW: 284 aSet.Put (SvxColorTableItem(pColorTab,SID_COLOR_TABLE)); //add CHINA001 285 aSet.Put (SfxUInt16Item(SID_PAGE_TYPE,nPageType)); 286 aSet.Put (SfxUInt16Item(SID_DLG_TYPE,nDlgType)); 287 rPage.PageCreated(aSet); 288 break; 289 290 case RID_SVXPAGE_TRANSPARENCE: 291 aSet.Put (SfxUInt16Item(SID_PAGE_TYPE,nPageType)); 292 aSet.Put (SfxUInt16Item(SID_DLG_TYPE,nDlgType)); 293 rPage.PageCreated(aSet); 294 break; 295 296 case RID_SVXPAGE_CHAR_NAME: 297 { 298 SvxFontListItem aItem(*( (const SvxFontListItem*) 299 ( mpDocShell->GetItem( SID_ATTR_CHAR_FONTLIST) ) ) ); 300 301 aSet.Put (SvxFontListItem( aItem.GetFontList(), SID_ATTR_CHAR_FONTLIST)); 302 rPage.PageCreated(aSet); 303 } 304 break; 305 306 case RID_SVXPAGE_CHAR_EFFECTS: 307 aSet.Put (SfxUInt16Item(SID_DISABLE_CTL,DISABLE_CASEMAP)); 308 rPage.PageCreated(aSet); 309 break; 310 311 case RID_SVXPAGE_STD_PARAGRAPH: 312 break; 313 } 314 } 315 316 const SfxItemSet* SdPresLayoutTemplateDlg::GetOutputItemSet() const 317 { 318 if( pOutSet ) 319 { 320 pOutSet->Put( *SfxTabDialog::GetOutputItemSet() ); 321 322 const SvxNumBulletItem *pSvxNumBulletItem = NULL; 323 if( SFX_ITEM_SET == pOutSet->GetItemState(EE_PARA_NUMBULLET, sal_False, (const SfxPoolItem**)&pSvxNumBulletItem )) 324 SdBulletMapper::MapFontsInNumRule( *pSvxNumBulletItem->GetNumRule(), *pOutSet ); 325 return pOutSet; 326 } 327 else 328 return SfxTabDialog::GetOutputItemSet(); 329 } 330 331 // --------------------------------------------------------------------- 332 // --------------------------------------------------------------------- 333 sal_uInt16 SdPresLayoutTemplateDlg::GetOutlineLevel() const 334 { 335 switch( ePO ) 336 { 337 case PO_OUTLINE_1: return 0; 338 case PO_OUTLINE_2: return 1; 339 case PO_OUTLINE_3: return 2; 340 case PO_OUTLINE_4: return 3; 341 case PO_OUTLINE_5: return 4; 342 case PO_OUTLINE_6: return 5; 343 case PO_OUTLINE_7: return 6; 344 case PO_OUTLINE_8: return 7; 345 case PO_OUTLINE_9: return 8; 346 default: 347 DBG_ASSERT( sal_False, "Falscher Po! [CL]"); 348 } 349 return 0; 350 } 351 352 353 354