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