xref: /trunk/main/sc/source/ui/miscdlgs/inscodlg.cxx (revision cdf0e10c)
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