chart2/source/controller/inc/ChartController.hxx                   |    3 +
 chart2/source/controller/main/ChartController.cxx                  |    5 +
 chart2/source/controller/main/ChartController_Insert.cxx           |   26 
++++++++++
 chart2/source/controller/main/ChartController_Window.cxx           |   20 
+++++--
 chart2/source/controller/main/ControllerCommandDispatch.cxx        |    8 +++
 officecfg/registry/data/org/openoffice/Office/UI/ChartCommands.xcu |   11 ++++
 6 files changed, 68 insertions(+), 5 deletions(-)

New commits:
commit 8ae4366c3e2a7fbdde276b5e4229d5a9424ef841
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jul 1 23:03:53 2022 +0200
Commit:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
CommitDate: Fri Jul 1 23:03:53 2022 +0200

    chart2: InsertDataTable and DeleteDataTable for context menu
    
    Change-Id: I8ef0698252209af01b0741a59dec70f845f0c965

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 79b29bb63c52..080b6bb44928 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 c50749c42a87..c300b7f2e23d 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..5ddb9409cfa0 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->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">

Reply via email to