1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_sc.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // System - Includes --------------------------------------------------------- 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir // INCLUDE ------------------------------------------------------------------- 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir #include "reffact.hxx" 40*cdf0e10cSrcweir #include "document.hxx" 41*cdf0e10cSrcweir #include "scresid.hxx" 42*cdf0e10cSrcweir #include "globstr.hrc" 43*cdf0e10cSrcweir #include "dbnamdlg.hrc" 44*cdf0e10cSrcweir #include "rangenam.hxx" // IsNameValid 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #define _DBNAMDLG_CXX 47*cdf0e10cSrcweir #include "dbnamdlg.hxx" 48*cdf0e10cSrcweir #undef _DBNAMDLG_CXX 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir //============================================================================ 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir #define ABS_SREF SCA_VALID \ 54*cdf0e10cSrcweir | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE 55*cdf0e10cSrcweir #define ABS_DREF ABS_SREF \ 56*cdf0e10cSrcweir | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE 57*cdf0e10cSrcweir #define ABS_SREF3D ABS_SREF | SCA_TAB_3D 58*cdf0e10cSrcweir #define ABS_DREF3D ABS_DREF | SCA_TAB_3D 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir //---------------------------------------------------------------------------- 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir class DBSaveData; 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir static DBSaveData* pSaveObj = NULL; 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute() 67*cdf0e10cSrcweir #define QUERYBOX(m) QueryBox(this,WinBits(WB_YES_NO|WB_DEF_YES),m).Execute() 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir //============================================================================ 70*cdf0e10cSrcweir // class DBSaveData 71*cdf0e10cSrcweir 72*cdf0e10cSrcweir class DBSaveData 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir public: 75*cdf0e10cSrcweir DBSaveData( Edit& rEd, CheckBox& rHdr, CheckBox& rSize, CheckBox& rFmt, 76*cdf0e10cSrcweir CheckBox& rStrip, ScRange& rArea ) 77*cdf0e10cSrcweir : rEdAssign(rEd), 78*cdf0e10cSrcweir rBtnHeader(rHdr), rBtnSize(rSize), rBtnFormat(rFmt), rBtnStrip(rStrip), 79*cdf0e10cSrcweir rCurArea(rArea), 80*cdf0e10cSrcweir bHeader(sal_False), bSize(sal_False), bFormat(sal_False), bDirty(sal_False) {} 81*cdf0e10cSrcweir void Save(); 82*cdf0e10cSrcweir void Restore(); 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir private: 85*cdf0e10cSrcweir Edit& rEdAssign; 86*cdf0e10cSrcweir CheckBox& rBtnHeader; 87*cdf0e10cSrcweir CheckBox& rBtnSize; 88*cdf0e10cSrcweir CheckBox& rBtnFormat; 89*cdf0e10cSrcweir CheckBox& rBtnStrip; 90*cdf0e10cSrcweir ScRange& rCurArea; 91*cdf0e10cSrcweir String aStr; 92*cdf0e10cSrcweir ScRange aArea; 93*cdf0e10cSrcweir sal_Bool bHeader:1; 94*cdf0e10cSrcweir sal_Bool bSize:1; 95*cdf0e10cSrcweir sal_Bool bFormat:1; 96*cdf0e10cSrcweir sal_Bool bStrip:1; 97*cdf0e10cSrcweir sal_Bool bDirty:1; 98*cdf0e10cSrcweir }; 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir //---------------------------------------------------------------------------- 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir void DBSaveData::Save() 105*cdf0e10cSrcweir { 106*cdf0e10cSrcweir aArea = rCurArea; 107*cdf0e10cSrcweir aStr = rEdAssign.GetText(); 108*cdf0e10cSrcweir bHeader = rBtnHeader.IsChecked(); 109*cdf0e10cSrcweir bSize = rBtnSize.IsChecked(); 110*cdf0e10cSrcweir bFormat = rBtnFormat.IsChecked(); 111*cdf0e10cSrcweir bStrip = rBtnStrip.IsChecked(); 112*cdf0e10cSrcweir bDirty = sal_True; 113*cdf0e10cSrcweir } 114*cdf0e10cSrcweir 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir //---------------------------------------------------------------------------- 117*cdf0e10cSrcweir 118*cdf0e10cSrcweir void DBSaveData::Restore() 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir if ( bDirty ) 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir rCurArea = aArea; 123*cdf0e10cSrcweir rEdAssign.SetText( aStr ); 124*cdf0e10cSrcweir rBtnHeader.Check ( bHeader ); 125*cdf0e10cSrcweir rBtnSize.Check ( bSize ); 126*cdf0e10cSrcweir rBtnFormat.Check ( bFormat ); 127*cdf0e10cSrcweir rBtnStrip.Check ( bStrip ); 128*cdf0e10cSrcweir bDirty = sal_False; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir //============================================================================ 134*cdf0e10cSrcweir // class ScDbNameDlg 135*cdf0e10cSrcweir 136*cdf0e10cSrcweir //---------------------------------------------------------------------------- 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir ScDbNameDlg::ScDbNameDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent, 139*cdf0e10cSrcweir ScViewData* ptrViewData ) 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_DBNAMES ), 142*cdf0e10cSrcweir // 143*cdf0e10cSrcweir aFlName ( this, ScResId( FL_NAME ) ), 144*cdf0e10cSrcweir aEdName ( this, ScResId( ED_NAME ) ), 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir aFlAssign ( this, ScResId( FL_ASSIGN ) ), 147*cdf0e10cSrcweir aEdAssign ( this, this, ScResId( ED_DBAREA ) ), 148*cdf0e10cSrcweir aRbAssign ( this, ScResId( RB_DBAREA ), &aEdAssign, this ), 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir aFlOptions ( this, ScResId( FL_OPTIONS ) ), 151*cdf0e10cSrcweir aBtnHeader ( this, ScResId( BTN_HEADER ) ), 152*cdf0e10cSrcweir aBtnDoSize ( this, ScResId( BTN_SIZE ) ), 153*cdf0e10cSrcweir aBtnKeepFmt ( this, ScResId( BTN_FORMAT ) ), 154*cdf0e10cSrcweir aBtnStripData ( this, ScResId( BTN_STRIPDATA ) ), 155*cdf0e10cSrcweir aFTSource ( this, ScResId( FT_SOURCE ) ), 156*cdf0e10cSrcweir aFTOperations ( this, ScResId( FT_OPERATIONS ) ), 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir aBtnOk ( this, ScResId( BTN_OK ) ), 159*cdf0e10cSrcweir aBtnCancel ( this, ScResId( BTN_CANCEL ) ), 160*cdf0e10cSrcweir aBtnHelp ( this, ScResId( BTN_HELP ) ), 161*cdf0e10cSrcweir aBtnAdd ( this, ScResId( BTN_ADD ) ), 162*cdf0e10cSrcweir aBtnRemove ( this, ScResId( BTN_REMOVE ) ), 163*cdf0e10cSrcweir aBtnMore ( this, ScResId( BTN_MORE ) ), 164*cdf0e10cSrcweir 165*cdf0e10cSrcweir aStrAdd ( ScResId( STR_ADD ) ), 166*cdf0e10cSrcweir aStrModify ( ScResId( STR_MODIFY ) ), 167*cdf0e10cSrcweir aStrNoName ( ScGlobal::GetRscString(STR_DB_NONAME) ), 168*cdf0e10cSrcweir aStrInvalid ( ScResId( STR_DB_INVALID ) ), 169*cdf0e10cSrcweir // 170*cdf0e10cSrcweir pViewData ( ptrViewData ), 171*cdf0e10cSrcweir pDoc ( ptrViewData->GetDocument() ), 172*cdf0e10cSrcweir bRefInputMode ( sal_False ), 173*cdf0e10cSrcweir aAddrDetails ( pDoc->GetAddressConvention(), 0, 0 ), 174*cdf0e10cSrcweir aLocalDbCol ( *(pDoc->GetDBCollection()) ) 175*cdf0e10cSrcweir { 176*cdf0e10cSrcweir // WB_NOLABEL can't be set in resource... 177*cdf0e10cSrcweir aFTSource.SetStyle( aFTSource.GetStyle() | WB_NOLABEL ); 178*cdf0e10cSrcweir aFTOperations.SetStyle( aFTOperations.GetStyle() | WB_NOLABEL ); 179*cdf0e10cSrcweir 180*cdf0e10cSrcweir // damit die Strings in der Resource bei den FixedTexten bleiben koennen: 181*cdf0e10cSrcweir aStrSource = aFTSource.GetText(); 182*cdf0e10cSrcweir aStrOperations = aFTOperations.GetText(); 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir pSaveObj = new DBSaveData( aEdAssign, aBtnHeader, 185*cdf0e10cSrcweir aBtnDoSize, aBtnKeepFmt, aBtnStripData, theCurArea ); 186*cdf0e10cSrcweir Init(); 187*cdf0e10cSrcweir FreeResource(); 188*cdf0e10cSrcweir aRbAssign.SetAccessibleRelationMemberOf(&aFlAssign); 189*cdf0e10cSrcweir } 190*cdf0e10cSrcweir 191*cdf0e10cSrcweir 192*cdf0e10cSrcweir //---------------------------------------------------------------------------- 193*cdf0e10cSrcweir 194*cdf0e10cSrcweir __EXPORT ScDbNameDlg::~ScDbNameDlg() 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir DELETEZ( pSaveObj ); 197*cdf0e10cSrcweir 198*cdf0e10cSrcweir ScRange* pEntry = (ScRange*)aRemoveList.First(); 199*cdf0e10cSrcweir while ( pEntry ) 200*cdf0e10cSrcweir { 201*cdf0e10cSrcweir aRemoveList.Remove( pEntry ); 202*cdf0e10cSrcweir delete pEntry; 203*cdf0e10cSrcweir pEntry = (ScRange*)aRemoveList.Next(); 204*cdf0e10cSrcweir } 205*cdf0e10cSrcweir } 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir //---------------------------------------------------------------------------- 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir void ScDbNameDlg::Init() 211*cdf0e10cSrcweir { 212*cdf0e10cSrcweir aBtnHeader.Check( sal_True ); // Default: mit Spaltenkoepfen 213*cdf0e10cSrcweir 214*cdf0e10cSrcweir aBtnMore.AddWindow( &aFlOptions ); 215*cdf0e10cSrcweir aBtnMore.AddWindow( &aBtnHeader ); 216*cdf0e10cSrcweir aBtnMore.AddWindow( &aBtnDoSize ); 217*cdf0e10cSrcweir aBtnMore.AddWindow( &aBtnKeepFmt ); 218*cdf0e10cSrcweir aBtnMore.AddWindow( &aBtnStripData ); 219*cdf0e10cSrcweir aBtnMore.AddWindow( &aFTSource ); 220*cdf0e10cSrcweir aBtnMore.AddWindow( &aFTOperations ); 221*cdf0e10cSrcweir 222*cdf0e10cSrcweir String theAreaStr; 223*cdf0e10cSrcweir SCCOL nStartCol = 0; 224*cdf0e10cSrcweir SCROW nStartRow = 0; 225*cdf0e10cSrcweir SCTAB nStartTab = 0; 226*cdf0e10cSrcweir SCCOL nEndCol = 0; 227*cdf0e10cSrcweir SCROW nEndRow = 0; 228*cdf0e10cSrcweir SCTAB nEndTab = 0; 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir aBtnOk.SetClickHdl ( LINK( this, ScDbNameDlg, OkBtnHdl ) ); 231*cdf0e10cSrcweir aBtnCancel.SetClickHdl ( LINK( this, ScDbNameDlg, CancelBtnHdl ) ); 232*cdf0e10cSrcweir aBtnAdd.SetClickHdl ( LINK( this, ScDbNameDlg, AddBtnHdl ) ); 233*cdf0e10cSrcweir aBtnRemove.SetClickHdl ( LINK( this, ScDbNameDlg, RemoveBtnHdl ) ); 234*cdf0e10cSrcweir aEdName.SetModifyHdl ( LINK( this, ScDbNameDlg, NameModifyHdl ) ); 235*cdf0e10cSrcweir aEdAssign.SetModifyHdl ( LINK( this, ScDbNameDlg, AssModifyHdl ) ); 236*cdf0e10cSrcweir UpdateNames(); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir if ( pViewData && pDoc ) 239*cdf0e10cSrcweir { 240*cdf0e10cSrcweir ScDBCollection* pDBColl = pDoc->GetDBCollection(); 241*cdf0e10cSrcweir ScDBData* pDBData = NULL; 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab, 244*cdf0e10cSrcweir nEndCol, nEndRow, nEndTab ); 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir theCurArea = ScRange( ScAddress( nStartCol, nStartRow, nStartTab ), 247*cdf0e10cSrcweir ScAddress( nEndCol, nEndRow, nEndTab ) ); 248*cdf0e10cSrcweir 249*cdf0e10cSrcweir theCurArea.Format( theAreaStr, ABS_DREF3D, pDoc, aAddrDetails ); 250*cdf0e10cSrcweir 251*cdf0e10cSrcweir if ( pDBColl ) 252*cdf0e10cSrcweir { 253*cdf0e10cSrcweir // Feststellen, ob definierter DB-Bereich markiert wurde: 254*cdf0e10cSrcweir pDBData = pDBColl->GetDBAtCursor( nStartCol, nStartRow, nStartTab, sal_True ); 255*cdf0e10cSrcweir if ( pDBData ) 256*cdf0e10cSrcweir { 257*cdf0e10cSrcweir String theDbName; 258*cdf0e10cSrcweir ScAddress& rStart = theCurArea.aStart; 259*cdf0e10cSrcweir ScAddress& rEnd = theCurArea.aEnd; 260*cdf0e10cSrcweir SCCOL nCol1; 261*cdf0e10cSrcweir SCCOL nCol2; 262*cdf0e10cSrcweir SCROW nRow1; 263*cdf0e10cSrcweir SCROW nRow2; 264*cdf0e10cSrcweir SCTAB nTab; 265*cdf0e10cSrcweir 266*cdf0e10cSrcweir pDBData->GetArea( nTab, nCol1, nRow1, nCol2, nRow2 ); 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir if ( (rStart.Tab() == nTab) 269*cdf0e10cSrcweir && (rStart.Col() == nCol1) && (rStart.Row() == nRow1) 270*cdf0e10cSrcweir && (rEnd.Col() == nCol2) && (rEnd.Row() == nRow2 ) ) 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir pDBData->GetName( theDbName ); 273*cdf0e10cSrcweir if ( theDbName != aStrNoName ) 274*cdf0e10cSrcweir aEdName.SetText( theDbName ); 275*cdf0e10cSrcweir else 276*cdf0e10cSrcweir aEdName.SetText( EMPTY_STRING ); 277*cdf0e10cSrcweir aBtnHeader.Check( pDBData->HasHeader() ); 278*cdf0e10cSrcweir aBtnDoSize.Check( pDBData->IsDoSize() ); 279*cdf0e10cSrcweir aBtnKeepFmt.Check( pDBData->IsKeepFmt() ); 280*cdf0e10cSrcweir aBtnStripData.Check( pDBData->IsStripData() ); 281*cdf0e10cSrcweir SetInfoStrings( pDBData ); 282*cdf0e10cSrcweir } 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir } 285*cdf0e10cSrcweir } 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir aEdAssign.SetText( theAreaStr ); 288*cdf0e10cSrcweir aEdName.GrabFocus(); 289*cdf0e10cSrcweir bSaved=sal_True; 290*cdf0e10cSrcweir pSaveObj->Save(); 291*cdf0e10cSrcweir NameModifyHdl( 0 ); 292*cdf0e10cSrcweir } 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir void ScDbNameDlg::SetInfoStrings( const ScDBData* pDBData ) 296*cdf0e10cSrcweir { 297*cdf0e10cSrcweir String aSource = aStrSource; 298*cdf0e10cSrcweir if (pDBData) 299*cdf0e10cSrcweir { 300*cdf0e10cSrcweir aSource += ' '; 301*cdf0e10cSrcweir aSource += pDBData->GetSourceString(); 302*cdf0e10cSrcweir } 303*cdf0e10cSrcweir aFTSource.SetText( aSource ); 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir String aOper = aStrOperations; 306*cdf0e10cSrcweir if (pDBData) 307*cdf0e10cSrcweir { 308*cdf0e10cSrcweir aOper += ' '; 309*cdf0e10cSrcweir aOper += pDBData->GetOperations(); 310*cdf0e10cSrcweir } 311*cdf0e10cSrcweir aFTOperations.SetText( aOper ); 312*cdf0e10cSrcweir } 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir //---------------------------------------------------------------------------- 315*cdf0e10cSrcweir // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als 316*cdf0e10cSrcweir // neue Selektion im Referenz-Fenster angezeigt wird. 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir void ScDbNameDlg::SetReference( const ScRange& rRef, ScDocument* pDocP ) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir if ( aEdAssign.IsEnabled() ) 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir if ( rRef.aStart != rRef.aEnd ) 323*cdf0e10cSrcweir RefInputStart( &aEdAssign ); 324*cdf0e10cSrcweir 325*cdf0e10cSrcweir theCurArea = rRef; 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir String aRefStr; 328*cdf0e10cSrcweir theCurArea.Format( aRefStr, ABS_DREF3D, pDocP, aAddrDetails ); 329*cdf0e10cSrcweir aEdAssign.SetRefString( aRefStr ); 330*cdf0e10cSrcweir aBtnHeader.Enable(); 331*cdf0e10cSrcweir aBtnDoSize.Enable(); 332*cdf0e10cSrcweir aBtnKeepFmt.Enable(); 333*cdf0e10cSrcweir aBtnStripData.Enable(); 334*cdf0e10cSrcweir aFTSource.Enable(); 335*cdf0e10cSrcweir aFTOperations.Enable(); 336*cdf0e10cSrcweir aBtnAdd.Enable(); 337*cdf0e10cSrcweir bSaved=sal_True; 338*cdf0e10cSrcweir pSaveObj->Save(); 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir } 341*cdf0e10cSrcweir 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir //---------------------------------------------------------------------------- 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir sal_Bool __EXPORT ScDbNameDlg::Close() 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir return DoClose( ScDbNameDlgWrapper::GetChildWindowId() ); 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir 350*cdf0e10cSrcweir //------------------------------------------------------------------------ 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir void ScDbNameDlg::SetActive() 353*cdf0e10cSrcweir { 354*cdf0e10cSrcweir aEdAssign.GrabFocus(); 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir // kein NameModifyHdl, weil sonst Bereiche nicht geaendert werden koennen 357*cdf0e10cSrcweir // (nach dem Aufziehen der Referenz wuerde der alte Inhalt wieder angezeigt) 358*cdf0e10cSrcweir // (der ausgewaehlte DB-Name hat sich auch nicht veraendert) 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir RefInputDone(); 361*cdf0e10cSrcweir } 362*cdf0e10cSrcweir 363*cdf0e10cSrcweir //------------------------------------------------------------------------ 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir void ScDbNameDlg::UpdateNames() 366*cdf0e10cSrcweir { 367*cdf0e10cSrcweir sal_uInt16 nNameCount = aLocalDbCol.GetCount(); 368*cdf0e10cSrcweir 369*cdf0e10cSrcweir aEdName.SetUpdateMode( sal_False ); 370*cdf0e10cSrcweir //----------------------------------------------------------- 371*cdf0e10cSrcweir aEdName.Clear(); 372*cdf0e10cSrcweir aEdAssign.SetText( EMPTY_STRING ); 373*cdf0e10cSrcweir 374*cdf0e10cSrcweir if ( nNameCount > 0 ) 375*cdf0e10cSrcweir { 376*cdf0e10cSrcweir ScDBData* pDbData = NULL; 377*cdf0e10cSrcweir String aString; 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir for ( sal_uInt16 i=0; i<nNameCount; i++ ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir pDbData = (ScDBData*)(aLocalDbCol.At( i )); 382*cdf0e10cSrcweir if ( pDbData ) 383*cdf0e10cSrcweir { 384*cdf0e10cSrcweir pDbData->GetName( aString ); 385*cdf0e10cSrcweir if ( aString != aStrNoName ) 386*cdf0e10cSrcweir aEdName.InsertEntry( aString ); 387*cdf0e10cSrcweir } 388*cdf0e10cSrcweir } 389*cdf0e10cSrcweir } 390*cdf0e10cSrcweir else 391*cdf0e10cSrcweir { 392*cdf0e10cSrcweir aBtnAdd.SetText( aStrAdd ); 393*cdf0e10cSrcweir aBtnAdd.Disable(); 394*cdf0e10cSrcweir aBtnRemove.Disable(); 395*cdf0e10cSrcweir } 396*cdf0e10cSrcweir //----------------------------------------------------------- 397*cdf0e10cSrcweir aEdName.SetUpdateMode( sal_True ); 398*cdf0e10cSrcweir aEdName.Invalidate(); 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir //------------------------------------------------------------------------ 402*cdf0e10cSrcweir 403*cdf0e10cSrcweir void ScDbNameDlg::UpdateDBData( const String& rStrName ) 404*cdf0e10cSrcweir { 405*cdf0e10cSrcweir String theArea; 406*cdf0e10cSrcweir sal_uInt16 nAt; 407*cdf0e10cSrcweir ScDBData* pData; 408*cdf0e10cSrcweir 409*cdf0e10cSrcweir aLocalDbCol.SearchName( rStrName, nAt ); 410*cdf0e10cSrcweir pData = (ScDBData*)(aLocalDbCol.At( nAt )); 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir if ( pData ) 413*cdf0e10cSrcweir { 414*cdf0e10cSrcweir SCCOL nColStart = 0; 415*cdf0e10cSrcweir SCROW nRowStart = 0; 416*cdf0e10cSrcweir SCCOL nColEnd = 0; 417*cdf0e10cSrcweir SCROW nRowEnd = 0; 418*cdf0e10cSrcweir SCTAB nTab = 0; 419*cdf0e10cSrcweir 420*cdf0e10cSrcweir pData->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd ); 421*cdf0e10cSrcweir theCurArea = ScRange( ScAddress( nColStart, nRowStart, nTab ), 422*cdf0e10cSrcweir ScAddress( nColEnd, nRowEnd, nTab ) ); 423*cdf0e10cSrcweir theCurArea.Format( theArea, ABS_DREF3D, pDoc, aAddrDetails ); 424*cdf0e10cSrcweir aEdAssign.SetText( theArea ); 425*cdf0e10cSrcweir aBtnAdd.SetText( aStrModify ); 426*cdf0e10cSrcweir aBtnHeader.Check( pData->HasHeader() ); 427*cdf0e10cSrcweir aBtnDoSize.Check( pData->IsDoSize() ); 428*cdf0e10cSrcweir aBtnKeepFmt.Check( pData->IsKeepFmt() ); 429*cdf0e10cSrcweir aBtnStripData.Check( pData->IsStripData() ); 430*cdf0e10cSrcweir SetInfoStrings( pData ); 431*cdf0e10cSrcweir } 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir aBtnAdd.SetText( aStrModify ); 434*cdf0e10cSrcweir aBtnAdd.Enable(); 435*cdf0e10cSrcweir aBtnRemove.Enable(); 436*cdf0e10cSrcweir aBtnHeader.Enable(); 437*cdf0e10cSrcweir aBtnDoSize.Enable(); 438*cdf0e10cSrcweir aBtnKeepFmt.Enable(); 439*cdf0e10cSrcweir aBtnStripData.Enable(); 440*cdf0e10cSrcweir aFTSource.Enable(); 441*cdf0e10cSrcweir aFTOperations.Enable(); 442*cdf0e10cSrcweir } 443*cdf0e10cSrcweir 444*cdf0e10cSrcweir //------------------------------------------------------------------------ 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir 447*cdf0e10cSrcweir sal_Bool ScDbNameDlg::IsRefInputMode() const 448*cdf0e10cSrcweir { 449*cdf0e10cSrcweir return bRefInputMode; 450*cdf0e10cSrcweir } 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir //------------------------------------------------------------------------ 453*cdf0e10cSrcweir // Handler: 454*cdf0e10cSrcweir // ======== 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir IMPL_LINK( ScDbNameDlg, OkBtnHdl, void *, EMPTYARG ) 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir AddBtnHdl( 0 ); 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir // Der View die Aenderungen und die Remove-Liste uebergeben: 461*cdf0e10cSrcweir // beide werden nur als Referenz uebergeben, so dass an dieser 462*cdf0e10cSrcweir // Stelle keine Speicherleichen entstehen koennen: 463*cdf0e10cSrcweir if ( pViewData ) 464*cdf0e10cSrcweir pViewData->GetView()-> 465*cdf0e10cSrcweir NotifyCloseDbNameDlg( aLocalDbCol, aRemoveList ); 466*cdf0e10cSrcweir 467*cdf0e10cSrcweir Close(); 468*cdf0e10cSrcweir return 0; 469*cdf0e10cSrcweir } 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir //------------------------------------------------------------------------ 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir IMPL_LINK_INLINE_START( ScDbNameDlg, CancelBtnHdl, void *, EMPTYARG ) 474*cdf0e10cSrcweir { 475*cdf0e10cSrcweir Close(); 476*cdf0e10cSrcweir return 0; 477*cdf0e10cSrcweir } 478*cdf0e10cSrcweir IMPL_LINK_INLINE_END( ScDbNameDlg, CancelBtnHdl, void *, EMPTYARG ) 479*cdf0e10cSrcweir 480*cdf0e10cSrcweir //------------------------------------------------------------------------ 481*cdf0e10cSrcweir 482*cdf0e10cSrcweir IMPL_LINK( ScDbNameDlg, AddBtnHdl, void *, EMPTYARG ) 483*cdf0e10cSrcweir { 484*cdf0e10cSrcweir String aNewName = aEdName.GetText(); 485*cdf0e10cSrcweir String aNewArea = aEdAssign.GetText(); 486*cdf0e10cSrcweir 487*cdf0e10cSrcweir aNewName.EraseLeadingChars( ' ' ); 488*cdf0e10cSrcweir aNewName.EraseTrailingChars( ' ' ); 489*cdf0e10cSrcweir 490*cdf0e10cSrcweir if ( aNewName.Len() > 0 && aNewArea.Len() > 0 ) 491*cdf0e10cSrcweir { 492*cdf0e10cSrcweir if ( ScRangeData::IsNameValid( aNewName, pDoc ) ) 493*cdf0e10cSrcweir { 494*cdf0e10cSrcweir // weil jetzt editiert werden kann, muss erst geparst werden 495*cdf0e10cSrcweir ScRange aTmpRange; 496*cdf0e10cSrcweir String aText = aEdAssign.GetText(); 497*cdf0e10cSrcweir if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID ) 498*cdf0e10cSrcweir { 499*cdf0e10cSrcweir theCurArea = aTmpRange; 500*cdf0e10cSrcweir ScAddress aStart = theCurArea.aStart; 501*cdf0e10cSrcweir ScAddress aEnd = theCurArea.aEnd; 502*cdf0e10cSrcweir 503*cdf0e10cSrcweir ScDBData* pOldEntry = NULL; 504*cdf0e10cSrcweir sal_uInt16 nFoundAt = 0; 505*cdf0e10cSrcweir if ( aLocalDbCol.SearchName( aNewName, nFoundAt ) ) 506*cdf0e10cSrcweir pOldEntry = aLocalDbCol[nFoundAt]; 507*cdf0e10cSrcweir if (pOldEntry) 508*cdf0e10cSrcweir { 509*cdf0e10cSrcweir // Bereich veraendern 510*cdf0e10cSrcweir 511*cdf0e10cSrcweir pOldEntry->MoveTo( aStart.Tab(), aStart.Col(), aStart.Row(), 512*cdf0e10cSrcweir aEnd.Col(), aEnd.Row() ); 513*cdf0e10cSrcweir pOldEntry->SetByRow( sal_True ); 514*cdf0e10cSrcweir pOldEntry->SetHeader( aBtnHeader.IsChecked() ); 515*cdf0e10cSrcweir pOldEntry->SetDoSize( aBtnDoSize.IsChecked() ); 516*cdf0e10cSrcweir pOldEntry->SetKeepFmt( aBtnKeepFmt.IsChecked() ); 517*cdf0e10cSrcweir pOldEntry->SetStripData( aBtnStripData.IsChecked() ); 518*cdf0e10cSrcweir } 519*cdf0e10cSrcweir else 520*cdf0e10cSrcweir { 521*cdf0e10cSrcweir // neuen Bereich einfuegen 522*cdf0e10cSrcweir 523*cdf0e10cSrcweir ScDBData* pNewEntry = new ScDBData( aNewName, aStart.Tab(), 524*cdf0e10cSrcweir aStart.Col(), aStart.Row(), 525*cdf0e10cSrcweir aEnd.Col(), aEnd.Row(), 526*cdf0e10cSrcweir sal_True, aBtnHeader.IsChecked() ); 527*cdf0e10cSrcweir pNewEntry->SetDoSize( aBtnDoSize.IsChecked() ); 528*cdf0e10cSrcweir pNewEntry->SetKeepFmt( aBtnKeepFmt.IsChecked() ); 529*cdf0e10cSrcweir pNewEntry->SetStripData( aBtnStripData.IsChecked() ); 530*cdf0e10cSrcweir 531*cdf0e10cSrcweir if ( !aLocalDbCol.Insert( pNewEntry ) ) 532*cdf0e10cSrcweir delete pNewEntry; 533*cdf0e10cSrcweir } 534*cdf0e10cSrcweir 535*cdf0e10cSrcweir UpdateNames(); 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir aEdName.SetText( EMPTY_STRING ); 538*cdf0e10cSrcweir aEdName.GrabFocus(); 539*cdf0e10cSrcweir aBtnAdd.SetText( aStrAdd ); 540*cdf0e10cSrcweir aBtnAdd.Disable(); 541*cdf0e10cSrcweir aBtnRemove.Disable(); 542*cdf0e10cSrcweir aEdAssign.SetText( EMPTY_STRING ); 543*cdf0e10cSrcweir aBtnHeader.Check( sal_True ); // Default: mit Spaltenkoepfen 544*cdf0e10cSrcweir aBtnDoSize.Check( sal_False ); 545*cdf0e10cSrcweir aBtnKeepFmt.Check( sal_False ); 546*cdf0e10cSrcweir aBtnStripData.Check( sal_False ); 547*cdf0e10cSrcweir SetInfoStrings( NULL ); // leer 548*cdf0e10cSrcweir theCurArea = ScRange(); 549*cdf0e10cSrcweir bSaved=sal_True; 550*cdf0e10cSrcweir pSaveObj->Save(); 551*cdf0e10cSrcweir NameModifyHdl( 0 ); 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir else 554*cdf0e10cSrcweir { 555*cdf0e10cSrcweir ERRORBOX( aStrInvalid ); 556*cdf0e10cSrcweir aEdAssign.SetSelection( Selection( 0, SELECTION_MAX ) ); 557*cdf0e10cSrcweir aEdAssign.GrabFocus(); 558*cdf0e10cSrcweir } 559*cdf0e10cSrcweir } 560*cdf0e10cSrcweir else 561*cdf0e10cSrcweir { 562*cdf0e10cSrcweir ERRORBOX( ScGlobal::GetRscString(STR_INVALIDNAME) ); 563*cdf0e10cSrcweir aEdName.SetSelection( Selection( 0, SELECTION_MAX ) ); 564*cdf0e10cSrcweir aEdName.GrabFocus(); 565*cdf0e10cSrcweir } 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir return 0; 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir //------------------------------------------------------------------------ 571*cdf0e10cSrcweir 572*cdf0e10cSrcweir IMPL_LINK( ScDbNameDlg, RemoveBtnHdl, void *, EMPTYARG ) 573*cdf0e10cSrcweir { 574*cdf0e10cSrcweir sal_uInt16 nRemoveAt = 0; 575*cdf0e10cSrcweir const String aStrEntry = aEdName.GetText(); 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir if ( aLocalDbCol.SearchName( aStrEntry, nRemoveAt ) ) 578*cdf0e10cSrcweir { 579*cdf0e10cSrcweir String aStrDelMsg = ScGlobal::GetRscString( STR_QUERY_DELENTRY ); 580*cdf0e10cSrcweir String aMsg = aStrDelMsg.GetToken( 0, '#' ); 581*cdf0e10cSrcweir 582*cdf0e10cSrcweir aMsg += aStrEntry; 583*cdf0e10cSrcweir aMsg += aStrDelMsg.GetToken( 1, '#' ); 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir if ( RET_YES == QUERYBOX(aMsg) ) 586*cdf0e10cSrcweir { 587*cdf0e10cSrcweir ScDBData* pEntry = (ScDBData*)aLocalDbCol.At(nRemoveAt); 588*cdf0e10cSrcweir 589*cdf0e10cSrcweir if ( pEntry ) 590*cdf0e10cSrcweir { 591*cdf0e10cSrcweir SCTAB nTab; 592*cdf0e10cSrcweir SCCOL nColStart, nColEnd; 593*cdf0e10cSrcweir SCROW nRowStart, nRowEnd; 594*cdf0e10cSrcweir pEntry->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd ); 595*cdf0e10cSrcweir aRemoveList.Insert( 596*cdf0e10cSrcweir new ScRange( ScAddress( nColStart, nRowStart, nTab ), 597*cdf0e10cSrcweir ScAddress( nColEnd, nRowEnd, nTab ) ) ); 598*cdf0e10cSrcweir } 599*cdf0e10cSrcweir aLocalDbCol.AtFree( nRemoveAt ); 600*cdf0e10cSrcweir 601*cdf0e10cSrcweir UpdateNames(); 602*cdf0e10cSrcweir 603*cdf0e10cSrcweir aEdName.SetText( EMPTY_STRING ); 604*cdf0e10cSrcweir aEdName.GrabFocus(); 605*cdf0e10cSrcweir aBtnAdd.SetText( aStrAdd ); 606*cdf0e10cSrcweir aBtnAdd.Disable(); 607*cdf0e10cSrcweir aBtnRemove.Disable(); 608*cdf0e10cSrcweir aEdAssign.SetText( EMPTY_STRING ); 609*cdf0e10cSrcweir theCurArea = ScRange(); 610*cdf0e10cSrcweir aBtnHeader.Check( sal_True ); // Default: mit Spaltenkoepfen 611*cdf0e10cSrcweir aBtnDoSize.Check( sal_False ); 612*cdf0e10cSrcweir aBtnKeepFmt.Check( sal_False ); 613*cdf0e10cSrcweir aBtnStripData.Check( sal_False ); 614*cdf0e10cSrcweir SetInfoStrings( NULL ); // leer 615*cdf0e10cSrcweir bSaved=sal_False; 616*cdf0e10cSrcweir pSaveObj->Restore(); 617*cdf0e10cSrcweir NameModifyHdl( 0 ); 618*cdf0e10cSrcweir } 619*cdf0e10cSrcweir } 620*cdf0e10cSrcweir return 0; 621*cdf0e10cSrcweir } 622*cdf0e10cSrcweir 623*cdf0e10cSrcweir //------------------------------------------------------------------------ 624*cdf0e10cSrcweir 625*cdf0e10cSrcweir IMPL_LINK( ScDbNameDlg, NameModifyHdl, void *, EMPTYARG ) 626*cdf0e10cSrcweir { 627*cdf0e10cSrcweir String theName = aEdName.GetText(); 628*cdf0e10cSrcweir sal_Bool bNameFound = (COMBOBOX_ENTRY_NOTFOUND 629*cdf0e10cSrcweir != aEdName.GetEntryPos( theName )); 630*cdf0e10cSrcweir 631*cdf0e10cSrcweir if ( theName.Len() == 0 ) 632*cdf0e10cSrcweir { 633*cdf0e10cSrcweir if ( aBtnAdd.GetText() != aStrAdd ) 634*cdf0e10cSrcweir aBtnAdd.SetText( aStrAdd ); 635*cdf0e10cSrcweir aBtnAdd .Disable(); 636*cdf0e10cSrcweir aBtnRemove .Disable(); 637*cdf0e10cSrcweir aFlAssign .Disable(); 638*cdf0e10cSrcweir aBtnHeader .Disable(); 639*cdf0e10cSrcweir aBtnDoSize .Disable(); 640*cdf0e10cSrcweir aBtnKeepFmt .Disable(); 641*cdf0e10cSrcweir aBtnStripData.Disable(); 642*cdf0e10cSrcweir aFTSource .Disable(); 643*cdf0e10cSrcweir aFTOperations.Disable(); 644*cdf0e10cSrcweir aEdAssign .Disable(); 645*cdf0e10cSrcweir aRbAssign .Disable(); 646*cdf0e10cSrcweir //bSaved=sal_False; 647*cdf0e10cSrcweir //pSaveObj->Restore(); 648*cdf0e10cSrcweir //@BugID 54702 Enablen/Disablen nur noch in Basisklasse 649*cdf0e10cSrcweir //SFX_APPWINDOW->Disable(sal_False); //! allgemeine Methode im ScAnyRefDlg 650*cdf0e10cSrcweir bRefInputMode = sal_False; 651*cdf0e10cSrcweir } 652*cdf0e10cSrcweir else 653*cdf0e10cSrcweir { 654*cdf0e10cSrcweir if ( bNameFound ) 655*cdf0e10cSrcweir { 656*cdf0e10cSrcweir if ( aBtnAdd.GetText() != aStrModify ) 657*cdf0e10cSrcweir aBtnAdd.SetText( aStrModify ); 658*cdf0e10cSrcweir 659*cdf0e10cSrcweir if(!bSaved) 660*cdf0e10cSrcweir { 661*cdf0e10cSrcweir bSaved=sal_True; 662*cdf0e10cSrcweir pSaveObj->Save(); 663*cdf0e10cSrcweir } 664*cdf0e10cSrcweir UpdateDBData( theName ); 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir else 667*cdf0e10cSrcweir { 668*cdf0e10cSrcweir if ( aBtnAdd.GetText() != aStrAdd ) 669*cdf0e10cSrcweir aBtnAdd.SetText( aStrAdd ); 670*cdf0e10cSrcweir 671*cdf0e10cSrcweir bSaved=sal_False; 672*cdf0e10cSrcweir pSaveObj->Restore(); 673*cdf0e10cSrcweir 674*cdf0e10cSrcweir if ( aEdAssign.GetText().Len() > 0 ) 675*cdf0e10cSrcweir { 676*cdf0e10cSrcweir aBtnAdd.Enable(); 677*cdf0e10cSrcweir aBtnHeader.Enable(); 678*cdf0e10cSrcweir aBtnDoSize.Enable(); 679*cdf0e10cSrcweir aBtnKeepFmt.Enable(); 680*cdf0e10cSrcweir aBtnStripData.Enable(); 681*cdf0e10cSrcweir aFTSource.Enable(); 682*cdf0e10cSrcweir aFTOperations.Enable(); 683*cdf0e10cSrcweir } 684*cdf0e10cSrcweir else 685*cdf0e10cSrcweir { 686*cdf0e10cSrcweir aBtnAdd.Disable(); 687*cdf0e10cSrcweir aBtnHeader.Disable(); 688*cdf0e10cSrcweir aBtnDoSize.Disable(); 689*cdf0e10cSrcweir aBtnKeepFmt.Disable(); 690*cdf0e10cSrcweir aBtnStripData.Disable(); 691*cdf0e10cSrcweir aFTSource.Disable(); 692*cdf0e10cSrcweir aFTOperations.Disable(); 693*cdf0e10cSrcweir } 694*cdf0e10cSrcweir aBtnRemove.Disable(); 695*cdf0e10cSrcweir } 696*cdf0e10cSrcweir 697*cdf0e10cSrcweir aFlAssign.Enable(); 698*cdf0e10cSrcweir aEdAssign.Enable(); 699*cdf0e10cSrcweir aRbAssign.Enable(); 700*cdf0e10cSrcweir 701*cdf0e10cSrcweir //@BugID 54702 Enablen/Disablen nur noch in Basisklasse 702*cdf0e10cSrcweir //SFX_APPWINDOW->Enable(); 703*cdf0e10cSrcweir bRefInputMode = sal_True; 704*cdf0e10cSrcweir } 705*cdf0e10cSrcweir return 0; 706*cdf0e10cSrcweir } 707*cdf0e10cSrcweir 708*cdf0e10cSrcweir //------------------------------------------------------------------------ 709*cdf0e10cSrcweir 710*cdf0e10cSrcweir IMPL_LINK( ScDbNameDlg, AssModifyHdl, void *, EMPTYARG ) 711*cdf0e10cSrcweir { 712*cdf0e10cSrcweir // hier parsen fuer Save() etc. 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir ScRange aTmpRange; 715*cdf0e10cSrcweir String aText = aEdAssign.GetText(); 716*cdf0e10cSrcweir if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID ) 717*cdf0e10cSrcweir theCurArea = aTmpRange; 718*cdf0e10cSrcweir 719*cdf0e10cSrcweir return 0; 720*cdf0e10cSrcweir } 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir 723