xref: /trunk/main/sc/source/ui/miscdlgs/inscodlg.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sc.hxx"
30 
31 #undef SC_DLLIMPLEMENTATION
32 
33 
34 
35 //------------------------------------------------------------------
36 
37 #include "inscodlg.hxx"
38 #include "scresid.hxx"
39 #include "miscdlgs.hrc"
40 
41 
42 //==================================================================
43 
44 sal_Bool   ScInsertContentsDlg::bPreviousAllCheck = sal_True;
45 sal_uInt16 ScInsertContentsDlg::nPreviousChecks   = (IDF_DATETIME | IDF_STRING  |
46                                                  IDF_NOTE     | IDF_FORMULA |
47                                                  IDF_ATTRIB   | IDF_OBJECTS);
48 sal_uInt16 ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_NOFUNC;
49 sal_uInt16 ScInsertContentsDlg::nPreviousChecks2 = 0;
50 sal_uInt16 ScInsertContentsDlg::nPreviousMoveMode = INS_NONE;   // enum InsCellCmd
51 
52 //-----------------------------------------------------------------------
53 
54 ScInsertContentsDlg::ScInsertContentsDlg( Window*       pParent,
55                                           sal_uInt16        nCheckDefaults,
56                                           const String* pStrTitle )
57 
58  :  ModalDialog     ( pParent, ScResId( RID_SCDLG_INSCONT ) ),
59     //
60     aFlFrame        ( this, ScResId( FL_FRAME ) ),
61     aBtnInsAll      ( this, ScResId( BTN_INSALL ) ),
62     aBtnInsStrings  ( this, ScResId( BTN_INSSTRINGS ) ),
63     aBtnInsNumbers  ( this, ScResId( BTN_INSNUMBERS ) ),
64     aBtnInsDateTime ( this, ScResId( BTN_INSDATETIME ) ),
65     aBtnInsFormulas ( this, ScResId( BTN_INSFORMULAS ) ),
66     aBtnInsNotes    ( this, ScResId( BTN_INSNOTES ) ),
67     aBtnInsAttrs    ( this, ScResId( BTN_INSATTRS ) ),
68     aBtnInsObjects  ( this, ScResId( BTN_INSOBJECTS ) ),
69     aFlSep1         ( this, ScResId( FL_SEP1 ) ),
70     aFlOptions      ( this, ScResId( FL_OPTIONS ) ),
71     aBtnSkipEmptyCells( this, ScResId(BTN_SKIP_EMPTY ) ),
72     aBtnTranspose   ( this, ScResId( BTN_TRANSPOSE ) ),
73     aBtnLink        ( this, ScResId( BTN_LINK ) ),
74     aFlOperation    ( this, ScResId( FL_OPERATION ) ),
75     aRbNoOp         ( this, ScResId( BTN_OP_NOOP ) ),
76     aRbAdd          ( this, ScResId( BTN_OP_ADD ) ),
77     aRbSub          ( this, ScResId( BTN_OP_SUB  ) ),
78     aRbMul          ( this, ScResId( BTN_OP_MUL  ) ),
79     aRbDiv          ( this, ScResId( BTN_OP_DIV  ) ),
80     aFlSep2         ( this, ScResId( FL_SEP2 ) ),
81     aFlMove         ( this, ScResId( FL_MOVE ) ),
82     aRbMoveNone     ( this, ScResId( BTN_MV_NONE ) ),
83     aRbMoveDown     ( this, ScResId( BTN_MV_DOWN ) ),
84     aRbMoveRight    ( this, ScResId( BTN_MV_RIGHT ) ),
85     aBtnOk          ( this, ScResId( BTN_OK ) ),
86     aBtnCancel      ( this, ScResId( BTN_CANCEL ) ),
87     aBtnHelp        ( this, ScResId( BTN_HELP ) ),
88     bOtherDoc       ( sal_False ),
89     bFillMode       ( sal_False ),
90     bChangeTrack    ( sal_False ),
91     bMoveDownDisabled( sal_False ),
92     bMoveRightDisabled( sal_False )
93 {
94     if ( pStrTitle )
95         SetText( *pStrTitle );
96 
97     if ( nCheckDefaults != 0 )
98     {
99         ScInsertContentsDlg::nPreviousChecks = nCheckDefaults;
100         ScInsertContentsDlg::bPreviousAllCheck = sal_False;
101         ScInsertContentsDlg::nPreviousChecks2 = 0;
102     }
103 
104     aBtnInsAll.Check     ( ScInsertContentsDlg::bPreviousAllCheck );
105     aBtnInsStrings.Check ( IS_SET( IDF_STRING,
106                                    ScInsertContentsDlg::nPreviousChecks ) );
107     aBtnInsNumbers.Check ( IS_SET( IDF_VALUE,
108                                    ScInsertContentsDlg::nPreviousChecks ) );
109     aBtnInsDateTime.Check( IS_SET( IDF_DATETIME,
110                                    ScInsertContentsDlg::nPreviousChecks ) );
111     aBtnInsFormulas.Check( IS_SET( IDF_FORMULA,
112                                    ScInsertContentsDlg::nPreviousChecks ) );
113     aBtnInsNotes.Check   ( IS_SET( IDF_NOTE,
114                                    ScInsertContentsDlg::nPreviousChecks ) );
115     aBtnInsAttrs.Check   ( IS_SET( IDF_ATTRIB,
116                                    ScInsertContentsDlg::nPreviousChecks ) );
117     aBtnInsObjects.Check ( IS_SET( IDF_OBJECTS,
118                                    ScInsertContentsDlg::nPreviousChecks ) );
119 
120     switch( ScInsertContentsDlg::nPreviousFormulaChecks )
121     {
122         case PASTE_NOFUNC: aRbNoOp.Check(sal_True); break;
123         case PASTE_ADD:    aRbAdd.Check(sal_True); break;
124         case PASTE_SUB:    aRbSub.Check(sal_True); break;
125         case PASTE_MUL:    aRbMul.Check(sal_True); break;
126         case PASTE_DIV:    aRbDiv.Check(sal_True); break;
127     }
128 
129     switch( ScInsertContentsDlg::nPreviousMoveMode )
130     {
131         case INS_NONE:       aRbMoveNone.Check(sal_True); break;
132         case INS_CELLSDOWN:  aRbMoveDown.Check(sal_True); break;
133         case INS_CELLSRIGHT: aRbMoveRight.Check(sal_True); break;
134     }
135 
136     aBtnSkipEmptyCells.Check( ( ScInsertContentsDlg::nPreviousChecks2 & INS_CONT_NOEMPTY ) != 0);
137     aBtnTranspose.Check( ( ScInsertContentsDlg::nPreviousChecks2    & INS_CONT_TRANS ) != 0);
138     aBtnLink.Check( ( ScInsertContentsDlg::nPreviousChecks2             & INS_CONT_LINK  ) != 0);
139 
140     DisableChecks( aBtnInsAll.IsChecked() );
141 
142     aFlSep1.SetStyle( aFlSep1.GetStyle() | WB_VERT );
143     aFlSep2.SetStyle( aFlSep2.GetStyle() | WB_VERT );
144 
145     aBtnInsAll.SetClickHdl( LINK( this, ScInsertContentsDlg, InsAllHdl ) );
146     aBtnLink.SetClickHdl( LINK( this, ScInsertContentsDlg, LinkBtnHdl ) );
147 
148     //-------------
149     FreeResource();
150 }
151 
152 //------------------------------------------------------------------------
153 
154 sal_uInt16 ScInsertContentsDlg::GetInsContentsCmdBits() const
155 {
156     ScInsertContentsDlg::nPreviousChecks = 0;
157 
158     if ( aBtnInsStrings.IsChecked() )
159         ScInsertContentsDlg::nPreviousChecks = IDF_STRING;
160     if ( aBtnInsNumbers.IsChecked() )
161         ScInsertContentsDlg::nPreviousChecks |= IDF_VALUE;
162     if ( aBtnInsDateTime.IsChecked())
163         ScInsertContentsDlg::nPreviousChecks |= IDF_DATETIME;
164     if ( aBtnInsFormulas.IsChecked())
165         ScInsertContentsDlg::nPreviousChecks |= IDF_FORMULA;
166     if ( aBtnInsNotes.IsChecked()   )
167         ScInsertContentsDlg::nPreviousChecks |= IDF_NOTE;
168     if ( aBtnInsAttrs.IsChecked()   )
169         ScInsertContentsDlg::nPreviousChecks |= IDF_ATTRIB;
170     if ( aBtnInsObjects.IsChecked() )
171         ScInsertContentsDlg::nPreviousChecks |= IDF_OBJECTS;
172 
173     ScInsertContentsDlg::bPreviousAllCheck = aBtnInsAll.IsChecked();
174 
175     return ( (ScInsertContentsDlg::bPreviousAllCheck)
176                 ? IDF_ALL
177                 : ScInsertContentsDlg::nPreviousChecks );
178 }
179 
180 //------------------------------------------------------------------------
181 
182 InsCellCmd ScInsertContentsDlg::GetMoveMode()
183 {
184     if ( aRbMoveDown.IsChecked() )
185         return INS_CELLSDOWN;
186     if ( aRbMoveRight.IsChecked() )
187         return INS_CELLSRIGHT;
188 
189     return INS_NONE;
190 }
191 
192 //------------------------------------------------------------------------
193 
194 void ScInsertContentsDlg::DisableChecks( sal_Bool bInsAllChecked )
195 {
196     if ( bInsAllChecked )
197     {
198         aBtnInsStrings.Disable();
199         aBtnInsNumbers.Disable();
200         aBtnInsDateTime.Disable();
201         aBtnInsFormulas.Disable();
202         aBtnInsNotes.Disable();
203         aBtnInsAttrs.Disable();
204         aBtnInsObjects.Disable();
205     }
206     else
207     {
208         aBtnInsStrings.Enable();
209         aBtnInsNumbers.Enable();
210         aBtnInsDateTime.Enable();
211         aBtnInsFormulas.Enable();
212         aBtnInsNotes.Enable();
213         aBtnInsAttrs.Enable();
214 
215         //  "Objects" is disabled for "Fill Tables"
216         if ( bFillMode )
217             aBtnInsObjects.Disable();
218         else
219             aBtnInsObjects.Enable();
220     }
221 }
222 
223 // Link in anderes Dokument -> alles andere disabled
224 
225 void ScInsertContentsDlg::TestModes()
226 {
227     if ( bOtherDoc && aBtnLink.IsChecked() )
228     {
229         aBtnSkipEmptyCells.Disable();
230         aBtnTranspose.Disable();
231         aRbNoOp.Disable();
232         aRbAdd.Disable();
233         aRbSub.Disable();
234         aRbMul.Disable();
235         aRbDiv.Disable();
236         aFlOperation.Disable();
237 
238         aRbMoveNone.Disable();
239         aRbMoveDown.Disable();
240         aRbMoveRight.Disable();
241         aFlMove.Disable();
242 
243         aFlFrame.Disable();
244         aBtnInsAll.Disable();
245         DisableChecks(sal_True);
246     }
247     else
248     {
249         aBtnSkipEmptyCells.Enable();
250         aBtnTranspose.Enable(!bFillMode);
251         aRbNoOp.Enable();
252         aRbAdd.Enable();
253         aRbSub.Enable();
254         aRbMul.Enable();
255         aRbDiv.Enable();
256         aFlOperation.Enable();
257 
258         aRbMoveNone.Enable(!bFillMode && !bChangeTrack && !(bMoveDownDisabled && bMoveRightDisabled));
259         aRbMoveDown.Enable(!bFillMode && !bChangeTrack && !bMoveDownDisabled);
260         aRbMoveRight.Enable(!bFillMode && !bChangeTrack && !bMoveRightDisabled);
261         aFlMove.Enable(!bFillMode && !bChangeTrack && !(bMoveDownDisabled && bMoveRightDisabled));
262 
263         aFlFrame.Enable();
264         aBtnInsAll.Enable();
265         DisableChecks( aBtnInsAll.IsChecked() );
266     }
267 }
268 
269 void ScInsertContentsDlg::SetOtherDoc( sal_Bool bSet )
270 {
271     if ( bSet != bOtherDoc )
272     {
273         bOtherDoc = bSet;
274         TestModes();
275         if ( bSet )
276             aRbMoveNone.Check(sal_True);
277     }
278 }
279 
280 void ScInsertContentsDlg::SetFillMode( sal_Bool bSet )
281 {
282     if ( bSet != bFillMode )
283     {
284         bFillMode = bSet;
285         TestModes();
286         if ( bSet )
287             aRbMoveNone.Check(sal_True);
288     }
289 }
290 
291 void ScInsertContentsDlg::SetChangeTrack( sal_Bool bSet )
292 {
293     if ( bSet != bChangeTrack )
294     {
295         bChangeTrack = bSet;
296         TestModes();
297         if ( bSet )
298             aRbMoveNone.Check(sal_True);
299     }
300 }
301 
302 void ScInsertContentsDlg::SetCellShiftDisabled( int nDisable )
303 {
304     sal_Bool bDown = ((nDisable & SC_CELL_SHIFT_DISABLE_DOWN) != 0);
305     sal_Bool bRight = ((nDisable & SC_CELL_SHIFT_DISABLE_RIGHT) != 0);
306     if ( bDown != bMoveDownDisabled || bRight != bMoveRightDisabled )
307     {
308         bMoveDownDisabled = bDown;
309         bMoveRightDisabled = bRight;
310         TestModes();
311         if ( bMoveDownDisabled && aRbMoveDown.IsChecked() )
312             aRbMoveNone.Check(sal_True);
313         if ( bMoveRightDisabled && aRbMoveRight.IsChecked() )
314             aRbMoveNone.Check(sal_True);
315     }
316 }
317 
318 
319 //------------------------------------------------------------------------
320 
321 IMPL_LINK( ScInsertContentsDlg, InsAllHdl, void*, EMPTYARG )
322 {
323     DisableChecks( aBtnInsAll.IsChecked() );
324 
325     return 0;
326 }
327 
328 IMPL_LINK( ScInsertContentsDlg, LinkBtnHdl, void*, EMPTYARG )
329 {
330     TestModes();
331 
332     return 0;
333 }
334 
335 __EXPORT ScInsertContentsDlg::~ScInsertContentsDlg()
336 {
337     ScInsertContentsDlg::nPreviousChecks2 = 0;
338     if(aBtnSkipEmptyCells.IsChecked())
339         ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_NOEMPTY;
340     if( aBtnTranspose.IsChecked())
341         ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_TRANS;
342     if( aBtnLink.IsChecked() )
343         ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_LINK;
344 
345     if (!bFillMode)     // im FillMode ist None gecheckt und alle 3 disabled
346     {
347         if ( aRbMoveNone.IsChecked() )
348             ScInsertContentsDlg::nPreviousMoveMode = INS_NONE;
349         else if ( aRbMoveDown.IsChecked() )
350             ScInsertContentsDlg::nPreviousMoveMode = INS_CELLSDOWN;
351         else if ( aRbMoveRight.IsChecked() )
352             ScInsertContentsDlg::nPreviousMoveMode = INS_CELLSRIGHT;
353     }
354 }
355 
356 sal_uInt16  ScInsertContentsDlg::GetFormulaCmdBits() const
357 {
358     ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_NOFUNC;
359     if(aRbAdd.IsChecked())
360         ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_ADD;
361     else if(aRbSub.IsChecked())
362         ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_SUB;
363     else if(aRbMul.IsChecked())
364         ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_MUL;
365     else if(aRbDiv.IsChecked())
366         ScInsertContentsDlg::nPreviousFormulaChecks = PASTE_DIV;
367     // Bits fuer Checkboxen ausblenden
368     return ScInsertContentsDlg::nPreviousFormulaChecks;
369 }
370 
371 
372 
373