1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #ifdef SW_DLLIMPLEMENTATION
28cdf0e10cSrcweir #undef SW_DLLIMPLEMENTATION
29cdf0e10cSrcweir #endif
30cdf0e10cSrcweir
31cdf0e10cSrcweir
32cdf0e10cSrcweir #include <vcl/msgbox.hxx>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #include "wrtsh.hxx"
35cdf0e10cSrcweir #include "view.hxx"
36cdf0e10cSrcweir #include "itabenum.hxx"
37cdf0e10cSrcweir #include "instable.hxx"
38cdf0e10cSrcweir #include "tblafmt.hxx"
39cdf0e10cSrcweir #include "modcfg.hxx"
40cdf0e10cSrcweir #include "swmodule.hxx"
41cdf0e10cSrcweir #include <svx/htmlmode.hxx>
42cdf0e10cSrcweir #include <viewopt.hxx>
43cdf0e10cSrcweir
44cdf0e10cSrcweir #include "table.hrc"
45cdf0e10cSrcweir #include "instable.hrc"
46cdf0e10cSrcweir
47cdf0e10cSrcweir #include "swabstdlg.hxx"
48cdf0e10cSrcweir
49cdf0e10cSrcweir namespace swui
50cdf0e10cSrcweir {
51cdf0e10cSrcweir SwAbstractDialogFactory * GetFactory();
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir #define ROW_COL_PROD 16384
55cdf0e10cSrcweir
GetValues(String & rName,sal_uInt16 & rRow,sal_uInt16 & rCol,SwInsertTableOptions & rInsTblOpts,String & rAutoName,SwTableAutoFmt * & prTAFmt)56cdf0e10cSrcweir void SwInsTableDlg::GetValues( String& rName, sal_uInt16& rRow, sal_uInt16& rCol,
57cdf0e10cSrcweir SwInsertTableOptions& rInsTblOpts, String& rAutoName,
58cdf0e10cSrcweir SwTableAutoFmt *& prTAFmt )
59cdf0e10cSrcweir {
60cdf0e10cSrcweir sal_uInt16 nInsMode = 0;
61cdf0e10cSrcweir rName = aNameEdit.GetText();
62cdf0e10cSrcweir rRow = (sal_uInt16)aRowEdit.GetValue();
63cdf0e10cSrcweir rCol = (sal_uInt16)aColEdit.GetValue();
64cdf0e10cSrcweir
65cdf0e10cSrcweir if (aBorderCB.IsChecked())
66cdf0e10cSrcweir nInsMode |= tabopts::DEFAULT_BORDER;
67cdf0e10cSrcweir if (aHeaderCB.IsChecked())
68cdf0e10cSrcweir nInsMode |= tabopts::HEADLINE;
69cdf0e10cSrcweir if (aRepeatHeaderCB.IsEnabled() && aRepeatHeaderCB.IsChecked())
70cdf0e10cSrcweir rInsTblOpts.mnRowsToRepeat = sal_uInt16( aRepeatHeaderNF.GetValue() );
71cdf0e10cSrcweir else
72cdf0e10cSrcweir rInsTblOpts.mnRowsToRepeat = 0;
73cdf0e10cSrcweir if (!aDontSplitCB.IsChecked())
74cdf0e10cSrcweir nInsMode |= tabopts::SPLIT_LAYOUT;
75cdf0e10cSrcweir if( pTAutoFmt )
76cdf0e10cSrcweir {
77cdf0e10cSrcweir prTAFmt = new SwTableAutoFmt( *pTAutoFmt );
78cdf0e10cSrcweir rAutoName = prTAFmt->GetName();
79cdf0e10cSrcweir }
80cdf0e10cSrcweir
81cdf0e10cSrcweir rInsTblOpts.mnInsMode = nInsMode;
82cdf0e10cSrcweir }
83cdf0e10cSrcweir
84cdf0e10cSrcweir // CTOR / DTOR -----------------------------------------------------------
85cdf0e10cSrcweir
86cdf0e10cSrcweir
SwInsTableDlg(SwView & rView)87cdf0e10cSrcweir SwInsTableDlg::SwInsTableDlg( SwView& rView )
88cdf0e10cSrcweir : SfxModalDialog( rView.GetWindow(), SW_RES(DLG_INSERT_TABLE) ),
89cdf0e10cSrcweir aNameFT (this, SW_RES(FT_NAME)),
90cdf0e10cSrcweir aNameEdit (this, SW_RES(ED_NAME)),
91cdf0e10cSrcweir
92cdf0e10cSrcweir aFL (this, SW_RES(FL_TABLE)),
93cdf0e10cSrcweir aColLbl (this, SW_RES(FT_COL)),
94cdf0e10cSrcweir aColEdit (this, SW_RES(ED_COL)),
95cdf0e10cSrcweir aRowLbl (this, SW_RES(FT_ROW)),
96cdf0e10cSrcweir aRowEdit (this, SW_RES(ED_ROW)),
97cdf0e10cSrcweir
98cdf0e10cSrcweir aOptionsFL (this, SW_RES(FL_OPTIONS)),
99cdf0e10cSrcweir aHeaderCB (this, SW_RES(CB_HEADER)),
100cdf0e10cSrcweir aRepeatHeaderCB (this, SW_RES(CB_REPEAT_HEADER)),
101cdf0e10cSrcweir aRepeatHeaderFT (this, SW_RES(FT_REPEAT_HEADER)),
102cdf0e10cSrcweir aRepeatHeaderBeforeFT (this),
103cdf0e10cSrcweir aRepeatHeaderNF (this, SW_RES(NF_REPEAT_HEADER)),
104cdf0e10cSrcweir aRepeatHeaderAfterFT (this),
105cdf0e10cSrcweir aRepeatHeaderCombo (this, SW_RES(WIN_REPEAT_HEADER), aRepeatHeaderNF, aRepeatHeaderBeforeFT, aRepeatHeaderAfterFT),
106cdf0e10cSrcweir
107cdf0e10cSrcweir aDontSplitCB (this, SW_RES(CB_DONT_SPLIT)),
108cdf0e10cSrcweir aBorderCB (this, SW_RES(CB_BORDER)),
109cdf0e10cSrcweir
110cdf0e10cSrcweir aOkBtn (this, SW_RES(BT_OK)),
111cdf0e10cSrcweir aCancelBtn (this, SW_RES(BT_CANCEL)),
112cdf0e10cSrcweir aHelpBtn (this, SW_RES(BT_HELP)),
113cdf0e10cSrcweir aAutoFmtBtn (this, SW_RES(BT_AUTOFORMAT)),
114cdf0e10cSrcweir
115cdf0e10cSrcweir pShell(&rView.GetWrtShell()),
116cdf0e10cSrcweir pTAutoFmt( 0 ),
117cdf0e10cSrcweir nEnteredValRepeatHeaderNF( -1 )
118cdf0e10cSrcweir {
119cdf0e10cSrcweir FreeResource();
120cdf0e10cSrcweir aNameEdit.SetText(pShell->GetUniqueTblName());
121cdf0e10cSrcweir aNameEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyName));
122cdf0e10cSrcweir aColEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyRowCol));
123cdf0e10cSrcweir aRowEdit.SetModifyHdl(LINK(this, SwInsTableDlg, ModifyRowCol));
124cdf0e10cSrcweir
125cdf0e10cSrcweir aRowEdit.SetMax(ROW_COL_PROD/aColEdit.GetValue());
126cdf0e10cSrcweir aColEdit.SetMax(ROW_COL_PROD/aRowEdit.GetValue());
127cdf0e10cSrcweir aAutoFmtBtn.SetClickHdl(LINK(this, SwInsTableDlg, AutoFmtHdl));
128cdf0e10cSrcweir
129cdf0e10cSrcweir sal_Bool bHTMLMode = 0 != (::GetHtmlMode(rView.GetDocShell())&HTMLMODE_ON);
130cdf0e10cSrcweir const SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
131cdf0e10cSrcweir
132cdf0e10cSrcweir SwInsertTableOptions aInsOpts = pModOpt->GetInsTblFlags(bHTMLMode);
133cdf0e10cSrcweir sal_uInt16 nInsTblFlags = aInsOpts.mnInsMode;
134cdf0e10cSrcweir
135cdf0e10cSrcweir aHeaderCB.Check( 0 != (nInsTblFlags & tabopts::HEADLINE) );
136cdf0e10cSrcweir aRepeatHeaderCB.Check(aInsOpts.mnRowsToRepeat > 0);
137cdf0e10cSrcweir if(bHTMLMode)
138cdf0e10cSrcweir {
139cdf0e10cSrcweir aDontSplitCB.Hide();
140cdf0e10cSrcweir aBorderCB.SetPosPixel(aDontSplitCB.GetPosPixel());
141cdf0e10cSrcweir }
142cdf0e10cSrcweir else
143cdf0e10cSrcweir {
144cdf0e10cSrcweir aDontSplitCB.Check( 0 == (nInsTblFlags & tabopts::SPLIT_LAYOUT) );
145cdf0e10cSrcweir }
146cdf0e10cSrcweir aBorderCB.Check( 0 != (nInsTblFlags & tabopts::DEFAULT_BORDER) );
147cdf0e10cSrcweir
148cdf0e10cSrcweir aRepeatHeaderNF.SetModifyHdl( LINK( this, SwInsTableDlg, ModifyRepeatHeaderNF_Hdl ) );
149cdf0e10cSrcweir aHeaderCB.SetClickHdl(LINK(this, SwInsTableDlg, CheckBoxHdl));
150cdf0e10cSrcweir aRepeatHeaderCB.SetClickHdl(LINK(this, SwInsTableDlg, ReapeatHeaderCheckBoxHdl));
151cdf0e10cSrcweir ReapeatHeaderCheckBoxHdl();
152cdf0e10cSrcweir CheckBoxHdl();
153cdf0e10cSrcweir
154cdf0e10cSrcweir sal_Int64 nMax = aRowEdit.GetValue();
155cdf0e10cSrcweir if( nMax <= 1 )
156cdf0e10cSrcweir nMax = 1;
157cdf0e10cSrcweir else
158cdf0e10cSrcweir --nMax;
159cdf0e10cSrcweir aRepeatHeaderNF.SetMax( nMax );
160cdf0e10cSrcweir
161cdf0e10cSrcweir aRepeatHeaderCombo.Arrange( aRepeatHeaderFT );
162cdf0e10cSrcweir }
163cdf0e10cSrcweir
~SwInsTableDlg()164cdf0e10cSrcweir SwInsTableDlg::~SwInsTableDlg()
165cdf0e10cSrcweir {
166cdf0e10cSrcweir delete pTAutoFmt;
167cdf0e10cSrcweir }
168cdf0e10cSrcweir
IMPL_LINK_INLINE_START(SwInsTableDlg,ModifyName,Edit *,pEdit)169cdf0e10cSrcweir IMPL_LINK_INLINE_START( SwInsTableDlg, ModifyName, Edit *, pEdit )
170cdf0e10cSrcweir {
171cdf0e10cSrcweir String sTblName = pEdit->GetText();
172cdf0e10cSrcweir if(sTblName.Search(' ') != STRING_NOTFOUND)
173cdf0e10cSrcweir {
174cdf0e10cSrcweir sTblName.EraseAllChars( );
175cdf0e10cSrcweir pEdit->SetText(sTblName);
176cdf0e10cSrcweir }
177cdf0e10cSrcweir
178cdf0e10cSrcweir aOkBtn.Enable(pShell->GetTblStyle( sTblName ) == 0);
179cdf0e10cSrcweir return 0;
180cdf0e10cSrcweir }
IMPL_LINK_INLINE_END(SwInsTableDlg,ModifyName,Edit *,EMPTYARG)181cdf0e10cSrcweir IMPL_LINK_INLINE_END( SwInsTableDlg, ModifyName, Edit *, EMPTYARG )
182cdf0e10cSrcweir
183cdf0e10cSrcweir /*-----------------15.04.98 11:36-------------------
184cdf0e10cSrcweir
185cdf0e10cSrcweir --------------------------------------------------*/
186cdf0e10cSrcweir IMPL_LINK( SwInsTableDlg, ModifyRowCol, NumericField *, pField )
187cdf0e10cSrcweir {
188cdf0e10cSrcweir if(pField == &aColEdit)
189cdf0e10cSrcweir {
190cdf0e10cSrcweir sal_Int64 nCol = aColEdit.GetValue();
191cdf0e10cSrcweir if(!nCol)
192cdf0e10cSrcweir nCol = 1;
193cdf0e10cSrcweir aRowEdit.SetMax(ROW_COL_PROD/nCol);
194cdf0e10cSrcweir }
195cdf0e10cSrcweir else
196cdf0e10cSrcweir {
197cdf0e10cSrcweir sal_Int64 nRow = aRowEdit.GetValue();
198cdf0e10cSrcweir if(!nRow)
199cdf0e10cSrcweir nRow = 1;
200cdf0e10cSrcweir aColEdit.SetMax(ROW_COL_PROD/nRow);
201cdf0e10cSrcweir
202cdf0e10cSrcweir // adjust depending NF for repeated rows
203cdf0e10cSrcweir sal_Int64 nMax = ( nRow == 1 )? 1 : nRow - 1 ;
204cdf0e10cSrcweir sal_Int64 nActVal = aRepeatHeaderNF.GetValue();
205cdf0e10cSrcweir
206cdf0e10cSrcweir aRepeatHeaderNF.SetMax( nMax );
207cdf0e10cSrcweir
208cdf0e10cSrcweir if( nActVal > nMax )
209cdf0e10cSrcweir aRepeatHeaderNF.SetValue( nMax );
210cdf0e10cSrcweir else if( nActVal < nEnteredValRepeatHeaderNF )
211cdf0e10cSrcweir aRepeatHeaderNF.SetValue( ( nEnteredValRepeatHeaderNF < nMax )? nEnteredValRepeatHeaderNF : nMax );
212cdf0e10cSrcweir }
213cdf0e10cSrcweir return 0;
214cdf0e10cSrcweir }
215cdf0e10cSrcweir
IMPL_LINK(SwInsTableDlg,AutoFmtHdl,PushButton *,pButton)216cdf0e10cSrcweir IMPL_LINK( SwInsTableDlg, AutoFmtHdl, PushButton*, pButton )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir SwAbstractDialogFactory* pFact = swui::GetFactory();
219cdf0e10cSrcweir DBG_ASSERT(pFact, "SwAbstractDialogFactory fail!");
220cdf0e10cSrcweir
221cdf0e10cSrcweir AbstractSwAutoFormatDlg* pDlg = pFact->CreateSwAutoFormatDlg(pButton,pShell, DLG_AUTOFMT_TABLE, sal_False, pTAutoFmt );
222cdf0e10cSrcweir DBG_ASSERT(pDlg, "Dialogdiet fail!");
223cdf0e10cSrcweir if( RET_OK == pDlg->Execute())
224cdf0e10cSrcweir pDlg->FillAutoFmtOfIndex( pTAutoFmt );
225cdf0e10cSrcweir delete pDlg;
226cdf0e10cSrcweir return 0;
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
IMPL_LINK(SwInsTableDlg,CheckBoxHdl,CheckBox *,EMPTYARG)229cdf0e10cSrcweir IMPL_LINK(SwInsTableDlg, CheckBoxHdl, CheckBox*, EMPTYARG)
230cdf0e10cSrcweir {
231cdf0e10cSrcweir aRepeatHeaderCB.Enable(aHeaderCB.IsChecked());
232cdf0e10cSrcweir ReapeatHeaderCheckBoxHdl();
233cdf0e10cSrcweir
234cdf0e10cSrcweir return 0;
235cdf0e10cSrcweir }
236cdf0e10cSrcweir
IMPL_LINK(SwInsTableDlg,ReapeatHeaderCheckBoxHdl,void *,EMPTYARG)237cdf0e10cSrcweir IMPL_LINK(SwInsTableDlg, ReapeatHeaderCheckBoxHdl, void*, EMPTYARG)
238cdf0e10cSrcweir {
239cdf0e10cSrcweir aRepeatHeaderCombo.Enable(aHeaderCB.IsChecked() && aRepeatHeaderCB.IsChecked());
240cdf0e10cSrcweir
241cdf0e10cSrcweir return 0;
242cdf0e10cSrcweir }
243cdf0e10cSrcweir
IMPL_LINK(SwInsTableDlg,ModifyRepeatHeaderNF_Hdl,void *,EMPTYARG)244cdf0e10cSrcweir IMPL_LINK(SwInsTableDlg, ModifyRepeatHeaderNF_Hdl, void*, EMPTYARG)
245cdf0e10cSrcweir {
246cdf0e10cSrcweir nEnteredValRepeatHeaderNF = aRepeatHeaderNF.GetValue();
247cdf0e10cSrcweir return 0;
248cdf0e10cSrcweir }
249cdf0e10cSrcweir
250