27#include <config_java.h>
34#include <officecfg/Office/Common.hxx>
35#include <osl/file.hxx>
50#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
51#include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
52#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
54#include <jvmfwk/framework.hxx>
59#define CLASSPATH_DELIMITER SAL_PATHSEPARATOR
68 :
SfxTabPage(pPage, pController,
"cui/ui/optadvancedpage.ui",
"OptAdvancedPage", &
rSet)
69 , m_aResetIdle(
"cui options SvxJavaOptionsPage Reset")
70 , xDialogListener(new ::
svt::DialogClosedListener())
71 , m_xJavaEnableCB(m_xBuilder->weld_check_button(
"javaenabled"))
72 , m_xJavaList(m_xBuilder->weld_tree_view(
"javas"))
73 , m_xJavaPathText(m_xBuilder->weld_label(
"javapath"))
74 , m_xAddBtn(m_xBuilder->weld_button(
"add"))
75 , m_xParameterBtn(m_xBuilder->weld_button(
"parameters"))
76 , m_xClassPathBtn(m_xBuilder->weld_button(
"classpath"))
77 , m_xExpertConfigBtn(m_xBuilder->weld_button(
"expertconfig"))
78 , m_xExperimentalCB(m_xBuilder->weld_check_button(
"experimental"))
79 , m_xMacroCB(m_xBuilder->weld_check_button(
"macrorecording"))
80 , m_xAddDialogText(m_xBuilder->weld_label(
"selectruntime"))
81 , m_xJavaFrame(m_xBuilder->weld_widget(
"javaframe"))
93 std::vector<int> aWidths
96 o3tl::narrowing<int>(
m_xJavaList->get_pixel_size(
"Sun Microsystems Inc.").Width())
107 if (!officecfg::Office::Common::Security::EnableExpertConfiguration::get())
110 if (officecfg::Office::Common::Misc::MacroRecorderMode::isReadOnly())
113 if (officecfg::Office::Common::Misc::ExperimentalMode::isReadOnly())
138 bool bEnable = m_xJavaFrame->get_sensitive() && m_xJavaEnableCB->get_active();
139 m_xJavaList->set_sensitive(bEnable);
144 HandleCheckEntry(m_xJavaList->get_iter_index_in_parent(rRowCol.first));
149 UpdateJavaPathText();
156 Reference < XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
160 xFolderPicker->setDisplayDirectory( sWorkFolder );
161 xFolderPicker->setDescription( m_sAddDialogText );
163 Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
164 if ( xAsyncDlg.is() )
165 xAsyncDlg->startExecuteModal( xDialogListener );
166 else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
167 AddFolder( xFolderPicker->getDirectory() );
178 std::vector< OUString > aParameterList;
183 if (
JFW_E_NONE == eErr && !m_parParameters.empty() )
185 aParameterList = m_parParameters;
186 m_xParamDlg->SetParameters( aParameterList );
191 aParameterList = m_xParamDlg->GetParameters();
192 m_xParamDlg->DisableButtons();
195 if (m_xParamDlg->run() ==
RET_OK)
197 if ( aParameterList != m_xParamDlg->GetParameters() )
199 aParameterList = m_xParamDlg->GetParameters();
207 m_xParamDlg->SetParameters( aParameterList );
225 sClassPath = m_pClassPath;
226 m_xPathDlg->SetClassPath( sClassPath );
230 sClassPath = m_xPathDlg->GetClassPath();
232 m_xPathDlg->SetFocus();
233 if (m_xPathDlg->run() ==
RET_OK)
236 if (m_xPathDlg->GetClassPath() != sClassPath)
238 sClassPath = m_xPathDlg->GetClassPath();
246 m_xPathDlg->SetClassPath( sClassPath );
263 Reference< XAsynchronousExecutableDialog > xAsyncDlg( xFolderPicker, UNO_QUERY );
264 if ( xAsyncDlg.is() )
265 xAsyncDlg->startExecuteModal( xDialogListener );
266 else if ( xFolderPicker.is() && xFolderPicker->execute() == ExecutableDialogResults::OK )
267 AddFolder( xFolderPicker->getDirectory() );
277 if (
RET_OK == pEvt->DialogResult )
279 DBG_ASSERT( xFolderPicker.is(),
"SvxJavaOptionsPage::DialogClosedHdl(): no folder picker" );
281 AddFolder( xFolderPicker->getDirectory() );
290 aExpertConfigDlg.
Reset();
302 m_parJavaInfo.clear();
315 for (
auto const & pInfo: m_parJavaInfo)
326 std::unique_ptr<JavaInfo> pSelectedJava;
332 for (
auto const & pCmpInfo: m_parJavaInfo)
358 OUString sLocation = aLocObj.
getFSysPath(FSysStyle::Detect);
380 OUString sLocation =
m_xJavaList->get_selected_id();
389 bool bStartAgain =
true;
390 std::unique_ptr<JavaInfo> pInfo;
396 for (
auto const & pCmpInfo: m_parJavaInfo)
434 VclMessageType::Warning, VclButtonsType::Ok,
435 CuiResId(RID_CUISTR_JRE_NOT_RECOGNIZED)));
441 VclMessageType::Warning, VclButtonsType::Ok,
442 CuiResId(RID_CUISTR_JRE_FAILED_VERSION)));
466 return std::make_unique<SvxJavaOptionsPage>(pPage, pController, *rAttrSet);
471 bool bModified =
false;
475 std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
477 officecfg::Office::Common::Misc::ExperimentalMode::set(
m_xExperimentalCB->get_active(), xChanges );
483 if (
m_xMacroCB->get_state_changed_from_saved() )
485 std::shared_ptr< comphelper::ConfigurationChanges > xChanges(
487 officecfg::Office::Common::Misc::MacroRecorderMode::set(
m_xMacroCB->get_active(), xChanges );
497 SAL_WARN_IF(
JFW_E_NONE != eErr,
"cui.options",
"SvxJavaOptionsPage::FillItemSet(): error in jfw_setVMParameters");
507 SAL_WARN_IF(
JFW_E_NONE != eErr,
"cui.options",
"SvxJavaOptionsPage::FillItemSet(): error in jfw_setUserClassPath");
518 if (
i < m_parJavaInfo.size() )
519 pInfo = m_parJavaInfo[
i].get();
523 std::unique_ptr<JavaInfo> pSelectedJava;
536 SAL_WARN_IF(
JFW_E_NONE != eErr,
"cui.options",
"SvxJavaOptionsPage::FillItemSet(): error in jfw_setSelectedJRE");
544 bool bEnabled =
false;
547 "SvxJavaOptionsPage::FillItemSet(): error in jfw_getEnabled" );
552 "SvxJavaOptionsPage::FillItemSet(): error in jfw_setEnabled" );
567 bool bEnabled =
false;
574 std::unique_ptr<JavaInfo> pSelectedJava;
587 m_xExperimentalCB->set_active( officecfg::Office::Common::Misc::ExperimentalMode::get() );
589 m_xMacroCB->set_active( officecfg::Office::Common::Misc::MacroRecorderMode::get() );
604 : GenericDialogController(pParent,
"cui/ui/javastartparametersdialog.ui",
605 "JavaStartParameters")
606 , m_xParameterEdit(m_xBuilder->weld_entry(
"parameterfield"))
607 , m_xAssignBtn(m_xBuilder->weld_button(
"assignbtn"))
608 , m_xAssignedList(m_xBuilder->weld_tree_view(
"assignlist"))
609 , m_xRemoveBtn(m_xBuilder->weld_button(
"removebtn"))
610 , m_xEditBtn(m_xBuilder->weld_button(
"editbtn"))
634 m_xAssignBtn->set_sensitive(!sParam.isEmpty());
640 if (sParam.isEmpty())
643 int nPos = m_xAssignedList->find_text(sParam);
646 m_xAssignedList->append_text(sParam);
647 m_xAssignedList->select(m_xAssignedList->n_children() - 1);
650 m_xAssignedList->select(
nPos);
651 m_xParameterEdit->set_text(OUString());
652 ModifyHdl_Impl(*m_xParameterEdit);
654 EnableRemoveButton();
659 if (m_xAssignBtn->get_sensitive())
661 AssignHdl_Impl(*m_xAssignBtn);
675 EnableRemoveButton();
686 int nPos = m_xAssignedList->get_selected_index();
689 m_xAssignedList->remove(
nPos);
690 int nCount = m_xAssignedList->n_children();
695 m_xAssignedList->select(
nPos);
702 EnableRemoveButton();
718 if (!aParamEditDlg.run())
722 if ( !editedClassPath.isEmpty() && editableClassPath != editedClassPath )
734 return GenericDialogController::run();
740 std::vector< OUString > aParamList;
741 aParamList.reserve(
nCount);
757 for (
auto const & sParam: rParams)
769 : GenericDialogController(pParent,
"cui/ui/javaclasspathdialog.ui",
"JavaClassPath")
770 , m_xPathList(m_xBuilder->weld_tree_view(
"paths"))
771 , m_xAddArchiveBtn(m_xBuilder->weld_button(
"archive"))
772 , m_xAddPathBtn(m_xBuilder->weld_button(
"folder"))
773 , m_xRemoveBtn(m_xBuilder->weld_button(
"remove"))
797 if (m_xPathList->count_selected_rows() > 0)
799 osl::FileBase::getFileURLFromSystemPath(m_xPathList->get_selected_text(), sFolder);
802 if (!sFolder.isEmpty())
806 OUString sURL = aDlg.
GetPath();
808 if (osl::FileBase::getSystemPathFromFileURL(sURL, sFile) == osl::FileBase::E_None)
811 if ( !IsPathDuplicate( sFile ) )
814 m_xPathList->select(m_xPathList->n_children() - 1);
818 OUString sMsg(
CuiResId( RID_CUISTR_MULTIFILE_DBL_ERR ) );
819 sMsg = sMsg.replaceFirst(
"%1", sFile );
821 VclMessageType::Warning, VclButtonsType::Ok, sMsg));
827 OUString sMsg(
CuiResId( RID_CUISTR_CANNOTCONVERTURL_ERR ) );
828 sMsg = sMsg.replaceFirst(
"%1", sURL );
830 VclMessageType::Warning, VclButtonsType::Ok, sMsg));
834 EnableRemoveButton();
839 Reference < XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
843 if (m_xPathList->count_selected_rows() > 0)
845 osl::FileBase::getFileURLFromSystemPath(m_xPathList->get_selected_text(), sOldFolder);
848 if (sOldFolder.isEmpty())
850 xFolderPicker->setDisplayDirectory( sOldFolder );
851 if ( xFolderPicker->execute() == ExecutableDialogResults::OK )
853 OUString sFolderURL( xFolderPicker->getDirectory() );
856 if (osl::FileBase::getSystemPathFromFileURL(sFolderURL, sNewFolder)
857 == osl::FileBase::E_None)
859 if ( !IsPathDuplicate( sNewFolder ) )
862 m_xPathList->select(m_xPathList->n_children() - 1);
866 OUString sMsg(
CuiResId( RID_CUISTR_MULTIFILE_DBL_ERR ) );
867 sMsg = sMsg.replaceFirst(
"%1", sNewFolder );
869 VclMessageType::Warning, VclButtonsType::Ok, sMsg));
875 OUString sMsg(
CuiResId( RID_CUISTR_CANNOTCONVERTURL_ERR ) );
876 sMsg = sMsg.replaceFirst(
"%1", sFolderURL );
878 VclMessageType::Warning, VclButtonsType::Ok, sMsg));
882 EnableRemoveButton();
887 int nPos = m_xPathList->get_selected_index();
890 m_xPathList->remove(
nPos);
891 int nCount = m_xPathList->n_children();
896 m_xPathList->select(
nPos );
900 EnableRemoveButton();
905 EnableRemoveButton();
926 OUStringBuffer sPath;
930 if (!sPath.isEmpty())
934 return sPath.makeStringAndClear();
942 if (!_rPath.isEmpty())
949 osl::FileBase::getFileURLFromSystemPath(sToken, sURL);
Reference< XExecutableDialog > m_xDialog
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
static weld::MessageDialog * CreateMessageDialog(weld::Widget *pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage, const ILibreOfficeKitNotifier *pNotifier=nullptr)
OUString getFSysPath(FSysStyle eStyle, sal_Unicode *pDelimiter=nullptr) const
virtual void Start(bool bStartTimer=true) override
void SetNeedsRestart(svtools::RestartReason eReason)
SfxOkDialogController * GetDialogController() const
void SetUserData(const OUString &rString)
weld::Window * GetFrameWeld() const
const OUString & GetWorkPath() const
SvxJavaClassPathDlg(weld::Window *pParent)
std::unique_ptr< weld::Button > m_xAddArchiveBtn
std::unique_ptr< weld::TreeView > m_xPathList
bool IsPathDuplicate(std::u16string_view _rPath)
OUString GetClassPath() const
std::unique_ptr< weld::Button > m_xRemoveBtn
virtual ~SvxJavaClassPathDlg() override
void SetClassPath(const OUString &_rPath)
std::unique_ptr< weld::Button > m_xAddPathBtn
virtual bool FillItemSet(SfxItemSet *rSet) override
std::unique_ptr< weld::CheckButton > m_xMacroCB
std::unique_ptr< weld::CheckButton > m_xJavaEnableCB
OUString m_sAddDialogText
std::unique_ptr< weld::Button > m_xExpertConfigBtn
void HandleCheckEntry(int nCheckedRow)
void RequestRestart(svtools::RestartReason eReason)
void UpdateJavaPathText()
std::unique_ptr< SvxJavaClassPathDlg > m_xPathDlg
std::unique_ptr< weld::TreeView > m_xJavaList
std::unique_ptr< weld::Button > m_xAddBtn
void AddFolder(const OUString &_rFolder)
std::unique_ptr< SvxJavaParameterDlg > m_xParamDlg
rtl::Reference< ::svt::DialogClosedListener > xDialogListener
std::unique_ptr< weld::Label > m_xJavaPathText
virtual void FillUserData() override
std::unique_ptr< weld::Widget > m_xJavaFrame
std::unique_ptr< weld::CheckButton > m_xExperimentalCB
virtual ~SvxJavaOptionsPage() override
css::uno::Reference< css::ui::dialogs::XFolderPicker2 > xFolderPicker
std::unique_ptr< weld::Button > m_xParameterBtn
void AddJRE(JavaInfo const *_pInfo)
std::unique_ptr< weld::Label > m_xAddDialogText
static std::unique_ptr< SfxTabPage > Create(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet *rSet)
virtual void Reset(const SfxItemSet *rSet) override
SvxJavaOptionsPage(weld::Container *pPage, weld::DialogController *pController, const SfxItemSet &rSet)
std::unique_ptr< weld::Button > m_xClassPathBtn
std::vector< std::unique_ptr< JavaInfo > > m_aAddedInfos
void EnableRemoveButton()
void SetParameters(std::vector< OUString > const &rParams)
void DisableRemoveButton()
std::vector< OUString > GetParameters() const
SvxJavaParameterDlg(weld::Window *pParent)
std::unique_ptr< weld::Button > m_xAssignBtn
void DisableAssignButton()
virtual ~SvxJavaParameterDlg() override
std::unique_ptr< weld::Button > m_xEditBtn
virtual short run() override
std::unique_ptr< weld::Button > m_xRemoveBtn
std::unique_ptr< weld::Entry > m_xParameterEdit
std::unique_ptr< weld::TreeView > m_xAssignedList
void SetInvokeHandler(const Link< Timer *, void > &rLink)
static std::shared_ptr< ConfigurationChanges > create()
void AddFilter(const OUString &rFilterName, const OUString &rExtension)
void SetDisplayDirectory(const OUString &rPath)
void SetTitle(const OUString &rNewTitle)
void SetContext(Context _eNewContext)
std::shared_ptr< weld::Dialog > m_xDialog
std::pair< const TreeIter &, int > iter_col
OUString CuiResId(TranslateId aKey)
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
weld::Window * GetFrameWeld(const SfxFrame *pFrame)
javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo)
javaFrameworkError jfw_getJavaInfoByPath(OUString const &pPath, std::unique_ptr< JavaInfo > *ppInfo)
javaFrameworkError jfw_setVMParameters(std::vector< OUString > const &arOptions)
javaFrameworkError jfw_addJRELocation(OUString const &sLocation)
javaFrameworkError jfw_setUserClassPath(OUString const &pCp)
javaFrameworkError jfw_getSelectedJRE(std::unique_ptr< JavaInfo > *ppInfo)
javaFrameworkError jfw_getVMParameters(std::vector< OUString > *parOptions)
bool jfw_areEqualJavaInfo(JavaInfo const *pInfoA, JavaInfo const *pInfoB)
javaFrameworkError jfw_getUserClassPath(OUString *ppCP)
javaFrameworkError jfw_setEnabled(bool bEnabled)
javaFrameworkError jfw_findAllJREs(std::vector< std::unique_ptr< JavaInfo > > *pparInfo)
javaFrameworkError jfw_getEnabled(bool *pbEnabled)
#define JFW_REQUIRE_NEEDRESTART
#define LINK(Instance, Class, Member)
#define SAL_WARN_IF(condition, area, stream)
OString strip(const OString &rIn, char c)
css::uno::Reference< css::ui::dialogs::XFolderPicker2 > createFolderPicker(const css::uno::Reference< css::uno::XComponentContext > &rContext, weld::Window *pPreferredParent)
#define CLASSPATH_DELIMITER
IMPL_LINK(SvxJavaOptionsPage, CheckHdl_Impl, const weld::TreeView::iter_col &, rRowCol, void)
IMPL_LINK_NOARG(SvxJavaOptionsPage, EnableHdl_Impl, weld::Toggleable &, void)