diff options
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"> |