xref: /trunk/main/sc/source/ui/dbgui/dbnamdlg.cxx (revision dfbf5fd71e5d6a24d1fe5b6874b682c628cd37aa)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sc.hxx"
26 
27 // System - Includes ---------------------------------------------------------
28 
29 
30 
31 // INCLUDE -------------------------------------------------------------------
32 
33 #include <vcl/msgbox.hxx>
34 
35 #include "reffact.hxx"
36 #include "document.hxx"
37 #include "scresid.hxx"
38 #include "globstr.hrc"
39 #include "dbnamdlg.hrc"
40 #include "rangenam.hxx"     // IsNameValid
41 
42 #define _DBNAMDLG_CXX
43 #include "dbnamdlg.hxx"
44 #undef _DBNAMDLG_CXX
45 
46 
47 //============================================================================
48 
49 #define ABS_SREF          SCA_VALID \
50                         | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE
51 #define ABS_DREF          ABS_SREF \
52                         | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE
53 #define ABS_SREF3D      ABS_SREF | SCA_TAB_3D
54 #define ABS_DREF3D      ABS_DREF | SCA_TAB_3D
55 
56 //----------------------------------------------------------------------------
57 
58 class DBSaveData;
59 
60 static DBSaveData* pSaveObj = NULL;
61 
62 #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute()
63 #define QUERYBOX(m) QueryBox(this,WinBits(WB_YES_NO|WB_DEF_YES),m).Execute()
64 
65 //============================================================================
66 //  class DBSaveData
67 
68 class DBSaveData
69 {
70 public:
71     DBSaveData( Edit& rEd, CheckBox& rHdr, CheckBox& rSize, CheckBox& rFmt,
72                             CheckBox& rStrip, ScRange& rArea )
73         : rEdAssign(rEd),
74           rBtnHeader(rHdr), rBtnSize(rSize), rBtnFormat(rFmt), rBtnStrip(rStrip),
75           rCurArea(rArea),
76           bHeader(sal_False), bSize(sal_False), bFormat(sal_False), bDirty(sal_False) {}
77     void Save();
78     void Restore();
79 
80 private:
81     Edit&       rEdAssign;
82     CheckBox&   rBtnHeader;
83     CheckBox&   rBtnSize;
84     CheckBox&   rBtnFormat;
85     CheckBox&   rBtnStrip;
86     ScRange&    rCurArea;
87     String      aStr;
88     ScRange     aArea;
89     sal_Bool        bHeader:1;
90     sal_Bool        bSize:1;
91     sal_Bool        bFormat:1;
92     sal_Bool        bStrip:1;
93     sal_Bool        bDirty:1;
94 };
95 
96 
97 
98 //----------------------------------------------------------------------------
99 
100 void DBSaveData::Save()
101 {
102     aArea   = rCurArea;
103     aStr    = rEdAssign.GetText();
104     bHeader = rBtnHeader.IsChecked();
105     bSize   = rBtnSize.IsChecked();
106     bFormat = rBtnFormat.IsChecked();
107     bStrip  = rBtnStrip.IsChecked();
108     bDirty  = sal_True;
109 }
110 
111 
112 //----------------------------------------------------------------------------
113 
114 void DBSaveData::Restore()
115 {
116     if ( bDirty )
117     {
118         rCurArea = aArea;
119         rEdAssign.SetText( aStr );
120         rBtnHeader.Check ( bHeader );
121         rBtnSize.Check   ( bSize );
122         rBtnFormat.Check ( bFormat );
123         rBtnStrip.Check  ( bStrip );
124         bDirty = sal_False;
125     }
126 }
127 
128 
129 //============================================================================
130 //  class ScDbNameDlg
131 
132 //----------------------------------------------------------------------------
133 
134 ScDbNameDlg::ScDbNameDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
135                           ScViewData*   ptrViewData )
136 
137     :   ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_DBNAMES ),
138         //
139         aFlName         ( this, ScResId( FL_NAME ) ),
140         aEdName         ( this, ScResId( ED_NAME ) ),
141 
142         aFlAssign       ( this, ScResId( FL_ASSIGN ) ),
143         aEdAssign       ( this, this, ScResId( ED_DBAREA ) ),
144         aRbAssign       ( this, ScResId( RB_DBAREA ), &aEdAssign, this ),
145 
146         aFlOptions      ( this, ScResId( FL_OPTIONS ) ),
147         aBtnHeader      ( this, ScResId( BTN_HEADER ) ),
148         aBtnDoSize      ( this, ScResId( BTN_SIZE ) ),
149         aBtnKeepFmt     ( this, ScResId( BTN_FORMAT ) ),
150         aBtnStripData   ( this, ScResId( BTN_STRIPDATA ) ),
151         aFTSource       ( this, ScResId( FT_SOURCE ) ),
152         aFTOperations   ( this, ScResId( FT_OPERATIONS ) ),
153 
154         aBtnOk          ( this, ScResId( BTN_OK ) ),
155         aBtnCancel      ( this, ScResId( BTN_CANCEL ) ),
156         aBtnHelp        ( this, ScResId( BTN_HELP ) ),
157         aBtnAdd         ( this, ScResId( BTN_ADD ) ),
158         aBtnRemove      ( this, ScResId( BTN_REMOVE ) ),
159         aBtnMore        ( this, ScResId( BTN_MORE ) ),
160 
161         aStrAdd         ( ScResId( STR_ADD ) ),
162         aStrModify      ( ScResId( STR_MODIFY ) ),
163         aStrInvalid     ( ScResId( STR_DB_INVALID ) ),
164         //
165         pViewData       ( ptrViewData ),
166         pDoc            ( ptrViewData->GetDocument() ),
167         bRefInputMode   ( sal_False ),
168         aAddrDetails    ( pDoc->GetAddressConvention(), 0, 0 ),
169         aLocalDbCol     ( *(pDoc->GetDBCollection()) )
170 {
171     // WB_NOLABEL can't be set in resource...
172     aFTSource.SetStyle( aFTSource.GetStyle() | WB_NOLABEL );
173     aFTOperations.SetStyle( aFTOperations.GetStyle() | WB_NOLABEL );
174 
175     //  damit die Strings in der Resource bei den FixedTexten bleiben koennen:
176     aStrSource      = aFTSource.GetText();
177     aStrOperations  = aFTOperations.GetText();
178 
179     pSaveObj = new DBSaveData( aEdAssign, aBtnHeader,
180                         aBtnDoSize, aBtnKeepFmt, aBtnStripData, theCurArea );
181     Init();
182     FreeResource();
183     aRbAssign.SetAccessibleRelationMemberOf(&aFlAssign);
184 }
185 
186 
187 //----------------------------------------------------------------------------
188 
189 __EXPORT ScDbNameDlg::~ScDbNameDlg()
190 {
191     DELETEZ( pSaveObj );
192 
193     ScRange* pEntry = (ScRange*)aRemoveList.First();
194     while ( pEntry )
195     {
196         aRemoveList.Remove( pEntry );
197         delete pEntry;
198         pEntry = (ScRange*)aRemoveList.Next();
199     }
200 }
201 
202 
203 //----------------------------------------------------------------------------
204 
205 void ScDbNameDlg::Init()
206 {
207     aBtnHeader.Check( sal_True );       // Default: mit Spaltenkoepfen
208 
209     aBtnMore.AddWindow( &aFlOptions );
210     aBtnMore.AddWindow( &aBtnHeader );
211     aBtnMore.AddWindow( &aBtnDoSize );
212     aBtnMore.AddWindow( &aBtnKeepFmt );
213     aBtnMore.AddWindow( &aBtnStripData );
214     aBtnMore.AddWindow( &aFTSource );
215     aBtnMore.AddWindow( &aFTOperations );
216 
217     String  theAreaStr;
218     SCCOL   nStartCol   = 0;
219     SCROW   nStartRow   = 0;
220     SCTAB   nStartTab   = 0;
221     SCCOL   nEndCol     = 0;
222     SCROW   nEndRow     = 0;
223     SCTAB   nEndTab     = 0;
224 
225     aBtnOk.SetClickHdl      ( LINK( this, ScDbNameDlg, OkBtnHdl ) );
226     aBtnCancel.SetClickHdl  ( LINK( this, ScDbNameDlg, CancelBtnHdl ) );
227     aBtnAdd.SetClickHdl     ( LINK( this, ScDbNameDlg, AddBtnHdl ) );
228     aBtnRemove.SetClickHdl  ( LINK( this, ScDbNameDlg, RemoveBtnHdl ) );
229     aEdName.SetModifyHdl    ( LINK( this, ScDbNameDlg, NameModifyHdl ) );
230     aEdAssign.SetModifyHdl  ( LINK( this, ScDbNameDlg, AssModifyHdl ) );
231     UpdateNames();
232 
233     if ( pViewData && pDoc )
234     {
235         ScDBCollection* pDBColl = pDoc->GetDBCollection();
236         ScDBData*       pDBData = NULL;
237 
238         pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab,
239             nEndCol,     nEndRow,  nEndTab );
240 
241         theCurArea = ScRange( ScAddress( nStartCol, nStartRow, nStartTab ),
242             ScAddress( nEndCol,   nEndRow,   nEndTab ) );
243 
244         theCurArea.Format( theAreaStr, ABS_DREF3D, pDoc, aAddrDetails );
245 
246         if ( pDBColl )
247         {
248             // Feststellen, ob definierter DB-Bereich markiert wurde:
249             pDBData = pDBColl->GetDBAtCursor( nStartCol, nStartRow, nStartTab, sal_True );
250             if ( pDBData )
251             {
252                 String      theDbName;
253                 ScAddress&  rStart = theCurArea.aStart;
254                 ScAddress&  rEnd   = theCurArea.aEnd;
255                 SCCOL nCol1;
256                 SCCOL  nCol2;
257                 SCROW  nRow1;
258                 SCROW  nRow2;
259                 SCTAB  nTab;
260 
261                 pDBData->GetArea( nTab, nCol1, nRow1, nCol2, nRow2 );
262 
263                 if (   (rStart.Tab() == nTab)
264                     && (rStart.Col() == nCol1) && (rStart.Row() == nRow1)
265                     && (rEnd.Col()   == nCol2) && (rEnd.Row()   == nRow2 ) )
266                 {
267                     pDBData->GetName( theDbName );
268                     if ( !pDBData->IsInternalUnnamed()
269                          && !pDBData->IsInternalForAutoFilter() )
270                     {
271                         aEdName.SetText( theDbName );
272                     }
273                     else
274                     {
275                         aEdName.SetText( EMPTY_STRING );
276                     }
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 ( !pDbData->IsInternalUnnamed()
386                      && !pDbData->IsInternalForAutoFilter() )
387                     aEdName.InsertEntry( aString );
388             }
389         }
390     }
391     else
392     {
393         aBtnAdd.SetText( aStrAdd );
394         aBtnAdd.Disable();
395         aBtnRemove.Disable();
396     }
397     //-----------------------------------------------------------
398     aEdName.SetUpdateMode( sal_True );
399     aEdName.Invalidate();
400 }
401 
402 //------------------------------------------------------------------------
403 
404 void ScDbNameDlg::UpdateDBData( const String& rStrName )
405 {
406     String      theArea;
407     sal_uInt16      nAt;
408     ScDBData*   pData;
409 
410     aLocalDbCol.SearchName( rStrName, nAt );
411     pData = (ScDBData*)(aLocalDbCol.At( nAt ));
412 
413     if ( pData )
414     {
415         SCCOL nColStart = 0;
416         SCROW nRowStart = 0;
417         SCCOL nColEnd    = 0;
418         SCROW nRowEnd    = 0;
419         SCTAB nTab       = 0;
420 
421         pData->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
422         theCurArea = ScRange( ScAddress( nColStart, nRowStart, nTab ),
423                               ScAddress( nColEnd,   nRowEnd,   nTab ) );
424         theCurArea.Format( theArea, ABS_DREF3D, pDoc, aAddrDetails );
425         aEdAssign.SetText( theArea );
426         aBtnAdd.SetText( aStrModify );
427         aBtnHeader.Check( pData->HasHeader() );
428         aBtnDoSize.Check( pData->IsDoSize() );
429         aBtnKeepFmt.Check( pData->IsKeepFmt() );
430         aBtnStripData.Check( pData->IsStripData() );
431         SetInfoStrings( pData );
432     }
433 
434     aBtnAdd.SetText( aStrModify );
435     aBtnAdd.Enable();
436     aBtnRemove.Enable();
437     aBtnHeader.Enable();
438     aBtnDoSize.Enable();
439     aBtnKeepFmt.Enable();
440     aBtnStripData.Enable();
441     aFTSource.Enable();
442     aFTOperations.Enable();
443 }
444 
445 //------------------------------------------------------------------------
446 
447 
448 sal_Bool ScDbNameDlg::IsRefInputMode() const
449 {
450     return bRefInputMode;
451 }
452 
453 //------------------------------------------------------------------------
454 // Handler:
455 // ========
456 
457 IMPL_LINK( ScDbNameDlg, OkBtnHdl, void *, EMPTYARG )
458 {
459     AddBtnHdl( 0 );
460 
461     // Der View die Aenderungen und die Remove-Liste uebergeben:
462     // beide werden nur als Referenz uebergeben, so dass an dieser
463     // Stelle keine Speicherleichen entstehen koennen:
464     if ( pViewData )
465         pViewData->GetView()->
466             NotifyCloseDbNameDlg( aLocalDbCol, aRemoveList );
467 
468     Close();
469     return 0;
470 }
471 
472 //------------------------------------------------------------------------
473 
474 IMPL_LINK_INLINE_START( ScDbNameDlg, CancelBtnHdl, void *, EMPTYARG )
475 {
476     Close();
477     return 0;
478 }
479 IMPL_LINK_INLINE_END( ScDbNameDlg, CancelBtnHdl, void *, EMPTYARG )
480 
481 //------------------------------------------------------------------------
482 
483 IMPL_LINK( ScDbNameDlg, AddBtnHdl, void *, EMPTYARG )
484 {
485     String  aNewName = aEdName.GetText();
486     String  aNewArea = aEdAssign.GetText();
487 
488     aNewName.EraseLeadingChars( ' ' );
489     aNewName.EraseTrailingChars( ' ' );
490 
491     if ( aNewName.Len() > 0 && aNewArea.Len() > 0 )
492     {
493         if ( ScRangeData::IsNameValid( aNewName, pDoc ) )
494         {
495             //  weil jetzt editiert werden kann, muss erst geparst werden
496             ScRange aTmpRange;
497             String aText = aEdAssign.GetText();
498             if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID )
499             {
500                 theCurArea = aTmpRange;
501                 ScAddress aStart = theCurArea.aStart;
502                 ScAddress aEnd   = theCurArea.aEnd;
503 
504                 ScDBData* pOldEntry = NULL;
505                 sal_uInt16 nFoundAt = 0;
506                 if ( aLocalDbCol.SearchName( aNewName, nFoundAt ) )
507                     pOldEntry = aLocalDbCol[nFoundAt];
508                 if (pOldEntry)
509                 {
510                     //  Bereich veraendern
511 
512                     pOldEntry->MoveTo( aStart.Tab(), aStart.Col(), aStart.Row(),
513                                                         aEnd.Col(), aEnd.Row() );
514                     pOldEntry->SetByRow( sal_True );
515                     pOldEntry->SetHeader( aBtnHeader.IsChecked() );
516                     pOldEntry->SetDoSize( aBtnDoSize.IsChecked() );
517                     pOldEntry->SetKeepFmt( aBtnKeepFmt.IsChecked() );
518                     pOldEntry->SetStripData( aBtnStripData.IsChecked() );
519                 }
520                 else
521                 {
522                     //  neuen Bereich einfuegen
523 
524                     ScDBData* pNewEntry = new ScDBData( aNewName, aStart.Tab(),
525                                                         aStart.Col(), aStart.Row(),
526                                                         aEnd.Col(), aEnd.Row(),
527                                                         sal_True, aBtnHeader.IsChecked() );
528                     pNewEntry->SetDoSize( aBtnDoSize.IsChecked() );
529                     pNewEntry->SetKeepFmt( aBtnKeepFmt.IsChecked() );
530                     pNewEntry->SetStripData( aBtnStripData.IsChecked() );
531 
532                     if ( !aLocalDbCol.Insert( pNewEntry ) )
533                         delete pNewEntry;
534                 }
535 
536                 UpdateNames();
537 
538                 aEdName.SetText( EMPTY_STRING );
539                 aEdName.GrabFocus();
540                 aBtnAdd.SetText( aStrAdd );
541                 aBtnAdd.Disable();
542                 aBtnRemove.Disable();
543                 aEdAssign.SetText( EMPTY_STRING );
544                 aBtnHeader.Check( sal_True );       // Default: mit Spaltenkoepfen
545                 aBtnDoSize.Check( sal_False );
546                 aBtnKeepFmt.Check( sal_False );
547                 aBtnStripData.Check( sal_False );
548                 SetInfoStrings( NULL );     // leer
549                 theCurArea = ScRange();
550                 bSaved=sal_True;
551                 pSaveObj->Save();
552                 NameModifyHdl( 0 );
553             }
554             else
555             {
556                 ERRORBOX( aStrInvalid );
557                 aEdAssign.SetSelection( Selection( 0, SELECTION_MAX ) );
558                 aEdAssign.GrabFocus();
559             }
560         }
561         else
562         {
563             ERRORBOX( ScGlobal::GetRscString(STR_INVALIDNAME) );
564             aEdName.SetSelection( Selection( 0, SELECTION_MAX ) );
565             aEdName.GrabFocus();
566         }
567     }
568     return 0;
569 }
570 
571 //------------------------------------------------------------------------
572 
573 IMPL_LINK( ScDbNameDlg, RemoveBtnHdl, void *, EMPTYARG )
574 {
575     sal_uInt16       nRemoveAt = 0;
576     const String aStrEntry = aEdName.GetText();
577 
578     if ( aLocalDbCol.SearchName( aStrEntry, nRemoveAt ) )
579     {
580         String aStrDelMsg = ScGlobal::GetRscString( STR_QUERY_DELENTRY );
581         String aMsg       = aStrDelMsg.GetToken( 0, '#' );
582 
583         aMsg += aStrEntry;
584         aMsg += aStrDelMsg.GetToken( 1, '#' );
585 
586         if ( RET_YES == QUERYBOX(aMsg) )
587         {
588             ScDBData* pEntry = (ScDBData*)aLocalDbCol.At(nRemoveAt);
589 
590             if ( pEntry )
591             {
592                 SCTAB nTab;
593                 SCCOL nColStart, nColEnd;
594                 SCROW nRowStart, nRowEnd;
595                 pEntry->GetArea( nTab, nColStart, nRowStart, nColEnd, nRowEnd );
596                 aRemoveList.Insert(
597                     new ScRange( ScAddress( nColStart, nRowStart, nTab ),
598                                  ScAddress( nColEnd,   nRowEnd,   nTab ) ) );
599             }
600             aLocalDbCol.AtFree( nRemoveAt );
601 
602             UpdateNames();
603 
604             aEdName.SetText( EMPTY_STRING );
605             aEdName.GrabFocus();
606             aBtnAdd.SetText( aStrAdd );
607             aBtnAdd.Disable();
608             aBtnRemove.Disable();
609             aEdAssign.SetText( EMPTY_STRING );
610             theCurArea = ScRange();
611             aBtnHeader.Check( sal_True );       // Default: mit Spaltenkoepfen
612             aBtnDoSize.Check( sal_False );
613             aBtnKeepFmt.Check( sal_False );
614             aBtnStripData.Check( sal_False );
615             SetInfoStrings( NULL );     // leer
616             bSaved=sal_False;
617             pSaveObj->Restore();
618             NameModifyHdl( 0 );
619         }
620     }
621     return 0;
622 }
623 
624 //------------------------------------------------------------------------
625 
626 IMPL_LINK( ScDbNameDlg, NameModifyHdl, void *, EMPTYARG )
627 {
628     String  theName     = aEdName.GetText();
629     sal_Bool    bNameFound  = (COMBOBOX_ENTRY_NOTFOUND
630                            != aEdName.GetEntryPos( theName ));
631 
632     if ( theName.Len() == 0 )
633     {
634         if ( aBtnAdd.GetText() != aStrAdd )
635             aBtnAdd.SetText( aStrAdd );
636         aBtnAdd     .Disable();
637         aBtnRemove  .Disable();
638         aFlAssign   .Disable();
639         aBtnHeader  .Disable();
640         aBtnDoSize  .Disable();
641         aBtnKeepFmt .Disable();
642         aBtnStripData.Disable();
643         aFTSource   .Disable();
644         aFTOperations.Disable();
645         aEdAssign   .Disable();
646         aRbAssign   .Disable();
647         //bSaved=sal_False;
648         //pSaveObj->Restore();
649         //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
650         //SFX_APPWINDOW->Disable(sal_False);        //! allgemeine Methode im ScAnyRefDlg
651         bRefInputMode = sal_False;
652     }
653     else
654     {
655         if ( bNameFound )
656         {
657             if ( aBtnAdd.GetText() != aStrModify )
658                 aBtnAdd.SetText( aStrModify );
659 
660             if(!bSaved)
661             {
662                 bSaved=sal_True;
663                 pSaveObj->Save();
664             }
665             UpdateDBData( theName );
666         }
667         else
668         {
669             if ( aBtnAdd.GetText() != aStrAdd )
670                 aBtnAdd.SetText( aStrAdd );
671 
672             bSaved=sal_False;
673             pSaveObj->Restore();
674 
675             if ( aEdAssign.GetText().Len() > 0 )
676             {
677                 aBtnAdd.Enable();
678                 aBtnHeader.Enable();
679                 aBtnDoSize.Enable();
680                 aBtnKeepFmt.Enable();
681                 aBtnStripData.Enable();
682                 aFTSource.Enable();
683                 aFTOperations.Enable();
684             }
685             else
686             {
687                 aBtnAdd.Disable();
688                 aBtnHeader.Disable();
689                 aBtnDoSize.Disable();
690                 aBtnKeepFmt.Disable();
691                 aBtnStripData.Disable();
692                 aFTSource.Disable();
693                 aFTOperations.Disable();
694             }
695             aBtnRemove.Disable();
696         }
697 
698         aFlAssign.Enable();
699         aEdAssign.Enable();
700         aRbAssign.Enable();
701 
702         //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
703         //SFX_APPWINDOW->Enable();
704         bRefInputMode = sal_True;
705     }
706     return 0;
707 }
708 
709 //------------------------------------------------------------------------
710 
711 IMPL_LINK( ScDbNameDlg, AssModifyHdl, void *, EMPTYARG )
712 {
713     //  hier parsen fuer Save() etc.
714 
715     ScRange aTmpRange;
716     String aText = aEdAssign.GetText();
717     if ( aTmpRange.ParseAny( aText, pDoc, aAddrDetails ) & SCA_VALID )
718         theCurArea = aTmpRange;
719 
720     return 0;
721 }
722 
723 
724