LCOV - code coverage report
Current view: top level - libreoffice/sc/source/ui/condformat - condformatdlgentry.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 809 0.1 %
Date: 2012-12-27 Functions: 2 87 2.3 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.10