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