xref: /AOO41X/main/sw/source/ui/table/instable.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
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