xref: /trunk/main/sc/source/ui/namedlg/namedlg.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5b3f79822SAndrew Rist  * distributed with this work for additional information
6b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17b3f79822SAndrew Rist  * specific language governing permissions and limitations
18b3f79822SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20b3f79822SAndrew Rist  *************************************************************/
21b3f79822SAndrew Rist 
22b3f79822SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir // System - Includes ---------------------------------------------------------
28cdf0e10cSrcweir 
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir // INCLUDE -------------------------------------------------------------------
32cdf0e10cSrcweir 
33cdf0e10cSrcweir #include "global.hxx"
34cdf0e10cSrcweir #include "reffact.hxx"
35cdf0e10cSrcweir #include "document.hxx"
36cdf0e10cSrcweir #include "docfunc.hxx"
37cdf0e10cSrcweir #include "scresid.hxx"
38cdf0e10cSrcweir #include "globstr.hrc"
39cdf0e10cSrcweir #include "namedlg.hrc"
40cdf0e10cSrcweir 
41cdf0e10cSrcweir #define _NAMEDLG_CXX
42cdf0e10cSrcweir #include "namedlg.hxx"
43cdf0e10cSrcweir #undef _NAMEDLG_CXX
44cdf0e10cSrcweir #include <vcl/msgbox.hxx>
45cdf0e10cSrcweir 
46cdf0e10cSrcweir 
47cdf0e10cSrcweir 
48cdf0e10cSrcweir // defines -------------------------------------------------------------------
49cdf0e10cSrcweir 
50cdf0e10cSrcweir #define ABS_SREF          SCA_VALID \
51cdf0e10cSrcweir                         | SCA_COL_ABSOLUTE | SCA_ROW_ABSOLUTE | SCA_TAB_ABSOLUTE
52cdf0e10cSrcweir #define ABS_DREF          ABS_SREF \
53cdf0e10cSrcweir                         | SCA_COL2_ABSOLUTE | SCA_ROW2_ABSOLUTE | SCA_TAB2_ABSOLUTE
54cdf0e10cSrcweir #define ABS_SREF3D      ABS_SREF | SCA_TAB_3D
55cdf0e10cSrcweir #define ABS_DREF3D      ABS_DREF | SCA_TAB_3D
56cdf0e10cSrcweir 
57*dffa72deSWang Lei const sal_uInt16  SHEETNAMEPOS = 33;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir //============================================================================
60cdf0e10cSrcweir // Hilfsklasse: Merken der aktuellen Bereichsoptionen,
61cdf0e10cSrcweir // wenn ein Name in der ComboBox gefunden wird.
62cdf0e10cSrcweir 
63cdf0e10cSrcweir struct SaveData
64cdf0e10cSrcweir {
SaveDataSaveData65cdf0e10cSrcweir     SaveData()
66cdf0e10cSrcweir         : bCriteria(sal_False),bPrintArea(sal_False),
67cdf0e10cSrcweir           bColHeader(sal_False),bRowHeader(sal_False),
68cdf0e10cSrcweir           bDirty(sal_False) {}
69cdf0e10cSrcweir 
ClearSaveData70cdf0e10cSrcweir     void Clear()
71cdf0e10cSrcweir         {
72cdf0e10cSrcweir             aStrSymbol.Erase();
73cdf0e10cSrcweir             bCriteria  = bPrintArea =
74cdf0e10cSrcweir             bColHeader = bRowHeader = sal_False;
75cdf0e10cSrcweir             bDirty = sal_True;
76cdf0e10cSrcweir         }
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     String  aStrSymbol;
79cdf0e10cSrcweir     sal_Bool    bCriteria:1;
80cdf0e10cSrcweir     sal_Bool    bPrintArea:1;
81cdf0e10cSrcweir     sal_Bool    bColHeader:1;
82cdf0e10cSrcweir     sal_Bool    bRowHeader:1;
83cdf0e10cSrcweir     sal_Bool    bDirty:1;
84cdf0e10cSrcweir };
85cdf0e10cSrcweir 
86cdf0e10cSrcweir static SaveData* pSaveObj = NULL;
87cdf0e10cSrcweir 
88cdf0e10cSrcweir #define SAVE_DATA() \
89cdf0e10cSrcweir     pSaveObj->aStrSymbol = aEdAssign.GetText();         \
90cdf0e10cSrcweir     pSaveObj->bCriteria  = aBtnCriteria.IsChecked();    \
91cdf0e10cSrcweir     pSaveObj->bPrintArea = aBtnPrintArea.IsChecked();   \
92cdf0e10cSrcweir     pSaveObj->bColHeader = aBtnColHeader.IsChecked();   \
93cdf0e10cSrcweir     pSaveObj->bRowHeader = aBtnRowHeader.IsChecked();   \
94cdf0e10cSrcweir     pSaveObj->bDirty     = sal_True;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir #define RESTORE_DATA() \
97cdf0e10cSrcweir     if ( pSaveObj->bDirty )                             \
98cdf0e10cSrcweir     {                                                   \
99cdf0e10cSrcweir         aEdAssign.SetText( pSaveObj->aStrSymbol );      \
100cdf0e10cSrcweir         aBtnCriteria.Check( pSaveObj->bCriteria );      \
101cdf0e10cSrcweir         aBtnPrintArea.Check( pSaveObj->bPrintArea );    \
102cdf0e10cSrcweir         aBtnColHeader.Check( pSaveObj->bColHeader );    \
103cdf0e10cSrcweir         aBtnRowHeader.Check( pSaveObj->bRowHeader );    \
104cdf0e10cSrcweir         pSaveObj->bDirty = sal_False;                       \
105cdf0e10cSrcweir     }
106cdf0e10cSrcweir 
107cdf0e10cSrcweir #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute();
108cdf0e10cSrcweir 
109cdf0e10cSrcweir 
110cdf0e10cSrcweir //============================================================================
111cdf0e10cSrcweir //  class ScNameDlg
112cdf0e10cSrcweir 
113cdf0e10cSrcweir //----------------------------------------------------------------------------
114cdf0e10cSrcweir 
ScNameDlg(SfxBindings * pB,SfxChildWindow * pCW,Window * pParent,ScViewData * ptrViewData,const ScAddress & aCursorPos)115cdf0e10cSrcweir ScNameDlg::ScNameDlg( SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
116cdf0e10cSrcweir                       ScViewData*       ptrViewData,
117cdf0e10cSrcweir                       const ScAddress&  aCursorPos )
118cdf0e10cSrcweir 
119cdf0e10cSrcweir     :   ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_NAMES ),
120cdf0e10cSrcweir         //
121cdf0e10cSrcweir         aFlName         ( this, ScResId( FL_NAME ) ),
122cdf0e10cSrcweir         aEdName         ( this, ScResId( ED_NAME ) ),
123*dffa72deSWang Lei         aLBNames        ( this, ScResId( LB_NAMES ) ),
124cdf0e10cSrcweir         //
125cdf0e10cSrcweir         aFlAssign       ( this, ScResId( FL_ASSIGN ) ),
126cdf0e10cSrcweir         aEdAssign       ( this, this, ScResId( ED_ASSIGN ) ),
127cdf0e10cSrcweir         aRbAssign       ( this, ScResId( RB_ASSIGN ), &aEdAssign, this ),
128cdf0e10cSrcweir         //
129cdf0e10cSrcweir         aFlType         ( this, ScResId( FL_TYPE ) ),
130cdf0e10cSrcweir         aBtnPrintArea   ( this, ScResId( BTN_PRINTAREA ) ),
131cdf0e10cSrcweir         aBtnColHeader   ( this, ScResId( BTN_COLHEADER ) ),
132cdf0e10cSrcweir         aBtnCriteria    ( this, ScResId( BTN_CRITERIA ) ),
133cdf0e10cSrcweir         aBtnRowHeader   ( this, ScResId( BTN_ROWHEADER ) ),
134cdf0e10cSrcweir         //
135cdf0e10cSrcweir         aBtnOk          ( this, ScResId( BTN_OK ) ),
136cdf0e10cSrcweir         aBtnCancel      ( this, ScResId( BTN_CANCEL ) ),
137cdf0e10cSrcweir         aBtnHelp        ( this, ScResId( BTN_HELP ) ),
138cdf0e10cSrcweir         aBtnAdd         ( this, ScResId( BTN_ADD ) ),
139cdf0e10cSrcweir         aBtnRemove      ( this, ScResId( BTN_REMOVE ) ),
140cdf0e10cSrcweir         aBtnMore        ( this, ScResId( BTN_MORE ) ),
141cdf0e10cSrcweir         //
142cdf0e10cSrcweir         bSaved          (sal_False),
143cdf0e10cSrcweir         aStrAdd         ( ScResId( STR_ADD ) ),
144cdf0e10cSrcweir         aStrModify      ( ScResId( STR_MODIFY ) ),
145cdf0e10cSrcweir         errMsgInvalidSym( ScResId( STR_INVALIDSYMBOL ) ),
146cdf0e10cSrcweir         //
147cdf0e10cSrcweir         pViewData       ( ptrViewData ),
148cdf0e10cSrcweir         pDoc            ( ptrViewData->GetDocument() ),
149cdf0e10cSrcweir         aLocalRangeName ( *(pDoc->GetRangeName()) ),
150*dffa72deSWang Lei         theCursorPos    ( aCursorPos ),  // zum Berechnen der Referenzen
151*dffa72deSWang Lei         aSelectedRangeScope(MAXTABCOUNT)
152cdf0e10cSrcweir {
153cdf0e10cSrcweir     pSaveObj = new SaveData;
154cdf0e10cSrcweir     Init();
155cdf0e10cSrcweir     FreeResource();
156cdf0e10cSrcweir 
157cdf0e10cSrcweir     aRbAssign.SetAccessibleRelationMemberOf(&aFlAssign);
158cdf0e10cSrcweir }
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 
161cdf0e10cSrcweir //----------------------------------------------------------------------------
162cdf0e10cSrcweir 
~ScNameDlg()163cdf0e10cSrcweir __EXPORT ScNameDlg::~ScNameDlg()
164cdf0e10cSrcweir {
165cdf0e10cSrcweir     DELETEZ( pSaveObj );
166cdf0e10cSrcweir }
167cdf0e10cSrcweir 
168cdf0e10cSrcweir 
169cdf0e10cSrcweir //----------------------------------------------------------------------------
170cdf0e10cSrcweir 
Init()171cdf0e10cSrcweir void __EXPORT ScNameDlg::Init()
172cdf0e10cSrcweir {
173cdf0e10cSrcweir     String  aAreaStr;
174cdf0e10cSrcweir     ScRange aRange;
175cdf0e10cSrcweir 
176cdf0e10cSrcweir     DBG_ASSERT( pViewData && pDoc, "ViewData oder Document nicht gefunden!" );
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     aBtnOk.SetClickHdl      ( LINK( this, ScNameDlg, OkBtnHdl ) );
179cdf0e10cSrcweir     aBtnCancel.SetClickHdl  ( LINK( this, ScNameDlg, CancelBtnHdl ) );
180cdf0e10cSrcweir     aBtnAdd.SetClickHdl     ( LINK( this, ScNameDlg, AddBtnHdl ) );
181cdf0e10cSrcweir     aBtnRemove.SetClickHdl  ( LINK( this, ScNameDlg, RemoveBtnHdl ) );
182cdf0e10cSrcweir     aEdAssign.SetGetFocusHdl( LINK( this, ScNameDlg, AssignGetFocusHdl ) );
183cdf0e10cSrcweir     aEdAssign.SetModifyHdl  ( LINK( this, ScNameDlg, EdModifyHdl ) );
184cdf0e10cSrcweir     aEdName.SetModifyHdl    ( LINK( this, ScNameDlg, EdModifyHdl ) );
185*dffa72deSWang Lei     aLBNames.SetSelectHdl   ( LINK( this, ScNameDlg, NameSelectHdl ) );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     aBtnCriteria .Hide();
188cdf0e10cSrcweir     aBtnPrintArea.Hide();
189cdf0e10cSrcweir     aBtnColHeader.Hide();
190cdf0e10cSrcweir     aBtnRowHeader.Hide();
191cdf0e10cSrcweir 
192cdf0e10cSrcweir     aBtnMore.AddWindow( &aFlType );
193cdf0e10cSrcweir     aBtnMore.AddWindow( &aBtnCriteria );
194cdf0e10cSrcweir     aBtnMore.AddWindow( &aBtnPrintArea );
195cdf0e10cSrcweir     aBtnMore.AddWindow( &aBtnColHeader );
196cdf0e10cSrcweir     aBtnMore.AddWindow( &aBtnRowHeader );
197cdf0e10cSrcweir 
198cdf0e10cSrcweir     UpdateNames();
199cdf0e10cSrcweir 
200cdf0e10cSrcweir     pViewData->GetSimpleArea( aRange );
201cdf0e10cSrcweir     aRange.Format( aAreaStr, ABS_DREF3D, pDoc,
202cdf0e10cSrcweir                    ScAddress::Details(pDoc->GetAddressConvention(), 0, 0) );
203cdf0e10cSrcweir 
204cdf0e10cSrcweir     theCurSel = Selection( 0, SELECTION_MAX );
205cdf0e10cSrcweir     aEdAssign.GrabFocus();
206cdf0e10cSrcweir     aEdAssign.SetText( aAreaStr );
207cdf0e10cSrcweir     aEdAssign.SetSelection( theCurSel );
208cdf0e10cSrcweir     aEdName.GrabFocus();
209cdf0e10cSrcweir 
210cdf0e10cSrcweir     aBtnAdd.Disable();
211cdf0e10cSrcweir     aBtnRemove.Disable();
212*dffa72deSWang Lei     //if ( aEdName.GetEntryCount() > 0 )
213*dffa72deSWang Lei     if ( aLBNames.GetEntryCount() > 0 )
214cdf0e10cSrcweir         aBtnAdd.SetText( aStrAdd );
215cdf0e10cSrcweir     UpdateChecks();
216cdf0e10cSrcweir     EdModifyHdl( 0 );
217cdf0e10cSrcweir 
218cdf0e10cSrcweir     bSaved=sal_True;
219cdf0e10cSrcweir     SAVE_DATA()
220cdf0e10cSrcweir 
221cdf0e10cSrcweir     //@BugID 54702
222cdf0e10cSrcweir     //SFX_APPWINDOW->Disable(sal_False);        //! allgemeine Methode im ScAnyRefDlg
223cdf0e10cSrcweir }
224cdf0e10cSrcweir 
225cdf0e10cSrcweir //----------------------------------------------------------------------------
IsRefInputMode() const226cdf0e10cSrcweir sal_Bool ScNameDlg::IsRefInputMode() const
227cdf0e10cSrcweir {
228cdf0e10cSrcweir     return aEdAssign.IsEnabled();
229cdf0e10cSrcweir }
230cdf0e10cSrcweir 
RefInputDone(sal_Bool bForced)231cdf0e10cSrcweir void ScNameDlg::RefInputDone( sal_Bool bForced)
232cdf0e10cSrcweir {
233cdf0e10cSrcweir     ScAnyRefDlg::RefInputDone(bForced);
234cdf0e10cSrcweir     EdModifyHdl(&aEdAssign);
235cdf0e10cSrcweir }
236cdf0e10cSrcweir //----------------------------------------------------------------------------
237cdf0e10cSrcweir // Uebergabe eines mit der Maus selektierten Tabellenbereiches, der dann als
238cdf0e10cSrcweir // neue Selektion im Referenz-Edit angezeigt wird.
239cdf0e10cSrcweir 
240cdf0e10cSrcweir 
SetReference(const ScRange & rRef,ScDocument * pDocP)241cdf0e10cSrcweir void ScNameDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir     if ( aEdAssign.IsEnabled() )
244cdf0e10cSrcweir     {
245cdf0e10cSrcweir         if ( rRef.aStart != rRef.aEnd )
246cdf0e10cSrcweir             RefInputStart(&aEdAssign);
247cdf0e10cSrcweir         String aRefStr;
248cdf0e10cSrcweir         rRef.Format( aRefStr, ABS_DREF3D, pDocP,
249cdf0e10cSrcweir                      ScAddress::Details(pDocP->GetAddressConvention(), 0, 0) );
250cdf0e10cSrcweir         aEdAssign.SetRefString( aRefStr );
251cdf0e10cSrcweir     }
252cdf0e10cSrcweir }
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 
255cdf0e10cSrcweir //----------------------------------------------------------------------------
Close()256cdf0e10cSrcweir sal_Bool __EXPORT ScNameDlg::Close()
257cdf0e10cSrcweir {
258cdf0e10cSrcweir     return DoClose( ScNameDlgWrapper::GetChildWindowId() );
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 
262cdf0e10cSrcweir //----------------------------------------------------------------------------
263cdf0e10cSrcweir 
SetActive()264cdf0e10cSrcweir void ScNameDlg::SetActive()
265cdf0e10cSrcweir {
266cdf0e10cSrcweir     aEdAssign.GrabFocus();
267cdf0e10cSrcweir     RefInputDone();
268cdf0e10cSrcweir }
269cdf0e10cSrcweir 
270cdf0e10cSrcweir 
271cdf0e10cSrcweir //----------------------------------------------------------------------------
272cdf0e10cSrcweir 
UpdateChecks()273cdf0e10cSrcweir void __EXPORT ScNameDlg::UpdateChecks()
274cdf0e10cSrcweir {
275cdf0e10cSrcweir     sal_uInt16       nCurPos=0;
276cdf0e10cSrcweir 
277*dffa72deSWang Lei     if(aLocalRangeName.SearchName( aEdName.GetText(), nCurPos, aSelectedRangeScope))
278cdf0e10cSrcweir     {
279cdf0e10cSrcweir         ScRangeData* pData=(ScRangeData*)(aLocalRangeName.At( nCurPos ));
280cdf0e10cSrcweir         aBtnCriteria .Check( pData->HasType( RT_CRITERIA ) );
281cdf0e10cSrcweir         aBtnPrintArea.Check( pData->HasType( RT_PRINTAREA ) );
282cdf0e10cSrcweir         aBtnColHeader.Check( pData->HasType( RT_COLHEADER ) );
283cdf0e10cSrcweir         aBtnRowHeader.Check( pData->HasType( RT_ROWHEADER ) );
284cdf0e10cSrcweir     }
285cdf0e10cSrcweir 
286cdf0e10cSrcweir     // Falls Edit-Feld leer ist: Typ-CheckBoxen deaktivieren:
287cdf0e10cSrcweir 
288cdf0e10cSrcweir     if ( aEdName.GetText().Len() != 0 )
289cdf0e10cSrcweir     {
290cdf0e10cSrcweir         if ( !aFlType.IsEnabled() )
291cdf0e10cSrcweir         {
292cdf0e10cSrcweir             aFlType.Enable();
293cdf0e10cSrcweir             aBtnCriteria .Enable();
294cdf0e10cSrcweir             aBtnPrintArea.Enable();
295cdf0e10cSrcweir             aBtnColHeader.Enable();
296cdf0e10cSrcweir             aBtnRowHeader.Enable();
297cdf0e10cSrcweir                         aFlAssign.Enable();
298cdf0e10cSrcweir             aEdAssign.Enable();
299cdf0e10cSrcweir             aRbAssign.Enable();
300cdf0e10cSrcweir         }
301cdf0e10cSrcweir     }
302cdf0e10cSrcweir     else if ( aFlType.IsEnabled() )
303cdf0e10cSrcweir     {
304cdf0e10cSrcweir         aFlType.Disable();
305cdf0e10cSrcweir         aBtnCriteria.Disable();
306cdf0e10cSrcweir         aBtnPrintArea.Disable();
307cdf0e10cSrcweir         aBtnColHeader.Disable();
308cdf0e10cSrcweir         aBtnRowHeader.Disable();
309cdf0e10cSrcweir                 aFlAssign.Disable();
310cdf0e10cSrcweir         aEdAssign.Disable();
311cdf0e10cSrcweir         aRbAssign.Disable();
312cdf0e10cSrcweir     }
313cdf0e10cSrcweir }
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 
316cdf0e10cSrcweir //----------------------------------------------------------------------------
317cdf0e10cSrcweir 
UpdateNames()318cdf0e10cSrcweir void __EXPORT ScNameDlg::UpdateNames()
319cdf0e10cSrcweir {
320cdf0e10cSrcweir     sal_uInt16  nRangeCount = aLocalRangeName.GetCount();
321cdf0e10cSrcweir 
322*dffa72deSWang Lei     //aEdName.SetUpdateMode( FALSE );
323*dffa72deSWang Lei     aLBNames.SetUpdateMode( false );
324cdf0e10cSrcweir     //-----------------------------------------------------------
325*dffa72deSWang Lei     //USHORT  nNamePos = aEdName.GetTopEntry();
326*dffa72deSWang Lei     //aEdName.Clear();
327*dffa72deSWang Lei     sal_uInt16  nNamePos = aLBNames.GetTopEntry();
328*dffa72deSWang Lei     aLBNames.Clear();
329cdf0e10cSrcweir 
330cdf0e10cSrcweir     aEdAssign.SetText( EMPTY_STRING );
331cdf0e10cSrcweir 
332cdf0e10cSrcweir     if ( nRangeCount > 0 )
333cdf0e10cSrcweir     {
334cdf0e10cSrcweir         ScRangeData*    pRangeData = NULL;
335cdf0e10cSrcweir         String          aString;
336*dffa72deSWang Lei                 SCTAB tabIndex = 0;
337cdf0e10cSrcweir 
338cdf0e10cSrcweir         for ( sal_uInt16 i=0; i<nRangeCount; i++ )
339cdf0e10cSrcweir         {
340cdf0e10cSrcweir             pRangeData = (ScRangeData*)(aLocalRangeName.At( i ));
341cdf0e10cSrcweir             if ( pRangeData )
342cdf0e10cSrcweir             {
343cdf0e10cSrcweir                 if (   !pRangeData->HasType( RT_DATABASE )
344cdf0e10cSrcweir                     && !pRangeData->HasType( RT_SHARED ) )
345cdf0e10cSrcweir                 {
346cdf0e10cSrcweir                     pRangeData->GetName( aString );
347*dffa72deSWang Lei                     if ( (tabIndex = pRangeData->GetRangeScope() ) != MAXTABCOUNT)
348*dffa72deSWang Lei                     {
349*dffa72deSWang Lei                                                  String tabName;
350*dffa72deSWang Lei                             pDoc->GetName(tabIndex,tabName);
351*dffa72deSWang Lei                             if (aString.Len() < SHEETNAMEPOS)
352*dffa72deSWang Lei                                 aString.Expand(SHEETNAMEPOS);
353*dffa72deSWang Lei                             else
354*dffa72deSWang Lei                                 aString.AppendAscii( " ");
355*dffa72deSWang Lei                             aString.AppendAscii( "(");
356*dffa72deSWang Lei                             aString += tabName;
357*dffa72deSWang Lei                             aString.AppendAscii( ")");
358*dffa72deSWang Lei                     }
359*dffa72deSWang Lei 
360*dffa72deSWang Lei                     //aEdName.InsertEntry( aString );
361*dffa72deSWang Lei                                    aLBNames.InsertEntry( aString );
362cdf0e10cSrcweir                 }
363cdf0e10cSrcweir             }
364cdf0e10cSrcweir         }
365cdf0e10cSrcweir     }
366cdf0e10cSrcweir     else
367cdf0e10cSrcweir     {
368cdf0e10cSrcweir         aBtnAdd.SetText( aStrAdd );
369cdf0e10cSrcweir         aBtnAdd.Disable();
370cdf0e10cSrcweir         aBtnRemove.Disable();
371cdf0e10cSrcweir     }
372cdf0e10cSrcweir     //-----------------------------------------------------------
373*dffa72deSWang Lei     //aEdName.SetUpdateMode( TRUE );
374*dffa72deSWang Lei     //aEdName.SetTopEntry(nNamePos);
375*dffa72deSWang Lei     //aEdName.Invalidate();
376*dffa72deSWang Lei     aLBNames.SetUpdateMode( true );
377*dffa72deSWang Lei     aLBNames.SetTopEntry(nNamePos);
378*dffa72deSWang Lei     aLBNames.Invalidate();
379cdf0e10cSrcweir }
380cdf0e10cSrcweir 
381cdf0e10cSrcweir 
382cdf0e10cSrcweir //----------------------------------------------------------------------------
383cdf0e10cSrcweir 
CalcCurTableAssign(String & aAssign,sal_uInt16 nCurPos)384cdf0e10cSrcweir void __EXPORT ScNameDlg::CalcCurTableAssign( String& aAssign, sal_uInt16 nCurPos )
385cdf0e10cSrcweir {
386cdf0e10cSrcweir     ScRangeData* pRangeData = (ScRangeData*)(aLocalRangeName.At( nCurPos ));
387cdf0e10cSrcweir 
388cdf0e10cSrcweir     if ( pRangeData )
389cdf0e10cSrcweir     {
390cdf0e10cSrcweir         rtl::OUStringBuffer sBuffer;
391cdf0e10cSrcweir         pRangeData->UpdateSymbol( sBuffer, theCursorPos );
392cdf0e10cSrcweir         aAssign = sBuffer;
393cdf0e10cSrcweir     }
394cdf0e10cSrcweir     else
395cdf0e10cSrcweir     {
396cdf0e10cSrcweir         aAssign.Erase();
397cdf0e10cSrcweir     }
398cdf0e10cSrcweir }
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 
401cdf0e10cSrcweir //----------------------------------------------------------------------------
402cdf0e10cSrcweir // Handler:
403cdf0e10cSrcweir // ========
404cdf0e10cSrcweir 
IMPL_LINK(ScNameDlg,OkBtnHdl,void *,EMPTYARG)405cdf0e10cSrcweir IMPL_LINK( ScNameDlg, OkBtnHdl, void *, EMPTYARG )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir     if ( aBtnAdd.IsEnabled() )
408cdf0e10cSrcweir         AddBtnHdl( 0 );
409cdf0e10cSrcweir 
410cdf0e10cSrcweir     if ( !aBtnAdd.IsEnabled() && !aBtnRemove.IsEnabled() )
411cdf0e10cSrcweir     {
412cdf0e10cSrcweir         ScDocShell* pDocSh = pViewData->GetDocShell();
413cdf0e10cSrcweir         ScDocFunc aFunc(*pDocSh);
414cdf0e10cSrcweir         aFunc.ModifyRangeNames( aLocalRangeName, sal_False );
415cdf0e10cSrcweir         Close();
416cdf0e10cSrcweir     }
417cdf0e10cSrcweir     return 0;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir 
420cdf0e10cSrcweir 
421cdf0e10cSrcweir //----------------------------------------------------------------------------
422cdf0e10cSrcweir 
IMPL_LINK_INLINE_START(ScNameDlg,CancelBtnHdl,void *,EMPTYARG)423cdf0e10cSrcweir IMPL_LINK_INLINE_START( ScNameDlg, CancelBtnHdl, void *, EMPTYARG )
424cdf0e10cSrcweir {
425cdf0e10cSrcweir     Close();
426cdf0e10cSrcweir     return 0;
427cdf0e10cSrcweir }
IMPL_LINK_INLINE_END(ScNameDlg,CancelBtnHdl,void *,EMPTYARG)428cdf0e10cSrcweir IMPL_LINK_INLINE_END( ScNameDlg, CancelBtnHdl, void *, EMPTYARG )
429cdf0e10cSrcweir 
430cdf0e10cSrcweir 
431cdf0e10cSrcweir //----------------------------------------------------------------------------
432cdf0e10cSrcweir 
433cdf0e10cSrcweir IMPL_LINK( ScNameDlg, AddBtnHdl, void *, EMPTYARG )
434cdf0e10cSrcweir {
435cdf0e10cSrcweir     sal_Bool    bAdded    = sal_False;
436cdf0e10cSrcweir     String  aNewEntry = aEdName.GetText();
437*dffa72deSWang Lei     //USHORT  nNamePos = aEdName.GetTopEntry();
438*dffa72deSWang Lei         sal_uInt16  nNamePos = aLBNames.GetTopEntry();
439cdf0e10cSrcweir     aNewEntry.EraseLeadingChars( ' ' );
440cdf0e10cSrcweir     aNewEntry.EraseTrailingChars( ' ' );
441cdf0e10cSrcweir 
442cdf0e10cSrcweir     if ( aNewEntry.Len() > 0 )
443cdf0e10cSrcweir     {
444cdf0e10cSrcweir         if ( ScRangeData::IsNameValid( aNewEntry, pDoc ) )
445cdf0e10cSrcweir         {
446cdf0e10cSrcweir             if ( pDoc )
447cdf0e10cSrcweir             {
448cdf0e10cSrcweir                 ScRangeData*    pNewEntry   = NULL;
449cdf0e10cSrcweir                 RangeType       nType       = RT_NAME;
450cdf0e10cSrcweir                 sal_uInt16          nFoundAt    = 0;
451cdf0e10cSrcweir                 String          theSymbol   = aEdAssign.GetText();
452cdf0e10cSrcweir                 String          aStrPos;
453cdf0e10cSrcweir                 String          aStrArea;
454cdf0e10cSrcweir 
455cdf0e10cSrcweir                 pNewEntry = new ScRangeData( pDoc,
456cdf0e10cSrcweir                                              aNewEntry,
457cdf0e10cSrcweir                                              theSymbol,
458cdf0e10cSrcweir                                              theCursorPos,
459cdf0e10cSrcweir                                              nType );
460*dffa72deSWang Lei                 if (aBtnAdd.GetText() == aStrModify)
461*dffa72deSWang Lei                     pNewEntry->SetRangeScope(aSelectedRangeScope);
462*dffa72deSWang Lei                 else
463*dffa72deSWang Lei                     aSelectedRangeScope = MAXTABCOUNT;
464cdf0e10cSrcweir                 if (pNewEntry)
465cdf0e10cSrcweir                 {
466cdf0e10cSrcweir                     nType = nType
467cdf0e10cSrcweir                     | (aBtnRowHeader .IsChecked() ? RT_ROWHEADER  : RangeType(0))
468cdf0e10cSrcweir                     | (aBtnColHeader .IsChecked() ? RT_COLHEADER  : RangeType(0))
469cdf0e10cSrcweir                     | (aBtnPrintArea .IsChecked() ? RT_PRINTAREA  : RangeType(0))
470cdf0e10cSrcweir                     | (aBtnCriteria  .IsChecked() ? RT_CRITERIA   : RangeType(0));
471cdf0e10cSrcweir                     pNewEntry->AddType(nType);
472cdf0e10cSrcweir                 }
473cdf0e10cSrcweir 
474cdf0e10cSrcweir                 // theSymbol gueltig?
475cdf0e10cSrcweir                 // (= konnte theSymbol im ScRangeData-Ctor
476cdf0e10cSrcweir                 //    in ein Token-Array uebersetzt werden?)
477cdf0e10cSrcweir                 if ( 0 == pNewEntry->GetErrCode() )
478cdf0e10cSrcweir                 {
479cdf0e10cSrcweir                     // Eintrag bereits vorhanden? Dann vorher entfernen (=Aendern)
480*dffa72deSWang Lei                     if ( aLocalRangeName.SearchName( aNewEntry, nFoundAt, aSelectedRangeScope ) )
481cdf0e10cSrcweir                     {                                   // alten Index uebernehmen
482cdf0e10cSrcweir                         pNewEntry->SetIndex(
483cdf0e10cSrcweir                             ((ScRangeData*)(aLocalRangeName.At(nFoundAt)))->GetIndex() );
484cdf0e10cSrcweir                         aLocalRangeName.AtFree( nFoundAt );
485cdf0e10cSrcweir                     }
486cdf0e10cSrcweir                     else
487cdf0e10cSrcweir                         pSaveObj->Clear();
488cdf0e10cSrcweir 
489cdf0e10cSrcweir                     if ( !aLocalRangeName.Insert( pNewEntry ) )
490cdf0e10cSrcweir                         delete pNewEntry;
491cdf0e10cSrcweir 
492cdf0e10cSrcweir                     UpdateNames();
493cdf0e10cSrcweir                     bSaved=sal_False;
494cdf0e10cSrcweir                     RESTORE_DATA()
495cdf0e10cSrcweir                     aEdName.SetText(EMPTY_STRING);
496cdf0e10cSrcweir                     aEdName.GrabFocus();
497cdf0e10cSrcweir                     UpdateChecks();
498cdf0e10cSrcweir                     aBtnAdd.SetText( aStrAdd );
499cdf0e10cSrcweir                     aBtnAdd.Disable();
500cdf0e10cSrcweir                     aBtnRemove.Disable();
501cdf0e10cSrcweir 
502cdf0e10cSrcweir                     //@BugID 54702 raus mit dem Sch.
503cdf0e10cSrcweir                     //SFX_APPWINDOW->Disable(sal_False);        //! allgemeine Methode im ScAnyRefDlg
504cdf0e10cSrcweir 
505cdf0e10cSrcweir                     bAdded = sal_True;
506cdf0e10cSrcweir                 }
507cdf0e10cSrcweir                 else // theSymbol ungueltig
508cdf0e10cSrcweir                 {
509cdf0e10cSrcweir                     delete pNewEntry;
510cdf0e10cSrcweir                     ERRORBOX( errMsgInvalidSym );
511cdf0e10cSrcweir                     theCurSel = Selection( 0, SELECTION_MAX );
512cdf0e10cSrcweir                     aEdAssign.GrabFocus();
513cdf0e10cSrcweir                 }
514cdf0e10cSrcweir             }
515cdf0e10cSrcweir         }
516cdf0e10cSrcweir         else
517cdf0e10cSrcweir         {
518cdf0e10cSrcweir             ERRORBOX( ScGlobal::GetRscString(STR_INVALIDNAME) );
519cdf0e10cSrcweir             aEdName.SetSelection( Selection( 0, SELECTION_MAX ) );
520cdf0e10cSrcweir             aEdName.GrabFocus();
521cdf0e10cSrcweir         }
522cdf0e10cSrcweir     }
523cdf0e10cSrcweir 
524*dffa72deSWang Lei     //aEdName.SetTopEntry(nNamePos);
525*dffa72deSWang Lei     aLBNames.SetTopEntry(nNamePos);
526cdf0e10cSrcweir     return bAdded;
527cdf0e10cSrcweir }
528cdf0e10cSrcweir 
529cdf0e10cSrcweir 
530cdf0e10cSrcweir //----------------------------------------------------------------------------
531cdf0e10cSrcweir 
IMPL_LINK(ScNameDlg,RemoveBtnHdl,void *,EMPTYARG)532cdf0e10cSrcweir IMPL_LINK( ScNameDlg, RemoveBtnHdl, void *, EMPTYARG )
533cdf0e10cSrcweir {
534cdf0e10cSrcweir     sal_uInt16       nRemoveAt = 0;
535cdf0e10cSrcweir     const String aStrEntry = aEdName.GetText();
536cdf0e10cSrcweir 
537*dffa72deSWang Lei     if ( aLocalRangeName.SearchName( aStrEntry, nRemoveAt, aSelectedRangeScope ) )
538cdf0e10cSrcweir     {
539cdf0e10cSrcweir         String aStrDelMsg = ScGlobal::GetRscString( STR_QUERY_DELENTRY );
540cdf0e10cSrcweir         String aMsg       = aStrDelMsg.GetToken( 0, '#' );
541cdf0e10cSrcweir 
542cdf0e10cSrcweir         aMsg += aStrEntry;
543cdf0e10cSrcweir         aMsg += aStrDelMsg.GetToken( 1, '#' );
544cdf0e10cSrcweir 
545cdf0e10cSrcweir         if ( RET_YES ==
546cdf0e10cSrcweir              QueryBox( this, WinBits( WB_YES_NO | WB_DEF_YES ), aMsg ).Execute() )
547cdf0e10cSrcweir         {
548cdf0e10cSrcweir             aLocalRangeName.AtFree( nRemoveAt );
549cdf0e10cSrcweir             UpdateNames();
550cdf0e10cSrcweir             UpdateChecks();
551cdf0e10cSrcweir             bSaved=sal_False;
552cdf0e10cSrcweir             RESTORE_DATA()
553cdf0e10cSrcweir             theCurSel = Selection( 0, SELECTION_MAX );
554*dffa72deSWang Lei             aEdName.SetText(EMPTY_STRING);
555cdf0e10cSrcweir             aBtnAdd.SetText( aStrAdd );
556cdf0e10cSrcweir             aBtnAdd.Disable();
557cdf0e10cSrcweir             aBtnRemove.Disable();
558cdf0e10cSrcweir         }
559cdf0e10cSrcweir     }
560cdf0e10cSrcweir     return 0;
561cdf0e10cSrcweir }
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 
564cdf0e10cSrcweir //----------------------------------------------------------------------------
565cdf0e10cSrcweir 
IMPL_LINK(ScNameDlg,NameSelectHdl,void *,EMPTYARG)566cdf0e10cSrcweir IMPL_LINK( ScNameDlg, NameSelectHdl, void *, EMPTYARG )
567cdf0e10cSrcweir {
568cdf0e10cSrcweir     sal_uInt16 nAtPos;
569*dffa72deSWang Lei        String rangeName = aLBNames.GetSelectEntry();
570*dffa72deSWang Lei        if ( ')' == rangeName.GetChar(rangeName.Len()-1) )
571*dffa72deSWang Lei        {
572*dffa72deSWang Lei             xub_StrLen sheetNamePos = rangeName.Search('(');
573*dffa72deSWang Lei          String sheetName(rangeName, sheetNamePos+1, rangeName.Len()-2-sheetNamePos);
574*dffa72deSWang Lei             pDoc->GetTable(sheetName,aSelectedRangeScope);
575*dffa72deSWang Lei          rangeName.Erase(sheetNamePos);
576*dffa72deSWang Lei          rangeName.EraseTrailingChars();
577cdf0e10cSrcweir 
578*dffa72deSWang Lei     }
579*dffa72deSWang Lei     else
580*dffa72deSWang Lei            aSelectedRangeScope = MAXTABCOUNT;
581*dffa72deSWang Lei 
582*dffa72deSWang Lei     //if ( aLocalRangeName.SearchName( aEdName.GetText(), nAtPos ) )
583*dffa72deSWang Lei     if ( aLocalRangeName.SearchName( rangeName, nAtPos, aSelectedRangeScope ) )
584cdf0e10cSrcweir     {
585cdf0e10cSrcweir         String       aSymbol;
586cdf0e10cSrcweir         ScRangeData* pData  = (ScRangeData*)(aLocalRangeName.At( nAtPos ));
587cdf0e10cSrcweir 
588cdf0e10cSrcweir         if ( pData )
589cdf0e10cSrcweir         {
590cdf0e10cSrcweir             pData->GetSymbol( aSymbol );
591cdf0e10cSrcweir             CalcCurTableAssign( aSymbol, nAtPos );
592cdf0e10cSrcweir             aEdAssign.SetText( aSymbol );
593cdf0e10cSrcweir             aBtnAdd.SetText( aStrModify );
594*dffa72deSWang Lei             aEdName.SetText(rangeName);
595cdf0e10cSrcweir             theCurSel = Selection( 0, SELECTION_MAX );
596*dffa72deSWang Lei             aBtnAdd.SetText( aStrModify );
597*dffa72deSWang Lei             aBtnAdd.Enable();
598*dffa72deSWang Lei             aBtnRemove.Enable();
599cdf0e10cSrcweir         }
600cdf0e10cSrcweir     }
601cdf0e10cSrcweir     UpdateChecks();
602cdf0e10cSrcweir     return 0;
603cdf0e10cSrcweir }
604cdf0e10cSrcweir 
605cdf0e10cSrcweir 
606cdf0e10cSrcweir //----------------------------------------------------------------------------
607cdf0e10cSrcweir 
IMPL_LINK(ScNameDlg,EdModifyHdl,Edit *,pEd)608cdf0e10cSrcweir IMPL_LINK( ScNameDlg, EdModifyHdl, Edit *, pEd )
609cdf0e10cSrcweir {
610cdf0e10cSrcweir     String  theName     = aEdName.GetText();
611cdf0e10cSrcweir     String  theSymbol   = aEdAssign.GetText();
612*dffa72deSWang Lei  bool   bNameFound  = (LISTBOX_ENTRY_NOTFOUND
613*dffa72deSWang Lei                            != aLBNames.GetEntryPos( theName ));
614cdf0e10cSrcweir 
615cdf0e10cSrcweir     if ( pEd == &aEdName )
616cdf0e10cSrcweir     {
617cdf0e10cSrcweir         if ( theName.Len() == 0 )
618cdf0e10cSrcweir         {
619cdf0e10cSrcweir             if ( aBtnAdd.GetText() != aStrAdd )
620cdf0e10cSrcweir                 aBtnAdd.SetText( aStrAdd );
621cdf0e10cSrcweir             aBtnAdd.Disable();
622cdf0e10cSrcweir             aBtnRemove.Disable();
623cdf0e10cSrcweir             aFlAssign.Disable();
624cdf0e10cSrcweir             aEdAssign.Disable();
625cdf0e10cSrcweir             aRbAssign.Disable();
626cdf0e10cSrcweir             //@BugID 54702 raus mit dem Sch.
627cdf0e10cSrcweir             //SFX_APPWINDOW->Disable(sal_False);        //! allgemeine Methode im ScAnyRefDlg
628cdf0e10cSrcweir         }
629cdf0e10cSrcweir         else
630cdf0e10cSrcweir         {
631*dffa72deSWang Lei          /*
632cdf0e10cSrcweir             if ( bNameFound )
633cdf0e10cSrcweir             {
634cdf0e10cSrcweir                 if ( aBtnAdd.GetText() != aStrModify )
635cdf0e10cSrcweir                     aBtnAdd.SetText( aStrModify );
636cdf0e10cSrcweir 
637cdf0e10cSrcweir                 aBtnRemove.Enable();
638cdf0e10cSrcweir 
639cdf0e10cSrcweir                 if(!bSaved)
640cdf0e10cSrcweir                 {
641*dffa72deSWang Lei                     bSaved=TRUE;
642cdf0e10cSrcweir                     SAVE_DATA()
643cdf0e10cSrcweir                 }
644cdf0e10cSrcweir                 NameSelectHdl( 0 );
645cdf0e10cSrcweir             }
646cdf0e10cSrcweir             else
647cdf0e10cSrcweir             {
648cdf0e10cSrcweir                 if ( aBtnAdd.GetText() != aStrAdd )
649cdf0e10cSrcweir                     aBtnAdd.SetText( aStrAdd );
650cdf0e10cSrcweir                 aBtnRemove.Disable();
651cdf0e10cSrcweir 
652*dffa72deSWang Lei                 bSaved=FALSE;
653cdf0e10cSrcweir                 RESTORE_DATA()
654cdf0e10cSrcweir             }
655*dffa72deSWang Lei             */
656*dffa72deSWang Lei 
657*dffa72deSWang Lei                if ( aBtnAdd.GetText() != aStrAdd )
658*dffa72deSWang Lei                 aBtnAdd.SetText( aStrAdd );
659cdf0e10cSrcweir             theSymbol = aEdAssign.GetText();
660cdf0e10cSrcweir 
661cdf0e10cSrcweir             if ( theSymbol.Len() > 0 )
662cdf0e10cSrcweir                 aBtnAdd.Enable();
663cdf0e10cSrcweir             else
664cdf0e10cSrcweir                 aBtnAdd.Disable();
665cdf0e10cSrcweir 
666cdf0e10cSrcweir             aFlAssign.Enable();
667cdf0e10cSrcweir             aEdAssign.Enable();
668cdf0e10cSrcweir             aRbAssign.Enable();
669*dffa72deSWang Lei             aBtnRemove.Disable();
670cdf0e10cSrcweir             //@BugID 54702 raus mit dem Sch.
671cdf0e10cSrcweir             //SFX_APPWINDOW->Enable();
672cdf0e10cSrcweir         }
673cdf0e10cSrcweir         UpdateChecks();
674cdf0e10cSrcweir         theCurSel = Selection( 0, SELECTION_MAX );
675cdf0e10cSrcweir     }
676cdf0e10cSrcweir     else if ( pEd == &aEdAssign )
677cdf0e10cSrcweir     {
678cdf0e10cSrcweir         if ( (theName.Len()>0) && (theSymbol.Len()>0) )
679cdf0e10cSrcweir         {
680cdf0e10cSrcweir             aBtnAdd.Enable();
681cdf0e10cSrcweir             if ( bNameFound )
682cdf0e10cSrcweir                 aBtnRemove.Enable();
683cdf0e10cSrcweir         }
684cdf0e10cSrcweir         else
685cdf0e10cSrcweir         {
686cdf0e10cSrcweir             aBtnAdd.Disable();
687cdf0e10cSrcweir             aBtnRemove.Disable();
688cdf0e10cSrcweir         }
689cdf0e10cSrcweir     }
690cdf0e10cSrcweir     return 0;
691cdf0e10cSrcweir }
692cdf0e10cSrcweir 
693cdf0e10cSrcweir //------------------------------------------------------------------------
694cdf0e10cSrcweir 
IMPL_LINK_INLINE_START(ScNameDlg,AssignGetFocusHdl,void *,EMPTYARG)695cdf0e10cSrcweir IMPL_LINK_INLINE_START( ScNameDlg, AssignGetFocusHdl, void *, EMPTYARG )
696cdf0e10cSrcweir {
697cdf0e10cSrcweir     EdModifyHdl( &aEdAssign );
698cdf0e10cSrcweir     return 0;
699cdf0e10cSrcweir }
700cdf0e10cSrcweir IMPL_LINK_INLINE_END( ScNameDlg, AssignGetFocusHdl, void *, EMPTYARG )
701