summaryrefslogtreecommitdiff
path: root/sc/source/ui/attrdlg/condfrmt.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/ui/attrdlg/condfrmt.cxx')
-rw-r--r--sc/source/ui/attrdlg/condfrmt.cxx832
1 files changed, 832 insertions, 0 deletions
diff --git a/sc/source/ui/attrdlg/condfrmt.cxx b/sc/source/ui/attrdlg/condfrmt.cxx
new file mode 100644
index 000000000000..704546d76bf6
--- /dev/null
+++ b/sc/source/ui/attrdlg/condfrmt.cxx
@@ -0,0 +1,832 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: condfrmt.cxx,v $
+ * $Revision: 1.10 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sc.hxx"
+
+
+#include <sfx2/dispatch.hxx>
+#include <svtools/stritem.hxx>
+
+#include "tabvwsh.hxx"
+#include "reffact.hxx"
+#include "conditio.hxx"
+#include "stlpool.hxx"
+#include "uiitems.hxx"
+#include "document.hxx"
+#include "scresid.hxx"
+
+#include "condfrmt.hrc"
+#include "globstr.hrc"
+
+#define _CONDFRMT_CXX
+#include "condfrmt.hxx"
+#undef _CONDFRMT_CXX
+
+
+//============================================================================
+// class ScConditionalFormat
+
+//----------------------------------------------------------------------------
+// Konstruktor
+
+ScConditionalFormatDlg::ScConditionalFormatDlg(
+ SfxBindings* pB, SfxChildWindow* pCW, Window* pParent,
+ ScDocument* pCurDoc,
+ const ScConditionalFormat* pCurrentFormat )
+ : ScAnyRefDlg ( pB, pCW, pParent, RID_SCDLG_CONDFORMAT ),
+
+ aCbxCond1 ( this, ScResId( CBX_COND1 ) ),
+ aLbCond11 ( this, ScResId( LB_COND1_1 ) ),
+ aLbCond12 ( this, ScResId( LB_COND1_2 ) ),
+ aEdtCond11 ( this, this, ScResId( EDT_COND1_1 ) ),
+ aRbCond11 ( this, ScResId( RB_COND1_1 ), &aEdtCond11,this ),
+ aFtCond1And ( this, ScResId( FT_COND1_AND ) ),
+ aEdtCond12 ( this, this, ScResId( EDT_COND1_2 ) ),
+ aRbCond12 ( this, ScResId( RB_COND1_2 ), &aEdtCond12,this ),
+ aFtCond1Template ( this, ScResId( FT_COND1_TEMPLATE ) ),
+ aLbCond1Template ( this, ScResId( LB_COND1_TEMPLATE ) ),
+ aBtnNew1 ( this, ScResId( BTN_COND1_NEW ) ),
+ aFlSep1 ( this, ScResId( FL_SEP1 ) ),
+
+ aCbxCond2 ( this, ScResId( CBX_COND2 ) ),
+ aLbCond21 ( this, ScResId( LB_COND2_1 ) ),
+ aLbCond22 ( this, ScResId( LB_COND2_2 ) ),
+ aEdtCond21 ( this, this, ScResId( EDT_COND2_1 ) ),
+ aRbCond21 ( this, ScResId( RB_COND2_1 ), &aEdtCond21,this ),
+ aFtCond2And ( this, ScResId( FT_COND2_AND ) ),
+ aEdtCond22 ( this, this, ScResId( EDT_COND2_2 ) ),
+ aRbCond22 ( this, ScResId( RB_COND2_2 ), &aEdtCond22,this ),
+ aFtCond2Template ( this, ScResId( FT_COND2_TEMPLATE ) ),
+ aLbCond2Template ( this, ScResId( LB_COND2_TEMPLATE ) ),
+ aBtnNew2 ( this, ScResId( BTN_COND2_NEW ) ),
+ aFlSep2 ( this, ScResId( FL_SEP2 ) ),
+
+ aCbxCond3 ( this, ScResId( CBX_COND3 ) ),
+ aLbCond31 ( this, ScResId( LB_COND3_1 ) ),
+ aLbCond32 ( this, ScResId( LB_COND3_2 ) ),
+ aEdtCond31 ( this, this, ScResId( EDT_COND3_1 ) ),
+ aRbCond31 ( this, ScResId( RB_COND3_1 ), &aEdtCond31,this ),
+ aFtCond3And ( this, ScResId( FT_COND3_AND ) ),
+ aEdtCond32 ( this, this, ScResId( EDT_COND3_2 ) ),
+ aRbCond32 ( this, ScResId( RB_COND3_2 ), &aEdtCond32,this ),
+ aFtCond3Template ( this, ScResId( FT_COND3_TEMPLATE ) ),
+ aLbCond3Template ( this, ScResId( LB_COND3_TEMPLATE ) ),
+ aBtnNew3 ( this, ScResId( BTN_COND3_NEW ) ),
+
+ aBtnOk ( this, ScResId( BTN_OK ) ),
+ aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
+ aBtnHelp ( this, ScResId( BTN_HELP ) ),
+ pEdActive ( NULL ),
+ bDlgLostFocus ( FALSE ),
+
+ pDoc ( pCurDoc )
+{
+ Point aPos;
+ String aName;
+ SfxStyleSheetBase* pStyle;
+
+ FreeResource();
+
+ // Handler setzen
+ aCbxCond1.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond1Hdl ) );
+ aLbCond11.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond11Hdl ) );
+ aLbCond12.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond12Hdl ) );
+
+ aCbxCond2.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond2Hdl ) );
+ aLbCond21.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond21Hdl ) );
+ aLbCond22.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond22Hdl ) );
+
+ aCbxCond3.SetClickHdl ( LINK( this, ScConditionalFormatDlg, ClickCond3Hdl ) );
+ aLbCond31.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond31Hdl ) );
+ aLbCond32.SetSelectHdl( LINK( this, ScConditionalFormatDlg, ChangeCond32Hdl ) );
+
+ aBtnOk.SetClickHdl ( LINK( this, ScConditionalFormatDlg, BtnHdl ) );
+//? aBtnCancel.SetClickHdl( LINK( this, ScConditionalFormatDlg, BtnHdl ) );
+
+ Link aLink = LINK( this, ScConditionalFormatDlg, NewBtnHdl );
+ aBtnNew1.SetClickHdl( aLink );
+ aBtnNew2.SetClickHdl( aLink );
+ aBtnNew3.SetClickHdl( aLink );
+
+ aLink = LINK( this, ScConditionalFormatDlg, GetFocusHdl );
+ aEdtCond11.SetGetFocusHdl( aLink );
+ aEdtCond12.SetGetFocusHdl( aLink );
+ aEdtCond21.SetGetFocusHdl( aLink );
+ aEdtCond22.SetGetFocusHdl( aLink );
+ aEdtCond31.SetGetFocusHdl( aLink );
+ aEdtCond32.SetGetFocusHdl( aLink );
+ aRbCond11.SetGetFocusHdl( aLink );
+ aRbCond12.SetGetFocusHdl( aLink );
+ aRbCond21.SetGetFocusHdl( aLink );
+ aRbCond22.SetGetFocusHdl( aLink );
+ aRbCond31.SetGetFocusHdl( aLink );
+ aRbCond32.SetGetFocusHdl( aLink );
+
+ aLink = LINK( this, ScConditionalFormatDlg, LoseFocusHdl );
+ aEdtCond11.SetLoseFocusHdl( aLink );
+ aEdtCond12.SetLoseFocusHdl( aLink );
+ aEdtCond21.SetLoseFocusHdl( aLink );
+ aEdtCond22.SetLoseFocusHdl( aLink );
+ aEdtCond31.SetLoseFocusHdl( aLink );
+ aEdtCond32.SetLoseFocusHdl( aLink );
+ aRbCond11.SetLoseFocusHdl( aLink );
+ aRbCond12.SetLoseFocusHdl( aLink );
+ aRbCond21.SetLoseFocusHdl( aLink );
+ aRbCond22.SetLoseFocusHdl( aLink );
+ aRbCond31.SetLoseFocusHdl( aLink );
+ aRbCond32.SetLoseFocusHdl( aLink );
+
+ // Condition 1
+ aCond1Pos1 = aLbCond12.GetPosPixel(); // Position Edit ohne Listbox
+ aCond1Pos2 = aEdtCond11.GetPosPixel(); // Position Edit mit Listbox
+ aRBtn1Pos1 = aRbCond11.GetPosPixel();
+ aRBtn1Pos2 = aRbCond12.GetPosPixel();
+ aPos = aEdtCond12.GetPosPixel();
+ aPos.X() += aEdtCond12.GetSizePixel().Width(); // rechter Rand
+ aCond1Size3 = aEdtCond11.GetSizePixel();
+ aCond1Size2 = Size( aPos.X() - aCond1Pos2.X(), aCond1Size3.Height() );
+ aCond1Size1 = Size( aPos.X() - aCond1Pos1.X(), aCond1Size3.Height() );
+
+ aCbxCond1.Check();
+ aLbCond11.SelectEntryPos( 0 );
+ aLbCond12.SelectEntryPos( 0 );
+
+ // Condition 2
+ aCond2Pos1 = aLbCond22.GetPosPixel(); // Position Edit ohne Listbox
+ aCond2Pos2 = aEdtCond21.GetPosPixel(); // Position Edit mit Listbox
+ aRBtn2Pos1 = aRbCond21.GetPosPixel();
+ aRBtn2Pos2 = aRbCond22.GetPosPixel();
+ aPos = aEdtCond22.GetPosPixel();
+ aPos.X() += aEdtCond22.GetSizePixel().Width(); // rechter Rand
+ aCond2Size3 = aEdtCond21.GetSizePixel();
+ aCond2Size2 = Size( aPos.X() - aCond2Pos2.X(), aCond2Size3.Height() );
+ aCond2Size1 = Size( aPos.X() - aCond2Pos1.X(), aCond2Size3.Height() );
+
+ aCbxCond2.Check( FALSE );
+ aLbCond21.SelectEntryPos( 0 );
+ aLbCond22.SelectEntryPos( 0 );
+
+ // Condition 3
+ aCond3Pos1 = aLbCond32.GetPosPixel(); // Position Edit ohne Listbox
+ aCond3Pos2 = aEdtCond31.GetPosPixel(); // Position Edit mit Listbox
+ aRBtn3Pos1 = aRbCond31.GetPosPixel();
+ aRBtn3Pos2 = aRbCond32.GetPosPixel();
+ aPos = aEdtCond32.GetPosPixel();
+ aPos.X() += aEdtCond32.GetSizePixel().Width(); // rechter Rand
+ aCond3Size3 = aEdtCond31.GetSizePixel();
+ aCond3Size2 = Size( aPos.X() - aCond3Pos2.X(), aCond3Size3.Height() );
+ aCond3Size1 = Size( aPos.X() - aCond3Pos1.X(), aCond3Size3.Height() );
+
+ aCbxCond3.Check( FALSE );
+ aLbCond31.SelectEntryPos( 0 );
+ aLbCond32.SelectEntryPos( 0 );
+
+ // Vorlagen aus pDoc holen
+ SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
+ for ( pStyle = aStyleIter.First(); pStyle; pStyle = aStyleIter.Next() )
+ {
+ aName = pStyle->GetName();
+ aLbCond1Template.InsertEntry( aName );
+ aLbCond2Template.InsertEntry( aName );
+ aLbCond3Template.InsertEntry( aName );
+ }
+
+ // Vorlagen eintragen
+//! pStyle = pDoc->GetSelectionStyle( /* ??? const ScMarkData& rMark ??? */ );
+ pStyle = NULL; //!
+ if (pStyle)
+ aName = pStyle->GetName();
+ else
+ aName = ScGlobal::GetRscString(STR_STYLENAME_STANDARD);
+ aLbCond1Template.SelectEntry( aName );
+ aLbCond2Template.SelectEntry( aName );
+ aLbCond3Template.SelectEntry( aName );
+
+ ScAddress aCurPos;
+ ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
+ if (pViewShell)
+ {
+ ScViewData* pData = pViewShell->GetViewData();
+ aCurPos = ScAddress( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
+ }
+
+ // Inhalt aus ConditionalFormat holen
+ if ( pCurrentFormat )
+ {
+ const ScCondFormatEntry* pEntry;
+ if ( pCurrentFormat->Count() > 0 )
+ {
+ pEntry= pCurrentFormat->GetEntry( 0 );
+ aEdtCond11.SetText( pEntry->GetExpression( aCurPos, 0 ) );
+ aLbCond1Template.SelectEntry( pEntry->GetStyle() );
+
+ ScConditionMode eMode = pEntry->GetOperation();
+ if ( eMode == SC_COND_DIRECT ) // via Formel
+ {
+ aLbCond11.SelectEntryPos( 1 );
+ ChangeCond11Hdl( NULL );
+ }
+ else if ( eMode == SC_COND_NONE ) // ???
+ ;
+ else // via Werte
+ {
+ aLbCond12.SelectEntryPos( sal::static_int_cast<USHORT>( eMode ) );
+ if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
+ aEdtCond12.SetText( pEntry->GetExpression( aCurPos, 1 ) );
+ }
+ }
+
+
+ if ( pCurrentFormat->Count() > 1 )
+ {
+ aCbxCond2.Check( TRUE );
+ pEntry= pCurrentFormat->GetEntry( 1 );
+ aEdtCond21.SetText( pEntry->GetExpression( aCurPos, 0 ) );
+ aLbCond2Template.SelectEntry( pEntry->GetStyle() );
+
+ ScConditionMode eMode = pEntry->GetOperation();
+ if ( eMode == SC_COND_DIRECT ) // via Formel
+ {
+ aLbCond21.SelectEntryPos( 1 );
+ ChangeCond21Hdl( NULL );
+ }
+ else if ( eMode == SC_COND_NONE ) // ???
+ ;
+ else // via Werte
+ {
+ aLbCond22.SelectEntryPos( sal::static_int_cast<USHORT>( eMode ) );
+ if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
+ aEdtCond22.SetText( pEntry->GetExpression( aCurPos, 1 ) );
+ }
+ }
+
+ if ( pCurrentFormat->Count() > 2 )
+ {
+ aCbxCond3.Check( TRUE );
+ pEntry= pCurrentFormat->GetEntry( 2 );
+ aEdtCond31.SetText( pEntry->GetExpression( aCurPos, 0 ) );
+ aLbCond3Template.SelectEntry( pEntry->GetStyle() );
+
+ ScConditionMode eMode = pEntry->GetOperation();
+ if ( eMode == SC_COND_DIRECT ) // via Formel
+ {
+ aLbCond31.SelectEntryPos( 1 );
+ ChangeCond31Hdl( NULL );
+ }
+ else if ( eMode == SC_COND_NONE ) // ???
+ ;
+ else // via Werte
+ {
+ aLbCond32.SelectEntryPos( sal::static_int_cast<USHORT>( eMode ) );
+ if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) )
+ aEdtCond32.SetText( pEntry->GetExpression( aCurPos, 1 ) );
+ }
+ }
+ }
+
+ ClickCond1Hdl( NULL );
+ ClickCond2Hdl( NULL );
+ ClickCond3Hdl( NULL );
+
+ ChangeCond12Hdl( NULL );
+ ChangeCond22Hdl( NULL );
+ ChangeCond32Hdl( NULL );
+
+ aEdtCond11.GrabFocus();
+ pEdActive = &aEdtCond11;
+ //@BugID 54702 Enablen/Disablen nur noch in Basisklasse
+ //SFX_APPWINDOW->Enable(); // Ref-Feld hat Focus
+// SFX_APPWINDOW->Disable();
+}
+
+
+//----------------------------------------------------------------------------
+// Destruktor
+
+__EXPORT ScConditionalFormatDlg::~ScConditionalFormatDlg()
+{
+}
+
+
+//----------------------------------------------------------------------------
+
+void ScConditionalFormatDlg::SetReference( const ScRange& rRef, ScDocument* pDocP )
+{
+ if ( pEdActive )
+ {
+ if ( rRef.aStart != rRef.aEnd )
+ RefInputStart(pEdActive);
+
+ String aStr;
+ rRef.Format( aStr, SCR_ABS_3D, pDocP, pDocP->GetAddressConvention () );
+ String aVal( pEdActive->GetText() );
+ Selection aSel( pEdActive->GetSelection() );
+ aSel.Justify();
+ aVal.Erase( (xub_StrLen)aSel.Min(), (xub_StrLen)aSel.Len() );
+ aVal.Insert( aStr, (xub_StrLen)aSel.Min() );
+ Selection aNewSel( aSel.Min(), aSel.Min()+aStr.Len() );
+ pEdActive->SetRefString( aVal );
+ pEdActive->SetSelection( aNewSel );
+// pEdActive->SetModifyFlag();
+ }
+}
+
+//----------------------------------------------------------------------------
+
+void ScConditionalFormatDlg::AddRefEntry()
+{
+ if ( pEdActive )
+ {
+ String aVal = pEdActive->GetText();
+ aVal += ';';
+ pEdActive->SetText(aVal);
+
+ xub_StrLen nLen = aVal.Len();
+ pEdActive->SetSelection( Selection( nLen, nLen ) );
+// pEdActive->SetModifyFlag();
+ }
+}
+
+//----------------------------------------------------------------------------
+
+BOOL ScConditionalFormatDlg::IsRefInputMode() const
+{
+ return (pEdActive != NULL);
+}
+
+
+//----------------------------------------------------------------------------
+
+void ScConditionalFormatDlg::SetActive()
+{
+ if ( bDlgLostFocus )
+ {
+ bDlgLostFocus = FALSE;
+ if( pEdActive )
+ pEdActive->GrabFocus();
+ }
+ else
+ GrabFocus();
+
+ RefInputDone();
+}
+
+
+//----------------------------------------------------------------------------
+// Holt die ausgewaehlte bedingte Formatierung ab
+
+void ScConditionalFormatDlg::GetConditionalFormat( ScConditionalFormat& rCndFmt )
+{
+ ScConditionMode eOper;
+ String sExpr1;
+ String sExpr2;
+ String sStyle;
+ ScAddress aCurPos;
+
+ ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell();
+ if (pViewShell)
+ {
+ ScViewData* pData = pViewShell->GetViewData();
+ aCurPos = ScAddress( pData->GetCurX(), pData->GetCurY(), pData->GetTabNo() );
+ }
+
+ if ( aCbxCond1.IsChecked() )
+ {
+ if ( aLbCond11.GetSelectEntryPos() == 1 ) // via Formel
+ eOper = SC_COND_DIRECT;
+ else
+ eOper = (ScConditionMode)aLbCond12.GetSelectEntryPos();
+ sExpr1 = aEdtCond11.GetText();
+ sExpr2 = aEdtCond12.GetText();
+ sStyle = aLbCond1Template.GetSelectEntry();
+ ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
+ rCndFmt.AddEntry( aNewEntry );
+ }
+
+ if ( aCbxCond2.IsChecked() )
+ {
+ if ( aLbCond21.GetSelectEntryPos() == 1 ) // via Formel???
+ eOper = SC_COND_DIRECT;
+ else
+ eOper = (ScConditionMode)aLbCond22.GetSelectEntryPos();
+ sExpr1 = aEdtCond21.GetText();
+ sExpr2 = aEdtCond22.GetText();
+ sStyle = aLbCond2Template.GetSelectEntry();
+ ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
+ rCndFmt.AddEntry( aNewEntry );
+ }
+
+ if ( aCbxCond3.IsChecked() )
+ {
+ if ( aLbCond31.GetSelectEntryPos() == 1 ) // via Formel???
+ eOper = SC_COND_DIRECT;
+ else
+ eOper = (ScConditionMode)aLbCond32.GetSelectEntryPos();
+ sExpr1 = aEdtCond31.GetText();
+ sExpr2 = aEdtCond32.GetText();
+ sStyle = aLbCond3Template.GetSelectEntry();
+ ScCondFormatEntry aNewEntry( eOper, sExpr1, sExpr2, pDoc, aCurPos, sStyle );
+ rCndFmt.AddEntry( aNewEntry );
+ }
+}
+
+
+//----------------------------------------------------------------------------
+// Zerstoert den Dialog
+
+BOOL ScConditionalFormatDlg::Close()
+{
+ return DoClose( ScCondFormatDlgWrapper::GetChildWindowId() );
+}
+
+
+//----------------------------------------------------------------------------
+// Handler:
+
+//----------------------------------------------------------------------------
+// Enabled/Disabled Condition1-Controls
+
+IMPL_LINK( ScConditionalFormatDlg, ClickCond1Hdl, void *, EMPTYARG )
+{
+ BOOL bChecked = aCbxCond1.IsChecked();
+
+ aLbCond11.Enable( bChecked );
+ aLbCond12.Enable( bChecked );
+ aEdtCond11.Enable( bChecked );
+ aRbCond11.Enable( bChecked );
+ aFtCond1And.Enable( bChecked );
+ aEdtCond12.Enable( bChecked );
+ aRbCond12.Enable( bChecked );
+ aFtCond1Template.Enable( bChecked );
+ aLbCond1Template.Enable( bChecked );
+ aBtnNew1.Enable( bChecked );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// Zellwert/Formel
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond11Hdl, void *, EMPTYARG )
+{
+ USHORT nPos = aLbCond11.GetSelectEntryPos();
+
+ if( nPos == 0 ) // Zellwert
+ {
+ aLbCond12.Show();
+ aEdtCond11.SetPosPixel( aCond1Pos2 );
+ }
+ else // Formel
+ {
+ aLbCond12.Hide();
+ aFtCond1And.Hide();
+ aEdtCond12.Hide();
+ aRbCond12.Hide();
+ aRbCond11.SetPosPixel( aRBtn1Pos2 );
+ aEdtCond11.SetPosSizePixel( aCond1Pos1, aCond1Size1 );
+ }
+
+ ChangeCond12Hdl( NULL );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// zwischen, gleich, groesser, ...
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond12Hdl, void *, EMPTYARG )
+{
+ if( aLbCond12.IsVisible() )
+ {
+ USHORT nPos = aLbCond12.GetSelectEntryPos();
+
+ if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
+ {
+ aEdtCond11.SetSizePixel( aCond1Size3 );
+ aRbCond11.SetPosPixel( aRBtn1Pos1 );
+ aFtCond1And.Show();
+ aEdtCond12.Show();
+ aRbCond12.Show();
+ }
+ else // gleich, n. gleich ...
+ {
+ aEdtCond12.Hide();
+ aRbCond12.Hide();
+ aFtCond1And.Hide();
+ aRbCond11.SetPosPixel( aRBtn1Pos2 );
+ aEdtCond11.SetSizePixel( aCond1Size2 );
+ }
+ }
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// Enabled/Disabled Condition2-Controls
+
+IMPL_LINK( ScConditionalFormatDlg, ClickCond2Hdl, void *, EMPTYARG )
+{
+ BOOL bChecked = aCbxCond2.IsChecked();
+
+ aLbCond21.Enable( bChecked );
+ aLbCond22.Enable( bChecked );
+ aEdtCond21.Enable( bChecked );
+ aRbCond21.Enable( bChecked );
+ aFtCond2And.Enable( bChecked );
+ aEdtCond22.Enable( bChecked );
+ aRbCond22.Enable( bChecked );
+ aFtCond2Template.Enable( bChecked );
+ aLbCond2Template.Enable( bChecked );
+ aBtnNew2.Enable( bChecked );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// Zellwert/Formel
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond21Hdl, void *, EMPTYARG )
+{
+ USHORT nPos = aLbCond21.GetSelectEntryPos();
+
+ if( nPos == 0 ) // Zellwert
+ {
+ aLbCond22.Show();
+ aEdtCond21.SetPosPixel( aCond2Pos2 );
+ }
+ else // Formel
+ {
+ aLbCond22.Hide();
+ aFtCond2And.Hide();
+ aEdtCond22.Hide();
+ aRbCond22.Hide();
+ aRbCond21.SetPosPixel( aRBtn2Pos2 );
+ aEdtCond21.SetPosSizePixel( aCond2Pos1, aCond2Size1 );
+ }
+
+ ChangeCond22Hdl( NULL );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// zwischen, gleich, groesser, ...
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond22Hdl, void *, EMPTYARG )
+{
+ if( aLbCond22.IsVisible() )
+ {
+ USHORT nPos = aLbCond22.GetSelectEntryPos();
+
+ if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
+ {
+ aEdtCond21.SetSizePixel( aCond2Size3 );
+ aRbCond21.SetPosPixel( aRBtn2Pos1 );
+ aFtCond2And.Show();
+ aEdtCond22.Show();
+ aRbCond22.Show();
+ }
+ else // gleich, n. gleich ...
+ {
+ aEdtCond22.Hide();
+ aRbCond22.Hide();
+ aFtCond2And.Hide();
+ aRbCond21.SetPosPixel( aRBtn2Pos2 );
+ aEdtCond21.SetSizePixel( aCond2Size2 );
+ }
+ }
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// Enabled/Disabled Condition3-Controls
+
+IMPL_LINK( ScConditionalFormatDlg, ClickCond3Hdl, void *, EMPTYARG )
+{
+ BOOL bChecked = aCbxCond3.IsChecked();
+
+ aLbCond31.Enable( bChecked );
+ aLbCond32.Enable( bChecked );
+ aEdtCond31.Enable( bChecked );
+ aRbCond31.Enable( bChecked );
+ aFtCond3And.Enable( bChecked );
+ aEdtCond32.Enable( bChecked );
+ aRbCond32.Enable( bChecked );
+ aFtCond3Template.Enable( bChecked );
+ aLbCond3Template.Enable( bChecked );
+ aBtnNew3.Enable( bChecked );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// Zellwert/Formel
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond31Hdl, void *, EMPTYARG )
+{
+ USHORT nPos = aLbCond31.GetSelectEntryPos();
+
+ if( nPos == 0 ) // Zellwert
+ {
+ aLbCond32.Show();
+ aEdtCond31.SetPosPixel( aCond3Pos2 );
+ }
+ else // Formel
+ {
+ aLbCond32.Hide();
+ aFtCond3And.Hide();
+ aEdtCond32.Hide();
+ aRbCond32.Hide();
+ aRbCond31.SetPosPixel( aRBtn3Pos2 );
+ aEdtCond31.SetPosSizePixel( aCond3Pos1, aCond3Size1 );
+ }
+
+ ChangeCond32Hdl( NULL );
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+// zwischen, gleich, groesser, ...
+
+IMPL_LINK( ScConditionalFormatDlg, ChangeCond32Hdl, void *, EMPTYARG )
+{
+ if( aLbCond32.IsVisible() )
+ {
+ USHORT nPos = aLbCond32.GetSelectEntryPos();
+
+ if( nPos == 6 || nPos == 7 ) // zwischen, n. zwischen
+ {
+ aEdtCond31.SetSizePixel( aCond3Size3 );
+ aRbCond31.SetPosPixel( aRBtn3Pos1 );
+ aFtCond3And.Show();
+ aEdtCond32.Show();
+ aRbCond32.Show();
+ }
+ else // gleich, n. gleich ...
+ {
+ aEdtCond32.Hide();
+ aRbCond32.Hide();
+ aFtCond3And.Hide();
+ aRbCond31.SetPosPixel( aRBtn3Pos2 );
+ aEdtCond31.SetSizePixel( aCond3Size2 );
+ }
+ }
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+
+IMPL_LINK( ScConditionalFormatDlg, GetFocusHdl, Control*, pCtrl )
+{
+ if( (pCtrl == (Control*)&aEdtCond11) || (pCtrl == (Control*)&aRbCond11) )
+ pEdActive = &aEdtCond11;
+ else if( (pCtrl == (Control*)&aEdtCond12) || (pCtrl == (Control*)&aRbCond12) )
+ pEdActive = &aEdtCond12;
+ else if( (pCtrl == (Control*)&aEdtCond21) || (pCtrl == (Control*)&aRbCond21) )
+ pEdActive = &aEdtCond21;
+ else if( (pCtrl == (Control*)&aEdtCond22) || (pCtrl == (Control*)&aRbCond22) )
+ pEdActive = &aEdtCond22;
+ else if( (pCtrl == (Control*)&aEdtCond31) || (pCtrl == (Control*)&aRbCond31) )
+ pEdActive = &aEdtCond31;
+ else if( (pCtrl == (Control*)&aEdtCond32) || (pCtrl == (Control*)&aRbCond32) )
+ pEdActive = &aEdtCond32;
+ else
+ pEdActive = NULL;
+
+ if( pEdActive )
+ pEdActive->SetSelection( Selection( 0, SELECTION_MAX ) );
+
+ return 0;
+}
+
+
+//----------------------------------------------------------------------------
+
+IMPL_LINK( ScConditionalFormatDlg, LoseFocusHdl, Control*, EMPTYARG )
+{
+ bDlgLostFocus = !IsActive();
+ return 0;
+}
+
+
+//----------------------------------------------------------------------------
+// [OK], [Cancel]
+
+IMPL_LINK( ScConditionalFormatDlg, BtnHdl, PushButton*, pBtn )
+{
+ if ( pBtn == &aBtnOk )
+ {
+ ScConditionalFormat aCondFrmt( 0, pDoc );
+ GetConditionalFormat( aCondFrmt );
+ ScCondFrmtItem aOutItem( FID_CONDITIONAL_FORMAT, aCondFrmt );
+
+ SetDispatcherLock( FALSE );
+ SwitchToDocument();
+ GetBindings().GetDispatcher()->Execute( FID_CONDITIONAL_FORMAT,
+ SFX_CALLMODE_SLOT | SFX_CALLMODE_RECORD,
+ &aOutItem, 0L, 0L );
+ Close();
+ }
+ else if ( pBtn == &aBtnCancel )
+ Close();
+
+ return( 0L );
+}
+
+
+//----------------------------------------------------------------------------
+
+IMPL_LINK( ScConditionalFormatDlg, NewBtnHdl, PushButton*, pBtn )
+{
+ SfxUInt16Item aFamilyItem( SID_STYLE_FAMILY, SFX_STYLE_FAMILY_PARA );
+ SfxStringItem aRefItem( SID_STYLE_REFERENCE, ScGlobal::GetRscString(STR_STYLENAME_STANDARD) );
+
+ // unlock the dispatcher so SID_STYLE_NEW can be executed
+ // (SetDispatcherLock would affect all Calc documents)
+ SfxDispatcher* pDisp = GetBindings().GetDispatcher();
+ BOOL bLocked = pDisp->IsLocked();
+ if (bLocked)
+ pDisp->Lock(sal_False);
+
+ // Execute the "new style" slot, complete with undo and all necessary updates.
+ // The return value (SfxUInt16Item) is ignored, look for new styles instead.
+ pDisp->Execute( SID_STYLE_NEW, SFX_CALLMODE_SYNCHRON | SFX_CALLMODE_RECORD | SFX_CALLMODE_MODAL,
+ &aFamilyItem,
+ &aRefItem,
+ 0L );
+
+ if (bLocked)
+ pDisp->Lock(sal_True);
+
+ // Find the new style and add it into the style list boxes
+ String aNewStyle;
+ SfxStyleSheetIterator aStyleIter( pDoc->GetStyleSheetPool(), SFX_STYLE_FAMILY_PARA );
+ for ( SfxStyleSheetBase* pStyle = aStyleIter.First(); pStyle; pStyle = aStyleIter.Next() )
+ {
+ String aName = pStyle->GetName();
+ if ( aLbCond1Template.GetEntryPos(aName) == LISTBOX_ENTRY_NOTFOUND ) // all lists contain the same entries
+ {
+ aLbCond1Template.InsertEntry( aName );
+ aLbCond2Template.InsertEntry( aName );
+ aLbCond3Template.InsertEntry( aName );
+ // if there are several new styles (from API or a different view),
+ // assume the last one is the result of the dialog
+ aNewStyle = aName;
+ }
+ }
+
+ // select the new style in the list box for which the button was pressed
+ if ( aNewStyle.Len() )
+ {
+ ListBox* pListBox = &aLbCond1Template;
+ if ( pBtn == &aBtnNew2 )
+ pListBox = &aLbCond2Template;
+ else if ( pBtn == &aBtnNew3 )
+ pListBox = &aLbCond3Template;
+
+ pListBox->SelectEntry( aNewStyle );
+ }
+
+ return 0;
+}
+