diff options
Diffstat (limited to 'sw/source/ui/fldui/inpdlg.cxx')
-rw-r--r-- | sw/source/ui/fldui/inpdlg.cxx | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/sw/source/ui/fldui/inpdlg.cxx b/sw/source/ui/fldui/inpdlg.cxx new file mode 100644 index 000000000000..b8c26c701b04 --- /dev/null +++ b/sw/source/ui/fldui/inpdlg.cxx @@ -0,0 +1,201 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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_sw.hxx" + +#ifdef SW_DLLIMPLEMENTATION +#undef SW_DLLIMPLEMENTATION +#endif + +#include <vcl/msgbox.hxx> +#include <unotools/charclass.hxx> +#include <editeng/unolingu.hxx> +#include <wrtsh.hxx> +#include <fldbas.hxx> +#include <expfld.hxx> +#include <usrfld.hxx> +#include <inpdlg.hxx> +#include <fldmgr.hxx> + +#include <fldui.hrc> +#include <inpdlg.hrc> + + +/*-------------------------------------------------------------------- + Beschreibung: Feldeinfuegen bearbeiten + --------------------------------------------------------------------*/ + +SwFldInputDlg::SwFldInputDlg( Window *pParent, SwWrtShell &rS, + SwField* pField, sal_Bool bNextButton ) : + + SvxStandardDialog(pParent, SW_RES(DLG_FLD_INPUT)), + + rSh( rS ), + pInpFld(0), + pSetFld(0), + pUsrType(0), + + aLabelED (this, SW_RES(ED_LABEL )), + aEditED (this, SW_RES(ED_EDIT )), + aEditFL (this, SW_RES(FL_EDIT )), + + aOKBT (this, SW_RES(BT_OK )), + aCancelBT (this, SW_RES(BT_CANCEL )), + aNextBT (this, SW_RES(PB_NEXT )), + aHelpBT (this, SW_RES(PB_HELP )) +{ + // Font fuers Edit umschalten + Font aFont(aEditED.GetFont()); + aFont.SetWeight(WEIGHT_LIGHT); + aEditED.SetFont(aFont); + + if( bNextButton ) + { + aNextBT.Show(); + aNextBT.SetClickHdl(LINK(this, SwFldInputDlg, NextHdl)); + } + else + { + long nDiff = aCancelBT.GetPosPixel().Y() - aOKBT.GetPosPixel().Y(); + Point aPos = aHelpBT.GetPosPixel(); + aPos.Y() -= nDiff; + aHelpBT.SetPosPixel(aPos); + } + + // Auswertung hier + String aStr; + if( RES_INPUTFLD == pField->GetTyp()->Which() ) + { // Es ist eine Eingabefeld + // + pInpFld = (SwInputField*)pField; + aLabelED.SetText( pInpFld->GetPar2() ); + sal_uInt16 nSubType = pInpFld->GetSubType(); + + switch(nSubType & 0xff) + { + case INP_TXT: + aStr = pInpFld->GetPar1(); + break; + + case INP_USR: + // Benutzerfeld + if( 0 != ( pUsrType = (SwUserFieldType*)rSh.GetFldType( + RES_USERFLD, pInpFld->GetPar1() ) ) ) + aStr = pUsrType->GetContent(); + break; + } + } + else + { + // es ist eine SetExpression + pSetFld = (SwSetExpField*)pField; + String sFormula(pSetFld->GetFormula()); + //values are formatted - formulas are not + CharClass aCC( SvxCreateLocale( pSetFld->GetLanguage() )); + if( aCC.isNumeric( sFormula )) + { + aStr = pSetFld->ExpandField(true); + } + else + aStr = sFormula; + aLabelED.SetText( pSetFld->GetPromptText() ); + } + + // JP 31.3.00: Inputfields in readonly regions must be allowed to + // input any content. - 74639 + sal_Bool bEnable = !rSh.IsCrsrReadonly(); + /*!rSh.IsReadOnlyAvailable() || !rSh.HasReadonlySel()*/; + aOKBT.Enable( bEnable ); + aEditED.SetReadOnly( !bEnable ); + + if( aStr.Len() ) + aEditED.SetText( aStr.ConvertLineEnd() ); + FreeResource(); +} + +SwFldInputDlg::~SwFldInputDlg() +{ +} + +void SwFldInputDlg::StateChanged( StateChangedType nType ) +{ + if ( nType == STATE_CHANGE_INITSHOW ) + aEditED.GrabFocus(); + SvxStandardDialog::StateChanged( nType ); +} + +/*-------------------------------------------------------------------- + Beschreibung: Schliessen + --------------------------------------------------------------------*/ + +void SwFldInputDlg::Apply() +{ + String aTmp( aEditED.GetText() ); + aTmp.EraseAllChars( '\r' ); + + rSh.StartAllAction(); + sal_Bool bModified = sal_False; + if(pInpFld) + { + if(pUsrType) + { + if( aTmp != pUsrType->GetContent() ) + { + pUsrType->SetContent(aTmp); + pUsrType->UpdateFlds(); + bModified = sal_True; + } + } + else if( aTmp != pInpFld->GetPar1() ) + { + pInpFld->SetPar1(aTmp); + rSh.SwEditShell::UpdateFlds(*pInpFld); + bModified = sal_True; + } + } + else if( aTmp != pSetFld->GetPar2() ) + { + pSetFld->SetPar2(aTmp); + rSh.SwEditShell::UpdateFlds(*pSetFld); + bModified = sal_True; + } + + if( bModified ) + rSh.SetUndoNoResetModified(); + + rSh.EndAllAction(); +} + + +IMPL_LINK(SwFldInputDlg, NextHdl, PushButton*, EMPTYARG) +{ + EndDialog(RET_OK); + return 0; +} + + |