Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : */
9 :
10 : #include "condformatdlg.hxx"
11 : #include "condformatdlgentry.hxx"
12 : #include "condformatdlg.hrc"
13 : #include "conditio.hxx"
14 :
15 : #include "document.hxx"
16 :
17 : #include <vcl/vclevent.hxx>
18 : #include <svl/style.hxx>
19 : #include <sfx2/dispatch.hxx>
20 : #include <svl/stritem.hxx>
21 : #include <svl/intitem.hxx>
22 : #include <svx/xtable.hxx>
23 : #include <svx/drawitem.hxx>
24 : #include <vcl/msgbox.hxx>
25 : #include "stlpool.hxx"
26 : #include "tabvwsh.hxx"
27 :
28 : #include "colorformat.hxx"
29 :
30 : #include "globstr.hrc"
31 :
32 : #include <set>
33 :
34 0 : ScCondFrmtEntry::ScCondFrmtEntry(Window* pParent, ScDocument* pDoc, const ScAddress& rPos):
35 : Control(pParent, ScResId( RID_COND_ENTRY ) ),
36 : mbActive(false),
37 : maFtCondNr( this, ScResId( FT_COND_NR ) ),
38 : maFtCondition( this, ScResId( FT_CONDITION ) ),
39 : mnIndex(0),
40 : maStrCondition(ScResId( STR_CONDITION ).toString()),
41 : maLbType( this, ScResId( LB_TYPE ) ),
42 : mpDoc(pDoc),
43 0 : maPos(rPos)
44 : {
45 0 : SetControlBackground(GetSettings().GetStyleSettings().GetDialogColor());
46 :
47 0 : maLbType.SetSelectHdl( LINK( pParent, ScCondFormatList, TypeListHdl ) );
48 0 : maClickHdl = LINK( pParent, ScCondFormatList, EntrySelectHdl );
49 0 : }
50 :
51 0 : ScCondFrmtEntry::~ScCondFrmtEntry()
52 : {
53 0 : }
54 :
55 0 : long ScCondFrmtEntry::Notify( NotifyEvent& rNEvt )
56 : {
57 0 : if( rNEvt.GetType() == EVENT_MOUSEBUTTONDOWN )
58 : {
59 0 : ImplCallEventListenersAndHandler( VCLEVENT_WINDOW_MOUSEBUTTONDOWN, maClickHdl, this );
60 : }
61 0 : return Control::Notify(rNEvt);
62 : }
63 :
64 0 : void ScCondFrmtEntry::SetIndex(sal_Int32 nIndex)
65 : {
66 0 : mnIndex = nIndex;
67 0 : rtl::OUStringBuffer aBuffer(maStrCondition);
68 0 : aBuffer.append(rtl::OUString::valueOf(nIndex));
69 0 : maFtCondNr.SetText(aBuffer.makeStringAndClear());
70 0 : }
71 :
72 0 : void ScCondFrmtEntry::SetHeight()
73 : {
74 0 : long nPad = LogicToPixel(Size(42,2), MapMode(MAP_APPFONT)).getHeight();
75 :
76 : // Calculate maximum height we need from visible widgets
77 0 : sal_uInt16 nChildren = GetChildCount();
78 :
79 0 : long nMaxHeight = 0;
80 0 : for(sal_uInt16 i = 0; i < nChildren; i++)
81 : {
82 0 : Window *pChild = GetChild(i);
83 0 : if(!pChild || !pChild->IsVisible())
84 0 : continue;
85 0 : Point aPos = pChild->GetPosPixel();
86 0 : Size aSize = pChild->GetSizePixel();
87 0 : nMaxHeight = std::max(aPos.Y() + aSize.Height(), nMaxHeight);
88 : }
89 0 : Size aSize = GetSizePixel();
90 0 : if(nMaxHeight > 0)
91 : {
92 0 : aSize.Height() = nMaxHeight + nPad;
93 0 : SetSizePixel(aSize);
94 : }
95 0 : }
96 :
97 0 : void ScCondFrmtEntry::Select()
98 : {
99 0 : maFtCondition.SetText(rtl::OUString());
100 0 : maFtCondition.Hide();
101 0 : maLbType.Show();
102 0 : mbActive = true;
103 0 : SetHeight();
104 0 : }
105 :
106 0 : void ScCondFrmtEntry::Deselect()
107 : {
108 0 : rtl::OUString maCondText = GetExpressionString();
109 0 : maFtCondition.SetText(maCondText);
110 0 : maFtCondition.Show();
111 0 : maLbType.Hide();
112 0 : mbActive = false;
113 0 : SetHeight();
114 0 : }
115 :
116 0 : bool ScCondFrmtEntry::IsSelected() const
117 : {
118 0 : return mbActive;
119 : }
120 :
121 0 : IMPL_LINK(ScCondFrmtEntry, EdModifyHdl, Edit*, pEdit)
122 : {
123 0 : rtl::OUString aFormula = pEdit->GetText();
124 0 : ScCompiler aComp( mpDoc, maPos );
125 0 : aComp.SetGrammar( mpDoc->GetGrammar() );
126 0 : boost::scoped_ptr<ScTokenArray> mpCode(aComp.CompileString(aFormula));
127 0 : if(mpCode->GetCodeError())
128 : {
129 0 : pEdit->SetControlBackground(COL_LIGHTRED);
130 : }
131 : else
132 : {
133 0 : pEdit->SetControlBackground(GetSettings().GetStyleSettings().GetWindowColor());
134 : }
135 0 : return 0;
136 : }
137 :
138 : //
139 : //condition
140 : //
141 : namespace {
142 :
143 0 : void FillStyleListBox( ScDocument* pDoc, ListBox& rLbStyle )
144 : {
145 0 : rLbStyle.SetSeparatorPos(0);
146 0 : std::set<rtl::OUString> aStyleNames;
147 0 : SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
148 0 : for ( SfxStyleSheetBase* pStyle = aStyleIter.First(); pStyle; pStyle = aStyleIter.Next() )
149 : {
150 0 : rtl::OUString aName = pStyle->GetName();
151 0 : aStyleNames.insert(aName);
152 0 : }
153 0 : for(std::set<rtl::OUString>::const_iterator itr = aStyleNames.begin(), itrEnd = aStyleNames.end();
154 : itr != itrEnd; ++itr)
155 : {
156 0 : rLbStyle.InsertEntry( *itr );
157 0 : }
158 0 : }
159 :
160 : }
161 :
162 0 : ScConditionFrmtEntry::ScConditionFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScCondFormatEntry* pFormatEntry ):
163 : ScCondFrmtEntry( pParent, pDoc, rPos ),
164 : maLbCondType( this, ScResId( LB_CELLIS_TYPE ) ),
165 : maEdVal1( this, NULL, ScResId( ED_VAL1 ) ),
166 : maEdVal2( this, NULL, ScResId( ED_VAL2 ) ),
167 : maFtStyle( this, ScResId( FT_STYLE ) ),
168 : maLbStyle( this, ScResId( LB_STYLE ) ),
169 0 : maWdPreview( this, ScResId( WD_PREVIEW ) )
170 : {
171 :
172 0 : FreeResource();
173 0 : maLbType.SelectEntryPos(1);
174 :
175 0 : Init();
176 :
177 0 : if(pFormatEntry)
178 : {
179 0 : rtl::OUString aStyleName = pFormatEntry->GetStyle();
180 0 : maLbStyle.SelectEntry(aStyleName);
181 0 : StyleSelectHdl(NULL);
182 0 : ScConditionMode eMode = pFormatEntry->GetOperation();
183 0 : maEdVal1.SetText(pFormatEntry->GetExpression(maPos, 0));
184 0 : maEdVal2.Hide();
185 0 : switch(eMode)
186 : {
187 : case SC_COND_EQUAL:
188 0 : maLbCondType.SelectEntryPos(0);
189 0 : break;
190 : case SC_COND_LESS:
191 0 : maLbCondType.SelectEntryPos(1);
192 0 : break;
193 : case SC_COND_GREATER:
194 0 : maLbCondType.SelectEntryPos(2);
195 0 : break;
196 : case SC_COND_EQLESS:
197 0 : maLbCondType.SelectEntryPos(3);
198 0 : break;
199 : case SC_COND_EQGREATER:
200 0 : maLbCondType.SelectEntryPos(4);
201 0 : break;
202 : case SC_COND_NOTEQUAL:
203 0 : maLbCondType.SelectEntryPos(5);
204 0 : break;
205 : case SC_COND_BETWEEN:
206 0 : maEdVal2.Show();
207 0 : maEdVal2.SetText(pFormatEntry->GetExpression(maPos, 1));
208 0 : maLbCondType.SelectEntryPos(6);
209 0 : break;
210 : case SC_COND_NOTBETWEEN:
211 0 : maEdVal2.Show();
212 0 : maEdVal2.SetText(pFormatEntry->GetExpression(maPos, 1));
213 0 : maLbCondType.SelectEntryPos(7);
214 0 : break;
215 : case SC_COND_DUPLICATE:
216 0 : maLbCondType.SelectEntryPos(8);
217 0 : break;
218 : case SC_COND_NOTDUPLICATE:
219 0 : maLbCondType.SelectEntryPos(9);
220 0 : break;
221 : case SC_COND_DIRECT:
222 : assert(false);
223 : //maLbType.SelectEntryPos(2);
224 0 : break;
225 : case SC_COND_TOP10:
226 0 : maLbCondType.SelectEntryPos(10);
227 0 : break;
228 : case SC_COND_BOTTOM10:
229 0 : maLbCondType.SelectEntryPos(11);
230 0 : break;
231 : case SC_COND_TOP_PERCENT:
232 0 : maLbCondType.SelectEntryPos(12);
233 0 : break;
234 : case SC_COND_BOTTOM_PERCENT:
235 0 : maLbCondType.SelectEntryPos(13);
236 0 : break;
237 : case SC_COND_ABOVE_AVERAGE:
238 0 : maEdVal1.Hide();
239 0 : maLbCondType.SelectEntryPos(14);
240 0 : break;
241 : case SC_COND_BELOW_AVERAGE:
242 0 : maEdVal1.Hide();
243 0 : maLbCondType.SelectEntryPos(15);
244 0 : break;
245 : case SC_COND_ERROR:
246 0 : maEdVal1.Hide();
247 0 : maLbCondType.SelectEntryPos(16);
248 0 : break;
249 : case SC_COND_NOERROR:
250 0 : maEdVal1.Hide();
251 0 : maLbCondType.SelectEntryPos(17);
252 0 : break;
253 : case SC_COND_BEGINS_WITH:
254 0 : maLbCondType.SelectEntryPos(18);
255 0 : break;
256 : case SC_COND_ENDS_WITH:
257 0 : maLbCondType.SelectEntryPos(19);
258 0 : break;
259 : case SC_COND_CONTAINS_TEXT:
260 0 : maLbCondType.SelectEntryPos(20);
261 0 : break;
262 : case SC_COND_NOT_CONTAINS_TEXT:
263 0 : maLbCondType.SelectEntryPos(21);
264 0 : break;
265 : case SC_COND_NONE:
266 0 : break;
267 0 : }
268 : }
269 : else
270 : {
271 0 : maLbCondType.SelectEntryPos(0);
272 0 : maEdVal2.Hide();
273 0 : maLbStyle.SelectEntryPos(1);
274 : }
275 0 : maLbType.SelectEntryPos(1);
276 0 : }
277 :
278 0 : void ScConditionFrmtEntry::Init()
279 : {
280 0 : maEdVal1.SetGetFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeGetFocusHdl ) );
281 0 : maEdVal2.SetGetFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeGetFocusHdl ) );
282 0 : maEdVal1.SetLoseFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeLoseFocusHdl ) );
283 0 : maEdVal2.SetLoseFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeLoseFocusHdl ) );
284 :
285 0 : maEdVal1.SetStyle( maEdVal1.GetStyle() | WB_FORCECTRLBACKGROUND );
286 0 : maEdVal2.SetStyle( maEdVal2.GetStyle() | WB_FORCECTRLBACKGROUND );
287 :
288 0 : maEdVal1.SetModifyHdl( LINK( this, ScCondFrmtEntry, EdModifyHdl ) );
289 0 : maEdVal2.SetModifyHdl( LINK( this, ScCondFrmtEntry, EdModifyHdl ) );
290 :
291 0 : FillStyleListBox( mpDoc, maLbStyle );
292 0 : maLbStyle.SetSelectHdl( LINK( this, ScConditionFrmtEntry, StyleSelectHdl ) );
293 :
294 0 : maLbCondType.SetSelectHdl( LINK( this, ScConditionFrmtEntry, ConditionTypeSelectHdl ) );
295 0 : }
296 :
297 0 : ScFormatEntry* ScConditionFrmtEntry::createConditionEntry() const
298 : {
299 : ScConditionMode eMode;
300 0 : rtl::OUString aExpr2;
301 0 : switch(maLbCondType.GetSelectEntryPos())
302 : {
303 : case 0:
304 0 : eMode = SC_COND_EQUAL;
305 0 : break;
306 : case 1:
307 0 : eMode = SC_COND_LESS;
308 0 : break;
309 : case 2:
310 0 : eMode = SC_COND_GREATER;
311 0 : break;
312 : case 3:
313 0 : eMode = SC_COND_EQLESS;
314 0 : break;
315 : case 4:
316 0 : eMode = SC_COND_EQGREATER;
317 0 : break;
318 : case 5:
319 0 : eMode = SC_COND_NOTEQUAL;
320 0 : break;
321 : case 6:
322 0 : aExpr2 = maEdVal2.GetText();
323 0 : eMode = SC_COND_BETWEEN;
324 0 : if(aExpr2.isEmpty())
325 0 : return NULL;
326 0 : break;
327 : case 7:
328 0 : eMode = SC_COND_NOTBETWEEN;
329 0 : aExpr2 = maEdVal2.GetText();
330 0 : if(aExpr2.isEmpty())
331 0 : return NULL;
332 0 : break;
333 : case 8:
334 0 : eMode = SC_COND_DUPLICATE;
335 0 : break;
336 : case 9:
337 0 : eMode = SC_COND_NOTDUPLICATE;
338 0 : break;
339 : case 10:
340 0 : eMode = SC_COND_TOP10;
341 0 : break;
342 : case 11:
343 0 : eMode = SC_COND_BOTTOM10;
344 0 : break;
345 : case 12:
346 0 : eMode = SC_COND_TOP_PERCENT;
347 0 : break;
348 : case 13:
349 0 : eMode = SC_COND_BOTTOM_PERCENT;
350 0 : break;
351 : case 14:
352 0 : eMode = SC_COND_ABOVE_AVERAGE;
353 0 : break;
354 : case 15:
355 0 : eMode = SC_COND_BELOW_AVERAGE;
356 0 : break;
357 : case 16:
358 0 : eMode = SC_COND_ERROR;
359 0 : break;
360 : case 17:
361 0 : eMode = SC_COND_NOERROR;
362 0 : break;
363 : case 18:
364 0 : eMode = SC_COND_BEGINS_WITH;
365 0 : break;
366 : case 19:
367 0 : eMode = SC_COND_ENDS_WITH;
368 0 : break;
369 : case 20:
370 0 : eMode = SC_COND_CONTAINS_TEXT;
371 0 : break;
372 : case 21:
373 0 : eMode = SC_COND_NOT_CONTAINS_TEXT;
374 0 : break;
375 : default:
376 : assert(false); // this cannot happen
377 0 : return NULL;
378 : }
379 :
380 0 : rtl::OUString aExpr1 = maEdVal1.GetText();
381 :
382 0 : ScFormatEntry* pEntry = new ScCondFormatEntry(eMode, aExpr1, aExpr2, mpDoc, maPos, maLbStyle.GetSelectEntry());
383 :
384 0 : return pEntry;
385 : }
386 :
387 0 : rtl::OUString ScConditionFrmtEntry::GetExpressionString()
388 : {
389 0 : return ScCondFormatHelper::GetExpression(CONDITION, maLbCondType.GetSelectEntryPos(), maEdVal1.GetText(), maEdVal2.GetText());
390 : }
391 :
392 0 : ScFormatEntry* ScConditionFrmtEntry::GetEntry() const
393 : {
394 0 : return createConditionEntry();
395 : }
396 :
397 0 : void ScConditionFrmtEntry::SetActive()
398 : {
399 0 : maLbCondType.Show();
400 0 : maEdVal1.Show();
401 0 : if(maLbCondType.GetSelectEntryPos() == 6 || maLbCondType.GetSelectEntryPos() == 7)
402 0 : maEdVal2.Show();
403 0 : maFtStyle.Show();
404 0 : maLbStyle.Show();
405 0 : maWdPreview.Show();
406 :
407 0 : Select();
408 0 : }
409 :
410 0 : void ScConditionFrmtEntry::SetInactive()
411 : {
412 0 : maLbCondType.Hide();
413 0 : maEdVal1.Hide();
414 0 : maEdVal2.Hide();
415 0 : maFtStyle.Hide();
416 0 : maLbStyle.Hide();
417 0 : maWdPreview.Hide();
418 :
419 0 : Deselect();
420 0 : }
421 :
422 : namespace {
423 :
424 0 : void StyleSelect( ListBox& rLbStyle, ScDocument* pDoc, SvxFontPrevWindow& rWdPreview )
425 : {
426 0 : if(rLbStyle.GetSelectEntryPos() == 0)
427 : {
428 : // call new style dialog
429 0 : SfxUInt16Item aFamilyItem( SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA );
430 0 : SfxStringItem aRefItem( SID_STYLE_REFERENCE, ScGlobal::GetRscString(STR_STYLENAME_STANDARD) );
431 :
432 : // unlock the dispatcher so SID_STYLE_NEW can be executed
433 : // (SetDispatcherLock would affect all Calc documents)
434 0 : ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
435 0 : SfxDispatcher* pDisp = pViewShell->GetDispatcher();
436 0 : sal_Bool bLocked = pDisp->IsLocked();
437 0 : if (bLocked)
438 0 : pDisp->Lock(false);
439 :
440 : // Execute the "new style" slot, complete with undo and all necessary updates.
441 : // The return value (SfxUInt16Item) is ignored, look for new styles instead.
442 : pDisp->Execute( SID_STYLE_NEW, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD | SFX_CALLMODE_MODAL,
443 : &aFamilyItem,
444 : &aRefItem,
445 0 : 0L );
446 :
447 0 : if (bLocked)
448 0 : pDisp->Lock(sal_True);
449 :
450 : // Find the new style and add it into the style list boxes
451 0 : rtl::OUString aNewStyle;
452 0 : SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
453 0 : bool bFound = false;
454 0 : for ( SfxStyleSheetBase* pStyle = aStyleIter.First(); pStyle && !bFound; pStyle = aStyleIter.Next() )
455 : {
456 0 : rtl::OUString aName = pStyle->GetName();
457 0 : if ( rLbStyle.GetEntryPos(aName) == LISTBOX_ENTRY_NOTFOUND ) // all lists contain the same entries
458 : {
459 0 : for( sal_uInt16 i = 1, n = rLbStyle.GetEntryCount(); i <= n && !bFound; ++i)
460 : {
461 0 : rtl::OUString aStyleName = ScGlobal::pCharClass->uppercase(rtl::OUString(rLbStyle.GetEntry(i)));
462 0 : if( i == n )
463 : {
464 0 : rLbStyle.InsertEntry(aName);
465 0 : rLbStyle.SelectEntry(aName);
466 0 : bFound = true;
467 : }
468 0 : else if( aStyleName > ScGlobal::pCharClass->uppercase(aName) )
469 : {
470 0 : rLbStyle.InsertEntry(aName, i);
471 0 : rLbStyle.SelectEntry(aName);
472 0 : bFound = true;
473 : }
474 0 : }
475 : }
476 0 : }
477 : }
478 :
479 0 : rtl::OUString aStyleName = rLbStyle.GetSelectEntry();
480 0 : SfxStyleSheetBase* pStyleSheet = pDoc->GetStyleSheetPool()->Find( aStyleName, SFX_STYLE_FAMILY_PARA );
481 0 : if(pStyleSheet)
482 : {
483 0 : const SfxItemSet& rSet = pStyleSheet->GetItemSet();
484 0 : rWdPreview.Init( rSet );
485 0 : }
486 0 : }
487 :
488 : }
489 :
490 0 : IMPL_LINK_NOARG(ScConditionFrmtEntry, StyleSelectHdl)
491 : {
492 0 : StyleSelect( maLbStyle, mpDoc, maWdPreview );
493 0 : return 0;
494 : }
495 :
496 : // formula
497 :
498 0 : ScFormulaFrmtEntry::ScFormulaFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScCondFormatEntry* pFormat ):
499 : ScCondFrmtEntry( pParent, pDoc, rPos ),
500 : maFtStyle( this, ScResId( FT_STYLE ) ),
501 : maLbStyle( this, ScResId( LB_STYLE ) ),
502 : maWdPreview( this, ScResId( WD_PREVIEW ) ),
503 0 : maEdFormula( this, NULL, ScResId( ED_FORMULA ) )
504 : {
505 0 : Init();
506 :
507 0 : FreeResource();
508 0 : maLbType.SelectEntryPos(2);
509 :
510 0 : if(pFormat)
511 : {
512 0 : maEdFormula.SetText(pFormat->GetExpression(rPos, 0, 0, pDoc->GetGrammar()));
513 0 : maLbStyle.SelectEntry(pFormat->GetStyle());
514 : }
515 : else
516 : {
517 0 : maLbStyle.SelectEntryPos(1);
518 : }
519 0 : }
520 :
521 0 : void ScFormulaFrmtEntry::Init()
522 : {
523 0 : maEdFormula.SetGetFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeGetFocusHdl ) );
524 0 : maEdFormula.SetLoseFocusHdl( LINK( GetParent()->GetParent(), ScCondFormatDlg, RangeLoseFocusHdl ) );
525 :
526 0 : FillStyleListBox( mpDoc, maLbStyle );
527 0 : maLbStyle.SetSelectHdl( LINK( this, ScFormulaFrmtEntry, StyleSelectHdl ) );
528 0 : }
529 :
530 0 : IMPL_LINK_NOARG(ScFormulaFrmtEntry, StyleSelectHdl)
531 : {
532 0 : StyleSelect( maLbStyle, mpDoc, maWdPreview );
533 :
534 0 : return 0;
535 : }
536 :
537 0 : ScFormatEntry* ScFormulaFrmtEntry::createFormulaEntry() const
538 : {
539 0 : ScConditionMode eMode = SC_COND_DIRECT;
540 0 : rtl::OUString aFormula = maEdFormula.GetText();
541 0 : if(aFormula.isEmpty())
542 0 : return NULL;
543 :
544 0 : rtl::OUString aExpr2;
545 0 : ScFormatEntry* pEntry = new ScCondFormatEntry(eMode, aFormula, aExpr2, mpDoc, maPos, maLbStyle.GetSelectEntry());
546 0 : return pEntry;
547 : }
548 :
549 0 : ScFormatEntry* ScFormulaFrmtEntry::GetEntry() const
550 : {
551 0 : return createFormulaEntry();
552 : }
553 :
554 0 : rtl::OUString ScFormulaFrmtEntry::GetExpressionString()
555 : {
556 0 : return ScCondFormatHelper::GetExpression(FORMULA, 0, maEdFormula.GetText());
557 : }
558 :
559 0 : void ScFormulaFrmtEntry::SetActive()
560 : {
561 0 : maWdPreview.Show();
562 0 : maFtStyle.Show();
563 0 : maLbStyle.Show();
564 0 : maEdFormula.Show();
565 :
566 0 : Select();
567 0 : }
568 :
569 0 : void ScFormulaFrmtEntry::SetInactive()
570 : {
571 0 : maWdPreview.Hide();
572 0 : maFtStyle.Hide();
573 0 : maLbStyle.Hide();
574 0 : maEdFormula.Hide();
575 :
576 0 : Deselect();
577 0 : }
578 :
579 : //color scale
580 :
581 : namespace {
582 :
583 0 : void SetColorScaleEntryTypes( const ScColorScaleEntry& rEntry, ListBox& rLbType, Edit& rEdit, ColorListBox& rLbCol )
584 : {
585 : // entry Automatic is not available for color scales
586 0 : sal_Int32 nIndex = static_cast<sal_Int32>(rEntry.GetType());
587 : assert(nIndex > 0);
588 0 : rLbType.SelectEntryPos(nIndex - 1);
589 0 : switch(rEntry.GetType())
590 : {
591 : case COLORSCALE_MIN:
592 : case COLORSCALE_MAX:
593 0 : break;
594 : case COLORSCALE_PERCENTILE:
595 : case COLORSCALE_VALUE:
596 : case COLORSCALE_PERCENT:
597 0 : rEdit.SetText(rtl::OUString::valueOf(rEntry.GetValue()));
598 0 : break;
599 : case COLORSCALE_FORMULA:
600 0 : rEdit.SetText(rEntry.GetFormula(formula::FormulaGrammar::GRAM_DEFAULT));
601 0 : break;
602 : case COLORSCALE_AUTO:
603 0 : abort();
604 : break;
605 : }
606 0 : rLbCol.SelectEntry(rEntry.GetColor());
607 0 : }
608 :
609 0 : void SetColorScaleEntry( ScColorScaleEntry* pEntry, const ListBox& rType, const Edit& rValue, ScDocument* pDoc, const ScAddress& rPos, bool bDataBar )
610 : {
611 0 : sal_uInt32 nIndex = 0;
612 0 : double nVal = 0;
613 0 : SvNumberFormatter* pNumberFormatter = pDoc->GetFormatTable();
614 0 : pNumberFormatter->IsNumberFormat(rValue.GetText(), nIndex, nVal);
615 :
616 : // color scale does not have the automatic entry
617 0 : sal_Int32 nPos = rType.GetSelectEntryPos();
618 0 : if(!bDataBar)
619 0 : ++nPos;
620 :
621 0 : pEntry->SetType(static_cast<ScColorScaleEntryType>(nPos));
622 0 : switch(nPos)
623 : {
624 : case COLORSCALE_AUTO:
625 : case COLORSCALE_MIN:
626 : case COLORSCALE_MAX:
627 0 : break;
628 : case COLORSCALE_PERCENTILE:
629 : case COLORSCALE_VALUE:
630 : case COLORSCALE_PERCENT:
631 0 : pEntry->SetValue(nVal);
632 0 : break;
633 : case COLORSCALE_FORMULA:
634 0 : pEntry->SetFormula(rValue.GetText(), pDoc, rPos);
635 0 : break;
636 : default:
637 0 : break;
638 : }
639 0 : }
640 :
641 0 : ScColorScaleEntry* createColorScaleEntry( const ListBox& rType, const ColorListBox& rColor, const Edit& rValue, ScDocument* pDoc, const ScAddress& rPos )
642 : {
643 0 : ScColorScaleEntry* pEntry = new ScColorScaleEntry();
644 :
645 0 : SetColorScaleEntry( pEntry, rType, rValue, pDoc, rPos, false );
646 0 : Color aColor = rColor.GetSelectEntryColor();
647 0 : pEntry->SetColor(aColor);
648 0 : return pEntry;
649 : }
650 :
651 : }
652 :
653 0 : ScColorScale2FrmtEntry::ScColorScale2FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat ):
654 : ScCondFrmtEntry( pParent, pDoc, rPos ),
655 : maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
656 : maLbEntryTypeMin( this, ScResId( LB_TYPE_COL_SCALE_MIN ) ),
657 : maLbEntryTypeMax( this, ScResId( LB_TYPE_COL_SCALE_MAX ) ),
658 : maEdMin( this, ScResId( ED_COL_SCALE_MIN ) ),
659 : maEdMax( this, ScResId( ED_COL_SCALE_MAX ) ),
660 : maLbColMin( this, ScResId( LB_COL_MIN ) ),
661 0 : maLbColMax( this, ScResId( LB_COL_MAX ) )
662 : {
663 : // remove the automatic entry from color scales
664 0 : maLbEntryTypeMin.RemoveEntry(0);
665 0 : maLbEntryTypeMax.RemoveEntry(0);
666 :
667 0 : maLbType.SelectEntryPos(0);
668 0 : maLbColorFormat.SelectEntryPos(0);
669 0 : Init();
670 0 : if(pFormat)
671 : {
672 0 : ScColorScaleFormat::const_iterator itr = pFormat->begin();
673 0 : SetColorScaleEntryTypes(*itr, maLbEntryTypeMin, maEdMin, maLbColMin);
674 0 : ++itr;
675 0 : SetColorScaleEntryTypes(*itr, maLbEntryTypeMax, maEdMax, maLbColMax);
676 : }
677 : else
678 : {
679 0 : maLbEntryTypeMin.SelectEntryPos(0);
680 0 : maLbEntryTypeMax.SelectEntryPos(1);
681 : }
682 0 : FreeResource();
683 :
684 0 : maLbColorFormat.SetSelectHdl( LINK( pParent, ScCondFormatList, ColFormatTypeHdl ) );
685 :
686 0 : EntryTypeHdl(&maLbEntryTypeMin);
687 0 : EntryTypeHdl(&maLbEntryTypeMax);
688 0 : }
689 :
690 0 : void ScColorScale2FrmtEntry::Init()
691 : {
692 0 : maLbEntryTypeMin.SetSelectHdl( LINK( this, ScColorScale2FrmtEntry, EntryTypeHdl ) );
693 0 : maLbEntryTypeMax.SetSelectHdl( LINK( this, ScColorScale2FrmtEntry, EntryTypeHdl ) );
694 :
695 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
696 0 : const SfxPoolItem* pItem = NULL;
697 0 : XColorListRef pColorTable;
698 :
699 : DBG_ASSERT( pDocSh, "DocShell not found!" );
700 :
701 0 : if ( pDocSh )
702 : {
703 0 : pItem = pDocSh->GetItem( SID_COLOR_TABLE );
704 0 : if ( pItem != NULL )
705 0 : pColorTable = ( (SvxColorListItem*)pItem )->GetColorList();
706 : }
707 0 : if ( pColorTable.is() )
708 : {
709 : // filling the line color box
710 0 : maLbColMin.SetUpdateMode( false );
711 0 : maLbColMax.SetUpdateMode( false );
712 :
713 0 : for ( long i = 0; i < pColorTable->Count(); ++i )
714 : {
715 0 : XColorEntry* pEntry = pColorTable->GetColor(i);
716 0 : maLbColMin.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
717 0 : maLbColMax.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
718 :
719 0 : if(pEntry->GetColor() == Color(COL_LIGHTRED))
720 0 : maLbColMin.SelectEntryPos(i);
721 0 : if(pEntry->GetColor() == Color(COL_LIGHTBLUE))
722 0 : maLbColMax.SelectEntryPos(i);
723 : }
724 0 : maLbColMin.SetUpdateMode( sal_True );
725 0 : maLbColMax.SetUpdateMode( sal_True );
726 0 : }
727 0 : }
728 :
729 0 : ScFormatEntry* ScColorScale2FrmtEntry::createColorscaleEntry() const
730 : {
731 0 : ScColorScaleFormat* pColorScale = new ScColorScaleFormat(mpDoc);
732 0 : pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMin, maLbColMin, maEdMin, mpDoc, maPos));
733 0 : pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMax, maLbColMax, maEdMax, mpDoc, maPos));
734 0 : return pColorScale;
735 : }
736 :
737 0 : rtl::OUString ScColorScale2FrmtEntry::GetExpressionString()
738 : {
739 0 : return ScCondFormatHelper::GetExpression( COLORSCALE, 0 );
740 : }
741 :
742 0 : ScFormatEntry* ScColorScale2FrmtEntry::GetEntry() const
743 : {
744 0 : return createColorscaleEntry();
745 : }
746 :
747 0 : void ScColorScale2FrmtEntry::SetActive()
748 : {
749 0 : maLbColorFormat.Show();
750 :
751 0 : maLbEntryTypeMin.Show();
752 0 : maLbEntryTypeMax.Show();
753 :
754 0 : maEdMin.Show();
755 0 : maEdMax.Show();
756 :
757 0 : maLbColMin.Show();
758 0 : maLbColMax.Show();
759 :
760 0 : Select();
761 0 : }
762 :
763 0 : void ScColorScale2FrmtEntry::SetInactive()
764 : {
765 0 : maLbColorFormat.Hide();
766 :
767 0 : maLbEntryTypeMin.Hide();
768 0 : maLbEntryTypeMax.Hide();
769 :
770 0 : maEdMin.Hide();
771 0 : maEdMax.Hide();
772 :
773 0 : maLbColMin.Hide();
774 0 : maLbColMax.Hide();
775 :
776 0 : Deselect();
777 0 : }
778 :
779 0 : IMPL_LINK( ScColorScale2FrmtEntry, EntryTypeHdl, ListBox*, pBox )
780 : {
781 0 : bool bEnableEdit = true;
782 0 : sal_Int32 nPos = pBox->GetSelectEntryPos();
783 0 : if(nPos < 2)
784 : {
785 0 : bEnableEdit = false;
786 : }
787 :
788 0 : Edit* pEd = NULL;
789 0 : if(pBox == &maLbEntryTypeMin)
790 0 : pEd = &maEdMin;
791 0 : else if(pBox == &maLbEntryTypeMax)
792 0 : pEd = &maEdMax;
793 :
794 0 : if(bEnableEdit)
795 0 : pEd->Enable();
796 : else
797 0 : pEd->Disable();
798 :
799 0 : return 0;
800 : }
801 :
802 0 : ScColorScale3FrmtEntry::ScColorScale3FrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat ):
803 : ScCondFrmtEntry( pParent, pDoc, rPos ),
804 : maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
805 : maLbEntryTypeMin( this, ScResId( LB_TYPE_COL_SCALE_MIN ) ),
806 : maLbEntryTypeMiddle( this, ScResId( LB_TYPE_COL_SCALE_MIDDLE ) ),
807 : maLbEntryTypeMax( this, ScResId( LB_TYPE_COL_SCALE_MAX ) ),
808 : maEdMin( this, ScResId( ED_COL_SCALE_MIN ) ),
809 : maEdMiddle( this, ScResId( ED_COL_SCALE_MIDDLE ) ),
810 : maEdMax( this, ScResId( ED_COL_SCALE_MAX ) ),
811 : maLbColMin( this, ScResId( LB_COL_MIN ) ),
812 : maLbColMiddle( this, ScResId( LB_COL_MIDDLE ) ),
813 0 : maLbColMax( this, ScResId( LB_COL_MAX ) )
814 : {
815 : // remove the automatic entry from color scales
816 0 : maLbEntryTypeMin.RemoveEntry(0);
817 0 : maLbEntryTypeMiddle.RemoveEntry(0);
818 0 : maLbEntryTypeMax.RemoveEntry(0);
819 :
820 0 : Init();
821 0 : maLbType.SelectEntryPos(0);
822 0 : if(pFormat)
823 : {
824 0 : ScColorScaleFormat::const_iterator itr = pFormat->begin();
825 0 : SetColorScaleEntryTypes(*itr, maLbEntryTypeMin, maEdMin, maLbColMin);
826 : assert(pFormat->size() == 3);
827 0 : ++itr;
828 0 : SetColorScaleEntryTypes(*itr, maLbEntryTypeMiddle, maEdMiddle, maLbColMiddle);
829 0 : ++itr;
830 0 : SetColorScaleEntryTypes(*itr, maLbEntryTypeMax, maEdMax, maLbColMax);
831 : }
832 : else
833 : {
834 0 : maLbColorFormat.SelectEntryPos(1);
835 0 : maLbEntryTypeMin.SelectEntryPos(0);
836 0 : maLbEntryTypeMiddle.SelectEntryPos(2);
837 0 : maLbEntryTypeMax.SelectEntryPos(1);
838 0 : maEdMiddle.SetText(rtl::OUString::valueOf(static_cast<sal_Int32>(50)));
839 : }
840 0 : FreeResource();
841 :
842 0 : maLbColorFormat.SetSelectHdl( LINK( pParent, ScCondFormatList, ColFormatTypeHdl ) );
843 0 : EntryTypeHdl(&maLbEntryTypeMin);
844 0 : EntryTypeHdl(&maLbEntryTypeMiddle);
845 0 : EntryTypeHdl(&maLbEntryTypeMax);
846 0 : }
847 :
848 0 : void ScColorScale3FrmtEntry::Init()
849 : {
850 0 : maLbEntryTypeMin.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
851 0 : maLbEntryTypeMax.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
852 0 : maLbEntryTypeMiddle.SetSelectHdl( LINK( this, ScColorScale3FrmtEntry, EntryTypeHdl ) );
853 :
854 0 : SfxObjectShell* pDocSh = SfxObjectShell::Current();
855 0 : const SfxPoolItem* pItem = NULL;
856 0 : XColorListRef pColorTable;
857 :
858 : DBG_ASSERT( pDocSh, "DocShell not found!" );
859 :
860 0 : if ( pDocSh )
861 : {
862 0 : pItem = pDocSh->GetItem( SID_COLOR_TABLE );
863 0 : if ( pItem != NULL )
864 0 : pColorTable = ( (SvxColorListItem*)pItem )->GetColorList();
865 : }
866 0 : if ( pColorTable.is() )
867 : {
868 : // filling the line color box
869 0 : maLbColMin.SetUpdateMode( false );
870 0 : maLbColMiddle.SetUpdateMode( false );
871 0 : maLbColMax.SetUpdateMode( false );
872 :
873 0 : for ( long i = 0; i < pColorTable->Count(); ++i )
874 : {
875 0 : XColorEntry* pEntry = pColorTable->GetColor(i);
876 0 : maLbColMin.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
877 0 : maLbColMiddle.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
878 0 : maLbColMax.InsertEntry( pEntry->GetColor(), pEntry->GetName() );
879 :
880 0 : if(pEntry->GetColor() == Color(COL_LIGHTRED))
881 0 : maLbColMin.SelectEntryPos(i);
882 0 : if(pEntry->GetColor() == Color(COL_GREEN))
883 0 : maLbColMiddle.SelectEntryPos(i);
884 0 : if(pEntry->GetColor() == Color(COL_LIGHTBLUE))
885 0 : maLbColMax.SelectEntryPos(i);
886 : }
887 0 : maLbColMin.SetUpdateMode( sal_True );
888 0 : maLbColMiddle.SetUpdateMode( sal_True );
889 0 : maLbColMax.SetUpdateMode( sal_True );
890 0 : }
891 0 : }
892 :
893 0 : ScFormatEntry* ScColorScale3FrmtEntry::createColorscaleEntry() const
894 : {
895 0 : ScColorScaleFormat* pColorScale = new ScColorScaleFormat(mpDoc);
896 0 : pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMin, maLbColMin, maEdMin, mpDoc, maPos));
897 0 : if(maLbColorFormat.GetSelectEntryPos() == 1)
898 0 : pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMiddle, maLbColMiddle, maEdMiddle, mpDoc, maPos));
899 0 : pColorScale->AddEntry(createColorScaleEntry(maLbEntryTypeMax, maLbColMax, maEdMax, mpDoc, maPos));
900 0 : return pColorScale;
901 : }
902 :
903 0 : rtl::OUString ScColorScale3FrmtEntry::GetExpressionString()
904 : {
905 0 : return ScCondFormatHelper::GetExpression( COLORSCALE, 0 );
906 : }
907 :
908 0 : ScFormatEntry* ScColorScale3FrmtEntry::GetEntry() const
909 : {
910 0 : return createColorscaleEntry();
911 : }
912 :
913 0 : void ScColorScale3FrmtEntry::SetActive()
914 : {
915 0 : maLbColorFormat.Show();
916 0 : maLbEntryTypeMin.Show();
917 0 : maLbEntryTypeMiddle.Show();
918 0 : maLbEntryTypeMax.Show();
919 :
920 0 : maEdMin.Show();
921 0 : maEdMiddle.Show();
922 0 : maEdMax.Show();
923 :
924 0 : maLbColMin.Show();
925 0 : maLbColMiddle.Show();
926 0 : maLbColMax.Show();
927 :
928 0 : Select();
929 0 : }
930 :
931 0 : void ScColorScale3FrmtEntry::SetInactive()
932 : {
933 0 : maLbColorFormat.Hide();
934 :
935 0 : maLbEntryTypeMin.Hide();
936 0 : maLbEntryTypeMiddle.Hide();
937 0 : maLbEntryTypeMax.Hide();
938 :
939 0 : maEdMin.Hide();
940 0 : maEdMiddle.Hide();
941 0 : maEdMax.Hide();
942 :
943 0 : maLbColMin.Hide();
944 0 : maLbColMiddle.Hide();
945 0 : maLbColMax.Hide();
946 :
947 0 : Deselect();
948 0 : }
949 :
950 0 : IMPL_LINK( ScColorScale3FrmtEntry, EntryTypeHdl, ListBox*, pBox )
951 : {
952 0 : bool bEnableEdit = true;
953 0 : sal_Int32 nPos = pBox->GetSelectEntryPos();
954 0 : if(nPos < 2)
955 : {
956 0 : bEnableEdit = false;
957 : }
958 :
959 0 : Edit* pEd = NULL;
960 0 : if(pBox == &maLbEntryTypeMin)
961 0 : pEd = &maEdMin;
962 0 : else if(pBox == &maLbEntryTypeMiddle)
963 0 : pEd = &maEdMiddle;
964 0 : else if(pBox == &maLbEntryTypeMax)
965 0 : pEd = &maEdMax;
966 :
967 0 : if(bEnableEdit)
968 0 : pEd->Enable();
969 : else
970 0 : pEd->Disable();
971 :
972 0 : return 0;
973 : }
974 :
975 0 : IMPL_LINK_NOARG( ScConditionFrmtEntry, ConditionTypeSelectHdl )
976 : {
977 0 : sal_Int32 nSelectPos = maLbCondType.GetSelectEntryPos();
978 0 : if(nSelectPos == 6 || nSelectPos == 7)
979 : {
980 0 : maEdVal1.Show();
981 0 : maEdVal2.Show();
982 : }
983 0 : else if(nSelectPos == 8 || nSelectPos == 9)
984 : {
985 0 : maEdVal2.Hide();
986 0 : maEdVal1.Hide();
987 : }
988 0 : else if(nSelectPos <= 5 || (nSelectPos >= 10 && nSelectPos <= 13)
989 : || nSelectPos >= 18)
990 : {
991 0 : maEdVal1.Show();
992 0 : maEdVal2.Hide();
993 : }
994 : else
995 : {
996 0 : maEdVal1.Hide();
997 0 : maEdVal2.Hide();
998 : }
999 :
1000 0 : return 0;
1001 : }
1002 :
1003 : //databar
1004 :
1005 : namespace {
1006 :
1007 0 : void SetDataBarEntryTypes( const ScColorScaleEntry& rEntry, ListBox& rLbType, Edit& rEdit )
1008 : {
1009 0 : rLbType.SelectEntryPos(rEntry.GetType());
1010 0 : switch(rEntry.GetType())
1011 : {
1012 : case COLORSCALE_AUTO:
1013 : case COLORSCALE_MIN:
1014 : case COLORSCALE_MAX:
1015 0 : break;
1016 : case COLORSCALE_PERCENTILE:
1017 0 : rEdit.SetText(rtl::OUString::valueOf(rEntry.GetValue()));
1018 0 : break;
1019 : case COLORSCALE_PERCENT:
1020 0 : rEdit.SetText(rtl::OUString::valueOf(rEntry.GetValue()));
1021 0 : break;
1022 : case COLORSCALE_FORMULA:
1023 0 : rEdit.SetText(rEntry.GetFormula(formula::FormulaGrammar::GRAM_DEFAULT));
1024 0 : break;
1025 : case COLORSCALE_VALUE:
1026 0 : rEdit.SetText(rtl::OUString::valueOf(rEntry.GetValue()));
1027 0 : break;
1028 : }
1029 0 : }
1030 :
1031 : }
1032 :
1033 0 : ScDataBarFrmtEntry::ScDataBarFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScDataBarFormat* pFormat ):
1034 : ScCondFrmtEntry( pParent, pDoc, rPos ),
1035 : maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
1036 : maLbDataBarMinType( this, ScResId( LB_TYPE_COL_SCALE_MIN ) ),
1037 : maLbDataBarMaxType( this, ScResId( LB_TYPE_COL_SCALE_MAX ) ),
1038 : maEdDataBarMin( this, ScResId( ED_COL_SCALE_MIN ) ),
1039 : maEdDataBarMax( this, ScResId( ED_COL_SCALE_MAX ) ),
1040 0 : maBtOptions( this, ScResId( BTN_OPTIONS ) )
1041 : {
1042 0 : maLbColorFormat.SelectEntryPos(2);
1043 0 : maLbType.SelectEntryPos(0);
1044 0 : if(pFormat)
1045 : {
1046 0 : mpDataBarData.reset(new ScDataBarFormatData(*pFormat->GetDataBarData()));
1047 0 : SetDataBarEntryTypes(*mpDataBarData->mpLowerLimit, maLbDataBarMinType, maEdDataBarMin);
1048 0 : SetDataBarEntryTypes(*mpDataBarData->mpUpperLimit, maLbDataBarMaxType, maEdDataBarMax);
1049 0 : DataBarTypeSelectHdl(NULL);
1050 : }
1051 : else
1052 : {
1053 0 : maLbDataBarMinType.SelectEntryPos(0);
1054 0 : maLbDataBarMaxType.SelectEntryPos(0);
1055 0 : DataBarTypeSelectHdl(NULL);
1056 : }
1057 0 : Init();
1058 :
1059 0 : maLbColorFormat.SetSelectHdl( LINK( pParent, ScCondFormatList, ColFormatTypeHdl ) );
1060 :
1061 0 : FreeResource();
1062 0 : }
1063 :
1064 0 : ScFormatEntry* ScDataBarFrmtEntry::GetEntry() const
1065 : {
1066 0 : return createDatabarEntry();
1067 : }
1068 :
1069 0 : void ScDataBarFrmtEntry::Init()
1070 : {
1071 0 : maLbDataBarMinType.SetSelectHdl( LINK( this, ScDataBarFrmtEntry, DataBarTypeSelectHdl ) );
1072 0 : maLbDataBarMaxType.SetSelectHdl( LINK( this, ScDataBarFrmtEntry, DataBarTypeSelectHdl ) );
1073 :
1074 0 : maBtOptions.SetClickHdl( LINK( this, ScDataBarFrmtEntry, OptionBtnHdl ) );
1075 :
1076 0 : if(!mpDataBarData)
1077 : {
1078 0 : mpDataBarData.reset(new ScDataBarFormatData());
1079 0 : mpDataBarData->mpUpperLimit.reset(new ScColorScaleEntry());
1080 0 : mpDataBarData->mpLowerLimit.reset(new ScColorScaleEntry());
1081 0 : mpDataBarData->mpLowerLimit->SetType(COLORSCALE_AUTO);
1082 0 : mpDataBarData->mpUpperLimit->SetType(COLORSCALE_AUTO);
1083 0 : mpDataBarData->maPositiveColor = COL_LIGHTBLUE;
1084 : }
1085 0 : }
1086 :
1087 0 : ScFormatEntry* ScDataBarFrmtEntry::createDatabarEntry() const
1088 : {
1089 0 : SetColorScaleEntry(mpDataBarData->mpLowerLimit.get(), maLbDataBarMinType, maEdDataBarMin, mpDoc, maPos, true);
1090 0 : SetColorScaleEntry(mpDataBarData->mpUpperLimit.get(), maLbDataBarMaxType, maEdDataBarMax, mpDoc, maPos, true);
1091 0 : ScDataBarFormat* pDataBar = new ScDataBarFormat(mpDoc);
1092 0 : pDataBar->SetDataBarData(new ScDataBarFormatData(*mpDataBarData.get()));
1093 0 : return pDataBar;
1094 : }
1095 :
1096 0 : rtl::OUString ScDataBarFrmtEntry::GetExpressionString()
1097 : {
1098 0 : return ScCondFormatHelper::GetExpression( DATABAR, 0 );
1099 : }
1100 :
1101 0 : void ScDataBarFrmtEntry::SetActive()
1102 : {
1103 0 : maLbColorFormat.Show();
1104 :
1105 0 : maLbDataBarMinType.Show();
1106 0 : maLbDataBarMaxType.Show();
1107 0 : maEdDataBarMin.Show();
1108 0 : maEdDataBarMax.Show();
1109 0 : maBtOptions.Show();
1110 :
1111 0 : Select();
1112 0 : }
1113 :
1114 0 : void ScDataBarFrmtEntry::SetInactive()
1115 : {
1116 0 : maLbColorFormat.Hide();
1117 :
1118 0 : maLbDataBarMinType.Hide();
1119 0 : maLbDataBarMaxType.Hide();
1120 0 : maEdDataBarMin.Hide();
1121 0 : maEdDataBarMax.Hide();
1122 0 : maBtOptions.Hide();
1123 :
1124 0 : Deselect();
1125 0 : }
1126 :
1127 0 : IMPL_LINK_NOARG( ScDataBarFrmtEntry, DataBarTypeSelectHdl )
1128 : {
1129 0 : sal_Int32 nSelectPos = maLbDataBarMinType.GetSelectEntryPos();
1130 0 : if(nSelectPos <= COLORSCALE_MAX)
1131 0 : maEdDataBarMin.Disable();
1132 : else
1133 0 : maEdDataBarMin.Enable();
1134 :
1135 0 : nSelectPos = maLbDataBarMaxType.GetSelectEntryPos();
1136 0 : if(nSelectPos <= COLORSCALE_MAX)
1137 0 : maEdDataBarMax.Disable();
1138 : else
1139 0 : maEdDataBarMax.Enable();
1140 :
1141 0 : return 0;
1142 : }
1143 :
1144 0 : IMPL_LINK_NOARG( ScDataBarFrmtEntry, OptionBtnHdl )
1145 : {
1146 0 : SetColorScaleEntry(mpDataBarData->mpLowerLimit.get(), maLbDataBarMinType, maEdDataBarMin, mpDoc, maPos, true);
1147 0 : SetColorScaleEntry(mpDataBarData->mpUpperLimit.get(), maLbDataBarMaxType, maEdDataBarMax, mpDoc, maPos, true);
1148 0 : ScDataBarSettingsDlg* pDlg = new ScDataBarSettingsDlg(this, *mpDataBarData, mpDoc, maPos);
1149 0 : if( pDlg->Execute() == RET_OK)
1150 : {
1151 0 : mpDataBarData.reset(pDlg->GetData());
1152 0 : SetDataBarEntryTypes(*mpDataBarData->mpLowerLimit, maLbDataBarMinType, maEdDataBarMin);
1153 0 : SetDataBarEntryTypes(*mpDataBarData->mpUpperLimit, maLbDataBarMaxType, maEdDataBarMax);
1154 0 : DataBarTypeSelectHdl(NULL);
1155 : }
1156 0 : return 0;
1157 : }
1158 :
1159 0 : ScDateFrmtEntry::ScDateFrmtEntry( Window* pParent, ScDocument* pDoc, const ScCondDateFormatEntry* pFormat ):
1160 : ScCondFrmtEntry( pParent, pDoc, ScAddress() ),
1161 : maLbDateEntry( this, ScResId( LB_DATE_TYPE ) ),
1162 : maFtStyle( this, ScResId( FT_STYLE ) ),
1163 : maLbStyle( this, ScResId( LB_STYLE ) ),
1164 0 : maWdPreview( this, ScResId( WD_PREVIEW ) )
1165 : {
1166 0 : Init();
1167 0 : FreeResource();
1168 :
1169 0 : if(pFormat)
1170 : {
1171 0 : sal_Int32 nPos = static_cast<sal_Int32>(pFormat->GetDateType());
1172 0 : maLbDateEntry.SelectEntryPos(nPos);
1173 :
1174 0 : rtl::OUString aStyleName = pFormat->GetStyleName();
1175 0 : maLbStyle.SelectEntry(aStyleName);
1176 : }
1177 0 : }
1178 :
1179 0 : void ScDateFrmtEntry::Init()
1180 : {
1181 0 : maLbDateEntry.SelectEntryPos(0);
1182 0 : maLbType.SelectEntryPos(3);
1183 :
1184 0 : FillStyleListBox( mpDoc, maLbStyle );
1185 0 : maLbStyle.SetSelectHdl( LINK( this, ScDateFrmtEntry, StyleSelectHdl ) );
1186 0 : maLbStyle.SelectEntryPos(1);
1187 0 : }
1188 :
1189 0 : void ScDateFrmtEntry::SetActive()
1190 : {
1191 0 : maLbDateEntry.Show();
1192 0 : maFtStyle.Show();
1193 0 : maWdPreview.Show();
1194 :
1195 0 : Select();
1196 0 : }
1197 :
1198 0 : void ScDateFrmtEntry::SetInactive()
1199 : {
1200 0 : maLbDateEntry.Hide();
1201 0 : maFtStyle.Hide();
1202 0 : maWdPreview.Hide();
1203 :
1204 0 : Deselect();
1205 0 : }
1206 :
1207 0 : ScFormatEntry* ScDateFrmtEntry::GetEntry() const
1208 : {
1209 0 : ScCondDateFormatEntry* pNewEntry = new ScCondDateFormatEntry(mpDoc);
1210 0 : condformat::ScCondFormatDateType eType = static_cast<condformat::ScCondFormatDateType>(maLbDateEntry.GetSelectEntryPos());
1211 0 : pNewEntry->SetDateType(eType);
1212 0 : pNewEntry->SetStyleName(maLbStyle.GetSelectEntry());
1213 0 : return pNewEntry;
1214 : }
1215 :
1216 0 : rtl::OUString ScDateFrmtEntry::GetExpressionString()
1217 : {
1218 0 : return ScCondFormatHelper::GetExpression(DATE, 0);
1219 : }
1220 :
1221 0 : IMPL_LINK_NOARG( ScDateFrmtEntry, StyleSelectHdl )
1222 : {
1223 0 : StyleSelect( maLbStyle, mpDoc, maWdPreview );
1224 :
1225 0 : return 0;
1226 : }
1227 :
1228 0 : ScIconSetFrmtEntry::ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry( Window* pParent, ScIconSetType eType, sal_Int32 i, const ScColorScaleEntry* pEntry ):
1229 : Control( pParent, ScResId( RID_ICON_SET_ENTRY ) ),
1230 : maImgIcon( this, ScResId( IMG_ICON ) ),
1231 : maFtEntry( this, ScResId( FT_ICON_SET_ENTRY_TEXT ) ),
1232 : maEdEntry( this, ScResId( ED_ICON_SET_ENTRY_VALUE ) ),
1233 0 : maLbEntryType( this, ScResId( LB_ICON_SET_ENTRY_TYPE ) )
1234 : {
1235 0 : maImgIcon.SetImage(ScIconSetFormat::getBitmap( eType, i ));
1236 0 : if(pEntry)
1237 : {
1238 0 : switch(pEntry->GetType())
1239 : {
1240 : case COLORSCALE_VALUE:
1241 0 : maLbEntryType.SelectEntryPos(0);
1242 0 : maEdEntry.SetText(OUString::valueOf(pEntry->GetValue()));
1243 0 : break;
1244 : case COLORSCALE_PERCENTILE:
1245 0 : maLbEntryType.SelectEntryPos(2);
1246 0 : maEdEntry.SetText(OUString::valueOf(pEntry->GetValue()));
1247 0 : break;
1248 : case COLORSCALE_PERCENT:
1249 0 : maLbEntryType.SelectEntryPos(1);
1250 0 : maEdEntry.SetText(OUString::valueOf(pEntry->GetValue()));
1251 0 : break;
1252 : case COLORSCALE_FORMULA:
1253 0 : maLbEntryType.SelectEntryPos(3);
1254 0 : maEdEntry.SetText(pEntry->GetFormula(formula::FormulaGrammar::GRAM_DEFAULT));
1255 0 : break;
1256 : default:
1257 : assert(false);
1258 : }
1259 : }
1260 : else
1261 : {
1262 0 : maLbEntryType.SelectEntryPos(1);
1263 : }
1264 0 : FreeResource();
1265 0 : }
1266 :
1267 0 : ScColorScaleEntry* ScIconSetFrmtEntry::ScIconSetFrmtDataEntry::CreateEntry(ScDocument* pDoc, const ScAddress& rPos) const
1268 : {
1269 0 : sal_Int32 nPos = maLbEntryType.GetSelectEntryPos();
1270 0 : rtl::OUString aText = maEdEntry.GetText();
1271 0 : ScColorScaleEntry* pEntry = new ScColorScaleEntry();
1272 :
1273 0 : sal_uInt32 nIndex = 0;
1274 0 : double nVal = 0;
1275 0 : SvNumberFormatter* pNumberFormatter = pDoc->GetFormatTable();
1276 0 : pNumberFormatter->IsNumberFormat(aText, nIndex, nVal);
1277 0 : pEntry->SetValue(nVal);
1278 :
1279 0 : switch(nPos)
1280 : {
1281 : case 0:
1282 0 : pEntry->SetType(COLORSCALE_VALUE);
1283 0 : break;
1284 : case 1:
1285 0 : pEntry->SetType(COLORSCALE_PERCENT);
1286 0 : break;
1287 : case 2:
1288 0 : pEntry->SetType(COLORSCALE_PERCENTILE);
1289 0 : break;
1290 : case 3:
1291 0 : pEntry->SetType(COLORSCALE_FORMULA);
1292 0 : pEntry->SetFormula(aText, pDoc, rPos, pDoc->GetGrammar());
1293 0 : break;
1294 : default:
1295 : assert(false);
1296 : }
1297 :
1298 0 : return pEntry;
1299 : }
1300 :
1301 0 : void ScIconSetFrmtEntry::ScIconSetFrmtDataEntry::SetLastEntry()
1302 : {
1303 0 : maEdEntry.Hide();
1304 0 : maLbEntryType.Hide();
1305 0 : maFtEntry.Hide();
1306 0 : }
1307 :
1308 0 : ScIconSetFrmtEntry::ScIconSetFrmtEntry( Window* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScIconSetFormat* pFormat ):
1309 : ScCondFrmtEntry( pParent, pDoc, rPos ),
1310 : maLbColorFormat( this, ScResId( LB_COLOR_FORMAT ) ),
1311 0 : maLbIconSetType( this, ScResId( LB_ICONSET_TYPE ) )
1312 : {
1313 0 : Init();
1314 0 : FreeResource();
1315 0 : maLbColorFormat.SetSelectHdl( LINK( pParent, ScCondFormatList, ColFormatTypeHdl ) );
1316 :
1317 0 : if(pFormat)
1318 : {
1319 0 : const ScIconSetFormatData* pIconSetFormatData = pFormat->GetIconSetData();
1320 0 : ScIconSetType eType = pIconSetFormatData->eIconSetType;
1321 0 : sal_Int32 nType = static_cast<sal_Int32>(eType);
1322 0 : maLbIconSetType.SelectEntryPos(nType);
1323 :
1324 0 : for(size_t i = 0, n = pIconSetFormatData->maEntries.size();
1325 : i < n; ++i)
1326 : {
1327 0 : maEntries.push_back( new ScIconSetFrmtDataEntry( this, eType, i, &pIconSetFormatData->maEntries[i] ) );
1328 0 : Point aPos = maEntries[0].GetPosPixel();
1329 0 : aPos.Y() += maEntries[0].GetSizePixel().Height() * i * 1.2;
1330 0 : maEntries[i].SetPosPixel( aPos );
1331 : }
1332 0 : maEntries.back().SetLastEntry();
1333 : }
1334 : else
1335 0 : IconSetTypeHdl(NULL);
1336 0 : }
1337 :
1338 0 : void ScIconSetFrmtEntry::Init()
1339 : {
1340 0 : maLbColorFormat.SelectEntryPos(3);
1341 0 : maLbType.SelectEntryPos(0);
1342 0 : maLbIconSetType.SelectEntryPos(0);
1343 :
1344 0 : maLbIconSetType.SetSelectHdl( LINK( this, ScIconSetFrmtEntry, IconSetTypeHdl ) );
1345 0 : }
1346 :
1347 0 : IMPL_LINK_NOARG( ScIconSetFrmtEntry, IconSetTypeHdl )
1348 : {
1349 0 : ScIconSetMap* pMap = ScIconSetFormat::getIconSetMap();
1350 :
1351 0 : sal_Int32 nPos = maLbIconSetType.GetSelectEntryPos();
1352 0 : sal_uInt32 nElements = pMap[nPos].nElements;
1353 0 : maEntries.clear();
1354 :
1355 0 : for(size_t i = 0; i < nElements; ++i)
1356 : {
1357 0 : maEntries.push_back( new ScIconSetFrmtDataEntry( this, static_cast<ScIconSetType>(nPos), i ) );
1358 0 : Point aPos = maEntries[0].GetPosPixel();
1359 0 : aPos.Y() += maEntries[0].GetSizePixel().Height() * i * 1.2;
1360 0 : maEntries[i].SetPosPixel( aPos );
1361 0 : maEntries[i].Show();
1362 : }
1363 0 : maEntries.back().SetLastEntry();
1364 :
1365 0 : SetHeight();
1366 0 : static_cast<ScCondFormatList*>(GetParent())->RecalcAll();
1367 :
1368 0 : return 0;
1369 : }
1370 :
1371 0 : OUString ScIconSetFrmtEntry::GetExpressionString()
1372 : {
1373 0 : return ScCondFormatHelper::GetExpression(ICONSET, 0);
1374 : }
1375 :
1376 0 : void ScIconSetFrmtEntry::SetActive()
1377 : {
1378 0 : maLbColorFormat.Show();
1379 0 : maLbIconSetType.Show();
1380 0 : for(ScIconSetFrmtDateEntriesType::iterator itr = maEntries.begin(),
1381 0 : itrEnd = maEntries.end(); itr != itrEnd; ++itr)
1382 : {
1383 0 : itr->Show();
1384 : }
1385 :
1386 0 : Select();
1387 0 : }
1388 :
1389 0 : void ScIconSetFrmtEntry::SetInactive()
1390 : {
1391 0 : maLbColorFormat.Hide();
1392 0 : maLbIconSetType.Hide();
1393 0 : for(ScIconSetFrmtDateEntriesType::iterator itr = maEntries.begin(),
1394 0 : itrEnd = maEntries.end(); itr != itrEnd; ++itr)
1395 : {
1396 0 : itr->Hide();
1397 : }
1398 :
1399 0 : Deselect();
1400 0 : }
1401 :
1402 0 : ScFormatEntry* ScIconSetFrmtEntry::GetEntry() const
1403 : {
1404 0 : ScIconSetFormat* pFormat = new ScIconSetFormat(mpDoc);
1405 :
1406 0 : ScIconSetFormatData* pData = new ScIconSetFormatData;
1407 0 : pData->eIconSetType = static_cast<ScIconSetType>(maLbIconSetType.GetSelectEntryPos());
1408 0 : for(ScIconSetFrmtDateEntriesType::const_iterator itr = maEntries.begin(),
1409 0 : itrEnd = maEntries.end(); itr != itrEnd; ++itr)
1410 : {
1411 0 : pData->maEntries.push_back(itr->CreateEntry(mpDoc, maPos));
1412 : }
1413 0 : pFormat->SetIconSetData(pData);
1414 :
1415 0 : return pFormat;
1416 15 : }
1417 :
1418 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|