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 --------------------------------------------------------------- 32 33 34 35 #define _JAVAEDIT_CXX 36 #include <hintids.hxx> 37 38 #ifndef _MSGBOX_HXX //autogen 39 #include <vcl/msgbox.hxx> 40 #endif 41 #include <vcl/svapp.hxx> 42 #include <svl/urihelper.hxx> 43 #ifndef _VIEW_HXX 44 #include <view.hxx> 45 #endif 46 #include <sfx2/docfile.hxx> 47 #include <sfx2/filedlghelper.hxx> 48 #include <docsh.hxx> 49 #include <wrtsh.hxx> 50 #include <fldbas.hxx> 51 #include <fldmgr.hxx> 52 #include <docufld.hxx> 53 #include <uitool.hxx> 54 #ifndef _JAVAEDIT_HXX 55 #include <javaedit.hxx> 56 #endif 57 58 #ifndef _FLDUI_HRC 59 #include <fldui.hrc> 60 #endif 61 #ifndef _JAVAEDIT_HRC 62 #include <javaedit.hrc> 63 #endif 64 65 // static ---------------------------------------------------------------- 66 67 // class SwJavaEditDialog ------------------------------------------------ 68 69 70 71 SwJavaEditDialog::SwJavaEditDialog(Window* pParent, SwWrtShell* pWrtSh) : 72 73 SvxStandardDialog(pParent, SW_RES(DLG_JAVAEDIT)), 74 75 aTypeFT ( this, SW_RES( FT_TYPE ) ), 76 aTypeED ( this, SW_RES( ED_TYPE ) ), 77 aUrlRB ( this, SW_RES( RB_URL ) ), 78 aEditRB ( this, SW_RES( RB_EDIT ) ), 79 aUrlPB ( this, SW_RES( PB_URL ) ), 80 aUrlED ( this, SW_RES( ED_URL ) ), 81 aEditED ( this, SW_RES( ED_EDIT ) ), 82 aPostItFL ( this, SW_RES( FL_POSTIT ) ), 83 84 aOKBtn ( this, SW_RES( BTN_POST_OK ) ), 85 aCancelBtn ( this, SW_RES( BTN_POST_CANCEL ) ), 86 aPrevBtn ( this, SW_RES( BTN_PREV ) ), 87 aNextBtn ( this, SW_RES( BTN_NEXT ) ), 88 aHelpBtn ( this, SW_RES( BTN_POST_HELP ) ), 89 90 bNew(sal_True), 91 bIsUrl(sal_False), 92 93 pSh(pWrtSh), 94 pFileDlg(NULL), 95 pOldDefDlgParent(NULL) 96 { 97 // Handler installieren 98 aPrevBtn.SetClickHdl( LINK( this, SwJavaEditDialog, PrevHdl ) ); 99 aNextBtn.SetClickHdl( LINK( this, SwJavaEditDialog, NextHdl ) ); 100 aOKBtn.SetClickHdl( LINK( this, SwJavaEditDialog, OKHdl ) ); 101 102 Link aLk = LINK(this, SwJavaEditDialog, RadioButtonHdl); 103 aUrlRB.SetClickHdl(aLk); 104 aEditRB.SetClickHdl(aLk); 105 aUrlPB.SetClickHdl(LINK(this, SwJavaEditDialog, InsertFileHdl)); 106 107 Font aFont( aEditED.GetFont() ); 108 aFont.SetWeight( WEIGHT_LIGHT ); 109 aEditED.SetFont( aFont ); 110 111 pMgr = new SwFldMgr; 112 pFld = (SwScriptField*)pMgr->GetCurFld(); 113 114 bNew = !(pFld && pFld->GetTyp()->Which() == RES_SCRIPTFLD); 115 116 CheckTravel(); 117 118 if( !bNew ) 119 SetText( SW_RES( STR_JAVA_EDIT ) ); 120 else 121 // neu anlegen 122 SetText( SW_RES( STR_JAVA_INSERT ) ); 123 124 FreeResource(); 125 126 RadioButtonHdl(NULL); 127 } 128 129 /*------------------------------------------------------------------------ 130 Beschreibung: 131 ------------------------------------------------------------------------*/ 132 133 134 135 SwJavaEditDialog::~SwJavaEditDialog() 136 { 137 delete pMgr; 138 delete pFileDlg; 139 Application::SetDefDialogParent( pOldDefDlgParent ); 140 } 141 142 /*------------------------------------------------------------------------ 143 Beschreibung: 144 ------------------------------------------------------------------------*/ 145 146 147 148 IMPL_LINK_INLINE_START( SwJavaEditDialog, PrevHdl, Button *, EMPTYARG ) 149 { 150 SetFld(); 151 pMgr->GoPrev(); 152 pFld = (SwScriptField*)pMgr->GetCurFld(); 153 CheckTravel(); 154 RadioButtonHdl(NULL); 155 156 return 0; 157 } 158 IMPL_LINK_INLINE_END( SwJavaEditDialog, PrevHdl, Button *, EMPTYARG ) 159 160 /*------------------------------------------------------------------------ 161 Beschreibung: 162 ------------------------------------------------------------------------*/ 163 164 165 166 IMPL_LINK_INLINE_START( SwJavaEditDialog, NextHdl, Button *, EMPTYARG ) 167 { 168 SetFld(); 169 pMgr->GoNext(); 170 pFld = (SwScriptField*)pMgr->GetCurFld(); 171 CheckTravel(); 172 RadioButtonHdl(NULL); 173 174 return 0; 175 } 176 IMPL_LINK_INLINE_END( SwJavaEditDialog, NextHdl, Button *, EMPTYARG ) 177 178 /*------------------------------------------------------------------------ 179 Beschreibung: 180 ------------------------------------------------------------------------*/ 181 182 183 184 IMPL_LINK( SwJavaEditDialog, OKHdl, Button *, EMPTYARG ) 185 { 186 SetFld(); 187 EndDialog( RET_OK ); 188 return 0; 189 } 190 191 /*------------------------------------------------------------------------ 192 Beschreibung: 193 ------------------------------------------------------------------------*/ 194 195 196 197 void SwJavaEditDialog::Apply() 198 { 199 } 200 201 /*------------------------------------------------------------------------ 202 Beschreibung: 203 ------------------------------------------------------------------------*/ 204 205 206 207 void SwJavaEditDialog::CheckTravel() 208 { 209 sal_Bool bTravel = sal_False; 210 sal_Bool bNext(sal_False), bPrev(sal_False); 211 212 if(!bNew) 213 { 214 // Traveling nur bei mehr als einem Feld 215 pSh->StartAction(); 216 pSh->CreateCrsr(); 217 218 bNext = pMgr->GoNext(); 219 if( bNext ) 220 pMgr->GoPrev(); 221 222 if( 0 != ( bPrev = pMgr->GoPrev() ) ) 223 pMgr->GoNext(); 224 bTravel |= bNext|bPrev; 225 226 pSh->DestroyCrsr(); 227 pSh->EndAction(); 228 229 if (pFld->IsCodeURL()) 230 { 231 String sURL(pFld->GetPar2()); 232 if(sURL.Len()) 233 { 234 INetURLObject aINetURL(sURL); 235 if(INET_PROT_FILE == aINetURL.GetProtocol()) 236 sURL = aINetURL.PathToFileName(); 237 } 238 aUrlED.SetText(sURL); 239 aEditED.SetText(aEmptyStr); 240 aUrlRB.Check(); 241 } 242 else 243 { 244 aEditED.SetText(pFld->GetPar2()); 245 aUrlED.SetText(aEmptyStr); 246 aEditRB.Check(); 247 } 248 aTypeED.SetText(pFld->GetPar1()); 249 } 250 251 if ( !bTravel ) 252 { 253 aPrevBtn.Hide(); 254 aNextBtn.Hide(); 255 } 256 else 257 { 258 aPrevBtn.Enable(bPrev); 259 aNextBtn.Enable(bNext); 260 } 261 } 262 263 /*------------------------------------------------------------------------ 264 Beschreibung: 265 ------------------------------------------------------------------------*/ 266 267 268 269 void SwJavaEditDialog::SetFld() 270 { 271 if( !aOKBtn.IsEnabled() ) 272 return ; 273 274 aType = aTypeED.GetText(); 275 bIsUrl = aUrlRB.IsChecked(); 276 277 if( bIsUrl ) 278 { 279 aText = aUrlED.GetText(); 280 if(aText.Len()) 281 { 282 SfxMedium* pMedium = pSh->GetView().GetDocShell()->GetMedium(); 283 INetURLObject aAbs; 284 if( pMedium ) 285 aAbs = pMedium->GetURLObject(); 286 287 aText = URIHelper::SmartRel2Abs( 288 aAbs, aText, URIHelper::GetMaybeFileHdl()); 289 } 290 } 291 else 292 aText = aEditED.GetText(); 293 294 if( !aType.Len() ) 295 aType = String::CreateFromAscii("JavaScript"); 296 } 297 298 sal_Bool SwJavaEditDialog::IsUpdate() 299 { 300 return pFld && ( bIsUrl != pFld->GetFormat() || pFld->GetPar2() != aType || pFld->GetPar1() != aText ); 301 } 302 303 /*------------------------------------------------------------------------ 304 Beschreibung: 305 ------------------------------------------------------------------------*/ 306 307 IMPL_LINK( SwJavaEditDialog, RadioButtonHdl, RadioButton *, EMPTYARG ) 308 { 309 sal_Bool bEnable = aUrlRB.IsChecked(); 310 aUrlPB.Enable(bEnable); 311 aUrlED.Enable(bEnable); 312 aEditED.Enable(!bEnable); 313 314 if( !bNew ) 315 { 316 bEnable = !pSh->IsReadOnlyAvailable() || !pSh->HasReadonlySel(); 317 aOKBtn.Enable( bEnable ); 318 aUrlED.SetReadOnly( !bEnable ); 319 aEditED.SetReadOnly( !bEnable); 320 aTypeED.SetReadOnly( !bEnable); 321 if( aUrlPB.IsEnabled() && !bEnable ) 322 aUrlPB.Enable( sal_False ); 323 } 324 return 0; 325 } 326 327 /*************************************************************************** 328 Beschreibung: 329 ***************************************************************************/ 330 331 IMPL_LINK( SwJavaEditDialog, InsertFileHdl, PushButton *, pBtn ) 332 { 333 if ( !pFileDlg ) 334 { 335 pOldDefDlgParent = Application::GetDefDialogParent(); 336 Application::SetDefDialogParent( pBtn ); 337 338 pFileDlg = new ::sfx2::FileDialogHelper( 339 (SFXWB_INSERT | WB_3DLOOK), String::CreateFromAscii("swriter") ); 340 } 341 342 pFileDlg->StartExecuteModal( LINK( this, SwJavaEditDialog, DlgClosedHdl ) ); 343 return 0; 344 } 345 346 IMPL_LINK( SwJavaEditDialog, DlgClosedHdl, sfx2::FileDialogHelper *, EMPTYARG ) 347 { 348 if ( pFileDlg->GetError() == ERRCODE_NONE ) 349 { 350 String sFileName = pFileDlg->GetPath(); 351 if ( sFileName.Len() > 0 ) 352 { 353 INetURLObject aINetURL( sFileName ); 354 if ( INET_PROT_FILE == aINetURL.GetProtocol() ) 355 sFileName = aINetURL.PathToFileName(); 356 } 357 aUrlED.SetText( sFileName ); 358 } 359 360 return 0; 361 } 362 363