xref: /AOO41X/main/sw/source/ui/fldui/inpdlg.cxx (revision efeef26f81c84063fb0a91bde3856d4a51172d90)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sw.hxx"
26 
27 #ifdef SW_DLLIMPLEMENTATION
28 #undef SW_DLLIMPLEMENTATION
29 #endif
30 
31 #include <vcl/msgbox.hxx>
32 #include <unotools/charclass.hxx>
33 #include <editeng/unolingu.hxx>
34 #include <wrtsh.hxx>
35 #include <fldbas.hxx>
36 #include <expfld.hxx>
37 #include <usrfld.hxx>
38 #include <inpdlg.hxx>
39 #include <fldmgr.hxx>
40 
41 #include <fldui.hrc>
42 #include <inpdlg.hrc>
43 
44 
45 /*--------------------------------------------------------------------
46     Beschreibung: Feldeinfuegen bearbeiten
47  --------------------------------------------------------------------*/
48 
SwFldInputDlg(Window * pParent,SwWrtShell & rS,SwField * pField,sal_Bool bNextButton)49 SwFldInputDlg::SwFldInputDlg( Window *pParent, SwWrtShell &rS,
50                               SwField* pField, sal_Bool bNextButton ) :
51 
52     SvxStandardDialog(pParent,  SW_RES(DLG_FLD_INPUT)),
53 
54     rSh( rS ),
55     pInpFld(0),
56     pSetFld(0),
57     pUsrType(0),
58 
59     aLabelED    (this, SW_RES(ED_LABEL  )),
60     aEditED     (this, SW_RES(ED_EDIT   )),
61     aEditFL     (this, SW_RES(FL_EDIT       )),
62 
63     aOKBT       (this, SW_RES(BT_OK     )),
64     aCancelBT   (this, SW_RES(BT_CANCEL )),
65     aNextBT     (this, SW_RES(PB_NEXT   )),
66     aHelpBT     (this, SW_RES(PB_HELP    ))
67 {
68     // Font fuers Edit umschalten
69     Font aFont(aEditED.GetFont());
70     aFont.SetWeight(WEIGHT_LIGHT);
71     aEditED.SetFont(aFont);
72 
73     if( bNextButton )
74     {
75         aNextBT.Show();
76         aNextBT.SetClickHdl(LINK(this, SwFldInputDlg, NextHdl));
77     }
78     else
79     {
80         long nDiff = aCancelBT.GetPosPixel().Y() - aOKBT.GetPosPixel().Y();
81         Point aPos = aHelpBT.GetPosPixel();
82         aPos.Y() -= nDiff;
83         aHelpBT.SetPosPixel(aPos);
84     }
85 
86     // Auswertung hier
87     String aStr;
88     if( RES_INPUTFLD == pField->GetTyp()->Which() )
89     {   // Es ist eine Eingabefeld
90         //
91         pInpFld = (SwInputField*)pField;
92         aLabelED.SetText( pInpFld->GetPar2() );
93         sal_uInt16 nSubType = pInpFld->GetSubType();
94 
95         switch(nSubType & 0xff)
96         {
97             case INP_TXT:
98                 aStr = pInpFld->GetPar1();
99                 break;
100 
101             case INP_USR:
102                 // Benutzerfeld
103                 if( 0 != ( pUsrType = (SwUserFieldType*)rSh.GetFldType(
104                             RES_USERFLD, pInpFld->GetPar1() ) ) )
105                     aStr = pUsrType->GetContent();
106                 break;
107         }
108     }
109     else
110     {
111         // es ist eine SetExpression
112         pSetFld = (SwSetExpField*)pField;
113         String sFormula(pSetFld->GetFormula());
114         //values are formatted - formulas are not
115         CharClass aCC( SvxCreateLocale( pSetFld->GetLanguage() ));
116         if( aCC.isNumeric( sFormula ))
117         {
118             aStr = pSetFld->ExpandField(true);
119         }
120         else
121             aStr = sFormula;
122         aLabelED.SetText( pSetFld->GetPromptText() );
123     }
124 
125     // JP 31.3.00: Inputfields in readonly regions must be allowed to
126     //              input any content. - 74639
127     sal_Bool bEnable = !rSh.IsCrsrReadonly();
128                     /*!rSh.IsReadOnlyAvailable() || !rSh.HasReadonlySel()*/;
129     aOKBT.Enable( bEnable );
130     aEditED.SetReadOnly( !bEnable );
131 
132     if( aStr.Len() )
133         aEditED.SetText( aStr.ConvertLineEnd() );
134     FreeResource();
135 }
136 
~SwFldInputDlg()137 SwFldInputDlg::~SwFldInputDlg()
138 {
139 }
140 
StateChanged(StateChangedType nType)141 void SwFldInputDlg::StateChanged( StateChangedType nType )
142 {
143     if ( nType == STATE_CHANGE_INITSHOW )
144         aEditED.GrabFocus();
145     SvxStandardDialog::StateChanged( nType );
146 }
147 
148 /*--------------------------------------------------------------------
149      Beschreibung:  Schliessen
150  --------------------------------------------------------------------*/
151 
Apply()152 void SwFldInputDlg::Apply()
153 {
154     String aTmp( aEditED.GetText() );
155     aTmp.EraseAllChars( '\r' );
156 
157     rSh.StartAllAction();
158     sal_Bool bModified = sal_False;
159     if(pInpFld)
160     {
161         if(pUsrType)
162         {
163             if( aTmp != pUsrType->GetContent() )
164             {
165                 pUsrType->SetContent(aTmp);
166                 pUsrType->UpdateFlds();
167                 bModified = sal_True;
168             }
169         }
170         else if( aTmp != pInpFld->GetPar1() )
171         {
172             pInpFld->SetPar1(aTmp);
173             rSh.SwEditShell::UpdateFlds(*pInpFld);
174             bModified = sal_True;
175         }
176     }
177     else if( aTmp != pSetFld->GetPar2() )
178     {
179         pSetFld->SetPar2(aTmp);
180         rSh.SwEditShell::UpdateFlds(*pSetFld);
181         bModified = sal_True;
182     }
183 
184     if( bModified )
185         rSh.SetUndoNoResetModified();
186 
187     rSh.EndAllAction();
188 }
189 
190 
IMPL_LINK(SwFldInputDlg,NextHdl,PushButton *,EMPTYARG)191 IMPL_LINK(SwFldInputDlg, NextHdl, PushButton*, EMPTYARG)
192 {
193     EndDialog(RET_OK);
194     return 0;
195 }
196 
197 
198