Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "reffact.hxx"
30 : : #include "document.hxx"
31 : : #include "scresid.hxx"
32 : : #include "globstr.hrc"
33 : : #include "crnrdlg.hrc"
34 : : #include "docsh.hxx"
35 : :
36 : : #define _CRNRDLG_CXX
37 : : #include "crnrdlg.hxx"
38 : : #undef _CRNRDLG_CXX
39 : : #include <vcl/msgbox.hxx>
40 : :
41 : :
42 : : //============================================================================
43 : :
44 : : #define ERRORBOX(s) ErrorBox(this,WinBits(WB_OK|WB_DEF_OK),s).Execute()
45 : : #define QUERYBOX(m) QueryBox(this,WinBits(WB_YES_NO|WB_DEF_YES),m).Execute()
46 : :
47 : : const sal_uLong nEntryDataCol = 0;
48 : : const sal_uLong nEntryDataRow = 1;
49 : : const sal_uLong nEntryDataDelim = 2;
50 : :
51 : :
52 : : //============================================================================
53 : : // class ScColRowNameRangesDlg
54 : :
55 : :
56 : : /*************************************************************************
57 : : #* Member: ScColRowNameRangesDlg
58 : : #*------------------------------------------------------------------------
59 : : #*
60 : : #* Klasse: ScColRowNameRangesDlg
61 : : #*
62 : : #* Funktion: Konstruktor der Klasse ScColRowNameRangesDlg.
63 : : #* Initialisieren der Klassen- Mitglieder,
64 : : #* Uebernahme der Range- Angaben und Aufruf
65 : : #* der eigentlichen Initialisierungsroutine
66 : : #*
67 : : #* Input: Sfx- Verknuepfungen
68 : : #* Parent- Window
69 : : #* SCViewData
70 : : #*
71 : : #* Output: ---
72 : : #*
73 : : #************************************************************************/
74 : :
75 : 0 : ScColRowNameRangesDlg::ScColRowNameRangesDlg( SfxBindings* pB,
76 : : SfxChildWindow* pCW,
77 : : Window* pParent,
78 : : ScViewData* ptrViewData )
79 : :
80 : : : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_COLROWNAMERANGES ),
81 : :
82 : : aFlAssign ( this, ScResId( FL_ASSIGN ) ),
83 : : aLbRange ( this, ScResId( LB_RANGE ) ),
84 : :
85 : : aEdAssign ( this, this, ScResId( ED_AREA ) ),
86 : : aRbAssign ( this, ScResId( RB_AREA ), &aEdAssign, this ),
87 : : aBtnColHead ( this, ScResId( BTN_COLHEAD ) ),
88 : : aBtnRowHead ( this, ScResId( BTN_ROWHEAD ) ),
89 : : aFtAssign2 ( this, ScResId( FT_DATA_LABEL ) ),
90 : : aEdAssign2 ( this, this, ScResId( ED_DATA ) ),
91 : : aRbAssign2 ( this, ScResId( RB_DATA ), &aEdAssign2, this ),
92 : :
93 : : aBtnOk ( this, ScResId( BTN_OK ) ),
94 : : aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
95 : : aBtnHelp ( this, ScResId( BTN_HELP ) ),
96 : : aBtnAdd ( this, ScResId( BTN_ADD ) ),
97 : : aBtnRemove ( this, ScResId( BTN_REMOVE ) ),
98 : :
99 : : pViewData ( ptrViewData ),
100 [ # # ]: 0 : pDoc ( ptrViewData->GetDocument() ),
101 : :
102 : : pEdActive ( NULL ),
103 [ # # ][ # # ]: 0 : bDlgLostFocus ( false )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
104 : : {
105 [ # # ][ # # ]: 0 : xColNameRanges = pDoc->GetColNameRanges()->Clone();
106 [ # # ][ # # ]: 0 : xRowNameRanges = pDoc->GetRowNameRanges()->Clone();
107 [ # # ]: 0 : Init();
108 [ # # ]: 0 : FreeResource();
109 : :
110 [ # # ]: 0 : aRbAssign.SetAccessibleRelationMemberOf(&aEdAssign);
111 [ # # ]: 0 : aRbAssign2.SetAccessibleRelationMemberOf(&aEdAssign);
112 : 0 : }
113 : :
114 : :
115 : : /*************************************************************************
116 : : #* Member: ~ScColRowNameRangesDlg
117 : : #*------------------------------------------------------------------------
118 : : #*
119 : : #* Klasse: ScColRowNameRangesDlg
120 : : #*
121 : : #* Funktion: Destruktor der Klasse
122 : : #*
123 : : #* Input: ---
124 : : #*
125 : : #* Output: ---
126 : : #*
127 : : #************************************************************************/
128 : :
129 [ # # ][ # # ]: 0 : ScColRowNameRangesDlg::~ScColRowNameRangesDlg()
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
130 : : {
131 [ # # ]: 0 : }
132 : :
133 : :
134 : : /*************************************************************************
135 : : #* Member: Init
136 : : #*------------------------------------------------------------------------
137 : : #*
138 : : #* Klasse: ScColRowNameRangesDlg
139 : : #*
140 : : #* Funktion: Initialisierungs- Routine:
141 : : #* Umlenken der Event- Handler und einstellen der
142 : : #* Startparameter.
143 : : #*
144 : : #* Input: ---
145 : : #*
146 : : #* Output: ---
147 : : #*
148 : : #************************************************************************/
149 : :
150 : 0 : void ScColRowNameRangesDlg::Init()
151 : : {
152 [ # # ]: 0 : aBtnOk.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, OkBtnHdl ) );
153 [ # # ]: 0 : aBtnCancel.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, CancelBtnHdl ) );
154 [ # # ]: 0 : aBtnAdd.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, AddBtnHdl ) );
155 [ # # ]: 0 : aBtnRemove.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, RemoveBtnHdl ) );
156 [ # # ]: 0 : aLbRange.SetSelectHdl ( LINK( this, ScColRowNameRangesDlg, Range1SelectHdl ) );
157 [ # # ]: 0 : aEdAssign.SetModifyHdl ( LINK( this, ScColRowNameRangesDlg, Range1DataModifyHdl ) );
158 [ # # ]: 0 : aBtnColHead.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, ColClickHdl ) );
159 [ # # ]: 0 : aBtnRowHead.SetClickHdl ( LINK( this, ScColRowNameRangesDlg, RowClickHdl ) );
160 [ # # ]: 0 : aEdAssign2.SetModifyHdl ( LINK( this, ScColRowNameRangesDlg, Range2DataModifyHdl ) );
161 : :
162 [ # # ]: 0 : Link aLink = LINK( this, ScColRowNameRangesDlg, GetFocusHdl );
163 : 0 : aEdAssign.SetGetFocusHdl( aLink );
164 : 0 : aRbAssign.SetGetFocusHdl( aLink );
165 : 0 : aEdAssign2.SetGetFocusHdl( aLink );
166 : 0 : aRbAssign2.SetGetFocusHdl( aLink );
167 : :
168 [ # # ]: 0 : aLink = LINK( this, ScColRowNameRangesDlg, LoseFocusHdl );
169 : 0 : aEdAssign.SetLoseFocusHdl( aLink );
170 : 0 : aRbAssign.SetLoseFocusHdl( aLink );
171 : 0 : aEdAssign2.SetLoseFocusHdl( aLink );
172 : 0 : aRbAssign2.SetLoseFocusHdl( aLink );
173 : :
174 : 0 : pEdActive = &aEdAssign;
175 : :
176 [ # # ]: 0 : UpdateNames();
177 : :
178 [ # # ][ # # ]: 0 : if ( pViewData && pDoc )
179 : : {
180 : 0 : SCCOL nStartCol = 0;
181 : 0 : SCROW nStartRow = 0;
182 : 0 : SCTAB nStartTab = 0;
183 : 0 : SCCOL nEndCol = 0;
184 : 0 : SCROW nEndRow = 0;
185 : 0 : SCTAB nEndTab = 0;
186 : : pViewData->GetSimpleArea( nStartCol, nStartRow, nStartTab,
187 [ # # ]: 0 : nEndCol, nEndRow, nEndTab );
188 : : SetColRowData( ScRange( ScAddress( nStartCol, nStartRow, nStartTab ),
189 [ # # ]: 0 : ScAddress( nEndCol, nEndRow, nEndTab ) ) );
190 : : }
191 : : else
192 : : {
193 [ # # ]: 0 : aBtnColHead.Check( sal_True );
194 [ # # ]: 0 : aBtnRowHead.Check( false );
195 [ # # ][ # # ]: 0 : aEdAssign.SetText( EMPTY_STRING );
196 [ # # ][ # # ]: 0 : aEdAssign2.SetText( EMPTY_STRING );
197 : : }
198 : :
199 [ # # ]: 0 : aLbRange.SetBorderStyle( WINDOW_BORDER_MONO );
200 [ # # ]: 0 : aBtnColHead.Enable();
201 [ # # ]: 0 : aBtnRowHead.Enable();
202 [ # # ]: 0 : aEdAssign.Enable();
203 [ # # ]: 0 : aEdAssign.GrabFocus();
204 [ # # ]: 0 : aRbAssign.Enable();
205 : :
206 [ # # ]: 0 : Range1SelectHdl( 0 );
207 : 0 : }
208 : :
209 : :
210 : : /*************************************************************************
211 : : #* Member: SetColRowData
212 : : #*------------------------------------------------------------------------
213 : : #*
214 : : #* Klasse: ScColRowNameRangesDlg
215 : : #*
216 : : #* Funktion: zugehoerigen Datenbereich eines Beschriftungsbereiches
217 : : #* auf default Werte setzen und beide Referenz-Edit-Felder
218 : : #* fuellen.
219 : : #*
220 : : #* Input: Einstellbereich fuer Labels
221 : : #*
222 : : #* Output: ---
223 : : #*
224 : : #************************************************************************/
225 : :
226 : 0 : void ScColRowNameRangesDlg::SetColRowData( const ScRange& rLabelRange,sal_Bool bRef)
227 : : {
228 : 0 : theCurData = theCurArea = rLabelRange;
229 : 0 : sal_Bool bValid = sal_True;
230 : 0 : SCCOL nCol1 = theCurArea.aStart.Col();
231 : 0 : SCCOL nCol2 = theCurArea.aEnd.Col();
232 : 0 : SCROW nRow1 = theCurArea.aStart.Row();
233 : 0 : SCROW nRow2 = theCurArea.aEnd.Row();
234 [ # # ][ # # ]: 0 : if ( (static_cast<SCCOLROW>(nCol2 - nCol1) >= nRow2 - nRow1) || (nCol1 == 0 && nCol2 == MAXCOL) )
[ # # ]
235 : : { // Spaltenkoepfe und Grenzfall gesamte Tabelle
236 : 0 : aBtnColHead.Check( sal_True );
237 : 0 : aBtnRowHead.Check( false );
238 [ # # ]: 0 : if ( nRow2 == MAXROW )
239 : : {
240 [ # # ]: 0 : if ( nRow1 == 0 )
241 : 0 : bValid = false; // Grenzfall gesamte Tabelle
242 : : else
243 : : { // Head unten, Data oben
244 : 0 : theCurData.aStart.SetRow( 0 );
245 : 0 : theCurData.aEnd.SetRow( nRow1 - 1 );
246 : : }
247 : : }
248 : : else
249 : : { // Head oben, Data unten
250 : 0 : theCurData.aStart.SetRow( nRow2 + 1 );
251 : 0 : theCurData.aEnd.SetRow( MAXROW );
252 : : }
253 : : }
254 : : else
255 : : { // Zeilenkoepfe
256 : 0 : aBtnRowHead.Check( sal_True );
257 : 0 : aBtnColHead.Check( false );
258 [ # # ]: 0 : if ( nCol2 == MAXCOL )
259 : : { // Head rechts, Data links
260 : 0 : theCurData.aStart.SetCol( 0 );
261 : 0 : theCurData.aEnd.SetCol( nCol2 - 1 );
262 : : }
263 : : else
264 : : { // Head links, Data rechts
265 : 0 : theCurData.aStart.SetCol( nCol2 + 1 );
266 : 0 : theCurData.aEnd.SetCol( MAXCOL );
267 : : }
268 : : }
269 [ # # ]: 0 : if ( bValid )
270 : : {
271 [ # # ]: 0 : const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
272 [ # # ]: 0 : String aStr;
273 [ # # ]: 0 : theCurArea.Format( aStr, SCR_ABS_3D, pDoc, eConv );
274 : :
275 [ # # ]: 0 : if(bRef)
276 [ # # ]: 0 : aEdAssign.SetRefString( aStr );
277 : : else
278 [ # # ]: 0 : aEdAssign.SetText( aStr );
279 : :
280 [ # # ]: 0 : aEdAssign.SetSelection( Selection( SELECTION_MAX, SELECTION_MAX ) );
281 [ # # ]: 0 : theCurData.Format( aStr, SCR_ABS_3D, pDoc, eConv );
282 : :
283 [ # # ]: 0 : if(bRef)
284 [ # # ]: 0 : aEdAssign2.SetRefString( aStr );
285 : : else
286 [ # # ][ # # ]: 0 : aEdAssign2.SetText( aStr );
287 : : }
288 : : else
289 : : {
290 : 0 : theCurData = theCurArea = ScRange();
291 : :
292 [ # # ]: 0 : if(bRef)
293 : : {
294 : 0 : aEdAssign.SetRefString( EMPTY_STRING );
295 : 0 : aEdAssign2.SetRefString( EMPTY_STRING );
296 : : }
297 : : else
298 : : {
299 : 0 : aEdAssign.SetText( EMPTY_STRING );
300 : 0 : aEdAssign2.SetText( EMPTY_STRING );
301 : : }
302 : :
303 : 0 : aBtnColHead.Disable();
304 : 0 : aBtnRowHead.Disable();
305 : 0 : aEdAssign2.Disable();
306 : 0 : aRbAssign2.Disable();
307 : : }
308 : 0 : }
309 : :
310 : :
311 : : /*************************************************************************
312 : : #* Member: AdjustColRowData
313 : : #*------------------------------------------------------------------------
314 : : #*
315 : : #* Klasse: ScColRowNameRangesDlg
316 : : #*
317 : : #* Funktion: zugehoerigen Datenbereich eines Beschriftungsbereiches
318 : : #* anpassen und Data-Referenz-Edit-Feld fuellen.
319 : : #*
320 : : #* Input: Bereich fuer Labels
321 : : #*
322 : : #* Output: ---
323 : : #*
324 : : #************************************************************************/
325 : :
326 : 0 : void ScColRowNameRangesDlg::AdjustColRowData( const ScRange& rDataRange,sal_Bool bRef)
327 : : {
328 : 0 : theCurData = rDataRange;
329 [ # # ]: 0 : if ( aBtnColHead.IsChecked() )
330 : : { // Datenbereich gleiche Spalten wie Koepfe
331 : 0 : theCurData.aStart.SetCol( theCurArea.aStart.Col() );
332 : 0 : theCurData.aEnd.SetCol( theCurArea.aEnd.Col() );
333 [ # # ][ # # ]: 0 : if ( theCurData.Intersects( theCurArea ) )
334 : : {
335 : 0 : SCROW nRow1 = theCurArea.aStart.Row();
336 : 0 : SCROW nRow2 = theCurArea.aEnd.Row();
337 [ # # ][ # # ]: 0 : if ( nRow1 > 0
[ # # # # ]
338 : 0 : && (theCurData.aEnd.Row() < nRow2 || nRow2 == MAXROW) )
339 : : { // Data oben
340 : 0 : theCurData.aEnd.SetRow( nRow1 - 1 );
341 [ # # ]: 0 : if ( theCurData.aStart.Row() > theCurData.aEnd.Row() )
342 : 0 : theCurData.aStart.SetRow( theCurData.aEnd.Row() );
343 : : }
344 : : else
345 : : { // Data unten
346 : 0 : theCurData.aStart.SetRow( nRow2 + 1 );
347 [ # # ]: 0 : if ( theCurData.aStart.Row() > theCurData.aEnd.Row() )
348 : 0 : theCurData.aEnd.SetRow( theCurData.aStart.Row() );
349 : : }
350 : : }
351 : : }
352 : : else
353 : : { // Datenbereich gleiche Zeilen wie Koepfe
354 : 0 : theCurData.aStart.SetRow( theCurArea.aStart.Row() );
355 : 0 : theCurData.aEnd.SetRow( theCurArea.aEnd.Row() );
356 [ # # ][ # # ]: 0 : if ( theCurData.Intersects( theCurArea ) )
357 : : {
358 : 0 : SCCOL nCol1 = theCurArea.aStart.Col();
359 : 0 : SCCOL nCol2 = theCurArea.aEnd.Col();
360 [ # # ][ # # ]: 0 : if ( nCol1 > 0
[ # # # # ]
361 : 0 : && (theCurData.aEnd.Col() < nCol2 || nCol2 == MAXCOL) )
362 : : { // Data links
363 : 0 : theCurData.aEnd.SetCol( nCol1 - 1 );
364 [ # # ]: 0 : if ( theCurData.aStart.Col() > theCurData.aEnd.Col() )
365 : 0 : theCurData.aStart.SetCol( theCurData.aEnd.Col() );
366 : : }
367 : : else
368 : : { // Data rechts
369 : 0 : theCurData.aStart.SetCol( nCol2 + 1 );
370 [ # # ]: 0 : if ( theCurData.aStart.Col() > theCurData.aEnd.Col() )
371 : 0 : theCurData.aEnd.SetCol( theCurData.aStart.Col() );
372 : : }
373 : : }
374 : : }
375 [ # # ]: 0 : String aStr;
376 [ # # ][ # # ]: 0 : theCurData.Format( aStr, SCR_ABS_3D, pDoc, pDoc->GetAddressConvention() );
377 : :
378 [ # # ]: 0 : if(bRef)
379 [ # # ]: 0 : aEdAssign2.SetRefString( aStr );
380 : : else
381 [ # # ]: 0 : aEdAssign2.SetText( aStr );
382 : :
383 [ # # ][ # # ]: 0 : aEdAssign2.SetSelection( Selection( SELECTION_MAX, SELECTION_MAX ) );
384 : 0 : }
385 : :
386 : :
387 : : /*************************************************************************
388 : : #* Member: SetReference
389 : : #*------------------------------------------------------------------------
390 : : #*
391 : : #* Klasse: ScColRowNameRangesDlg
392 : : #*
393 : : #* Funktion: Uebergabe eines mit der Maus selektierten Tabellen-
394 : : #* bereiches, der dann als neue Selektion im Referenz-
395 : : #* Fenster angezeigt wird.
396 : : #*
397 : : #* Input: Bereich fuer Labels
398 : : #* Dokumentklasse
399 : : #*
400 : : #* Output: ---
401 : : #*
402 : : #************************************************************************/
403 : :
404 : 0 : void ScColRowNameRangesDlg::SetReference( const ScRange& rRef, ScDocument* /* pDoc */ )
405 : : {
406 [ # # ]: 0 : if ( pEdActive )
407 : : {
408 [ # # ]: 0 : if ( rRef.aStart != rRef.aEnd )
409 [ # # ]: 0 : RefInputStart( pEdActive );
410 : :
411 [ # # ]: 0 : String aRefStr;
412 [ # # ]: 0 : if ( pEdActive == &aEdAssign )
413 [ # # ]: 0 : SetColRowData( rRef, sal_True );
414 : : else
415 [ # # ]: 0 : AdjustColRowData( rRef, sal_True );
416 [ # # ]: 0 : aBtnColHead.Enable();
417 [ # # ]: 0 : aBtnRowHead.Enable();
418 [ # # ]: 0 : aBtnAdd.Enable();
419 [ # # ][ # # ]: 0 : aBtnRemove.Disable();
420 : : }
421 : 0 : }
422 : :
423 : :
424 : : /*************************************************************************
425 : : #* Member: Close
426 : : #*------------------------------------------------------------------------
427 : : #*
428 : : #* Klasse: ScColRowNameRangesDlg
429 : : #*
430 : : #* Funktion: Schliessen des Fensters
431 : : #*
432 : : #* Input: ---
433 : : #*
434 : : #* Output: ---
435 : : #*
436 : : #************************************************************************/
437 : :
438 : 0 : sal_Bool ScColRowNameRangesDlg::Close()
439 : : {
440 : 0 : return DoClose( ScColRowNameRangesDlgWrapper::GetChildWindowId() );
441 : : }
442 : :
443 : :
444 : : /*************************************************************************
445 : : #* Member: SetActive
446 : : #*------------------------------------------------------------------------
447 : : #*
448 : : #* Klasse: ScColRowNameRangesDlg
449 : : #*
450 : : #* Funktion: Aktivieren des Fensters
451 : : #*
452 : : #* Input: ---
453 : : #*
454 : : #* Output: ---
455 : : #*
456 : : #************************************************************************/
457 : :
458 : 0 : void ScColRowNameRangesDlg::SetActive()
459 : : {
460 [ # # ]: 0 : if ( bDlgLostFocus )
461 : : {
462 : 0 : bDlgLostFocus = false;
463 [ # # ]: 0 : if( pEdActive )
464 : 0 : pEdActive->GrabFocus();
465 : : }
466 : : else
467 : 0 : GrabFocus();
468 : :
469 [ # # ]: 0 : if( pEdActive == &aEdAssign )
470 : 0 : Range1DataModifyHdl( 0 );
471 [ # # ]: 0 : else if( pEdActive == &aEdAssign2 )
472 : 0 : Range2DataModifyHdl( 0 );
473 : :
474 : 0 : RefInputDone();
475 : 0 : }
476 : :
477 : :
478 : : /*************************************************************************
479 : : #* Member: UpdateNames
480 : : #*------------------------------------------------------------------------
481 : : #*
482 : : #* Klasse: ScColRowNameRangesDlg
483 : : #*
484 : : #* Funktion: Aktualisieren der Namen
485 : : #*
486 : : #* Input: ---
487 : : #*
488 : : #* Output: ---
489 : : #*
490 : : #************************************************************************/
491 : :
492 : 0 : void ScColRowNameRangesDlg::UpdateNames()
493 : : {
494 [ # # ]: 0 : aLbRange.SetUpdateMode( false );
495 : : //-----------------------------------------------------------
496 [ # # ]: 0 : aLbRange.Clear();
497 [ # # ]: 0 : aRangeMap.clear();
498 [ # # ][ # # ]: 0 : aEdAssign.SetText( EMPTY_STRING );
499 : :
500 : : size_t nCount, j;
501 : : sal_uInt16 nPos; //@008 Hilfsvariable q eingefuegt
502 : :
503 : : SCCOL nCol1;
504 : : SCROW nRow1; //Erweiterung fuer Bereichsnamen
505 : : SCTAB nTab1;
506 : : SCCOL nCol2;
507 : : SCROW nRow2;
508 : : SCTAB nTab2;
509 [ # # ]: 0 : String rString;
510 [ # # ]: 0 : String strShow;
511 [ # # ]: 0 : const ScAddress::Details aDetails(pDoc->GetAddressConvention());
512 : :
513 [ # # ]: 0 : String aString;
514 : 0 : rtl::OUString strDelim(" --- ");
515 [ # # ]: 0 : aString = strDelim;
516 [ # # ][ # # ]: 0 : aString += ScGlobal::GetRscString( STR_COLUMN );
517 [ # # ]: 0 : aString += strDelim;
518 [ # # ]: 0 : nPos = aLbRange.InsertEntry( aString );
519 [ # # ]: 0 : aLbRange.SetEntryData( nPos, (void*)nEntryDataDelim );
520 [ # # ][ # # ]: 0 : if ( (nCount = xColNameRanges->size()) > 0 )
521 : : {
522 : : ScRangePair** ppSortArray = xColNameRanges->CreateNameSortedArray(
523 [ # # ]: 0 : nCount, pDoc );
524 [ # # ]: 0 : for ( j=0; j < nCount; j++ )
525 : : {
526 : 0 : const ScRange aRange(ppSortArray[j]->GetRange(0));
527 [ # # ]: 0 : aRange.Format( aString, SCR_ABS_3D, pDoc, aDetails );
528 : :
529 : : //@008 Hole Bereichsparameter aus Dok
530 : 0 : ppSortArray[j]->GetRange(0).GetVars( nCol1, nRow1, nTab1,
531 : 0 : nCol2, nRow2, nTab2 );
532 : 0 : SCCOL q=nCol1+3;
533 [ # # ]: 0 : if(q>nCol2) q=nCol2;
534 : : //@008 Baue String zusammen
535 [ # # ]: 0 : strShow.AssignAscii(RTL_CONSTASCII_STRINGPARAM(" ["));
536 [ # # ]: 0 : if(pDoc!=NULL)
537 : : {
538 [ # # ]: 0 : pDoc->GetString(nCol1, nRow1, nTab1,rString);
539 [ # # ]: 0 : strShow +=rString;
540 [ # # ]: 0 : for(SCCOL i=nCol1+1;i<=q;i++)
541 : : {
542 [ # # ]: 0 : strShow.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
543 [ # # ]: 0 : pDoc->GetString(i, nRow1, nTab1,rString);
544 [ # # ]: 0 : strShow += rString;
545 : : }
546 : : }
547 [ # # ]: 0 : if(q<nCol2) // Zu lang? Ergaenzen um ",..."
548 : : {
549 [ # # ]: 0 : strShow.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", ..."));
550 : : }
551 [ # # ]: 0 : strShow += ']';
552 : :
553 : : //@008 String einfuegen in Listbox
554 [ # # ]: 0 : String aInsStr = aString;
555 [ # # ]: 0 : aInsStr += strShow;
556 [ # # ]: 0 : nPos = aLbRange.InsertEntry( aInsStr );
557 [ # # ][ # # ]: 0 : aRangeMap.insert( NameRangeMap::value_type(aInsStr, aRange) );
[ # # ]
558 [ # # ]: 0 : aLbRange.SetEntryData( nPos, (void*)nEntryDataCol );
559 [ # # ]: 0 : }
560 [ # # ]: 0 : delete [] ppSortArray;
561 : : }
562 [ # # ]: 0 : aString = strDelim;
563 [ # # ][ # # ]: 0 : aString += ScGlobal::GetRscString( STR_ROW );
564 [ # # ]: 0 : aString += strDelim;
565 [ # # ]: 0 : nPos = aLbRange.InsertEntry( aString );
566 [ # # ]: 0 : aLbRange.SetEntryData( nPos, (void*)nEntryDataDelim );
567 [ # # ][ # # ]: 0 : if ( (nCount = xRowNameRanges->size()) > 0 )
568 : : {
569 : : ScRangePair** ppSortArray = xRowNameRanges->CreateNameSortedArray(
570 [ # # ]: 0 : nCount, pDoc );
571 [ # # ]: 0 : for ( j=0; j < nCount; j++ )
572 : : {
573 : 0 : const ScRange aRange(ppSortArray[j]->GetRange(0));
574 [ # # ]: 0 : aRange.Format( aString, SCR_ABS_3D, pDoc, aDetails );
575 : :
576 : : //@008 Ab hier baue String fuer Zeilen
577 : 0 : ppSortArray[j]->GetRange(0).GetVars( nCol1, nRow1, nTab1,
578 : 0 : nCol2, nRow2, nTab2 );
579 : 0 : SCROW q=nRow1+3;
580 [ # # ]: 0 : if(q>nRow2) q=nRow2;
581 [ # # ]: 0 : strShow.AssignAscii(RTL_CONSTASCII_STRINGPARAM(" ["));
582 [ # # ]: 0 : if(pDoc!=NULL)
583 : : {
584 [ # # ]: 0 : pDoc->GetString(nCol1, nRow1, nTab1,rString);
585 [ # # ]: 0 : strShow += rString;
586 [ # # ]: 0 : for(SCROW i=nRow1+1;i<=q;i++)
587 : : {
588 [ # # ]: 0 : strShow.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
589 [ # # ]: 0 : pDoc->GetString(nCol1, i, nTab1,rString);
590 [ # # ]: 0 : strShow += rString;
591 : : }
592 : : }
593 [ # # ]: 0 : if(q<nRow2)
594 : : {
595 [ # # ]: 0 : strShow.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", ..."));
596 : : }
597 [ # # ]: 0 : strShow += ']';
598 : :
599 [ # # ]: 0 : String aInsStr = aString;
600 [ # # ]: 0 : aInsStr += strShow;
601 [ # # ]: 0 : nPos = aLbRange.InsertEntry( aInsStr );
602 [ # # ][ # # ]: 0 : aRangeMap.insert( NameRangeMap::value_type(aInsStr, aRange) );
[ # # ]
603 [ # # ]: 0 : aLbRange.SetEntryData( nPos, (void*)nEntryDataRow );
604 [ # # ]: 0 : }
605 [ # # ]: 0 : delete [] ppSortArray;
606 : : }
607 : : //-----------------------------------------------------------
608 [ # # ]: 0 : aLbRange.SetUpdateMode( sal_True );
609 [ # # ][ # # ]: 0 : aLbRange.Invalidate();
[ # # ][ # # ]
610 : 0 : }
611 : :
612 : :
613 : : /*************************************************************************
614 : : #* Member: UpdateRangeData
615 : : #*------------------------------------------------------------------------
616 : : #*
617 : : #* Klasse: ScColRowNameRangesDlg
618 : : #*
619 : : #* Funktion: Aktualisieren der Bereichsdaten
620 : : #*
621 : : #* Input: Bereichs-String
622 : : #* Flag fuer Spalten
623 : : #*
624 : : #* Output: ---
625 : : #*
626 : : #************************************************************************/
627 : :
628 : 0 : void ScColRowNameRangesDlg::UpdateRangeData( const ScRange& rRange, sal_Bool bColName )
629 : : {
630 : 0 : ScRangePair* pPair = NULL;
631 : 0 : sal_Bool bFound = false;
632 [ # # ][ # # ]: 0 : if ( bColName && (pPair = xColNameRanges->Find( rRange )) != NULL )
[ # # ]
633 : 0 : bFound = sal_True;
634 [ # # ][ # # ]: 0 : else if ( !bColName && (pPair = xRowNameRanges->Find( rRange )) != NULL )
[ # # ]
635 : 0 : bFound = sal_True;
636 : :
637 [ # # ]: 0 : if ( bFound )
638 : : {
639 [ # # ]: 0 : const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
640 [ # # ]: 0 : String aStr;
641 : 0 : theCurArea = rRange;
642 [ # # ]: 0 : theCurArea.Format( aStr, SCR_ABS_3D, pDoc, eConv );
643 [ # # ]: 0 : aEdAssign.SetText( aStr );
644 [ # # ]: 0 : aBtnAdd.Disable();
645 [ # # ]: 0 : aBtnRemove.Enable();
646 [ # # ]: 0 : aBtnColHead.Check( bColName );
647 [ # # ]: 0 : aBtnRowHead.Check( !bColName );
648 : 0 : theCurData = pPair->GetRange(1);
649 [ # # ]: 0 : theCurData.Format( aStr, SCR_ABS_3D, pDoc, eConv );
650 [ # # ][ # # ]: 0 : aEdAssign2.SetText( aStr );
651 : : }
652 : : else
653 : : {
654 : 0 : aBtnAdd.Enable();
655 : 0 : aBtnRemove.Disable();
656 : : }
657 : 0 : aBtnColHead.Enable();
658 : 0 : aBtnRowHead.Enable();
659 : 0 : aEdAssign2.Enable();
660 : 0 : aRbAssign2.Enable();
661 : 0 : }
662 : :
663 : :
664 : : /*************************************************************************
665 : : #* Member: IsRefInputMode
666 : : #*------------------------------------------------------------------------
667 : : #*
668 : : #* Klasse: ScColRowNameRangesDlg
669 : : #*
670 : : #* Funktion: Abfragefunktion fuer Referenz- Input- Mode.
671 : : #*
672 : : #* Input: Bereichs-String
673 : : #* Flag fuer Spalten
674 : : #*
675 : : #* Output: true, wenn Referenz- Input- Mode
676 : : #*
677 : : #************************************************************************/
678 : :
679 : 0 : sal_Bool ScColRowNameRangesDlg::IsRefInputMode() const
680 : : {
681 : 0 : return (pEdActive != NULL);
682 : : }
683 : :
684 : : //------------------------------------------------------------------------
685 : : // Handler:
686 : : // ========
687 : :
688 : : /*************************************************************************
689 : : #* Handler: OkBtnHdl
690 : : #*------------------------------------------------------------------------
691 : : #*
692 : : #* Klasse: ScColRowNameRangesDlg
693 : : #*
694 : : #* Funktion: Wird ausgeloest, wenn der OK- Button gedrueckt wurde.
695 : : #* Hinzufuegen- Button ausloesen, und die neu einge-
696 : : #* stellten Bereiche ans Dokument uebergeben.
697 : : #* Fensterschliessen- Anweisung ausloesen.
698 : : #* Input: ---
699 : : #*
700 : : #* Output: ---
701 : : #*
702 : : #************************************************************************/
703 : :
704 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, OkBtnHdl)
705 : : {
706 : 0 : AddBtnHdl( 0 );
707 : :
708 : : // die RangeLists den Refs am Doc zuweisen
709 : 0 : pDoc->GetColNameRangesRef() = xColNameRanges;
710 : 0 : pDoc->GetRowNameRangesRef() = xRowNameRanges;
711 : : // geaenderte Datenbereiche muessen sich auswirken
712 : 0 : pDoc->CompileColRowNameFormula();
713 : 0 : ScDocShell* pDocShell = pViewData->GetDocShell();
714 [ # # ][ # # ]: 0 : pDocShell->PostPaint(ScRange(0, 0, 0, MAXCOL, MAXROW, MAXTAB), PAINT_GRID);
[ # # ]
715 : 0 : pDocShell->SetDocumentModified();
716 : :
717 : 0 : Close();
718 : 0 : return 0;
719 : : }
720 : :
721 : :
722 : : /*************************************************************************
723 : : #* Handler: CancelBtnHdl
724 : : #*------------------------------------------------------------------------
725 : : #*
726 : : #* Klasse: ScColRowNameRangesDlg
727 : : #*
728 : : #* Funktion: Fensterschliessen- Anweisung ausloesen.
729 : : #*
730 : : #* Input: ---
731 : : #*
732 : : #* Output: ---
733 : : #*
734 : : #************************************************************************/
735 : :
736 : 0 : IMPL_LINK_NOARG_INLINE_START(ScColRowNameRangesDlg, CancelBtnHdl)
737 : : {
738 : 0 : Close();
739 : 0 : return 0;
740 : : }
741 : 0 : IMPL_LINK_NOARG_INLINE_END(ScColRowNameRangesDlg, CancelBtnHdl)
742 : :
743 : :
744 : : /*************************************************************************
745 : : #* Handler: AddBtnHdl
746 : : #*------------------------------------------------------------------------
747 : : #*
748 : : #* Klasse: ScColRowNameRangesDlg
749 : : #*
750 : : #* Funktion: Nach betaetigen des Hinzufuegen- Buttons, werden
751 : : #* die Bereichsangaben eingestellt und in der
752 : : #* Listbox dargestellt.
753 : : #*
754 : : #* Input: ---
755 : : #*
756 : : #* Output: ---
757 : : #*
758 : : #************************************************************************/
759 : :
760 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, AddBtnHdl)
761 : : {
762 [ # # ]: 0 : String aNewArea( aEdAssign.GetText() );
763 [ # # ]: 0 : String aNewData( aEdAssign2.GetText() );
764 : :
765 [ # # ][ # # ]: 0 : if ( aNewArea.Len() > 0 && aNewData.Len() > 0 )
[ # # ]
766 : : {
767 [ # # ]: 0 : const formula::FormulaGrammar::AddressConvention eConv = pDoc->GetAddressConvention();
768 : 0 : ScRange aRange1, aRange2;
769 : : sal_Bool bOk1;
770 [ # # ][ # # ]: 0 : if ( (bOk1 = ((aRange1.ParseAny( aNewArea, pDoc, eConv ) & SCA_VALID) == SCA_VALID)) != false
[ # # ]
[ # # # # ]
[ # # ]
771 [ # # ][ # # ]: 0 : && ((aRange2.ParseAny( aNewData, pDoc, eConv ) & SCA_VALID) == SCA_VALID) )
[ # # ]
772 : : {
773 : 0 : theCurArea = aRange1;
774 [ # # ]: 0 : AdjustColRowData( aRange2 );
775 : : ScRangePair* pPair;
776 [ # # ][ # # ]: 0 : if ( ( pPair = xColNameRanges->Find( theCurArea ) ) != NULL )
777 : : {
778 [ # # ]: 0 : xColNameRanges->Remove( pPair );
779 : 0 : delete pPair;
780 : : }
781 [ # # ][ # # ]: 0 : if ( ( pPair = xRowNameRanges->Find( theCurArea ) ) != NULL )
782 : : {
783 [ # # ]: 0 : xRowNameRanges->Remove( pPair );
784 : 0 : delete pPair;
785 : : }
786 [ # # ]: 0 : if ( aBtnColHead.IsChecked() )
787 [ # # ]: 0 : xColNameRanges->Join( ScRangePair( theCurArea, theCurData ) );
788 : : else
789 [ # # ]: 0 : xRowNameRanges->Join( ScRangePair( theCurArea, theCurData ) );
790 : :
791 [ # # ]: 0 : UpdateNames();
792 : :
793 [ # # ]: 0 : aEdAssign.GrabFocus();
794 [ # # ]: 0 : aBtnAdd.Disable();
795 [ # # ]: 0 : aBtnRemove.Disable();
796 [ # # ][ # # ]: 0 : aEdAssign.SetText( EMPTY_STRING );
797 [ # # ]: 0 : aBtnColHead.Check( sal_True );
798 [ # # ]: 0 : aBtnRowHead.Check( false );
799 [ # # ][ # # ]: 0 : aEdAssign2.SetText( EMPTY_STRING );
800 : 0 : theCurArea = ScRange();
801 : 0 : theCurData = theCurArea;
802 [ # # ]: 0 : Range1SelectHdl( 0 );
803 : : }
804 : : else
805 : : {
806 [ # # ][ # # ]: 0 : ERRORBOX( ScGlobal::GetRscString(STR_INVALIDTABNAME) );
[ # # ][ # # ]
807 [ # # ]: 0 : if ( !bOk1 )
808 [ # # ]: 0 : aEdAssign.GrabFocus();
809 : : else
810 [ # # ]: 0 : aEdAssign2.GrabFocus();
811 : : }
812 : : }
813 [ # # ][ # # ]: 0 : return 0;
814 : : }
815 : :
816 : :
817 : : /*************************************************************************
818 : : #* Handler: RemoveBtnHdl
819 : : #*------------------------------------------------------------------------
820 : : #*
821 : : #* Klasse: ScColRowNameRangesDlg
822 : : #*
823 : : #* Funktion: Nach betaetigen des Loeschen- Buttons, wird
824 : : #* die markierte Bereichsangabe geloescht.
825 : : #*
826 : : #* Input: ---
827 : : #*
828 : : #* Output: ---
829 : : #*
830 : : #************************************************************************/
831 : :
832 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, RemoveBtnHdl)
833 : : {
834 [ # # ]: 0 : String aRangeStr = aLbRange.GetSelectEntry();
835 [ # # ]: 0 : sal_uInt16 nSelectPos = aLbRange.GetSelectEntryPos();
836 : : sal_Bool bColName =
837 [ # # ]: 0 : ((sal_uLong)aLbRange.GetEntryData( nSelectPos ) == nEntryDataCol);
838 [ # # ]: 0 : NameRangeMap::const_iterator itr = aRangeMap.find(aRangeStr);
839 [ # # ][ # # ]: 0 : if (itr == aRangeMap.end())
840 : 0 : return 0;
841 [ # # ]: 0 : const ScRange& rRange = itr->second;
842 : :
843 : 0 : ScRangePair* pPair = NULL;
844 : 0 : sal_Bool bFound = false;
845 [ # # ][ # # ]: 0 : if ( bColName && (pPair = xColNameRanges->Find( rRange )) != NULL )
[ # # ][ # # ]
846 : 0 : bFound = sal_True;
847 [ # # ][ # # ]: 0 : else if ( !bColName && (pPair = xRowNameRanges->Find( rRange )) != NULL )
[ # # ][ # # ]
848 : 0 : bFound = sal_True;
849 [ # # ]: 0 : if ( bFound )
850 : : {
851 [ # # ][ # # ]: 0 : String aStrDelMsg = ScGlobal::GetRscString( STR_QUERY_DELENTRY );
852 [ # # ]: 0 : String aMsg = aStrDelMsg.GetToken( 0, '#' );
853 : :
854 [ # # ]: 0 : aMsg += aRangeStr;
855 [ # # ][ # # ]: 0 : aMsg += aStrDelMsg.GetToken( 1, '#' );
[ # # ]
856 : :
857 [ # # ][ # # ]: 0 : if ( RET_YES == QUERYBOX(aMsg) )
[ # # ][ # # ]
858 : : {
859 [ # # ]: 0 : if ( bColName )
860 [ # # ]: 0 : xColNameRanges->Remove( pPair );
861 : : else
862 [ # # ]: 0 : xRowNameRanges->Remove( pPair );
863 : 0 : delete pPair;
864 : :
865 [ # # ]: 0 : UpdateNames();
866 [ # # ]: 0 : sal_uInt16 nCnt = aLbRange.GetEntryCount();
867 [ # # ]: 0 : if ( nSelectPos >= nCnt )
868 : : {
869 [ # # ]: 0 : if ( nCnt )
870 : 0 : nSelectPos = nCnt - 1;
871 : : else
872 : 0 : nSelectPos = 0;
873 : : }
874 [ # # ]: 0 : aLbRange.SelectEntryPos( nSelectPos );
875 [ # # ][ # # ]: 0 : if ( nSelectPos &&
[ # # ]
876 [ # # ]: 0 : (sal_uLong)aLbRange.GetEntryData( nSelectPos ) == nEntryDataDelim )
877 [ # # ]: 0 : aLbRange.SelectEntryPos( --nSelectPos ); // ---Zeile---
878 : :
879 [ # # ]: 0 : aLbRange.GrabFocus();
880 [ # # ]: 0 : aBtnAdd.Disable();
881 [ # # ]: 0 : aBtnRemove.Disable();
882 [ # # ][ # # ]: 0 : aEdAssign.SetText( EMPTY_STRING );
883 : 0 : theCurArea = theCurData = ScRange();
884 [ # # ]: 0 : aBtnColHead.Check( sal_True );
885 [ # # ]: 0 : aBtnRowHead.Check( false );
886 [ # # ][ # # ]: 0 : aEdAssign2.SetText( EMPTY_STRING );
887 [ # # ]: 0 : Range1SelectHdl( 0 );
888 [ # # ][ # # ]: 0 : }
889 : : }
890 [ # # ]: 0 : return 0;
891 : : }
892 : :
893 : :
894 : : /*************************************************************************
895 : : #* Handler: Range1SelectHdl
896 : : #*------------------------------------------------------------------------
897 : : #*
898 : : #* Klasse: ScColRowNameRangesDlg
899 : : #*
900 : : #* Funktion: Wenn Zeile in Listbox ausgewaehlt wird,
901 : : #* werden die Eingabefelder entsprechend
902 : : #* eingestellt.
903 : : #*
904 : : #* Input: ---
905 : : #*
906 : : #* Output: ---
907 : : #*
908 : : #************************************************************************/
909 : :
910 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, Range1SelectHdl)
911 : : {
912 [ # # ]: 0 : sal_uInt16 nSelectPos = aLbRange.GetSelectEntryPos();
913 [ # # ]: 0 : sal_uInt16 nCnt = aLbRange.GetEntryCount();
914 : 0 : sal_uInt16 nMoves = 0;
915 [ # # ][ # # ]: 0 : while ( nSelectPos < nCnt
[ # # ]
916 [ # # ]: 0 : && (sal_uLong)aLbRange.GetEntryData( nSelectPos ) == nEntryDataDelim )
917 : : { // skip Delimiter
918 : 0 : ++nMoves;
919 [ # # ]: 0 : aLbRange.SelectEntryPos( ++nSelectPos );
920 : : }
921 [ # # ]: 0 : String aRangeStr = aLbRange.GetSelectEntry();
922 [ # # ]: 0 : if ( nMoves )
923 : : {
924 [ # # ][ # # ]: 0 : if ( nSelectPos > 1 && nSelectPos >= nCnt )
925 : : { // am Ende nicht auf dem " --- Zeile --- " Delimiter stehenbleiben
926 : : // wenn davor Eintraege existieren
927 : 0 : nSelectPos = nCnt - 2;
928 [ # # ]: 0 : aLbRange.SelectEntryPos( nSelectPos );
929 [ # # ][ # # ]: 0 : aRangeStr = aLbRange.GetSelectEntry();
[ # # ]
930 : : }
931 [ # # ][ # # ]: 0 : else if ( nSelectPos > 2 && nSelectPos < nCnt && aRangeStr.Len()
[ # # ][ # # ]
[ # # ]
932 [ # # ][ # # ]: 0 : && aRangeStr == aEdAssign.GetText() )
[ # # ][ # # ]
[ # # ]
933 : : { // nach oben wandern statt nach unten auf die vorherige Position
934 : 0 : nSelectPos -= 2;
935 [ # # ]: 0 : aLbRange.SelectEntryPos( nSelectPos );
936 [ # # ][ # # ]: 0 : aRangeStr = aLbRange.GetSelectEntry();
[ # # ]
937 : : }
938 : : }
939 [ # # ]: 0 : NameRangeMap::const_iterator itr = aRangeMap.find(aRangeStr);
940 [ # # ][ # # ]: 0 : if ( itr != aRangeMap.end() )
941 : : {
942 : : sal_Bool bColName =
943 [ # # ]: 0 : ((sal_uLong)aLbRange.GetEntryData( nSelectPos ) == nEntryDataCol);
944 [ # # ][ # # ]: 0 : UpdateRangeData( itr->second, bColName );
945 [ # # ]: 0 : aBtnAdd.Disable();
946 [ # # ]: 0 : aBtnRemove.Enable();
947 : : }
948 : : else
949 : : {
950 [ # # ][ # # ]: 0 : if ( aEdAssign.GetText().Len() > 0 )
[ # # ]
951 : : {
952 [ # # ][ # # ]: 0 : if ( aEdAssign2.GetText().Len() > 0 )
[ # # ]
953 [ # # ]: 0 : aBtnAdd.Enable();
954 : : else
955 [ # # ]: 0 : aBtnAdd.Disable();
956 [ # # ]: 0 : aBtnColHead.Enable();
957 [ # # ]: 0 : aBtnRowHead.Enable();
958 [ # # ]: 0 : aEdAssign2.Enable();
959 [ # # ]: 0 : aRbAssign2.Enable();
960 : : }
961 : : else
962 : : {
963 [ # # ]: 0 : aBtnAdd.Disable();
964 [ # # ]: 0 : aBtnColHead.Disable();
965 [ # # ]: 0 : aBtnRowHead.Disable();
966 [ # # ]: 0 : aEdAssign2.Disable();
967 [ # # ]: 0 : aRbAssign2.Disable();
968 : : }
969 [ # # ]: 0 : aBtnRemove.Disable();
970 [ # # ]: 0 : aEdAssign.GrabFocus();
971 : : }
972 : :
973 [ # # ]: 0 : aEdAssign.Enable();
974 [ # # ]: 0 : aRbAssign.Enable();
975 : :
976 [ # # ]: 0 : return 0;
977 : : }
978 : :
979 : :
980 : : /*************************************************************************
981 : : #* Handler: Range1DataModifyHdl
982 : : #*------------------------------------------------------------------------
983 : : #*
984 : : #* Klasse: ScColRowNameRangesDlg
985 : : #*
986 : : #* Funktion: Wird ausgeloest, wenn in der Tabelle, der Label-
987 : : #* Bereich geaendert wurde.
988 : : #*
989 : : #* Input: ---
990 : : #*
991 : : #* Output: ---
992 : : #*
993 : : #************************************************************************/
994 : :
995 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, Range1DataModifyHdl)
996 : : {
997 [ # # ]: 0 : String aNewArea( aEdAssign.GetText() );
998 : 0 : sal_Bool bValid = false;
999 [ # # ]: 0 : if ( aNewArea.Len() > 0 )
1000 : : {
1001 : 0 : ScRange aRange;
1002 [ # # ][ # # ]: 0 : if ( (aRange.ParseAny( aNewArea, pDoc, pDoc->GetAddressConvention() ) & SCA_VALID) == SCA_VALID )
[ # # ]
1003 : : {
1004 [ # # ]: 0 : SetColRowData( aRange );
1005 : 0 : bValid = sal_True;
1006 : : }
1007 : : }
1008 [ # # ]: 0 : if ( bValid )
1009 : : {
1010 [ # # ]: 0 : aBtnAdd.Enable();
1011 [ # # ]: 0 : aBtnColHead.Enable();
1012 [ # # ]: 0 : aBtnRowHead.Enable();
1013 [ # # ]: 0 : aEdAssign2.Enable();
1014 [ # # ]: 0 : aRbAssign2.Enable();
1015 : : }
1016 : : else
1017 : : {
1018 [ # # ]: 0 : aBtnAdd.Disable();
1019 [ # # ]: 0 : aBtnColHead.Disable();
1020 [ # # ]: 0 : aBtnRowHead.Disable();
1021 [ # # ]: 0 : aEdAssign2.Disable();
1022 [ # # ]: 0 : aRbAssign2.Disable();
1023 : : }
1024 [ # # ]: 0 : aBtnRemove.Disable();
1025 [ # # ]: 0 : return 0;
1026 : : }
1027 : :
1028 : :
1029 : : /*************************************************************************
1030 : : #* Handler: Range2DataModifyHdl
1031 : : #*------------------------------------------------------------------------
1032 : : #*
1033 : : #* Klasse: ScColRowNameRangesDlg
1034 : : #*
1035 : : #* Funktion: Wird ausgeloest, wenn in der Tabelle, der Daten-
1036 : : #* Bereich geaendert wurde
1037 : : #*
1038 : : #* Input: ---
1039 : : #*
1040 : : #* Output: ---
1041 : : #*
1042 : : #************************************************************************/
1043 : :
1044 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, Range2DataModifyHdl)
1045 : : {
1046 [ # # ]: 0 : String aNewData( aEdAssign2.GetText() );
1047 [ # # ]: 0 : if ( aNewData.Len() > 0 )
1048 : : {
1049 : 0 : ScRange aRange;
1050 [ # # ][ # # ]: 0 : if ( (aRange.ParseAny( aNewData, pDoc, pDoc->GetAddressConvention() ) & SCA_VALID) == SCA_VALID )
[ # # ]
1051 : : {
1052 [ # # ]: 0 : AdjustColRowData( aRange );
1053 [ # # ]: 0 : aBtnAdd.Enable();
1054 : : }
1055 : : else
1056 [ # # ]: 0 : aBtnAdd.Disable();
1057 : : }
1058 : : else
1059 : : {
1060 [ # # ]: 0 : aBtnAdd.Disable();
1061 : : }
1062 [ # # ]: 0 : return 0;
1063 : : }
1064 : :
1065 : :
1066 : : /*************************************************************************
1067 : : #* Handler: ColClickHdl
1068 : : #*------------------------------------------------------------------------
1069 : : #*
1070 : : #* Klasse: ScColRowNameRangesDlg
1071 : : #*
1072 : : #* Funktion: Radiobutton fuer Spalten wurde betaetigt,
1073 : : #* die entsprechenden Einstellungen werden
1074 : : #* vorgenommen
1075 : : #*
1076 : : #* Input: ---
1077 : : #*
1078 : : #* Output: ---
1079 : : #*
1080 : : #************************************************************************/
1081 : :
1082 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, ColClickHdl)
1083 : : {
1084 [ # # ]: 0 : if ( !aBtnColHead.GetSavedValue() )
1085 : : {
1086 [ # # ]: 0 : aBtnColHead.Check( sal_True );
1087 [ # # ]: 0 : aBtnRowHead.Check( false );
1088 [ # # ][ # # ]: 0 : if ( theCurArea.aStart.Row() == 0 && theCurArea.aEnd.Row() == MAXROW )
[ # # ]
1089 : : {
1090 : 0 : theCurArea.aEnd.SetRow( MAXROW - 1 );
1091 [ # # ]: 0 : String aStr;
1092 [ # # ][ # # ]: 0 : theCurArea.Format( aStr, SCR_ABS_3D, pDoc, pDoc->GetAddressConvention() );
1093 [ # # ][ # # ]: 0 : aEdAssign.SetText( aStr );
1094 : : }
1095 : 0 : ScRange aRange( theCurData );
1096 : 0 : aRange.aStart.SetRow( Min( (long)(theCurArea.aEnd.Row() + 1), (long)MAXROW ) );
1097 : 0 : aRange.aEnd.SetRow( MAXROW );
1098 [ # # ]: 0 : AdjustColRowData( aRange );
1099 : : }
1100 : 0 : return 0;
1101 : : }
1102 : :
1103 : :
1104 : : /*************************************************************************
1105 : : #* Handler: RowClickHdl
1106 : : #*------------------------------------------------------------------------
1107 : : #*
1108 : : #* Klasse: ScColRowNameRangesDlg
1109 : : #*
1110 : : #* Funktion: Radiobutton fuer Zeilen wurde betaetigt,
1111 : : #* die entsprechenden Einstellungen werden
1112 : : #* vorgenommen
1113 : : #*
1114 : : #* Input: ---
1115 : : #*
1116 : : #* Output: ---
1117 : : #*
1118 : : #************************************************************************/
1119 : :
1120 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, RowClickHdl)
1121 : : {
1122 [ # # ]: 0 : if ( !aBtnRowHead.GetSavedValue() )
1123 : : {
1124 [ # # ]: 0 : aBtnRowHead.Check( sal_True );
1125 [ # # ]: 0 : aBtnColHead.Check( false );
1126 [ # # ][ # # ]: 0 : if ( theCurArea.aStart.Col() == 0 && theCurArea.aEnd.Col() == MAXCOL )
[ # # ]
1127 : : {
1128 : 0 : theCurArea.aEnd.SetCol( MAXCOL - 1 );
1129 [ # # ]: 0 : String aStr;
1130 [ # # ][ # # ]: 0 : theCurArea.Format( aStr, SCR_ABS_3D, pDoc, pDoc->GetAddressConvention() );
1131 [ # # ][ # # ]: 0 : aEdAssign.SetText( aStr );
1132 : : }
1133 : 0 : ScRange aRange( theCurData );
1134 : 0 : aRange.aStart.SetCol( static_cast<SCCOL>(Min( (long)(theCurArea.aEnd.Col() + 1), (long)MAXCOL )) );
1135 : 0 : aRange.aEnd.SetCol( MAXCOL );
1136 [ # # ]: 0 : AdjustColRowData( aRange );
1137 : : }
1138 : 0 : return 0;
1139 : : }
1140 : :
1141 : :
1142 : 0 : IMPL_LINK( ScColRowNameRangesDlg, GetFocusHdl, Control*, pCtrl )
1143 : : {
1144 [ # # ][ # # ]: 0 : if( (pCtrl == (Control*)&aEdAssign) || (pCtrl == (Control*)&aRbAssign) )
1145 : 0 : pEdActive = &aEdAssign;
1146 [ # # ][ # # ]: 0 : else if( (pCtrl == (Control*)&aEdAssign2) || (pCtrl == (Control*)&aRbAssign2) )
1147 : 0 : pEdActive = &aEdAssign2;
1148 : : else
1149 : 0 : pEdActive = NULL;
1150 : :
1151 [ # # ]: 0 : if( pEdActive )
1152 [ # # ]: 0 : pEdActive->SetSelection( Selection( 0, SELECTION_MAX ) );
1153 : :
1154 : 0 : return 0;
1155 : : }
1156 : :
1157 : :
1158 : 0 : IMPL_LINK_NOARG(ScColRowNameRangesDlg, LoseFocusHdl)
1159 : : {
1160 : 0 : bDlgLostFocus = !IsActive();
1161 : 0 : return 0;
1162 : : }
1163 : :
1164 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|