diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2012-11-27 12:40:15 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2012-11-27 12:51:39 +0100 |
commit | 872d76228fc440d22924b69a391f027dbdc8e693 (patch) | |
tree | 8c62817deff6b6636bb04d353af8be2ff7cc5052 /svtools/source/dialogs | |
parent | 602b746330d21ae1b9c0fc60eb0980ed92cd5680 (diff) |
Introduce a Restart dialog that allows to automatically restart LO
...instead of just telling the user to restart manually.
The one existing dialog (duplicated into svtools and cui) that got replaced by
this is the dialog asking to restart when the choice of JVM changed. There are
more similar dialogs that would benefit from replacing them, like
RID_SVX_MSGBOX_OPTIONS_RESTART (cui/source/options/optjava.src), but that one is
called when closing a dialog nested within the Options dialog, and calling
OfficeRestartManger.requestRestart in such a nested situation still leads to a
crash.
The design idea is that when more similar dialogs are replaced, restartdialog.ui
contains a list of hidden GtkLables with the appropriate prose why a restart is
required in the given case, and restartdialog.hxx's RestartReason enum contains
corresponding values that will show exactly one of those GtkLables.
The new svtools/uiconfig/ui/restartdialog.ui is probably still pretty rough and
could benefit from some UX love.
Change-Id: Id939188ee22f24301a8a3598b83afb31339bded5
Diffstat (limited to 'svtools/source/dialogs')
-rw-r--r-- | svtools/source/dialogs/restartdialog.cxx | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/svtools/source/dialogs/restartdialog.cxx b/svtools/source/dialogs/restartdialog.cxx new file mode 100644 index 000000000000..1004a2d6d394 --- /dev/null +++ b/svtools/source/dialogs/restartdialog.cxx @@ -0,0 +1,78 @@ +/* -*- 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/. + */ + +#include "sal/config.h" + +#include <cassert> + +#include "com/sun/star/task/OfficeRestartManager.hpp" +#include "com/sun/star/task/XInteractionHandler.hpp" +#include "com/sun/star/uno/Reference.hxx" +#include "com/sun/star/uno/XComponentContext.hpp" +#include "svtools/restartdialog.hxx" +#include "tools/link.hxx" +#include "vcl/button.hxx" +#include "vcl/dialog.hxx" +#include "vcl/window.hxx" + +namespace { + +namespace css = com::sun::star; + +class RestartDialog: public ModalDialog { +public: + RestartDialog(Window * parent, svtools::RestartReason reason): + ModalDialog(parent, "RestartDialog", "svt/ui/restartdialog.ui") + { + get(reasonJava_, "reason_java"); + get(btnYes_, "yes"); + get(btnNo_, "no"); + switch (reason) { + case svtools::RESTART_REASON_JAVA: + reasonJava_->Show(); + break; + default: + assert(false); // this cannot happen + } + btnYes_->SetClickHdl(LINK(this, RestartDialog, hdlYes)); + btnNo_->SetClickHdl(LINK(this, RestartDialog, hdlNo)); + } + +private: + DECL_LINK(hdlYes, void *); + DECL_LINK(hdlNo, void *); + + Window * reasonJava_; + PushButton * btnYes_; + PushButton * btnNo_; +}; + +IMPL_LINK_NOARG(RestartDialog, hdlYes) { + EndDialog(true); + return 0; +} + +IMPL_LINK_NOARG(RestartDialog, hdlNo) { + EndDialog(false); + return 0; +} + +} + +void svtools::executeRestartDialog( + css::uno::Reference< css::uno::XComponentContext > const & context, + Window * parent, RestartReason reason) +{ + if (RestartDialog(parent, reason).Execute()) { + css::task::OfficeRestartManager::get(context)->requestRestart( + css::uno::Reference< css::task::XInteractionHandler >()); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |