| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_sc.hxx" |
| |
| |
| #include <sfx2/dispatch.hxx> |
| #include <svl/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 ) ), |
| |
| 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 ) ), |
| |
| 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 ) ), |
| aFlSep2 ( this, ScResId( FL_SEP2 ) ), |
| aFlSep1 ( this, ScResId( FL_SEP1 ) ), |
| pEdActive ( NULL ), |
| bDlgLostFocus ( sal_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( sal_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( sal_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<sal_uInt16>( eMode ) ); |
| if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) ) |
| aEdtCond12.SetText( pEntry->GetExpression( aCurPos, 1 ) ); |
| } |
| } |
| |
| |
| if ( pCurrentFormat->Count() > 1 ) |
| { |
| aCbxCond2.Check( sal_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<sal_uInt16>( eMode ) ); |
| if ( ( eMode == SC_COND_BETWEEN ) || ( eMode == SC_COND_NOTBETWEEN ) ) |
| aEdtCond22.SetText( pEntry->GetExpression( aCurPos, 1 ) ); |
| } |
| } |
| |
| if ( pCurrentFormat->Count() > 2 ) |
| { |
| aCbxCond3.Check( sal_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<sal_uInt16>( 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(); |
| |
| aLbCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 ); |
| aLbCond12.SetAccessibleRelationLabeledBy( &aCbxCond1 ); |
| aEdtCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 ); |
| aRbCond11.SetAccessibleRelationLabeledBy( &aCbxCond1 ); |
| |
| aLbCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 ); |
| aLbCond22.SetAccessibleRelationLabeledBy( &aCbxCond2 ); |
| aEdtCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 ); |
| aRbCond21.SetAccessibleRelationLabeledBy( &aCbxCond2 ); |
| |
| aLbCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 ); |
| aLbCond32.SetAccessibleRelationLabeledBy( &aCbxCond3 ); |
| aEdtCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 ); |
| aRbCond31.SetAccessibleRelationLabeledBy( &aCbxCond3 ); |
| aLbCond11.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) ); |
| aLbCond12.SetAccessibleName( ScResId(LABEL_CONDITIONS) ); |
| aEdtCond11.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) ); |
| |
| aLbCond21.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) ); |
| aLbCond22.SetAccessibleName( ScResId(LABEL_CONDITIONS) ); |
| aEdtCond21.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) ); |
| |
| aLbCond31.SetAccessibleName( ScResId(LABEL_FORMARTTING_CONDITIONS) ); |
| aLbCond32.SetAccessibleName( ScResId(LABEL_CONDITIONS) ); |
| aEdtCond31.SetAccessibleName( ScResId(LABEL_CONDITION_VALUE) ); |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| // 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(); |
| } |
| } |
| |
| //---------------------------------------------------------------------------- |
| |
| sal_Bool ScConditionalFormatDlg::IsRefInputMode() const |
| { |
| return (pEdActive != NULL); |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| |
| void ScConditionalFormatDlg::SetActive() |
| { |
| if ( bDlgLostFocus ) |
| { |
| bDlgLostFocus = sal_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 |
| |
| sal_Bool ScConditionalFormatDlg::Close() |
| { |
| return DoClose( ScCondFormatDlgWrapper::GetChildWindowId() ); |
| } |
| |
| |
| //---------------------------------------------------------------------------- |
| // Handler: |
| |
| //---------------------------------------------------------------------------- |
| // Enabled/Disabled Condition1-Controls |
| |
| IMPL_LINK( ScConditionalFormatDlg, ClickCond1Hdl, void *, EMPTYARG ) |
| { |
| sal_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 ) |
| { |
| sal_uInt16 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() ) |
| { |
| sal_uInt16 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 ) |
| { |
| sal_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 ) |
| { |
| sal_uInt16 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() ) |
| { |
| sal_uInt16 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 ) |
| { |
| sal_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 ) |
| { |
| sal_uInt16 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() ) |
| { |
| sal_uInt16 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( sal_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(); |
| sal_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; |
| } |
| |