blob: c5d3e2a5dc91967d97456c03488331905f1727d4 [file] [log] [blame]
/**************************************************************
*
* 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"
#undef SC_DLLIMPLEMENTATION
//----------------------------------------------------------------------------
#include <svl/zforlist.hxx>
#include <vcl/msgbox.hxx>
#include <limits.h>
#include "scresid.hxx"
#include "document.hxx"
#include "miscdlgs.hrc"
#define _FILLDLG_CXX
#include "filldlg.hxx"
#undef _FILLDLG_CXX
//============================================================================
// class ScFillSeriesDlg
//----------------------------------------------------------------------------
ScFillSeriesDlg::ScFillSeriesDlg( Window* pParent,
ScDocument& rDocument,
FillDir eFillDir,
FillCmd eFillCmd,
FillDateCmd eFillDateCmd,
String aStartStr,
double fStep,
double fMax,
sal_uInt16 nPossDir )
: ModalDialog ( pParent, ScResId( RID_SCDLG_FILLSERIES ) ),
aFtStartVal ( this, ScResId( FT_START_VALUE ) ),
aEdStartVal ( this, ScResId( ED_START_VALUES ) ),
aStartStrVal ( aStartStr),
aFtEndVal ( this, ScResId( FT_END_VALUE ) ),
aEdEndVal ( this, ScResId( ED_END_VALUES ) ),
aFtIncrement ( this, ScResId( FT_INCREMENT ) ),
aEdIncrement ( this, ScResId( ED_INCREMENT ) ),
aFlDirection ( this, ScResId( FL_DIRECTION ) ),
aBtnDown ( this, ScResId( BTN_BOTTOM ) ),
aBtnRight ( this, ScResId( BTN_RIGHT ) ),
aBtnUp ( this, ScResId( BTN_TOP ) ),
aBtnLeft ( this, ScResId( BTN_LEFT ) ),
aFlSep1 ( this, ScResId( FL_SEP1 ) ),
aFlType ( this, ScResId( FL_TYPE ) ),
aBtnArithmetic ( this, ScResId( BTN_ARITHMETIC ) ),
aBtnGeometric ( this, ScResId( BTN_GEOMETRIC ) ),
aBtnDate ( this, ScResId( BTN_DATE ) ),
aBtnAutoFill ( this, ScResId( BTN_AUTOFILL ) ),
aFlSep2 ( this, ScResId( FL_SEP2 ) ),
aFlTimeUnit ( this, ScResId( FL_TIME_UNIT ) ),
aBtnDay ( this, ScResId( BTN_DAY ) ),
aBtnDayOfWeek ( this, ScResId( BTN_DAY_OF_WEEK ) ),
aBtnMonth ( this, ScResId( BTN_MONTH ) ),
aBtnYear ( this, ScResId( BTN_YEAR ) ),
aBtnOk ( this, ScResId( BTN_OK ) ),
aBtnCancel ( this, ScResId( BTN_CANCEL ) ),
aBtnHelp ( this, ScResId( BTN_HELP ) ),
errMsgInvalidVal( ScResId( STR_VALERR ) ),
rDoc ( rDocument ),
theFillDir ( eFillDir ),
theFillCmd ( eFillCmd ),
theFillDateCmd ( eFillDateCmd ),
fIncrement ( fStep ),
fEndVal ( fMax )
{
Init( nPossDir );
FreeResource();
}
//----------------------------------------------------------------------------
__EXPORT ScFillSeriesDlg::~ScFillSeriesDlg()
{
}
//----------------------------------------------------------------------------
void ScFillSeriesDlg::SetEdStartValEnabled(sal_Bool bFlag)
{
bStartValFlag=bFlag;
if(bFlag)
{
aFtStartVal.Enable();
aEdStartVal.Enable();
}
else
{
aFtStartVal.Disable();
aEdStartVal.Disable();
}
}
//----------------------------------------------------------------------------
void ScFillSeriesDlg::Init( sal_uInt16 nPossDir )
{
aBtnOk.SetClickHdl ( LINK( this, ScFillSeriesDlg, OKHdl ) );
aBtnArithmetic.SetClickHdl ( LINK( this, ScFillSeriesDlg, DisableHdl ) );
aBtnGeometric.SetClickHdl ( LINK( this, ScFillSeriesDlg, DisableHdl ) );
aBtnDate.SetClickHdl ( LINK( this, ScFillSeriesDlg, DisableHdl ) );
aBtnAutoFill.SetClickHdl ( LINK( this, ScFillSeriesDlg, DisableHdl ) );
if( nPossDir == FDS_OPT_NONE )
{
aBtnLeft.Disable();
aBtnRight.Disable();
aBtnDown.Disable();
aBtnUp.Disable();
}
if( nPossDir == FDS_OPT_HORZ )
{
aBtnDown.Disable();
aBtnUp.Disable();
}
if( nPossDir == FDS_OPT_VERT )
{
aBtnLeft.Disable();
aBtnRight.Disable();
}
switch ( theFillDir )
{
case FILL_TO_LEFT: aBtnLeft.Check(); break;
case FILL_TO_RIGHT: aBtnRight.Check(); break;
case FILL_TO_BOTTOM: aBtnDown.Check(); break;
case FILL_TO_TOP: aBtnUp.Check(); break;
default:
break;
}
switch ( theFillCmd )
{
case FILL_LINEAR:
aBtnArithmetic.Check();
DisableHdl( &aBtnArithmetic );
break;
case FILL_GROWTH:
aBtnGeometric.Check();
DisableHdl( &aBtnGeometric );
break;
case FILL_DATE:
aBtnDate.Check();
DisableHdl( &aBtnDate );
break;
case FILL_AUTO:
aBtnAutoFill.Check();
DisableHdl( &aBtnAutoFill );
break;
default:
break;
}
switch ( theFillDateCmd )
{
case FILL_DAY: aBtnDay.Check(); break;
case FILL_WEEKDAY: aBtnDayOfWeek.Check(); break;
case FILL_MONTH: aBtnMonth.Check(); break;
case FILL_YEAR: aBtnYear.Check(); break;
default:
break;
}
fStartVal = MAXDOUBLE;
/*
String aStartTxt;
if ( fStartVal != MAXDOUBLE )
rDoc.GetFormatTable()->GetInputLineString( fStartVal, 0, aStartTxt );
aEdStartVal.SetText( aStartTxt );
*/
aEdStartVal.SetText( aStartStrVal);
String aIncrTxt;
rDoc.GetFormatTable()->GetInputLineString( fIncrement, 0, aIncrTxt );
aEdIncrement.SetText( aIncrTxt );
String aEndTxt;
if ( fEndVal != MAXDOUBLE )
rDoc.GetFormatTable()->GetInputLineString( fEndVal, 0, aEndTxt );
aEdEndVal.SetText( aEndTxt );
bStartValFlag=sal_False;
aFlSep1.SetStyle( aFlSep1.GetStyle() | WB_VERT );
aFlSep2.SetStyle( aFlSep2.GetStyle() | WB_VERT );
}
//----------------------------------------------------------------------------
sal_Bool __EXPORT ScFillSeriesDlg::CheckStartVal()
{
sal_Bool bValOk = sal_False;
sal_uInt32 nKey = 0;
String aStr( aEdStartVal.GetText() );
if ( aStr.Len() == 0 || aBtnAutoFill.IsChecked())
{
fStartVal = MAXDOUBLE;
bValOk = sal_True;
}
else
bValOk = rDoc.GetFormatTable()->IsNumberFormat( aStr, nKey, fStartVal );
return bValOk;
}
//----------------------------------------------------------------------------
sal_Bool __EXPORT ScFillSeriesDlg::CheckIncrementVal()
{
sal_uInt32 nKey = 0;
String aStr( aEdIncrement.GetText() );
return rDoc.GetFormatTable()->IsNumberFormat( aStr, nKey, fIncrement );
}
//----------------------------------------------------------------------------
sal_Bool __EXPORT ScFillSeriesDlg::CheckEndVal()
{
sal_Bool bValOk = sal_False;
sal_uInt32 nKey = 0;
String aStr( aEdEndVal.GetText() );
if ( aStr.Len() == 0 )
{
fEndVal = (fIncrement < 0) ? -MAXDOUBLE : MAXDOUBLE;
bValOk = sal_True;
}
else
bValOk = rDoc.GetFormatTable()->IsNumberFormat( aStr, nKey, fEndVal );
return bValOk;
}
//----------------------------------------------------------------------------
// Handler:
//----------------------------------------------------------------------------
IMPL_LINK( ScFillSeriesDlg, DisableHdl, Button *, pBtn )
{
if ( pBtn == &aBtnDate )
{
aBtnDay.Enable();
aBtnDayOfWeek.Enable();
aBtnMonth.Enable();
aBtnYear.Enable();
aFlTimeUnit.Enable();
}
else
{
aBtnDay.Disable();
aBtnDayOfWeek.Disable();
aBtnMonth.Disable();
aBtnYear.Disable();
aFlTimeUnit.Disable();
}
if ( pBtn != &aBtnAutoFill )
{
aFtIncrement.Enable();
aEdIncrement.Enable();
aFtEndVal.Enable();
aEdEndVal.Enable();
}
else
{
aFtIncrement.Disable();
aEdIncrement.Disable();
aFtEndVal.Disable();
aEdEndVal.Disable();
}
return 0;
}
//----------------------------------------------------------------------------
IMPL_LINK( ScFillSeriesDlg, OKHdl, void *, EMPTYARG )
{
if ( aBtnLeft.IsChecked() ) theFillDir = FILL_TO_LEFT;
else if ( aBtnRight.IsChecked() ) theFillDir = FILL_TO_RIGHT;
else if ( aBtnDown.IsChecked() ) theFillDir = FILL_TO_BOTTOM;
else if ( aBtnUp.IsChecked() ) theFillDir = FILL_TO_TOP;
if ( aBtnArithmetic.IsChecked() ) theFillCmd = FILL_LINEAR;
else if ( aBtnGeometric.IsChecked() ) theFillCmd = FILL_GROWTH;
else if ( aBtnDate.IsChecked() ) theFillCmd = FILL_DATE;
else if ( aBtnAutoFill.IsChecked() ) theFillCmd = FILL_AUTO;
if ( aBtnDay.IsChecked() ) theFillDateCmd = FILL_DAY;
else if ( aBtnDayOfWeek.IsChecked() ) theFillDateCmd = FILL_WEEKDAY;
else if ( aBtnMonth.IsChecked() ) theFillDateCmd = FILL_MONTH;
else if ( aBtnYear.IsChecked() ) theFillDateCmd = FILL_YEAR;
sal_Bool bAllOk = sal_True;
Edit* pEdWrong = NULL;
if ( !CheckStartVal() )
{
bAllOk = sal_False;
pEdWrong = &aEdStartVal;
}
else if ( !CheckIncrementVal() )
{
bAllOk = sal_False;
pEdWrong = &aEdIncrement;
}
else if ( !CheckEndVal() )
{
bAllOk = sal_False;
pEdWrong = &aEdEndVal;
}
if ( bAllOk )
EndDialog( RET_OK );
else
{
ErrorBox( this,
WinBits( WB_OK | WB_DEF_OK ),
errMsgInvalidVal
).Execute();
pEdWrong->GrabFocus();
}
return 0;
}