summaryrefslogtreecommitdiff
path: root/svtools/source/dialogs
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-11-27 12:40:15 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-11-27 12:51:39 +0100
commit872d76228fc440d22924b69a391f027dbdc8e693 (patch)
tree8c62817deff6b6636bb04d353af8be2ff7cc5052 /svtools/source/dialogs
parent602b746330d21ae1b9c0fc60eb0980ed92cd5680 (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.cxx78
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: */