diff options
author | Miklos Vajna <vmiklos@collabora.com> | 2021-09-29 14:56:43 +0200 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.com> | 2021-09-29 15:49:12 +0200 |
commit | a92ce1ed68b3f6522db76e8caa7e69cf2f66fc22 (patch) | |
tree | bf268e500c1822d778dd1a19e6d026e5caffa6aa /embeddedobj | |
parent | e9564f1d727e89e8ab7c441a80a3944de10b3d3d (diff) |
embeddedobj: add a status indicator for the Further objects dialog
Inserting a large file can take a while, and we do it on the main
thread, so the UI is frozen during the operation.
Create the progressbar in cui, which is allowed to link against sfx2/
and then pass it down to embeddedobj/. Similarly for the label of the
progressbar, again because cui is allowed to link against svx/.
Change-Id: I53fec4e14df647b140647d9ff5a3a37c0aa9e72e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122825
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
Diffstat (limited to 'embeddedobj')
-rw-r--r-- | embeddedobj/source/msole/xdialogcreator.cxx | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/embeddedobj/source/msole/xdialogcreator.cxx b/embeddedobj/source/msole/xdialogcreator.cxx index 226528516953..d5ecdf587909 100644 --- a/embeddedobj/source/msole/xdialogcreator.cxx +++ b/embeddedobj/source/msole/xdialogcreator.cxx @@ -29,6 +29,7 @@ #include <com/sun/star/datatransfer/DataFlavor.hpp> #include <com/sun/star/lang/IllegalArgumentException.hpp> #include <com/sun/star/ucb/CommandAbortedException.hpp> +#include <com/sun/star/task/XStatusIndicatorFactory.hpp> #include <osl/thread.h> #include <osl/file.hxx> @@ -40,6 +41,7 @@ #include <comphelper/processfactory.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/weak.hxx> +#include <comphelper/sequenceashashmap.hxx> #include "xdialogcreator.hxx" #include <oleembobj.hxx> @@ -215,8 +217,31 @@ embed::InsertedObjectInfo SAL_CALL MSOLEDialogObjectCreator::createInstanceByDia if ( !xEmbCreator.is() ) throw uno::RuntimeException(); + uno::Reference<task::XStatusIndicator> xProgress; + OUString aProgressText; + comphelper::SequenceAsHashMap aMap(aInObjArgs); + auto it = aMap.find("StatusIndicator"); + if (it != aMap.end()) + { + it->second >>= xProgress; + } + it = aMap.find("StatusIndicatorText"); + if (it != aMap.end()) + { + it->second >>= aProgressText; + } + if (xProgress.is()) + { + xProgress->start(aProgressText, 100); + } + aObjectInfo.Object.set( xEmbCreator->createInstanceInitFromMediaDescriptor( xStorage, sEntName, aMediaDescr, aObjArgs ), uno::UNO_QUERY ); + + if (xProgress.is()) + { + xProgress->end(); + } } if ( ( io.dwFlags & IOF_CHECKDISPLAYASICON) && io.hMetaPict != nullptr ) |