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