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/layout.hxx>
23 : #include <vcl/msgbox.hxx>
24 : #include <svl/stritem.hxx>
25 : #include <svl/intitem.hxx>
26 : #include <editeng/keepitem.hxx>
27 : #include <editeng/formatbreakitem.hxx>
28 : #include <editeng/ulspitem.hxx>
29 : #include <editeng/frmdiritem.hxx>
30 : #include <svl/ctloptions.hxx>
31 : #include <swmodule.hxx>
32 : #include <fmtornt.hxx>
33 : #include <fmtpdsc.hxx>
34 : #include <fmtlsplt.hxx>
35 :
36 : #include <svtools/htmlcfg.hxx>
37 : #include <fmtrowsplt.hxx>
38 : #include <sfx2/htmlmode.hxx>
39 :
40 : #include "access.hrc"
41 :
42 : #include <docsh.hxx>
43 : #include <wrtsh.hxx>
44 : #include <view.hxx>
45 : #include <viewopt.hxx>
46 : #include <uitool.hxx>
47 : #include <frmatr.hxx>
48 : #include <tabledlg.hxx>
49 : #include <../../uibase/table/tablepg.hxx>
50 : #include <tablemgr.hxx>
51 : #include <pagedesc.hxx>
52 : #include <uiitems.hxx>
53 : #include <poolfmt.hxx>
54 : #include <SwStyleNameMapper.hxx>
55 :
56 : #include <app.hrc>
57 : #include <cmdid.h>
58 : #include <table.hrc>
59 : #include <svx/svxids.hrc>
60 : #include <svx/dialogs.hrc>
61 : #include <svx/flagsdef.hxx>
62 : #include <svx/svxdlg.hxx>
63 :
64 : using namespace ::com::sun::star;
65 :
66 0 : SwFormatTablePage::SwFormatTablePage(vcl::Window* pParent, const SfxItemSet& rSet)
67 : : SfxTabPage(pParent, "FormatTablePage", "modules/swriter/ui/formattablepage.ui", &rSet)
68 : , m_aTextFilter(" .<>")
69 : , pTblData(0)
70 : , nSaveWidth(0)
71 : , nMinTableWidth(MINLAY)
72 : , bModified(false)
73 : , bFull(false)
74 0 : , bHtmlMode(false)
75 : {
76 0 : get(m_pNameED, "name");
77 0 : get(m_pWidthFT, "widthft");
78 0 : m_aWidthMF.set(get<MetricField>("widthmf"));
79 0 : m_aLeftMF.set(get<MetricField>("leftmf"));
80 0 : m_aRightMF.set(get<MetricField>("rightmf"));
81 0 : get(m_pRelWidthCB, "relwidth");
82 0 : get(m_pFullBtn, "full");
83 0 : get(m_pLeftBtn, "left");
84 0 : get(m_pFromLeftBtn, "fromleft");
85 0 : get(m_pRightBtn, "right");
86 0 : get(m_pCenterBtn, "center");
87 0 : get(m_pFreeBtn, "free");
88 0 : get(m_pLeftFT, "leftft");
89 0 : get(m_pRightFT, "rightft");
90 0 : get(m_pTopFT, "aboveft");
91 0 : get(m_pTopMF, "abovemf");
92 0 : get(m_pBottomFT, "belowft");
93 0 : get(m_pBottomMF, "belowmf");
94 0 : get(m_pTextDirectionLB, "textdirection");
95 :
96 0 : SetExchangeSupport();
97 :
98 : const SfxPoolItem* pItem;
99 0 : if(SfxItemState::SET == rSet.GetItemState(SID_HTML_MODE, false, &pItem))
100 0 : bHtmlMode = 0 != (((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON);
101 :
102 0 : bool bCTL = SW_MOD()->GetCTLOptions().IsCTLFontEnabled();
103 0 : get<VclContainer>("properties")->Show(!bHtmlMode && bCTL);
104 :
105 0 : Init();
106 0 : }
107 :
108 0 : void SwFormatTablePage::Init()
109 : {
110 0 : m_aLeftMF.SetMetricFieldMin(-999999);
111 0 : m_aRightMF.SetMetricFieldMin(-999999);
112 :
113 : //handler
114 0 : Link aLk = LINK( this, SwFormatTablePage, AutoClickHdl );
115 0 : m_pFullBtn->SetClickHdl( aLk );
116 0 : m_pFreeBtn->SetClickHdl( aLk );
117 0 : m_pLeftBtn->SetClickHdl( aLk );
118 0 : m_pFromLeftBtn->SetClickHdl( aLk );
119 0 : m_pRightBtn->SetClickHdl( aLk );
120 0 : m_pCenterBtn->SetClickHdl( aLk );
121 :
122 0 : aLk = LINK( this, SwFormatTablePage, UpDownLoseFocusHdl );
123 0 : m_pTopMF->SetUpHdl( aLk );
124 0 : m_pBottomMF->SetUpHdl( aLk );
125 0 : m_aRightMF.SetUpHdl( aLk );
126 0 : m_aLeftMF.SetUpHdl( aLk );
127 0 : m_aWidthMF.SetUpHdl( aLk );
128 :
129 0 : m_pTopMF->SetDownHdl( aLk );
130 0 : m_pBottomMF->SetDownHdl( aLk );
131 0 : m_aRightMF.SetDownHdl( aLk );
132 0 : m_aLeftMF.SetDownHdl( aLk );
133 0 : m_aWidthMF.SetDownHdl( aLk );
134 :
135 0 : m_pTopMF->SetLoseFocusHdl( aLk );
136 0 : m_pBottomMF->SetLoseFocusHdl( aLk );
137 0 : m_aRightMF.SetLoseFocusHdl( aLk );
138 0 : m_aLeftMF.SetLoseFocusHdl( aLk );
139 0 : m_aWidthMF.SetLoseFocusHdl( aLk );
140 :
141 0 : m_pRelWidthCB->SetClickHdl(LINK( this, SwFormatTablePage, RelWidthClickHdl ));
142 0 : }
143 :
144 0 : IMPL_LINK( SwFormatTablePage, RelWidthClickHdl, CheckBox *, pBtn )
145 : {
146 : OSL_ENSURE(pTblData, "table data not available?");
147 0 : bool bIsChecked = pBtn->IsChecked();
148 0 : sal_Int64 nLeft = m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue(FUNIT_TWIP ));
149 0 : sal_Int64 nRight = m_aRightMF.DenormalizePercent(m_aRightMF.GetValue(FUNIT_TWIP ));
150 0 : m_aWidthMF.ShowPercent(bIsChecked);
151 0 : m_aLeftMF.ShowPercent(bIsChecked);
152 0 : m_aRightMF.ShowPercent(bIsChecked);
153 :
154 0 : if (bIsChecked)
155 : {
156 0 : m_aWidthMF.SetRefValue(pTblData->GetSpace());
157 0 : m_aLeftMF.SetRefValue(pTblData->GetSpace());
158 0 : m_aRightMF.SetRefValue(pTblData->GetSpace());
159 0 : m_aLeftMF.SetMetricFieldMin(0); //will be overwritten by the Percentfield
160 0 : m_aRightMF.SetMetricFieldMin(0); //dito
161 0 : m_aLeftMF.SetMetricFieldMax(99);
162 0 : m_aRightMF.SetMetricFieldMax(99);
163 0 : m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(nLeft ), FUNIT_TWIP );
164 0 : m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(nRight ), FUNIT_TWIP );
165 : }
166 : else
167 0 : ModifyHdl(m_aLeftMF.get()); //correct values again
168 :
169 0 : if(m_pFreeBtn->IsChecked())
170 : {
171 0 : bool bEnable = !pBtn->IsChecked();
172 0 : m_aRightMF.Enable(bEnable);
173 0 : m_pRightFT->Enable(bEnable);
174 : }
175 0 : bModified = true;
176 :
177 0 : return 0;
178 : }
179 :
180 0 : IMPL_LINK( SwFormatTablePage, AutoClickHdl, CheckBox *, pBox )
181 : {
182 0 : bool bRestore = true,
183 0 : bLeftEnable = false,
184 0 : bRightEnable= false,
185 0 : bWidthEnable= false,
186 0 : bOthers = true;
187 0 : if ((RadioButton *)pBox == m_pFullBtn)
188 : {
189 0 : m_aLeftMF.SetPrcntValue(0);
190 0 : m_aRightMF.SetPrcntValue(0);
191 0 : nSaveWidth = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue(FUNIT_TWIP )));
192 0 : m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(pTblData->GetSpace() ), FUNIT_TWIP );
193 0 : bFull = true;
194 0 : bRestore = false;
195 : }
196 0 : else if ((RadioButton *)pBox == m_pLeftBtn)
197 : {
198 0 : bRightEnable = bWidthEnable = true;
199 0 : m_aLeftMF.SetPrcntValue(0);
200 : }
201 0 : else if ((RadioButton *) pBox == m_pFromLeftBtn)
202 : {
203 0 : bLeftEnable = bWidthEnable = true;
204 0 : m_aRightMF.SetPrcntValue(0);
205 : }
206 0 : else if ((RadioButton *) pBox == m_pRightBtn)
207 : {
208 0 : bLeftEnable = bWidthEnable = true;
209 0 : m_aRightMF.SetPrcntValue(0);
210 : }
211 0 : else if ((RadioButton *) pBox == m_pCenterBtn)
212 : {
213 0 : bLeftEnable = bWidthEnable = true;
214 : }
215 0 : else if ((RadioButton *) pBox == m_pFreeBtn)
216 : {
217 0 : RightModify();
218 0 : bLeftEnable = true;
219 0 : bWidthEnable = true;
220 0 : bOthers = false;
221 : }
222 0 : m_aLeftMF.Enable(bLeftEnable);
223 0 : m_pLeftFT->Enable(bLeftEnable);
224 0 : m_aWidthMF.Enable(bWidthEnable);
225 0 : m_pWidthFT->Enable(bWidthEnable);
226 0 : if ( bOthers )
227 : {
228 0 : m_aRightMF.Enable(bRightEnable);
229 0 : m_pRightFT->Enable(bRightEnable);
230 0 : m_pRelWidthCB->Enable(bWidthEnable);
231 : }
232 :
233 0 : if(bFull && bRestore)
234 : {
235 : //After being switched on automatic, the width was pinned
236 : //in order to restore the width while switching back to.
237 0 : bFull = false;
238 0 : m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(nSaveWidth ), FUNIT_TWIP );
239 : }
240 0 : ModifyHdl(m_aWidthMF.get());
241 0 : bModified = true;
242 0 : return 0;
243 : }
244 :
245 0 : void SwFormatTablePage::RightModify()
246 : {
247 0 : if(m_pFreeBtn->IsChecked())
248 : {
249 0 : bool bEnable = m_aRightMF.GetValue() == 0;
250 0 : m_pRelWidthCB->Enable(bEnable);
251 0 : if ( !bEnable )
252 : {
253 0 : m_pRelWidthCB->Check(false);
254 0 : RelWidthClickHdl(m_pRelWidthCB);
255 : }
256 0 : bEnable = m_pRelWidthCB->IsChecked();
257 0 : m_aRightMF.Enable(!bEnable);
258 0 : m_pRightFT->Enable(!bEnable);
259 : }
260 0 : }
261 :
262 0 : IMPL_LINK_INLINE_START( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
263 : {
264 0 : if( m_aRightMF.get() == pEdit)
265 0 : RightModify();
266 0 : ModifyHdl( pEdit );
267 0 : return 0;
268 : }
269 0 : IMPL_LINK_INLINE_END( SwFormatTablePage, UpDownLoseFocusHdl, MetricField *, pEdit )
270 :
271 0 : void SwFormatTablePage::ModifyHdl(const Edit * pEdit)
272 : {
273 :
274 0 : SwTwips nCurWidth = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue( FUNIT_TWIP )));
275 0 : SwTwips nPrevWidth = nCurWidth;
276 0 : SwTwips nRight = static_cast< SwTwips >(m_aRightMF.DenormalizePercent(m_aRightMF.GetValue( FUNIT_TWIP )));
277 0 : SwTwips nLeft = static_cast< SwTwips >(m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue( FUNIT_TWIP )));
278 : SwTwips nDiff;
279 :
280 0 : if (pEdit == m_aWidthMF.get())
281 : {
282 0 : if( nCurWidth < MINLAY )
283 0 : nCurWidth = MINLAY;
284 0 : nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
285 : //right aligned: only change the left margin
286 0 : if(m_pRightBtn->IsChecked())
287 0 : nLeft -= nDiff;
288 : //left aligned: only change the right margin
289 0 : else if(m_pLeftBtn->IsChecked())
290 0 : nRight -= nDiff;
291 : //left margin and width allowed - first right - then left
292 0 : else if(m_pFromLeftBtn->IsChecked())
293 : {
294 0 : if( nRight >= nDiff )
295 0 : nRight -= nDiff;
296 : else
297 : {
298 0 : nDiff -= nRight;
299 0 : nRight = 0;
300 0 : if(nLeft >= nDiff)
301 0 : nLeft -= nDiff;
302 : else
303 : {
304 0 : nRight += nLeft - nDiff;
305 0 : nLeft = 0;
306 0 : nCurWidth = pTblData->GetSpace();
307 : }
308 :
309 : }
310 : }
311 : //centered: change both sides equally
312 0 : else if(m_pCenterBtn->IsChecked())
313 : {
314 0 : if((nLeft != nRight))
315 : {
316 0 : nDiff += nLeft + nRight;
317 0 : nLeft = nDiff/2;
318 0 : nRight = nDiff/2;
319 : }
320 : else
321 : {
322 0 : nLeft -= nDiff/2;
323 0 : nRight -= nDiff/2;
324 : }
325 : }
326 : //free alignment: decrease both margins
327 0 : else if(m_pFreeBtn->IsChecked())
328 : {
329 0 : nLeft -= nDiff/2;
330 0 : nRight -= nDiff/2;
331 : }
332 : }
333 0 : if (pEdit == m_aRightMF.get())
334 : {
335 :
336 0 : if( nRight + nLeft > pTblData->GetSpace() - MINLAY )
337 0 : nRight = pTblData->GetSpace() -nLeft - MINLAY;
338 :
339 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
340 : }
341 0 : if (pEdit == m_aLeftMF.get())
342 : {
343 0 : if(!m_pFromLeftBtn->IsChecked())
344 : {
345 0 : bool bCenter = m_pCenterBtn->IsChecked();
346 0 : if( bCenter )
347 0 : nRight = nLeft;
348 0 : if(nRight + nLeft > pTblData->GetSpace() - MINLAY )
349 : {
350 0 : nLeft = bCenter ? (pTblData->GetSpace() - MINLAY) /2 :
351 0 : (pTblData->GetSpace() - MINLAY) - nRight;
352 0 : nRight = bCenter ? (pTblData->GetSpace() - MINLAY) /2 : nRight;
353 : }
354 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
355 : }
356 : else
357 : {
358 : //Upon changes on the left side the right margin will be changed at first,
359 : //thereafter the width.
360 0 : nDiff = nRight + nLeft + nCurWidth - pTblData->GetSpace() ;
361 :
362 0 : nRight -= nDiff;
363 0 : nCurWidth = pTblData->GetSpace() - nLeft - nRight;
364 : }
365 : }
366 0 : if (nCurWidth != nPrevWidth )
367 0 : m_aWidthMF.SetPrcntValue( m_aWidthMF.NormalizePercent( nCurWidth ), FUNIT_TWIP );
368 0 : m_aRightMF.SetPrcntValue( m_aRightMF.NormalizePercent( nRight ), FUNIT_TWIP );
369 0 : m_aLeftMF.SetPrcntValue( m_aLeftMF.NormalizePercent( nLeft ), FUNIT_TWIP );
370 0 : bModified = true;
371 0 : }
372 :
373 0 : SfxTabPage* SwFormatTablePage::Create( vcl::Window* pParent,
374 : const SfxItemSet* rAttrSet)
375 : {
376 0 : return new SwFormatTablePage( pParent, *rAttrSet );
377 : }
378 :
379 0 : bool SwFormatTablePage::FillItemSet( SfxItemSet* rCoreSet )
380 : {
381 : //Test if one of the controls still has the focus
382 0 : if (m_aWidthMF.HasFocus())
383 0 : ModifyHdl(m_aWidthMF.get());
384 0 : else if (m_aLeftMF.HasFocus())
385 0 : ModifyHdl(m_aLeftMF.get());
386 0 : else if(m_aRightMF.HasFocus())
387 0 : ModifyHdl(m_aRightMF.get());
388 0 : else if(m_pTopMF->HasFocus())
389 0 : ModifyHdl(m_pTopMF);
390 0 : else if(m_pBottomMF->HasFocus())
391 0 : ModifyHdl(m_pBottomMF);
392 :
393 0 : if(bModified)
394 : {
395 0 : if( m_pBottomMF->IsValueChangedFromSaved() ||
396 0 : m_pTopMF->IsValueChangedFromSaved() )
397 : {
398 0 : SvxULSpaceItem aULSpace(RES_UL_SPACE);
399 0 : aULSpace.SetUpper( m_pTopMF->Denormalize(m_pTopMF->GetValue( FUNIT_TWIP )));
400 0 : aULSpace.SetLower( m_pBottomMF->Denormalize(m_pBottomMF->GetValue( FUNIT_TWIP )));
401 0 : rCoreSet->Put(aULSpace);
402 : }
403 :
404 : }
405 0 : if(m_pNameED->IsValueChangedFromSaved())
406 : {
407 0 : rCoreSet->Put(SfxStringItem( FN_PARAM_TABLE_NAME, m_pNameED->GetText()));
408 0 : bModified = true;
409 : }
410 :
411 0 : if( m_pTextDirectionLB->IsVisible() )
412 : {
413 0 : const sal_Int32 nPos = m_pTextDirectionLB->GetSelectEntryPos();
414 0 : if ( m_pTextDirectionLB->IsValueChangedFromSaved() )
415 : {
416 : const sal_uInt32 nDirection =
417 0 : (sal_uInt32)(sal_uIntPtr)m_pTextDirectionLB->GetEntryData( nPos );
418 0 : rCoreSet->Put( SvxFrameDirectionItem( (SvxFrameDirection)nDirection, RES_FRAMEDIR));
419 0 : bModified = true;
420 : }
421 : }
422 :
423 0 : return bModified;
424 : }
425 :
426 0 : void SwFormatTablePage::Reset( const SfxItemSet* )
427 : {
428 0 : const SfxItemSet& rSet = GetItemSet();
429 : const SfxPoolItem* pItem;
430 :
431 0 : if(bHtmlMode)
432 : {
433 0 : m_pNameED->Disable();
434 0 : m_pTopFT->Hide();
435 0 : m_pTopMF->Hide();
436 0 : m_pBottomFT->Hide();
437 0 : m_pBottomMF->Hide();
438 0 : m_pFreeBtn->Enable(false);
439 : }
440 0 : FieldUnit aMetric = ::GetDfltMetric(bHtmlMode);
441 0 : m_aWidthMF.SetMetric(aMetric);
442 0 : m_aRightMF.SetMetric(aMetric);
443 0 : m_aLeftMF.SetMetric(aMetric);
444 0 : SetMetric(*m_pTopMF, aMetric);
445 0 : SetMetric(*m_pBottomMF, aMetric);
446 :
447 : //Name
448 0 : if(SfxItemState::SET == rSet.GetItemState( FN_PARAM_TABLE_NAME, false, &pItem ))
449 : {
450 0 : m_pNameED->SetText(((const SfxStringItem*)pItem)->GetValue());
451 0 : m_pNameED->SaveValue();
452 : }
453 :
454 0 : if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP, false, &pItem ))
455 : {
456 0 : pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
457 0 : nMinTableWidth = pTblData->GetColCount() * MINLAY;
458 :
459 0 : if(pTblData->GetWidthPercent())
460 : {
461 0 : m_pRelWidthCB->Check(true);
462 0 : RelWidthClickHdl(m_pRelWidthCB);
463 0 : m_aWidthMF.SetPrcntValue(pTblData->GetWidthPercent(), FUNIT_CUSTOM);
464 :
465 0 : m_aWidthMF.SaveValue();
466 0 : nSaveWidth = static_cast< SwTwips >(m_aWidthMF.GetValue(FUNIT_CUSTOM));
467 : }
468 : else
469 : {
470 : m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(
471 0 : pTblData->GetWidth()), FUNIT_TWIP);
472 0 : m_aWidthMF.SaveValue();
473 0 : nSaveWidth = pTblData->GetWidth();
474 0 : nMinTableWidth = std::min( nSaveWidth, nMinTableWidth );
475 : }
476 :
477 0 : m_aWidthMF.SetRefValue(pTblData->GetSpace());
478 0 : m_aWidthMF.SetLast(m_aWidthMF.NormalizePercent( pTblData->GetSpace() ));
479 0 : m_aLeftMF.SetLast(m_aLeftMF.NormalizePercent( pTblData->GetSpace() ));
480 0 : m_aRightMF.SetLast(m_aRightMF.NormalizePercent( pTblData->GetSpace() ));
481 :
482 : m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(
483 0 : pTblData->GetLeftSpace()), FUNIT_TWIP);
484 : m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(
485 0 : pTblData->GetRightSpace()), FUNIT_TWIP);
486 0 : m_aLeftMF.SaveValue();
487 0 : m_aRightMF.SaveValue();
488 :
489 0 : bool bSetRight = false, bSetLeft = false;
490 0 : switch( pTblData->GetAlign() )
491 : {
492 : case text::HoriOrientation::NONE:
493 0 : m_pFreeBtn->Check();
494 0 : if(m_pRelWidthCB->IsChecked())
495 0 : bSetRight = true;
496 0 : break;
497 : case text::HoriOrientation::FULL:
498 : {
499 0 : bSetRight = bSetLeft = true;
500 0 : m_pFullBtn->Check();
501 0 : m_aWidthMF.Enable(false);
502 0 : m_pRelWidthCB->Enable(false);
503 0 : m_pWidthFT->Enable(false);
504 : }
505 0 : break;
506 : case text::HoriOrientation::LEFT:
507 : {
508 0 : bSetLeft = true;
509 0 : m_pLeftBtn->Check();
510 : }
511 0 : break;
512 : case text::HoriOrientation::LEFT_AND_WIDTH :
513 : {
514 0 : bSetRight = true;
515 0 : m_pFromLeftBtn->Check();
516 : }
517 0 : break;
518 : case text::HoriOrientation::RIGHT:
519 : {
520 0 : bSetRight = true;
521 0 : m_pRightBtn->Check();
522 : }
523 0 : break;
524 : case text::HoriOrientation::CENTER:
525 : {
526 0 : bSetRight = true;
527 0 : m_pCenterBtn->Check();
528 : }
529 0 : break;
530 : }
531 0 : if ( bSetRight )
532 : {
533 0 : m_aRightMF.Enable(false);
534 0 : m_pRightFT->Enable(false);
535 : }
536 0 : if ( bSetLeft )
537 : {
538 0 : m_aLeftMF.Enable(false);
539 0 : m_pLeftFT->Enable(false);
540 : }
541 :
542 : }
543 :
544 : //Margins
545 0 : if(SfxItemState::SET == rSet.GetItemState( RES_UL_SPACE, false,&pItem ))
546 : {
547 : m_pTopMF->SetValue(m_pTopMF->Normalize(
548 0 : ((const SvxULSpaceItem*)pItem)->GetUpper()), FUNIT_TWIP);
549 : m_pBottomMF->SetValue(m_pBottomMF->Normalize(
550 0 : ((const SvxULSpaceItem*)pItem)->GetLower()), FUNIT_TWIP);
551 0 : m_pTopMF->SaveValue();
552 0 : m_pBottomMF->SaveValue();
553 : }
554 :
555 : //Text direction
556 0 : if( SfxItemState::SET == rSet.GetItemState( RES_FRAMEDIR, true, &pItem ) )
557 : {
558 0 : sal_uIntPtr nVal = ((SvxFrameDirectionItem*)pItem)->GetValue();
559 0 : const sal_Int32 nPos = m_pTextDirectionLB->GetEntryPos( (void*) nVal );
560 0 : m_pTextDirectionLB->SelectEntryPos( nPos );
561 0 : m_pTextDirectionLB->SaveValue();
562 : }
563 :
564 0 : m_aWidthMF.SetMax( 2*m_aWidthMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
565 0 : m_aRightMF.SetMax( m_aRightMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
566 0 : m_aLeftMF.SetMax( m_aLeftMF.NormalizePercent( pTblData->GetSpace() ), FUNIT_TWIP );
567 0 : m_aWidthMF.SetMin( m_aWidthMF.NormalizePercent( nMinTableWidth ), FUNIT_TWIP );
568 :
569 0 : }
570 :
571 0 : void SwFormatTablePage::ActivatePage( const SfxItemSet& rSet )
572 : {
573 : OSL_ENSURE(pTblData, "table data not available?");
574 0 : if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP ))
575 : {
576 0 : SwTwips nCurWidth = text::HoriOrientation::FULL != pTblData->GetAlign() ?
577 0 : pTblData->GetWidth() :
578 0 : pTblData->GetSpace();
579 0 : if(pTblData->GetWidthPercent() == 0 &&
580 0 : nCurWidth != m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue(FUNIT_TWIP )))
581 : {
582 : m_aWidthMF.SetPrcntValue(m_aWidthMF.NormalizePercent(
583 0 : nCurWidth), FUNIT_TWIP);
584 0 : m_aWidthMF.SaveValue();
585 0 : nSaveWidth = nCurWidth;
586 : m_aLeftMF.SetPrcntValue(m_aLeftMF.NormalizePercent(
587 0 : pTblData->GetLeftSpace()), FUNIT_TWIP);
588 0 : m_aLeftMF.SaveValue();
589 : m_aRightMF.SetPrcntValue(m_aRightMF.NormalizePercent(
590 0 : pTblData->GetRightSpace()), FUNIT_TWIP);
591 0 : m_aRightMF.SaveValue();
592 : }
593 : }
594 :
595 0 : }
596 :
597 0 : int SwFormatTablePage::DeactivatePage( SfxItemSet* _pSet )
598 : {
599 : //os: VCL doesn't take care of making the active widget
600 : //in the dialog lose the focus
601 0 : m_pNameED->GrabFocus();
602 : //test the table name for spaces
603 0 : OUString sTblName = m_pNameED->GetText();
604 0 : if(sTblName.indexOf(' ') != -1)
605 : {
606 0 : MessageDialog(this, SW_RES(STR_WRONG_TABLENAME), VCL_MESSAGE_INFO).Execute();
607 0 : m_pNameED->GrabFocus();
608 0 : return KEEP_PAGE;
609 : }
610 0 : if(_pSet)
611 : {
612 0 : FillItemSet(_pSet);
613 0 : if(bModified)
614 : {
615 0 : SwTwips lLeft = static_cast< SwTwips >(m_aLeftMF.DenormalizePercent(m_aLeftMF.GetValue( FUNIT_TWIP )));
616 0 : SwTwips lRight = static_cast< SwTwips >(m_aRightMF.DenormalizePercent(m_aRightMF.GetValue( FUNIT_TWIP )));
617 :
618 0 : if( m_aLeftMF.GetText() != m_aLeftMF.GetSavedValue() ||
619 0 : m_aRightMF.GetText() != m_aRightMF.GetSavedValue() )
620 : {
621 0 : pTblData->SetWidthChanged();
622 0 : pTblData->SetLeftSpace( lLeft);
623 0 : pTblData->SetRightSpace( lRight);
624 : }
625 :
626 : SwTwips lWidth;
627 0 : if (m_pRelWidthCB->IsChecked() && m_pRelWidthCB->IsEnabled())
628 : {
629 0 : lWidth = pTblData->GetSpace() - lRight - lLeft;
630 0 : const sal_uInt16 nPercentWidth = m_aWidthMF.GetValue(FUNIT_CUSTOM);
631 0 : if(pTblData->GetWidthPercent() != nPercentWidth)
632 : {
633 0 : pTblData->SetWidthPercent(nPercentWidth);
634 0 : pTblData->SetWidthChanged();
635 : }
636 : }
637 : else
638 : {
639 0 : pTblData->SetWidthPercent(0);
640 0 : lWidth = static_cast< SwTwips >(m_aWidthMF.DenormalizePercent(m_aWidthMF.GetValue( FUNIT_TWIP )));
641 : }
642 0 : pTblData->SetWidth(lWidth);
643 :
644 0 : SwTwips nColSum = 0;
645 :
646 0 : for( sal_uInt16 i = 0; i < pTblData->GetColCount(); i++)
647 : {
648 0 : nColSum += pTblData->GetColumns()[i].nWidth;
649 : }
650 0 : if(nColSum != pTblData->GetWidth())
651 : {
652 : SwTwips nMinWidth = std::min( (long)MINLAY,
653 0 : (long) (pTblData->GetWidth() /
654 0 : pTblData->GetColCount() - 1));
655 0 : SwTwips nDiff = nColSum - pTblData->GetWidth();
656 0 : while ( std::abs(nDiff) > pTblData->GetColCount() + 1 )
657 : {
658 0 : SwTwips nSub = nDiff / pTblData->GetColCount();
659 0 : for( sal_uInt16 i = 0; i < pTblData->GetColCount(); i++)
660 : {
661 0 : if(pTblData->GetColumns()[i].nWidth - nMinWidth > nSub)
662 : {
663 0 : pTblData->GetColumns()[i].nWidth -= nSub;
664 0 : nDiff -= nSub;
665 : }
666 : else
667 : {
668 0 : nDiff -= pTblData->GetColumns()[i].nWidth - nMinWidth;
669 0 : pTblData->GetColumns()[i].nWidth = nMinWidth;
670 : }
671 :
672 : }
673 : }
674 : }
675 :
676 0 : sal_Int16 nAlign = 0;
677 0 : if(m_pRightBtn->IsChecked())
678 0 : nAlign = text::HoriOrientation::RIGHT;
679 0 : else if(m_pLeftBtn->IsChecked())
680 0 : nAlign = text::HoriOrientation::LEFT;
681 0 : else if(m_pFromLeftBtn->IsChecked())
682 0 : nAlign = text::HoriOrientation::LEFT_AND_WIDTH;
683 0 : else if(m_pCenterBtn->IsChecked())
684 0 : nAlign = text::HoriOrientation::CENTER;
685 0 : else if(m_pFreeBtn->IsChecked())
686 0 : nAlign = text::HoriOrientation::NONE;
687 0 : else if(m_pFullBtn->IsChecked())
688 : {
689 0 : nAlign = text::HoriOrientation::FULL;
690 0 : lWidth = lAutoWidth;
691 : }
692 0 : if(nAlign != pTblData->GetAlign())
693 : {
694 0 : pTblData->SetWidthChanged();
695 0 : pTblData->SetAlign(nAlign);
696 : }
697 :
698 0 : if(pTblData->GetWidth() != lWidth )
699 : {
700 0 : pTblData->SetWidthChanged();
701 : pTblData->SetWidth(
702 0 : nAlign == text::HoriOrientation::FULL ? pTblData->GetSpace() : lWidth );
703 : }
704 0 : if(pTblData->HasWidthChanged())
705 0 : _pSet->Put(SwPtrItem(FN_TABLE_REP, pTblData));
706 : }
707 : }
708 0 : return sal_True;
709 : }
710 :
711 : //Description: Page column configuration
712 0 : SwTableColumnPage::SwTableColumnPage(vcl::Window* pParent, const SfxItemSet& rSet)
713 : : SfxTabPage(pParent, "TableColumnPage",
714 : "modules/swriter/ui/tablecolumnpage.ui", &rSet)
715 : , pTblData(0)
716 : , nTableWidth(0)
717 : , nMinWidth(MINLAY)
718 : , nNoOfCols(0)
719 : , nNoOfVisibleCols(0)
720 : , bModified(false)
721 : , bModifyTbl(false)
722 0 : , bPercentMode(false)
723 : {
724 0 : get(m_pModifyTableCB, "adaptwidth");
725 0 : get(m_pProportionalCB, "adaptcolumns");
726 0 : get(m_pSpaceFT, "spaceft");
727 0 : get(m_pSpaceED, "space-nospin");
728 0 : get(m_pUpBtn, "next");
729 0 : get(m_pDownBtn, "back");
730 :
731 0 : m_aFieldArr[0].set(get<MetricField>("width1"));
732 0 : m_aFieldArr[1].set(get<MetricField>("width2"));
733 0 : m_aFieldArr[2].set(get<MetricField>("width3"));
734 0 : m_aFieldArr[3].set(get<MetricField>("width4"));
735 0 : m_aFieldArr[4].set(get<MetricField>("width5"));
736 0 : m_aFieldArr[5].set(get<MetricField>("width6"));
737 :
738 0 : m_pTextArr[0] = get<FixedText>("1");
739 0 : m_pTextArr[1] = get<FixedText>("2");
740 0 : m_pTextArr[2] = get<FixedText>("3");
741 0 : m_pTextArr[3] = get<FixedText>("4");
742 0 : m_pTextArr[4] = get<FixedText>("5");
743 0 : m_pTextArr[5] = get<FixedText>("6");
744 :
745 0 : SetExchangeSupport();
746 :
747 : const SfxPoolItem* pItem;
748 0 : Init((SfxItemState::SET == rSet.GetItemState( SID_HTML_MODE, false,&pItem )
749 0 : && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON));
750 0 : }
751 :
752 : //Description: Page column configuration
753 0 : SwTableColumnPage::~SwTableColumnPage()
754 : {
755 0 : }
756 :
757 0 : SfxTabPage* SwTableColumnPage::Create( vcl::Window* pParent,
758 : const SfxItemSet* rAttrSet)
759 : {
760 0 : return new SwTableColumnPage( pParent, *rAttrSet );
761 : }
762 :
763 0 : void SwTableColumnPage::Reset( const SfxItemSet* )
764 : {
765 0 : const SfxItemSet& rSet = GetItemSet();
766 :
767 : const SfxPoolItem* pItem;
768 0 : if(SfxItemState::SET == rSet.GetItemState( FN_TABLE_REP, false, &pItem ))
769 : {
770 0 : pTblData = (SwTableRep*)((const SwPtrItem*) pItem)->GetValue();
771 0 : nNoOfVisibleCols = pTblData->GetColCount();
772 0 : nNoOfCols = pTblData->GetAllColCount();
773 0 : nTableWidth = pTblData->GetAlign() != text::HoriOrientation::FULL &&
774 0 : pTblData->GetAlign() != text::HoriOrientation::LEFT_AND_WIDTH?
775 0 : pTblData->GetWidth() : pTblData->GetSpace();
776 :
777 0 : for( sal_uInt16 i = 0; i < nNoOfCols; i++ )
778 : {
779 0 : if( pTblData->GetColumns()[i].nWidth < nMinWidth )
780 0 : nMinWidth = pTblData->GetColumns()[i].nWidth;
781 : }
782 0 : sal_Int64 nMinTwips = m_aFieldArr[0].NormalizePercent( nMinWidth );
783 0 : sal_Int64 nMaxTwips = m_aFieldArr[0].NormalizePercent( nTableWidth );
784 0 : for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
785 : {
786 0 : m_aFieldArr[i].SetPrcntValue( m_aFieldArr[i].NormalizePercent(
787 0 : GetVisibleWidth(i) ), FUNIT_TWIP );
788 0 : m_aFieldArr[i].SetMin( nMinTwips , FUNIT_TWIP );
789 0 : m_aFieldArr[i].SetMax( nMaxTwips , FUNIT_TWIP );
790 0 : m_aFieldArr[i].Enable();
791 0 : m_pTextArr[i]->Enable();
792 : }
793 :
794 0 : if( nNoOfVisibleCols > MET_FIELDS )
795 0 : m_pUpBtn->Enable();
796 :
797 0 : for( sal_uInt16 i = nNoOfVisibleCols; i < MET_FIELDS; ++i )
798 : {
799 0 : m_aFieldArr[i].SetText( OUString() );
800 0 : m_pTextArr[i]->Disable();
801 : }
802 : }
803 0 : ActivatePage(rSet);
804 :
805 0 : }
806 :
807 0 : void SwTableColumnPage::Init(bool bWeb)
808 : {
809 0 : FieldUnit aMetric = ::GetDfltMetric(bWeb);
810 0 : Link aLkUp = LINK( this, SwTableColumnPage, UpHdl );
811 0 : Link aLkDown = LINK( this, SwTableColumnPage, DownHdl );
812 0 : Link aLkLF = LINK( this, SwTableColumnPage, LoseFocusHdl );
813 0 : for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
814 : {
815 0 : aValueTbl[i] = i;
816 0 : m_aFieldArr[i].SetMetric(aMetric);
817 0 : m_aFieldArr[i].SetUpHdl( aLkUp );
818 0 : m_aFieldArr[i].SetDownHdl( aLkDown );
819 0 : m_aFieldArr[i].SetLoseFocusHdl( aLkLF );
820 : }
821 0 : SetMetric(*m_pSpaceED, aMetric);
822 :
823 0 : Link aLk = LINK( this, SwTableColumnPage, AutoClickHdl );
824 0 : m_pUpBtn->SetClickHdl( aLk );
825 0 : m_pDownBtn->SetClickHdl( aLk );
826 :
827 0 : aLk = LINK( this, SwTableColumnPage, ModeHdl );
828 0 : m_pModifyTableCB->SetClickHdl( aLk );
829 0 : m_pProportionalCB->SetClickHdl( aLk );
830 0 : }
831 :
832 0 : IMPL_LINK( SwTableColumnPage, AutoClickHdl, CheckBox *, pBox )
833 : {
834 : //move display window
835 0 : if(pBox == (CheckBox *)m_pDownBtn)
836 : {
837 0 : if(aValueTbl[0] > 0)
838 : {
839 0 : for( sal_uInt16 i=0; i < MET_FIELDS; i++ )
840 0 : aValueTbl[i] -= 1;
841 : }
842 : }
843 0 : if (pBox == (CheckBox *)m_pUpBtn)
844 : {
845 0 : if( aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 )
846 : {
847 0 : for(sal_uInt16 i=0;i < MET_FIELDS;i++)
848 0 : aValueTbl[i] += 1;
849 : }
850 : }
851 0 : for( sal_uInt16 i = 0; (i < nNoOfVisibleCols ) && ( i < MET_FIELDS); i++ )
852 : {
853 0 : OUString sEntry('~');
854 0 : OUString sIndex = OUString::number( aValueTbl[i] + 1 );
855 0 : sEntry += sIndex;
856 0 : m_pTextArr[i]->SetText( sEntry );
857 :
858 : //added by menghu for SODC_5143,12/12/2006
859 0 : OUString sColumnWidth = SW_RESSTR( STR_ACCESS_COLUMN_WIDTH);
860 0 : sColumnWidth = sColumnWidth.replaceFirst( "%1", sIndex );
861 0 : m_aFieldArr[i].SetAccessibleName( sColumnWidth );
862 0 : }
863 :
864 0 : m_pDownBtn->Enable(aValueTbl[0] > 0);
865 0 : m_pUpBtn->Enable(aValueTbl[ MET_FIELDS -1 ] < nNoOfVisibleCols -1 );
866 0 : UpdateCols(0);
867 0 : return 0;
868 : }
869 :
870 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, UpHdl, MetricField*, pEdit )
871 : {
872 0 : bModified = true;
873 0 : ModifyHdl( pEdit );
874 0 : return 0;
875 : }
876 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, UpHdl, MetricField*, pEdit )
877 :
878 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, DownHdl, MetricField*, pEdit )
879 : {
880 0 : bModified = true;
881 0 : ModifyHdl( pEdit );
882 0 : return 0;
883 : }
884 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, DownHdl, MetricField*, pEdit )
885 :
886 0 : IMPL_LINK_INLINE_START( SwTableColumnPage, LoseFocusHdl, MetricField*, pEdit )
887 : {
888 0 : if (pEdit->IsModified())
889 : {
890 0 : bModified = true;
891 0 : ModifyHdl( pEdit );
892 : }
893 0 : return 0;
894 : }
895 0 : IMPL_LINK_INLINE_END( SwTableColumnPage, LoseFocusHdl, MetricField*, pEdit )
896 :
897 0 : IMPL_LINK( SwTableColumnPage, ModeHdl, CheckBox*, pBox )
898 : {
899 0 : bool bCheck = pBox->IsChecked();
900 0 : if (pBox == m_pProportionalCB)
901 : {
902 0 : if(bCheck)
903 0 : m_pModifyTableCB->Check();
904 0 : m_pModifyTableCB->Enable(!bCheck && bModifyTbl);
905 : }
906 0 : return 0;
907 : }
908 :
909 0 : bool SwTableColumnPage::FillItemSet( SfxItemSet* )
910 : {
911 0 : for( sal_uInt16 i = 0; i < MET_FIELDS; i++ )
912 : {
913 0 : if (m_aFieldArr[i].HasFocus())
914 : {
915 0 : LoseFocusHdl(m_aFieldArr[i].get());
916 0 : break;
917 : }
918 : }
919 :
920 0 : if(bModified)
921 : {
922 0 : pTblData->SetColsChanged();
923 : }
924 0 : return bModified;
925 : }
926 :
927 0 : void SwTableColumnPage::ModifyHdl( MetricField* pField )
928 : {
929 0 : PercentField *pEdit = NULL;
930 : sal_uInt16 i;
931 :
932 0 : for( i = 0; i < MET_FIELDS; i++)
933 : {
934 0 : if (pField == m_aFieldArr[i].get())
935 : {
936 0 : pEdit = &m_aFieldArr[i];
937 0 : break;
938 : }
939 : }
940 :
941 0 : if (MET_FIELDS <= i || !pEdit)
942 : {
943 : OSL_ENSURE(false, "cannot happen.");
944 0 : return;
945 : }
946 :
947 0 : SetVisibleWidth(aValueTbl[i], static_cast< SwTwips >(pEdit->DenormalizePercent(pEdit->GetValue( FUNIT_TWIP ))) );
948 :
949 0 : UpdateCols( aValueTbl[i] );
950 : }
951 :
952 0 : void SwTableColumnPage::UpdateCols( sal_uInt16 nAktPos )
953 : {
954 0 : SwTwips nSum = 0;
955 :
956 0 : for( sal_uInt16 i = 0; i < nNoOfCols; i++ )
957 : {
958 0 : nSum += (pTblData->GetColumns())[i].nWidth;
959 : }
960 0 : SwTwips nDiff = nSum - nTableWidth;
961 :
962 0 : bool bModifyTable = m_pModifyTableCB->IsChecked();
963 0 : bool bProp = m_pProportionalCB->IsChecked();
964 :
965 0 : if(!bModifyTable && !bProp )
966 : {
967 : //The table width is constant, the difference is balanced with the other columns
968 0 : sal_uInt16 nLoopCount = 0;
969 0 : while( nDiff )
970 : {
971 0 : if( ++nAktPos == nNoOfVisibleCols)
972 : {
973 0 : nAktPos = 0;
974 0 : ++nLoopCount;
975 : //#i101353# in small tables it might not be possible to balance column width
976 0 : if( nLoopCount > 1 )
977 0 : break;
978 : }
979 0 : if( nDiff < 0 )
980 : {
981 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
982 0 : nDiff = 0;
983 : }
984 0 : else if( GetVisibleWidth(nAktPos) >= nDiff + nMinWidth )
985 : {
986 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
987 0 : nDiff = 0;
988 : }
989 0 : if( nDiff > 0 && GetVisibleWidth(nAktPos) > nMinWidth )
990 : {
991 0 : if( nDiff >= (GetVisibleWidth(nAktPos) - nMinWidth) )
992 : {
993 0 : nDiff -= (GetVisibleWidth(nAktPos) - nMinWidth);
994 0 : SetVisibleWidth(nAktPos, nMinWidth);
995 : }
996 : else
997 : {
998 0 : nDiff = 0;
999 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) -nDiff);
1000 : }
1001 : OSL_ENSURE(nDiff >= 0, "nDiff < 0 cannot be here!");
1002 : }
1003 0 : }
1004 : }
1005 0 : else if(bModifyTable && !bProp)
1006 : {
1007 : //Difference is balanced by the width of the table,
1008 : //other columns remain unchanged.
1009 : OSL_ENSURE(nDiff <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
1010 0 : SwTwips nActSpace = pTblData->GetSpace() - nTableWidth;
1011 0 : if(nDiff > nActSpace)
1012 : {
1013 0 : nTableWidth = pTblData->GetSpace();
1014 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nActSpace );
1015 : }
1016 : else
1017 : {
1018 0 : nTableWidth += nDiff;
1019 0 : }
1020 : }
1021 0 : else if(bModifyTable && bProp)
1022 : {
1023 : //All columns will be changed proportionally with,
1024 : //the table width is adjusted accordingly.
1025 : OSL_ENSURE(nDiff * nNoOfVisibleCols <= pTblData->GetSpace() - nTableWidth, "wrong maximum" );
1026 0 : long nAdd = nDiff;
1027 0 : if(nDiff * nNoOfVisibleCols > pTblData->GetSpace() - nTableWidth)
1028 : {
1029 0 : nAdd = (pTblData->GetSpace() - nTableWidth) / nNoOfVisibleCols;
1030 0 : SetVisibleWidth(nAktPos, GetVisibleWidth(nAktPos) - nDiff + nAdd );
1031 0 : nDiff = nAdd;
1032 : }
1033 0 : if(nAdd)
1034 0 : for( sal_uInt16 i = 0; i < nNoOfVisibleCols; i++ )
1035 : {
1036 0 : if(i == nAktPos)
1037 0 : continue;
1038 : SwTwips nVisWidth;
1039 0 : if((nVisWidth = GetVisibleWidth(i)) + nDiff < MINLAY)
1040 : {
1041 0 : nAdd += nVisWidth - MINLAY;
1042 0 : SetVisibleWidth(i, MINLAY);
1043 : }
1044 : else
1045 : {
1046 0 : SetVisibleWidth(i, nVisWidth + nDiff);
1047 0 : nAdd += nDiff;
1048 : }
1049 :
1050 : }
1051 0 : nTableWidth += nAdd;
1052 : }
1053 :
1054 0 : if(!bPercentMode)
1055 0 : m_pSpaceED->SetValue(m_pSpaceED->Normalize( pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
1056 :
1057 0 : for( sal_uInt16 i = 0; ( i < nNoOfVisibleCols ) && ( i < MET_FIELDS ); i++)
1058 : {
1059 0 : m_aFieldArr[i].SetPrcntValue(m_aFieldArr[i].NormalizePercent(
1060 0 : GetVisibleWidth(aValueTbl[i]) ), FUNIT_TWIP);
1061 0 : m_aFieldArr[i].ClearModifyFlag();
1062 : }
1063 0 : }
1064 :
1065 0 : void SwTableColumnPage::ActivatePage( const SfxItemSet& )
1066 : {
1067 0 : bPercentMode = pTblData->GetWidthPercent() != 0;
1068 0 : for( sal_uInt16 i = 0; (i < MET_FIELDS) && (i < nNoOfVisibleCols); i++ )
1069 : {
1070 0 : m_aFieldArr[i].SetRefValue(pTblData->GetWidth());
1071 0 : m_aFieldArr[i].ShowPercent( bPercentMode );
1072 : }
1073 :
1074 0 : const sal_uInt16 nTblAlign = pTblData->GetAlign();
1075 0 : if((text::HoriOrientation::FULL != nTblAlign && nTableWidth != pTblData->GetWidth()) ||
1076 0 : (text::HoriOrientation::FULL == nTblAlign && nTableWidth != pTblData->GetSpace()))
1077 : {
1078 : nTableWidth = text::HoriOrientation::FULL == nTblAlign ?
1079 0 : pTblData->GetSpace() :
1080 0 : pTblData->GetWidth();
1081 0 : UpdateCols(0);
1082 : }
1083 0 : bModifyTbl = true;
1084 0 : if(pTblData->GetWidthPercent() ||
1085 0 : text::HoriOrientation::FULL == nTblAlign ||
1086 0 : pTblData->IsLineSelected() )
1087 0 : bModifyTbl = false;
1088 0 : if(bPercentMode)
1089 : {
1090 0 : m_pModifyTableCB->Check(false);
1091 0 : m_pProportionalCB->Check(false);
1092 : }
1093 0 : else if( !bModifyTbl )
1094 : {
1095 0 : m_pProportionalCB->Check(false);
1096 0 : m_pModifyTableCB->Check(false);
1097 : }
1098 0 : m_pSpaceFT->Enable(!bPercentMode);
1099 0 : m_pSpaceED->Enable(!bPercentMode);
1100 0 : m_pModifyTableCB->Enable( !bPercentMode && bModifyTbl );
1101 0 : m_pProportionalCB->Enable(!bPercentMode && bModifyTbl );
1102 :
1103 : m_pSpaceED->SetValue(m_pSpaceED->Normalize(
1104 0 : pTblData->GetSpace() - nTableWidth) , FUNIT_TWIP);
1105 :
1106 0 : }
1107 :
1108 0 : int SwTableColumnPage::DeactivatePage( SfxItemSet* _pSet )
1109 : {
1110 0 : if(_pSet)
1111 : {
1112 0 : FillItemSet(_pSet);
1113 0 : if(text::HoriOrientation::FULL != pTblData->GetAlign() && pTblData->GetWidth() != nTableWidth)
1114 : {
1115 0 : pTblData->SetWidth(nTableWidth);
1116 0 : SwTwips nDiff = pTblData->GetSpace() - pTblData->GetWidth() -
1117 0 : pTblData->GetLeftSpace() - pTblData->GetRightSpace();
1118 0 : switch( pTblData->GetAlign() )
1119 : {
1120 : case text::HoriOrientation::RIGHT:
1121 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff);
1122 0 : break;
1123 : case text::HoriOrientation::LEFT:
1124 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff);
1125 0 : break;
1126 : case text::HoriOrientation::NONE:
1127 : {
1128 0 : SwTwips nDiff2 = nDiff/2;
1129 0 : if( nDiff > 0 ||
1130 0 : (-nDiff2 < pTblData->GetRightSpace() && - nDiff2 < pTblData->GetLeftSpace()))
1131 : {
1132 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff2);
1133 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff2);
1134 : }
1135 : else
1136 : {
1137 0 : if(pTblData->GetRightSpace() > pTblData->GetLeftSpace())
1138 : {
1139 0 : pTblData->SetLeftSpace(0);
1140 0 : pTblData->SetRightSpace(pTblData->GetSpace() - pTblData->GetWidth());
1141 : }
1142 : else
1143 : {
1144 0 : pTblData->SetRightSpace(0);
1145 0 : pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
1146 : }
1147 : }
1148 : }
1149 0 : break;
1150 : case text::HoriOrientation::CENTER:
1151 0 : pTblData->SetRightSpace(pTblData->GetRightSpace() + nDiff/2);
1152 0 : pTblData->SetLeftSpace(pTblData->GetLeftSpace() + nDiff/2);
1153 0 : break;
1154 : case text::HoriOrientation::LEFT_AND_WIDTH :
1155 0 : if(nDiff > pTblData->GetRightSpace())
1156 : {
1157 0 : pTblData->SetLeftSpace(pTblData->GetSpace() - pTblData->GetWidth());
1158 : }
1159 : pTblData->SetRightSpace(
1160 0 : pTblData->GetSpace() - pTblData->GetWidth() - pTblData->GetLeftSpace());
1161 0 : break;
1162 : }
1163 0 : pTblData->SetWidthChanged();
1164 : }
1165 0 : _pSet->Put(SwPtrItem( FN_TABLE_REP, pTblData ));
1166 : }
1167 0 : return sal_True;
1168 : }
1169 :
1170 0 : SwTwips SwTableColumnPage::GetVisibleWidth(sal_uInt16 nPos)
1171 : {
1172 0 : sal_uInt16 i=0;
1173 :
1174 0 : while( nPos )
1175 : {
1176 0 : if(pTblData->GetColumns()[i].bVisible && nPos)
1177 0 : nPos--;
1178 0 : i++;
1179 : }
1180 0 : SwTwips nReturn = pTblData->GetColumns()[i].nWidth;
1181 : OSL_ENSURE(i < nNoOfCols, "Array index out of range");
1182 0 : while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
1183 0 : nReturn += pTblData->GetColumns()[++i].nWidth;
1184 :
1185 0 : return nReturn;
1186 : }
1187 :
1188 0 : void SwTableColumnPage::SetVisibleWidth(sal_uInt16 nPos, SwTwips nNewWidth)
1189 : {
1190 0 : sal_uInt16 i=0;
1191 0 : while( nPos )
1192 : {
1193 0 : if(pTblData->GetColumns()[i].bVisible && nPos)
1194 0 : nPos--;
1195 0 : i++;
1196 : }
1197 : OSL_ENSURE(i < nNoOfCols, "Array index out of range");
1198 0 : pTblData->GetColumns()[i].nWidth = nNewWidth;
1199 0 : while(!pTblData->GetColumns()[i].bVisible && (i + 1) < nNoOfCols)
1200 0 : pTblData->GetColumns()[++i].nWidth = 0;
1201 :
1202 0 : }
1203 :
1204 0 : SwTableTabDlg::SwTableTabDlg(vcl::Window* pParent, SfxItemPool&,
1205 : const SfxItemSet* pItemSet, SwWrtShell* pSh)
1206 : : SfxTabDialog(0, pParent, "TablePropertiesDialog",
1207 : "modules/swriter/ui/tableproperties.ui", pItemSet)
1208 : , pShell(pSh)
1209 0 : , m_nHtmlMode(::GetHtmlMode(pSh->GetView().GetDocShell()))
1210 : {
1211 0 : SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
1212 : OSL_ENSURE(pFact, "Dialog creation failed!");
1213 0 : AddTabPage("table", &SwFormatTablePage::Create, 0);
1214 0 : m_nTextFlowId = AddTabPage("textflow", &SwTextFlowPage::Create, 0);
1215 0 : AddTabPage("columns", &SwTableColumnPage::Create, 0);
1216 0 : m_nBackgroundId = AddTabPage("background", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_BACKGROUND), 0);
1217 0 : m_nBorderId = AddTabPage("borders", pFact->GetTabPageCreatorFunc(RID_SVXPAGE_BORDER), 0);
1218 0 : }
1219 :
1220 0 : void SwTableTabDlg::PageCreated(sal_uInt16 nId, SfxTabPage& rPage)
1221 : {
1222 0 : SfxAllItemSet aSet(*(GetInputSetImpl()->GetPool()));
1223 0 : if (nId == m_nBackgroundId)
1224 : {
1225 0 : sal_Int32 nFlagType = SVX_SHOW_TBLCTL;
1226 0 : if(!( m_nHtmlMode & HTMLMODE_ON ) ||
1227 0 : m_nHtmlMode & HTMLMODE_SOME_STYLES)
1228 0 : nFlagType |= SVX_SHOW_SELECTOR;
1229 0 : aSet.Put (SfxUInt32Item(SID_FLAG_TYPE, nFlagType));
1230 0 : rPage.PageCreated(aSet);
1231 : }
1232 0 : else if (nId == m_nBorderId)
1233 : {
1234 0 : aSet.Put (SfxUInt16Item(SID_SWMODE_TYPE,SW_BORDER_MODE_TABLE));
1235 0 : rPage.PageCreated(aSet);
1236 : }
1237 0 : else if (nId == m_nTextFlowId)
1238 : {
1239 0 : ((SwTextFlowPage&)rPage).SetShell(pShell);
1240 0 : const sal_uInt16 eType = pShell->GetFrmType(0,true);
1241 0 : if( !(FRMTYPE_BODY & eType) )
1242 0 : ((SwTextFlowPage&)rPage).DisablePageBreak();
1243 0 : }
1244 0 : }
1245 :
1246 0 : SwTextFlowPage::SwTextFlowPage(vcl::Window* pParent, const SfxItemSet& rSet)
1247 : : SfxTabPage(pParent, "TableTextFlowPage",
1248 : "modules/swriter/ui/tabletextflowpage.ui", &rSet)
1249 : , pShell(0)
1250 : , bPageBreak(true)
1251 0 : , bHtmlMode(false)
1252 : {
1253 0 : get(m_pPgBrkCB, "break");
1254 :
1255 0 : get(m_pPgBrkRB, "page");
1256 0 : get(m_pColBrkRB, "column");
1257 :
1258 0 : get(m_pPgBrkBeforeRB, "before");
1259 0 : get(m_pPgBrkAfterRB, "after");
1260 :
1261 0 : get(m_pPageCollCB, "pagestyle");
1262 0 : get(m_pPageCollLB, "pagestylelb");
1263 0 : get(m_pPageNoFT, "pagenoft");
1264 0 : get(m_pPageNoNF, "pagenonf");
1265 :
1266 0 : get(m_pSplitCB, "split");
1267 0 : get(m_pSplitRowCB, "splitrow");
1268 0 : get(m_pKeepCB, "keep");
1269 0 : get(m_pHeadLineCB, "headline");
1270 :
1271 0 : get(m_pRepeatHeaderCombo, "repeatheader");
1272 0 : get(m_pRepeatHeaderNF, "repeatheadernf");
1273 :
1274 0 : get(m_pTextDirectionLB, "textdirection");
1275 0 : get(m_pVertOrientLB, "vertorient");
1276 :
1277 0 : m_pPgBrkRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
1278 0 : m_pColBrkRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
1279 0 : m_pPgBrkBeforeRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
1280 0 : m_pPgBrkAfterRB->SetAccessibleRelationMemberOf(m_pPgBrkCB);
1281 0 : m_pPageCollLB->SetAccessibleName(m_pPageCollCB->GetText());
1282 :
1283 0 : m_pPgBrkCB->SetClickHdl(LINK(this, SwTextFlowPage, PageBreakHdl_Impl));
1284 : m_pPgBrkBeforeRB->SetClickHdl(
1285 0 : LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
1286 : m_pPgBrkAfterRB->SetClickHdl(
1287 0 : LINK( this, SwTextFlowPage, PageBreakPosHdl_Impl ) );
1288 : m_pPageCollCB->SetClickHdl(
1289 0 : LINK( this, SwTextFlowPage, ApplyCollClickHdl_Impl ) );
1290 : m_pColBrkRB->SetClickHdl(
1291 0 : LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
1292 : m_pPgBrkRB->SetClickHdl(
1293 0 : LINK( this, SwTextFlowPage, PageBreakTypeHdl_Impl ) );
1294 : m_pSplitCB->SetClickHdl(
1295 0 : LINK( this, SwTextFlowPage, SplitHdl_Impl));
1296 : m_pSplitRowCB->SetClickHdl(
1297 0 : LINK( this, SwTextFlowPage, SplitRowHdl_Impl));
1298 0 : m_pHeadLineCB->SetClickHdl( LINK( this, SwTextFlowPage, HeadLineCBClickHdl ) );
1299 :
1300 : #ifndef SW_FILEFORMAT_40
1301 : const SfxPoolItem *pItem;
1302 0 : if(SfxItemState::SET == rSet.GetItemState( SID_HTML_MODE, false,&pItem )
1303 0 : && ((const SfxUInt16Item*)pItem)->GetValue() & HTMLMODE_ON)
1304 : #endif
1305 : {
1306 0 : m_pKeepCB->Hide();
1307 0 : m_pSplitCB->Hide();
1308 0 : m_pSplitRowCB->Hide();
1309 : }
1310 :
1311 0 : HeadLineCBClickHdl();
1312 0 : }
1313 :
1314 0 : SwTextFlowPage::~SwTextFlowPage()
1315 : {
1316 0 : }
1317 :
1318 0 : SfxTabPage* SwTextFlowPage::Create( vcl::Window* pParent,
1319 : const SfxItemSet* rAttrSet)
1320 : {
1321 0 : return new SwTextFlowPage(pParent, *rAttrSet);
1322 : }
1323 :
1324 0 : bool SwTextFlowPage::FillItemSet( SfxItemSet* rSet )
1325 : {
1326 0 : bool bModified = false;
1327 :
1328 : //Repeat Heading
1329 0 : if(m_pHeadLineCB->IsValueChangedFromSaved() ||
1330 0 : m_pRepeatHeaderNF->IsValueChangedFromSaved() )
1331 : {
1332 : bModified |= 0 != rSet->Put(
1333 0 : SfxUInt16Item(FN_PARAM_TABLE_HEADLINE, m_pHeadLineCB->IsChecked()? sal_uInt16(m_pRepeatHeaderNF->GetValue()) : 0 ));
1334 : }
1335 0 : if(m_pKeepCB->IsValueChangedFromSaved())
1336 0 : bModified |= 0 != rSet->Put( SvxFmtKeepItem( m_pKeepCB->IsChecked(), RES_KEEP));
1337 :
1338 0 : if(m_pSplitCB->IsValueChangedFromSaved())
1339 0 : bModified |= 0 != rSet->Put( SwFmtLayoutSplit( m_pSplitCB->IsChecked()));
1340 :
1341 0 : if(m_pSplitRowCB->IsValueChangedFromSaved())
1342 0 : bModified |= 0 != rSet->Put( SwFmtRowSplit( m_pSplitRowCB->IsChecked()));
1343 :
1344 0 : const SvxFmtBreakItem* pBreak = (const SvxFmtBreakItem*)GetOldItem( *rSet, RES_BREAK );
1345 0 : const SwFmtPageDesc* pDesc = (const SwFmtPageDesc*) GetOldItem( *rSet, RES_PAGEDESC );
1346 :
1347 0 : bool bState = m_pPageCollCB->IsChecked();
1348 :
1349 : //If we have a page style, then there's no break
1350 0 : bool bPageItemPut = false;
1351 0 : if ( bState != (m_pPageCollCB->GetSavedValue() == 1) ||
1352 0 : ( bState &&
1353 0 : m_pPageCollLB->IsValueChangedFromSaved() )
1354 0 : || (m_pPageNoNF->IsEnabled() && m_pPageNoNF->IsValueModified()) )
1355 : {
1356 0 : OUString sPage;
1357 :
1358 0 : if ( bState )
1359 : {
1360 0 : sPage = m_pPageCollLB->GetSelectEntry();
1361 : }
1362 0 : sal_uInt16 nPgNum = static_cast< sal_uInt16 >(m_pPageNoNF->GetValue());
1363 0 : if ( !pDesc || !pDesc->GetPageDesc() ||
1364 0 : ( pDesc->GetPageDesc() && ((pDesc->GetPageDesc()->GetName() != sPage) ||
1365 0 : !comphelper::string::equals(m_pPageNoNF->GetSavedValue(), nPgNum))))
1366 : {
1367 0 : SwFmtPageDesc aFmt( pShell->FindPageDescByName( sPage, true ) );
1368 0 : aFmt.SetNumOffset(bState ? nPgNum : 0);
1369 0 : bModified |= 0 != rSet->Put( aFmt );
1370 0 : bPageItemPut = bState;
1371 0 : }
1372 : }
1373 0 : bool bIsChecked = m_pPgBrkCB->IsChecked();
1374 0 : if ( !bPageItemPut &&
1375 0 : ( bState != (m_pPageCollCB->GetSavedValue() == 1) ||
1376 0 : bIsChecked != (m_pPgBrkCB->GetSavedValue() ==1) ||
1377 0 : m_pPgBrkBeforeRB->IsValueChangedFromSaved() ||
1378 0 : m_pPgBrkRB->IsValueChangedFromSaved() ))
1379 : {
1380 : SvxFmtBreakItem aBreak(
1381 0 : (const SvxFmtBreakItem&)GetItemSet().Get( RES_BREAK ) );
1382 :
1383 0 : if(bIsChecked)
1384 : {
1385 0 : bool bBefore = m_pPgBrkBeforeRB->IsChecked();
1386 :
1387 0 : if ( m_pPgBrkRB->IsChecked() )
1388 : {
1389 0 : if ( bBefore )
1390 0 : aBreak.SetValue( SVX_BREAK_PAGE_BEFORE );
1391 : else
1392 0 : aBreak.SetValue( SVX_BREAK_PAGE_AFTER );
1393 : }
1394 : else
1395 : {
1396 0 : if ( bBefore )
1397 0 : aBreak.SetValue( SVX_BREAK_COLUMN_BEFORE );
1398 : else
1399 0 : aBreak.SetValue( SVX_BREAK_COLUMN_AFTER );
1400 : }
1401 : }
1402 : else
1403 : {
1404 0 : aBreak.SetValue( SVX_BREAK_NONE );
1405 : }
1406 :
1407 0 : if ( !pBreak || !( *(const SvxFmtBreakItem*)pBreak == aBreak ) )
1408 : {
1409 0 : bModified |= 0 != rSet->Put( aBreak );
1410 0 : }
1411 : }
1412 :
1413 0 : if(m_pTextDirectionLB->IsValueChangedFromSaved())
1414 : {
1415 : bModified |= 0 != rSet->Put(
1416 : SvxFrameDirectionItem(
1417 0 : (SvxFrameDirection)(sal_uLong)m_pTextDirectionLB->GetEntryData(m_pTextDirectionLB->GetSelectEntryPos())
1418 0 : , FN_TABLE_BOX_TEXTORIENTATION));
1419 : }
1420 :
1421 0 : if(m_pVertOrientLB->IsValueChangedFromSaved())
1422 : {
1423 0 : sal_uInt16 nOrient = USHRT_MAX;
1424 0 : switch(m_pVertOrientLB->GetSelectEntryPos())
1425 : {
1426 0 : case 0 : nOrient = text::VertOrientation::NONE; break;
1427 0 : case 1 : nOrient = text::VertOrientation::CENTER; break;
1428 0 : case 2 : nOrient = text::VertOrientation::BOTTOM; break;
1429 : }
1430 0 : if(nOrient != USHRT_MAX)
1431 0 : bModified |= 0 != rSet->Put(SfxUInt16Item(FN_TABLE_SET_VERT_ALIGN, nOrient));
1432 : }
1433 :
1434 0 : return bModified;
1435 :
1436 : }
1437 :
1438 0 : void SwTextFlowPage::Reset( const SfxItemSet* rSet )
1439 : {
1440 : const SfxPoolItem* pItem;
1441 0 : SvxHtmlOptions& rHtmlOpt = SvxHtmlOptions::Get();
1442 0 : bool bFlowAllowed = !bHtmlMode || rHtmlOpt.IsPrintLayoutExtension();
1443 0 : if(bFlowAllowed)
1444 : {
1445 : //Inserting of the existing page templates in the list box
1446 0 : const sal_uInt16 nCount = pShell->GetPageDescCnt();
1447 :
1448 0 : for( sal_uInt16 i = 0; i < nCount; ++i)
1449 : {
1450 0 : const SwPageDesc &rPageDesc = pShell->GetPageDesc(i);
1451 0 : m_pPageCollLB->InsertEntry(rPageDesc.GetName());
1452 : }
1453 :
1454 0 : OUString aFmtName;
1455 0 : for(sal_uInt16 i = RES_POOLPAGE_BEGIN; i < RES_POOLPAGE_END; ++i)
1456 0 : if( LISTBOX_ENTRY_NOTFOUND == m_pPageCollLB->GetEntryPos(
1457 0 : aFmtName = SwStyleNameMapper::GetUIName( i, aFmtName ) ))
1458 0 : m_pPageCollLB->InsertEntry( aFmtName );
1459 :
1460 0 : if(SfxItemState::SET == rSet->GetItemState( RES_KEEP, false, &pItem ))
1461 : {
1462 0 : m_pKeepCB->Check( ((const SvxFmtKeepItem*)pItem)->GetValue() );
1463 0 : m_pKeepCB->SaveValue();
1464 : }
1465 0 : if(SfxItemState::SET == rSet->GetItemState( RES_LAYOUT_SPLIT, false, &pItem ))
1466 : {
1467 0 : m_pSplitCB->Check( ((const SwFmtLayoutSplit*)pItem)->GetValue() );
1468 : }
1469 : else
1470 0 : m_pSplitCB->Check();
1471 :
1472 0 : m_pSplitCB->SaveValue();
1473 0 : SplitHdl_Impl(m_pSplitCB);
1474 :
1475 0 : if(SfxItemState::SET == rSet->GetItemState( RES_ROW_SPLIT, false, &pItem ))
1476 : {
1477 0 : m_pSplitRowCB->Check( ((const SwFmtRowSplit*)pItem)->GetValue() );
1478 : }
1479 : else
1480 0 : m_pSplitRowCB->SetState(TRISTATE_INDET);
1481 0 : m_pSplitRowCB->SaveValue();
1482 :
1483 0 : if(bPageBreak)
1484 : {
1485 0 : if(SfxItemState::SET == rSet->GetItemState( RES_PAGEDESC, false, &pItem ))
1486 : {
1487 0 : OUString sPageDesc;
1488 0 : const SwPageDesc* pDesc = ((const SwFmtPageDesc*)pItem)->GetPageDesc();
1489 :
1490 : //m_pPageNoNF->SetValue(((const SwFmtPageDesc*)pItem)->GetNumOffset());
1491 0 : ::boost::optional<sal_uInt16> oNumOffset = ((const SwFmtPageDesc*)pItem)->GetNumOffset();
1492 0 : if (oNumOffset)
1493 0 : m_pPageNoNF->SetValue(oNumOffset.get());
1494 : else
1495 0 : m_pPageNoNF->Enable(false);
1496 :
1497 0 : if(pDesc)
1498 0 : sPageDesc = pDesc->GetName();
1499 0 : if ( !sPageDesc.isEmpty() &&
1500 0 : m_pPageCollLB->GetEntryPos( sPageDesc ) != LISTBOX_ENTRY_NOTFOUND )
1501 : {
1502 0 : m_pPageCollLB->SelectEntry( sPageDesc );
1503 0 : m_pPageCollCB->Check();
1504 :
1505 0 : m_pPgBrkCB->Enable();
1506 0 : m_pPgBrkRB->Enable();
1507 0 : m_pColBrkRB->Enable();
1508 0 : m_pPgBrkBeforeRB->Enable();
1509 0 : m_pPgBrkAfterRB->Enable();
1510 0 : m_pPageCollCB->Enable();
1511 0 : m_pPgBrkCB->Check();
1512 :
1513 0 : m_pPgBrkCB->Check( true );
1514 0 : m_pColBrkRB->Check( false );
1515 0 : m_pPgBrkBeforeRB->Check( true );
1516 0 : m_pPgBrkAfterRB->Check( false );
1517 : }
1518 : else
1519 : {
1520 0 : m_pPageCollLB->SetNoSelection();
1521 0 : m_pPageCollCB->Check(false);
1522 0 : }
1523 : }
1524 :
1525 0 : if(SfxItemState::SET == rSet->GetItemState( RES_BREAK, false, &pItem ))
1526 : {
1527 0 : const SvxFmtBreakItem* pPageBreak = (const SvxFmtBreakItem*)pItem;
1528 0 : SvxBreak eBreak = (SvxBreak)pPageBreak->GetValue();
1529 :
1530 0 : if ( eBreak != SVX_BREAK_NONE )
1531 : {
1532 0 : m_pPgBrkCB->Check();
1533 0 : m_pPageCollCB->Enable(false);
1534 0 : m_pPageCollLB->Enable(false);
1535 0 : m_pPageNoFT->Enable(false);
1536 0 : m_pPageNoNF->Enable(false);
1537 : }
1538 0 : switch ( eBreak )
1539 : {
1540 : case SVX_BREAK_PAGE_BEFORE:
1541 0 : m_pPgBrkRB->Check( true );
1542 0 : m_pColBrkRB->Check( false );
1543 0 : m_pPgBrkBeforeRB->Check( true );
1544 0 : m_pPgBrkAfterRB->Check( false );
1545 0 : break;
1546 : case SVX_BREAK_PAGE_AFTER:
1547 0 : m_pPgBrkRB->Check( true );
1548 0 : m_pColBrkRB->Check( false );
1549 0 : m_pPgBrkBeforeRB->Check( false );
1550 0 : m_pPgBrkAfterRB->Check( true );
1551 0 : break;
1552 : case SVX_BREAK_COLUMN_BEFORE:
1553 0 : m_pPgBrkRB->Check( false );
1554 0 : m_pColBrkRB->Check( true );
1555 0 : m_pPgBrkBeforeRB->Check( true );
1556 0 : m_pPgBrkAfterRB->Check( false );
1557 0 : break;
1558 : case SVX_BREAK_COLUMN_AFTER:
1559 0 : m_pPgBrkRB->Check( false );
1560 0 : m_pColBrkRB->Check( true );
1561 0 : m_pPgBrkBeforeRB->Check( false );
1562 0 : m_pPgBrkAfterRB->Check( true );
1563 0 : break;
1564 : default:; //prevent warning
1565 : }
1566 :
1567 : }
1568 0 : if ( m_pPgBrkBeforeRB->IsChecked() )
1569 0 : PageBreakPosHdl_Impl(m_pPgBrkBeforeRB);
1570 0 : else if ( m_pPgBrkAfterRB->IsChecked() )
1571 0 : PageBreakPosHdl_Impl(m_pPgBrkAfterRB);
1572 0 : PageBreakHdl_Impl( m_pPgBrkCB );
1573 0 : }
1574 : }
1575 : else
1576 : {
1577 0 : m_pPgBrkRB->Enable(false);
1578 0 : m_pColBrkRB->Enable(false);
1579 0 : m_pPgBrkBeforeRB->Enable(false);
1580 0 : m_pPgBrkAfterRB->Enable(false);
1581 0 : m_pKeepCB->Enable(false);
1582 0 : m_pSplitCB->Enable(false);
1583 0 : m_pPgBrkCB->Enable(false);
1584 0 : m_pPageCollCB->Enable(false);
1585 0 : m_pPageCollLB->Enable(false);
1586 : }
1587 :
1588 0 : if(SfxItemState::SET == rSet->GetItemState( FN_PARAM_TABLE_HEADLINE, false, &pItem ))
1589 : {
1590 0 : sal_uInt16 nRep = ((const SfxUInt16Item*)pItem)->GetValue();
1591 0 : m_pHeadLineCB->Check( nRep > 0 );
1592 0 : m_pHeadLineCB->SaveValue();
1593 0 : m_pRepeatHeaderNF->SetValue( nRep );
1594 0 : m_pRepeatHeaderNF->SetMin( 1 );
1595 0 : m_pRepeatHeaderNF->SaveValue();
1596 : }
1597 0 : if ( rSet->GetItemState(FN_TABLE_BOX_TEXTORIENTATION) > SfxItemState::DEFAULT )
1598 : {
1599 0 : sal_uLong nDirection = ((const SvxFrameDirectionItem&)rSet->Get(FN_TABLE_BOX_TEXTORIENTATION)).GetValue();
1600 0 : m_pTextDirectionLB->SelectEntryPos(m_pTextDirectionLB->GetEntryPos( (const void*)nDirection ));
1601 : }
1602 :
1603 0 : if ( rSet->GetItemState(FN_TABLE_SET_VERT_ALIGN) > SfxItemState::DEFAULT )
1604 : {
1605 0 : sal_uInt16 nVert = ((const SfxUInt16Item&)rSet->Get(FN_TABLE_SET_VERT_ALIGN)).GetValue();
1606 0 : sal_uInt16 nPos = 0;
1607 0 : switch(nVert)
1608 : {
1609 0 : case text::VertOrientation::NONE: nPos = 0; break;
1610 0 : case text::VertOrientation::CENTER: nPos = 1; break;
1611 0 : case text::VertOrientation::BOTTOM: nPos = 2; break;
1612 : }
1613 0 : m_pVertOrientLB->SelectEntryPos(nPos);
1614 : }
1615 :
1616 0 : m_pPageCollCB->SaveValue();
1617 0 : m_pPageCollLB->SaveValue();
1618 0 : m_pPgBrkCB->SaveValue();
1619 0 : m_pPgBrkRB->SaveValue();
1620 0 : m_pColBrkRB->SaveValue();
1621 0 : m_pPgBrkBeforeRB->SaveValue();
1622 0 : m_pPgBrkAfterRB->SaveValue();
1623 0 : m_pPageNoNF->SaveValue();
1624 0 : m_pTextDirectionLB->SaveValue();
1625 0 : m_pVertOrientLB->SaveValue();
1626 :
1627 0 : HeadLineCBClickHdl();
1628 0 : }
1629 :
1630 0 : void SwTextFlowPage::SetShell(SwWrtShell* pSh)
1631 : {
1632 0 : pShell = pSh;
1633 0 : bHtmlMode = 0 != (::GetHtmlMode(pShell->GetView().GetDocShell()) & HTMLMODE_ON);
1634 0 : if(bHtmlMode)
1635 : {
1636 0 : m_pPageNoNF->Enable(false);
1637 0 : m_pPageNoFT->Enable(false);
1638 : }
1639 0 : }
1640 :
1641 0 : IMPL_LINK_NOARG(SwTextFlowPage, PageBreakHdl_Impl)
1642 : {
1643 0 : if( m_pPgBrkCB->IsChecked() )
1644 : {
1645 0 : m_pPgBrkRB-> Enable();
1646 0 : m_pColBrkRB-> Enable();
1647 0 : m_pPgBrkBeforeRB-> Enable();
1648 0 : m_pPgBrkAfterRB-> Enable();
1649 :
1650 0 : if ( m_pPgBrkRB->IsChecked() && m_pPgBrkBeforeRB->IsChecked() )
1651 : {
1652 0 : m_pPageCollCB->Enable();
1653 :
1654 0 : bool bEnable = m_pPageCollCB->IsChecked() &&
1655 0 : m_pPageCollLB->GetEntryCount();
1656 0 : m_pPageCollLB->Enable(bEnable);
1657 0 : if(!bHtmlMode)
1658 : {
1659 0 : m_pPageNoFT->Enable(bEnable);
1660 0 : m_pPageNoNF->Enable(bEnable);
1661 : }
1662 : }
1663 : }
1664 : else
1665 : {
1666 0 : m_pPageCollCB->Check( false );
1667 0 : m_pPageCollCB->Enable(false);
1668 0 : m_pPageCollLB->Enable(false);
1669 0 : m_pPageNoFT->Enable(false);
1670 0 : m_pPageNoNF->Enable(false);
1671 0 : m_pPgBrkRB-> Enable(false);
1672 0 : m_pColBrkRB-> Enable(false);
1673 0 : m_pPgBrkBeforeRB-> Enable(false);
1674 0 : m_pPgBrkAfterRB-> Enable(false);
1675 : }
1676 0 : return 0;
1677 : }
1678 :
1679 0 : IMPL_LINK_NOARG(SwTextFlowPage, ApplyCollClickHdl_Impl)
1680 : {
1681 0 : bool bEnable = false;
1682 0 : if ( m_pPageCollCB->IsChecked() &&
1683 0 : m_pPageCollLB->GetEntryCount() )
1684 : {
1685 0 : bEnable = true;
1686 0 : m_pPageCollLB->SelectEntryPos( 0 );
1687 : }
1688 : else
1689 : {
1690 0 : m_pPageCollLB->SetNoSelection();
1691 : }
1692 0 : m_pPageCollLB->Enable(bEnable);
1693 0 : if(!bHtmlMode)
1694 : {
1695 0 : m_pPageNoFT->Enable(bEnable);
1696 0 : m_pPageNoNF->Enable(bEnable);
1697 : }
1698 0 : return 0;
1699 : }
1700 :
1701 0 : IMPL_LINK( SwTextFlowPage, PageBreakPosHdl_Impl, RadioButton*, pBtn )
1702 : {
1703 0 : if ( m_pPgBrkCB->IsChecked() )
1704 : {
1705 0 : if ( pBtn == m_pPgBrkBeforeRB && m_pPgBrkRB->IsChecked() )
1706 : {
1707 0 : m_pPageCollCB->Enable();
1708 :
1709 0 : bool bEnable = m_pPageCollCB->IsChecked() &&
1710 0 : m_pPageCollLB->GetEntryCount();
1711 :
1712 0 : m_pPageCollLB->Enable(bEnable);
1713 0 : if(!bHtmlMode)
1714 : {
1715 0 : m_pPageNoFT->Enable(bEnable);
1716 0 : m_pPageNoNF->Enable(bEnable);
1717 : }
1718 : }
1719 0 : else if (pBtn == m_pPgBrkAfterRB)
1720 : {
1721 0 : m_pPageCollCB->Check( false );
1722 0 : m_pPageCollCB->Enable(false);
1723 0 : m_pPageCollLB->Enable(false);
1724 0 : m_pPageNoFT->Enable(false);
1725 0 : m_pPageNoNF->Enable(false);
1726 : }
1727 : }
1728 0 : return 0;
1729 : }
1730 :
1731 0 : IMPL_LINK( SwTextFlowPage, PageBreakTypeHdl_Impl, RadioButton*, pBtn )
1732 : {
1733 0 : if ( pBtn == m_pColBrkRB || m_pPgBrkAfterRB->IsChecked() )
1734 : {
1735 0 : m_pPageCollCB->Check(false);
1736 0 : m_pPageCollCB->Enable(false);
1737 0 : m_pPageCollLB->Enable(false);
1738 0 : m_pPageNoFT->Enable(false);
1739 0 : m_pPageNoNF->Enable(false);
1740 : }
1741 0 : else if ( m_pPgBrkBeforeRB->IsChecked() )
1742 0 : PageBreakPosHdl_Impl(m_pPgBrkBeforeRB);
1743 0 : return 0;
1744 : }
1745 :
1746 0 : IMPL_LINK( SwTextFlowPage, SplitHdl_Impl, CheckBox*, pBox )
1747 : {
1748 0 : m_pSplitRowCB->Enable(pBox->IsChecked());
1749 0 : return 0;
1750 : }
1751 :
1752 0 : IMPL_LINK( SwTextFlowPage, SplitRowHdl_Impl, TriStateBox*, pBox )
1753 : {
1754 0 : pBox->EnableTriState(false);
1755 0 : return 0;
1756 : }
1757 :
1758 0 : IMPL_LINK_NOARG(SwTextFlowPage, HeadLineCBClickHdl)
1759 : {
1760 0 : m_pRepeatHeaderCombo->Enable(m_pHeadLineCB->IsChecked());
1761 :
1762 0 : return 0;
1763 : }
1764 :
1765 0 : void SwTextFlowPage::DisablePageBreak()
1766 : {
1767 0 : bPageBreak = false;
1768 0 : m_pPgBrkCB->Disable();
1769 0 : m_pPgBrkRB->Disable();
1770 0 : m_pColBrkRB->Disable();
1771 0 : m_pPgBrkBeforeRB->Disable();
1772 0 : m_pPgBrkAfterRB->Disable();
1773 0 : m_pPageCollCB->Disable();
1774 0 : m_pPageCollLB->Disable();
1775 0 : m_pPageNoFT->Disable();
1776 0 : m_pPageNoNF->Disable();
1777 0 : }
1778 :
1779 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|