[PATCH] Loader's ImageTree doesn't store multiple image pathes anymo...

Rodolfo Ribeiro Gomes (via Code Review) gerrit at gerrit.libreoffice.org
Fri May 17 16:38:37 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3951

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/51/3951/1

Loader's ImageTree doesn't store multiple image pathes anymore

Change-Id: Idd13039a76c46bfccad5f54e3357dde952508211
Signed-off-by: Rodolfo Ribeiro Gomes <rodolforg at gmail.com>
---
M vcl/inc/impimagetree.hxx
M vcl/source/gdi/impimagetree.cxx
2 files changed, 53 insertions(+), 67 deletions(-)



diff --git a/vcl/inc/impimagetree.hxx b/vcl/inc/impimagetree.hxx
index f42a039..0dc3110 100644
--- a/vcl/inc/impimagetree.hxx
+++ b/vcl/inc/impimagetree.hxx
@@ -65,11 +65,10 @@
         OUString const & name, OUString const & style,
         BitmapEx & bitmap, bool localized);
 
-    typedef std::list<
-        std::pair<
-            OUString,
-            com::sun::star::uno::Reference<
-                com::sun::star::container::XNameAccess > > > Paths;
+    typedef std::pair<
+        OUString,
+        com::sun::star::uno::Reference<
+            com::sun::star::container::XNameAccess > > Path;
 
     typedef boost::unordered_map<
         OUString, bool, OUStringHash > CheckStyleCache;
@@ -77,7 +76,7 @@
         OUString, std::pair< bool, BitmapEx >, OUStringHash > IconCache;
 
     OUString m_style;
-    Paths m_paths;
+    Path m_path;
     CheckStyleCache m_checkStyleCache;
     IconCache m_iconCache;
     bool m_cacheIcons;
diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx
index 97fa471..86e2f22 100644
--- a/vcl/source/gdi/impimagetree.cxx
+++ b/vcl/source/gdi/impimagetree.cxx
@@ -144,23 +144,21 @@
     setStyle(style);
 
     exists = false;
-    for (Paths::iterator i(m_paths.begin()); i != m_paths.end() && !exists; ++i) {
-        OUString aURL = i->first;
+    OUString aURL = m_path.first;
 
-        osl::File aZip(aURL + ".zip");
-        if (aZip.open(osl_File_OpenFlag_Read) == ::osl::FileBase::E_None) {
-            aZip.close();
-            exists = true;
-        }
+    osl::File aZip(aURL + ".zip");
+    if (aZip.open(osl_File_OpenFlag_Read) == ::osl::FileBase::E_None) {
+        aZip.close();
+        exists = true;
+    }
 
-        osl::Directory aLookaside(aURL);
-        if (aLookaside.open() == ::osl::FileBase::E_None) {
-            aLookaside.close();
-            exists = true;
-            m_cacheIcons = false;
-        } else {
-            m_cacheIcons = true;
-        }
+    osl::Directory aLookaside(aURL);
+    if (aLookaside.open() == ::osl::FileBase::E_None) {
+        aLookaside.close();
+        exists = true;
+        m_cacheIcons = false;
+    } else {
+        m_cacheIcons = true;
     }
     m_checkStyleCache[style] = exists;
     return exists;
@@ -238,7 +236,6 @@
 void ImplImageTree::shutDown() {
     m_style = OUString();
         // for safety; empty m_style means "not initialized"
-    m_paths.clear();
     m_iconCache.clear();
     m_checkStyleCache.clear();
 }
@@ -253,8 +250,6 @@
 }
 
 void ImplImageTree::resetPaths() {
-    m_paths.clear();
-
     OUString url( "$BRAND_BASE_DIR/share/config/" );
     rtl::Bootstrap::expandMacros(url);
     if ( m_style != "default" )
@@ -267,9 +262,8 @@
     }
     else
         url += "images";
-    m_paths.push_back(
-        std::make_pair(
-            url, css::uno::Reference< css::container::XNameAccess >()));
+    m_path = std::make_pair(
+        url, css::uno::Reference< css::container::XNameAccess >());
 }
 
 bool ImplImageTree::checkStyleCacheLookup(
@@ -300,52 +294,45 @@
     std::vector< OUString > const & paths, BitmapEx & bitmap)
 {
     if (!m_cacheIcons) {
-        for (Paths::iterator i(m_paths.begin()); i != m_paths.end(); ++i) {
-            for (std::vector< OUString >::const_reverse_iterator j(
-                     paths.rbegin());
-                 j != paths.rend(); ++j)
-            {
-                osl::File file(i->first + "/" + *j);
-                if (file.open(osl_File_OpenFlag_Read) == ::osl::FileBase::E_None) {
-                    loadImageFromStream( wrapFile(file), *j, bitmap );
-                    file.close();
-                    return true;
-                }
+        for (std::vector< OUString >::const_reverse_iterator j(paths.rbegin());
+             j != paths.rend(); ++j)
+        {
+            osl::File file(m_path.first + "/" + *j);
+            if (file.open(osl_File_OpenFlag_Read) == ::osl::FileBase::E_None) {
+                loadImageFromStream( wrapFile(file), *j, bitmap );
+                file.close();
+                return true;
             }
         }
     }
 
-    for (Paths::iterator i(m_paths.begin()); i != m_paths.end();) {
-        if (!i->second.is()) {
-            css::uno::Sequence< css::uno::Any > args(1);
-            args[0] <<= i->first + ".zip";
-            try {
-                i->second.set(
-                    comphelper::getProcessServiceFactory()->createInstanceWithArguments(
-                        OUString( "com.sun.star.packages.zip.ZipFileAccess"),
-                        args),
-                    css::uno::UNO_QUERY_THROW);
-            } catch (css::uno::RuntimeException &) {
-                throw;
-            } catch (const css::uno::Exception & e) {
-                SAL_INFO("vcl", "ImplImageTree::find exception "
-                    << e.Message << " for " << i->first);
-                i = m_paths.erase(i);
-                continue;
-            }
+    if (!m_path.second.is()) {
+        css::uno::Sequence< css::uno::Any > args(1);
+        args[0] <<= m_path.first + ".zip";
+        try {
+            m_path.second.set(
+                comphelper::getProcessServiceFactory()->createInstanceWithArguments(
+                    OUString( "com.sun.star.packages.zip.ZipFileAccess"),
+                    args),
+                css::uno::UNO_QUERY_THROW);
+        } catch (css::uno::RuntimeException &) {
+            throw;
+        } catch (const css::uno::Exception & e) {
+            SAL_INFO("vcl", "ImplImageTree::find exception "
+                << e.Message << " for " << m_path.first);
+            return false;
         }
-        for (std::vector< OUString >::const_reverse_iterator j(paths.rbegin());
-             j != paths.rend(); ++j)
-        {
-            if (i->second->hasByName(*j)) {
-                css::uno::Reference< css::io::XInputStream > s;
-                bool ok = i->second->getByName(*j) >>= s;
-                OSL_ASSERT(ok); (void) ok;
-                loadImageFromStream( wrapStream(s), *j, bitmap );
-                return true;
-            }
+    }
+    for (std::vector< OUString >::const_reverse_iterator j(paths.rbegin());
+         j != paths.rend(); ++j)
+    {
+        if (m_path.second->hasByName(*j)) {
+            css::uno::Reference< css::io::XInputStream > s;
+            bool ok = m_path.second->getByName(*j) >>= s;
+            OSL_ASSERT(ok); (void) ok;
+            loadImageFromStream( wrapStream(s), *j, bitmap );
+            return true;
         }
-        ++i;
     }
     return false;
 }

-- 
To view, visit https://gerrit.libreoffice.org/3951
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idd13039a76c46bfccad5f54e3357dde952508211
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Rodolfo Ribeiro Gomes <libo at rodolfo.eng.br>



More information about the LibreOffice mailing list