1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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" ),
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");
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();
151 return nShortCutInsContentsCmdBits
;
153 return ( (ScInsertContentsDlg::bPreviousAllCheck
)
154 ? InsertDeleteFlags::ALL
155 : ScInsertContentsDlg::nPreviousChecks
);
158 InsCellCmd
ScInsertContentsDlg::GetMoveMode()
161 return nShortCutMoveMode
;
162 if ( mpRbMoveDown
->IsChecked() )
163 return INS_CELLSDOWN
;
164 if ( mpRbMoveRight
->IsChecked() )
165 return INS_CELLSRIGHT
;
170 bool ScInsertContentsDlg::IsSkipEmptyCells() const
173 return bShortCutSkipEmptyCells
;
174 return mpBtnSkipEmptyCells
->IsChecked();
177 bool ScInsertContentsDlg::IsTranspose() const
180 return bShortCutTranspose
;
181 return mpBtnTranspose
->IsChecked();
184 bool ScInsertContentsDlg::IsLink() const
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();
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"
214 mpBtnInsObjects
->Disable();
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();
234 mpRbMoveNone
->Disable();
235 mpRbMoveDown
->Disable();
236 mpRbMoveRight
->Disable();
238 mpBtnInsAll
->Disable();
243 mpBtnSkipEmptyCells
->Enable();
244 mpBtnTranspose
->Enable(!bFillMode
);
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
)
267 mpRbMoveNone
->Check();
271 void ScInsertContentsDlg::SetFillMode( bool bSet
)
273 if ( bSet
!= bFillMode
)
278 mpRbMoveNone
->Check();
282 void ScInsertContentsDlg::SetChangeTrack( bool bSet
)
284 if ( bSet
!= bChangeTrack
)
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
;
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
;
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
;
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
;
347 IMPL_LINK_NOARG_TYPED(ScInsertContentsDlg
, InsAllHdl
, Button
*, void)
349 DisableChecks( mpBtnInsAll
->IsChecked() );
352 IMPL_LINK_NOARG_TYPED(ScInsertContentsDlg
, LinkBtnHdl
, Button
*, void)
357 ScInsertContentsDlg::~ScInsertContentsDlg()
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
;
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();
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
;
418 return nShortCutFormulaCmdBits
;
419 return ScInsertContentsDlg::nPreviousFormulaChecks
;
422 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */