[Libreoffice-commits] core.git: Branch 'feature/gsoc19-chart-style' - chart2/inc chart2/Library_chartcore.mk chart2/source
chart2/Library_chartcore.mk|1 chart2/inc/ChartModel.hxx |3 ++ chart2/inc/ChartStyle.hxx | 48 + chart2/source/tools/ChartStyle.cxx | 45 ++ 4 files changed, 97 insertions(+) New commits: commit ec10ed9f9b09586706f5c9447c2a12d4ac579157 Author: Gagandeep Singh AuthorDate: Tue Jul 9 13:35:35 2019 +0530 Commit: Markus Mohrhard CommitDate: Thu Jul 11 14:51:24 2019 +0200 ChartStyle class for XChartStyle interface Change-Id: I8b2cf62e9791f70739d6973aab96c344cb3c3ffb Reviewed-on: https://gerrit.libreoffice.org/75308 Reviewed-by: Markus Mohrhard Tested-by: Markus Mohrhard diff --git a/chart2/Library_chartcore.mk b/chart2/Library_chartcore.mk index 7fb53e142906..03af73cdbd02 100644 --- a/chart2/Library_chartcore.mk +++ b/chart2/Library_chartcore.mk @@ -177,6 +177,7 @@ $(eval $(call gb_Library_add_exception_objects,chartcore,\ chart2/source/tools/CachedDataSequence \ chart2/source/tools/CharacterProperties \ chart2/source/tools/ChartModelHelper \ + chart2/source/tools/ChartStyle \ chart2/source/tools/ChartTypeHelper \ chart2/source/tools/ChartViewHelper \ chart2/source/tools/ColorPerPointHelper \ diff --git a/chart2/inc/ChartModel.hxx b/chart2/inc/ChartModel.hxx index 3693d66fe16d..00d5a6b3c1c2 100644 --- a/chart2/inc/ChartModel.hxx +++ b/chart2/inc/ChartModel.hxx @@ -37,6 +37,7 @@ #include #include #include +#include #include // public API @@ -169,6 +170,8 @@ private: css::uno::Reference< css::container::XNameAccess> m_xXMLNamespaceMap; +css::uno::Reference< css::chart2::XChartStyle > m_xChartStyle; + private: //private methods diff --git a/chart2/inc/ChartStyle.hxx b/chart2/inc/ChartStyle.hxx new file mode 100644 index ..9062612f912c --- /dev/null +++ b/chart2/inc/ChartStyle.hxx @@ -0,0 +1,48 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_CHART2_SOURCE_INC_CHARTSTYLE_HXX +#define INCLUDED_CHART2_SOURCE_INC_CHARTSTYLE_HXX + +#include +#include + +namespace chart2 +{ +class ChartStyle : public css::chart2::XChartStyle +{ +public: +ChartStyle(); +virtual ~ChartStyle(); + +// _ XChartStyle _ +virtual css::uno::Reference +SAL_CALL getStyleForObject(const sal_Int16 nChartObjectType) override; + +private: +sal_Int16 m_nNumObjects; + +std::vector> m_xChartStyle; +}; + +} // namespace chart2 + +// INCLUDED_CHART2_SOURCE_INC_CHARTSTYLE_HXX +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/tools/ChartStyle.cxx b/chart2/source/tools/ChartStyle.cxx new file mode 100644 index ..d9fba1520999 --- /dev/null +++ b/chart2/source/tools/ChartStyle.cxx @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include +#include +#include + +namespace chart2 +{ + +ChartStyle::ChartStyle() +: m_nNumObjects( css::chart2::ChartObjectType::UNKNOWN ) +, m_xChartStyle( std::vector< css::uno::Reference < css::beans::XPropertySet > >( m_nNumObjects, css::uno::Reference < css::beans::XPropertySet > ())) +{ +} + +ChartStyle::~ChartStyle() {} + +css::uno::Reference<
[Libreoffice-commits] core.git: Branch 'feature/gsoc19-chart-style' - offapi/com
offapi/com/sun/star/chart2/ChartObjectType.idl | 14 +- 1 file changed, 13 insertions(+), 1 deletion(-) New commits: commit 5bd17a98d32dda88aaf3abe00cff6f84fe0f3482 Author: Gagandeep Singh AuthorDate: Fri Jul 5 16:31:44 2019 +0530 Commit: Markus Mohrhard CommitDate: Sun Jul 7 14:09:32 2019 +0200 Populating the ChartObjectType.idl Change-Id: I253f720d7afc749b1d35946a929f2a762ec03a54 Reviewed-on: https://gerrit.libreoffice.org/75107 Reviewed-by: Markus Mohrhard Tested-by: Markus Mohrhard diff --git a/offapi/com/sun/star/chart2/ChartObjectType.idl b/offapi/com/sun/star/chart2/ChartObjectType.idl index c84c99b661ef..eb86b14eb4e0 100644 --- a/offapi/com/sun/star/chart2/ChartObjectType.idl +++ b/offapi/com/sun/star/chart2/ChartObjectType.idl @@ -14,7 +14,19 @@ module com { module sun { module star { module chart2 { constants ChartObjectType { -const short TITLE = 0; +const short AXIS = 0; +const short BASE_COORD = 1; +const short DIAGRAM = 2; +const short DATA_POINT = 3; +const short DATA_SERIES = 4; +const short GRID = 5; +const short FORMATTED = 6; +const short LEGEND = 7; +const short PAGE = 8; +const short STOCK = 9; +const short TITLE = 10; +const short WALL = 11; +const short UNKNOWN = 12; }; }; }; }; }; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Changes to 'feature/gsoc19-chart-style'
New branch 'feature/gsoc19-chart-style' available with the following commits: commit c1bd744553d3fd33c46ecfe8da435c4bbdee74f3 Author: Gagandeep Singh Date: Fri Jun 21 16:58:06 2019 +0530 [WIP] Core Structures for Chart Styles Implementation Change-Id: I2e96606184b895d572eabdfbac1539a2881e3541 ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: sc/inc sc/source sc/uiconfig sc/UIConfig_scalc.mk
sc/UIConfig_scalc.mk|1 sc/inc/strings.hrc |2 sc/source/ui/app/inputwin.cxx | 122 ++-- sc/source/ui/inc/inputwin.hxx |4 + sc/source/ui/inc/tabvwsh.hxx|3 sc/source/ui/inc/viewfunc.hxx |8 +- sc/source/ui/view/cellsh1.cxx |2 sc/source/ui/view/tabvwshc.cxx | 10 +-- sc/source/ui/view/viewfun2.cxx | 87 sc/uiconfig/scalc/ui/autosum.ui | 49 10 files changed, 213 insertions(+), 75 deletions(-) New commits: commit 0ec98930888ee9f29032d12185baefc71da8489f Author: Gagandeep Singh AuthorDate: Mon Apr 1 16:50:18 2019 +0530 Commit: Dennis Francis CommitDate: Sun Apr 21 19:31:07 2019 +0200 bug tdf#120697 add drop down containing formulas in autosum button in calc Change-Id: I1da8116ba2f6073bec153979282161fbaa286427 Reviewed-on: https://gerrit.libreoffice.org/70058 Tested-by: Jenkins Reviewed-by: Dennis Francis diff --git a/sc/UIConfig_scalc.mk b/sc/UIConfig_scalc.mk index a80f9d2ea791..a091655403b4 100644 --- a/sc/UIConfig_scalc.mk +++ b/sc/UIConfig_scalc.mk @@ -88,6 +88,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/scalc,\ sc/uiconfig/scalc/ui/allheaderfooterdialog \ sc/uiconfig/scalc/ui/analysisofvariancedialog \ sc/uiconfig/scalc/ui/autoformattable \ + sc/uiconfig/scalc/ui/autosum \ sc/uiconfig/scalc/ui/cellprotectionpage \ sc/uiconfig/scalc/ui/changesourcedialog \ sc/uiconfig/scalc/ui/chardialog \ diff --git a/sc/inc/strings.hrc b/sc/inc/strings.hrc index 39873fcf46a1..dcceddab3190 100644 --- a/sc/inc/strings.hrc +++ b/sc/inc/strings.hrc @@ -177,7 +177,7 @@ #define SCSTR_QHELP_BTNCALC NC_("SCSTR_QHELP_BTNCALC", "Function Wizard") #define SCSTR_QHELP_BTNOK NC_("SCSTR_QHELP_BTNOK", "Accept") #define SCSTR_QHELP_BTNCANCEL NC_("SCSTR_QHELP_BTNCANCEL", "Cancel") -#define SCSTR_QHELP_BTNSUM NC_("SCSTR_QHELP_BTNSUM", "Sum") +#define SCSTR_QHELP_BTNSUM NC_("SCSTR_QHELP_BTNSUM", "Autosum") #define SCSTR_QHELP_BTNEQUAL NC_("SCSTR_QHELP_BTNEQUAL", "Formula") #define SCSTR_QHELP_EXPAND_FORMULA NC_("SCSTR_QHELP_EXPAND_FORMULA", "Expand Formula Bar") #define SCSTR_QHELP_COLLAPSE_FORMULA NC_("SCSTR_QHELP_COLLAPSE_FORMULA", "Collapse Formula Bar") diff --git a/sc/source/ui/app/inputwin.cxx b/sc/source/ui/app/inputwin.cxx index e38febfda9f6..a54332c9a4af 100644 --- a/sc/source/ui/app/inputwin.cxx +++ b/sc/source/ui/app/inputwin.cxx @@ -62,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -183,12 +184,13 @@ ScInputWindow::ScInputWindow( vcl::Window* pParent, const SfxBindings* pBind ) : InsertWindow(1, aWndPos.get(), ToolBoxItemBits::NONE, 0); InsertSeparator (1); InsertItem (SID_INPUT_FUNCTION, Image(StockImage::Yes, RID_BMP_INPUT_FUNCTION), ToolBoxItemBits::NONE, 2); -InsertItem (SID_INPUT_SUM, Image(StockImage::Yes, RID_BMP_INPUT_SUM), ToolBoxItemBits::NONE, 3); +InsertItem (SID_INPUT_SUM, Image(StockImage::Yes, RID_BMP_INPUT_SUM), ToolBoxItemBits::DROPDOWNONLY, 3); InsertItem (SID_INPUT_EQUAL,Image(StockImage::Yes, RID_BMP_INPUT_EQUAL), ToolBoxItemBits::NONE, 4); InsertItem (SID_INPUT_CANCEL, Image(StockImage::Yes, RID_BMP_INPUT_CANCEL), ToolBoxItemBits::NONE, 5); InsertItem (SID_INPUT_OK, Image(StockImage::Yes, RID_BMP_INPUT_OK), ToolBoxItemBits::NONE, 6); InsertSeparator (7); InsertWindow(7, , ToolBoxItemBits::NONE, 8); +SetDropdownClickHdl( LINK( this, ScInputWindow, DropdownClickHdl )); aWndPos ->SetQuickHelpText(ScResId(SCSTR_QHELP_POSWND)); aWndPos ->SetHelpId (HID_INSWIN_POS); @@ -329,45 +331,6 @@ void ScInputWindow::Select() aTextWindow.Invalidate(); // Or else the Selection remains break; -case SID_INPUT_SUM: -{ -ScTabViewShell* pViewSh = dynamic_cast( SfxViewShell::Current() ); -if ( pViewSh ) -{ -bool bSubTotal = false; -bool bRangeFinder = false; -const OUString aFormula = pViewSh->DoAutoSum(bRangeFinder, bSubTotal); -if (!aFormula.isEmpty()) -{ -SetFuncString( aFormula ); -if (bRangeFinder && pScMod->IsEditMode()) -{ -ScInputHandler* pHdl = pScMod->GetInputHdl( pViewSh ); -if ( pHdl ) -{ -pHdl->InitRangeFinder( aFormula ); - -//! SetSelection at the InputHandler? -
[Libreoffice-commits] core.git: Branch 'feature/chart-style-experiment-markus' - 7 commits - chart2/inc chart2/source chart2/uiconfig offapi/com
chart2/inc/ChartModel.hxx |1 chart2/source/controller/sidebar/Chart2PanelFactory.cxx |2 chart2/source/controller/sidebar/ChartAreaPanel.cxx |4 chart2/source/controller/sidebar/ChartElementsPanel.cxx | 15 - chart2/source/controller/sidebar/ChartElementsPanel.hxx |2 chart2/source/controller/sidebar/ChartStylesPanel.cxx | 226 +--- chart2/source/controller/sidebar/ChartStylesPanel.hxx | 45 ++- chart2/source/inc/ChartStyle.hxx| 21 + chart2/source/inc/OPropertySet.hxx | 10 chart2/source/model/main/ChartModel.cxx | 10 chart2/source/model/main/ChartModel_Persistence.cxx |6 chart2/source/model/main/PageBackground.cxx |4 chart2/source/model/main/Title.cxx |4 chart2/source/model/main/Wall.cxx |3 chart2/source/tools/ChartStyle.cxx | 165 +++ chart2/source/tools/ImplOPropertySet.cxx|5 chart2/source/tools/ImplOPropertySet.hxx|2 chart2/source/tools/OPropertySet.cxx| 29 ++ chart2/uiconfig/ui/sidebarelements.ui | 39 -- chart2/uiconfig/ui/sidebarstyle.ui | 113 ++-- offapi/com/sun/star/chart2/XChartStyle.idl |9 offapi/com/sun/star/chart2/XChartStyled.idl |1 22 files changed, 517 insertions(+), 199 deletions(-) New commits: commit 890506b378b1d1866af4cf149457ca9fe691fff5 Author: Gagandeep Singh AuthorDate: Tue Aug 27 02:28:41 2019 +0800 Commit: Markus Mohrhard CommitDate: Tue Aug 27 02:28:41 2019 +0800 move default values from hard formatting to style Change-Id: I240e58573d7cf24c2f2f36193a47dfce4bd92a11 diff --git a/chart2/source/model/main/PageBackground.cxx b/chart2/source/model/main/PageBackground.cxx index 8af5148a268b..c44840ea4974 100644 --- a/chart2/source/model/main/PageBackground.cxx +++ b/chart2/source/model/main/PageBackground.cxx @@ -57,10 +57,6 @@ static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) { ::chart::LinePropertiesHelper::AddDefaultsToMap( rOutMap ); ::chart::FillProperties::AddDefaultsToMap( rOutMap ); - -// override other defaults -::chart::PropertyHelper::setPropertyValue< sal_Int32 >( rOutMap, ::chart::FillProperties::PROP_FILL_COLOR, 0xff ); -::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::LinePropertiesHelper::PROP_LINE_STYLE, drawing::LineStyle_NONE ); } } // anonymous namespace diff --git a/chart2/source/model/main/Title.cxx b/chart2/source/model/main/Title.cxx index 4cd876f0c2b0..8e7f20906d11 100644 --- a/chart2/source/model/main/Title.cxx +++ b/chart2/source/model/main/Title.cxx @@ -173,10 +173,6 @@ static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) // own properties ::chart::PropertyHelper::setPropertyValueDefault< double >( rOutMap, PROP_TITLE_TEXT_ROTATION, 0.0 ); ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_TITLE_TEXT_STACKED, false ); - -// override other defaults -::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::FillProperties::PROP_FILL_STYLE, drawing::FillStyle_NONE ); -::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::LinePropertiesHelper::PROP_LINE_STYLE, drawing::LineStyle_NONE ); } } // anonymous namespace diff --git a/chart2/source/model/main/Wall.cxx b/chart2/source/model/main/Wall.cxx index 537709a7255f..ba9852b2b21d 100644 --- a/chart2/source/model/main/Wall.cxx +++ b/chart2/source/model/main/Wall.cxx @@ -53,9 +53,6 @@ static void lcl_AddDefaultsToMap( ::chart::tPropertyValueMap & rOutMap ) { ::chart::LinePropertiesHelper::AddDefaultsToMap( rOutMap ); ::chart::FillProperties::AddDefaultsToMap( rOutMap ); - -// override other defaults -::chart::PropertyHelper::setPropertyValue( rOutMap, ::chart::LinePropertiesHelper::PROP_LINE_STYLE, drawing::LineStyle_NONE ); } } // anonymous namespace diff --git a/chart2/source/tools/ChartStyle.cxx b/chart2/source/tools/ChartStyle.cxx index 3130bd99f45d..e8e4d8052c0b 100644 --- a/chart2/source/tools/ChartStyle.cxx +++ b/chart2/source/tools/ChartStyle.cxx @@ -168,6 +168,12 @@ void ChartStyle::register_styles() *chart::title::StaticTitleInfo::get(), *chart::title::StaticTitleInfoHelper::get(), *chart::title::StaticTitleDefaults::get()); +css::uno::Reference xTitleStyle += m_xChartStyle[css::chart2::ChartObjectType::TITLE]; + +xTitleStyle->setPropertyValue("LineStyle", css::uno::Any(css::drawing::LineStyle_NONE)); +xTitleStyle->setPropertyValue("FillStyle", css::uno::Any(css::drawing::FillStyle_NONE)); + m_xChartStyle[css::chart2::ChartObjectType::WALL] = new ChartObjectStyle( *chart::wall::StaticWallInfo::get(), *chart::wall::StaticWallInfoHelper::get(),
[Libreoffice-commits] core.git: Branch 'feature/chart-style-experiment-markus' - chart2/source
chart2/source/inc/Axis.hxx | 165 ++ chart2/source/inc/DataPoint.hxx | 134 +++ chart2/source/inc/DataSeries.hxx| 216 chart2/source/inc/Diagram.hxx | 248 chart2/source/inc/GridProperties.hxx| 133 +++ chart2/source/inc/PageBackground.hxx| 134 +++ chart2/source/inc/StockBar.hxx | 125 ++ chart2/source/inc/Title.hxx | 143 chart2/source/inc/Wall.hxx | 78 +--- chart2/source/model/inc/DataSeries.hxx | 172 --- chart2/source/model/inc/Diagram.hxx | 186 - chart2/source/model/inc/StockBar.hxx| 96 -- chart2/source/model/main/Axis.cxx | 148 +++- chart2/source/model/main/Axis.hxx | 138 --- chart2/source/model/main/DataPoint.cxx | 59 ++ chart2/source/model/main/DataPoint.hxx | 116 - chart2/source/model/main/DataSeries.cxx | 82 + chart2/source/model/main/Diagram.cxx| 120 + chart2/source/model/main/GridProperties.cxx | 97 -- chart2/source/model/main/GridProperties.hxx | 105 --- chart2/source/model/main/PageBackground.cxx | 97 -- chart2/source/model/main/PageBackground.hxx | 104 --- chart2/source/model/main/StockBar.cxx | 93 -- chart2/source/model/main/Title.cxx | 133 ++- chart2/source/model/main/Title.hxx | 115 chart2/source/model/main/Wall.cxx | 95 -- chart2/source/tools/ChartStyle.cxx | 43 27 files changed, 1797 insertions(+), 1578 deletions(-) New commits: commit fea89c0e865c83e048d2221f897d1f6a4046505c Author: Gagandeep Singh AuthorDate: Thu Aug 8 16:17:00 2019 +0530 Commit: Markus Mohrhard CommitDate: Sat Aug 10 02:30:54 2019 +0800 This updates the chart model elements to be used with ChartStyles.cxx Based on Markus' patch: d63f1346a6c5767d995c787fe2bb36b023a64788 Change-Id: I712793f7299ca33773b004711400af4e070c6485 diff --git a/chart2/source/inc/Axis.hxx b/chart2/source/inc/Axis.hxx new file mode 100644 index ..0d93322c1465 --- /dev/null +++ b/chart2/source/inc/Axis.hxx @@ -0,0 +1,165 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#ifndef INCLUDED_CHART2_SOURCE_MODEL_MAIN_AXIS_HXX +#define INCLUDED_CHART2_SOURCE_MODEL_MAIN_AXIS_HXX + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +namespace chart +{ +namespace impl +{ +typedef ::cppu::WeakImplHelper +Axis_Base; +} + +namespace axis +{ +struct StaticAxisInfo_Initializer +{ +css::uno::Reference* operator()(); +}; + +struct StaticAxisInfo +: public rtl::StaticAggregate, + StaticAxisInfo_Initializer> +{ +}; + +struct StaticAxisDefaults_Initializer +{ +::chart::tPropertyValueMap* operator()(); +}; + +struct StaticAxisDefaults +: public rtl::StaticAggregate<::chart::tPropertyValueMap, StaticAxisDefaults_Initializer> +{ +}; + +struct StaticAxisInfoHelper_Initializer +{ +::cppu::OPropertyArrayHelper* operator()(); +}; + +struct StaticAxisInfoHelper +: public rtl::StaticAggregate<::cppu::OPropertyArrayHelper, StaticAxisInfoHelper_Initializer> +{ +}; +} + +class Axis final : public MutexContainer, public impl::Axis_Base, public ::property::OPropertySet +{ +public: +explicit Axis(); +virtual ~Axis() override; + +/// XServiceInfo declarations +virtual OUString SAL_CALL getImplementationName() override; +virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override; +virtual css::uno::Sequence SAL_CALL getSupportedServiceNames() override; + +/// merge XInterface implementations +DECLARE_XINTERFACE() +/// merge XTypeProvider implementations +DECLARE_XTYPEPROVIDER() + +private: +