1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_sw.hxx" 30 31 #ifdef SW_DLLIMPLEMENTATION 32 #undef SW_DLLIMPLEMENTATION 33 #endif 34 35 #include <vcl/msgbox.hxx> 36 #include <unotools/charclass.hxx> 37 #include <editeng/unolingu.hxx> 38 #include <wrtsh.hxx> 39 #include <fldbas.hxx> 40 #include <expfld.hxx> 41 #include <usrfld.hxx> 42 #include <inpdlg.hxx> 43 #include <fldmgr.hxx> 44 45 #include <fldui.hrc> 46 #include <inpdlg.hrc> 47 48 49 /*-------------------------------------------------------------------- 50 Beschreibung: Feldeinfuegen bearbeiten 51 --------------------------------------------------------------------*/ 52 53 SwFldInputDlg::SwFldInputDlg( Window *pParent, SwWrtShell &rS, 54 SwField* pField, sal_Bool bNextButton ) : 55 56 SvxStandardDialog(pParent, SW_RES(DLG_FLD_INPUT)), 57 58 rSh( rS ), 59 pInpFld(0), 60 pSetFld(0), 61 pUsrType(0), 62 63 aLabelED (this, SW_RES(ED_LABEL )), 64 aEditED (this, SW_RES(ED_EDIT )), 65 aEditFL (this, SW_RES(FL_EDIT )), 66 67 aOKBT (this, SW_RES(BT_OK )), 68 aCancelBT (this, SW_RES(BT_CANCEL )), 69 aNextBT (this, SW_RES(PB_NEXT )), 70 aHelpBT (this, SW_RES(PB_HELP )) 71 { 72 // Font fuers Edit umschalten 73 Font aFont(aEditED.GetFont()); 74 aFont.SetWeight(WEIGHT_LIGHT); 75 aEditED.SetFont(aFont); 76 77 if( bNextButton ) 78 { 79 aNextBT.Show(); 80 aNextBT.SetClickHdl(LINK(this, SwFldInputDlg, NextHdl)); 81 } 82 else 83 { 84 long nDiff = aCancelBT.GetPosPixel().Y() - aOKBT.GetPosPixel().Y(); 85 Point aPos = aHelpBT.GetPosPixel(); 86 aPos.Y() -= nDiff; 87 aHelpBT.SetPosPixel(aPos); 88 } 89 90 // Auswertung hier 91 String aStr; 92 if( RES_INPUTFLD == pField->GetTyp()->Which() ) 93 { // Es ist eine Eingabefeld 94 // 95 pInpFld = (SwInputField*)pField; 96 aLabelED.SetText( pInpFld->GetPar2() ); 97 sal_uInt16 nSubType = pInpFld->GetSubType(); 98 99 switch(nSubType & 0xff) 100 { 101 case INP_TXT: 102 aStr = pInpFld->GetPar1(); 103 break; 104 105 case INP_USR: 106 // Benutzerfeld 107 if( 0 != ( pUsrType = (SwUserFieldType*)rSh.GetFldType( 108 RES_USERFLD, pInpFld->GetPar1() ) ) ) 109 aStr = pUsrType->GetContent(); 110 break; 111 } 112 } 113 else 114 { 115 // es ist eine SetExpression 116 pSetFld = (SwSetExpField*)pField; 117 String sFormula(pSetFld->GetFormula()); 118 //values are formatted - formulas are not 119 CharClass aCC( SvxCreateLocale( pSetFld->GetLanguage() )); 120 if( aCC.isNumeric( sFormula )) 121 { 122 aStr = pSetFld->ExpandField(true); 123 } 124 else 125 aStr = sFormula; 126 aLabelED.SetText( pSetFld->GetPromptText() ); 127 } 128 129 // JP 31.3.00: Inputfields in readonly regions must be allowed to 130 // input any content. - 74639 131 sal_Bool bEnable = !rSh.IsCrsrReadonly(); 132 /*!rSh.IsReadOnlyAvailable() || !rSh.HasReadonlySel()*/; 133 aOKBT.Enable( bEnable ); 134 aEditED.SetReadOnly( !bEnable ); 135 136 if( aStr.Len() ) 137 aEditED.SetText( aStr.ConvertLineEnd() ); 138 FreeResource(); 139 } 140 141 SwFldInputDlg::~SwFldInputDlg() 142 { 143 } 144 145 void SwFldInputDlg::StateChanged( StateChangedType nType ) 146 { 147 if ( nType == STATE_CHANGE_INITSHOW ) 148 aEditED.GrabFocus(); 149 SvxStandardDialog::StateChanged( nType ); 150 } 151 152 /*-------------------------------------------------------------------- 153 Beschreibung: Schliessen 154 --------------------------------------------------------------------*/ 155 156 void SwFldInputDlg::Apply() 157 { 158 String aTmp( aEditED.GetText() ); 159 aTmp.EraseAllChars( '\r' ); 160 161 rSh.StartAllAction(); 162 sal_Bool bModified = sal_False; 163 if(pInpFld) 164 { 165 if(pUsrType) 166 { 167 if( aTmp != pUsrType->GetContent() ) 168 { 169 pUsrType->SetContent(aTmp); 170 pUsrType->UpdateFlds(); 171 bModified = sal_True; 172 } 173 } 174 else if( aTmp != pInpFld->GetPar1() ) 175 { 176 pInpFld->SetPar1(aTmp); 177 rSh.SwEditShell::UpdateFlds(*pInpFld); 178 bModified = sal_True; 179 } 180 } 181 else if( aTmp != pSetFld->GetPar2() ) 182 { 183 pSetFld->SetPar2(aTmp); 184 rSh.SwEditShell::UpdateFlds(*pSetFld); 185 bModified = sal_True; 186 } 187 188 if( bModified ) 189 rSh.SetUndoNoResetModified(); 190 191 rSh.EndAllAction(); 192 } 193 194 195 IMPL_LINK(SwFldInputDlg, NextHdl, PushButton*, EMPTYARG) 196 { 197 EndDialog(RET_OK); 198 return 0; 199 } 200 201 202