extensions/source/propctrlr/formcomponenthandler.cxx |   71 ++++++++++++++++++-
 extensions/source/propctrlr/formcomponenthandler.hxx |    2 
 extensions/source/propctrlr/formstrings.hxx          |    1 
 3 files changed, 72 insertions(+), 2 deletions(-)

New commits:
commit 57352dce995c98d1282484d02c38ed2132b091f5
Author:     Deepanshu Sharma <129deepanshusha...@gmail.com>
AuthorDate: Sat Mar 22 15:50:02 2025 +0530
Commit:     Sahil Gautam <sahil.gau...@collabora.com>
CommitDate: Tue Jun 24 18:15:11 2025 +0200

    tdf#56676 disable form properties when they are not available for change
    
    Change-Id: I0f1b8f1a2b4ed93fc59849e0b2b66a1a9af7af8b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183219
    Tested-by: Jenkins
    Reviewed-by: Sahil Gautam <sahil.gau...@collabora.com>

diff --git a/extensions/source/propctrlr/formcomponenthandler.cxx 
b/extensions/source/propctrlr/formcomponenthandler.cxx
index 4b44f69757c3..195a08e0b81d 100644
--- a/extensions/source/propctrlr/formcomponenthandler.cxx
+++ b/extensions/source/propctrlr/formcomponenthandler.cxx
@@ -54,6 +54,7 @@
 #include <com/sun/star/form/XGridColumnFactory.hpp>
 #include <com/sun/star/sdb/SQLContext.hpp>
 #include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+#include <com/sun/star/sdbcx/Privilege.hpp>
 #include <com/sun/star/sdb/XQueriesSupplier.hpp>
 #include <com/sun/star/form/ListSourceType.hpp>
 #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
@@ -1513,6 +1514,9 @@ namespace pcr
             if ( !_bFirstTimeInit && m_bHaveCommand )
                 lcl_rebuildAndResetCommand( _rxInspectorUI, this );
             aDependentProperties.push_back( PROPERTY_ID_COMMAND );
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWADDITIONS);
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWEDITS);
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWDELETIONS);
             break;  // case PROPERTY_ID_COMMANDTYPE
 
         // ----- DataSourceName -----
@@ -1536,6 +1540,9 @@ namespace pcr
         case PROPERTY_ID_COMMAND:
             aDependentProperties.push_back( PROPERTY_ID_FILTER );
             aDependentProperties.push_back( PROPERTY_ID_SORT );
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWADDITIONS);
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWEDITS);
+            aDependentProperties.push_back(PROPERTY_ID_ALLOWDELETIONS);
             if ( m_bComponentIsSubForm )
                 aDependentProperties.push_back( PROPERTY_ID_DETAILFIELDS );
             break;
@@ -1785,7 +1792,7 @@ namespace pcr
         }
     }
 
-    void FormComponentPropertyHandler::impl_updateDependentProperty_nothrow( 
PropertyId _nPropId, const Reference< XObjectInspectorUI >& _rxInspectorUI ) 
const
+    void FormComponentPropertyHandler::impl_updateDependentProperty_nothrow( 
PropertyId _nPropId, const Reference< XObjectInspectorUI >& _rxInspectorUI )
     {
         try
         {
@@ -1819,6 +1826,68 @@ namespace pcr
             }
             break;  // case PROPERTY_ID_STRINGITEMLIST
 
+            case PROPERTY_ID_ALLOWADDITIONS:
+            {
+                bool bEnable = false;
+                sal_Int32 nPrivileges = 0;
+                if 
(m_xComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_PRIVILEGES))
+                {
+                    m_xComponent->getPropertyValue(PROPERTY_PRIVILEGES) >>= 
nPrivileges;
+                    bEnable = (nPrivileges & css::sdbcx::Privilege::INSERT) != 
0;
+                }
+                _rxInspectorUI->enablePropertyUI(
+                    
impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWADDITIONS),
+                    bEnable
+                );
+                // Set value to false if disabled
+                if (!bEnable)
+                {
+                    
setPropertyValue(impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWADDITIONS),
 Any(false));
+                }
+            }
+            break;
+
+            case PROPERTY_ID_ALLOWEDITS:
+            {
+                bool bEnable = false;
+                sal_Int32 nPrivileges = 0;
+                if 
(m_xComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_PRIVILEGES))
+                {
+                    m_xComponent->getPropertyValue(PROPERTY_PRIVILEGES) >>= 
nPrivileges;
+                    bEnable = (nPrivileges & css::sdbcx::Privilege::UPDATE) != 
0;
+                }
+                _rxInspectorUI->enablePropertyUI(
+                    impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWEDITS),
+                    bEnable
+                );
+                // Set value to false if disabled
+                if (!bEnable)
+                {
+                    
setPropertyValue(impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWEDITS), 
Any(false));
+                }
+            }
+            break;
+
+            case PROPERTY_ID_ALLOWDELETIONS:
+            {
+                bool bEnable = false;
+                sal_Int32 nPrivileges = 0;
+                if 
(m_xComponent->getPropertySetInfo()->hasPropertyByName(PROPERTY_PRIVILEGES))
+                {
+                    m_xComponent->getPropertyValue(PROPERTY_PRIVILEGES) >>= 
nPrivileges;
+                    bEnable = (nPrivileges & css::sdbcx::Privilege::DELETE) != 
0;
+                }
+                _rxInspectorUI->enablePropertyUI(
+                    
impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWDELETIONS),
+                    bEnable
+                );
+                // Set value to false if disabled
+                if (!bEnable)
+                {
+                    
setPropertyValue(impl_getPropertyNameFromId_nothrow(PROPERTY_ID_ALLOWDELETIONS),
 Any(false));
+                }
+            }
+            break;
             // ----- TypedItemList -----
             case PROPERTY_ID_TYPEDITEMLIST:
             {
diff --git a/extensions/source/propctrlr/formcomponenthandler.hxx 
b/extensions/source/propctrlr/formcomponenthandler.hxx
index bc7367abbeae..81bb4b934f86 100644
--- a/extensions/source/propctrlr/formcomponenthandler.hxx
+++ b/extensions/source/propctrlr/formcomponenthandler.hxx
@@ -393,7 +393,7 @@ namespace pcr
             @param _rxInspectorUI
                 provides access to the property browser UI. Must not be 
<NULL/>.
         */
-        void impl_updateDependentProperty_nothrow( PropertyId _nPropId, const 
css::uno::Reference< css::inspection::XObjectInspectorUI >& _rxInspectorUI ) 
const;
+        void impl_updateDependentProperty_nothrow( PropertyId _nPropId, const 
css::uno::Reference< css::inspection::XObjectInspectorUI >& _rxInspectorUI );
 
         /** determines whether the given form has a valid data source 
signature.
 
diff --git a/extensions/source/propctrlr/formstrings.hxx 
b/extensions/source/propctrlr/formstrings.hxx
index 495e178f842e..d37cc98c226c 100644
--- a/extensions/source/propctrlr/formstrings.hxx
+++ b/extensions/source/propctrlr/formstrings.hxx
@@ -114,6 +114,7 @@ inline constexpr OUString PROPERTY_SHOW_SCROLLBARS = 
u"ShowScrollbars"_ustr;
 inline constexpr OUString PROPERTY_TABSTOP = u"Tabstop"_ustr;
 inline constexpr OUString PROPERTY_AUTOCOMPLETE = u"Autocomplete"_ustr;
 inline constexpr OUString PROPERTY_PRINTABLE = u"Printable"_ustr;
+inline constexpr OUString PROPERTY_PRIVILEGES = u"Privileges"_ustr;
 inline constexpr OUString PROPERTY_ECHO_CHAR = u"EchoChar"_ustr;
 inline constexpr OUString PROPERTY_ROWHEIGHT = u"RowHeight"_ustr;
 inline constexpr OUString PROPERTY_HELPTEXT = u"HelpText"_ustr;

Reply via email to