Version 5.2.6.1, tag libreoffice-5.2.6.1
[LibreOffice.git] / sc / source / ui / miscdlgs / inscodlg.cxx
blob31f3ea3f486f444863176a004a24e51d8856a29c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #undef SC_DLLIMPLEMENTATION
22 #include "inscodlg.hxx"
23 #include "scresid.hxx"
24 #include "miscdlgs.hrc"
26 bool ScInsertContentsDlg::bPreviousAllCheck = false;
27 InsertDeleteFlags ScInsertContentsDlg::nPreviousChecks = (InsertDeleteFlags::VALUE | InsertDeleteFlags::DATETIME | InsertDeleteFlags::STRING);
28 ScPasteFunc ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::NONE;
29 sal_uInt16 ScInsertContentsDlg::nPreviousChecks2 = 0;
30 sal_uInt16 ScInsertContentsDlg::nPreviousMoveMode = INS_NONE; // enum InsCellCmd
32 ScInsertContentsDlg::ScInsertContentsDlg( vcl::Window* pParent,
33 InsertDeleteFlags nCheckDefaults,
34 const OUString* pStrTitle )
36 : ModalDialog ( pParent, "PasteSpecial", "modules/scalc/ui/pastespecial.ui" ),
37 bOtherDoc ( false ),
38 bFillMode ( false ),
39 bChangeTrack ( false ),
40 bMoveDownDisabled( false ),
41 bMoveRightDisabled( false ),
42 bUsedShortCut ( false ),
43 nShortCutInsContentsCmdBits( InsertDeleteFlags::NONE ),
44 nShortCutFormulaCmdBits(ScPasteFunc::NONE),
45 bShortCutSkipEmptyCells(false),
46 bShortCutTranspose(false),
47 bShortCutIsLink(false),
48 nShortCutMoveMode(INS_NONE)
50 get( mpBtnInsAll, "paste_all" );
51 get( mpBtnInsStrings, "text" );
52 get( mpBtnInsNumbers, "numbers" );
53 get( mpBtnInsDateTime, "datetime" );
54 get( mpBtnInsFormulas, "formulas" );
55 get( mpBtnInsNotes, "comments" );
56 get( mpBtnInsAttrs, "formats" );
57 get( mpBtnInsObjects, "objects" );
58 get( mpBtnSkipEmptyCells, "skip_empty" );
59 get( mpBtnTranspose, "transpose" );
60 get( mpBtnLink, "link" );
61 get( mpRbNoOp, "none" );
62 get( mpRbAdd, "add" );
63 get( mpRbSub, "subtract" );
64 get( mpRbMul, "multiply" );
65 get( mpRbDiv, "divide" );
66 get( mpRbMoveNone, "no_shift" );
67 get( mpRbMoveDown, "move_down" );
68 get( mpRbMoveRight, "move_right" );
69 get( mpBtnShortCutPasteValuesOnly, "paste_values_only");
70 get( mpBtnShortCutPasteValuesFormats, "paste_values_formats");
71 get( mpBtnShortCutPasteTranspose, "paste_transpose");
73 if ( pStrTitle )
74 SetText( *pStrTitle );
76 if ( nCheckDefaults != InsertDeleteFlags::NONE )
78 ScInsertContentsDlg::nPreviousChecks = nCheckDefaults;
79 ScInsertContentsDlg::bPreviousAllCheck = false;
80 ScInsertContentsDlg::nPreviousChecks2 = 0;
83 mpBtnInsAll->Check ( ScInsertContentsDlg::bPreviousAllCheck );
84 mpBtnInsStrings->Check ( IS_SET( InsertDeleteFlags::STRING,
85 ScInsertContentsDlg::nPreviousChecks ) );
86 mpBtnInsNumbers->Check ( IS_SET( InsertDeleteFlags::VALUE,
87 ScInsertContentsDlg::nPreviousChecks ) );
88 mpBtnInsDateTime->Check( IS_SET( InsertDeleteFlags::DATETIME,
89 ScInsertContentsDlg::nPreviousChecks ) );
90 mpBtnInsFormulas->Check( IS_SET( InsertDeleteFlags::FORMULA,
91 ScInsertContentsDlg::nPreviousChecks ) );
92 mpBtnInsNotes->Check ( IS_SET( InsertDeleteFlags::NOTE,
93 ScInsertContentsDlg::nPreviousChecks ) );
94 mpBtnInsAttrs->Check ( IS_SET( InsertDeleteFlags::ATTRIB,
95 ScInsertContentsDlg::nPreviousChecks ) );
96 mpBtnInsObjects->Check ( IS_SET( InsertDeleteFlags::OBJECTS,
97 ScInsertContentsDlg::nPreviousChecks ) );
99 switch( ScInsertContentsDlg::nPreviousFormulaChecks )
101 case ScPasteFunc::NONE: mpRbNoOp->Check(); break;
102 case ScPasteFunc::ADD: mpRbAdd->Check(); break;
103 case ScPasteFunc::SUB: mpRbSub->Check(); break;
104 case ScPasteFunc::MUL: mpRbMul->Check(); break;
105 case ScPasteFunc::DIV: mpRbDiv->Check(); break;
108 switch( ScInsertContentsDlg::nPreviousMoveMode )
110 case INS_NONE: mpRbMoveNone->Check(); break;
111 case INS_CELLSDOWN: mpRbMoveDown->Check(); break;
112 case INS_CELLSRIGHT: mpRbMoveRight->Check(); break;
115 mpBtnSkipEmptyCells->Check( ( ScInsertContentsDlg::nPreviousChecks2 & INS_CONT_NOEMPTY ) != 0);
116 mpBtnTranspose->Check( ( ScInsertContentsDlg::nPreviousChecks2 & INS_CONT_TRANS ) != 0);
117 mpBtnLink->Check( ( ScInsertContentsDlg::nPreviousChecks2 & INS_CONT_LINK ) != 0);
119 DisableChecks( mpBtnInsAll->IsChecked() );
121 mpBtnInsAll->SetClickHdl( LINK( this, ScInsertContentsDlg, InsAllHdl ) );
122 mpBtnLink->SetClickHdl( LINK( this, ScInsertContentsDlg, LinkBtnHdl ) );
124 mpBtnShortCutPasteValuesOnly->SetClickHdl( LINK( this, ScInsertContentsDlg, ShortCutHdl ) );
125 mpBtnShortCutPasteValuesFormats->SetClickHdl( LINK( this, ScInsertContentsDlg, ShortCutHdl ) );
126 mpBtnShortCutPasteTranspose->SetClickHdl( LINK( this, ScInsertContentsDlg, ShortCutHdl ) );
129 InsertDeleteFlags ScInsertContentsDlg::GetInsContentsCmdBits() const
131 ScInsertContentsDlg::nPreviousChecks = InsertDeleteFlags::NONE;
133 if ( mpBtnInsStrings->IsChecked() )
134 ScInsertContentsDlg::nPreviousChecks = InsertDeleteFlags::STRING;
135 if ( mpBtnInsNumbers->IsChecked() )
136 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::VALUE;
137 if ( mpBtnInsDateTime->IsChecked())
138 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::DATETIME;
139 if ( mpBtnInsFormulas->IsChecked())
140 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::FORMULA;
141 if ( mpBtnInsNotes->IsChecked() )
142 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::NOTE;
143 if ( mpBtnInsAttrs->IsChecked() )
144 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::ATTRIB;
145 if ( mpBtnInsObjects->IsChecked() )
146 ScInsertContentsDlg::nPreviousChecks |= InsertDeleteFlags::OBJECTS;
148 ScInsertContentsDlg::bPreviousAllCheck = mpBtnInsAll->IsChecked();
150 if (bUsedShortCut)
151 return nShortCutInsContentsCmdBits;
153 return ( (ScInsertContentsDlg::bPreviousAllCheck)
154 ? InsertDeleteFlags::ALL
155 : ScInsertContentsDlg::nPreviousChecks );
158 InsCellCmd ScInsertContentsDlg::GetMoveMode()
160 if (bUsedShortCut)
161 return nShortCutMoveMode;
162 if ( mpRbMoveDown->IsChecked() )
163 return INS_CELLSDOWN;
164 if ( mpRbMoveRight->IsChecked() )
165 return INS_CELLSRIGHT;
167 return INS_NONE;
170 bool ScInsertContentsDlg::IsSkipEmptyCells() const
172 if (bUsedShortCut)
173 return bShortCutSkipEmptyCells;
174 return mpBtnSkipEmptyCells->IsChecked();
177 bool ScInsertContentsDlg::IsTranspose() const
179 if (bUsedShortCut)
180 return bShortCutTranspose;
181 return mpBtnTranspose->IsChecked();
184 bool ScInsertContentsDlg::IsLink() const
186 if (bUsedShortCut)
187 return bShortCutIsLink;
188 return mpBtnLink->IsChecked();
191 void ScInsertContentsDlg::DisableChecks( bool bInsAllChecked )
193 if ( bInsAllChecked )
195 mpBtnInsStrings->Disable();
196 mpBtnInsNumbers->Disable();
197 mpBtnInsDateTime->Disable();
198 mpBtnInsFormulas->Disable();
199 mpBtnInsNotes->Disable();
200 mpBtnInsAttrs->Disable();
201 mpBtnInsObjects->Disable();
203 else
205 mpBtnInsStrings->Enable();
206 mpBtnInsNumbers->Enable();
207 mpBtnInsDateTime->Enable();
208 mpBtnInsFormulas->Enable();
209 mpBtnInsNotes->Enable();
210 mpBtnInsAttrs->Enable();
212 // "Objects" is disabled for "Fill Tables"
213 if ( bFillMode )
214 mpBtnInsObjects->Disable();
215 else
216 mpBtnInsObjects->Enable();
220 // Link to other document -> everything else is disabled
222 void ScInsertContentsDlg::TestModes()
224 if ( bOtherDoc && mpBtnLink->IsChecked() )
226 mpBtnSkipEmptyCells->Disable();
227 mpBtnTranspose->Disable();
228 mpRbNoOp->Disable();
229 mpRbAdd->Disable();
230 mpRbSub->Disable();
231 mpRbMul->Disable();
232 mpRbDiv->Disable();
234 mpRbMoveNone->Disable();
235 mpRbMoveDown->Disable();
236 mpRbMoveRight->Disable();
238 mpBtnInsAll->Disable();
239 DisableChecks();
241 else
243 mpBtnSkipEmptyCells->Enable();
244 mpBtnTranspose->Enable(!bFillMode);
245 mpRbNoOp->Enable();
246 mpRbAdd->Enable();
247 mpRbSub->Enable();
248 mpRbMul->Enable();
249 mpRbDiv->Enable();
251 mpRbMoveNone->Enable(!bFillMode && !bChangeTrack && !(bMoveDownDisabled && bMoveRightDisabled));
252 mpRbMoveDown->Enable(!bFillMode && !bChangeTrack && !bMoveDownDisabled);
253 mpRbMoveRight->Enable(!bFillMode && !bChangeTrack && !bMoveRightDisabled);
255 mpBtnInsAll->Enable();
256 DisableChecks( mpBtnInsAll->IsChecked() );
260 void ScInsertContentsDlg::SetOtherDoc( bool bSet )
262 if ( bSet != bOtherDoc )
264 bOtherDoc = bSet;
265 TestModes();
266 if ( bSet )
267 mpRbMoveNone->Check();
271 void ScInsertContentsDlg::SetFillMode( bool bSet )
273 if ( bSet != bFillMode )
275 bFillMode = bSet;
276 TestModes();
277 if ( bSet )
278 mpRbMoveNone->Check();
282 void ScInsertContentsDlg::SetChangeTrack( bool bSet )
284 if ( bSet != bChangeTrack )
286 bChangeTrack = bSet;
287 TestModes();
288 if ( bSet )
289 mpRbMoveNone->Check();
293 void ScInsertContentsDlg::SetCellShiftDisabled( int nDisable )
295 bool bDown = ((nDisable & SC_CELL_SHIFT_DISABLE_DOWN) != 0);
296 bool bRight = ((nDisable & SC_CELL_SHIFT_DISABLE_RIGHT) != 0);
297 if ( bDown != bMoveDownDisabled || bRight != bMoveRightDisabled )
299 bMoveDownDisabled = bDown;
300 bMoveRightDisabled = bRight;
301 TestModes();
302 if ( bMoveDownDisabled && mpRbMoveDown->IsChecked() )
303 mpRbMoveNone->Check();
304 if ( bMoveRightDisabled && mpRbMoveRight->IsChecked() )
305 mpRbMoveNone->Check();
309 IMPL_LINK_TYPED( ScInsertContentsDlg, ShortCutHdl, Button*, pBtn, void )
311 if ( pBtn == mpBtnShortCutPasteValuesOnly )
313 bUsedShortCut = true;
314 nShortCutInsContentsCmdBits = InsertDeleteFlags::STRING | InsertDeleteFlags::VALUE | InsertDeleteFlags::DATETIME;
315 nShortCutFormulaCmdBits = ScPasteFunc::NONE;
316 bShortCutSkipEmptyCells = false;
317 bShortCutTranspose = false;
318 bShortCutIsLink = false;
319 nShortCutMoveMode = INS_NONE;
320 EndDialog(RET_OK);
322 else if ( pBtn == mpBtnShortCutPasteValuesFormats )
324 bUsedShortCut = true;
325 nShortCutInsContentsCmdBits = InsertDeleteFlags::STRING | InsertDeleteFlags::VALUE | InsertDeleteFlags::DATETIME | InsertDeleteFlags::ATTRIB;
326 nShortCutFormulaCmdBits = ScPasteFunc::NONE;
327 bShortCutSkipEmptyCells = false;
328 bShortCutTranspose = false;
329 bShortCutIsLink = false;
330 nShortCutMoveMode = INS_NONE;
331 EndDialog(RET_OK);
333 else if ( pBtn == mpBtnShortCutPasteTranspose )
335 bUsedShortCut = true;
336 nShortCutInsContentsCmdBits = InsertDeleteFlags::ALL;
337 nShortCutFormulaCmdBits = ScPasteFunc::NONE;
338 bShortCutSkipEmptyCells = false;
339 bShortCutTranspose = true;
340 bShortCutIsLink = false;
341 nShortCutMoveMode = INS_NONE;
342 EndDialog(RET_OK);
347 IMPL_LINK_NOARG_TYPED(ScInsertContentsDlg, InsAllHdl, Button*, void)
349 DisableChecks( mpBtnInsAll->IsChecked() );
352 IMPL_LINK_NOARG_TYPED(ScInsertContentsDlg, LinkBtnHdl, Button*, void)
354 TestModes();
357 ScInsertContentsDlg::~ScInsertContentsDlg()
359 disposeOnce();
362 void ScInsertContentsDlg::dispose()
364 ScInsertContentsDlg::nPreviousChecks2 = 0;
365 if(mpBtnSkipEmptyCells->IsChecked())
366 ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_NOEMPTY;
367 if( mpBtnTranspose->IsChecked())
368 ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_TRANS;
369 if( mpBtnLink->IsChecked() )
370 ScInsertContentsDlg::nPreviousChecks2 |= INS_CONT_LINK;
372 if (!bFillMode) // in FillMode, None is checked and all three options are disabled
374 if ( mpRbMoveNone->IsChecked() )
375 ScInsertContentsDlg::nPreviousMoveMode = INS_NONE;
376 else if ( mpRbMoveDown->IsChecked() )
377 ScInsertContentsDlg::nPreviousMoveMode = INS_CELLSDOWN;
378 else if ( mpRbMoveRight->IsChecked() )
379 ScInsertContentsDlg::nPreviousMoveMode = INS_CELLSRIGHT;
381 mpBtnInsAll.clear();
382 mpBtnInsStrings.clear();
383 mpBtnInsNumbers.clear();
384 mpBtnInsDateTime.clear();
385 mpBtnInsFormulas.clear();
386 mpBtnInsNotes.clear();
387 mpBtnInsAttrs.clear();
388 mpBtnInsObjects.clear();
389 mpBtnSkipEmptyCells.clear();
390 mpBtnTranspose.clear();
391 mpBtnLink.clear();
392 mpRbNoOp.clear();
393 mpRbAdd.clear();
394 mpRbSub.clear();
395 mpRbMul.clear();
396 mpRbDiv.clear();
397 mpRbMoveNone.clear();
398 mpRbMoveDown.clear();
399 mpRbMoveRight.clear();
400 mpBtnShortCutPasteValuesOnly.clear();
401 mpBtnShortCutPasteValuesFormats.clear();
402 mpBtnShortCutPasteTranspose.clear();
403 ModalDialog::dispose();
406 ScPasteFunc ScInsertContentsDlg::GetFormulaCmdBits() const
408 ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::NONE;
409 if(mpRbAdd->IsChecked())
410 ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::ADD;
411 else if(mpRbSub->IsChecked())
412 ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::SUB;
413 else if(mpRbMul->IsChecked())
414 ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::MUL;
415 else if(mpRbDiv->IsChecked())
416 ScInsertContentsDlg::nPreviousFormulaChecks = ScPasteFunc::DIV;
417 if (bUsedShortCut)
418 return nShortCutFormulaCmdBits;
419 return ScInsertContentsDlg::nPreviousFormulaChecks;
422 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */