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