summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-10-26 17:55:14 +0100
committerAndras Timar <andras.timar@collabora.com>2015-10-29 13:08:59 +0100
commitd42d6dbfc6beac895ee778a1f30eab0435adf544 (patch)
treec4a119eb7c622568d8a4bbe3d8031d40137064aa /include
parent6dffbfbc3e98e82a951c6af6d44ae4f559343145 (diff)
tdf#75637: Resolve help images via a vnd.libreoffice.image UCP
...which uses the logic already available in VCL's ImplImageTree to locate the image zip files and find fallbacks for incomplete themes and for localized images. (cherry picked from commit 6948c546fdc00dddec7d58e03150dcc87921d6b2, plus f5174c89cd037d35b975590083cf91b36633808d "...but do not erase localize attributes from image elements," which is needed to make localized image references work again) Conflicts: vcl/osx/vclnsapp.mm Change-Id: Ic1c15fcacb6596a27a2b051093232902202bf472 Reviewed-on: https://gerrit.libreoffice.org/19644 Reviewed-by: Michael Stahl <mstahl@redhat.com> Tested-by: Michael Stahl <mstahl@redhat.com> (cherry picked from commit 74453dbed460c0c428ce989b07a65d5cac5db49a)
Diffstat (limited to 'include')
-rw-r--r--include/vcl/implimagetree.hxx121
1 files changed, 121 insertions, 0 deletions
diff --git a/include/vcl/implimagetree.hxx b/include/vcl/implimagetree.hxx
new file mode 100644
index 000000000000..176b6125e827
--- /dev/null
+++ b/include/vcl/implimagetree.hxx
@@ -0,0 +1,121 @@
+/* -*- 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 .
+ */
+
+#ifndef INCLUDED_INCLUDE_VCL_IMPLIMAGETREE_HXX
+#define INCLUDED_INCLUDE_VCL_IMPLIMAGETREE_HXX
+
+#include <sal/config.h>
+
+#include <memory>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#include <com/sun/star/uno/Reference.hxx>
+#include <rtl/ustring.hxx>
+#include <vcl/bitmapex.hxx>
+#include <vcl/dllapi.h>
+
+namespace com { namespace sun { namespace star { namespace container {
+ class XNameAccess;
+} } } }
+
+class ImplImageTree {
+public:
+ VCL_DLLPUBLIC static ImplImageTree & get();
+
+ ImplImageTree();
+
+ ~ImplImageTree();
+
+ VCL_DLLPUBLIC OUString getImageUrl(
+ OUString const & name, OUString const & style, OUString const & lang);
+
+ bool loadImage(
+ OUString const & name, OUString const & style,
+ BitmapEx & bitmap, bool localized = false, bool loadMissing = false );
+
+ bool loadDefaultImage(
+ OUString const & style,
+ BitmapEx& bitmap);
+
+ /** a crude form of life cycle control (called from DeInitVCL; otherwise,
+ * if the ImplImageTree singleton were destroyed during exit that would
+ * be too late for the destructors of the bitmaps in maIconCache)*/
+ void shutDown();
+
+ css::uno::Reference< css::container::XNameAccess > getNameAccess();
+
+private:
+ ImplImageTree(const ImplImageTree&) SAL_DELETED_FUNCTION;
+ ImplImageTree& operator=(const ImplImageTree&) SAL_DELETED_FUNCTION;
+
+ typedef std::unordered_map<OUString, std::pair<bool, BitmapEx>, OUStringHash> IconCache;
+ typedef std::unordered_map<OUString, OUString, OUStringHash> IconLinkHash;
+
+ struct IconSet {
+ OUString maURL;
+ css::uno::Reference<css::container::XNameAccess> maNameAccess;
+ IconCache maIconCache;
+ IconLinkHash maLinkHash;
+
+ IconSet() {}
+ IconSet(const OUString &aURL) : maURL(aURL) {}
+ };
+
+ /// Map between the theme name(s) and the content.
+ typedef std::unordered_map<OUString, IconSet, OUStringHash> StyleIconSet;
+
+ /// Remember all the (used) icon styles and individual icons in them.
+ StyleIconSet maIconSet;
+
+ /// Styly used for the current operations; switches switch several times during fallback search.
+ OUString maCurrentStyle;
+
+ bool doLoadImage(
+ OUString const & name, OUString const & style,
+ BitmapEx & bitmap, bool localized);
+
+ bool checkPathAccess();
+
+ void setStyle(OUString const & style );
+
+ void createStyle();
+
+ bool iconCacheLookup( OUString const & name, bool localized, BitmapEx & bitmap );
+
+ bool findImage(std::vector< OUString > const & paths, BitmapEx & bitmap );
+
+ void loadImageLinks();
+
+ void parseLinkFile(std::shared_ptr<SvStream> stream);
+
+ /// Return name of a real .png according to links.txt.
+ OUString const & getRealImageName(OUString const & name);
+
+ /** Rerurn name of the fallback style for the provided one.
+
+ Must not be cyclic :-) The last theme in the chain returns an empty string.
+ */
+ static OUString fallbackStyle(const OUString &style);
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */