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

Generated by: LCOV version 1.11