diff options
Diffstat (limited to 'sw/source/ui/fldui/javaedit.cxx')
-rw-r--r-- | sw/source/ui/fldui/javaedit.cxx | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/sw/source/ui/fldui/javaedit.cxx b/sw/source/ui/fldui/javaedit.cxx new file mode 100644 index 000000000..b13c9828d --- /dev/null +++ b/sw/source/ui/fldui/javaedit.cxx @@ -0,0 +1,253 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ + +#include <com/sun/star/ui/dialogs/TemplateDescription.hpp> +#include <svl/urihelper.hxx> +#include <view.hxx> +#include <sfx2/docfile.hxx> +#include <sfx2/filedlghelper.hxx> +#include <docsh.hxx> +#include <wrtsh.hxx> +#include <fldbas.hxx> +#include <fldmgr.hxx> +#include <docufld.hxx> +#include <javaedit.hxx> + +#include <strings.hrc> + +using namespace ::com::sun::star; + +SwJavaEditDialog::SwJavaEditDialog(weld::Window* pParent, SwWrtShell* pWrtSh) + : GenericDialogController(pParent, "modules/swriter/ui/insertscript.ui", "InsertScriptDialog") + , m_bNew(true) + , m_bIsUrl(false) + , m_pSh(pWrtSh) + , m_xTypeED(m_xBuilder->weld_entry("scripttype")) + , m_xUrlRB(m_xBuilder->weld_radio_button("url")) + , m_xEditRB(m_xBuilder->weld_radio_button("text")) + , m_xUrlPB(m_xBuilder->weld_button("browse")) + , m_xUrlED(m_xBuilder->weld_entry("urlentry")) + , m_xEditED(m_xBuilder->weld_text_view("textentry")) + , m_xOKBtn(m_xBuilder->weld_button("ok")) + , m_xPrevBtn(m_xBuilder->weld_button("previous")) + , m_xNextBtn(m_xBuilder->weld_button("next")) +{ + // install handler + m_xPrevBtn->connect_clicked( LINK( this, SwJavaEditDialog, PrevHdl ) ); + m_xNextBtn->connect_clicked( LINK( this, SwJavaEditDialog, NextHdl ) ); + m_xOKBtn->connect_clicked( LINK( this, SwJavaEditDialog, OKHdl ) ); + + Link<weld::Toggleable&,void> aLk = LINK(this, SwJavaEditDialog, RadioButtonHdl); + m_xUrlRB->connect_toggled(aLk); + m_xEditRB->connect_toggled(aLk); + m_xUrlPB->connect_clicked(LINK(this, SwJavaEditDialog, InsertFileHdl)); + + m_pMgr.reset(new SwFieldMgr(m_pSh)); + m_pField = static_cast<SwScriptField*>(m_pMgr->GetCurField()); + + m_bNew = !(m_pField && m_pField->GetTyp()->Which() == SwFieldIds::Script); + + CheckTravel(); + + if (!m_bNew) + m_xDialog->set_title(SwResId(STR_JAVA_EDIT)); + + UpdateFromRadioButtons(); +} + +SwJavaEditDialog::~SwJavaEditDialog() +{ + m_pSh->EnterStdMode(); + m_pMgr.reset(); + m_pFileDlg.reset(); +} + +IMPL_LINK_NOARG(SwJavaEditDialog, PrevHdl, weld::Button&, void) +{ + m_pSh->EnterStdMode(); + + SetField(); + m_pMgr->GoPrev(); + m_pField = static_cast<SwScriptField*>(m_pMgr->GetCurField()); + CheckTravel(); + UpdateFromRadioButtons(); +} + +IMPL_LINK_NOARG(SwJavaEditDialog, NextHdl, weld::Button&, void) +{ + m_pSh->EnterStdMode(); + + SetField(); + m_pMgr->GoNext(); + m_pField = static_cast<SwScriptField*>(m_pMgr->GetCurField()); + CheckTravel(); + UpdateFromRadioButtons(); +} + +IMPL_LINK_NOARG(SwJavaEditDialog, OKHdl, weld::Button&, void) +{ + SetField(); + m_xDialog->response(RET_OK); +} + +void SwJavaEditDialog::CheckTravel() +{ + bool bTravel = false; + bool bNext(false), bPrev(false); + + if (!m_bNew) + { + // Traveling only when more than one field + m_pSh->StartAction(); + m_pSh->CreateCursor(); + + bNext = m_pMgr->GoNext(); + if( bNext ) + m_pMgr->GoPrev(); + + bPrev = m_pMgr->GoPrev(); + if( bPrev ) + m_pMgr->GoNext(); + bTravel |= bNext || bPrev; + + m_pSh->DestroyCursor(); + m_pSh->EndAction(); + + if (m_pField->IsCodeURL()) + { + OUString sURL(m_pField->GetPar2()); + if(!sURL.isEmpty()) + { + INetURLObject aINetURL(sURL); + if(INetProtocol::File == aINetURL.GetProtocol()) + sURL = aINetURL.PathToFileName(); + } + m_xUrlED->set_text(sURL); + m_xEditED->set_text(OUString()); + m_xUrlRB->set_active(true); + } + else + { + m_xEditED->set_text(m_pField->GetPar2()); + m_xUrlED->set_text(OUString()); + m_xEditRB->set_active(true); + } + m_xTypeED->set_text(m_pField->GetPar1()); + } + + if ( !bTravel ) + { + m_xPrevBtn->hide(); + m_xNextBtn->hide(); + } + else + { + m_xPrevBtn->set_sensitive(bPrev); + m_xNextBtn->set_sensitive(bNext); + } +} + +void SwJavaEditDialog::SetField() +{ + if( !m_xOKBtn->get_sensitive() ) + return ; + + m_aType = m_xTypeED->get_text(); + m_bIsUrl = m_xUrlRB->get_active(); + + if (m_bIsUrl) + { + m_aText = m_xUrlED->get_text(); + if (!m_aText.isEmpty()) + { + SfxMedium* pMedium = m_pSh->GetView().GetDocShell()->GetMedium(); + INetURLObject aAbs; + if( pMedium ) + aAbs = pMedium->GetURLObject(); + + m_aText = URIHelper::SmartRel2Abs( + aAbs, m_aText, URIHelper::GetMaybeFileHdl()); + } + } + else + m_aText = m_xEditED->get_text(); + + if (m_aType.isEmpty()) + m_aType = "JavaScript"; +} + +bool SwJavaEditDialog::IsUpdate() const +{ + return m_pField && ( sal_uInt32(m_bIsUrl ? 1 : 0) != m_pField->GetFormat() || m_pField->GetPar2() != m_aType || m_pField->GetPar1() != m_aText ); +} + +IMPL_LINK(SwJavaEditDialog, RadioButtonHdl, weld::Toggleable&, rButton, void) +{ + if (!rButton.get_active()) + return; + UpdateFromRadioButtons(); +} + +void SwJavaEditDialog::UpdateFromRadioButtons() +{ + bool bEnable = m_xUrlRB->get_active(); + m_xUrlPB->set_sensitive(bEnable); + m_xUrlED->set_sensitive(bEnable); + m_xEditED->set_sensitive(!bEnable); + + if (!m_bNew) + { + bEnable = !m_pSh->IsReadOnlyAvailable() || !m_pSh->HasReadonlySel(); + m_xOKBtn->set_sensitive(bEnable); + m_xUrlED->set_editable(bEnable); + m_xEditED->set_editable(bEnable); + m_xTypeED->set_editable(bEnable); + if( m_xUrlPB->get_sensitive() && !bEnable ) + m_xUrlPB->set_sensitive( false ); + } +} + +IMPL_LINK_NOARG( SwJavaEditDialog, InsertFileHdl, weld::Button&, void ) +{ + if (!m_pFileDlg) + { + m_pFileDlg.reset(new ::sfx2::FileDialogHelper( + ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, + FileDialogFlags::Insert, "swriter", SfxFilterFlags::NONE, SfxFilterFlags::NONE, m_xDialog.get())); + } + m_pFileDlg->SetContext(sfx2::FileDialogHelper::WriterInsertScript); + m_pFileDlg->StartExecuteModal( LINK( this, SwJavaEditDialog, DlgClosedHdl ) ); +} + +IMPL_LINK_NOARG(SwJavaEditDialog, DlgClosedHdl, sfx2::FileDialogHelper *, void) +{ + if (m_pFileDlg->GetError() == ERRCODE_NONE) + { + OUString sFileName = m_pFileDlg->GetPath(); + if ( !sFileName.isEmpty() ) + { + INetURLObject aINetURL( sFileName ); + if ( INetProtocol::File == aINetURL.GetProtocol() ) + sFileName = aINetURL.PathToFileName(); + } + m_xUrlED->set_text(sFileName); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |