[Libreoffice-commits] core.git: Branch 'private/kohei/new-chart-type-skeleton' - 332 commits - accessibility/inc accessibility/source autogen.sh basctl/source basic/source chart2/Library_chartcontroller.mk chart2/Library_chartcore.mk chart2/qa chart2/source compilerplugins/clang configure.ac cppuhelper/source cui/AllLangResTarget_cui.mk cui/source cui/uiconfig cui/UIConfig_cui.mk dbaccess/qa dbaccess/source desktop/source download.lst editeng/source extensions/source external/apache-commons external/jfreereport external/libetonyek filter/source forms/source formula/source fpicker/source framework/source helpcontent2 icon-themes/galaxy idlc/inc idlc/source include/cppuhelper include/filter include/oox include/osl include/sfx2 include/svl include/svtools include/svx include/tools include/vcl include/xmloff lingucomponent/source lotuswordpro/source Makefile.in odk/examples officecfg/registry oox/source postprocess/Rdb_services.mk readlicense_oo/license reportbuilder/java reportdesign/source Reposito ryExternal.mk sal/CppunitTest_sal_rtl_digest.mk sal/Library_sal.mk sal/Module_sal.mk sal/osl sal/qa scaddins/source sc/inc scp2/source sc/qa sc/source sdext/source sd/qa sd/source sfx2/sdi sfx2/source shell/source slideshow/source solenv/bin solenv/gbuild stoc/source svl/source svl/unx svtools/source svx/inc svx/source sw/AllLangResTarget_sw.mk swext/Extension_wiki-publisher.mk sw/inc sw/qa sw/source sw/uiconfig sw/UIConfig_swriter.mk toolkit/source tools/source ucb/source UnoControls/inc UnoControls/source unusedcode.easy vcl/generic vcl/headless vcl/inc vcl/quartz vcl/source vcl/unx wizards/com writerfilter/inc writerfilter/source writerperfect/CppunitTest_writerperfect_impress.mk writerperfect/Library_wpftdraw.mk writerperfect/Library_wpftwriter.mk writerperfect/Module_writerperfect.mk writerperfect/qa writerperfect/source writerperfect/util xmloff/source

Kohei Yoshida kohei.yoshida at collabora.com
Tue Mar 25 19:52:59 PDT 2014


Rebased ref, commits from common ancestor:
commit 86090ef2fb4ea06f687d9e4474b8bdfda6eb6871
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Tue Mar 25 22:50:02 2014 -0400

    Make the new OpenGL chart type a compile time option.
    
    And it's disabled for now.
    
    Change-Id: I9a513d757960b61e7b2d6009eabf97a75b6c453e

diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx
index 0a10bae..3a880ec 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -727,7 +727,9 @@ ChartTypeTabPage::ChartTypeTabPage(Window* pParent
         m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
     }
     m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
+#if ENABLE_GL3D_BARCHART
     m_aChartTypeDialogControllerList.push_back(new GL3DBarChartDialogController());
+#endif
 
     ::std::vector< ChartTypeDialogController* >::const_iterator       aIter = m_aChartTypeDialogControllerList.begin();
     const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd  = m_aChartTypeDialogControllerList.end();
diff --git a/chart2/source/inc/macros.hxx b/chart2/source/inc/macros.hxx
index daf66c4..21e5911 100644
--- a/chart2/source/inc/macros.hxx
+++ b/chart2/source/inc/macros.hxx
@@ -30,6 +30,8 @@
     typeid( ex ).name() << ", Message: " << \
     ex.Message )
 
+#define ENABLE_GL3D_BARCHART 0
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 44fc32edcddc7f290e3e5162be9a80917c499ade
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Mar 24 22:20:02 2014 -0400

    Properly import and export the new chart type to and from ODF.
    
    Change-Id: I38e9813c6eb853dfb92b1537cea0b9ad97473b57

diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
index dea17aa..c7eb4ef 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
@@ -91,6 +91,7 @@ enum eServiceType
     SERVICE_NAME_STOCK_DIAGRAM,
     SERVICE_NAME_XY_DIAGRAM,
     SERVICE_NAME_BUBBLE_DIAGRAM,
+    SERVICE_NAME_GL3DBAR_DIAGRAM,
 
     SERVICE_NAME_DASH_TABLE,
     SERVICE_NAME_GARDIENT_TABLE,
@@ -121,6 +122,7 @@ tServiceNameMap & lcl_getStaticServiceNameMap()
         ( "com.sun.star.chart.StockDiagram",                   SERVICE_NAME_STOCK_DIAGRAM )
         ( "com.sun.star.chart.XYDiagram",                      SERVICE_NAME_XY_DIAGRAM )
         ( "com.sun.star.chart.BubbleDiagram",                  SERVICE_NAME_BUBBLE_DIAGRAM )
+        ( "com.sun.star.chart.GL3DBarDiagram",                 SERVICE_NAME_GL3DBAR_DIAGRAM )
 
         ( "com.sun.star.drawing.DashTable",                    SERVICE_NAME_DASH_TABLE )
         ( "com.sun.star.drawing.GradientTable",                SERVICE_NAME_GARDIENT_TABLE )
@@ -1263,6 +1265,15 @@ uno::Reference< uno::XInterface > SAL_CALL ChartDocumentWrapper::createInstance(
                     bCreateDiagram = true;
                 }
                 break;
+            case SERVICE_NAME_GL3DBAR_DIAGRAM:
+                if( xManagerFact.is())
+                {
+                    xTemplate.set(
+                        xManagerFact->createInstance("com.sun.star.chart2.template.GL3DBar"),
+                                uno::UNO_QUERY );
+                    bCreateDiagram = true;
+                }
+                break;
 
             case SERVICE_NAME_DASH_TABLE:
             case SERVICE_NAME_GARDIENT_TABLE:
diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
index 1dc2dd1..04670ad 100644
--- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
@@ -522,6 +522,9 @@ OUString lcl_getDiagramType( const OUString & rTemplateServiceName )
     {
         const OUString aName( rTemplateServiceName.copy( aPrefix.getLength()));
 
+        if (aName.indexOf("GL3DBar") != -1)
+            return OUString("com.sun.star.chart.GL3DBarDiagram");
+
         // "Area" "StackedArea" "PercentStackedArea" "ThreeDArea"
         // "StackedThreeDArea" "PercentStackedThreeDArea"
         if( aName.indexOf( "Area" ) != -1 )
@@ -597,6 +600,7 @@ const tMakeStringStringMap& lcl_getChartTypeNameMap()
         ( "com.sun.star.chart2.NetChartType", "com.sun.star.chart.NetDiagram" )
         ( "com.sun.star.chart2.CandleStickChartType", "com.sun.star.chart.StockDiagram" )
         ( "com.sun.star.chart2.BubbleChartType", "com.sun.star.chart.BubbleDiagram" )
+        ( "com.sun.star.chart2.GL3DBarChartType", "com.sun.star.chart.GL3DBarDiagram" )
         ;
     return g_aChartTypeNameMap;
 }
diff --git a/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
index 053cbe7..1b3bfdc 100644
--- a/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
+++ b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
@@ -33,8 +33,10 @@ Image GL3DBarChartDialogController::getImage()
 const tTemplateServiceChartTypeParameterMap&
 GL3DBarChartDialogController::getTemplateMap() const
 {
-    static tTemplateServiceChartTypeParameterMap aMap(
-        "com.sun.star.chart2.template.GL3DBarRoundedRectangle", ChartTypeParameter(1));
+    static tTemplateServiceChartTypeParameterMap aMap =
+        tTemplateServiceChartTypeParameterMap
+        ("com.sun.star.chart2.template.GL3DBar", ChartTypeParameter(1))
+        ("com.sun.star.chart2.template.GL3DBarRoundedRectangle", ChartTypeParameter(2));
     return aMap;
 }
 
diff --git a/chart2/source/model/template/ChartTypeManager.cxx b/chart2/source/model/template/ChartTypeManager.cxx
index 49775f9..f6ebbee 100644
--- a/chart2/source/model/template/ChartTypeManager.cxx
+++ b/chart2/source/model/template/ChartTypeManager.cxx
@@ -122,6 +122,7 @@ enum TemplateId
     TEMPLATE_STOCKVOLUMELOWHIGHCLOSE,
     TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE,
     TEMPLATE_BUBBLE,
+    TEMPLATE_GL3DBAR,
     TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE,
 //    TEMPLATE_SURFACE,
 //     TEMPLATE_ADDIN,
@@ -198,6 +199,7 @@ const tTemplateMapType & lcl_DefaultChartTypeMap()
         ( "com.sun.star.chart2.template.StockVolumeLowHighClose",        TEMPLATE_STOCKVOLUMELOWHIGHCLOSE )
         ( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose",    TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE )
         ( "com.sun.star.chart2.template.Bubble",                         TEMPLATE_BUBBLE )
+        ( "com.sun.star.chart2.template.GL3DBar",                        TEMPLATE_GL3DBAR )
         ( "com.sun.star.chart2.template.GL3DBarRoundedRectangle",        TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE )
 //      ( "com.sun.star.chart2.template.Surface",                        TEMPLATE_SURFACE )
 //      ( "com.sun.star.chart2.template.Addin",                          TEMPLATE_ADDIN )
@@ -532,6 +534,9 @@ uno::Reference< uno::XInterface > SAL_CALL ChartTypeManager::createInstance(
                 xTemplate.set( new BubbleChartTypeTemplate( m_xContext, aServiceSpecifier ));
                 break;
 
+            case TEMPLATE_GL3DBAR:
+                xTemplate.set(new GL3DBarChartTypeTemplate(m_xContext, aServiceSpecifier));
+                break;
             case TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE:
                 xTemplate.set(new GL3DBarChartTypeTemplate(m_xContext, aServiceSpecifier));
                 break;
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
index e65c8f5..c551111 100644
--- a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
@@ -19,7 +19,7 @@ namespace chart {
 
 namespace {
 
-const OUString aServiceName("com.sun.star.chart2.BubbleChartTypeTemplate");
+const OUString aServiceName("com.sun.star.chart2.GL3DBarChartTypeTemplate");
 
 }
 
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index 8935eb4..3a5996a 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -900,6 +900,7 @@ namespace xmloff { namespace token {
         XML_GCD,
         XML_GENERATOR,
         XML_GEQ,
+        XML_GL3DBAR,
         XML_GOURAUD,
         XML_GRADIENT,
         XML_GRADIENT_ANGLE,
diff --git a/xmloff/source/chart/SchXMLTools.cxx b/xmloff/source/chart/SchXMLTools.cxx
index b6fe296..06efa57 100644
--- a/xmloff/source/chart/SchXMLTools.cxx
+++ b/xmloff/source/chart/SchXMLTools.cxx
@@ -140,6 +140,7 @@ static const SvXMLEnumMapEntry aXMLChartClassMap[] =
     { XML_BAR,          XML_CHART_CLASS_BAR     },
     { XML_STOCK,        XML_CHART_CLASS_STOCK   },
     { XML_BUBBLE,       XML_CHART_CLASS_BUBBLE  },
+    { XML_GL3DBAR,      XML_CHART_CLASS_GL3DBAR },
     { XML_SURFACE,      XML_CHART_CLASS_BAR     }, //@todo change this if a surface chart is available
     { XML_ADD_IN,       XML_CHART_CLASS_ADDIN   },
     { XML_TOKEN_INVALID, XML_CHART_CLASS_UNKNOWN }
@@ -191,6 +192,9 @@ const tMakeStringStringMap& lcl_getChartTypeNameMap()
         ( OUString( "com.sun.star.chart.BubbleDiagram" )
         , OUString( "com.sun.star.chart2.BubbleChartType" ) )
 
+        ( OUString( "com.sun.star.chart.GL3DBarDiagram" )
+        , OUString( "com.sun.star.chart2.GL3DBarChartType" ) )
+
         ;
     return g_aChartTypeNameMap;
 }
@@ -268,6 +272,8 @@ OUString GetChartTypeByClassName(
         else
             aResultBuffer.append("Column");
     }
+    else if (IsXMLToken(rClassName, XML_GL3DBAR))
+        aResultBuffer.append("GL3DBar");
     else
         bInternalType = false;
 
@@ -333,6 +339,8 @@ XMLTokenEnum getTokenByChartType(
             else if( (bUseOldNames && aServiceName == "Stock") ||
                      (!bUseOldNames && aServiceName == "CandleStick"))
                 eResult = XML_STOCK;
+            else if (aServiceName == "GL3DBar")
+                eResult = XML_GL3DBAR;
         }
     }
 
diff --git a/xmloff/source/chart/SchXMLTools.hxx b/xmloff/source/chart/SchXMLTools.hxx
index 9c18303..0b6f49a 100644
--- a/xmloff/source/chart/SchXMLTools.hxx
+++ b/xmloff/source/chart/SchXMLTools.hxx
@@ -63,6 +63,7 @@ namespace SchXMLTools
         XML_CHART_CLASS_BAR,
         XML_CHART_CLASS_STOCK,
         XML_CHART_CLASS_BUBBLE,
+        XML_CHART_CLASS_GL3DBAR,
         XML_CHART_CLASS_ADDIN,
         XML_CHART_CLASS_UNKNOWN
     };
diff --git a/xmloff/source/core/xmltoken.cxx b/xmloff/source/core/xmltoken.cxx
index cedae88..e013431 100644
--- a/xmloff/source/core/xmltoken.cxx
+++ b/xmloff/source/core/xmltoken.cxx
@@ -904,6 +904,7 @@ namespace xmloff { namespace token {
         TOKEN( "gcd",                             XML_GCD ),
         TOKEN( "generator",                       XML_GENERATOR ),
         TOKEN( "geq",                             XML_GEQ ),
+        TOKEN( "gl3d-bar",                        XML_GL3DBAR ),
         TOKEN( "gouraud",                         XML_GOURAUD ),
         TOKEN( "gradient",                        XML_GRADIENT ),
         TOKEN( "angle",                           XML_GRADIENT_ANGLE ),
commit 05efb605b36ea340762ef1583b3aea6a6b5cdddb
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Mar 24 17:47:01 2014 -0400

    Add a new skeleton plotter for the GL3D bar chart.
    
    It plots absolutely nothing. It's just a place holder for now.
    
    Change-Id: I6eb9cc23481391b83f6946a8b49a6176c5b29cd7

diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk
index 63171f4..6dafd71 100644
--- a/chart2/Library_chartcore.mk
+++ b/chart2/Library_chartcore.mk
@@ -87,6 +87,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\
     chart2/source/view/charttypes/BubbleChart \
     chart2/source/view/charttypes/CandleStickChart \
     chart2/source/view/charttypes/CategoryPositionHelper \
+    chart2/source/view/charttypes/GL3DBarChart \
     chart2/source/view/charttypes/NetChart \
     chart2/source/view/charttypes/PieChart \
     chart2/source/view/charttypes/Splines \
diff --git a/chart2/source/chartcore.component b/chart2/source/chartcore.component
index 5df1a18..4029670 100644
--- a/chart2/source/chartcore.component
+++ b/chart2/source/chartcore.component
@@ -101,6 +101,10 @@
     <service name="com.sun.star.chart2.BubbleChartType"/>
     <service name="com.sun.star.chart2.ChartType"/>
   </implementation>
+  <implementation name="com.sun.star.comp.chart.GL3DBarChartType">
+    <service name="com.sun.star.chart2.GL3DBarChartType"/>
+    <service name="com.sun.star.chart2.ChartType"/>
+  </implementation>
   <implementation name="com.sun.star.comp.chart.CandleStickChartType">
     <service name="com.sun.star.beans.PropertySet"/>
     <service name="com.sun.star.chart2.CandleStickChartType"/>
diff --git a/chart2/source/model/template/GL3DBarChartType.cxx b/chart2/source/model/template/GL3DBarChartType.cxx
index 1dd889d..033c38c 100644
--- a/chart2/source/model/template/GL3DBarChartType.cxx
+++ b/chart2/source/model/template/GL3DBarChartType.cxx
@@ -15,7 +15,14 @@ using namespace com::sun::star;
 namespace chart {
 
 GL3DBarChartType::GL3DBarChartType( const uno::Reference<uno::XComponentContext>& xContext ) :
-    ChartType(xContext) {}
+    ChartType(xContext)
+{
+}
+
+GL3DBarChartType::GL3DBarChartType( const GL3DBarChartType& rOther ) :
+    ChartType(rOther)
+{
+}
 
 GL3DBarChartType::~GL3DBarChartType() {}
 
@@ -30,9 +37,6 @@ uno::Sequence<OUString> GL3DBarChartType::getSupportedServiceNames_Static()
     return aServices;
 }
 
-GL3DBarChartType::GL3DBarChartType( const GL3DBarChartType& rOther ) :
-    ChartType(rOther) {}
-
 OUString SAL_CALL GL3DBarChartType::getChartType()
         throw (::com::sun::star::uno::RuntimeException, std::exception)
 {
diff --git a/chart2/source/model/template/GL3DBarChartType.hxx b/chart2/source/model/template/GL3DBarChartType.hxx
index 4951050..ee9d0ab 100644
--- a/chart2/source/model/template/GL3DBarChartType.hxx
+++ b/chart2/source/model/template/GL3DBarChartType.hxx
@@ -22,7 +22,7 @@ namespace chart {
 class GL3DBarChartType : public ChartType
 {
 public:
-    GL3DBarChartType( const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>& xContext );
+    GL3DBarChartType( const css::uno::Reference<css::uno::XComponentContext>& xContext );
     virtual ~GL3DBarChartType();
 
     APPHELPER_XSERVICEINFO_DECL()
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
index 262828c..e65c8f5 100644
--- a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
@@ -8,6 +8,8 @@
  */
 
 #include "GL3DBarChartTypeTemplate.hxx"
+#include "GL3DBarChartType.hxx"
+
 #include <servicenames_charttypes.hxx>
 #include <macros.hxx>
 
@@ -15,6 +17,12 @@ using namespace com::sun::star;
 
 namespace chart {
 
+namespace {
+
+const OUString aServiceName("com.sun.star.chart2.BubbleChartTypeTemplate");
+
+}
+
 GL3DBarChartTypeTemplate::GL3DBarChartTypeTemplate(
     const uno::Reference<uno::XComponentContext>& xContext, const OUString& rServiceName ) :
     ChartTypeTemplate(xContext, rServiceName) {}
@@ -51,8 +59,13 @@ GL3DBarChartTypeTemplate::getChartTypeForNewSeries(
         uno::Reference<lang::XMultiServiceFactory> xFact(
             GetComponentContext()->getServiceManager(), uno::UNO_QUERY_THROW);
 
+#if 1
+        // I gave up trying to use UNO just to instantiate this little thing...
+        xResult.set(new GL3DBarChartType(GetComponentContext()));
+#else
+        // This never works for me.
         xResult.set(xFact->createInstance(CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR), uno::UNO_QUERY_THROW);
-
+#endif
         ChartTypeTemplate::copyPropertiesFromOldToNewCoordianteSystem(xOldChartTypes, xResult);
     }
     catch (const uno::Exception & ex)
@@ -68,6 +81,16 @@ sal_Bool GL3DBarChartTypeTemplate::supportsCategories()
     return false;
 }
 
+uno::Sequence<OUString> GL3DBarChartTypeTemplate::getSupportedServiceNames_Static()
+{
+    uno::Sequence<OUString> aServices(2);
+    aServices[0] = aServiceName;
+    aServices[1] = "com.sun.star.chart2.ChartTypeTemplate";
+    return aServices;
+}
+
+APPHELPER_XSERVICEINFO_IMPL(GL3DBarChartTypeTemplate, aServiceName);
+
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
index 47a7b06..56aa220 100644
--- a/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
@@ -20,6 +20,8 @@ namespace chart {
 class GL3DBarChartTypeTemplate : public ChartTypeTemplate
 {
 public:
+    APPHELPER_XSERVICEINFO_DECL()
+
     GL3DBarChartTypeTemplate(
         const css::uno::Reference<
             css::uno::XComponentContext>& xContext,
diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx
index 2443e20..2cc53b6 100644
--- a/chart2/source/view/charttypes/AreaChart.cxx
+++ b/chart2/source/view/charttypes/AreaChart.cxx
@@ -136,7 +136,7 @@ drawing::Direction3D AreaChart::getPreferredDiagramAspectRatio() const
     drawing::Direction3D aRet(1,-1,1);
     if( m_nDimension == 2 )
         aRet = drawing::Direction3D(-1,-1,-1);
-    else
+    else if (m_pPosHelper)
     {
         drawing::Direction3D aScale( m_pPosHelper->getScaledLogicWidth() );
         aRet.DirectionZ = aScale.DirectionZ*0.2;
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx
new file mode 100644
index 0000000..bd0250b
--- /dev/null
+++ b/chart2/source/view/charttypes/GL3DBarChart.cxx
@@ -0,0 +1,29 @@
+/* -*- 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 "GL3DBarChart.hxx"
+
+namespace chart {
+
+GL3DBarChart::GL3DBarChart( const css::uno::Reference<css::chart2::XChartType>& xChartTypeModel ) :
+    VSeriesPlotter(xChartTypeModel, 3, false)
+{
+}
+
+GL3DBarChart::~GL3DBarChart()
+{
+}
+
+void GL3DBarChart::createShapes()
+{
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/charttypes/GL3DBarChart.hxx b/chart2/source/view/charttypes/GL3DBarChart.hxx
new file mode 100644
index 0000000..d5ecf77
--- /dev/null
+++ b/chart2/source/view/charttypes/GL3DBarChart.hxx
@@ -0,0 +1,30 @@
+/* -*- 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/.
+ */
+
+#ifndef CHART2_GL3DBARCHART_HXX
+#define CHART2_GL3DBARCHART_HXX
+
+#include <VSeriesPlotter.hxx>
+
+namespace chart {
+
+class GL3DBarChart : public VSeriesPlotter
+{
+public:
+    GL3DBarChart( const css::uno::Reference<css::chart2::XChartType>& xChartTypeModel );
+    virtual ~GL3DBarChart();
+
+    virtual void createShapes();
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index 5202cc1..79e1e28 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -51,7 +51,7 @@
 #include "CandleStickChart.hxx"
 #include "BubbleChart.hxx"
 #include "NetChart.hxx"
-
+#include "GL3DBarChart.hxx"
 
 #include <com/sun/star/chart/ErrorBarStyle.hpp>
 #include <com/sun/star/chart/TimeUnit.hpp>
@@ -250,6 +250,9 @@ void VSeriesPlotter::addSeries( VDataSeries* pSeries, sal_Int32 zSlot, sal_Int32
 drawing::Direction3D VSeriesPlotter::getPreferredDiagramAspectRatio() const
 {
     drawing::Direction3D aRet(1.0,1.0,1.0);
+    if (!m_pPosHelper)
+        return aRet;
+
     drawing::Direction3D aScale( m_pPosHelper->getScaledLogicWidth() );
     aRet.DirectionZ = aScale.DirectionZ*0.2;
     if(aRet.DirectionZ>1.0)
@@ -803,6 +806,9 @@ void VSeriesPlotter::createErrorBar(
         if(nErrorBarStyle==::com::sun::star::chart::ErrorBarStyle::NONE)
             return;
 
+        if (!m_pPosHelper)
+            return;
+
         drawing::Position3D aUnscaledLogicPosition(rUnscaledLogicPosition);
         if(nErrorBarStyle==::com::sun::star::chart::ErrorBarStyle::STANDARD_DEVIATION)
         {
@@ -967,6 +973,9 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries,
     if(!xContainer.is())
         return;
 
+    if (!m_pPosHelper)
+        return;
+
     uno::Sequence< uno::Reference< XRegressionCurve > > aCurveList = xContainer->getRegressionCurves();
 
     for(sal_Int32 nN=0; nN<aCurveList.getLength(); nN++)
@@ -1882,7 +1891,7 @@ PlottingPositionHelper& VSeriesPlotter::getPlottingPositionHelper( sal_Int32 nAx
         {
             pRet = aPosIt->second;
         }
-        else
+        else if (m_pPosHelper)
         {
             tSecondaryValueScales::const_iterator aScaleIt = m_aSecondaryValueScales.find( nAxisIndex );
             if( aScaleIt != m_aSecondaryValueScales.end() )
@@ -2434,6 +2443,8 @@ VSeriesPlotter* VSeriesPlotter::createSeriesPlotter(
         pRet = new AreaChart(xChartTypeModel,nDimensionCount,false,true);
     else if( aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_BUBBLE) )
         pRet = new BubbleChart(xChartTypeModel,nDimensionCount);
+    else if (aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR))
+        pRet = new GL3DBarChart(xChartTypeModel);
     else if( aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_PIE) )
         pRet = new PieChart(xChartTypeModel,nDimensionCount, bExcludingPositioning );
     else if( aChartType.equalsIgnoreAsciiCase(CHART2_SERVICE_NAME_CHARTTYPE_NET) )
diff --git a/chart2/source/view/main/PlotterBase.cxx b/chart2/source/view/main/PlotterBase.cxx
index f38b570..c273899 100644
--- a/chart2/source/view/main/PlotterBase.cxx
+++ b/chart2/source/view/main/PlotterBase.cxx
@@ -60,12 +60,18 @@ PlotterBase::~PlotterBase()
 
 void PlotterBase::setScales( const std::vector< ExplicitScaleData >& rScales, bool bSwapXAndYAxis )
 {
+    if (!m_pPosHelper)
+        return;
+
     OSL_PRECOND(m_nDimension<=static_cast<sal_Int32>(rScales.size()),"Dimension of Plotter does not fit two dimension of given scale sequence");
     m_pPosHelper->setScales( rScales, bSwapXAndYAxis );
 }
 
 void PlotterBase::setTransformationSceneToScreen( const drawing::HomogenMatrix& rMatrix)
 {
+    if (!m_pPosHelper)
+        return;
+
     OSL_PRECOND(m_nDimension==2,"Set this transformation only in case of 2D");
     if(m_nDimension!=2)
         return;
commit b7c3e851465638d4416ca8837937946353561088
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Mar 24 11:54:58 2014 -0400

    Turn this into a regular method.
    
    Change-Id: Idb4dc17971cd37a4cdf99b2c02e61fca14cb3ce2

diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx
index e4141a8..0a10bae 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -829,6 +829,12 @@ IMPL_LINK_NOARG(ChartTypeTabPage, SelectSubTypeHdl)
 
 IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl)
 {
+    selectMainType();
+    return 0;
+}
+
+void ChartTypeTabPage::selectMainType()
+{
     ChartTypeParameter aParameter( this->getCurrentParamter() );
 
     if( m_pCurrentMainType )
@@ -855,7 +861,6 @@ IMPL_LINK_NOARG(ChartTypeTabPage, SelectMainTypeHdl)
         uno::Reference< beans::XPropertySet > xTemplateProps( this->getCurrentTemplate(), uno::UNO_QUERY );
         m_pCurrentMainType->fillExtraControls(aParameter,m_xChartModel,xTemplateProps);
     }
-    return 0;
 }
 
 void ChartTypeTabPage::showAllControls( ChartTypeDialogController& rTypeController )
diff --git a/chart2/source/controller/dialogs/tp_ChartType.hxx b/chart2/source/controller/dialogs/tp_ChartType.hxx
index 21ea308..ea46e2bb 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.hxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.hxx
@@ -72,6 +72,7 @@ protected:
     virtual void stateChanged( ChangingResource* pResource );
 
     void commitToModel( const ChartTypeParameter& rParameter );
+    void selectMainType();
 
     DECL_LINK( SelectMainTypeHdl, void* );
     DECL_LINK( SelectSubTypeHdl, void* );
commit 45c98588d0f67ee306b89e8666e53d05a9834e09
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Mon Mar 24 11:37:37 2014 -0400

    Crash prevention by checking for NULL.
    
    Change-Id: I10a0c2dcee123b884c563c3e6f83e218747e792a

diff --git a/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx
index 498bd26..13a7560 100644
--- a/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx
+++ b/chart2/source/controller/chartapiwrapper/WrappedSplineProperties.cxx
@@ -63,7 +63,9 @@ public:
         {
             try
             {
-                ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xChartTypePropertySet( aChartTypes[nN], ::com::sun::star::uno::UNO_QUERY );
+                uno::Reference<beans::XPropertySet> xChartTypePropertySet(aChartTypes[nN], uno::UNO_QUERY);
+                if (!xChartTypePropertySet.is())
+                    continue;
 
                 Any aSingleValue = this->convertInnerToOuterValue( xChartTypePropertySet->getPropertyValue(m_aOwnInnerName) );
                 PROPERTYTYPE aCurValue = PROPERTYTYPE();
commit be1152e0cc8286eaff05274c71843c3457948393
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Mar 21 16:21:58 2014 -0400

    List child type for GL3D bar chart type.
    
    For now there is only one child type.
    
    Change-Id: If39a3e75fdae62f0b20769c21e6a4e235ede941e

diff --git a/chart2/source/controller/dialogs/Bitmaps.hrc b/chart2/source/controller/dialogs/Bitmaps.hrc
index b5fc1e7..643ed3d 100644
--- a/chart2/source/controller/dialogs/Bitmaps.hrc
+++ b/chart2/source/controller/dialogs/Bitmaps.hrc
@@ -199,6 +199,8 @@
 // Bubble Chart Subtypes
 #define BMP_BUBBLE_1            (RID_APP_START + 88)
 
+// GL3D Bar Chart subtypes.
+#define BMP_GL3D_BAR_ROUNDRECT  (RID_APP_START + 106)
 
 //further Images:
 
diff --git a/chart2/source/controller/dialogs/Bitmaps.src b/chart2/source/controller/dialogs/Bitmaps.src
index c088844..49bd2f8 100644
--- a/chart2/source/controller/dialogs/Bitmaps.src
+++ b/chart2/source/controller/dialogs/Bitmaps.src
@@ -97,6 +97,12 @@ Bitmap BMP_BUBBLE_1
 {
     File = "bubble_52x60.png" ;
 };
+
+Bitmap BMP_GL3D_BAR_ROUNDRECT
+{
+    File = "gl3dbar_roundrect.png";
+};
+
 Bitmap BMP_AREAS_2D
 {
     File = "areas_52x60.png" ;
diff --git a/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
index 907c8f4..053cbe7 100644
--- a/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
+++ b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
@@ -12,6 +12,8 @@
 #include <Bitmaps.hrc>
 #include <ResId.hxx>
 
+#include <svtools/valueset.hxx>
+
 namespace chart {
 
 GL3DBarChartDialogController::GL3DBarChartDialogController() {}
@@ -36,6 +38,15 @@ GL3DBarChartDialogController::getTemplateMap() const
     return aMap;
 }
 
+void GL3DBarChartDialogController::fillSubTypeList(
+    ValueSet& rSubTypeList, const ChartTypeParameter& /*rParameter*/ )
+{
+    rSubTypeList.Clear();
+    rSubTypeList.InsertItem(1, Image(Bitmap(SchResId(BMP_GL3D_BAR_ROUNDRECT))));
+
+    rSubTypeList.SetItemText(1, SchResId(STR_GL3D_BAR).toString());
+}
+
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx b/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx
index 72aac01..e2f31e2 100644
--- a/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx
+++ b/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx
@@ -23,6 +23,8 @@ public:
     virtual OUString getName();
     virtual Image getImage();
     virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() const;
+
+    virtual void fillSubTypeList( ValueSet& rSubTypeList, const ChartTypeParameter& rParameter );
 };
 
 }
diff --git a/chart2/source/controller/dialogs/Strings_ChartTypes.src b/chart2/source/controller/dialogs/Strings_ChartTypes.src
index 3ece3a3..8871780 100644
--- a/chart2/source/controller/dialogs/Strings_ChartTypes.src
+++ b/chart2/source/controller/dialogs/Strings_ChartTypes.src
@@ -144,7 +144,12 @@ String STR_BUBBLE_1
 
 String STR_TYPE_GL3D_BAR
 {
-    Text [ en-US ] = "GL 3D Bar";
+    Text [ en-US ] = "GL3D Bar";
+};
+
+String STR_GL3D_BAR
+{
+    Text [ en-US ] = "GL3D Bar Chart";
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/inc/Strings.hrc b/chart2/source/inc/Strings.hrc
index f102f40..59de25d 100644
--- a/chart2/source/inc/Strings.hrc
+++ b/chart2/source/inc/Strings.hrc
@@ -65,6 +65,7 @@
 #define STR_BUBBLE_1                        (RID_APP_START + 283)
 
 #define STR_TYPE_GL3D_BAR                   (RID_APP_START + 127)
+#define STR_GL3D_BAR                        (RID_APP_START + 128)
 
 //additional strings
 #define STR_TEXT_SEPARATOR                  (RID_APP_START + 20)
diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx b/chart2/source/model/template/ChartTypeTemplate.cxx
index 748d40d..6cc13bc 100644
--- a/chart2/source/model/template/ChartTypeTemplate.cxx
+++ b/chart2/source/model/template/ChartTypeTemplate.cxx
@@ -179,7 +179,6 @@ uno::Reference< XDiagram > SAL_CALL ChartTypeTemplate::createDiagramByDataSource
 }
 
 sal_Bool SAL_CALL ChartTypeTemplate::supportsCategories()
-    throw (uno::RuntimeException, std::exception)
 {
     return sal_True;
 }
diff --git a/chart2/source/model/template/ChartTypeTemplate.hxx b/chart2/source/model/template/ChartTypeTemplate.hxx
index 19278a2..5f551b0 100644
--- a/chart2/source/model/template/ChartTypeTemplate.hxx
+++ b/chart2/source/model/template/ChartTypeTemplate.hxx
@@ -92,8 +92,8 @@ protected:
         const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArguments )
         throw (::com::sun::star::uno::RuntimeException, std::exception);
     /// denotes if the chart needs categories at the first scale
-    virtual sal_Bool SAL_CALL supportsCategories()
-        throw (::com::sun::star::uno::RuntimeException, std::exception);
+    virtual sal_Bool SAL_CALL supportsCategories();
+
     virtual void SAL_CALL changeDiagram(
         const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDiagram >& xDiagram )
         throw (::com::sun::star::uno::RuntimeException, std::exception);
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
index 306481e..262828c 100644
--- a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
@@ -8,6 +8,8 @@
  */
 
 #include "GL3DBarChartTypeTemplate.hxx"
+#include <servicenames_charttypes.hxx>
+#include <macros.hxx>
 
 using namespace com::sun::star;
 
@@ -21,14 +23,49 @@ GL3DBarChartTypeTemplate::~GL3DBarChartTypeTemplate() {}
 
 uno::Reference<chart2::XChartType> GL3DBarChartTypeTemplate::getChartTypeForIndex( sal_Int32 /*nChartTypeIndex*/ )
 {
-    return uno::Reference<chart2::XChartType>();
+    uno::Reference<chart2::XChartType> xResult;
+
+    try
+    {
+        uno::Reference<lang::XMultiServiceFactory> xFact(
+            GetComponentContext()->getServiceManager(), uno::UNO_QUERY_THROW);
+
+        xResult.set(xFact->createInstance(CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR), uno::UNO_QUERY_THROW);
+    }
+    catch (const uno::Exception & ex)
+    {
+        ASSERT_EXCEPTION( ex );
+    }
+
+    return xResult;
 }
 
 uno::Reference<chart2::XChartType>
 GL3DBarChartTypeTemplate::getChartTypeForNewSeries(
-    const uno::Sequence<uno::Reference<chart2::XChartType> >& /*xOldChartTypes*/ )
+    const uno::Sequence<uno::Reference<chart2::XChartType> >& xOldChartTypes )
+{
+    uno::Reference<chart2::XChartType> xResult;
+
+    try
+    {
+        uno::Reference<lang::XMultiServiceFactory> xFact(
+            GetComponentContext()->getServiceManager(), uno::UNO_QUERY_THROW);
+
+        xResult.set(xFact->createInstance(CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR), uno::UNO_QUERY_THROW);
+
+        ChartTypeTemplate::copyPropertiesFromOldToNewCoordianteSystem(xOldChartTypes, xResult);
+    }
+    catch (const uno::Exception & ex)
+    {
+        ASSERT_EXCEPTION( ex );
+    }
+
+    return xResult;
+}
+
+sal_Bool GL3DBarChartTypeTemplate::supportsCategories()
 {
-    return uno::Reference<chart2::XChartType>();
+    return false;
 }
 
 }
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
index 2574329..47a7b06 100644
--- a/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
@@ -34,6 +34,8 @@ public:
     virtual css::uno::Reference<css::chart2::XChartType> SAL_CALL
         getChartTypeForNewSeries(
             const css::uno::Sequence<css::uno::Reference<css::chart2::XChartType> >& xOldChartTypes );
+
+    virtual sal_Bool SAL_CALL supportsCategories();
 };
 
 }
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index 944b31a..5202cc1 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -2416,6 +2416,9 @@ VSeriesPlotter* VSeriesPlotter::createSeriesPlotter(
     , sal_Int32 nDimensionCount
     , bool bExcludingPositioning )
 {
+    if (!xChartTypeModel.is())
+        return NULL;
+
     OUString aChartType = xChartTypeModel->getChartType();
 
     VSeriesPlotter* pRet=NULL;
diff --git a/icon-themes/galaxy/chart2/res/gl3dbar_roundrect.png b/icon-themes/galaxy/chart2/res/gl3dbar_roundrect.png
new file mode 100644
index 0000000..729bd3e
Binary files /dev/null and b/icon-themes/galaxy/chart2/res/gl3dbar_roundrect.png differ
commit 56aaa39ff83962286fb7b627d847914f8144b750
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Fri Mar 21 10:55:06 2014 -0400

    Skeleton template class for GL3D bar chart type.
    
    Still very much empty.  It needs to be filled with sub-categories.
    
    Change-Id: Iad7ad34efb264025541b585a92ee2ea7b8fff56f

diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk
index 2e09fe3..63171f4 100644
--- a/chart2/Library_chartcore.mk
+++ b/chart2/Library_chartcore.mk
@@ -154,6 +154,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\
     chart2/source/model/template/DataInterpreter \
     chart2/source/model/template/FilledNetChartType \
     chart2/source/model/template/GL3DBarChartType \
+    chart2/source/model/template/GL3DBarChartTypeTemplate \
     chart2/source/model/template/LineChartType \
     chart2/source/model/template/LineChartTypeTemplate \
     chart2/source/model/template/NetChartType \
diff --git a/chart2/source/model/template/ChartTypeManager.cxx b/chart2/source/model/template/ChartTypeManager.cxx
index e68744c..49775f9 100644
--- a/chart2/source/model/template/ChartTypeManager.cxx
+++ b/chart2/source/model/template/ChartTypeManager.cxx
@@ -33,6 +33,7 @@
 #include "StockChartTypeTemplate.hxx"
 #include "NetChartTypeTemplate.hxx"
 #include "BubbleChartTypeTemplate.hxx"
+#include "GL3DBarChartTypeTemplate.hxx"
 #include <cppuhelper/component_context.hxx>
 #include <comphelper/InlineContainer.hxx>
 #include <com/sun/star/container/XContentEnumerationAccess.hpp>
@@ -121,6 +122,7 @@ enum TemplateId
     TEMPLATE_STOCKVOLUMELOWHIGHCLOSE,
     TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE,
     TEMPLATE_BUBBLE,
+    TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE,
 //    TEMPLATE_SURFACE,
 //     TEMPLATE_ADDIN,
     TEMPLATE_NOT_FOUND = 0xffff
@@ -196,6 +198,7 @@ const tTemplateMapType & lcl_DefaultChartTypeMap()
         ( "com.sun.star.chart2.template.StockVolumeLowHighClose",        TEMPLATE_STOCKVOLUMELOWHIGHCLOSE )
         ( "com.sun.star.chart2.template.StockVolumeOpenLowHighClose",    TEMPLATE_STOCKVOLUMEOPENLOWHIGHCLOSE )
         ( "com.sun.star.chart2.template.Bubble",                         TEMPLATE_BUBBLE )
+        ( "com.sun.star.chart2.template.GL3DBarRoundedRectangle",        TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE )
 //      ( "com.sun.star.chart2.template.Surface",                        TEMPLATE_SURFACE )
 //      ( "com.sun.star.chart2.template.Addin",                          TEMPLATE_ADDIN )
         );
@@ -529,6 +532,10 @@ uno::Reference< uno::XInterface > SAL_CALL ChartTypeManager::createInstance(
                 xTemplate.set( new BubbleChartTypeTemplate( m_xContext, aServiceSpecifier ));
                 break;
 
+            case TEMPLATE_GL3DBAR_ROUNDED_RECTANGLE:
+                xTemplate.set(new GL3DBarChartTypeTemplate(m_xContext, aServiceSpecifier));
+                break;
+
 //            case TEMPLATE_SURFACE:
 //            case TEMPLATE_ADDIN:
 //               break;
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
new file mode 100644
index 0000000..306481e
--- /dev/null
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.cxx
@@ -0,0 +1,36 @@
+/* -*- 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 "GL3DBarChartTypeTemplate.hxx"
+
+using namespace com::sun::star;
+
+namespace chart {
+
+GL3DBarChartTypeTemplate::GL3DBarChartTypeTemplate(
+    const uno::Reference<uno::XComponentContext>& xContext, const OUString& rServiceName ) :
+    ChartTypeTemplate(xContext, rServiceName) {}
+
+GL3DBarChartTypeTemplate::~GL3DBarChartTypeTemplate() {}
+
+uno::Reference<chart2::XChartType> GL3DBarChartTypeTemplate::getChartTypeForIndex( sal_Int32 /*nChartTypeIndex*/ )
+{
+    return uno::Reference<chart2::XChartType>();
+}
+
+uno::Reference<chart2::XChartType>
+GL3DBarChartTypeTemplate::getChartTypeForNewSeries(
+    const uno::Sequence<uno::Reference<chart2::XChartType> >& /*xOldChartTypes*/ )
+{
+    return uno::Reference<chart2::XChartType>();
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
new file mode 100644
index 0000000..2574329
--- /dev/null
+++ b/chart2/source/model/template/GL3DBarChartTypeTemplate.hxx
@@ -0,0 +1,43 @@
+/* -*- 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/.
+ */
+
+#ifndef CHART2_GL3DBARCHARTTYPETEMPLATE_HXX
+#define CHART2_GL3DBARCHARTTYPETEMPLATE_HXX
+
+#include <MutexContainer.hxx>
+#include <ChartTypeTemplate.hxx>
+#include <OPropertySet.hxx>
+#include <ServiceMacros.hxx>
+
+namespace chart {
+
+class GL3DBarChartTypeTemplate : public ChartTypeTemplate
+{
+public:
+    GL3DBarChartTypeTemplate(
+        const css::uno::Reference<
+            css::uno::XComponentContext>& xContext,
+        const OUString& rServiceName );
+
+    virtual ~GL3DBarChartTypeTemplate();
+
+    virtual css::uno::Reference<css::chart2::XChartType> getChartTypeForIndex( sal_Int32 nChartTypeIndex );
+
+    // XChartTypeTemplate
+
+    virtual css::uno::Reference<css::chart2::XChartType> SAL_CALL
+        getChartTypeForNewSeries(
+            const css::uno::Sequence<css::uno::Reference<css::chart2::XChartType> >& xOldChartTypes );
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx
index a683903..d21b6df 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -112,7 +112,7 @@ DiagramHelper::tTemplateWithServiceName
                 Reference< XChartTypeTemplate > xTempl(
                     xChartTypeManager->createInstance( aServiceNames[ i ] ), uno::UNO_QUERY_THROW );
 
-                if( xTempl->matchesTemplate( xDiagram, sal_True ))
+                if (xTempl.is() && xTempl->matchesTemplate(xDiagram, true))
                 {
                     aResult.first = xTempl;
                     aResult.second = aServiceNames[ i ];
commit e3ec81a1d3f66b1a76aa865c1be988051db3e25d
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Mar 20 20:53:42 2014 -0400

    Image for the new chart type.
    
    Change-Id: Idba626c947cc7875bdcdf13677f2161c4d5b68c5

diff --git a/icon-themes/galaxy/chart2/res/typegl3dbar_16.png b/icon-themes/galaxy/chart2/res/typegl3dbar_16.png
new file mode 100644
index 0000000..ada848c
Binary files /dev/null and b/icon-themes/galaxy/chart2/res/typegl3dbar_16.png differ
commit be89276e63a29f4e066c7991cdecc97c20794e7c
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Mar 20 20:52:11 2014 -0400

    Add a new chart type "GL 3D Bar" (working name).
    
    Change-Id: I0b0a65bf4f9365a8d522e3c439afe19797b2fdd5

diff --git a/chart2/Library_chartcontroller.mk b/chart2/Library_chartcontroller.mk
index 6a4907f..86c2a04 100644
--- a/chart2/Library_chartcontroller.mk
+++ b/chart2/Library_chartcontroller.mk
@@ -87,6 +87,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcontroller,\
     chart2/source/controller/chartapiwrapper/WrappedTextRotationProperty \
     chart2/source/controller/dialogs/ChangingResource \
     chart2/source/controller/dialogs/ChartTypeDialogController \
+    chart2/source/controller/dialogs/GL3DBarChartDialogController \
     chart2/source/controller/dialogs/DataBrowser \
     chart2/source/controller/dialogs/DataBrowserModel \
     chart2/source/controller/dialogs/DialogModel \
diff --git a/chart2/source/controller/dialogs/Bitmaps.hrc b/chart2/source/controller/dialogs/Bitmaps.hrc
index 6f99eff..b5fc1e7 100644
--- a/chart2/source/controller/dialogs/Bitmaps.hrc
+++ b/chart2/source/controller/dialogs/Bitmaps.hrc
@@ -39,10 +39,11 @@
 #define IMG_TYPE_NET    (RID_APP_START + 8)
 #define IMG_TYPE_STOCK  (RID_APP_START + 9)
 #define IMG_TYPE_COLUMN_LINE  (RID_APP_START + 10)
-#define IMG_STEP_START  (RID_APP_START + 11)
-#define IMG_STEP_END    (RID_APP_START + 12)
-#define IMG_STEP_CENTER_X (RID_APP_START + 13)
-#define IMG_STEP_CENTER_Y (RID_APP_START + 14)
+#define IMG_TYPE_GL3D_BAR (RID_APP_START + 11)
+#define IMG_STEP_START  (RID_APP_START + 12)
+#define IMG_STEP_END    (RID_APP_START + 13)
+#define IMG_STEP_CENTER_X (RID_APP_START + 14)
+#define IMG_STEP_CENTER_Y (RID_APP_START + 15)
 
 
 //Chart Subtypes
diff --git a/chart2/source/controller/dialogs/Bitmaps.src b/chart2/source/controller/dialogs/Bitmaps.src
index 802de33..c088844 100644
--- a/chart2/source/controller/dialogs/Bitmaps.src
+++ b/chart2/source/controller/dialogs/Bitmaps.src
@@ -68,6 +68,11 @@ Image IMG_TYPE_BUBBLE
     ImageBitmap = Bitmap { File = "typebubble_16.png" ; };
     MaskColor = STD_MASKCOLOR;
 };
+Image IMG_TYPE_GL3D_BAR
+{
+    ImageBitmap = Bitmap { File = "typegl3dbar_16.png" ; };
+    MaskColor = STD_MASKCOLOR;
+};
 Image IMG_STEP_START
 {
     ImageBitmap = Bitmap { File = "step_start_30.png" ; };
diff --git a/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
new file mode 100644
index 0000000..907c8f4
--- /dev/null
+++ b/chart2/source/controller/dialogs/GL3DBarChartDialogController.cxx
@@ -0,0 +1,41 @@
+/* -*- 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 "GL3DBarChartDialogController.hxx"
+#include <Strings.hrc>
+#include <Bitmaps.hrc>
+#include <ResId.hxx>
+
+namespace chart {
+
+GL3DBarChartDialogController::GL3DBarChartDialogController() {}
+
+GL3DBarChartDialogController::~GL3DBarChartDialogController() {}
+
+OUString GL3DBarChartDialogController::getName()
+{
+    return SchResId(STR_TYPE_GL3D_BAR).toString();
+}
+
+Image GL3DBarChartDialogController::getImage()
+{
+    return Image(SchResId(IMG_TYPE_GL3D_BAR));
+}
+
+const tTemplateServiceChartTypeParameterMap&
+GL3DBarChartDialogController::getTemplateMap() const
+{
+    static tTemplateServiceChartTypeParameterMap aMap(
+        "com.sun.star.chart2.template.GL3DBarRoundedRectangle", ChartTypeParameter(1));
+    return aMap;
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx b/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx
new file mode 100644
index 0000000..72aac01
--- /dev/null
+++ b/chart2/source/controller/dialogs/GL3DBarChartDialogController.hxx
@@ -0,0 +1,32 @@
+/* -*- 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/.
+ */
+
+#ifndef INCLUDED_CHART2_GL3DBARCHARTDIALOGCONTROLLER_HXX
+#define INCLUDED_CHART2_GL3DBARCHARTDIALOGCONTROLLER_HXX
+
+#include "ChartTypeDialogController.hxx"
+
+namespace chart {
+
+class GL3DBarChartDialogController : public ChartTypeDialogController
+{
+public:
+    GL3DBarChartDialogController();
+    virtual ~GL3DBarChartDialogController();
+
+    virtual OUString getName();
+    virtual Image getImage();
+    virtual const tTemplateServiceChartTypeParameterMap& getTemplateMap() const;
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/dialogs/Strings_ChartTypes.src b/chart2/source/controller/dialogs/Strings_ChartTypes.src
index 86ed516..3ece3a3 100644
--- a/chart2/source/controller/dialogs/Strings_ChartTypes.src
+++ b/chart2/source/controller/dialogs/Strings_ChartTypes.src
@@ -142,6 +142,9 @@ String STR_BUBBLE_1
     Text [ en-US ] = "Bubble Chart" ;
 };
 
-
+String STR_TYPE_GL3D_BAR
+{
+    Text [ en-US ] = "GL 3D Bar";
+};
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx b/chart2/source/controller/dialogs/tp_ChartType.cxx
index d010648..e4141a8 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -25,6 +25,7 @@
 #include "res_BarGeometry.hxx"
 #include "ControllerLockGuard.hxx"
 #include "macros.hxx"
+#include "GL3DBarChartDialogController.hxx"
 
 #include <svtools/controldims.hrc>
 
@@ -726,6 +727,7 @@ ChartTypeTabPage::ChartTypeTabPage(Window* pParent
         m_aChartTypeDialogControllerList.push_back(new StockChartDialogController() );
     }
     m_aChartTypeDialogControllerList.push_back(new CombiColumnLineChartDialogController() );
+    m_aChartTypeDialogControllerList.push_back(new GL3DBarChartDialogController());
 
     ::std::vector< ChartTypeDialogController* >::const_iterator       aIter = m_aChartTypeDialogControllerList.begin();
     const ::std::vector< ChartTypeDialogController* >::const_iterator aEnd  = m_aChartTypeDialogControllerList.end();
diff --git a/chart2/source/inc/Strings.hrc b/chart2/source/inc/Strings.hrc
index 15c1ca8..f102f40 100644
--- a/chart2/source/inc/Strings.hrc
+++ b/chart2/source/inc/Strings.hrc
@@ -64,8 +64,10 @@
 #define STR_TYPE_BUBBLE                     (RID_APP_START + 282)
 #define STR_BUBBLE_1                        (RID_APP_START + 283)
 
+#define STR_TYPE_GL3D_BAR                   (RID_APP_START + 127)
+
 //additional strings
-#define STR_TEXT_SEPARATOR                   (RID_APP_START + 20)
+#define STR_TEXT_SEPARATOR                  (RID_APP_START + 20)
 
 //SchStatisticTabPage and SchDataStatisticsDlg
 //see Strings_Statistic.src
@@ -94,7 +96,7 @@
 #define STR_INVALID_TIME_UNIT               (RID_APP_START + 292)
 
 
-//for range didalog
+//for range dialog
 #define STR_DATA_ROLE_LABEL                 (RID_APP_START + 241)
 #define STR_DATA_ROLE_X                     (RID_APP_START + 242)
 #define STR_DATA_ROLE_Y                     (RID_APP_START + 243)
@@ -272,7 +274,6 @@
 #define STR_BUTTON_UP                       (RID_APP_START + 500)
 #define STR_BUTTON_DOWN                     (RID_APP_START + 501)
 
-
 // ids must not exceed RID_APP_START + 499
 // ids >= RID_APP_START + 500 are defined in glob.hrc
 
commit 349a5b72bf2bc627a79967d61ff7dc07a4ac90b2
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Thu Mar 20 16:30:25 2014 -0400

    Initial skeleton class for the new chart type. Still very much empty.
    
    Change-Id: I5e9eaeb9337d51f59f800f8e676b8bc83b80df70

diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk
index de4c888..2e09fe3 100644
--- a/chart2/Library_chartcore.mk
+++ b/chart2/Library_chartcore.mk
@@ -153,6 +153,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\
     chart2/source/model/template/ColumnLineDataInterpreter \
     chart2/source/model/template/DataInterpreter \
     chart2/source/model/template/FilledNetChartType \
+    chart2/source/model/template/GL3DBarChartType \
     chart2/source/model/template/LineChartType \
     chart2/source/model/template/LineChartTypeTemplate \
     chart2/source/model/template/NetChartType \
diff --git a/chart2/source/inc/servicenames_charttypes.hxx b/chart2/source/inc/servicenames_charttypes.hxx
index 321ba73..20f078c 100644
--- a/chart2/source/inc/servicenames_charttypes.hxx
+++ b/chart2/source/inc/servicenames_charttypes.hxx
@@ -19,8 +19,7 @@
 #ifndef INCLUDED_CHART2_SOURCE_INC_SERVICENAMES_CHARTTYPES_HXX
 #define INCLUDED_CHART2_SOURCE_INC_SERVICENAMES_CHARTTYPES_HXX
 
-namespace chart
-{
+namespace chart {
 
 #define CHART2_SERVICE_NAME_CHARTTYPE_AREA OUString( "com.sun.star.chart2.AreaChartType" )
 #define CHART2_SERVICE_NAME_CHARTTYPE_BAR OUString( "com.sun.star.chart2.BarChartType" )
@@ -32,8 +31,10 @@ namespace chart
 #define CHART2_SERVICE_NAME_CHARTTYPE_FILLED_NET OUString( "com.sun.star.chart2.FilledNetChartType" )
 #define CHART2_SERVICE_NAME_CHARTTYPE_CANDLESTICK OUString( "com.sun.star.chart2.CandleStickChartType" )
 #define CHART2_SERVICE_NAME_CHARTTYPE_BUBBLE OUString( "com.sun.star.chart2.BubbleChartType" )
+#define CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR OUString( "com.sun.star.chart2.GL3DBarChartType" )
 
 } //namespace chart
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/model/template/GL3DBarChartType.cxx b/chart2/source/model/template/GL3DBarChartType.cxx
new file mode 100644
index 0000000..1dd889d
--- /dev/null
+++ b/chart2/source/model/template/GL3DBarChartType.cxx
@@ -0,0 +1,51 @@
+/* -*- 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 "GL3DBarChartType.hxx"
+#include <servicenames_charttypes.hxx>
+
+using namespace com::sun::star;
+
+namespace chart {
+
+GL3DBarChartType::GL3DBarChartType( const uno::Reference<uno::XComponentContext>& xContext ) :
+    ChartType(xContext) {}
+
+GL3DBarChartType::~GL3DBarChartType() {}
+
+APPHELPER_XSERVICEINFO_IMPL(
+    GL3DBarChartType, OUString("com.sun.star.comp.chart.GL3DBarChartType") );
+
+uno::Sequence<OUString> GL3DBarChartType::getSupportedServiceNames_Static()
+{
+    uno::Sequence<OUString> aServices(2);
+    aServices[0] = CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR;
+    aServices[1] = "com.sun.star.chart2.ChartType";
+    return aServices;
+}
+
+GL3DBarChartType::GL3DBarChartType( const GL3DBarChartType& rOther ) :
+    ChartType(rOther) {}
+
+OUString SAL_CALL GL3DBarChartType::getChartType()
+        throw (::com::sun::star::uno::RuntimeException, std::exception)
+{
+    return CHART2_SERVICE_NAME_CHARTTYPE_GL3DBAR;
+}
+
+com::sun::star::uno::Reference<com::sun::star::util::XCloneable>
+GL3DBarChartType::createClone()
+    throw (com::sun::star::uno::RuntimeException, std::exception)
+{
+    return uno::Reference<util::XCloneable>(new GL3DBarChartType(*this));
+}
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/model/template/GL3DBarChartType.hxx b/chart2/source/model/template/GL3DBarChartType.hxx
new file mode 100644
index 0000000..4951050
--- /dev/null
+++ b/chart2/source/model/template/GL3DBarChartType.hxx
@@ -0,0 +1,47 @@
+/* -*- 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/.
+ */
+
+#ifndef INCLUDED_CHART2_GL3DBARCHARTTYPE_HXX
+#define INCLUDED_CHART2_GL3DBARCHARTTYPE_HXX
+
+#include "ChartType.hxx"
+#include "ServiceMacros.hxx"
+
+namespace chart {
+
+/**
+ * Chart type that represents 3 dimensional data content in 3D space using
+ * OpenGL.
+ */
+class GL3DBarChartType : public ChartType
+{
+public:
+    GL3DBarChartType( const com::sun::star::uno::Reference<com::sun::star::uno::XComponentContext>& xContext );
+    virtual ~GL3DBarChartType();
+
+    APPHELPER_XSERVICEINFO_DECL()
+
+    APPHELPER_SERVICE_FACTORY_HELPER( GL3DBarChartType )
+
+protected:
+    GL3DBarChartType( const GL3DBarChartType& rOther );
+
+    virtual OUString SAL_CALL getChartType()
+        throw (com::sun::star::uno::RuntimeException, std::exception);
+
+    virtual com::sun::star::uno::Reference<com::sun::star::util::XCloneable>
+        SAL_CALL createClone()
+            throw (com::sun::star::uno::RuntimeException, std::exception);
+};
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 003a27a14d5cf65fe0b528b6d6015e37a64dbb8e
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Tue Mar 25 22:34:18 2014 -0400

    fdo#74322: Handle moving of named ranges correctly.
    
    But named ranges are adjusted if and only if the references are absolute.
    
    Change-Id: I6c5287b413884b045f1a798c6c6683aa17863f24

diff --git a/sc/inc/tokenarray.hxx b/sc/inc/tokenarray.hxx
index eb68997..e8b96cc 100644
--- a/sc/inc/tokenarray.hxx
+++ b/sc/inc/tokenarray.hxx
@@ -163,6 +163,8 @@ public:
      */
     sc::RefUpdateResult AdjustReferenceInName( const sc::RefUpdateContext& rCxt, const ScAddress& rPos );
 
+    sc::RefUpdateResult AdjustReferenceInMovedName( const sc::RefUpdateContext& rCxt, const ScAddress& rPos );
+
     /**
      * Adjust all references on sheet deletion.
      *
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 5c196a0..e08766e 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -2537,8 +2537,21 @@ class UpdateRefOnNonCopy : std::unary_function<FormulaGroup, void>
             bRecalcOnMove = aPos != aOldPos;
 
         sc::RefUpdateResult aRes = pCode->AdjustReferenceOnMove(*mpCxt, aOldPos, aPos);
-        if (aRes.mbReferenceModified || bRecalcOnMove)
+
+        if (aRes.mbReferenceModified || aRes.mbNameModified || bRecalcOnMove)
         {
+            sc::AutoCalcSwitch(mpCxt->mrDoc, false);
+
+            if (aRes.mbNameModified)
+            {
+                // We need to re-compile the token array when a range name is
+                // modified, to correctly reflect the new references in the
+                // name.
+                ScCompiler aComp(&mpCxt->mrDoc, aPos, *pCode);
+                aComp.SetGrammar(mpCxt->mrDoc.GetGrammar());
+                aComp.CompileTokenArray();
+            }
+
             // Perform end-listening, start-listening, and dirtying on all
             // formula cells in the group.
 
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 320a2c2..b4b3ddf 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2833,7 +2833,7 @@ bool ScFormulaCell::UpdateReferenceOnMove(
     {
         // Update cell or range references.
         sc::RefUpdateResult aRes = pCode->AdjustReferenceOnMove(rCxt, aOldPos, aPos);
-        bRefModified = aRes.mbReferenceModified;
+        bRefModified = aRes.mbReferenceModified || aRes.mbNameModified;
         bValChanged = aRes.mbValueChanged;
     }
 
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index f1982bd..e2a0fdb 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -2634,6 +2634,19 @@ bool expandRangeByEdge( const sc::RefUpdateContext& rCxt, ScRange& rRefRange, co
     return false;
 }
 
+bool isNameModified( const sc::UpdatedRangeNames& rUpdatedNames, SCTAB nOldTab, const formula::FormulaToken& rToken )
+{
+    if (rToken.GetOpCode() != ocName)
+        return false;
+
+    SCTAB nTab = -1;
+    if (!rToken.IsGlobal())
+        nTab = nOldTab;
+
+    // Check if this named expression has been modified.
+    return rUpdatedNames.isNameUpdated(nTab, rToken.GetIndex());
+}
+
 }
 
 sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateContext& rCxt, const ScAddress& rOldPos )
@@ -2772,17 +2785,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnShift( const sc::RefUpdateCon
             break;
             case svIndex:
             {
-                const formula::FormulaToken* pToken = *p;
-                if (pToken->GetOpCode() == ocName)
-                {
-                    SCTAB nTab = -1;
-                    if (!pToken->IsGlobal())
-                        nTab = rOldPos.Tab();
-
-                    // Check if this named expression has been modified.
-                    if (rCxt.maUpdatedNames.isNameUpdated(nTab, pToken->GetIndex()))
-                        aRes.mbNameModified = true;
-                }
+                if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+                    aRes.mbNameModified = true;
             }
             break;
             default:
@@ -2837,6 +2841,12 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove(
                 rRef.SetRange(aAbs, rNewPos);
             }
             break;
+            case svIndex:
+            {
+                if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+                    aRes.mbNameModified = true;
+            }
+            break;
             default:
                 ;
         }
@@ -2967,6 +2977,9 @@ bool adjustDoubleRefInName(
 sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
     const sc::RefUpdateContext& rCxt, const ScAddress& rPos )
 {
+    if (rCxt.meMode == URM_MOVE)
+        return AdjustReferenceInMovedName(rCxt, rPos);
+
     sc::RefUpdateResult aRes;
 
     FormulaToken** p = pCode;
@@ -3029,6 +3042,67 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceInName(
     return aRes;
 }
 
+sc::RefUpdateResult ScTokenArray::AdjustReferenceInMovedName( const sc::RefUpdateContext& rCxt, const ScAddress& rPos )
+{
+    // When moving, the range is the destination range.
+    ScRange aOldRange = rCxt.maRange;
+    aOldRange.Move(-rCxt.mnColDelta, -rCxt.mnRowDelta, -rCxt.mnTabDelta);
+
+    // In a named expression, we'll move the reference only when the reference
+    // is entirely absolute.
+
+    sc::RefUpdateResult aRes;
+
+
+    FormulaToken** p = pCode;
+    FormulaToken** pEnd = p + static_cast<size_t>(nLen);
+    for (; p != pEnd; ++p)
+    {
+        switch ((*p)->GetType())
+        {
+            case svSingleRef:
+            {
+                ScToken* pToken = static_cast<ScToken*>(*p);
+                ScSingleRefData& rRef = pToken->GetSingleRef();
+                if (rRef.IsColRel() || rRef.IsRowRel() || rRef.IsTabRel())
+                    continue;
+
+                ScAddress aAbs = rRef.toAbs(rPos);
+                if (aOldRange.In(aAbs))
+                {
+                    aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
+                    aRes.mbReferenceModified = true;
+                }
+
+                rRef.SetAddress(aAbs, rPos);
+            }
+            break;
+            case svDoubleRef:
+            {
+                ScToken* pToken = static_cast<ScToken*>(*p);
+                ScComplexRefData& rRef = pToken->GetDoubleRef();
+                if (rRef.Ref1.IsColRel() || rRef.Ref1.IsRowRel() || rRef.Ref1.IsTabRel() ||
+                    rRef.Ref2.IsColRel() || rRef.Ref2.IsRowRel() || rRef.Ref2.IsTabRel())
+                    continue;
+
+                ScRange aAbs = rRef.toAbs(rPos);
+                if (aOldRange.In(aAbs))
+                {
+                    aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
+                    aRes.mbReferenceModified = true;
+                }
+
+                rRef.SetRange(aAbs, rPos);
+            }
+            break;
+            default:
+                ;
+        }
+    }
+
+    return aRes;
+}
+
 namespace {
 
 bool adjustSingleRefOnDeletedTab( ScSingleRefData& rRef, SCTAB nDelPos, SCTAB nSheets, const ScAddress& rOldPos, const ScAddress& rNewPos )
@@ -3112,17 +3186,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnDeletedTab( sc::RefUpdateDele
             break;
             case svIndex:
             {
-                const formula::FormulaToken* pToken = *p;
-                if (pToken->GetOpCode() == ocName)
-                {
-                    SCTAB nTab = -1;
-                    if (!pToken->IsGlobal())
-                        nTab = rOldPos.Tab();
-
-                    // Check if this named expression has been modified.
-                    if (rCxt.maUpdatedNames.isNameUpdated(nTab, pToken->GetIndex()))
-                        aRes.mbNameModified = true;
-                }
+                if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+                    aRes.mbNameModified = true;
             }
             break;
             default:
@@ -3165,17 +3230,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnInsertedTab( sc::RefUpdateIns
             break;
             case svIndex:
             {
-                const formula::FormulaToken* pToken = *p;
-                if (pToken->GetOpCode() == ocName)
-                {
-                    SCTAB nTab = -1;
-                    if (!pToken->IsGlobal())
-                        nTab = rOldPos.Tab();
-
-                    // Check if this named expression has been modified.
-                    if (rCxt.maUpdatedNames.isNameUpdated(nTab, pToken->GetIndex()))
-                        aRes.mbNameModified = true;
-                }
+                if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+                    aRes.mbNameModified = true;
             }
             break;
             default:
@@ -3239,17 +3295,8 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMovedTab( sc::RefUpdateMoveTa
             break;
             case svIndex:
             {
-                const formula::FormulaToken* pToken = *p;
-                if (pToken->GetOpCode() == ocName)
-                {
-                    SCTAB nTab = -1;
-                    if (!pToken->IsGlobal())
-                        nTab = rOldPos.Tab();
-
-                    // Check if this named expression has been modified.
-                    if (rCxt.maUpdatedNames.isNameUpdated(nTab, pToken->GetIndex()))
-                        aRes.mbNameModified = true;
-                }
+                if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+                    aRes.mbNameModified = true;
             }
             break;
             default:
commit 3edc49d11765372fa54c52b71b49bf52675f4dda
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Tue Mar 25 22:33:03 2014 -0400

    fdo#74322: Write unit test for this first.
    
    Change-Id: If16a93ee371e9a4e0d0992fd0a62a4623fc284ab

diff --git a/sc/qa/unit/ucalc.hxx b/sc/qa/unit/ucalc.hxx
index 7c1c67c..9579918 100644
--- a/sc/qa/unit/ucalc.hxx
+++ b/sc/qa/unit/ucalc.hxx
@@ -121,6 +121,7 @@ public:
     void testFormulaRefUpdateMove();
     void testFormulaRefUpdateMoveUndo();
     void testFormulaRefUpdateNamedExpression();
+    void testFormulaRefUpdateNamedExpressionMove();
     void testFormulaRefUpdateNamedExpressionExpandRef();
     void testMultipleOperations();
     void testFuncCOLUMN();
@@ -367,6 +368,7 @@ public:
     CPPUNIT_TEST(testFormulaRefUpdateMove);
     CPPUNIT_TEST(testFormulaRefUpdateMoveUndo);
     CPPUNIT_TEST(testFormulaRefUpdateNamedExpression);
+    CPPUNIT_TEST(testFormulaRefUpdateNamedExpressionMove);
     CPPUNIT_TEST(testFormulaRefUpdateNamedExpressionExpandRef);
     CPPUNIT_TEST(testMultipleOperations);
     CPPUNIT_TEST(testFuncCOLUMN);
diff --git a/sc/qa/unit/ucalc_formula.cxx b/sc/qa/unit/ucalc_formula.cxx
index 718ece7..4544ac6 100644
--- a/sc/qa/unit/ucalc_formula.cxx
+++ b/sc/qa/unit/ucalc_formula.cxx
@@ -1818,6 +1818,86 @@ void Test::testFormulaRefUpdateNamedExpression()
     m_pDoc->DeleteTab(0);
 }
 
+void Test::testFormulaRefUpdateNamedExpressionMove()
+{
+    sc::AutoCalcSwitch aACSwitch(*m_pDoc, true); // turn auto calc on.
+
+    m_pDoc->InsertTab(0, "Test");
+
+    // Set values to B2:B4.
+    m_pDoc->SetValue(ScAddress(1,1,0), 1.0);
+    m_pDoc->SetValue(ScAddress(1,2,0), 2.0);
+    m_pDoc->SetValue(ScAddress(1,3,0), 3.0);
+
+    // Set named range for B2:B4.
+    bool bInserted = m_pDoc->InsertNewRangeName("MyRange", ScAddress(0,0,0), "$Test.$B$2:$B$4");
+    CPPUNIT_ASSERT(bInserted);
+
+    // Set formula in A10.
+    m_pDoc->SetString(ScAddress(0,9,0), "=SUM(MyRange)");
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,9,0)));
+
+    ScRangeData* pData = m_pDoc->GetRangeName()->findByUpperName("MYRANGE");
+    CPPUNIT_ASSERT(pData);
+    OUString aSymbol;
+    pData->GetSymbol(aSymbol, m_pDoc->GetGrammar());
+    CPPUNIT_ASSERT_EQUAL(OUString("$Test.$B$2:$B$4"), aSymbol);
+
+    // Move B2:B4 to D3.
+    ScDocFunc& rFunc = getDocShell().GetDocFunc();
+    bool bMoved = rFunc.MoveBlock(ScRange(1,1,0,1,3,0), ScAddress(3,2,0), true, true, false, true);
+    CPPUNIT_ASSERT(bMoved);
+
+    // The named range should have moved as well.
+    pData->GetSymbol(aSymbol, m_pDoc->GetGrammar());
+    CPPUNIT_ASSERT_EQUAL(OUString("$Test.$D$3:$D$5"), aSymbol);
+
+    // The value of A10 should remain unchanged.
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,9,0)));
+
+    SfxUndoManager* pUndoMgr = m_pDoc->GetUndoManager();
+    CPPUNIT_ASSERT(pUndoMgr);
+
+    // Undo and check.
+    pUndoMgr->Undo();
+
+    pData = m_pDoc->GetRangeName()->findByUpperName("MYRANGE");
+    CPPUNIT_ASSERT(pData);
+    pData->GetSymbol(aSymbol, m_pDoc->GetGrammar());
+    CPPUNIT_ASSERT_EQUAL(OUString("$Test.$B$2:$B$4"), aSymbol);
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,9,0)));
+
+    // Redo and check.
+    pUndoMgr->Redo();
+
+    pData = m_pDoc->GetRangeName()->findByUpperName("MYRANGE");
+    CPPUNIT_ASSERT(pData);
+    pData->GetSymbol(aSymbol, m_pDoc->GetGrammar());
+    CPPUNIT_ASSERT_EQUAL(OUString("$Test.$D$3:$D$5"), aSymbol);
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,9,0)));
+
+    // Undo again to bring it back to the initial condition, and clear the undo buffer.
+    pUndoMgr->Undo();
+    pUndoMgr->Clear();
+
+    // Add an identical formula to A11 and make a formula group over A10:A11.
+    m_pDoc->SetString(ScAddress(0,10,0), "=SUM(MyRange)");
+    ScFormulaCell* pFC = m_pDoc->GetFormulaCell(ScAddress(0,9,0));
+    CPPUNIT_ASSERT(pFC);
+    CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(9), pFC->GetSharedTopRow());
+    CPPUNIT_ASSERT_EQUAL(static_cast<SCROW>(2), pFC->GetSharedLength());
+
+    // Move B2:B4 to D3 again.
+    bMoved = rFunc.MoveBlock(ScRange(1,1,0,1,3,0), ScAddress(3,2,0), true, true, false, true);
+    CPPUNIT_ASSERT(bMoved);
+
+    // Values of A10 and A11 should remain the same.
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,9,0)));
+    CPPUNIT_ASSERT_EQUAL(6.0, m_pDoc->GetValue(ScAddress(0,10,0)));
+
+    m_pDoc->DeleteTab(0);
+}
+
 void Test::testFormulaRefUpdateNamedExpressionExpandRef()
 {
     m_pDoc->InsertTab(0, "Test");
commit 8bf22e7fe67b3321e2b2dcc8fb98882ef0eef4ca
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date:   Wed Mar 26 00:10:47 2014 +0100

    related fdo#74981: add a unittest for kicks
    
    Change-Id: I817948d053640b04dab8aaee85e914757b83cfa1

diff --git a/sw/qa/extras/uiwriter/uiwriter.cxx b/sw/qa/extras/uiwriter/uiwriter.cxx
index 5aef75b..3b7cfcf 100644
--- a/sw/qa/extras/uiwriter/uiwriter.cxx
+++ b/sw/qa/extras/uiwriter/uiwriter.cxx
@@ -11,6 +11,7 @@
 #include <wrtsh.hxx>
 #include <crsskip.hxx>
 #include <shellio.hxx>
+#include <expfld.hxx>
 
 #include "UndoManager.hxx"
 
@@ -30,6 +31,7 @@ public:
     void testExportRTF();
     void testFdo75110();
     void testFdo75898();
+    void testFdo74981();
 
     CPPUNIT_TEST_SUITE(SwUiWriterTest);
     CPPUNIT_TEST(testReplaceForward);
@@ -40,6 +42,7 @@ public:
     CPPUNIT_TEST(testExportRTF);
     CPPUNIT_TEST(testFdo75110);
     CPPUNIT_TEST(testFdo75898);
+    CPPUNIT_TEST(testFdo74981);
     CPPUNIT_TEST_SUITE_END();
 
 private:
@@ -232,6 +235,32 @@ void SwUiWriterTest::testExportRTF()
     CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aData.indexOf("ccc"));
 }
 
+void SwUiWriterTest::testFdo74981()
+{
+    // create a document with an input field
+    SwDoc* pDoc = createDoc();
+    SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+    SwInputField aField((SwInputFieldType*)pWrtShell->GetFldType(0, RES_INPUTFLD), OUString("foo"), OUString("bar"), 0, 0);
+    pWrtShell->Insert(aField);
+
+    // expect hints
+    SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+    SwTxtNode* pTxtNode = aIdx.GetNode().GetTxtNode();
+    CPPUNIT_ASSERT(pTxtNode->HasHints());
+
+    // go to the begin of the paragraph and split this node
+    pWrtShell->Left(CRSR_SKIP_CHARS, false, 100, false);
+    pWrtShell->SplitNode();
+
+    // expect only the second paragraph to have hints
+    aIdx = SwNodeIndex(pDoc->GetNodes().GetEndOfContent(), -1);
+    pTxtNode = aIdx.GetNode().GetTxtNode();
+    CPPUNIT_ASSERT(pTxtNode->HasHints());
+    aIdx--;
+    pTxtNode = aIdx.GetNode().GetTxtNode();
+    CPPUNIT_ASSERT(!pTxtNode->HasHints());
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(SwUiWriterTest);
 CPPUNIT_PLUGIN_IMPLEMENT();
 
commit 25b1d86643e5e60a3aa79d7ee3bd3e3828dc96b1
Author: Andras Timar <andras.timar at collabora.com>
Date:   Tue Mar 25 21:25:55 2014 +0100

    typo: bussiness -> business
    
    Change-Id: Id8851321571072df8042a08c2bf350891a9dfcc4

diff --git a/odk/examples/DevelopersGuide/examples.html b/odk/examples/DevelopersGuide/examples.html
index 6a9a750..1bb5d27 100644
--- a/odk/examples/DevelopersGuide/examples.html
+++ b/odk/examples/DevelopersGuide/examples.html
@@ -745,7 +745,7 @@ for the image shrink component and instantiates it.</td>
  title="link to Components/DialogComponent/DialogComponent.odt">DialogComponent.odt</a></td>
                   <td class="cell80">Document containing Basic code to
                   instantiate the Dialog Components and a Dialog containing
-                  controls with events bound to methods supported by the 
+                  controls with events bound to methods supported by the
                   Dialog Component.</td>
                 </tr>
               </tbody>
@@ -2259,7 +2259,7 @@ form controls.</a></td>
  title="link to Forms/DataAwareness.java">DataAwareness</a></td>
                   <td class="cell80">This class implements the basic
 example for a form working on a database. Two tables will be created
-and a form (writer document) with a bussiness example will fill its
+and a form (writer document) with a business example will fill its
 fields from these tables.</td>
                 </tr>
                 <tr>
@@ -2805,37 +2805,37 @@ for the Office application.</td>
                   <td class="cell80">Description</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/DialogDocument.java" title="link to GUI/DialogDocument.java">DialogDocument</a></td>
                   <td class="cell80">A sample showing how to display an office document in a dialog window.</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/Messagebox.java" title="link to GUI/MessageBox.java">MessageBox</a></td>
                   <td class="cell80">A sample showing how to display a simple message box.</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/UnoDialogSample.java" title="link to GUI/UnoDialogSample.java">UnoDialogSample</a></td>
                   <td class="cell80">A sample showing how to create various controls in a dialog (fixed text field, currency field, progress bar, fixed line, group box, edit field, time field, date field, pattern field, numeric field, progressbar, check box, radio button, list box, combo box, formatted field, file control, button control, roadmap control)</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/UnoDialogSample2.java" title="link to GUI/UnoDialogSample2.java">UnoDialogSample2</a></td>
                   <td class="cell80">A dialog sample showing how to use a roadmap control.</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/UnoMenu.java" title="link to GUI/UnoMenu.java">UnoMenu</a></td>
                   <td class="cell80">A sample showing a top window with some menus.</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/UnoMenu2.java" title="link to GUI/UnoMenu2.java">UnoMenu2</a></td>
                   <td class="cell80">A dialog sample showing how to use or work with a context menu.</td>
                 </tr>
                 <tr>
-                  <td class="cell20"><img src="../../docs/images/bluball.gif"/> 
+                  <td class="cell20"><img src="../../docs/images/bluball.gif"/>
 <a href="./GUI/ImageControlSample.java" title="link to GUI/ImageControlSample.java">ImageControlSample2</a></td>
                   <td class="cell80">Dialog sample showing how to use an image control.</td>
                 </tr>
diff --git a/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py b/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py
index 3d29aeb..77f20e4 100644
--- a/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py
+++ b/wizards/com/sun/star/wizards/letter/LetterWizardDialogResources.py
@@ -198,13 +198,13 @@ class LetterWizardDialogResources(object):
         self.reslblTitle6_value = \
             oWizardResource.getResText(
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 58)
-                
+
         #Create a Dictionary for the constants values.
         self.dictConstants = {
         "#subjectconst#" : oWizardResource.getResText(
             LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 59)}
 
-        #Create a dictionary for localising the bussiness templates
+        #Create a dictionary for localising the business templates
         self.dictBusinessTemplate = {
         "Elegant" : oWizardResource.getResText(
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 60),
@@ -212,7 +212,7 @@ class LetterWizardDialogResources(object):
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 61),
         "Office" : oWizardResource.getResText(
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 62)}
-                
+
         #Create a dictionary for localising the official templates
         self.dictOfficialTemplate = {
         "Elegant" : oWizardResource.getResText(
@@ -223,7 +223,7 @@ class LetterWizardDialogResources(object):
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 62)}
 
         #Create a dictionary for localising the private templates
-        self.dictPrivateTemplate = {                
+        self.dictPrivateTemplate = {
         "Bottle" : oWizardResource.getResText(
                 LetterWizardDialogResources.RID_LETTERWIZARDDIALOG_START + 63),
         "Mail" : oWizardResource.getResText(
@@ -240,7 +240,7 @@ class LetterWizardDialogResources(object):
         self.resTemplateDescription = \
             oWizardResource.getResText(
                 LetterWizardDialogResources.RID_RID_COMMON_START + 20)
-        
+
         self.RoadmapLabels = oWizardResource.getResArray(
             LetterWizardDialogResources.RID_LETTERWIZARDROADMAP_START + 1, 6)
         self.SalutationLabels = oWizardResource.getResArray(
commit e27cc864be4d18d5bf307c58ebf1c1aa4ef90078
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 25 20:41:52 2014 +0100

    added unit test for .xls BIFF enhanced protection
    
    Change-Id: I8f218f8f8ce12525b4c9995567d2864baa610c0b

diff --git a/sc/qa/unit/data/xls/enhanced-protection.xls b/sc/qa/unit/data/xls/enhanced-protection.xls
new file mode 100644
index 0000000..00cc6e6
Binary files /dev/null and b/sc/qa/unit/data/xls/enhanced-protection.xls differ
diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx
index 4de62d1..9d049f7 100644
--- a/sc/qa/unit/filters-test.cxx
+++ b/sc/qa/unit/filters-test.cxx
@@ -31,6 +31,7 @@
 #include "drwlayer.hxx"
 #include "userdat.hxx"
 #include "formulacell.hxx"
+#include "tabprotection.hxx"
 
 #include <svx/svdpage.hxx>
 
@@ -69,6 +70,7 @@ public:
     void testSharedFormulaXLS();
     void testSharedFormulaXLSX();
     void testLegacyCellAnchoredRotatedShape();
+    void testEnhancedProtectionXLS();
 
     CPPUNIT_TEST_SUITE(ScFiltersTest);
     CPPUNIT_TEST(testCVEs);
@@ -82,6 +84,7 @@ public:
     CPPUNIT_TEST(testSharedFormulaXLS);
     CPPUNIT_TEST(testSharedFormulaXLSX);
     CPPUNIT_TEST(testLegacyCellAnchoredRotatedShape);
+    CPPUNIT_TEST(testEnhancedProtectionXLS);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -491,6 +494,23 @@ void ScFiltersTest::testLegacyCellAnchoredRotatedShape()
     }
 }
 
+void ScFiltersTest::testEnhancedProtectionXLS()
+{
+    ScDocShellRef xDocSh = loadDoc("enhanced-protection.", XLS);
+    CPPUNIT_ASSERT(xDocSh.Is());
+    ScDocument* pDoc = xDocSh->GetDocument();
+
+    const ScTableProtection* pProt = pDoc->GetTabProtection(0);
+
+    CPPUNIT_ASSERT( !pProt->isBlockEditable( ScRange( 0, 0, 0, 0, 0, 0)));  // locked
+    CPPUNIT_ASSERT(  pProt->isBlockEditable( ScRange( 0, 1, 0, 0, 1, 0)));  // editable without password
+    CPPUNIT_ASSERT(  pProt->isBlockEditable( ScRange( 0, 2, 0, 0, 2, 0)));  // editable without password
+    CPPUNIT_ASSERT( !pProt->isBlockEditable( ScRange( 0, 3, 0, 0, 3, 0)));  // editable with password "foo"
+    CPPUNIT_ASSERT(  pProt->isBlockEditable( ScRange( 0, 1, 0, 0, 2, 0)));  // union of two different editables
+    CPPUNIT_ASSERT( !pProt->isBlockEditable( ScRange( 0, 0, 0, 0, 1, 0)));  // union of locked and editable
+    CPPUNIT_ASSERT( !pProt->isBlockEditable( ScRange( 0, 2, 0, 0, 3, 0)));  // union of editable and password editable
+}
+
 ScFiltersTest::ScFiltersTest()
       : ScBootstrapFixture( "/sc/qa/unit/data" )
 {
commit 98c6b4149e46eec6aaee5b64f2fa40678589dd4b
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Mar 25 20:39:10 2014 +0100

    union of a to be edited range may be distributed over two different records
    
    Change-Id: I1d0047e04394a79134b3333eef35ba0cfe6a8ca1

diff --git a/sc/source/core/data/tabprotection.cxx b/sc/source/core/data/tabprotection.cxx
index 161cf65..a8aa278 100644
--- a/sc/source/core/data/tabprotection.cxx
+++ b/sc/source/core/data/tabprotection.cxx
@@ -434,6 +434,33 @@ bool ScTableProtectionImpl::isBlockEditable( const ScRange& rRange ) const
         }
     }
 
+    // Ranges may even be distributed over different protection records, for
+    // example if they are assigned different names, and can have different
+    // passwords. Combine the ones that can be edited.
+    /* TODO: once we handle passwords, remember a successful unlock at
+     * ScEnhancedProtection so we can use that here. */
+    ScRangeList aRangeList;
+    for (::std::vector<ScEnhancedProtection>::const_iterator it(maEnhancedProtection.begin()),
+            itEnd(maEnhancedProtection.end()); it != itEnd; ++it)
+    {
+        if ((*it).maSecurityDescriptor.empty() && (*it).maRangeList.Is())
+        {
+            // Ranges are editable if no password is assigned.
+            if (!(*it).mnPasswordVerifier)
+            {
+                const ScRangeList& rRanges = *(*it).maRangeList;
+                size_t nRanges = rRanges.size();
+                for (size_t i=0; i < nRanges; ++i)
+                {
+                    aRangeList.Append( *rRanges[i]);
+                }
+            }
+        }
+    }
+    ScRangeList aResultList( aRangeList.GetIntersectedRange( rRange));
+    if (aResultList.size() == 1 && *aResultList[0] == rRange)
+        return true;
+
     return false;
 }
 
commit cdb473b00a7d56c43df568708c069fa31a07f0a6
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Mar 25 18:48:45 2014 +0100

    Remove now unused tools/debug.hxx profiling functionality
    
    Change-Id: I13adca8c2f929c8a9226b26ef57b26363dfdf0b3

diff --git a/include/tools/debug.hxx b/include/tools/debug.hxx
index 12b9ad4..5574d0d 100644
--- a/include/tools/debug.hxx
+++ b/include/tools/debug.hxx
@@ -54,7 +54,6 @@ typedef void (*DbgTestSolarMutexProc)();
 #define DBG_TEST_XTOR_REPORT        (0x00000008)
 #define DBG_TEST_XTOR_TRACE         (0x00000010)
 
-#define DBG_TEST_PROFILING          (0x01000000)
 #define DBG_TEST_RESOURCE           (0x02000000)
 #define DBG_TEST_DIALOG             (0x04000000)
 #define DBG_TEST_BOLDAPPFONT        (0x08000000)
@@ -96,7 +95,6 @@ struct DbgDataType
 // Dbg prototypes
 #define DBG_FUNC_DEBUGSTART         1
 #define DBG_FUNC_DEBUGEND           2
-#define DBG_FUNC_GLOBALDEBUGEND     3
 #define DBG_FUNC_GETDATA            4
 #define DBG_FUNC_SAVEDATA           5
 #define DBG_FUNC_SETPRINTMSGBOX     6
@@ -121,11 +119,6 @@ inline void DbgDebugEnd()
     DbgFunc( DBG_FUNC_DEBUGEND );
 }
 
-inline void DbgGlobalDebugEnd()
-{
-    DbgFunc( DBG_FUNC_GLOBALDEBUGEND );
-}
-
 inline void DbgSetPrintMsgBox( DbgPrintLine pProc )
 {
     DbgFunc( DBG_FUNC_SETPRINTMSGBOX, (void*)(long)pProc );
@@ -246,13 +239,6 @@ TOOLS_DLLPUBLIC void DbgOutTypef( sal_uInt16 nOutType, const sal_Char* pFStr, ..
 
 // Dbg test functions
 
-#define DBG_PROF_START              1
-#define DBG_PROF_STOP               2
-#define DBG_PROF_CONTINUE           3
-#define DBG_PROF_PAUSE              4
-
-TOOLS_DLLPUBLIC void DbgProf( sal_uInt16 nAction, DbgDataType* );
-
 #define DBG_XTOR_CTOR               1
 #define DBG_XTOR_DTOR               2
 #define DBG_XTOR_CHKTHIS            3
@@ -300,19 +286,6 @@ public:
 
 #define DBG_DEBUGSTART()                    DbgDebugStart()
 #define DBG_DEBUGEND()                      DbgDebugEnd()
-#define DBG_GLOBALDEBUGEND()                DbgGlobalDebugEnd()
-
-#define DBG_PROFSTART( aName )                      \
-    DbgProf( DBG_PROF_START, DBG_FUNC( aName ) )
-
-#define DBG_PROFSTOP( aName )                       \
-    DbgProf( DBG_PROF_STOP, DBG_FUNC( aName ) )
-
-#define DBG_PROFCONTINUE( aName )                   \
-    DbgProf( DBG_PROF_CONTINUE, DBG_FUNC( aName ) )
-
-#define DBG_PROFPAUSE( aName )                      \
-    DbgProf( DBG_PROF_PAUSE, DBG_FUNC( aName ) )
 
 #define DBG_CTOR( aName, fTest )                    \
     DbgXtorObj aDbgXtorObj( DBG_FUNC( aName ),      \
@@ -385,17 +358,11 @@ typedef const sal_Char* (*DbgUsr)(const void* pThis );
 
 #define DBG_DEBUGSTART() ((void)0)
 #define DBG_DEBUGEND() ((void)0)
-#define DBG_GLOBALDEBUGEND() ((void)0)
 
 #define DBG_NAME( aName )
 #define DBG_NAMEEX( aName )
 #define DBG_NAMEEX_VISIBILITY( aName, vis )
 
-#define DBG_PROFSTART( aName ) ((void)0)
-#define DBG_PROFSTOP( aName ) ((void)0)
-#define DBG_PROFCONTINUE( aName ) ((void)0)
-#define DBG_PROFPAUSE( aName ) ((void)0)
-
 #define DBG_CTOR( aName, fTest ) ((void)0)
 #define DBG_DTOR( aName, fTest ) ((void)0)
 #define DBG_CHKTHIS( aName, fTest ) ((void)0)
diff --git a/include/tools/tools.h b/include/tools/tools.h
index 342a606..bf0eb32 100644
--- a/include/tools/tools.h
+++ b/include/tools/tools.h
@@ -25,7 +25,6 @@
 // Methoden, die von VCL gerufen werden muessen
 TOOLS_DLLPUBLIC void InitTools();
 TOOLS_DLLPUBLIC void DeInitTools();
-TOOLS_DLLPUBLIC void GlobalDeInitTools();
 
 #endif
 
diff --git a/tools/source/debug/debug.cxx b/tools/source/debug/debug.cxx
index 1797ab8..0836459 100644
--- a/tools/source/debug/debug.cxx
+++ b/tools/source/debug/debug.cxx
@@ -84,18 +84,6 @@ public:
 
 #define DBG_MAXNAME     28
 
-struct ProfType
-{
-    sal_uIntPtr             nCount;
-    sal_uIntPtr             nTime;
-    sal_uIntPtr             nMinTime;
-    sal_uIntPtr             nMaxTime;
-    sal_uIntPtr             nStart;
-    sal_uIntPtr             nContinueTime;
-    sal_uIntPtr             nContinueStart;
-    sal_Char                aName[DBG_MAXNAME+1];
-};
-
 struct XtorType
 {
     sal_uIntPtr             nCtorCalls;
@@ -116,7 +104,6 @@ struct DebugData
     DbgPrintLine            pDbgAbort;
     ::std::vector< DbgPrintLine >
                             aDbgPrintUserChannels;
-    PointerList*            pProfList;
     PointerList*            pXtorList;
     DbgTestSolarMutexProc   pDbgTestSolarMutex;
 
@@ -125,7 +112,6 @@ struct DebugData
         ,pDbgPrintMsgBox( NULL )
         ,pDbgPrintWindow( NULL )
         ,pDbgAbort( NULL )
-        ,pProfList( NULL )
         ,pXtorList( NULL )
         ,pDbgTestSolarMutex( NULL )
     {
@@ -225,28 +211,6 @@ static bool ImplCoreDump()
     return true;
 }
 
-static sal_uIntPtr ImplGetPerfTime()
-{
-#if defined( WNT )
-    return (sal_uIntPtr)GetTickCount();
-#else
-    static sal_uIntPtr    nImplTicksPerSecond = 0;
-    static double   dImplTicksPerSecond;
-    sal_uIntPtr           nTicks = (sal_uIntPtr)clock();
-
-    if ( !nImplTicksPerSecond )
-    {
-        nImplTicksPerSecond = CLOCKS_PER_SEC;
-        dImplTicksPerSecond = nImplTicksPerSecond;
-    }
-
-    double fTicks = nTicks;
-    fTicks *= 1000;
-    fTicks /= dImplTicksPerSecond;
-    return (sal_uIntPtr)fTicks;
-#endif
-}
-
 typedef FILE*       FILETYPE;
 #define FileOpen    fopen
 #define FileRead    fread
@@ -648,7 +612,6 @@ static DebugData* GetDebugData()
                 // elements of the [test] section
                 if ( eCurrentSection == eTest )
                 {
-                    lcl_tryReadConfigFlag( pLine, nLineLength, "profiling", &aDebugData.aDbgData.nTestFlags, DBG_TEST_PROFILING );
                     lcl_tryReadConfigFlag( pLine, nLineLength, "resources", &aDebugData.aDbgData.nTestFlags, DBG_TEST_RESOURCE );
                     lcl_tryReadConfigFlag( pLine, nLineLength, "dialog", &aDebugData.aDbgData.nTestFlags, DBG_TEST_DIALOG );
                     lcl_tryReadConfigFlag( pLine, nLineLength, "bold_app_font", &aDebugData.aDbgData.nTestFlags, DBG_TEST_BOLDAPPFONT );
@@ -675,8 +638,6 @@ static DebugData* GetDebugData()
         // initialize debug data
         if ( aDebugData.aDbgData.nTestFlags & DBG_TEST_XTOR )
             aDebugData.pXtorList = new PointerList;
-        if ( aDebugData.aDbgData.nTestFlags & DBG_TEST_PROFILING )
-            aDebugData.pProfList = new PointerList;
     }
 
     return &aDebugData;
@@ -868,61 +829,12 @@ static void DebugDeInit()
     // for global variables will crash,
     // as pointer alignment won't work then.
     pData->aDbgData.nTraceOut   = nOldOut;
-    pData->aDbgData.nTestFlags &= DBG_TEST_PROFILING;
+    pData->aDbgData.nTestFlags = 0;
     pData->aDbgPrintUserChannels.clear();
     pData->pDbgPrintWindow      = NULL;
     ImplDbgDeInitLock();
 }
 
-static void DebugGlobalDeInit()
-{
-    DebugData*  pData = GetDebugData();
-    sal_uIntPtr       i;
-    sal_uIntPtr       nCount;
-    sal_uIntPtr       nOldOut;
-
-    // Output statistics trace data to file
-    nOldOut = pData->aDbgData.nTraceOut;
-    pData->aDbgData.nTraceOut = DBG_OUT_FILE;
-
-    // output profile liste
-    if ( pData->pProfList && pData->pProfList->Count() )
-    {
-        DbgOutf( "------------------------------------------------------------------------------" );
-        DbgOutf( "Profiling Report" );
-        DbgOutf( "------------------------------------------------------------------------------" );
-        DbgOutf( "%-25s : %-9s : %-6s : %-6s : %-6s : %-9s :",
-                 "Prof-List (ms)", "Time", "Min", "Max", "Ave", "Count" );
-        DbgOutf( "--------------------------:-----------:--------:--------:--------:-----------:" );
-        for( i = 0, nCount = pData->pProfList->Count(); i < nCount; i++ )
-        {
-            ProfType* pProfData = (ProfType*)pData->pProfList->Get( i );
-            sal_uIntPtr nAve = pProfData->nTime / pProfData->nCount;
-            DbgOutf( "%-25s : %9lu : %6lu : %6lu : %6lu : %9lu :",
-                     pProfData->aName, pProfData->nTime,
-                     pProfData->nMinTime, pProfData->nMaxTime, nAve,
-                     pProfData->nCount );
-        }
-        DbgOutf( "==============================================================================" );
-    }
-
-    // free profile list
-    if ( pData->pProfList )
-    {
-        for( i = 0, nCount = pData->pProfList->Count(); i < nCount; i++ )
-        {
-            ProfType* pProfData = (ProfType*)pData->pProfList->Get( i );
-            delete pProfData;
-        }
-        delete pData->pProfList;
-        pData->pProfList = NULL;
-    }
-
-    // disable profiling flags
-    pData->aDbgData.nTraceOut   = nOldOut;
-    pData->aDbgData.nTestFlags &= ~DBG_TEST_PROFILING;
-}
-
 void ImpDbgOutfBuf( sal_Char* pBuf, const sal_Char* pFStr, ... )
 {
     va_list pList;
@@ -996,10 +908,6 @@ void* DbgFunc( sal_uInt16 nAction, void* pParam )
                 DebugDeInit();
                 break;
 
-            case DBG_FUNC_GLOBALDEBUGEND:
-                DebugGlobalDeInit();
-                break;
-
             case DBG_FUNC_SETPRINTMSGBOX:
                 pDebugData->pDbgPrintMsgBox = (DbgPrintLine)(long)pParam;
                 break;
@@ -1046,7 +954,6 @@ void* DbgFunc( sal_uInt16 nAction, void* pParam )
 
                 lcl_lineFeed( pIniFile );
                 lcl_startSection( pIniFile, eTest );
-                lcl_writeConfigFlag( pIniFile, "profiling", pData->nTestFlags, DBG_TEST_PROFILING );
                 lcl_writeConfigFlag( pIniFile, "resources", pData->nTestFlags, DBG_TEST_RESOURCE );
                 lcl_writeConfigFlag( pIniFile, "dialog", pData->nTestFlags, DBG_TEST_DIALOG );
                 lcl_writeConfigFlag( pIniFile, "bold_app_font", pData->nTestFlags, DBG_TEST_BOLDAPPFONT );
@@ -1094,96 +1001,6 @@ DbgChannelId DbgRegisterUserChannel( DbgPrintLine pProc )
     return (DbgChannelId)( pData->aDbgPrintUserChannels.size() - 1 + DBG_OUT_USER_CHANNEL_0 );
 }
 
-void DbgProf( sal_uInt16 nAction, DbgDataType* pDbgData )
-{
-    DebugData* pData = ImplGetDebugData();
-
-    if ( !(pData->aDbgData.nTestFlags & DBG_TEST_PROFILING) )
-        return;
-
-    ProfType*   pProfData = (ProfType*)pDbgData->pData;
-    sal_uIntPtr       nTime;
-    if ( (nAction != DBG_PROF_START) && !pProfData )
-    {
-        SAL_WARN(
-            "tools.debug",
-            "DBG_PROF...() without DBG_PROFSTART(): " << pDbgData->pName);
-        return;
-    }
-
-    switch ( nAction )
-    {
-        case DBG_PROF_START:
-            if ( !pDbgData->pData )
-            {
-                pDbgData->pData = (void*)new ProfType;
-                pProfData = (ProfType*)pDbgData->pData;
-                strncpy( pProfData->aName, pDbgData->pName, DBG_MAXNAME );
-                pProfData->aName[DBG_MAXNAME] = '\0';
-                pProfData->nCount           = 0;
-                pProfData->nTime            = 0;
-                pProfData->nMinTime         = 0xFFFFFFFF;
-                pProfData->nMaxTime         = 0;
-                pProfData->nStart           = 0xFFFFFFFF;
-                pProfData->nContinueTime    = 0;
-                pProfData->nContinueStart   = 0xFFFFFFFF;
-                pData->pProfList->Add( (void*)pProfData );
-            }
-
-            if ( pProfData->nStart == 0xFFFFFFFF )
-            {
-                pProfData->nStart = ImplGetPerfTime();
-                pProfData->nCount++;
-            }
-            break;
-
-        case DBG_PROF_STOP:
-            nTime = ImplGetPerfTime();
-
-            if ( pProfData->nStart == 0xFFFFFFFF )
-            {
-                SAL_WARN(
-                    "tools.debug", "DBG_PROF...() without DBG_PROFSTART()");
-                return;
-            }
-
-            if ( pProfData->nContinueStart != 0xFFFFFFFF )
-            {
-                pProfData->nContinueTime += ImplGetPerfTime() - pProfData->nContinueStart;
-                pProfData->nContinueStart = 0xFFFFFFFF;
-            }
-
-            nTime -= pProfData->nStart;
-            nTime -= pProfData->nContinueTime;
-
-            if ( nTime < pProfData->nMinTime )
-                pProfData->nMinTime = nTime;
-
-            if ( nTime > pProfData->nMaxTime )
-                pProfData->nMaxTime = nTime;
-
-            pProfData->nTime += nTime;
-
-            pProfData->nStart         = 0xFFFFFFFF;
-            pProfData->nContinueTime  = 0;
-            pProfData->nContinueStart = 0xFFFFFFFF;
-            break;
-
-        case DBG_PROF_CONTINUE:
-            if ( pProfData->nContinueStart != 0xFFFFFFFF )
-            {
-                pProfData->nContinueTime += ImplGetPerfTime() - pProfData->nContinueStart;
-                pProfData->nContinueStart = 0xFFFFFFFF;
-            }
-            break;
-
-        case DBG_PROF_PAUSE:
-            if ( pProfData->nContinueStart == 0xFFFFFFFF )
-                pProfData->nContinueStart = ImplGetPerfTime();
-            break;
-    }
-}
-
 void DbgXtor( DbgDataType* pDbgData, sal_uInt16 nAction, const void* pThis,
               DbgUsr fDbgUsr )
 {
@@ -1486,7 +1303,6 @@ void DbgOutf( const sal_Char* pFStr, ... )
 
 void* DbgFunc( sal_uInt16, void* ) { return NULL; }
 
-void DbgProf( sal_uInt16, DbgDataType* ) {}
 void DbgXtor( DbgDataType*, sal_uInt16, const void*, DbgUsr ) {}
 
 void DbgOutTypef( sal_uInt16, const sal_Char*, ... ) {}
diff --git a/tools/source/generic/toolsin.cxx b/tools/source/generic/toolsin.cxx
index eb549d8..e2bdf91 100644
--- a/tools/source/generic/toolsin.cxx
+++ b/tools/source/generic/toolsin.cxx
@@ -31,9 +31,4 @@ void DeInitTools()
     DBG_DEBUGEND();
 }
 
-void GlobalDeInitTools()
-{
-    DBG_GLOBALDEBUGEND();
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/app/dbggui.cxx b/vcl/source/app/dbggui.cxx
index 26010b5..614b6c7 100644
--- a/vcl/source/app/dbggui.cxx
+++ b/vcl/source/app/dbggui.cxx
@@ -80,13 +80,6 @@ static const sal_Char* pDbgHelpText[] =
 "\nOther tests and macros\n",
 "------------------------------------------\n",
 "\n",
-"Profiling\n",
-"DBG_PROFSTART() / DBG_PROFSTOP() / DBG_PROFCONTINUE() / DBG_PROFPAUSE() "
-"are evaluated and at the end of the program the number of run throughs "
-"and the time this took (including calls to children) in milliseconds is "
-"output. These macros can be used to check the same function runs over the "
-"entire development period, for example the startup speed. The registered name "
-"\n",
 "Resources\n",
 "In case of resource errors an error dialog is produced before the "
 "exception handler is called.\n",
@@ -370,7 +363,6 @@ private:
     CheckBox        maXtorTrace;
     GroupBox        maBox1;
 
-    CheckBox        maProf;
     CheckBox        maRes;
     CheckBox        maDialog;
     CheckBox        maBoldAppFont;
@@ -554,7 +546,6 @@ DbgDialog::DbgDialog() :
     maXtorReport( this ),
     maXtorTrace( this ),
     maBox1( this ),
-    maProf( this ),
     maRes( this ),
     maDialog( this ),
     maBoldAppFont( this ),
@@ -636,15 +627,6 @@ DbgDialog::DbgDialog() :
     }
 
     {
-    maProf.Show();
-    maProf.SetText("~Profiling");
-    if ( pData->nTestFlags & DBG_TEST_PROFILING )
-        maProf.Check( true );
-    maProf.SetPosSizePixel( LogicToPixel( Point( 10, 95 ), aAppMap ),
-                            aButtonSize );
-    }
-
-    {
     maRes.Show();
     maRes.SetText("~Resourcen");
     if ( pData->nTestFlags & DBG_TEST_RESOURCE )
@@ -885,9 +867,6 @@ IMPL_LINK( DbgDialog, ClickHdl, Button*, pButton )
         if ( maXtorTrace.IsChecked() )
             aData.nTestFlags |= DBG_TEST_XTOR_TRACE;
 
-        if ( maProf.IsChecked() )
-            aData.nTestFlags |= DBG_TEST_PROFILING;
-
         if ( maRes.IsChecked() )
             aData.nTestFlags |= DBG_TEST_RESOURCE;
 
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index 6d449df..110e7d4 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -205,7 +205,6 @@ Application::~Application()
     DeInitSalData();
     ImplGetSVData()->mpApp = NULL;
     ImplDestroySVData();
-    GlobalDeInitTools();
 }
 
 bool Application::QueryExit()
commit 62a8fa8fce9c7446a8ec95375b2001058d686619
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Mar 25 18:44:09 2014 +0100

    Remove legacy DBG_PROFSART/STOP calls
    
    ...probably better done with callgrind, if still relevant at all.
    
    Change-Id: I2be614c953d41625f7e11ee7881c2f897ee703d0


... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list