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
28 #include <sfx2/dispatch.hxx>
29 #include <svl/stritem.hxx>
30
31 #include "tabvwsh.hxx"
32 #include "reffact.hxx"
33 #include "conditio.hxx"
34 #include "stlpool.hxx"
35 #include "uiitems.hxx"
36 #include "document.hxx"
37 #include "scresid.hxx"
38
39 #include "condfrmt.hrc"
40 #include "globstr.hrc"
41
42 #define _CONDFRMT_CXX
43 #include "condfrmt.hxx"
44 #undef _CONDFRMT_CXX
45
46
47 //============================================================================
48 // class ScConditionalFormat
49
50 //----------------------------------------------------------------------------
51 // Konstruktor
52
ScConditionalFormatDlg(SfxBindings * pB,SfxChildWindow * pCW,Window * pParent,ScDocument * pCurDoc,const ScConditionalFormat * pCurrentFormat)53 ScConditionalFormatDlg::ScConditionalFormatDlg(
54 SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
55 ScDocument* pCurDoc,
56 const ScConditionalFormat* pCurrentFormat )
57 : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_CONDFORMAT ),
58
59 aCbxCond1 ( this, ScResId( CBX_COND1 ) ),
60 aLbCond11 ( this, ScResId( LB_COND1_1 ) ),
61 aLbCond12 ( this, ScResId( LB_COND1_2 ) ),
62 aEdtCond11 ( this, this, ScResId( EDT_COND1_1 ) ),
63 aRbCond11 ( this, ScResId( RB_COND1_1 ), &aEdtCond11,this ),
64 aFtCond1And ( this, ScResId( FT_COND1_AND ) ),
65 aEdtCond12 ( this, this, ScResId( EDT_COND1_2 ) ),
66 aRbCond12 ( this, ScResId( RB_COND1_2 ), &aEdtCond12,this ),
67 aFtCond1Template ( this, ScResId( FT_COND1_TEMPLATE ) ),
68 aLbCond1Template ( this, ScResId( LB_COND1_TEMPLATE ) ),
69 aBtnNew1 ( this, ScResId( BTN_COND1_NEW ) ),
70
71 aCbxCond2 ( this, ScResId( CBX_COND2 ) ),
72 aLbCond21 ( this, ScResId( LB_COND2_1 ) ),
73 aLbCond22 ( this, ScResId( LB_COND2_2 ) ),
74 aEdtCond21 ( this, this, ScResId( EDT_COND2_1 ) ),
75 aRbCond21 ( this, ScResId( RB_COND2_1 ), &aEdtCond21,this ),
76 aFtCond2And ( this, ScResId( FT_COND2_AND ) ),
77 aEdtCond22 ( this, this, ScResId( EDT_COND2_2 ) ),
78 aRbCond22 ( this, ScResId( RB_COND2_2 ), &aEdtCond22,this ),
79 aFtCond2Template ( this, ScResId( FT_COND2_TEMPLATE ) ),
80 aLbCond2Template ( this, ScResId( LB_COND2_TEMPLATE ) ),
81 aBtnNew2 ( this, ScResId( BTN_COND2_NEW ) ),
82
83 aCbxCond3 ( this, ScResId( CBX_COND3 ) ),
84 aLbCond31 ( this, ScResId( LB_COND3_1 ) ),
85 aLbCond32 ( this, ScResId( LB_COND3_2 ) ),
86 aEdtCond31 ( this, this, ScResId( EDT_COND3_1 ) ),
87 aRbCond31 ( this, ScResId( RB_COND3_1 ), &aEdtCond31,this ),
88 aFtCond3And ( this, ScResId( FT_COND3_AND ) ),
89 aEdtCond32 ( this, this, ScResId( EDT_COND3_2 ) ),
90 aRbCond32 ( this, ScResId( RB_COND3_2 ), &aEdtCond32,this ),
91 aFtCond3Template ( this, ScResId( FT_COND3_TEMPLATE ) ),
92 aLbCond3Template ( this, ScResId( LB_COND3_TEMPLATE ) ),
93 aBtnNew3 ( this, ScResId( BTN_COND3_NEW ) ),
94
95 aBtnOk ( this, ScResId( BTN_OK ) ),
96 aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
97 aBtnHelp ( this, ScResId( BTN_HELP ) ),
98 aFlSep2 ( this, ScResId( FL_SEP2 ) ),
99 aFlSep1 ( this, ScResId( FL_SEP1 ) ),
100 pEdActive ( NULL ),
101 bDlgLostFocus ( sal_False ),
102
103 pDoc ( pCurDoc )
104 {
105 Point aPos;
106 String aName;
107 SfxStyleSheetBase* pStyle;
108
109 FreeResource();
110
111 // Handler setzen
112 aCbxCond1.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond1Hdl ) );
113 aLbCond11.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond11Hdl ) );
114 aLbCond12.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond12Hdl ) );
115
116 aCbxCond2.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond2Hdl ) );
117 aLbCond21.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond21Hdl ) );
118 aLbCond22.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond22Hdl ) );
119
120 aCbxCond3.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond3Hdl ) );
121 aLbCond31.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond31Hdl ) );
122 aLbCond32.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond32Hdl ) );
123
124 aBtnOk.SetClickHdl ( LINK( this, ScConditionalFormatDlg, BtnHdl ) );
125 //? aBtnCancel.SetClickHdl( LINK( this, ScConditionalFormatDlg, BtnHdl ) );
126
127 Link aLink = LINK( this, ScConditionalFormatDlg, NewBtnHdl );
128 aBtnNew1.SetClickHdl( aLink );
129 aBtnNew2.SetClickHdl( aLink );
130 aBtnNew3.SetClickHdl( aLink );
131
132 aLink = LINK( this, ScConditionalFormatDlg, GetFocusHdl );
133 aEdtCond11.SetGetFocusHdl( aLink );
134 aEdtCond12.SetGetFocusHdl( aLink );
135 aEdtCond21.SetGetFocusHdl( aLink );
136 aEdtCond22.SetGetFocusHdl( aLink );
137 aEdtCond31.SetGetFocusHdl( aLink );
138 aEdtCond32.SetGetFocusHdl( aLink );
139 aRbCond11.SetGetFocusHdl( aLink );
140 aRbCond12.SetGetFocusHdl( aLink );
141 aRbCond21.SetGetFocusHdl( aLink );
142 aRbCond22.SetGetFocusHdl( aLink );
143 aRbCond31.SetGetFocusHdl( aLink );
144 aRbCond32.SetGetFocusHdl( aLink );
145
146 aLink = LINK( this, ScConditionalFormatDlg, LoseFocusHdl );
147 aEdtCond11.SetLoseFocusHdl( aLink );
148 aEdtCond12.SetLoseFocusHdl( aLink );
149 aEdtCond21.SetLoseFocusHdl( aLink );
150 aEdtCond22.SetLoseFocusHdl( aLink );
151 aEdtCond31.SetLoseFocusHdl( aLink );
152 aEdtCond32.SetLoseFocusHdl( aLink );
153 aRbCond11.SetLoseFocusHdl( aLink );
154 aRbCond12.SetLoseFocusHdl( aLink );
155 aRbCond21.SetLoseFocusHdl( aLink );
156 aRbCond22.SetLoseFocusHdl( aLink );
157 aRbCond31.SetLoseFocusHdl( aLink );
158 aRbCond32.SetLoseFocusHdl( aLink );
159
160 // Condition 1
161 aCond1Pos1 = aLbCond12.GetPosPixel(); // Position Edit ohne Listbox
162 aCond1Pos2 = aEdtCond11.GetPosPixel(); // Position Edit mit Listbox
163 aRBtn1Pos1 = aRbCond11.GetPosPixel();
164 aRBtn1Pos2 = aRbCond12.GetPosPixel();
165 aPos = aEdtCond12.GetPosPixel();
166 aPos.X() += aEdtCond12.GetSizePixel().Width(); // rechter Rand
167 aCond1Size3 = aEdtCond11.GetSizePixel();
168 aCond1Size2 = Size( aPos.X() - aCond1Pos2.X(), aCond1Size3.Height() );
169 aCond1Size1 = Size( aPos.X() - aCond1Pos1.X(), aCond1Size3.Height() );
170
171 aCbxCond1.Check();
172 aLbCond11.SelectEntryPos( 0 );
173 aLbCond12.SelectEntryPos( 0 );
174
175 // Condition 2
176 aCond2Pos1 = aLbCond22.GetPosPixel(); // Position Edit ohne Listbox
177 aCond2Pos2 = aEdtCond21.GetPosPixel(); // Position Edit mit Listbox
178 aRBtn2Pos1 = aRbCond21.GetPosPixel();
179 aRBtn2Pos2 = aRbCond22.GetPosPixel();
180 aPos = aEdtCond22.GetPosPixel();
181 aPos.X() += aEdtCond22.GetSizePixel().Width(); // rechter Rand
182 aCond2Size3 = aEdtCond21.GetSizePixel();
183 aCond2Size2 = Size( aPos.X() - aCond2Pos2.X(), aCond2Size3.Height() );
184 aCond2Size1 = Size( aPos.X() - aCond2Pos1.X(), aCond2Size3.Height() );
185
186 aCbxCond2.Check( sal_False );
187 aLbCond21.SelectEntryPos( 0 );
188 aLbCond22.SelectEntryPos( 0 );
189
190 // Condition 3
191 aCond3Pos1 = aLbCond32.GetPosPixel(); // Position Edit ohne Listbox
192 aCond3Pos2 = aEdtCond31.GetPosPixel(); // Position Edit mit Listbox
193 aRBtn3Pos1 = aRbCond31.GetPosPixel();
194 aRBtn3Pos2 = aRbCond32.GetPosPixel();
195 aPos = aEdtCond32.GetPosPixel();
196 aPos.X() += aEdtCond32.GetSizePixel().Width(); // rechter Rand
197 aCond3Size3 = aEdtCond31.GetSizePixel();
198 aCond3Size2 = Size( aPos.X() - aCond3Pos2.X(), aCond3Size3.Height() );
199 aCond3Size1 = Size( aPos.X() - aCond3Pos1.X(), aCond3Size3.Height() );
200
201 aCbxCond3.Check( sal_False );
202 aLbCond31.SelectEntryPos( 0 );
203 aLbCond32.SelectEntryPos( 0 );
204
205 // Vorlagen aus pDoc holen
206 SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
207 for ( pStyle = aStyleIter.First(); pStyle; pStyle = aStyleIter.Next() )
208 {
209 aName = pStyle->GetName();
210 aLbCond1Template.InsertEntry( aName );
211 aLbCond2Template.InsertEntry( aName );
212 aLbCond3Template.InsertEntry( aName );
213 }
214
215 // Vorlagen eintragen
216 //! pStyle = pDoc->GetSelectionStyle( /* ??? const ScMarkData& rMark ??? */ );
217 pStyle = NULL; //!
218 if (pStyle)
219 aName = pStyle->GetName();
220 else
221 aName = ScGlobal::GetRscString(STR_STYLENAME_STANDARD);
222 aLbCond1Template.SelectEntry( aName );
223 aLbCond2Template.SelectEntry( aName );
224 aLbCond3Template.SelectEntry( aName );
225
226 ScAddress aCurPos;
227 ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
228 if (pViewShell)
229 {
230 ScViewData* pData = pViewShell->GetViewData();
231 aCurPos = ScAddress( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
232 }
233
234 // Inhalt aus ConditionalFormat holen
235 if ( pCurrentFormat )
236 {
237 const ScCondFormatEntry* pEntry;
238 if ( pCurrentFormat->Count() > 0 )
239 {
240 pEntry= pCurrentFormat->GetEntry( 0 );
241 aEdtCond11.SetText( pEntry->GetExpression( aCurPos, 0 ) );
242 aLbCond1Template.SelectEntry( pEntry->GetStyle() );
243
244 ScConditionMode eMode = pEntry->GetOperation();
245 if ( eMode == SC_COND_DIRECT ) // via Formel
246 {
247 aLbCond11.SelectEntryPos( 1 );
248 ChangeCond11Hdl( NULL );
249 }
250 else if ( eMode == SC_COND_NONE ) // ???
251 ;
252 else // via Werte
253 {
254 aLbCond12.SelectEntryPos( sal::static_int_cast<sal_uInt16>( eMode ) );
255 if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
256 aEdtCond12.SetText( pEntry->GetExpression( aCurPos, 1 ) );
257 }
258 }
259
260
261 if ( pCurrentFormat->Count() > 1 )
262 {
263 aCbxCond2.Check( sal_True );
264 pEntry= pCurrentFormat->GetEntry( 1 );
265 aEdtCond21.SetText( pEntry->GetExpression( aCurPos, 0 ) );
266 aLbCond2Template.SelectEntry( pEntry->GetStyle() );
267
268 ScConditionMode eMode = pEntry->GetOperation();
269 if ( eMode == SC_COND_DIRECT ) // via Formel
270 {
271 aLbCond21.SelectEntryPos( 1 );
272 ChangeCond21Hdl( NULL );
273 }
274 else if ( eMode == SC_COND_NONE ) // ???
275 ;
276 else // via Werte
277 {
278 aLbCond22.SelectEntryPos( sal::static_int_cast<sal_uInt16>( eMode ) );
279 if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
280 aEdtCond22.SetText( pEntry->GetExpression( aCurPos, 1 ) );
281 }
282 }
283
284 if ( pCurrentFormat->Count() > 2 )
285 {
286 aCbxCond3.Check( sal_True );
287 pEntry= pCurrentFormat->GetEntry( 2 );
288 aEdtCond31.SetText( pEntry->GetExpression( aCurPos, 0 ) );
289 aLbCond3Template.SelectEntry( pEntry->GetStyle() );
290
291 ScConditionMode eMode = pEntry->GetOperation();
292 if ( eMode == SC_COND_DIRECT ) // via Formel
293 {
294 aLbCond31.SelectEntryPos( 1 );
295 ChangeCond31Hdl( NULL );
296 }
297 else if ( eMode == SC_COND_NONE ) // ???
298 ;
299 else // via Werte
300 {
301 aLbCond32.SelectEntryPos( sal::static_int_cast<sal_uInt16>( eMode ) );
302 if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
303 aEdtCond32.SetText( pEntry->GetExpression( aCurPos, 1 ) );
304 }
305 }
306 }
307
308 ClickCond1Hdl( NULL );
309 ClickCond2Hdl( NULL );
310 ClickCond3Hdl( NULL );
311
312 ChangeCond12Hdl( NULL );
313 ChangeCond22Hdl( NULL );
314 ChangeCond32Hdl( NULL );
315
316 aEdtCond11.GrabFocus();
317 pEdActive = &aEdtCond11;
318 //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
319 //SFX_APPWINDOW->Enable(); // Ref-Feld hat Focus
320 // SFX_APPWINDOW->Disable();
321
322 aLbCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 );
323 aLbCond12.SetAccessibleRelationLabeledBy( &aCbxCond1 );
324 aEdtCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 );
325 aRbCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 );
326
327 aLbCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 );
328 aLbCond22.SetAccessibleRelationLabeledBy( &aCbxCond2 );
329 aEdtCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 );
330 aRbCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 );
331
332 aLbCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 );
333 aLbCond32.SetAccessibleRelationLabeledBy( &aCbxCond3 );
334 aEdtCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 );
335 aRbCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 );
336 aLbCond11.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) );
337 aLbCond12.SetAccessibleName( ScResId(LABEL_CONDITIONS) );
338 aEdtCond11.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) );
339
340 aLbCond21.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) );
341 aLbCond22.SetAccessibleName( ScResId(LABEL_CONDITIONS) );
342 aEdtCond21.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) );
343
344 aLbCond31.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) );
345 aLbCond32.SetAccessibleName( ScResId(LABEL_CONDITIONS) );
346 aEdtCond31.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) );
347 }
348
349
350 //----------------------------------------------------------------------------
351 // Destruktor
352
~ScConditionalFormatDlg()353 __EXPORT ScConditionalFormatDlg::~ScConditionalFormatDlg()
354 {
355 }
356
357
358 //----------------------------------------------------------------------------
359
SetReference(const ScRange & rRef,ScDocument * pDocP)360 void ScConditionalFormatDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
361 {
362 if ( pEdActive )
363 {
364 if ( rRef.aStart != rRef.aEnd )
365 RefInputStart(pEdActive);
366
367 String aStr;
368 rRef.Format( aStr, SCR_ABS_3D, pDocP, pDocP->GetAddressConvention () );
369 String aVal( pEdActive->GetText() );
370 Selection aSel( pEdActive->GetSelection() );
371 aSel.Justify();
372 aVal.Erase( (xub_StrLen)aSel.Min(), (xub_StrLen)aSel.Len() );
373 aVal.Insert( aStr, (xub_StrLen)aSel.Min() );
374 Selection aNewSel( aSel.Min(), aSel.Min()+aStr.Len() );
375 pEdActive->SetRefString( aVal );
376 pEdActive->SetSelection( aNewSel );
377 // pEdActive->SetModifyFlag();
378 }
379 }
380
381 //----------------------------------------------------------------------------
382
AddRefEntry()383 void ScConditionalFormatDlg::AddRefEntry()
384 {
385 if ( pEdActive )
386 {
387 String aVal = pEdActive->GetText();
388 aVal += ';';
389 pEdActive->SetText(aVal);
390
391 xub_StrLen nLen = aVal.Len();
392 pEdActive->SetSelection( Selection( nLen, nLen ) );
393 // pEdActive->SetModifyFlag();
394 }
395 }
396
397 //----------------------------------------------------------------------------
398
IsRefInputMode() const399 sal_Bool ScConditionalFormatDlg::IsRefInputMode() const
400 {
401 return (pEdActive != NULL);
402 }
403
404
405 //----------------------------------------------------------------------------
406
SetActive()407 void ScConditionalFormatDlg::SetActive()
408 {
409 if ( bDlgLostFocus )
410 {
411 bDlgLostFocus = sal_False;
412 if( pEdActive )
413 pEdActive->GrabFocus();
414 }
415 else
416 GrabFocus();
417
418 RefInputDone();
419 }
420
421
422 //----------------------------------------------------------------------------
423 // Holt die ausgewaehlte bedingte Formatierung ab
424
GetConditionalFormat(ScConditionalFormat & rCndFmt)425 void ScConditionalFormatDlg::GetConditionalFormat( ScConditionalFormat& rCndFmt )
426 {
427 ScConditionMode eOper;
428 String sExpr1;
429 String sExpr2;
430 String sStyle;
431 ScAddress aCurPos;
432
433 ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
434 if (pViewShell)
435 {
436 ScViewData* pData = pViewShell->GetViewData();
437 aCurPos = ScAddress( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
438 }
439
440 if ( aCbxCond1.IsChecked() )
441 {
442 if ( aLbCond11.GetSelectEntryPos() == 1 ) // via Formel
443 eOper = SC_COND_DIRECT;
444 else
445 eOper = (ScConditionMode)aLbCond12.GetSelectEntryPos();
446 sExpr1 = aEdtCond11.GetText();
447 sExpr2 = aEdtCond12.GetText();
448 sStyle = aLbCond1Template.GetSelectEntry();
449 ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
450 rCndFmt.AddEntry( aNewEntry );
451 }
452
453 if ( aCbxCond2.IsChecked() )
454 {
455 if ( aLbCond21.GetSelectEntryPos() == 1 ) // via Formel???
456 eOper = SC_COND_DIRECT;
457 else
458 eOper = (ScConditionMode)aLbCond22.GetSelectEntryPos();
459 sExpr1 = aEdtCond21.GetText();
460 sExpr2 = aEdtCond22.GetText();
461 sStyle = aLbCond2Template.GetSelectEntry();
462 ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
463 rCndFmt.AddEntry( aNewEntry );
464 }
465
466 if ( aCbxCond3.IsChecked() )
467 {
468 if ( aLbCond31.GetSelectEntryPos() == 1 ) // via Formel???
469 eOper = SC_COND_DIRECT;
470 else
471 eOper = (ScConditionMode)aLbCond32.GetSelectEntryPos();
472 sExpr1 = aEdtCond31.GetText();
473 sExpr2 = aEdtCond32.GetText();
474 sStyle = aLbCond3Template.GetSelectEntry();
475 ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
476 rCndFmt.AddEntry( aNewEntry );
477 }
478 }
479
480
481 //----------------------------------------------------------------------------
482 // Zerstoert den Dialog
483
Close()484 sal_Bool ScConditionalFormatDlg::Close()
485 {
486 return DoClose( ScCondFormatDlgWrapper::GetChildWindowId() );
487 }
488
489
490 //----------------------------------------------------------------------------
491 // Handler:
492
493 //----------------------------------------------------------------------------
494 // Enabled/Disabled Condition1-Controls
495
IMPL_LINK(ScConditionalFormatDlg,ClickCond1Hdl,void *,EMPTYARG)496 IMPL_LINK( ScConditionalFormatDlg, ClickCond1Hdl, void *, EMPTYARG )
497 {
498 sal_Bool bChecked = aCbxCond1.IsChecked();
499
500 aLbCond11.Enable( bChecked );
501 aLbCond12.Enable( bChecked );
502 aEdtCond11.Enable( bChecked );
503 aRbCond11.Enable( bChecked );
504 aFtCond1And.Enable( bChecked );
505 aEdtCond12.Enable( bChecked );
506 aRbCond12.Enable( bChecked );
507 aFtCond1Template.Enable( bChecked );
508 aLbCond1Template.Enable( bChecked );
509 aBtnNew1.Enable( bChecked );
510
511 return( 0L );
512 }
513
514
515 //----------------------------------------------------------------------------
516 // Zellwert/Formel
517
IMPL_LINK(ScConditionalFormatDlg,ChangeCond11Hdl,void *,EMPTYARG)518 IMPL_LINK( ScConditionalFormatDlg, ChangeCond11Hdl, void *, EMPTYARG )
519 {
520 sal_uInt16 nPos = aLbCond11.GetSelectEntryPos();
521
522 if( nPos == 0 ) // Zellwert
523 {
524 aLbCond12.Show();
525 aEdtCond11.SetPosPixel( aCond1Pos2 );
526 }
527 else // Formel
528 {
529 aLbCond12.Hide();
530 aFtCond1And.Hide();
531 aEdtCond12.Hide();
532 aRbCond12.Hide();
533 aRbCond11.SetPosPixel( aRBtn1Pos2 );
534 aEdtCond11.SetPosSizePixel( aCond1Pos1, aCond1Size1 );
535 }
536
537 ChangeCond12Hdl( NULL );
538
539 return( 0L );
540 }
541
542
543 //----------------------------------------------------------------------------
544 // zwischen, gleich, groesser, ...
545
IMPL_LINK(ScConditionalFormatDlg,ChangeCond12Hdl,void *,EMPTYARG)546 IMPL_LINK( ScConditionalFormatDlg, ChangeCond12Hdl, void *, EMPTYARG )
547 {
548 if( aLbCond12.IsVisible() )
549 {
550 sal_uInt16 nPos = aLbCond12.GetSelectEntryPos();
551
552 if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
553 {
554 aEdtCond11.SetSizePixel( aCond1Size3 );
555 aRbCond11.SetPosPixel( aRBtn1Pos1 );
556 aFtCond1And.Show();
557 aEdtCond12.Show();
558 aRbCond12.Show();
559 }
560 else // gleich, n. gleich ...
561 {
562 aEdtCond12.Hide();
563 aRbCond12.Hide();
564 aFtCond1And.Hide();
565 aRbCond11.SetPosPixel( aRBtn1Pos2 );
566 aEdtCond11.SetSizePixel( aCond1Size2 );
567 }
568 }
569
570 return( 0L );
571 }
572
573
574 //----------------------------------------------------------------------------
575 // Enabled/Disabled Condition2-Controls
576
IMPL_LINK(ScConditionalFormatDlg,ClickCond2Hdl,void *,EMPTYARG)577 IMPL_LINK( ScConditionalFormatDlg, ClickCond2Hdl, void *, EMPTYARG )
578 {
579 sal_Bool bChecked = aCbxCond2.IsChecked();
580
581 aLbCond21.Enable( bChecked );
582 aLbCond22.Enable( bChecked );
583 aEdtCond21.Enable( bChecked );
584 aRbCond21.Enable( bChecked );
585 aFtCond2And.Enable( bChecked );
586 aEdtCond22.Enable( bChecked );
587 aRbCond22.Enable( bChecked );
588 aFtCond2Template.Enable( bChecked );
589 aLbCond2Template.Enable( bChecked );
590 aBtnNew2.Enable( bChecked );
591
592 return( 0L );
593 }
594
595
596 //----------------------------------------------------------------------------
597 // Zellwert/Formel
598
IMPL_LINK(ScConditionalFormatDlg,ChangeCond21Hdl,void *,EMPTYARG)599 IMPL_LINK( ScConditionalFormatDlg, ChangeCond21Hdl, void *, EMPTYARG )
600 {
601 sal_uInt16 nPos = aLbCond21.GetSelectEntryPos();
602
603 if( nPos == 0 ) // Zellwert
604 {
605 aLbCond22.Show();
606 aEdtCond21.SetPosPixel( aCond2Pos2 );
607 }
608 else // Formel
609 {
610 aLbCond22.Hide();
611 aFtCond2And.Hide();
612 aEdtCond22.Hide();
613 aRbCond22.Hide();
614 aRbCond21.SetPosPixel( aRBtn2Pos2 );
615 aEdtCond21.SetPosSizePixel( aCond2Pos1, aCond2Size1 );
616 }
617
618 ChangeCond22Hdl( NULL );
619
620 return( 0L );
621 }
622
623
624 //----------------------------------------------------------------------------
625 // zwischen, gleich, groesser, ...
626
IMPL_LINK(ScConditionalFormatDlg,ChangeCond22Hdl,void *,EMPTYARG)627 IMPL_LINK( ScConditionalFormatDlg, ChangeCond22Hdl, void *, EMPTYARG )
628 {
629 if( aLbCond22.IsVisible() )
630 {
631 sal_uInt16 nPos = aLbCond22.GetSelectEntryPos();
632
633 if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
634 {
635 aEdtCond21.SetSizePixel( aCond2Size3 );
636 aRbCond21.SetPosPixel( aRBtn2Pos1 );
637 aFtCond2And.Show();
638 aEdtCond22.Show();
639 aRbCond22.Show();
640 }
641 else // gleich, n. gleich ...
642 {
643 aEdtCond22.Hide();
644 aRbCond22.Hide();
645 aFtCond2And.Hide();
646 aRbCond21.SetPosPixel( aRBtn2Pos2 );
647 aEdtCond21.SetSizePixel( aCond2Size2 );
648 }
649 }
650
651 return( 0L );
652 }
653
654
655 //----------------------------------------------------------------------------
656 // Enabled/Disabled Condition3-Controls
657
IMPL_LINK(ScConditionalFormatDlg,ClickCond3Hdl,void *,EMPTYARG)658 IMPL_LINK( ScConditionalFormatDlg, ClickCond3Hdl, void *, EMPTYARG )
659 {
660 sal_Bool bChecked = aCbxCond3.IsChecked();
661
662 aLbCond31.Enable( bChecked );
663 aLbCond32.Enable( bChecked );
664 aEdtCond31.Enable( bChecked );
665 aRbCond31.Enable( bChecked );
666 aFtCond3And.Enable( bChecked );
667 aEdtCond32.Enable( bChecked );
668 aRbCond32.Enable( bChecked );
669 aFtCond3Template.Enable( bChecked );
670 aLbCond3Template.Enable( bChecked );
671 aBtnNew3.Enable( bChecked );
672
673 return( 0L );
674 }
675
676
677 //----------------------------------------------------------------------------
678 // Zellwert/Formel
679
IMPL_LINK(ScConditionalFormatDlg,ChangeCond31Hdl,void *,EMPTYARG)680 IMPL_LINK( ScConditionalFormatDlg, ChangeCond31Hdl, void *, EMPTYARG )
681 {
682 sal_uInt16 nPos = aLbCond31.GetSelectEntryPos();
683
684 if( nPos == 0 ) // Zellwert
685 {
686 aLbCond32.Show();
687 aEdtCond31.SetPosPixel( aCond3Pos2 );
688 }
689 else // Formel
690 {
691 aLbCond32.Hide();
692 aFtCond3And.Hide();
693 aEdtCond32.Hide();
694 aRbCond32.Hide();
695 aRbCond31.SetPosPixel( aRBtn3Pos2 );
696 aEdtCond31.SetPosSizePixel( aCond3Pos1, aCond3Size1 );
697 }
698
699 ChangeCond32Hdl( NULL );
700
701 return( 0L );
702 }
703
704
705 //----------------------------------------------------------------------------
706 // zwischen, gleich, groesser, ...
707
IMPL_LINK(ScConditionalFormatDlg,ChangeCond32Hdl,void *,EMPTYARG)708 IMPL_LINK( ScConditionalFormatDlg, ChangeCond32Hdl, void *, EMPTYARG )
709 {
710 if( aLbCond32.IsVisible() )
711 {
712 sal_uInt16 nPos = aLbCond32.GetSelectEntryPos();
713
714 if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
715 {
716 aEdtCond31.SetSizePixel( aCond3Size3 );
717 aRbCond31.SetPosPixel( aRBtn3Pos1 );
718 aFtCond3And.Show();
719 aEdtCond32.Show();
720 aRbCond32.Show();
721 }
722 else // gleich, n. gleich ...
723 {
724 aEdtCond32.Hide();
725 aRbCond32.Hide();
726 aFtCond3And.Hide();
727 aRbCond31.SetPosPixel( aRBtn3Pos2 );
728 aEdtCond31.SetSizePixel( aCond3Size2 );
729 }
730 }
731
732 return( 0L );
733 }
734
735
736 //----------------------------------------------------------------------------
737
IMPL_LINK(ScConditionalFormatDlg,GetFocusHdl,Control *,pCtrl)738 IMPL_LINK( ScConditionalFormatDlg, GetFocusHdl, Control*, pCtrl )
739 {
740 if( (pCtrl == (Control*)&aEdtCond11) || (pCtrl == (Control*)&aRbCond11) )
741 pEdActive = &aEdtCond11;
742 else if( (pCtrl == (Control*)&aEdtCond12) || (pCtrl == (Control*)&aRbCond12) )
743 pEdActive = &aEdtCond12;
744 else if( (pCtrl == (Control*)&aEdtCond21) || (pCtrl == (Control*)&aRbCond21) )
745 pEdActive = &aEdtCond21;
746 else if( (pCtrl == (Control*)&aEdtCond22) || (pCtrl == (Control*)&aRbCond22) )
747 pEdActive = &aEdtCond22;
748 else if( (pCtrl == (Control*)&aEdtCond31) || (pCtrl == (Control*)&aRbCond31) )
749 pEdActive = &aEdtCond31;
750 else if( (pCtrl == (Control*)&aEdtCond32) || (pCtrl == (Control*)&aRbCond32) )
751 pEdActive = &aEdtCond32;
752 else
753 pEdActive = NULL;
754
755 if( pEdActive )
756 pEdActive->SetSelection( Selection( 0, SELECTION_MAX ) );
757
758 return 0;
759 }
760
761
762 //----------------------------------------------------------------------------
763
IMPL_LINK(ScConditionalFormatDlg,LoseFocusHdl,Control *,EMPTYARG)764 IMPL_LINK( ScConditionalFormatDlg, LoseFocusHdl, Control*, EMPTYARG )
765 {
766 bDlgLostFocus = !IsActive();
767 return 0;
768 }
769
770
771 //----------------------------------------------------------------------------
772 // [OK], [Cancel]
773
IMPL_LINK(ScConditionalFormatDlg,BtnHdl,PushButton *,pBtn)774 IMPL_LINK( ScConditionalFormatDlg, BtnHdl, PushButton*, pBtn )
775 {
776 if ( pBtn == &aBtnOk )
777 {
778 ScConditionalFormat aCondFrmt( 0, pDoc );
779 GetConditionalFormat( aCondFrmt );
780 ScCondFrmtItem aOutItem( FID_CONDITIONAL_FORMAT, aCondFrmt );
781
782 SetDispatcherLock( sal_False );
783 SwitchToDocument();
784 GetBindings().GetDispatcher()->Execute( FID_CONDITIONAL_FORMAT,
785 SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD,
786 &aOutItem, 0L, 0L );
787 Close();
788 }
789 else if ( pBtn == &aBtnCancel )
790 Close();
791
792 return( 0L );
793 }
794
795
796 //----------------------------------------------------------------------------
797
IMPL_LINK(ScConditionalFormatDlg,NewBtnHdl,PushButton *,pBtn)798 IMPL_LINK( ScConditionalFormatDlg, NewBtnHdl, PushButton*, pBtn )
799 {
800 SfxUInt16Item aFamilyItem( SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA );
801 SfxStringItem aRefItem( SID_STYLE_REFERENCE, ScGlobal::GetRscString(STR_STYLENAME_STANDARD) );
802
803 // unlock the dispatcher so SID_STYLE_NEW can be executed
804 // (SetDispatcherLock would affect all Calc documents)
805 SfxDispatcher* pDisp = GetBindings().GetDispatcher();
806 sal_Bool bLocked = pDisp->IsLocked();
807 if (bLocked)
808 pDisp->Lock(sal_False);
809
810 // Execute the "new style" slot, complete with undo and all necessary updates.
811 // The return value (SfxUInt16Item) is ignored, look for new styles instead.
812 pDisp->Execute( SID_STYLE_NEW, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD | SFX_CALLMODE_MODAL,
813 &aFamilyItem,
814 &aRefItem,
815 0L );
816
817 if (bLocked)
818 pDisp->Lock(sal_True);
819
820 // Find the new style and add it into the style list boxes
821 String aNewStyle;
822 SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
823 for ( SfxStyleSheetBase* pStyle = aStyleIter.First(); pStyle; pStyle = aStyleIter.Next() )
824 {
825 String aName = pStyle->GetName();
826 if ( aLbCond1Template.GetEntryPos(aName) == LISTBOX_ENTRY_NOTFOUND ) // all lists contain the same entries
827 {
828 aLbCond1Template.InsertEntry( aName );
829 aLbCond2Template.InsertEntry( aName );
830 aLbCond3Template.InsertEntry( aName );
831 // if there are several new styles (from API or a different view),
832 // assume the last one is the result of the dialog
833 aNewStyle = aName;
834 }
835 }
836
837 // select the new style in the list box for which the button was pressed
838 if ( aNewStyle.Len() )
839 {
840 ListBox* pListBox = &aLbCond1Template;
841 if ( pBtn == &aBtnNew2 )
842 pListBox = &aLbCond2Template;
843 else if ( pBtn == &aBtnNew3 )
844 pListBox = &aLbCond3Template;
845
846 pListBox->SelectEntry( aNewStyle );
847 }
848
849 return 0;
850 }
851
852