Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <hintids.hxx>
21 : #include <comphelper/string.hxx>
22 : #include <vcl/msgbox.hxx>
23 : #include <svl/stritem.hxx>
24 : #include <svl/intitem.hxx>
25 : #include <editeng/keepitem.hxx>
26 : #include <editeng/brkitem.hxx>
27 : #include <editeng/ulspitem.hxx>
28 : #include <editeng/frmdiritem.hxx>
29 : #include <svl/ctloptions.hxx>
30 : #include <swmodule.hxx>
31 : #include <fmtornt.hxx>
32 : #include <fmtpdsc.hxx>
33 : #include <fmtlsplt.hxx>
34 :
35 : #include <svtools/htmlcfg.hxx>
36 : #include <fmtrowsplt.hxx>
37 : #include <svx/htmlmode.hxx>
38 :
39 : #include "access.hrc"
40 :
41 : #include <docsh.hxx>
42 : #include <wrtsh.hxx>
43 : #include <view.hxx>
44 : #include <viewopt.hxx>
45 : #include <uitool.hxx>
46 : #include <frmatr.hxx>
47 : #include <tabledlg.hxx>
48 : #include <tablepg.hxx>
49 : #include <tablemgr.hxx>
50 : #include <pagedesc.hxx>
51 : #include <uiitems.hxx>
52 : #include <poolfmt.hxx>
53 : #include <SwStyleNameMapper.hxx>
54 :
55 : #include <cmdid.h>
56 : #include <tabledlg.hrc>
57 : #include <table.hrc>
58 : #include <svx/svxids.hrc>
59 : #include <svx/dialogs.hrc>
60 : #include <svx/flagsdef.hxx>
61 : #include <svx/svxdlg.hxx>
62 :
63 : using namespace ::com::sun::star;
64 :
65 :
66 0 : SwFormatTablePage::SwFormatTablePage( Window* pParent, const SfxItemSet& rSet ) :
67 : SfxTabPage(pParent, SW_RES( TP_FORMAT_TABLE ), rSet ),
68 : aOptionsFL(this, SW_RES( FL_OPTIONS )),
69 : aNameFT(this, SW_RES( FT_NAME )),
70 : aNameED(this, SW_RES( ED_NAME )),
71 : aWidthFT(this, SW_RES( FT_WIDTH )),
72 : aWidthMF(this, SW_RES( ED_WIDTH )),
73 : aRelWidthCB(this, SW_RES( CB_REL_WIDTH )),
74 :
75 : aPosFL(this, SW_RES( FL_POS )),
76 : aFullBtn(this, SW_RES( RB_FULL )),
77 : aLeftBtn(this, SW_RES( RB_LEFT )),
78 : aFromLeftBtn(this, SW_RES( RB_FROM_LEFT )),
79 : aRightBtn(this, SW_RES( RB_RIGHT )),
80 : aCenterBtn(this, SW_RES( RB_CENTER )),
81 : aFreeBtn(this, SW_RES( RB_FREE )),
82 :
83 : aDistFL(this, SW_RES( FL_DIST )),
84 : aLeftFT(this, SW_RES( FT_LEFT_DIST )),
85 : aLeftMF(this, SW_RES( ED_LEFT_DIST )),
86 : aRightFT(this, SW_RES( FT_RIGHT_DIST )),
87 : aRightMF(this, SW_RES( ED_RIGHT_DIST )),
88 : aTopFT (this, SW_RES( FT_TOP_DIST )),
89 : aTopMF(this, SW_RES( ED_TOP_DIST )),
90 : aBottomFT(this, SW_RES( FT_BOTTOM_DIST )),
91 : aBottomMF(this, SW_RES( ED_BOTTOM_DIST )),
92 :
93 : aPropertiesFL(this, SW_RES( FL_PROPERTIES )),
94 : aTextDirectionFT(this, SW_RES( FT_TEXTORIENTATION )),
95 : aTextDirectionLB(this, SW_RES( LB_TEXTORIENTATION )),
96 :
97 : pTblData(0),
98 : nSaveWidth(0),
99 : nMinTableWidth(MINLAY),
100 : bModified(sal_False),
101 : bFull(0),
102 0 : bHtmlMode(sal_False)
103 : {
104 0 : FreeResource();
105 0 : SetExchangeSupport();
106 :
107 : const SfxPoolItem* pItem;
108 0 : if(SFX_ITEM_SET == rSet.GetItemState(SID_HTML_MODE, sal_False, &pItem))
109 0 : bHtmlMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON);
110 :
111 0 : sal_Bool bCTL = SW_MOD()->GetCTLOptions().IsCTLFontEnabled();
112 0 : if( !bHtmlMode && bCTL )
113 : {
114 0 : aPropertiesFL.Show();
115 0 : aTextDirectionFT.Show();
116 0 : aTextDirectionLB.Show();
117 : }
118 :
119 0 : Init();
120 0 : }
121 :
122 :
123 0 : void SwFormatTablePage::Init()
124 : {
125 0 : aLeftMF.MetricField::SetMin(-999999);
126 0 : aRightMF.MetricField::SetMin(-999999);
127 :
128 : // handler
129 0 : Link aLk = LINK( this, SwFormatTablePage, AutoClickHdl );
130 0 : aFullBtn.SetClickHdl( aLk );
131 0 : aFreeBtn.SetClickHdl( aLk );
132 0 : aLeftBtn.SetClickHdl( aLk );
133 0 : aFromLeftBtn.SetClickHdl( aLk );
134 0 : aRightBtn.SetClickHdl( aLk );
135 0 : aCenterBtn.SetClickHdl( aLk );
136 :
137 0 : aLk = LINK( this, SwFormatTablePage, UpDownLoseFocusHdl );
138 0 : aTopMF.SetUpHdl( aLk );
139 0 : aBottomMF.SetUpHdl( aLk );
140 0 : aRightMF.SetUpHdl( aLk );
141 0 : aLeftMF.SetUpHdl( aLk );
142 0 : aWidthMF.SetUpHdl( aLk );
143 :
144 0 : aTopMF.SetDownHdl( aLk );
145 0 : aBottomMF.SetDownHdl( aLk );
146 0 : aRightMF.SetDownHdl( aLk );
147 0 : aLeftMF.SetDownHdl( aLk );
148 0 : aWidthMF.SetDownHdl( aLk );
149 :
150 0 : aTopMF.SetLoseFocusHdl( aLk );
151 0 : aBottomMF.SetLoseFocusHdl( aLk );
152 0 : aRightMF.SetLoseFocusHdl( aLk );
153 0 : aLeftMF.SetLoseFocusHdl( aLk );
154 0 : aWidthMF.SetLoseFocusHdl( aLk );
155 :
156 0 : aRelWidthCB.SetClickHdl(LINK( this, SwFormatTablePage, RelWidthClickHdl ));
157 0 : }
158 :
159 : /*------------------------------------------------------------------------*/
160 :
161 0 : IMPL_LINK( SwFormatTablePage, RelWidthClickHdl, CheckBox *, pBtn )
162 : {
163 : OSL_ENSURE(pTblData, "table data not available?");
164 0 : sal_Bool bIsChecked = pBtn->IsChecked();
165 0 : sal_Int64 nLeft = aLeftMF.DenormalizePercent(aLeftMF.GetValue(FUNIT_TWIP ));
166 0 : sal_Int64 nRight = aRightMF.DenormalizePercent(aRightMF.GetValue(FUNIT_TWIP ));
167 0 : aWidthMF.ShowPercent(bIsChecked);
168 0 : aLeftMF.ShowPercent(bIsChecked);
169 0 : aRightMF.ShowPercent(bIsChecked);
170 :
171 0 : if (bIsChecked)
172 : {
173 0 : aWidthMF.SetRefValue(pTblData->GetSpace());
174 0 : aLeftMF.SetRefValue(pTblData->GetSpace());
175 0 : aRightMF.SetRefValue(pTblData->GetSpace());
176 0 : aLeftMF.MetricField::SetMin(0); // wird vom Percentfield ueberschrieben
177 0 : aRightMF.MetricField::SetMin(0);// -""-
178 0 : aLeftMF.MetricField::SetMax(99); //
179 0 : aRightMF.MetricField::SetMax(99);//
180 0 : aLeftMF.SetPrcntValue(aLeftMF.NormalizePercent(nLeft ), FUNIT_TWIP );
181 0 : aRightMF.SetPrcntValue(aRightMF.NormalizePercent(nRight ), FUNIT_TWIP );
182 : }
183 : else
184 0 : ModifyHdl(&aLeftMF); // Werte wieder korrigieren
185 :
186 0 : if(aFreeBtn.IsChecked())
187 : {
188 0 : sal_Bool bEnable = !pBtn->IsChecked();
189 0 : aRightMF.Enable(bEnable);
190 0 : aRightFT.Enable(bEnable);
191 : }
192 0 : bModified = sal_True;
193 :
194 0 : return 0;
195 : }
196 :
197 :
198 0 : IMPL_LINK( SwFormatTablePage, AutoClickHdl, CheckBox *, pBox )
199 : {
200 0 : sal_Bool bRestore = sal_True,
201 0 : bLeftEnable = sal_False,
202 0 : bRightEnable= sal_False,
203 0 : bWidthEnable= sal_False,
204 0 : bOthers = sal_True;
205 0 : if( (RadioButton *) pBox == &aFullBtn )
206 : {
207 0 : aLeftMF.SetPrcntValue(0);
208 0 : aRightMF.SetPrcntValue(0);
209 0 : nSaveWidth = static_cast< SwTwips >(aWidthMF.DenormalizePercent(aWidthMF.GetValue(FUNIT_TWIP )));
210 0 : aWidthMF.SetPrcntValue(aWidthMF.NormalizePercent(pTblData->GetSpace() ), FUNIT_TWIP );
211 0 : bFull = sal_True;
212 0 : bRestore = sal_False;
213 : }
214 0 : else if( (RadioButton *) pBox == &aLeftBtn )
215 : {
216 0 : bRightEnable = bWidthEnable = sal_True;
217 0 : aLeftMF.SetPrcntValue(0);
218 : }
219 0 : else if( (RadioButton *) pBox == &aFromLeftBtn )
220 : {
221 0 : bLeftEnable = bWidthEnable = sal_True;
222 0 : aRightMF.SetPrcntValue(0);
223 : }
224 0 : else if( (RadioButton *) pBox == &aRightBtn )
225 : {
226 0 : bLeftEnable = bWidthEnable = sal_True;
227 0 : aRightMF.SetPrcntValue(0);
228 : }
229 0 : else if( ( RadioButton * ) pBox == &aCenterBtn )
230 : {
231 0 : bLeftEnable = bWidthEnable = sal_True;
232 : }
233 0 : else if( ( RadioButton * ) pBox == &aFreeBtn )
234 : {
235 0 : RightModify();
236 0 : bLeftEnable = sal_True;
237 0 : bWidthEnable = sal_True;
238 0 : bOthers = sal_False;
239 : }
240 0 : aLeftMF.Enable(bLeftEnable);
241 0 : aLeftFT.Enable(bLeftEnable);
242 0 : aWidthMF.Enable(bWidthEnable);
243 0 : aWidthFT.Enable(bWidthEnable);
244 0 : if ( bOthers )
245 : {
246 0 : aRightMF.Enable(bRightEnable);
247 0 : aRightFT.Enable(bRightEnable);
248 0 : aRelWidthCB.Enable(bWidthEnable);
249 : }
250 :
251 0 : if(bFull && bRestore)
252 : {
253 : // nachdem auf autom. geschaltet wurde, wurde die Breite gemerkt,
254 : // um sie beim Zurueckschalten restaurieren zu koennen
255 0 : bFull = sal_False;
256 0 : aWidthMF.SetPrcntValue(aWidthMF.NormalizePercent(nSaveWidth ), FUNIT_TWIP );
257 : }
258 0 : ModifyHdl(&aWidthMF);
259 0 : bModified = sal_True;
260 0 : return 0;
261 : }
262 :
263 : /*----------------------------------------------------------------------*/
264 0 : void SwFormatTablePage::RightModify()
265 : {
266 0 : if(aFreeBtn.IsChecked())
267 : {
268 0 : sal_Bool bEnable = aRightMF.GetValue() == 0;
269 0 : aRelWidthCB.Enable(bEnable);
270 0 : if ( !bEnable )
271 : {
272 0 : aRelWidthCB.Check(sal_False);
273 0 : RelWidthClickHdl(&aRelWidthCB);
274 : }
275 0 : bEnable = aRelWidthCB.IsChecked();
276 0 : aRightMF.Enable(!bEnable);
277 0 : aRightFT.Enable(!bEnable);
278 : }
279 0 : }
280 :
281 :
282 0 : IMPL_LINK_INLINE_START( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
283 : {
284 0 : if( &aRightMF == pEdit)
285 0 : RightModify();
286 0 : ModifyHdl( pEdit );
287 0 : return 0;
288 : }
289 0 : IMPL_LINK_INLINE_END( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
290 :
291 0 : void SwFormatTablePage::ModifyHdl( Edit* pEdit )
292 : {
293 :
294 0 : SwTwips nCurWidth = static_cast< SwTwips >(aWidthMF.DenormalizePercent(aWidthMF.GetValue( FUNIT_TWIP )));
295 0 : SwTwips nPrevWidth = nCurWidth;
296 0 : SwTwips nRight = static_cast< SwTwips >(aRightMF.DenormalizePercent(aRightMF.GetValue( FUNIT_TWIP )));
297 0 : SwTwips nLeft = static_cast< SwTwips >(aLeftMF.DenormalizePercent(aLeftMF.GetValue( FUNIT_TWIP )));
298 : SwTwips nDiff;
299 :
300 0 : if( pEdit == &aWidthMF )
301 : {
302 0 : if( nCurWidth < MINLAY )
303 0 : nCurWidth = MINLAY;
304 0 : nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
305 : //rechtsbuendig nur linken Rand veraendern
306 0 : if(aRightBtn.IsChecked())
307 0 : nLeft -= nDiff;
308 : //linksbuendig nur rechten Rand veraendern
309 0 : else if(aLeftBtn.IsChecked())
310 0 : nRight -= nDiff;
311 : //linker Rand und Breite erlaubt - erst rechts - dann links
312 0 : else if(aFromLeftBtn.IsChecked())
313 : {
314 0 : if( nRight >= nDiff )
315 0 : nRight -= nDiff;
316 : else
317 : {
318 0 : nDiff -= nRight;
319 0 : nRight = 0;
320 0 : if(nLeft >= nDiff)
321 0 : nLeft -= nDiff;
322 : else
323 : {
324 0 : nRight += nLeft - nDiff;
325 0 : nLeft = 0;
326 0 : nCurWidth = pTblData->GetSpace();
327 : }
328 :
329 : }
330 : }
331 : //zentriert beide Seiten gleichmaessig veraendern
332 0 : else if(aCenterBtn.IsChecked())
333 : {
334 0 : if((nLeft != nRight))
335 : {
336 0 : nDiff += nLeft + nRight;
337 0 : nLeft = nDiff/2;
338 0 : nRight = nDiff/2;
339 : }
340 : else
341 : {
342 0 : nLeft -= nDiff/2;
343 0 : nRight -= nDiff/2;
344 : }
345 : }
346 : //freie Ausrichtung: beide Raender verkleinern
347 0 : else if(aFreeBtn.IsChecked())
348 : {
349 0 : nLeft -= nDiff/2;
350 0 : nRight -= nDiff/2;
351 : }
352 : }
353 0 : if( pEdit == &aRightMF )
354 : {
355 :
356 0 : if( nRight + nLeft > pTblData->GetSpace() - MINLAY )
357 0 : nRight = pTblData->GetSpace() -nLeft - MINLAY;
358 :
359 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
360 : }
361 0 : if( pEdit == &aLeftMF )
362 : {
363 0 : if(!aFromLeftBtn.IsChecked())
364 : {
365 0 : sal_Bool bCenter = aCenterBtn.IsChecked();
366 0 : if( bCenter )
367 0 : nRight = nLeft;
368 0 : if(nRight + nLeft > pTblData->GetSpace() - MINLAY )
369 : {
370 0 : nLeft = bCenter ? (pTblData->GetSpace() - MINLAY) /2 :
371 0 : (pTblData->GetSpace() - MINLAY) - nRight;
372 0 : nRight = bCenter ? (pTblData->GetSpace() - MINLAY) /2 : nRight;
373 : }
374 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
375 : }
376 : else
377 : {
378 : //hier wird bei Aenderung an der linken Seite zuerst der
379 : //rechte Rand veraendert, dann die Breite
380 0 : nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
381 :
382 0 : nRight -= nDiff;
383 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
384 : }
385 : }
386 0 : if (nCurWidth != nPrevWidth )
387 0 : aWidthMF.SetPrcntValue( aWidthMF.NormalizePercent( nCurWidth ), FUNIT_TWIP );
388 0 : aRightMF.SetPrcntValue( aRightMF.NormalizePercent( nRight ), FUNIT_TWIP );
389 0 : aLeftMF.SetPrcntValue( aLeftMF.NormalizePercent( nLeft ), FUNIT_TWIP );
390 0 : bModified = sal_True;
391 0 : }
392 :
393 :
394 0 : SfxTabPage* SwFormatTablePage::Create( Window* pParent,
395 : const SfxItemSet& rAttrSet)
396 : {
397 0 : return new SwFormatTablePage( pParent, rAttrSet );
398 : }
399 :
400 :
401 0 : sal_Bool SwFormatTablePage::FillItemSet( SfxItemSet& rCoreSet )
402 : {
403 : // Testen, ob eins der Control noch den Focus hat
404 0 : if(aWidthMF.HasFocus())
405 0 : ModifyHdl(&aWidthMF);
406 0 : else if(aLeftMF.HasFocus())
407 0 : ModifyHdl(&aLeftMF);
408 0 : else if(aRightMF.HasFocus())
409 0 : ModifyHdl(&aRightMF);
410 0 : else if(aTopMF.HasFocus())
411 0 : ModifyHdl(&aTopMF);
412 0 : else if(aBottomMF.HasFocus())
413 0 : ModifyHdl(&aBottomMF);
414 :
415 0 : if(bModified)
416 : {
417 0 : if( aBottomMF.GetText() != aBottomMF.GetSavedValue() ||
418 0 : aTopMF.GetText() != aTopMF.GetSavedValue() )
419 : {
420 0 : SvxULSpaceItem aULSpace(RES_UL_SPACE);
421 : aULSpace.SetUpper( (sal_uInt16) aTopMF.Denormalize(
422 0 : aTopMF.GetValue( FUNIT_TWIP )));
423 : aULSpace.SetLower( (sal_uInt16) aBottomMF.Denormalize(
424 0 : aBottomMF.GetValue( FUNIT_TWIP )));
425 0 : rCoreSet.Put(aULSpace);
426 : }
427 :
428 : }
429 0 : if(aNameED.GetText() != aNameED.GetSavedValue())
430 : {
431 0 : rCoreSet.Put(SfxStringItem( FN_PARAM_TABLE_NAME, aNameED.GetText()));
432 0 : bModified = sal_True;
433 : }
434 :
435 : sal_uInt16 nPos;
436 0 : if( aTextDirectionLB.IsVisible() &&
437 0 : ( nPos = aTextDirectionLB.GetSelectEntryPos() ) !=
438 0 : aTextDirectionLB.GetSavedValue() )
439 : {
440 0 : sal_uInt32 nDirection = (sal_uInt32)(sal_uIntPtr)aTextDirectionLB.GetEntryData( nPos );
441 0 : rCoreSet.Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
442 0 : bModified = sal_True;
443 : }
444 :
445 0 : return bModified;
446 : }
447 :
448 :
449 0 : void SwFormatTablePage::Reset( const SfxItemSet& )
450 : {
451 0 : const SfxItemSet& rSet = GetItemSet();
452 : const SfxPoolItem* pItem;
453 :
454 0 : if(bHtmlMode)
455 : {
456 0 : aNameED .Disable();
457 0 : aTopFT .Hide();
458 0 : aTopMF .Hide();
459 0 : aBottomFT.Hide();
460 0 : aBottomMF.Hide();
461 0 : aFreeBtn.Enable(sal_False);
462 : }
463 0 : FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
464 0 : SetMetric( aWidthMF, aMetric );
465 0 : SetMetric( aRightMF, aMetric );
466 0 : SetMetric( aLeftMF, aMetric );
467 0 : SetMetric( aTopMF, aMetric );
468 0 : SetMetric( aBottomMF, aMetric );
469 :
470 : //Name
471 0 : if(SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_TABLE_NAME, sal_False, &pItem ))
472 : {
473 0 : aNameED.SetText(((const SfxStringItem*)pItem)->GetValue());
474 0 : aNameED.SaveValue();
475 : }
476 :
477 0 : if(SFX_ITEM_SET == rSet.GetItemState( FN_TABLE_REP, sal_False, &pItem ))
478 : {
479 0 : pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
480 0 : nMinTableWidth = pTblData->GetColCount() * MINLAY;
481 :
482 0 : if(pTblData->GetWidthPercent())
483 : {
484 0 : aRelWidthCB.Check(sal_True);
485 0 : RelWidthClickHdl(&aRelWidthCB);
486 0 : aWidthMF.SetPrcntValue(pTblData->GetWidthPercent(), FUNIT_CUSTOM);
487 :
488 0 : aWidthMF.SaveValue();
489 0 : nSaveWidth = static_cast< SwTwips >(aWidthMF.GetValue(FUNIT_CUSTOM));
490 : }
491 : else
492 : {
493 : aWidthMF.SetPrcntValue(aWidthMF.NormalizePercent(
494 0 : pTblData->GetWidth()), FUNIT_TWIP);
495 0 : aWidthMF.SaveValue();
496 0 : nSaveWidth = pTblData->GetWidth();
497 0 : nMinTableWidth = Min( nSaveWidth, nMinTableWidth );
498 : }
499 :
500 0 : aWidthMF.SetRefValue(pTblData->GetSpace());
501 0 : aWidthMF.SetLast(aWidthMF.NormalizePercent( pTblData->GetSpace() ));
502 0 : aLeftMF.SetLast(aLeftMF.NormalizePercent( pTblData->GetSpace() ));
503 0 : aRightMF.SetLast(aRightMF.NormalizePercent( pTblData->GetSpace() ));
504 :
505 : aLeftMF.SetPrcntValue(aLeftMF.NormalizePercent(
506 0 : pTblData->GetLeftSpace()), FUNIT_TWIP);
507 : aRightMF.SetPrcntValue(aRightMF.NormalizePercent(
508 0 : pTblData->GetRightSpace()), FUNIT_TWIP);
509 0 : aLeftMF.SaveValue();
510 0 : aRightMF.SaveValue();
511 :
512 0 : nOldAlign = pTblData->GetAlign();
513 :
514 0 : sal_Bool bSetRight = sal_False, bRightEnable = sal_False,
515 0 : bSetLeft = sal_False, bLeftEnable = sal_False;
516 0 : switch( nOldAlign )
517 : {
518 : case text::HoriOrientation::NONE:
519 0 : aFreeBtn.Check();
520 0 : if(aRelWidthCB.IsChecked())
521 0 : bSetRight = sal_True;
522 0 : break;
523 : case text::HoriOrientation::FULL:
524 : {
525 0 : bSetRight = bSetLeft = sal_True;
526 0 : aFullBtn.Check();
527 0 : aWidthMF.Enable(sal_False);
528 0 : aRelWidthCB.Enable(sal_False);
529 0 : aWidthFT.Enable(sal_False);
530 : }
531 0 : break;
532 : case text::HoriOrientation::LEFT:
533 : {
534 0 : bSetLeft = sal_True;
535 0 : aLeftBtn.Check();
536 : }
537 0 : break;
538 : case text::HoriOrientation::LEFT_AND_WIDTH :
539 : {
540 0 : bSetRight = sal_True;
541 0 : aFromLeftBtn.Check();
542 : }
543 0 : break;
544 : case text::HoriOrientation::RIGHT:
545 : {
546 0 : bSetRight = sal_True;
547 0 : aRightBtn.Check();
548 : }
549 0 : break;
550 : case text::HoriOrientation::CENTER:
551 : {
552 0 : bSetRight = sal_True;
553 0 : aCenterBtn.Check();
554 : }
555 0 : break;
556 : }
557 0 : if ( bSetRight )
558 : {
559 0 : aRightMF.Enable(bRightEnable);
560 0 : aRightFT.Enable(bRightEnable);
561 : }
562 0 : if ( bSetLeft )
563 : {
564 0 : aLeftMF.Enable(bLeftEnable);
565 0 : aLeftFT.Enable(bLeftEnable);
566 : }
567 :
568 : }
569 :
570 : //Raender
571 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_UL_SPACE, sal_False,&pItem ))
572 : {
573 : aTopMF.SetValue(aTopMF.Normalize(
574 0 : ((const SvxULSpaceItem*)pItem)->GetUpper()), FUNIT_TWIP);
575 : aBottomMF.SetValue(aBottomMF.Normalize(
576 0 : ((const SvxULSpaceItem*)pItem)->GetLower()), FUNIT_TWIP);
577 0 : aTopMF.SaveValue();
578 0 : aBottomMF.SaveValue();
579 : }
580 :
581 : //text direction
582 0 : if( SFX_ITEM_SET == rSet.GetItemState( RES_FRAMEDIR, sal_True, &pItem ) )
583 : {
584 0 : sal_uIntPtr nVal = ((SvxFrameDirectionItem*)pItem)->GetValue();
585 0 : sal_uInt16 nPos = aTextDirectionLB.GetEntryPos( (void*) nVal );
586 0 : aTextDirectionLB.SelectEntryPos( nPos );
587 0 : aTextDirectionLB.SaveValue();
588 : }
589 :
590 0 : aWidthMF.SetMax( 2*aWidthMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
591 0 : aRightMF.SetMax( aRightMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
592 0 : aLeftMF.SetMax( aLeftMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
593 0 : aWidthMF.SetMin( aWidthMF.NormalizePercent( nMinTableWidth ), FUNIT_TWIP );
594 :
595 0 : }
596 :
597 :
598 0 : void SwFormatTablePage::ActivatePage( const SfxItemSet& rSet )
599 : {
600 : OSL_ENSURE(pTblData, "table data not available?");
601 0 : if(SFX_ITEM_SET == rSet.GetItemState( FN_TABLE_REP ))
602 : {
603 0 : SwTwips nCurWidth = text::HoriOrientation::FULL != pTblData->GetAlign() ?
604 0 : pTblData->GetWidth() :
605 0 : pTblData->GetSpace();
606 0 : if(pTblData->GetWidthPercent() == 0 &&
607 0 : nCurWidth != aWidthMF.DenormalizePercent(aWidthMF.GetValue(FUNIT_TWIP )))
608 : {
609 : aWidthMF.SetPrcntValue(aWidthMF.NormalizePercent(
610 0 : nCurWidth), FUNIT_TWIP);
611 0 : aWidthMF.SaveValue();
612 0 : nSaveWidth = nCurWidth;
613 : aLeftMF.SetPrcntValue(aLeftMF.NormalizePercent(
614 0 : pTblData->GetLeftSpace()), FUNIT_TWIP);
615 0 : aLeftMF.SaveValue();
616 : aRightMF.SetPrcntValue(aRightMF.NormalizePercent(
617 0 : pTblData->GetRightSpace()), FUNIT_TWIP);
618 0 : aRightMF.SaveValue();
619 : }
620 : }
621 :
622 0 : }
623 :
624 0 : int SwFormatTablePage::DeactivatePage( SfxItemSet* _pSet )
625 : {
626 : // os: VCL sorgt nicht dafuer, dass das aktive Control im
627 : // dialog bei OK den focus verliert
628 0 : aNameED.GrabFocus();
629 : // Test des Tabellennamens auf Leerzeichen
630 0 : String sTblName = aNameED.GetText();
631 0 : if(sTblName.Search(' ') != STRING_NOTFOUND)
632 : {
633 0 : InfoBox(this, SW_RES(MSG_WRONG_TABLENAME)).Execute();
634 0 : aNameED.GrabFocus();
635 0 : return KEEP_PAGE;
636 : }
637 0 : if(_pSet)
638 : {
639 0 : FillItemSet(*_pSet);
640 0 : if(bModified)
641 : {
642 0 : SwTwips lLeft = static_cast< SwTwips >(aLeftMF.DenormalizePercent(aLeftMF.GetValue( FUNIT_TWIP )));
643 0 : SwTwips lRight = static_cast< SwTwips >(aRightMF.DenormalizePercent(aRightMF.GetValue( FUNIT_TWIP )));
644 :
645 :
646 0 : if( aLeftMF.GetText() != aLeftMF.GetSavedValue() ||
647 0 : aRightMF.GetText() != aRightMF.GetSavedValue() )
648 : {
649 0 : pTblData->SetWidthChanged();
650 0 : pTblData->SetLeftSpace( lLeft);
651 0 : pTblData->SetRightSpace( lRight);
652 : }
653 :
654 : SwTwips lWidth;
655 0 : if (aRelWidthCB.IsChecked() && aRelWidthCB.IsEnabled())
656 : {
657 0 : lWidth = pTblData->GetSpace() - lRight - lLeft;
658 0 : sal_uInt16 nPercentWidth = (sal_uInt16)aWidthMF.GetValue(FUNIT_CUSTOM);
659 0 : if(pTblData->GetWidthPercent() != nPercentWidth)
660 : {
661 0 : pTblData->SetWidthPercent(nPercentWidth);
662 0 : pTblData->SetWidthChanged();
663 : }
664 : }
665 : else
666 : {
667 0 : pTblData->SetWidthPercent(0);
668 0 : lWidth = static_cast< SwTwips >(aWidthMF.DenormalizePercent(aWidthMF.GetValue( FUNIT_TWIP )));
669 : }
670 0 : pTblData->SetWidth(lWidth);
671 :
672 0 : SwTwips nColSum = 0;
673 : sal_uInt16 i;
674 :
675 0 : for( i = 0; i < pTblData->GetColCount(); i++)
676 : {
677 0 : nColSum += pTblData->GetColumns()[i].nWidth;
678 : }
679 0 : if(nColSum != pTblData->GetWidth())
680 : {
681 : SwTwips nMinWidth = Min( (long)MINLAY,
682 0 : (long) (pTblData->GetWidth() /
683 0 : pTblData->GetColCount() - 1));
684 0 : SwTwips nDiff = nColSum - pTblData->GetWidth();
685 0 : while ( Abs(nDiff) > pTblData->GetColCount() + 1 )
686 : {
687 0 : SwTwips nSub = nDiff / pTblData->GetColCount();
688 0 : for( i = 0; i < pTblData->GetColCount(); i++)
689 : {
690 0 : if(pTblData->GetColumns()[i].nWidth - nMinWidth > nSub)
691 : {
692 0 : pTblData->GetColumns()[i].nWidth -= nSub;
693 0 : nDiff -= nSub;
694 : }
695 : else
696 : {
697 0 : nDiff -= pTblData->GetColumns()[i].nWidth - nMinWidth;
698 0 : pTblData->GetColumns()[i].nWidth = nMinWidth;
699 : }
700 :
701 : }
702 : }
703 : }
704 :
705 0 : sal_Int16 nAlign = 0;
706 0 : if(aRightBtn.IsChecked())
707 0 : nAlign = text::HoriOrientation::RIGHT;
708 0 : else if(aLeftBtn.IsChecked())
709 0 : nAlign = text::HoriOrientation::LEFT;
710 0 : else if(aFromLeftBtn.IsChecked())
711 0 : nAlign = text::HoriOrientation::LEFT_AND_WIDTH;
712 0 : else if(aCenterBtn.IsChecked())
713 0 : nAlign = text::HoriOrientation::CENTER;
714 0 : else if(aFreeBtn.IsChecked())
715 0 : nAlign = text::HoriOrientation::NONE;
716 0 : else if(aFullBtn.IsChecked())
717 : {
718 0 : nAlign = text::HoriOrientation::FULL;
719 0 : lWidth = lAutoWidth;
720 : }
721 0 : if(nAlign != pTblData->GetAlign())
722 : {
723 0 : pTblData->SetWidthChanged();
724 0 : pTblData->SetAlign(nAlign);
725 : }
726 :
727 0 : if(pTblData->GetWidth() != lWidth )
728 : {
729 0 : pTblData->SetWidthChanged();
730 : pTblData->SetWidth(
731 0 : nAlign == text::HoriOrientation::FULL ? pTblData->GetSpace() : lWidth );
732 : }
733 0 : if(pTblData->HasWidthChanged())
734 0 : _pSet->Put(SwPtrItem(FN_TABLE_REP, pTblData));
735 : }
736 : }
737 0 : return sal_True;
738 : }
739 : /*------------------------------------------------------------------------
740 : Beschreibung: Seite Spaltenkonfiguration
741 : ------------------------------------------------------------------------*/
742 0 : SwTableColumnPage::SwTableColumnPage( Window* pParent,
743 : const SfxItemSet& rSet ) :
744 : SfxTabPage(pParent, SW_RES( TP_TABLE_COLUMN ), rSet ),
745 : aModifyTableCB(this, SW_RES(CB_MOD_TBL)),
746 : aProportionalCB(this, SW_RES(CB_PROP)),
747 : aSpaceFT(this, SW_RES(FT_SPACE)),
748 : aSpaceED(this, SW_RES(ED_SPACE)),
749 :
750 : aColFL(this, SW_RES(COL_FL_LAYOUT)),
751 : aUpBtn(this, SW_RES(COL_BTN_UP)),
752 : aFT1(this, SW_RES(COL_FT_1)),
753 : aMF1(this, SW_RES(COL_MF_1)),
754 : aFT2(this, SW_RES(COL_FT_2)),
755 : aMF2(this, SW_RES(COL_MF_2)),
756 : aFT3(this, SW_RES(COL_FT_3)),
757 : aMF3(this, SW_RES(COL_MF_3)),
758 : aFT4(this, SW_RES(COL_FT_4)),
759 : aMF4(this, SW_RES(COL_MF_4)),
760 : aFT5(this, SW_RES(COL_FT_5)),
761 : aMF5(this, SW_RES(COL_MF_5)),
762 : aFT6(this, SW_RES(COL_FT_6)),
763 : aMF6(this, SW_RES(COL_MF_6)),
764 : aDownBtn(this, SW_RES(COL_BTN_DOWN)),
765 :
766 : nTableWidth(0),
767 : nMinWidth( MINLAY ),
768 : nNoOfCols( 0 ),
769 : nNoOfVisibleCols( 0 ),
770 : bModified(sal_False),
771 : bModifyTbl(sal_False),
772 0 : bPercentMode(sal_False)
773 : {
774 0 : FreeResource();
775 0 : SetExchangeSupport();
776 :
777 0 : aDownBtn.SetAccessibleRelationMemberOf(&aColFL);
778 0 : aUpBtn.SetAccessibleRelationMemberOf(&aColFL);
779 :
780 0 : pFieldArr[0] = &aMF1;
781 0 : pFieldArr[1] = &aMF2;
782 0 : pFieldArr[2] = &aMF3;
783 0 : pFieldArr[3] = &aMF4;
784 0 : pFieldArr[4] = &aMF5;
785 0 : pFieldArr[5] = &aMF6;
786 :
787 0 : pTextArr[0] = &aFT1;
788 0 : pTextArr[1] = &aFT2;
789 0 : pTextArr[2] = &aFT3;
790 0 : pTextArr[3] = &aFT4;
791 0 : pTextArr[4] = &aFT5;
792 0 : pTextArr[5] = &aFT6;
793 :
794 : const SfxPoolItem* pItem;
795 0 : Init((SFX_ITEM_SET == rSet.GetItemState( SID_HTML_MODE, sal_False,&pItem )
796 0 : && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON));
797 :
798 0 : };
799 : /*------------------------------------------------------------------------
800 : Beschreibung: Seite Spaltenkonfiguration
801 : ------------------------------------------------------------------------*/
802 0 : SwTableColumnPage::~SwTableColumnPage()
803 : {
804 0 : };
805 :
806 :
807 0 : SfxTabPage* SwTableColumnPage::Create( Window* pParent,
808 : const SfxItemSet& rAttrSet)
809 : {
810 0 : return new SwTableColumnPage( pParent, rAttrSet );
811 : };
812 :
813 :
814 0 : void SwTableColumnPage::Reset( const SfxItemSet& )
815 : {
816 0 : const SfxItemSet& rSet = GetItemSet();
817 :
818 : const SfxPoolItem* pItem;
819 0 : if(SFX_ITEM_SET == rSet.GetItemState( FN_TABLE_REP, sal_False, &pItem ))
820 : {
821 0 : pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
822 0 : nNoOfVisibleCols = pTblData->GetColCount();
823 0 : nNoOfCols = pTblData->GetAllColCount();
824 0 : nTableWidth = pTblData->GetAlign() != text::HoriOrientation::FULL &&
825 0 : pTblData->GetAlign() != text::HoriOrientation::LEFT_AND_WIDTH?
826 0 : pTblData->GetWidth() : pTblData->GetSpace();
827 :
828 : sal_uInt16 i;
829 0 : for( i = 0; i < nNoOfCols; i++ )
830 : {
831 0 : if( pTblData->GetColumns()[i].nWidth < nMinWidth )
832 0 : nMinWidth = pTblData->GetColumns()[i].nWidth;
833 : }
834 0 : sal_Int64 nMinTwips = pFieldArr[0]->NormalizePercent( nMinWidth );
835 0 : sal_Int64 nMaxTwips = pFieldArr[0]->NormalizePercent( nTableWidth );
836 0 : for( i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
837 : {
838 0 : pFieldArr[i]->SetPrcntValue( pFieldArr[i]->NormalizePercent(
839 0 : GetVisibleWidth(i) ), FUNIT_TWIP );
840 0 : pFieldArr[i]->SetMin( nMinTwips , FUNIT_TWIP );
841 0 : pFieldArr[i]->SetMax( nMaxTwips , FUNIT_TWIP );
842 0 : pFieldArr[i]->Enable();
843 0 : pTextArr[i]->Enable();
844 : }
845 :
846 0 : if( nNoOfVisibleCols > MET_FIELDS )
847 0 : aUpBtn.Enable();
848 0 : i = nNoOfVisibleCols;
849 0 : while( i < MET_FIELDS )
850 : {
851 0 : pFieldArr[i]->SetText( aEmptyStr );
852 0 : pTextArr[i]->Hide();
853 0 : i++;
854 : }
855 : }
856 0 : ActivatePage(rSet);
857 :
858 0 : };
859 :
860 :
861 0 : void SwTableColumnPage::Init(sal_Bool bWeb)
862 : {
863 0 : FieldUnit aMetric = ::GetDfltMetric(bWeb);
864 0 : Link aLkUp = LINK( this, SwTableColumnPage, UpHdl );
865 0 : Link aLkDown = LINK( this, SwTableColumnPage, DownHdl );
866 0 : Link aLkLF = LINK( this, SwTableColumnPage, LoseFocusHdl );
867 0 : for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
868 : {
869 0 : aValueTbl[i] = i;
870 0 : SetMetric(*pFieldArr[i], aMetric);
871 0 : pFieldArr[i]->SetUpHdl( aLkUp );
872 0 : pFieldArr[i]->SetDownHdl( aLkDown );
873 0 : pFieldArr[i]->SetLoseFocusHdl( aLkLF );
874 :
875 : }
876 0 : SetMetric(aSpaceED, aMetric);
877 :
878 0 : Link aLk = LINK( this, SwTableColumnPage, AutoClickHdl );
879 0 : aUpBtn.SetClickHdl( aLk );
880 0 : aDownBtn.SetClickHdl( aLk );
881 :
882 0 : aLk = LINK( this, SwTableColumnPage, ModeHdl );
883 0 : aModifyTableCB .SetClickHdl( aLk );
884 0 : aProportionalCB.SetClickHdl( aLk );
885 0 : };
886 :
887 :
888 0 : IMPL_LINK( SwTableColumnPage, AutoClickHdl, CheckBox *, pBox )
889 : {
890 : //Anzeigefenster verschieben
891 0 : if(pBox == (CheckBox *)&aDownBtn)
892 : {
893 0 : if(aValueTbl[0] > 0)
894 : {
895 0 : for( sal_uInt16 i=0; i < MET_FIELDS; i++ )
896 0 : aValueTbl[i] -= 1;
897 : }
898 : }
899 0 : if(pBox == (CheckBox *)&aUpBtn)
900 : {
901 0 : if( aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 )
902 : {
903 0 : for(sal_uInt16 i=0;i < MET_FIELDS;i++)
904 0 : aValueTbl[i] += 1;
905 : }
906 : }
907 0 : for( sal_uInt16 i = 0; (i < nNoOfVisibleCols ) && ( i < MET_FIELDS); i++ )
908 : {
909 0 : String sEntry = rtl::OUString('~');
910 0 : String sIndex = String::CreateFromInt32( aValueTbl[i] + 1 );
911 0 : sEntry += sIndex;
912 0 : pTextArr[i]->SetText( sEntry );
913 :
914 : //added by menghu for SODC_5143,12/12/2006
915 0 : String sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH);
916 0 : sColumnWidth.SearchAndReplace( DEFINE_CONST_UNICODE("%1"), sIndex );
917 0 : pFieldArr[i]->SetAccessibleName( sColumnWidth );
918 0 : }
919 :
920 0 : aDownBtn.Enable(aValueTbl[0] > 0);
921 0 : aUpBtn.Enable(aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 );
922 0 : UpdateCols(0);
923 0 : return 0;
924 : };
925 :
926 :
927 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, UpHdl, PercentField *, pEdit )
928 : {
929 0 : bModified = sal_True;
930 0 : ModifyHdl( pEdit );
931 0 : return 0;
932 : };
933 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, UpHdl, PercentField *, pEdit )
934 :
935 :
936 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, DownHdl, PercentField *, pEdit )
937 : {
938 0 : bModified = sal_True;
939 0 : ModifyHdl( pEdit );
940 0 : return 0;
941 : };
942 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, DownHdl, PercentField *, pEdit )
943 :
944 :
945 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, LoseFocusHdl, PercentField *, pEdit )
946 : {
947 0 : if(pEdit->IsModified())
948 : {
949 0 : bModified = sal_True;
950 0 : ModifyHdl( pEdit );
951 : }
952 0 : return 0;
953 : };
954 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, LoseFocusHdl, PercentField *, pEdit )
955 :
956 :
957 0 : IMPL_LINK( SwTableColumnPage, ModeHdl, CheckBox*, pBox )
958 : {
959 0 : sal_Bool bCheck = pBox->IsChecked();
960 0 : if(pBox == &aProportionalCB)
961 : {
962 0 : if(bCheck)
963 0 : aModifyTableCB.Check();
964 0 : aModifyTableCB.Enable(!bCheck && bModifyTbl);
965 : }
966 0 : return 0;
967 : };
968 :
969 :
970 0 : sal_Bool SwTableColumnPage::FillItemSet( SfxItemSet& )
971 : {
972 0 : for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
973 : {
974 0 : if(pFieldArr[i]->HasFocus())
975 : {
976 0 : LoseFocusHdl(pFieldArr[i]);
977 0 : break;
978 : }
979 : }
980 :
981 0 : if(bModified)
982 : {
983 0 : pTblData->SetColsChanged();
984 : }
985 0 : return bModified;
986 : };
987 :
988 :
989 0 : void SwTableColumnPage::ModifyHdl( PercentField* pEdit )
990 : {
991 : sal_uInt16 nAktPos;
992 : sal_uInt16 i;
993 :
994 0 : for( i = 0; i < MET_FIELDS; i++)
995 0 : if(pEdit == pFieldArr[i])
996 0 : break;
997 :
998 0 : if (MET_FIELDS <= i)
999 : {
1000 : OSL_ENSURE(false, "cannot happen.");
1001 0 : return;
1002 : }
1003 :
1004 0 : SetVisibleWidth(aValueTbl[i], static_cast< SwTwips >(pEdit->DenormalizePercent(pEdit->GetValue( FUNIT_TWIP ))) );
1005 0 : nAktPos = aValueTbl[i];
1006 :
1007 0 : UpdateCols( nAktPos );
1008 : };
1009 :
1010 :
1011 0 : void SwTableColumnPage::UpdateCols( sal_uInt16 nAktPos )
1012 : {
1013 0 : SwTwips nSum = 0;
1014 : sal_uInt16 i;
1015 :
1016 0 : for( i = 0; i < nNoOfCols; i++ )
1017 : {
1018 0 : nSum += (pTblData->GetColumns())[i].nWidth;
1019 : }
1020 0 : SwTwips nDiff = nSum - nTableWidth;
1021 :
1022 0 : sal_Bool bModifyTable = aModifyTableCB.IsChecked();
1023 0 : sal_Bool bProp = aProportionalCB.IsChecked();
1024 :
1025 0 : if(!bModifyTable && !bProp )
1026 : {
1027 : // the table width is constant, the difference is balanced with the other columns
1028 0 : sal_uInt16 nLoopCount = 0;
1029 0 : while( nDiff )
1030 : {
1031 0 : if( ++nAktPos == nNoOfVisibleCols)
1032 : {
1033 0 : nAktPos = 0;
1034 0 : ++nLoopCount;
1035 : //#i101353# in small tables it might not be possible to balance column width
1036 0 : if( nLoopCount > 1 )
1037 0 : break;
1038 : }
1039 0 : if( nDiff < 0 )
1040 : {
1041 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
1042 0 : nDiff = 0;
1043 : }
1044 0 : else if( GetVisibleWidth(nAktPos) >= nDiff + nMinWidth )
1045 : {
1046 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
1047 0 : nDiff = 0;
1048 : }
1049 0 : if( nDiff > 0 && GetVisibleWidth(nAktPos) > nMinWidth )
1050 : {
1051 0 : if( nDiff >= (GetVisibleWidth(nAktPos) - nMinWidth) )
1052 : {
1053 0 : nDiff -= (GetVisibleWidth(nAktPos) - nMinWidth);
1054 0 : SetVisibleWidth(nAktPos, nMinWidth);
1055 : }
1056 : else
1057 : {
1058 0 : nDiff = 0;
1059 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
1060 : }
1061 : OSL_ENSURE(nDiff >= 0, "nDiff < 0 cannot be here!");
1062 : }
1063 0 : }
1064 : }
1065 0 : else if(bModifyTable && !bProp)
1066 : {
1067 : // Differenz wird ueber die Tabellenbreite ausgeglichen,
1068 : // andere Spalten bleiben unveraendert
1069 : OSL_ENSURE(nDiff <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
1070 0 : SwTwips nActSpace = pTblData->GetSpace() - nTableWidth;
1071 0 : if(nDiff > nActSpace)
1072 : {
1073 0 : nTableWidth = pTblData->GetSpace();
1074 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nActSpace );
1075 : }
1076 : else
1077 : {
1078 0 : nTableWidth += nDiff;
1079 0 : }
1080 : }
1081 0 : else if(bModifyTable & bProp)
1082 : {
1083 : // Alle Spalten werden proportional mitveraendert, die Tabellenbreite wird
1084 : // entsprechend angepasst
1085 : OSL_ENSURE(nDiff * nNoOfVisibleCols <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
1086 0 : long nAdd = nDiff;
1087 0 : if(nDiff * nNoOfVisibleCols > pTblData->GetSpace() - nTableWidth)
1088 : {
1089 0 : nAdd = (pTblData->GetSpace() - nTableWidth) / nNoOfVisibleCols;
1090 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nAdd );
1091 0 : nDiff = nAdd;
1092 : }
1093 0 : if(nAdd)
1094 0 : for(i = 0; i < nNoOfVisibleCols; i++ )
1095 : {
1096 0 : if(i == nAktPos)
1097 0 : continue;
1098 : SwTwips nVisWidth;
1099 0 : if((nVisWidth = GetVisibleWidth(i)) + nDiff < MINLAY)
1100 : {
1101 0 : nAdd += nVisWidth - MINLAY;
1102 0 : SetVisibleWidth(i, MINLAY);
1103 : }
1104 : else
1105 : {
1106 0 : SetVisibleWidth(i, nVisWidth + nDiff);
1107 0 : nAdd += nDiff;
1108 : }
1109 :
1110 : }
1111 0 : nTableWidth += nAdd;
1112 : }
1113 :
1114 0 : if(!bPercentMode)
1115 0 : aSpaceED.SetValue(aSpaceED.Normalize( pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
1116 :
1117 0 : for( i = 0; ( i < nNoOfVisibleCols ) && ( i < MET_FIELDS ); i++)
1118 : {
1119 0 : pFieldArr[i]->SetPrcntValue(pFieldArr[i]->NormalizePercent(
1120 0 : GetVisibleWidth(aValueTbl[i]) ), FUNIT_TWIP);
1121 0 : pFieldArr[i]->ClearModifyFlag();
1122 : }
1123 :
1124 0 : }
1125 :
1126 :
1127 0 : void SwTableColumnPage::ActivatePage( const SfxItemSet& )
1128 : {
1129 0 : bPercentMode = pTblData->GetWidthPercent() != 0;
1130 0 : for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
1131 : {
1132 0 : pFieldArr[i]->SetRefValue(pTblData->GetWidth());
1133 0 : pFieldArr[i]->ShowPercent( bPercentMode );
1134 : }
1135 :
1136 0 : sal_uInt16 nTblAlign = pTblData->GetAlign();
1137 0 : if((text::HoriOrientation::FULL != nTblAlign && nTableWidth != pTblData->GetWidth()) ||
1138 0 : (text::HoriOrientation::FULL == nTblAlign && nTableWidth != pTblData->GetSpace()))
1139 : {
1140 : nTableWidth = text::HoriOrientation::FULL == nTblAlign ?
1141 0 : pTblData->GetSpace() :
1142 0 : pTblData->GetWidth();
1143 0 : UpdateCols(0);
1144 : }
1145 0 : bModifyTbl = sal_True;
1146 0 : if(pTblData->GetWidthPercent() ||
1147 : text::HoriOrientation::FULL == nTblAlign ||
1148 0 : pTblData->IsLineSelected() )
1149 0 : bModifyTbl = sal_False;
1150 0 : if(bPercentMode)
1151 : {
1152 0 : aModifyTableCB .Check(sal_False);
1153 0 : aProportionalCB .Check(sal_False);
1154 : }
1155 0 : else if( !bModifyTbl )
1156 : {
1157 0 : aProportionalCB.Check(sal_False);
1158 0 : aModifyTableCB.Check(sal_False);
1159 : }
1160 0 : aSpaceFT.Enable(!bPercentMode);
1161 0 : aSpaceED.Enable(!bPercentMode);
1162 0 : aModifyTableCB.Enable( !bPercentMode && bModifyTbl );
1163 0 : aProportionalCB.Enable(!bPercentMode && bModifyTbl );
1164 :
1165 : aSpaceED.SetValue(aSpaceED.Normalize(
1166 0 : pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
1167 :
1168 0 : }
1169 :
1170 :
1171 0 : int SwTableColumnPage::DeactivatePage( SfxItemSet* _pSet )
1172 : {
1173 0 : if(_pSet)
1174 : {
1175 0 : FillItemSet(*_pSet);
1176 0 : if(text::HoriOrientation::FULL != pTblData->GetAlign() && pTblData->GetWidth() != nTableWidth)
1177 : {
1178 0 : pTblData->SetWidth(nTableWidth);
1179 0 : SwTwips nDiff = pTblData->GetSpace() - pTblData->GetWidth() -
1180 0 : pTblData->GetLeftSpace() - pTblData->GetRightSpace();
1181 0 : switch( pTblData->GetAlign() )
1182 : {
1183 : case text::HoriOrientation::RIGHT:
1184 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff);
1185 0 : break;
1186 : case text::HoriOrientation::LEFT:
1187 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff);
1188 0 : break;
1189 : case text::HoriOrientation::NONE:
1190 : {
1191 0 : SwTwips nDiff2 = nDiff/2;
1192 0 : if( nDiff > 0 ||
1193 0 : (-nDiff2 < pTblData->GetRightSpace() && - nDiff2 < pTblData->GetLeftSpace()))
1194 : {
1195 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff2);
1196 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff2);
1197 : }
1198 : else
1199 : {
1200 0 : if(pTblData->GetRightSpace() > pTblData->GetLeftSpace())
1201 : {
1202 0 : pTblData->SetLeftSpace(0);
1203 0 : pTblData->SetRightSpace(pTblData->GetSpace() - pTblData->GetWidth());
1204 : }
1205 : else
1206 : {
1207 0 : pTblData->SetRightSpace(0);
1208 0 : pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
1209 : }
1210 : }
1211 : }
1212 0 : break;
1213 : case text::HoriOrientation::CENTER:
1214 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff/2);
1215 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff/2);
1216 0 : break;
1217 : case text::HoriOrientation::LEFT_AND_WIDTH :
1218 0 : if(nDiff > pTblData->GetRightSpace())
1219 : {
1220 0 : pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
1221 : }
1222 : pTblData->SetRightSpace(
1223 0 : pTblData->GetSpace() - pTblData->GetWidth() - pTblData->GetLeftSpace());
1224 0 : break;
1225 : }
1226 0 : pTblData->SetWidthChanged();
1227 : }
1228 0 : _pSet->Put(SwPtrItem( FN_TABLE_REP, pTblData ));
1229 : }
1230 0 : return sal_True;
1231 : }
1232 :
1233 :
1234 0 : SwTwips SwTableColumnPage::GetVisibleWidth(sal_uInt16 nPos)
1235 : {
1236 0 : sal_uInt16 i=0;
1237 :
1238 0 : while( nPos )
1239 : {
1240 0 : if(pTblData->GetColumns()[i].bVisible && nPos)
1241 0 : nPos--;
1242 0 : i++;
1243 : }
1244 0 : SwTwips nReturn = pTblData->GetColumns()[i].nWidth;
1245 : OSL_ENSURE(i < nNoOfCols, "Array index out of range");
1246 0 : while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
1247 0 : nReturn += pTblData->GetColumns()[++i].nWidth;
1248 :
1249 0 : return nReturn;
1250 : }
1251 :
1252 :
1253 0 : void SwTableColumnPage::SetVisibleWidth(sal_uInt16 nPos, SwTwips nNewWidth)
1254 : {
1255 0 : sal_uInt16 i=0;
1256 0 : while( nPos )
1257 : {
1258 0 : if(pTblData->GetColumns()[i].bVisible && nPos)
1259 0 : nPos--;
1260 0 : i++;
1261 : }
1262 : OSL_ENSURE(i < nNoOfCols, "Array index out of range");
1263 0 : pTblData->GetColumns()[i].nWidth = nNewWidth;
1264 0 : while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
1265 0 : pTblData->GetColumns()[++i].nWidth = 0;
1266 :
1267 0 : }
1268 :
1269 :
1270 0 : SwTableTabDlg::SwTableTabDlg(Window* pParent, SfxItemPool& ,
1271 : const SfxItemSet* pItemSet, SwWrtShell* pSh ) :
1272 : SfxTabDialog(pParent, SW_RES(DLG_FORMAT_TABLE), pItemSet,0),
1273 : pShell(pSh),
1274 0 : nHtmlMode(::GetHtmlMode(pSh->GetView().GetDocShell()))
1275 : {
1276 0 : FreeResource();
1277 0 : SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
1278 : OSL_ENSURE(pFact, "Dialogdiet fail!");
1279 0 : AddTabPage(TP_FORMAT_TABLE, &SwFormatTablePage::Create, 0 );
1280 0 : AddTabPage(TP_TABLE_TEXTFLOW, &SwTextFlowPage::Create, 0 );
1281 0 : AddTabPage(TP_TABLE_COLUMN, &SwTableColumnPage::Create, 0 );
1282 0 : AddTabPage(TP_BACKGROUND, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BACKGROUND ), 0 );
1283 0 : AddTabPage(TP_BORDER, pFact->GetTabPageCreatorFunc( RID_SVXPAGE_BORDER ), 0 );
1284 0 : }
1285 :
1286 :
1287 0 : void SwTableTabDlg::PageCreated(sal_uInt16 nId, SfxTabPage& rPage)
1288 : {
1289 0 : SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
1290 0 : if( TP_BACKGROUND == nId )
1291 : {
1292 0 : sal_Int32 nFlagType = SVX_SHOW_TBLCTL;
1293 0 : if(!( nHtmlMode & HTMLMODE_ON ) ||
1294 : nHtmlMode & HTMLMODE_SOME_STYLES)
1295 0 : nFlagType |= SVX_SHOW_SELECTOR;
1296 0 : aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, nFlagType));
1297 0 : rPage.PageCreated(aSet);
1298 : }
1299 0 : else if(TP_BORDER == nId)
1300 : {
1301 0 : aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_TABLE));
1302 0 : rPage.PageCreated(aSet);
1303 : }
1304 0 : else if(TP_TABLE_TEXTFLOW == nId)
1305 : {
1306 0 : ((SwTextFlowPage&)rPage).SetShell(pShell);
1307 0 : const sal_uInt16 eType = pShell->GetFrmType(0,sal_True);
1308 0 : if( !(FRMTYPE_BODY & eType) )
1309 0 : ((SwTextFlowPage&)rPage).DisablePageBreak();
1310 0 : }
1311 0 : }
1312 :
1313 0 : SwTextFlowPage::SwTextFlowPage( Window* pParent,
1314 : const SfxItemSet& rSet ) :
1315 : SfxTabPage(pParent, SW_RES( TP_TABLE_TEXTFLOW ), rSet ),
1316 : aFlowFL (this, SW_RES(FL_FLOW )),
1317 : aPgBrkCB (this, SW_RES(CB_PAGEBREAK )),
1318 : aPgBrkRB (this, SW_RES(RB_BREAKPAGE )),
1319 : aColBrkRB (this, SW_RES(RB_BREAKCOLUMN )),
1320 : aPgBrkBeforeRB (this, SW_RES(RB_PAGEBREAKBEFORE)),
1321 : aPgBrkAfterRB (this, SW_RES(RB_PAGEBREAKAFTER )),
1322 : aPageCollCB (this, SW_RES(CB_PAGECOLL )),
1323 : aPageCollLB (this, SW_RES(LB_PAGECOLL )),
1324 : aPageNoFT (this, SW_RES(FT_PAGENUM )),
1325 : aPageNoNF (this, SW_RES(NF_PAGENUM )),
1326 : aSplitCB (this, SW_RES(CB_SPLIT )),
1327 : aSplitRowCB (this, SW_RES(CB_SPLIT_ROW )),
1328 : aKeepCB (this, SW_RES(CB_KEEP )),
1329 : aHeadLineCB (this, SW_RES(CB_HEADLINE )),
1330 : aRepeatHeaderFT (this, SW_RES(FT_REPEAT_HEADER )),
1331 : aRepeatHeaderBeforeFT (this),
1332 : aRepeatHeaderNF (this, SW_RES(NF_REPEAT_HEADER )),
1333 : aRepeatHeaderAfterFT (this),
1334 : aRepeatHeaderCombo (this, SW_RES(WIN_REPEAT_HEADER), aRepeatHeaderNF, aRepeatHeaderBeforeFT, aRepeatHeaderAfterFT),
1335 : aTextDirectionFT(this, SW_RES(FT_TEXTORIENTATION )),
1336 : aTextDirectionLB(this, SW_RES(LB_TEXTORIENTATION )),
1337 :
1338 : aVertOrientFL (this, SW_RES(FL_VERT_ORIENT )),
1339 : aVertOrientFT(this, SW_RES(FT_VERTORIENT )),
1340 : aVertOrientLB(this, SW_RES(LB_VERTORIENT )),
1341 :
1342 : pShell(0),
1343 :
1344 : bPageBreak(sal_True),
1345 0 : bHtmlMode(sal_False)
1346 : {
1347 0 : FreeResource();
1348 :
1349 0 : aPgBrkRB.SetAccessibleRelationMemberOf(&aPgBrkCB);
1350 0 : aColBrkRB.SetAccessibleRelationMemberOf(&aPgBrkCB);
1351 0 : aPgBrkBeforeRB.SetAccessibleRelationMemberOf(&aPgBrkCB);
1352 0 : aPgBrkAfterRB.SetAccessibleRelationMemberOf(&aPgBrkCB);
1353 0 : aPageCollLB.SetAccessibleRelationLabeledBy(&aPageCollCB);
1354 0 : aPageCollLB.SetAccessibleName(aPageCollCB.GetText());
1355 :
1356 0 : aPgBrkCB.SetClickHdl(LINK(this, SwTextFlowPage, PageBreakHdl_Impl));
1357 : aPgBrkBeforeRB.SetClickHdl(
1358 0 : LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
1359 : aPgBrkAfterRB.SetClickHdl(
1360 0 : LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
1361 : aPageCollCB.SetClickHdl(
1362 0 : LINK( this, SwTextFlowPage, ApplyCollClickHdl_Impl ) );
1363 : aColBrkRB.SetClickHdl(
1364 0 : LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
1365 : aPgBrkRB.SetClickHdl(
1366 0 : LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
1367 : aSplitCB.SetClickHdl(
1368 0 : LINK( this, SwTextFlowPage, SplitHdl_Impl));
1369 : aSplitRowCB.SetClickHdl(
1370 0 : LINK( this, SwTextFlowPage, SplitRowHdl_Impl));
1371 0 : aHeadLineCB.SetClickHdl( LINK( this, SwTextFlowPage, HeadLineCBClickHdl ) );
1372 :
1373 : #ifndef SW_FILEFORMAT_40
1374 : const SfxPoolItem *pItem;
1375 0 : if(SFX_ITEM_SET == rSet.GetItemState( SID_HTML_MODE, sal_False,&pItem )
1376 0 : && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON)
1377 : #endif
1378 : {
1379 0 : aKeepCB.Hide();
1380 0 : aSplitCB.Hide();
1381 0 : aSplitRowCB.Hide();
1382 : }
1383 :
1384 0 : aRepeatHeaderCombo.Arrange( aRepeatHeaderFT );
1385 :
1386 0 : HeadLineCBClickHdl();
1387 0 : }
1388 :
1389 0 : SwTextFlowPage::~SwTextFlowPage()
1390 : {
1391 0 : }
1392 :
1393 0 : SfxTabPage* SwTextFlowPage::Create( Window* pParent,
1394 : const SfxItemSet& rAttrSet)
1395 : {
1396 0 : return new SwTextFlowPage(pParent, rAttrSet);
1397 : }
1398 :
1399 0 : sal_Bool SwTextFlowPage::FillItemSet( SfxItemSet& rSet )
1400 : {
1401 0 : sal_Bool bModified = sal_False;
1402 :
1403 : // Repeat Heading
1404 0 : if(aHeadLineCB.IsChecked() != aHeadLineCB.GetSavedValue() ||
1405 0 : String::CreateFromInt32( static_cast< sal_Int32 >(aRepeatHeaderNF.GetValue()) ) != aRepeatHeaderNF.GetSavedValue() )
1406 : {
1407 : bModified |= 0 != rSet.Put(
1408 0 : SfxUInt16Item(FN_PARAM_TABLE_HEADLINE, aHeadLineCB.IsChecked()? sal_uInt16(aRepeatHeaderNF.GetValue()) : 0 ));
1409 : }
1410 0 : if(aKeepCB.IsChecked() != aKeepCB.GetSavedValue())
1411 0 : bModified |= 0 != rSet.Put( SvxFmtKeepItem( aKeepCB.IsChecked(), RES_KEEP));
1412 :
1413 0 : if(aSplitCB.IsChecked() != aSplitCB.GetSavedValue())
1414 0 : bModified |= 0 != rSet.Put( SwFmtLayoutSplit( aSplitCB.IsChecked()));
1415 :
1416 0 : if(aSplitRowCB.IsChecked() != aSplitRowCB.GetSavedValue())
1417 0 : bModified |= 0 != rSet.Put( SwFmtRowSplit( aSplitRowCB.IsChecked()));
1418 :
1419 :
1420 0 : const SvxFmtBreakItem* pBreak = (const SvxFmtBreakItem*)GetOldItem( rSet, RES_BREAK );
1421 0 : const SwFmtPageDesc* pDesc = (const SwFmtPageDesc*) GetOldItem( rSet, RES_PAGEDESC );
1422 :
1423 :
1424 0 : sal_Bool bState = aPageCollCB.IsChecked();
1425 :
1426 : // If we have a page style, then there's no break
1427 0 : sal_Bool bPageItemPut = sal_False;
1428 0 : if ( bState != aPageCollCB.GetSavedValue() ||
1429 : ( bState &&
1430 0 : aPageCollLB.GetSelectEntryPos() != aPageCollLB.GetSavedValue() )
1431 0 : || (aPageNoNF.IsEnabled() && aPageNoNF.IsValueModified()) )
1432 : {
1433 0 : String sPage;
1434 :
1435 0 : if ( bState )
1436 : {
1437 0 : sPage = aPageCollLB.GetSelectEntry();
1438 : }
1439 0 : sal_uInt16 nPgNum = static_cast< sal_uInt16 >(aPageNoNF.GetValue());
1440 0 : if ( !pDesc || !pDesc->GetPageDesc() ||
1441 0 : ( pDesc->GetPageDesc() && ((pDesc->GetPageDesc()->GetName() != sPage) ||
1442 0 : !comphelper::string::equals(aPageNoNF.GetSavedValue(), nPgNum))))
1443 : {
1444 0 : SwFmtPageDesc aFmt( pShell->FindPageDescByName( sPage, sal_True ) );
1445 0 : aFmt.SetNumOffset(bState ? nPgNum : 0);
1446 0 : bModified |= 0 != rSet.Put( aFmt );
1447 0 : bPageItemPut = bState;
1448 0 : }
1449 : }
1450 0 : sal_Bool bIsChecked = aPgBrkCB.IsChecked();
1451 0 : if ( !bPageItemPut &&
1452 0 : ( bState != aPageCollCB.GetSavedValue() ||
1453 0 : bIsChecked != aPgBrkCB.GetSavedValue() ||
1454 0 : aPgBrkBeforeRB.IsChecked() != aPgBrkBeforeRB.GetSavedValue() ||
1455 0 : aPgBrkRB.IsChecked() != aPgBrkRB.GetSavedValue() ))
1456 : {
1457 : SvxFmtBreakItem aBreak(
1458 0 : (const SvxFmtBreakItem&)GetItemSet().Get( RES_BREAK ) );
1459 :
1460 0 : if(bIsChecked)
1461 : {
1462 0 : sal_Bool bBefore = aPgBrkBeforeRB.IsChecked();
1463 :
1464 0 : if ( aPgBrkRB.IsChecked() )
1465 : {
1466 0 : if ( bBefore )
1467 0 : aBreak.SetValue( SVX_BREAK_PAGE_BEFORE );
1468 : else
1469 0 : aBreak.SetValue( SVX_BREAK_PAGE_AFTER );
1470 : }
1471 : else
1472 : {
1473 0 : if ( bBefore )
1474 0 : aBreak.SetValue( SVX_BREAK_COLUMN_BEFORE );
1475 : else
1476 0 : aBreak.SetValue( SVX_BREAK_COLUMN_AFTER );
1477 : }
1478 : }
1479 : else
1480 : {
1481 0 : aBreak.SetValue( SVX_BREAK_NONE );
1482 : }
1483 :
1484 0 : if ( !pBreak || !( *(const SvxFmtBreakItem*)pBreak == aBreak ) )
1485 : {
1486 0 : bModified |= 0 != rSet.Put( aBreak );
1487 0 : }
1488 : }
1489 :
1490 0 : if(aTextDirectionLB.GetSelectEntryPos() != aTextDirectionLB.GetSavedValue())
1491 : {
1492 : bModified |= 0 != rSet.Put(
1493 : SvxFrameDirectionItem(
1494 0 : (SvxFrameDirection)(sal_uLong)aTextDirectionLB.GetEntryData(aTextDirectionLB.GetSelectEntryPos())
1495 0 : , FN_TABLE_BOX_TEXTORIENTATION));
1496 : }
1497 :
1498 0 : if(aVertOrientLB.GetSelectEntryPos() != aVertOrientLB.GetSavedValue())
1499 : {
1500 0 : sal_uInt16 nOrient = USHRT_MAX;
1501 0 : switch(aVertOrientLB.GetSelectEntryPos())
1502 : {
1503 0 : case 0 : nOrient = text::VertOrientation::NONE; break;
1504 0 : case 1 : nOrient = text::VertOrientation::CENTER; break;
1505 0 : case 2 : nOrient = text::VertOrientation::BOTTOM; break;
1506 : }
1507 0 : if(nOrient != USHRT_MAX)
1508 0 : bModified |= 0 != rSet.Put(SfxUInt16Item(FN_TABLE_SET_VERT_ALIGN, nOrient));
1509 : }
1510 :
1511 0 : return bModified;
1512 :
1513 : }
1514 :
1515 0 : void SwTextFlowPage::Reset( const SfxItemSet& rSet )
1516 : {
1517 : const SfxPoolItem* pItem;
1518 0 : SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
1519 0 : sal_Bool bFlowAllowed = !bHtmlMode || rHtmlOpt.IsPrintLayoutExtension();
1520 0 : if(bFlowAllowed)
1521 : {
1522 : // Einfuegen der vorhandenen Seitenvorlagen in die Listbox
1523 0 : const sal_uInt16 nCount = pShell->GetPageDescCnt();
1524 : sal_uInt16 i;
1525 :
1526 0 : for( i = 0; i < nCount; ++i)
1527 : {
1528 0 : const SwPageDesc &rPageDesc = pShell->GetPageDesc(i);
1529 0 : aPageCollLB.InsertEntry(rPageDesc.GetName());
1530 : }
1531 :
1532 0 : String aFmtName;
1533 0 : for(i = RES_POOLPAGE_BEGIN; i < RES_POOLPAGE_END; ++i)
1534 0 : if( LISTBOX_ENTRY_NOTFOUND == aPageCollLB.GetEntryPos(
1535 0 : aFmtName = SwStyleNameMapper::GetUIName( i, aFmtName ) ))
1536 0 : aPageCollLB.InsertEntry( aFmtName );
1537 :
1538 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_KEEP, sal_False, &pItem ))
1539 : {
1540 0 : aKeepCB.Check( ((const SvxFmtKeepItem*)pItem)->GetValue() );
1541 0 : aKeepCB.SaveValue();
1542 : }
1543 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_LAYOUT_SPLIT, sal_False, &pItem ))
1544 : {
1545 0 : aSplitCB.Check( ((const SwFmtLayoutSplit*)pItem)->GetValue() );
1546 : }
1547 : else
1548 0 : aSplitCB.Check();
1549 :
1550 0 : aSplitCB.SaveValue();
1551 0 : SplitHdl_Impl(&aSplitCB);
1552 :
1553 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_ROW_SPLIT, sal_False, &pItem ))
1554 : {
1555 0 : aSplitRowCB.Check( ((const SwFmtRowSplit*)pItem)->GetValue() );
1556 : }
1557 : else
1558 0 : aSplitRowCB.SetState(STATE_DONTKNOW);
1559 0 : aSplitRowCB.SaveValue();
1560 :
1561 0 : if(bPageBreak)
1562 : {
1563 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_PAGEDESC, sal_False, &pItem ))
1564 : {
1565 0 : String sPageDesc;
1566 0 : const SwPageDesc* pDesc = ((const SwFmtPageDesc*)pItem)->GetPageDesc();
1567 0 : aPageNoNF.SetValue(((const SwFmtPageDesc*)pItem)->GetNumOffset());
1568 0 : if(pDesc)
1569 0 : sPageDesc = pDesc->GetName();
1570 0 : if ( sPageDesc.Len() &&
1571 0 : aPageCollLB.GetEntryPos( sPageDesc ) != LISTBOX_ENTRY_NOTFOUND )
1572 : {
1573 0 : aPageCollLB.SelectEntry( sPageDesc );
1574 0 : aPageCollCB.Check();
1575 :
1576 0 : aPgBrkCB.Enable();
1577 0 : aPgBrkRB.Enable();
1578 0 : aColBrkRB.Enable();
1579 0 : aPgBrkBeforeRB.Enable();
1580 0 : aPgBrkAfterRB.Enable();
1581 0 : aPageCollCB.Enable();
1582 0 : aPgBrkCB.Check();
1583 :
1584 0 : aPgBrkCB.Check( sal_True );
1585 0 : aColBrkRB.Check( sal_False );
1586 0 : aPgBrkBeforeRB.Check( sal_True );
1587 0 : aPgBrkAfterRB.Check( sal_False );
1588 : }
1589 : else
1590 : {
1591 0 : aPageCollLB.SetNoSelection();
1592 0 : aPageCollCB.Check(sal_False);
1593 0 : }
1594 : }
1595 :
1596 0 : if(SFX_ITEM_SET == rSet.GetItemState( RES_BREAK, sal_False, &pItem ))
1597 : {
1598 0 : const SvxFmtBreakItem* pPageBreak = (const SvxFmtBreakItem*)pItem;
1599 0 : SvxBreak eBreak = (SvxBreak)pPageBreak->GetValue();
1600 :
1601 0 : if ( eBreak != SVX_BREAK_NONE )
1602 : {
1603 0 : aPgBrkCB.Check();
1604 0 : aPageCollCB.Enable(sal_False);
1605 0 : aPageCollLB.Enable(sal_False);
1606 0 : aPageNoFT.Enable(sal_False);
1607 0 : aPageNoNF.Enable(sal_False);
1608 : }
1609 0 : switch ( eBreak )
1610 : {
1611 : case SVX_BREAK_PAGE_BEFORE:
1612 0 : aPgBrkRB.Check( sal_True );
1613 0 : aColBrkRB.Check( sal_False );
1614 0 : aPgBrkBeforeRB.Check( sal_True );
1615 0 : aPgBrkAfterRB.Check( sal_False );
1616 0 : break;
1617 : case SVX_BREAK_PAGE_AFTER:
1618 0 : aPgBrkRB.Check( sal_True );
1619 0 : aColBrkRB.Check( sal_False );
1620 0 : aPgBrkBeforeRB.Check( sal_False );
1621 0 : aPgBrkAfterRB.Check( sal_True );
1622 0 : break;
1623 : case SVX_BREAK_COLUMN_BEFORE:
1624 0 : aPgBrkRB.Check( sal_False );
1625 0 : aColBrkRB.Check( sal_True );
1626 0 : aPgBrkBeforeRB.Check( sal_True );
1627 0 : aPgBrkAfterRB.Check( sal_False );
1628 0 : break;
1629 : case SVX_BREAK_COLUMN_AFTER:
1630 0 : aPgBrkRB.Check( sal_False );
1631 0 : aColBrkRB.Check( sal_True );
1632 0 : aPgBrkBeforeRB.Check( sal_False );
1633 0 : aPgBrkAfterRB.Check( sal_True );
1634 0 : break;
1635 : default:; //prevent warning
1636 : }
1637 :
1638 : }
1639 0 : if ( aPgBrkBeforeRB.IsChecked() )
1640 0 : PageBreakPosHdl_Impl( &aPgBrkBeforeRB );
1641 0 : else if ( aPgBrkAfterRB.IsChecked() )
1642 0 : PageBreakPosHdl_Impl( &aPgBrkAfterRB );
1643 0 : PageBreakHdl_Impl( &aPgBrkCB );
1644 0 : }
1645 : }
1646 : else
1647 : {
1648 0 : aPgBrkRB.Enable(sal_False);
1649 0 : aColBrkRB.Enable(sal_False);
1650 0 : aPgBrkBeforeRB.Enable(sal_False);
1651 0 : aPgBrkAfterRB.Enable(sal_False);
1652 0 : aKeepCB .Enable(sal_False);
1653 0 : aSplitCB.Enable(sal_False);
1654 0 : aPgBrkCB.Enable(sal_False);
1655 0 : aPageCollCB.Enable(sal_False);
1656 0 : aPageCollLB.Enable(sal_False);
1657 : }
1658 :
1659 0 : if(SFX_ITEM_SET == rSet.GetItemState( FN_PARAM_TABLE_HEADLINE, sal_False, &pItem ))
1660 : {
1661 0 : sal_uInt16 nRep = ((const SfxUInt16Item*)pItem)->GetValue();
1662 0 : aHeadLineCB.Check( nRep > 0 );
1663 0 : aHeadLineCB.SaveValue();
1664 0 : aRepeatHeaderNF.SetValue( nRep );
1665 0 : aRepeatHeaderNF.SaveValue();
1666 : }
1667 0 : if ( rSet.GetItemState(FN_TABLE_BOX_TEXTORIENTATION) > SFX_ITEM_AVAILABLE )
1668 : {
1669 0 : sal_uLong nDirection = ((const SvxFrameDirectionItem&)rSet.Get(FN_TABLE_BOX_TEXTORIENTATION)).GetValue();
1670 0 : aTextDirectionLB.SelectEntryPos(aTextDirectionLB.GetEntryPos( (const void*)nDirection ));
1671 : }
1672 :
1673 0 : if ( rSet.GetItemState(FN_TABLE_SET_VERT_ALIGN) > SFX_ITEM_AVAILABLE )
1674 : {
1675 0 : sal_uInt16 nVert = ((const SfxUInt16Item&)rSet.Get(FN_TABLE_SET_VERT_ALIGN)).GetValue();
1676 0 : sal_uInt16 nPos = 0;
1677 0 : switch(nVert)
1678 : {
1679 0 : case text::VertOrientation::NONE: nPos = 0; break;
1680 0 : case text::VertOrientation::CENTER: nPos = 1; break;
1681 0 : case text::VertOrientation::BOTTOM: nPos = 2; break;
1682 : }
1683 0 : aVertOrientLB.SelectEntryPos(nPos);
1684 : }
1685 :
1686 0 : aPageCollCB.SaveValue();
1687 0 : aPageCollLB.SaveValue();
1688 0 : aPgBrkCB.SaveValue();
1689 0 : aPgBrkRB.SaveValue();
1690 0 : aColBrkRB.SaveValue();
1691 0 : aPgBrkBeforeRB.SaveValue();
1692 0 : aPgBrkAfterRB.SaveValue();
1693 0 : aPageNoNF.SaveValue();
1694 0 : aTextDirectionLB.SaveValue();
1695 0 : aVertOrientLB.SaveValue();
1696 :
1697 0 : HeadLineCBClickHdl();
1698 0 : }
1699 :
1700 0 : void SwTextFlowPage::SetShell(SwWrtShell* pSh)
1701 : {
1702 0 : pShell = pSh;
1703 0 : bHtmlMode = 0 != (::GetHtmlMode(pShell->GetView().GetDocShell()) & HTMLMODE_ON);
1704 0 : if(bHtmlMode)
1705 : {
1706 0 : aPageNoNF.Enable(sal_False);
1707 0 : aPageNoFT.Enable(sal_False);
1708 : }
1709 0 : }
1710 :
1711 0 : IMPL_LINK_NOARG(SwTextFlowPage, PageBreakHdl_Impl)
1712 : {
1713 0 : if( aPgBrkCB.IsChecked() )
1714 : {
1715 0 : aPgBrkRB. Enable();
1716 0 : aColBrkRB. Enable();
1717 0 : aPgBrkBeforeRB. Enable();
1718 0 : aPgBrkAfterRB. Enable();
1719 :
1720 0 : if ( aPgBrkRB.IsChecked() && aPgBrkBeforeRB.IsChecked() )
1721 : {
1722 0 : aPageCollCB.Enable();
1723 :
1724 0 : sal_Bool bEnable = aPageCollCB.IsChecked() &&
1725 0 : aPageCollLB.GetEntryCount();
1726 0 : aPageCollLB.Enable(bEnable);
1727 0 : if(!bHtmlMode)
1728 : {
1729 0 : aPageNoFT.Enable(bEnable);
1730 0 : aPageNoNF.Enable(bEnable);
1731 : }
1732 : }
1733 : }
1734 : else
1735 : {
1736 0 : aPageCollCB.Check( sal_False );
1737 0 : aPageCollCB.Enable(sal_False);
1738 0 : aPageCollLB.Enable(sal_False);
1739 0 : aPageNoFT.Enable(sal_False);
1740 0 : aPageNoNF.Enable(sal_False);
1741 0 : aPgBrkRB. Enable(sal_False);
1742 0 : aColBrkRB. Enable(sal_False);
1743 0 : aPgBrkBeforeRB. Enable(sal_False);
1744 0 : aPgBrkAfterRB. Enable(sal_False);
1745 : }
1746 0 : return 0;
1747 : }
1748 :
1749 0 : IMPL_LINK_NOARG(SwTextFlowPage, ApplyCollClickHdl_Impl)
1750 : {
1751 0 : sal_Bool bEnable = sal_False;
1752 0 : if ( aPageCollCB.IsChecked() &&
1753 0 : aPageCollLB.GetEntryCount() )
1754 : {
1755 0 : bEnable = sal_True;
1756 0 : aPageCollLB.SelectEntryPos( 0 );
1757 : }
1758 : else
1759 : {
1760 0 : aPageCollLB.SetNoSelection();
1761 : }
1762 0 : aPageCollLB.Enable(bEnable);
1763 0 : if(!bHtmlMode)
1764 : {
1765 0 : aPageNoFT.Enable(bEnable);
1766 0 : aPageNoNF.Enable(bEnable);
1767 : }
1768 0 : return 0;
1769 : }
1770 :
1771 0 : IMPL_LINK( SwTextFlowPage, PageBreakPosHdl_Impl, RadioButton*, pBtn )
1772 : {
1773 0 : if ( aPgBrkCB.IsChecked() )
1774 : {
1775 0 : if ( pBtn == &aPgBrkBeforeRB && aPgBrkRB.IsChecked() )
1776 : {
1777 0 : aPageCollCB.Enable();
1778 :
1779 0 : sal_Bool bEnable = aPageCollCB.IsChecked() &&
1780 0 : aPageCollLB.GetEntryCount();
1781 :
1782 0 : aPageCollLB.Enable(bEnable);
1783 0 : if(!bHtmlMode)
1784 : {
1785 0 : aPageNoFT.Enable(bEnable);
1786 0 : aPageNoNF.Enable(bEnable);
1787 : }
1788 : }
1789 0 : else if ( pBtn == &aPgBrkAfterRB )
1790 : {
1791 0 : aPageCollCB .Check( sal_False );
1792 0 : aPageCollCB .Enable(sal_False);
1793 0 : aPageCollLB .Enable(sal_False);
1794 0 : aPageNoFT .Enable(sal_False);
1795 0 : aPageNoNF .Enable(sal_False);
1796 : }
1797 : }
1798 0 : return 0;
1799 : }
1800 :
1801 0 : IMPL_LINK( SwTextFlowPage, PageBreakTypeHdl_Impl, RadioButton*, pBtn )
1802 : {
1803 0 : if ( pBtn == &aColBrkRB || aPgBrkAfterRB.IsChecked() )
1804 : {
1805 0 : aPageCollCB .Check(sal_False);
1806 0 : aPageCollCB .Enable(sal_False);
1807 0 : aPageCollLB .Enable(sal_False);
1808 0 : aPageNoFT .Enable(sal_False);
1809 0 : aPageNoNF .Enable(sal_False);
1810 : }
1811 0 : else if ( aPgBrkBeforeRB.IsChecked() )
1812 0 : PageBreakPosHdl_Impl( &aPgBrkBeforeRB );
1813 0 : return 0;
1814 : }
1815 :
1816 0 : IMPL_LINK( SwTextFlowPage, SplitHdl_Impl, CheckBox*, pBox )
1817 : {
1818 0 : aSplitRowCB.Enable(pBox->IsChecked());
1819 0 : return 0;
1820 : }
1821 :
1822 0 : IMPL_LINK( SwTextFlowPage, SplitRowHdl_Impl, TriStateBox*, pBox )
1823 : {
1824 0 : pBox->EnableTriState(sal_False);
1825 0 : return 0;
1826 : }
1827 :
1828 0 : IMPL_LINK_NOARG(SwTextFlowPage, HeadLineCBClickHdl)
1829 : {
1830 0 : aRepeatHeaderCombo.Enable(aHeadLineCB.IsChecked());
1831 :
1832 0 : return 0;
1833 : }
1834 :
1835 0 : void SwTextFlowPage::DisablePageBreak()
1836 : {
1837 0 : bPageBreak = sal_False;
1838 0 : aPgBrkCB .Disable();
1839 0 : aPgBrkRB .Disable();
1840 0 : aColBrkRB .Disable();
1841 0 : aPgBrkBeforeRB .Disable();
1842 0 : aPgBrkAfterRB .Disable();
1843 0 : aPageCollCB .Disable();
1844 0 : aPageCollLB .Disable();
1845 0 : aPageNoFT .Disable();
1846 0 : aPageNoNF .Disable();
1847 0 : }
1848 :
1849 :
1850 :
1851 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|