summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chart2/source/controller/inc/ChartController.hxx3
-rw-r--r--chart2/source/controller/main/ChartController.cxx5
-rw-r--r--chart2/source/controller/main/ChartController_Insert.cxx26
-rw-r--r--chart2/source/controller/main/ChartController_Window.cxx20
-rw-r--r--chart2/source/controller/main/ControllerCommandDispatch.cxx8
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu11
6 files changed, 68 insertions, 5 deletions
diff --git a/chart2/source/controller/inc/ChartController.hxx b/chart2/source/controller/inc/ChartController.hxx
index f0f53c8b8990..81f3070403bc 100644
--- a/chart2/source/controller/inc/ChartController.hxx
+++ b/chart2/source/controller/inc/ChartController.hxx
@@ -440,6 +440,9 @@ private:
void executeDispatch_OpenLegendDialog();
void executeDispatch_InsertAxes();
void executeDispatch_InsertGrid();
+
+ void executeDispatch_InsertDataTable();
+ void executeDispatch_DeleteDataTable();
void executeDispatch_OpenInsertDataTableDialog();
void executeDispatch_InsertMenu_DataLabels();
diff --git a/chart2/source/controller/main/ChartController.cxx b/chart2/source/controller/main/ChartController.cxx
index 70b15cf0fd04..5b5751dd5040 100644
--- a/chart2/source/controller/main/ChartController.cxx
+++ b/chart2/source/controller/main/ChartController.cxx
@@ -1225,6 +1225,10 @@ void SAL_CALL ChartController::dispatch(
this->executeDispatch_DeleteMajorGrid();
else if( aCommand == "DeleteMinorGrid" )
this->executeDispatch_DeleteMinorGrid();
+ else if( aCommand == "InsertDataTable" )
+ this->executeDispatch_InsertDataTable();
+ else if( aCommand == "DeleteDataTable" )
+ this->executeDispatch_DeleteDataTable();
//format objects
else if( aCommand == "FormatSelection" )
this->executeDispatch_ObjectProperties();
@@ -1634,6 +1638,7 @@ const o3tl::sorted_vector< OUString >& ChartController::impl_getAvailableCommand
"DeleteXErrorBars", "DeleteYErrorBars",
"DeleteDataLabels", "DeleteDataLabel",
"InsertMenuDataTable",
+ "InsertDataTable", "DeleteDataTable",
//format objects
"FormatSelection", "TransformDialog",
"DiagramType", "View3D",
diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx
index b1b0598d5070..99b3e74fffac 100644
--- a/chart2/source/controller/main/ChartController_Insert.cxx
+++ b/chart2/source/controller/main/ChartController_Insert.cxx
@@ -224,6 +224,32 @@ void ChartController::executeDispatch_OpenInsertDataTableDialog()
}
}
+void ChartController::executeDispatch_InsertDataTable()
+{
+ SolarMutexGuard aGuard;
+ rtl::Reference<Diagram> xDiagram = getFirstDiagram();
+ auto xDataTable = xDiagram->getDataTable();
+ if (!xDataTable.is())
+ {
+ uno::Reference<chart2::XDataTable> xNewDataTable(new DataTable);
+ if (xNewDataTable.is())
+ {
+ xDiagram->setDataTable(xNewDataTable);
+ }
+ }
+}
+
+void ChartController::executeDispatch_DeleteDataTable()
+{
+ SolarMutexGuard aGuard;
+ rtl::Reference<Diagram> xDiagram = getFirstDiagram();
+ auto xDataTable = xDiagram->getDataTable();
+ if (xDataTable.is())
+ {
+ xDiagram->setDataTable(uno::Reference<chart2::XDataTable>());
+ }
+}
+
void ChartController::executeDispatch_InsertTitles()
{
UndoGuard aUndoGuard(
diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx
index 510420c91a2c..b21a6b20ae22 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -1020,14 +1020,18 @@ void ChartController::execute_Command( const CommandEvent& rCEvt )
aMenuName = m_pDrawViewWrapper->IsTextEdit() ? std::u16string_view( u"drawtext" ) : std::u16string_view( u"draw" );
else
{
+ ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() );
+
// todo: the context menu should be specified by an xml file in uiconfig
sal_Int16 nUniqueId = 1;
- lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Cut" );
- lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Copy" );
- lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Paste" );
- xPopupMenu->insertSeparator( -1 );
+ if (eObjectType != OBJECTTYPE_DATA_TABLE)
+ {
+ lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Cut" );
+ lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Copy" );
+ lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:Paste" );
+ xPopupMenu->insertSeparator( -1 );
+ }
- ObjectType eObjectType = ObjectIdentifier::getObjectType( m_aSelection.getSelectedCID() );
rtl::Reference< Diagram > xDiagram = getFirstDiagram();
OUString aFormatCommand( lcl_getFormatCommandForObjectCID( m_aSelection.getSelectedCID() ) );
@@ -1219,8 +1223,14 @@ void ChartController::execute_Command( const CommandEvent& rCEvt )
lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMajorGrid" );
if( bIsMinorGridVisible && !bIsSecondaryAxis )
lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:DeleteMinorGrid" );
+ if (bIsAxisVisible)
+ lcl_insertMenuCommand(xPopupMenu, nUniqueId++, ".uno:InsertDataTable");
}
}
+ else if (eObjectType == OBJECTTYPE_DATA_TABLE)
+ {
+ lcl_insertMenuCommand(xPopupMenu, nUniqueId++, ".uno:DeleteDataTable");
+ }
if( eObjectType == OBJECTTYPE_DATA_STOCK_LOSS )
lcl_insertMenuCommand( xPopupMenu, nUniqueId++, ".uno:FormatStockGain" );
diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx b/chart2/source/controller/main/ControllerCommandDispatch.cxx
index 828d862f4306..294a1cec0354 100644
--- a/chart2/source/controller/main/ControllerCommandDispatch.cxx
+++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx
@@ -360,6 +360,8 @@ struct ModelState
bool bSupportsStatistics;
bool bSupportsAxes;
+
+ bool bDataTable = false;
};
ModelState::ModelState() :
@@ -440,6 +442,8 @@ void ModelState::update( const rtl::Reference<::chart::ChartModel> & xModel )
bHasLegend = LegendHelper::hasLegend( xDiagram );
bHasWall = DiagramHelper::isSupportingFloorAndWall( xDiagram );
bHasFloor = bHasWall && bIsThreeD;
+
+ bDataTable = xDiagram.is() && xDiagram->getDataTable().is();
}
bool ModelState::HasAnyAxis() const
@@ -695,6 +699,10 @@ void ControllerCommandDispatch::updateCommandAvailability()
m_aCommandAvailability[ ".uno:FormatMinorGrid" ] = bIsWritable;
m_aCommandAvailability[ ".uno:InsertMinorGrid" ] = bIsWritable;
m_aCommandAvailability[ ".uno:DeleteMinorGrid" ] = bIsWritable;
+
+ // data table
+ m_aCommandAvailability[ ".uno:InsertDataTable" ] = bIsWritable && bModelStateIsValid && !m_apModelState->bDataTable;
+ m_aCommandAvailability[ ".uno:DeleteDataTable" ] = bIsWritable && bModelStateIsValid && m_apModelState->bDataTable;
}
bool ControllerCommandDispatch::commandAvailable( const OUString & rCommand )
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu
index cb4a5dc728d0..453b96cf86c5 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu
@@ -504,6 +504,17 @@
<value xml:lang="en-US">Format Single Data Label...</value>
</prop>
</node>
+ <!-- data table -->
+ <node oor:name=".uno:InsertDataTable" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Insert Data Table</value>
+ </prop>
+ </node>
+ <node oor:name=".uno:DeleteDataTable" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Delete Data Table</value>
+ </prop>
+ </node>
<!-- data series and point -->
<node oor:name=".uno:FormatDataSeries" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">